update to 6.6.0
This commit is contained in:
parent
a1bf107ddc
commit
c2762bc519
224
config
224
config
@ -1,8 +1,8 @@
|
||||
#
|
||||
# Automatically generated file; DO NOT EDIT.
|
||||
# Linux/x86 6.5.0 Kernel Configuration
|
||||
# Linux/x86 6.6.0 Kernel Configuration
|
||||
#
|
||||
CONFIG_CC_VERSION_TEXT="gcc (GCC) 13.2.1 20230730"
|
||||
CONFIG_CC_VERSION_TEXT="gcc (GCC) 13.2.1 20230801"
|
||||
CONFIG_CC_IS_GCC=y
|
||||
CONFIG_GCC_VERSION=130201
|
||||
CONFIG_CLANG_VERSION=0
|
||||
@ -305,7 +305,6 @@ CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
|
||||
CONFIG_KCMP=y
|
||||
CONFIG_RSEQ=y
|
||||
CONFIG_CACHESTAT_SYSCALL=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_GUEST_PERF_EVENTS=y
|
||||
|
||||
@ -319,6 +318,22 @@ CONFIG_PERF_EVENTS=y
|
||||
CONFIG_SYSTEM_DATA_VERIFICATION=y
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_TRACEPOINTS=y
|
||||
|
||||
#
|
||||
# Kexec and crash features
|
||||
#
|
||||
CONFIG_CRASH_CORE=y
|
||||
CONFIG_KEXEC_CORE=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_KEXEC_FILE=y
|
||||
CONFIG_KEXEC_SIG=y
|
||||
# CONFIG_KEXEC_SIG_FORCE is not set
|
||||
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
|
||||
CONFIG_KEXEC_JUMP=y
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_CRASH_HOTPLUG=y
|
||||
CONFIG_CRASH_MAX_MEMORY_RANGES=8192
|
||||
# end of Kexec and crash features
|
||||
# end of General setup
|
||||
|
||||
CONFIG_64BIT=y
|
||||
@ -492,8 +507,6 @@ CONFIG_X86_ESPFIX64=y
|
||||
CONFIG_X86_VSYSCALL_EMULATION=y
|
||||
CONFIG_X86_IOPL_IOPERM=y
|
||||
CONFIG_MICROCODE=y
|
||||
CONFIG_MICROCODE_INTEL=y
|
||||
CONFIG_MICROCODE_AMD=y
|
||||
# CONFIG_MICROCODE_LATE_LOADING is not set
|
||||
CONFIG_X86_MSR=y
|
||||
CONFIG_X86_CPUID=y
|
||||
@ -525,12 +538,14 @@ CONFIG_X86_PAT=y
|
||||
CONFIG_ARCH_USES_PG_UNCACHED=y
|
||||
CONFIG_X86_UMIP=y
|
||||
CONFIG_CC_HAS_IBT=n
|
||||
CONFIG_X86_CET=y
|
||||
CONFIG_X86_KERNEL_IBT=n
|
||||
CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
|
||||
# CONFIG_X86_INTEL_TSX_MODE_OFF is not set
|
||||
# CONFIG_X86_INTEL_TSX_MODE_ON is not set
|
||||
CONFIG_X86_INTEL_TSX_MODE_AUTO=y
|
||||
CONFIG_X86_SGX=y
|
||||
CONFIG_X86_USER_SHADOW_STACK=y
|
||||
CONFIG_EFI=y
|
||||
CONFIG_EFI_STUB=y
|
||||
CONFIG_EFI_HANDOVER_PROTOCOL=y
|
||||
@ -546,14 +561,16 @@ CONFIG_HZ_300=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
CONFIG_HZ=300
|
||||
CONFIG_SCHED_HRTICK=y
|
||||
CONFIG_KEXEC=y
|
||||
CONFIG_KEXEC_FILE=y
|
||||
CONFIG_ARCH_HAS_KEXEC_PURGATORY=y
|
||||
CONFIG_KEXEC_SIG=y
|
||||
# CONFIG_KEXEC_SIG_FORCE is not set
|
||||
CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
|
||||
CONFIG_CRASH_DUMP=y
|
||||
CONFIG_KEXEC_JUMP=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y
|
||||
CONFIG_ARCH_SELECTS_KEXEC_FILE=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_SIG_FORCE=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG=y
|
||||
CONFIG_ARCH_SUPPORTS_KEXEC_JUMP=y
|
||||
CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y
|
||||
CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y
|
||||
CONFIG_PHYSICAL_START=0x1000000
|
||||
CONFIG_RELOCATABLE=y
|
||||
CONFIG_RANDOMIZE_BASE=y
|
||||
@ -596,7 +613,6 @@ CONFIG_CPU_SRSO=y
|
||||
CONFIG_SLS=y
|
||||
# CONFIG_GDS_FORCE_MITIGATION is not set
|
||||
CONFIG_ARCH_HAS_ADD_PAGES=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
|
||||
#
|
||||
# Power management and ACPI options
|
||||
@ -811,12 +827,11 @@ CONFIG_AS_SHA1_NI=y
|
||||
CONFIG_AS_SHA256_NI=y
|
||||
CONFIG_AS_TPAUSE=y
|
||||
CONFIG_AS_GFNI=y
|
||||
CONFIG_AS_WRUSS=y
|
||||
|
||||
#
|
||||
# General architecture-dependent options
|
||||
#
|
||||
CONFIG_CRASH_CORE=y
|
||||
CONFIG_KEXEC_CORE=y
|
||||
CONFIG_HOTPLUG_SMT=y
|
||||
CONFIG_HOTPLUG_CORE_SYNC=y
|
||||
CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
|
||||
@ -914,6 +929,7 @@ CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMAP=y
|
||||
CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
|
||||
CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
|
||||
CONFIG_ARCH_WANT_PMD_MKWRITE=y
|
||||
CONFIG_HAVE_ARCH_SOFT_DIRTY=y
|
||||
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
|
||||
CONFIG_MODULES_USE_ELF_RELA=y
|
||||
@ -1142,6 +1158,7 @@ CONFIG_SLAB_FREELIST_RANDOM=y
|
||||
CONFIG_SLAB_FREELIST_HARDENED=y
|
||||
# CONFIG_SLUB_STATS is not set
|
||||
CONFIG_SLUB_CPU_PARTIAL=y
|
||||
# CONFIG_RANDOM_KMALLOC_CACHES is not set
|
||||
# end of SLAB allocator options
|
||||
|
||||
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
|
||||
@ -1150,7 +1167,8 @@ CONFIG_SPARSEMEM=y
|
||||
CONFIG_SPARSEMEM_EXTREME=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
|
||||
CONFIG_SPARSEMEM_VMEMMAP=y
|
||||
CONFIG_ARCH_WANT_OPTIMIZE_VMEMMAP=y
|
||||
CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y
|
||||
CONFIG_ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP=y
|
||||
CONFIG_HAVE_FAST_GUP=y
|
||||
CONFIG_NUMA_KEEP_MEMINFO=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
@ -1162,6 +1180,7 @@ CONFIG_MEMORY_HOTPLUG=y
|
||||
CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y
|
||||
CONFIG_MEMORY_HOTREMOVE=y
|
||||
CONFIG_MHP_MEMMAP_ON_MEMORY=y
|
||||
CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
|
||||
CONFIG_MEMORY_BALLOON=y
|
||||
@ -1192,7 +1211,6 @@ CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
|
||||
CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
|
||||
CONFIG_USE_PERCPU_NUMA_NODE_ID=y
|
||||
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
|
||||
CONFIG_FRONTSWAP=y
|
||||
CONFIG_CMA=y
|
||||
# CONFIG_CMA_DEBUG is not set
|
||||
CONFIG_CMA_DEBUGFS=y
|
||||
@ -1221,6 +1239,7 @@ CONFIG_VM_EVENT_COUNTERS=y
|
||||
# CONFIG_DMAPOOL_TEST is not set
|
||||
CONFIG_ARCH_HAS_PTE_SPECIAL=y
|
||||
CONFIG_MAPPING_DIRTY_HELPERS=y
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_SECRETMEM=y
|
||||
CONFIG_ANON_VMA_NAME=y
|
||||
CONFIG_USERFAULTFD=y
|
||||
@ -1245,6 +1264,7 @@ CONFIG_NET=y
|
||||
CONFIG_COMPAT_NETLINK_MESSAGES=y
|
||||
CONFIG_NET_INGRESS=y
|
||||
CONFIG_NET_EGRESS=y
|
||||
CONFIG_NET_XGRESS=y
|
||||
CONFIG_NET_REDIRECT=y
|
||||
CONFIG_SKB_EXTENSIONS=y
|
||||
|
||||
@ -2375,6 +2395,11 @@ CONFIG_MHI_BUS_PCI_GENERIC=m
|
||||
CONFIG_MHI_BUS_EP=m
|
||||
# end of Bus devices
|
||||
|
||||
#
|
||||
# Cache Drivers
|
||||
#
|
||||
# end of Cache Drivers
|
||||
|
||||
CONFIG_CONNECTOR=y
|
||||
CONFIG_PROC_EVENTS=y
|
||||
|
||||
@ -2406,6 +2431,7 @@ CONFIG_GOOGLE_CBMEM=m
|
||||
CONFIG_GOOGLE_COREBOOT_TABLE=m
|
||||
CONFIG_GOOGLE_MEMCONSOLE=m
|
||||
# CONFIG_GOOGLE_MEMCONSOLE_X86_LEGACY is not set
|
||||
CONFIG_GOOGLE_FRAMEBUFFER_COREBOOT=m
|
||||
CONFIG_GOOGLE_MEMCONSOLE_COREBOOT=m
|
||||
CONFIG_GOOGLE_VPD=m
|
||||
|
||||
@ -3016,6 +3042,7 @@ CONFIG_ATA_GENERIC=m
|
||||
CONFIG_PATA_LEGACY=m
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_MD=m
|
||||
CONFIG_MD_BITMAP_FILE=y
|
||||
CONFIG_MD_LINEAR=m
|
||||
CONFIG_MD_RAID0=m
|
||||
CONFIG_MD_RAID1=m
|
||||
@ -3129,6 +3156,7 @@ CONFIG_AMT=m
|
||||
CONFIG_MACSEC=m
|
||||
CONFIG_NETCONSOLE=m
|
||||
CONFIG_NETCONSOLE_DYNAMIC=y
|
||||
# CONFIG_NETCONSOLE_EXTENDED_LOG is not set
|
||||
CONFIG_NETPOLL=y
|
||||
CONFIG_NET_POLL_CONTROLLER=y
|
||||
CONFIG_NTB_NETDEV=m
|
||||
@ -3402,7 +3430,7 @@ CONFIG_MLX5_TC_CT=y
|
||||
CONFIG_MLX5_TC_SAMPLE=y
|
||||
CONFIG_MLX5_CORE_EN_DCB=y
|
||||
CONFIG_MLX5_CORE_IPOIB=y
|
||||
CONFIG_MLX5_EN_MACSEC=y
|
||||
CONFIG_MLX5_MACSEC=y
|
||||
CONFIG_MLX5_EN_IPSEC=y
|
||||
CONFIG_MLX5_EN_TLS=y
|
||||
CONFIG_MLX5_SW_STEERING=y
|
||||
@ -3603,9 +3631,11 @@ CONFIG_INTEL_XWAY_PHY=m
|
||||
CONFIG_LSI_ET1011C_PHY=m
|
||||
CONFIG_MARVELL_PHY=m
|
||||
CONFIG_MARVELL_10G_PHY=m
|
||||
CONFIG_MARVELL_88Q2XXX_PHY=m
|
||||
CONFIG_MARVELL_88X2222_PHY=m
|
||||
CONFIG_MAXLINEAR_GPHY=m
|
||||
CONFIG_MEDIATEK_GE_PHY=m
|
||||
# CONFIG_MEDIATEK_GE_SOC_PHY is not set
|
||||
CONFIG_MICREL_PHY=m
|
||||
CONFIG_MICROCHIP_T1S_PHY=m
|
||||
CONFIG_MICROCHIP_PHY=m
|
||||
@ -4002,6 +4032,8 @@ CONFIG_MT76_SDIO=m
|
||||
CONFIG_MT76x02_LIB=m
|
||||
CONFIG_MT76x02_USB=m
|
||||
CONFIG_MT76_CONNAC_LIB=m
|
||||
CONFIG_MT792x_LIB=m
|
||||
CONFIG_MT792x_USB=m
|
||||
CONFIG_MT76x0_COMMON=m
|
||||
CONFIG_MT76x0U=m
|
||||
CONFIG_MT76x0E=m
|
||||
@ -4445,6 +4477,7 @@ CONFIG_TOUCHSCREEN_ZFORCE=m
|
||||
CONFIG_TOUCHSCREEN_COLIBRI_VF50=m
|
||||
CONFIG_TOUCHSCREEN_ROHM_BU21023=m
|
||||
CONFIG_TOUCHSCREEN_IQS5XX=m
|
||||
CONFIG_TOUCHSCREEN_IQS7211=m
|
||||
CONFIG_TOUCHSCREEN_ZINITIX=m
|
||||
CONFIG_TOUCHSCREEN_HIMAX_HX83112B=m
|
||||
CONFIG_INPUT_MISC=y
|
||||
@ -4545,8 +4578,6 @@ CONFIG_HYPERV_KEYBOARD=m
|
||||
CONFIG_SERIO_GPIO_PS2=m
|
||||
CONFIG_USERIO=m
|
||||
CONFIG_GAMEPORT=m
|
||||
CONFIG_GAMEPORT_NS558=m
|
||||
CONFIG_GAMEPORT_L4=m
|
||||
CONFIG_GAMEPORT_EMU10K1=m
|
||||
CONFIG_GAMEPORT_FM801=m
|
||||
# end of Hardware I/O ports
|
||||
@ -4633,7 +4664,6 @@ CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_NONSTANDARD=y
|
||||
CONFIG_MOXA_INTELLIO=m
|
||||
CONFIG_MOXA_SMARTIO=m
|
||||
CONFIG_SYNCLINK_GT=m
|
||||
CONFIG_N_HDLC=m
|
||||
CONFIG_IPWIRELESS=m
|
||||
CONFIG_N_GSM=m
|
||||
@ -4703,7 +4733,6 @@ CONFIG_XILLYBUS_CLASS=m
|
||||
CONFIG_XILLYBUS=m
|
||||
CONFIG_XILLYBUS_PCIE=m
|
||||
CONFIG_XILLYUSB=m
|
||||
CONFIG_DDCCI=m
|
||||
# end of Character devices
|
||||
|
||||
#
|
||||
@ -4831,6 +4860,7 @@ CONFIG_SPI_AXI_SPI_ENGINE=m
|
||||
CONFIG_SPI_BITBANG=m
|
||||
CONFIG_SPI_BUTTERFLY=m
|
||||
CONFIG_SPI_CADENCE=m
|
||||
CONFIG_SPI_CS42L43=m
|
||||
CONFIG_SPI_DESIGNWARE=m
|
||||
CONFIG_SPI_DW_DMA=y
|
||||
CONFIG_SPI_DW_PCI=m
|
||||
@ -4898,6 +4928,7 @@ CONFIG_PTP_1588_CLOCK_INES=m
|
||||
CONFIG_PTP_1588_CLOCK_KVM=m
|
||||
CONFIG_PTP_1588_CLOCK_IDT82P33=m
|
||||
CONFIG_PTP_1588_CLOCK_IDTCM=m
|
||||
CONFIG_PTP_1588_CLOCK_MOCK=m
|
||||
CONFIG_PTP_1588_CLOCK_VMW=m
|
||||
CONFIG_PTP_1588_CLOCK_OCP=m
|
||||
CONFIG_PTP_DFL_TOD=m
|
||||
@ -4915,6 +4946,7 @@ CONFIG_PINCTRL_MCP23S08_I2C=m
|
||||
CONFIG_PINCTRL_MCP23S08_SPI=m
|
||||
CONFIG_PINCTRL_MCP23S08=m
|
||||
CONFIG_PINCTRL_SX150X=y
|
||||
CONFIG_PINCTRL_CS42L43=m
|
||||
CONFIG_PINCTRL_MADERA=m
|
||||
CONFIG_PINCTRL_CS47L15=y
|
||||
CONFIG_PINCTRL_CS47L35=y
|
||||
@ -4994,6 +5026,7 @@ CONFIG_GPIO_WS16C48=m
|
||||
# I2C GPIO expanders
|
||||
#
|
||||
CONFIG_GPIO_FXL6408=m
|
||||
CONFIG_GPIO_DS4520=m
|
||||
CONFIG_GPIO_MAX7300=m
|
||||
CONFIG_GPIO_MAX732X=m
|
||||
CONFIG_GPIO_PCA953X=m
|
||||
@ -5253,6 +5286,7 @@ CONFIG_SENSORS_GL520SM=m
|
||||
CONFIG_SENSORS_G760A=m
|
||||
CONFIG_SENSORS_G762=m
|
||||
CONFIG_SENSORS_HIH6130=m
|
||||
CONFIG_SENSORS_HS3001=m
|
||||
CONFIG_SENSORS_IBMAEM=m
|
||||
CONFIG_SENSORS_IBMPEX=m
|
||||
CONFIG_SENSORS_IIO_HWMON=m
|
||||
@ -5364,6 +5398,7 @@ CONFIG_SENSORS_MAX34440=m
|
||||
CONFIG_SENSORS_MAX8688=m
|
||||
CONFIG_SENSORS_MP2888=m
|
||||
CONFIG_SENSORS_MP2975=m
|
||||
CONFIG_SENSORS_MP2975_REGULATOR=y
|
||||
CONFIG_SENSORS_MP5023=m
|
||||
CONFIG_SENSORS_MPQ7932_REGULATOR=y
|
||||
CONFIG_SENSORS_MPQ7932=m
|
||||
@ -5406,7 +5441,6 @@ CONFIG_SENSORS_SCH56XX_COMMON=m
|
||||
CONFIG_SENSORS_SCH5627=m
|
||||
CONFIG_SENSORS_SCH5636=m
|
||||
CONFIG_SENSORS_STTS751=m
|
||||
CONFIG_SENSORS_SMM665=m
|
||||
CONFIG_SENSORS_ADC128D818=m
|
||||
CONFIG_SENSORS_ADS7828=m
|
||||
CONFIG_SENSORS_ADS7871=m
|
||||
@ -5631,6 +5665,9 @@ CONFIG_MFD_BD9571MWV=m
|
||||
CONFIG_MFD_AXP20X=m
|
||||
CONFIG_MFD_AXP20X_I2C=m
|
||||
CONFIG_MFD_CROS_EC_DEV=m
|
||||
CONFIG_MFD_CS42L43=m
|
||||
CONFIG_MFD_CS42L43_I2C=m
|
||||
CONFIG_MFD_CS42L43_SDW=m
|
||||
CONFIG_MFD_MADERA=m
|
||||
CONFIG_MFD_MADERA_I2C=m
|
||||
CONFIG_MFD_MADERA_SPI=m
|
||||
@ -5766,6 +5803,7 @@ CONFIG_REGULATOR_ARIZONA_LDO1=m
|
||||
CONFIG_REGULATOR_ARIZONA_MICSUPP=m
|
||||
CONFIG_REGULATOR_AS3711=m
|
||||
CONFIG_REGULATOR_ATC260X=m
|
||||
CONFIG_REGULATOR_AW37503=m
|
||||
CONFIG_REGULATOR_AXP20X=m
|
||||
CONFIG_REGULATOR_BCM590XX=m
|
||||
CONFIG_REGULATOR_BD9571MWV=m
|
||||
@ -5790,6 +5828,7 @@ CONFIG_REGULATOR_LTC3676=m
|
||||
CONFIG_REGULATOR_MAX14577=m
|
||||
CONFIG_REGULATOR_MAX1586=m
|
||||
CONFIG_REGULATOR_MAX77541=m
|
||||
CONFIG_REGULATOR_MAX77857=m
|
||||
CONFIG_REGULATOR_MAX8649=m
|
||||
CONFIG_REGULATOR_MAX8660=m
|
||||
CONFIG_REGULATOR_MAX8893=m
|
||||
@ -5840,6 +5879,7 @@ CONFIG_REGULATOR_RT6245=m
|
||||
CONFIG_REGULATOR_RTQ2134=m
|
||||
CONFIG_REGULATOR_RTMV20=m
|
||||
CONFIG_REGULATOR_RTQ6752=m
|
||||
CONFIG_REGULATOR_RTQ2208=m
|
||||
CONFIG_REGULATOR_SKY81452=m
|
||||
CONFIG_REGULATOR_SLG51000=m
|
||||
CONFIG_REGULATOR_SY7636A=m
|
||||
@ -5948,8 +5988,8 @@ CONFIG_V4L2_MEM2MEM_DEV=m
|
||||
CONFIG_V4L2_FLASH_LED_CLASS=m
|
||||
CONFIG_V4L2_FWNODE=m
|
||||
CONFIG_V4L2_ASYNC=m
|
||||
CONFIG_VIDEOBUF_GEN=m
|
||||
CONFIG_VIDEOBUF_DMA_SG=m
|
||||
CONFIG_V4L2_CCI=m
|
||||
CONFIG_V4L2_CCI_I2C=m
|
||||
# end of Video4Linux options
|
||||
|
||||
#
|
||||
@ -6197,9 +6237,9 @@ CONFIG_DVB_BUDGET_CORE=m
|
||||
CONFIG_DVB_BUDGET=m
|
||||
CONFIG_DVB_BUDGET_CI=m
|
||||
CONFIG_DVB_BUDGET_AV=m
|
||||
CONFIG_IPU_BRIDGE=m
|
||||
CONFIG_VIDEO_IPU3_CIO2=m
|
||||
CONFIG_CIO2_BRIDGE=y
|
||||
CONFIG_INTEL_VSC=m
|
||||
CONFIG_IPU_BRIDGE=m
|
||||
CONFIG_RADIO_ADAPTERS=m
|
||||
CONFIG_RADIO_MAXIRADIO=m
|
||||
CONFIG_RADIO_SAA7706H=m
|
||||
@ -6452,6 +6492,7 @@ CONFIG_VIDEO_ET8EK8=m
|
||||
CONFIG_VIDEO_AD5820=m
|
||||
CONFIG_VIDEO_AK7375=m
|
||||
CONFIG_VIDEO_DW9714=m
|
||||
CONFIG_VIDEO_DW9719=m
|
||||
CONFIG_VIDEO_DW9768=m
|
||||
CONFIG_VIDEO_DW9807_VCM=m
|
||||
# end of Lens drivers
|
||||
@ -6499,6 +6540,11 @@ CONFIG_VIDEO_UPD64083=m
|
||||
CONFIG_VIDEO_SAA6752HS=m
|
||||
CONFIG_VIDEO_M52790=m
|
||||
|
||||
#
|
||||
# Video serializers and deserializers
|
||||
#
|
||||
# end of Video serializers and deserializers
|
||||
|
||||
#
|
||||
# SPI I2C drivers auto-selected by 'Autoselect ancillary drivers'
|
||||
#
|
||||
@ -6721,6 +6767,8 @@ CONFIG_DVB_DUMMY_FE=m
|
||||
CONFIG_APERTURE_HELPERS=y
|
||||
CONFIG_VIDEO_CMDLINE=y
|
||||
CONFIG_VIDEO_NOMODESET=y
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_PANEL is not set
|
||||
CONFIG_AGP=y
|
||||
CONFIG_AGP_AMD64=m
|
||||
CONFIG_AGP_INTEL=m
|
||||
@ -6743,6 +6791,7 @@ CONFIG_DRM_DISPLAY_HDMI_HELPER=y
|
||||
CONFIG_DRM_DP_AUX_CHARDEV=y
|
||||
CONFIG_DRM_DP_CEC=y
|
||||
CONFIG_DRM_TTM=m
|
||||
CONFIG_DRM_EXEC=m
|
||||
CONFIG_DRM_BUDDY=m
|
||||
CONFIG_DRM_VRAM_HELPER=m
|
||||
CONFIG_DRM_TTM_HELPER=m
|
||||
@ -6845,6 +6894,7 @@ CONFIG_DRM_ANALOGIX_ANX78XX=m
|
||||
CONFIG_DRM_ANALOGIX_DP=m
|
||||
# end of Display Interface Bridges
|
||||
|
||||
CONFIG_DRM_LOONGSON=m
|
||||
# CONFIG_DRM_ETNAVIV is not set
|
||||
CONFIG_DRM_BOCHS=m
|
||||
CONFIG_DRM_CIRRUS_QEMU=m
|
||||
@ -6875,27 +6925,7 @@ CONFIG_DRM_PRIVACY_SCREEN=y
|
||||
#
|
||||
# Frame buffer Devices
|
||||
#
|
||||
CONFIG_FB_NOTIFY=y
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SYS_FILLRECT=y
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
CONFIG_FB_SYS_FOPS=y
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
CONFIG_FB_IO_HELPERS=y
|
||||
CONFIG_FB_SYS_HELPERS=y
|
||||
CONFIG_FB_SYS_HELPERS_DEFERRED=y
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
|
||||
#
|
||||
# Frame buffer hardware drivers
|
||||
#
|
||||
# CONFIG_FB_CIRRUS is not set
|
||||
# CONFIG_FB_PM2 is not set
|
||||
# CONFIG_FB_CYBER2000 is not set
|
||||
@ -6942,6 +6972,25 @@ CONFIG_XEN_FBDEV_FRONTEND=m
|
||||
# CONFIG_FB_HYPERV is not set
|
||||
# CONFIG_FB_SSD1307 is not set
|
||||
# CONFIG_FB_SM712 is not set
|
||||
CONFIG_FB_CORE=y
|
||||
CONFIG_FB_NOTIFY=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
CONFIG_FB_DEVICE=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SYS_FILLRECT=y
|
||||
CONFIG_FB_SYS_COPYAREA=y
|
||||
CONFIG_FB_SYS_IMAGEBLIT=y
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
CONFIG_FB_SYS_FOPS=y
|
||||
CONFIG_FB_DEFERRED_IO=y
|
||||
CONFIG_FB_DMAMEM_HELPERS=y
|
||||
CONFIG_FB_IOMEM_HELPERS=y
|
||||
CONFIG_FB_SYSMEM_HELPERS=y
|
||||
CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# end of Frame buffer Devices
|
||||
|
||||
#
|
||||
@ -6971,7 +7020,6 @@ CONFIG_BACKLIGHT_MAX8925=m
|
||||
CONFIG_BACKLIGHT_MT6370=m
|
||||
CONFIG_BACKLIGHT_APPLE=m
|
||||
CONFIG_BACKLIGHT_QCOM_WLED=m
|
||||
CONFIG_BACKLIGHT_DDCCI=m
|
||||
CONFIG_BACKLIGHT_RT4831=m
|
||||
CONFIG_BACKLIGHT_SAHARA=m
|
||||
CONFIG_BACKLIGHT_WM831X=m
|
||||
@ -7032,7 +7080,7 @@ CONFIG_SND_HWDEP=m
|
||||
CONFIG_SND_SEQ_DEVICE=m
|
||||
CONFIG_SND_RAWMIDI=m
|
||||
CONFIG_SND_UMP=m
|
||||
# CONFIG_SND_UMP_LEGACY_RAWMIDI is not set
|
||||
CONFIG_SND_UMP_LEGACY_RAWMIDI=y
|
||||
CONFIG_SND_COMPRESS_OFFLOAD=m
|
||||
CONFIG_SND_JACK=y
|
||||
CONFIG_SND_JACK_INPUT_DEV=y
|
||||
@ -7176,6 +7224,10 @@ CONFIG_SND_HDA_SCODEC_CS35L41=m
|
||||
CONFIG_SND_HDA_CS_DSP_CONTROLS=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L41_I2C=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L41_SPI=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L56=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L56_I2C=m
|
||||
CONFIG_SND_HDA_SCODEC_CS35L56_SPI=m
|
||||
CONFIG_SND_HDA_SCODEC_TAS2781_I2C=m
|
||||
CONFIG_SND_HDA_CODEC_REALTEK=m
|
||||
CONFIG_SND_HDA_CODEC_ANALOG=m
|
||||
CONFIG_SND_HDA_CODEC_SIGMATEL=m
|
||||
@ -7261,6 +7313,7 @@ CONFIG_SND_SOC_AMD_YC_MACH=m
|
||||
CONFIG_SND_AMD_ACP_CONFIG=m
|
||||
CONFIG_SND_SOC_AMD_ACP_COMMON=m
|
||||
CONFIG_SND_SOC_AMD_ACP_PDM=m
|
||||
CONFIG_SND_SOC_AMD_ACP_LEGACY_COMMON=m
|
||||
CONFIG_SND_SOC_AMD_ACP_I2S=m
|
||||
CONFIG_SND_SOC_AMD_ACP_PCM=m
|
||||
CONFIG_SND_SOC_AMD_ACP_PCI=m
|
||||
@ -7336,6 +7389,7 @@ CONFIG_SND_SOC_INTEL_AVS=m
|
||||
#
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_DA7219=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_DMIC=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_ES8336=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_HDAUDIO=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_I2S_TEST=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98927=m
|
||||
@ -7346,6 +7400,7 @@ CONFIG_SND_SOC_INTEL_AVS_MACH_PROBE=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_RT274=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_RT286=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_RT298=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_RT5663=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_RT5682=m
|
||||
CONFIG_SND_SOC_INTEL_AVS_MACH_SSM4567=m
|
||||
# end of Intel AVS Machine drivers
|
||||
@ -7413,7 +7468,9 @@ CONFIG_SND_SOC_SOF_INTEL_IPC4=y
|
||||
CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=m
|
||||
CONFIG_SND_SOC_SOF_AMD_COMMON=m
|
||||
CONFIG_SND_SOC_SOF_AMD_RENOIR=m
|
||||
CONFIG_SND_SOC_SOF_AMD_VANGOGH=m
|
||||
CONFIG_SND_SOC_SOF_AMD_REMBRANDT=m
|
||||
CONFIG_SND_SOC_SOF_ACP_PROBES=m
|
||||
CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
|
||||
CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m
|
||||
CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m
|
||||
@ -7439,6 +7496,8 @@ CONFIG_SND_SOC_SOF_ELKHARTLAKE=m
|
||||
CONFIG_SND_SOC_SOF_ALDERLAKE=m
|
||||
CONFIG_SND_SOC_SOF_INTEL_MTL=m
|
||||
CONFIG_SND_SOC_SOF_METEORLAKE=m
|
||||
CONFIG_SND_SOC_SOF_INTEL_LNL=m
|
||||
CONFIG_SND_SOC_SOF_LUNARLAKE=m
|
||||
CONFIG_SND_SOC_SOF_HDA_COMMON=m
|
||||
CONFIG_SND_SOC_SOF_HDA_MLINK=m
|
||||
CONFIG_SND_SOC_SOF_HDA_LINK=y
|
||||
@ -7490,9 +7549,11 @@ CONFIG_SND_SOC_AK4642=m
|
||||
CONFIG_SND_SOC_AK5386=m
|
||||
CONFIG_SND_SOC_AK5558=m
|
||||
CONFIG_SND_SOC_ALC5623=m
|
||||
CONFIG_SND_SOC_AUDIO_IIO_AUX=m
|
||||
CONFIG_SND_SOC_AW8738=m
|
||||
CONFIG_SND_SOC_AW88395_LIB=m
|
||||
CONFIG_SND_SOC_AW88395=m
|
||||
CONFIG_SND_SOC_AW88261=m
|
||||
CONFIG_SND_SOC_BD28623=m
|
||||
# CONFIG_SND_SOC_BT_SCO is not set
|
||||
CONFIG_SND_SOC_CHV3_CODEC=m
|
||||
@ -7517,6 +7578,8 @@ CONFIG_SND_SOC_CS35L56_SDW=m
|
||||
CONFIG_SND_SOC_CS42L42_CORE=m
|
||||
CONFIG_SND_SOC_CS42L42=m
|
||||
CONFIG_SND_SOC_CS42L42_SDW=m
|
||||
CONFIG_SND_SOC_CS42L43=m
|
||||
CONFIG_SND_SOC_CS42L43_SDW=m
|
||||
CONFIG_SND_SOC_CS42L51=m
|
||||
CONFIG_SND_SOC_CS42L51_I2C=m
|
||||
CONFIG_SND_SOC_CS42L52=m
|
||||
@ -7599,6 +7662,7 @@ CONFIG_SND_SOC_RT298=m
|
||||
CONFIG_SND_SOC_RT1011=m
|
||||
CONFIG_SND_SOC_RT1015=m
|
||||
CONFIG_SND_SOC_RT1015P=m
|
||||
CONFIG_SND_SOC_RT1017_SDCA_SDW=m
|
||||
CONFIG_SND_SOC_RT1019=m
|
||||
CONFIG_SND_SOC_RT1308=m
|
||||
CONFIG_SND_SOC_RT1308_SDW=m
|
||||
@ -7686,6 +7750,7 @@ CONFIG_SND_SOC_TS3A227E=m
|
||||
CONFIG_SND_SOC_TSCS42XX=m
|
||||
CONFIG_SND_SOC_TSCS454=m
|
||||
CONFIG_SND_SOC_UDA1334=m
|
||||
CONFIG_SND_SOC_WCD_CLASSH=m
|
||||
CONFIG_SND_SOC_WCD9335=m
|
||||
CONFIG_SND_SOC_WCD_MBHC=m
|
||||
CONFIG_SND_SOC_WCD934X=m
|
||||
@ -7798,6 +7863,7 @@ CONFIG_HID_HOLTEK=m
|
||||
CONFIG_HOLTEK_FF=y
|
||||
CONFIG_HID_VIVALDI_COMMON=m
|
||||
CONFIG_HID_GOOGLE_HAMMER=m
|
||||
CONFIG_HID_GOOGLE_STADIA_FF=m
|
||||
CONFIG_HID_VIVALDI=m
|
||||
CONFIG_HID_GT683R=m
|
||||
CONFIG_HID_KEYTOUCH=m
|
||||
@ -8252,6 +8318,7 @@ CONFIG_USB_F_UAC1_LEGACY=m
|
||||
CONFIG_USB_F_UAC2=m
|
||||
CONFIG_USB_F_UVC=m
|
||||
CONFIG_USB_F_MIDI=m
|
||||
CONFIG_USB_F_MIDI2=m
|
||||
CONFIG_USB_F_HID=m
|
||||
CONFIG_USB_F_PRINTER=m
|
||||
CONFIG_USB_F_TCM=m
|
||||
@ -8272,6 +8339,7 @@ CONFIG_USB_CONFIGFS_F_UAC1=y
|
||||
CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y
|
||||
CONFIG_USB_CONFIGFS_F_UAC2=y
|
||||
CONFIG_USB_CONFIGFS_F_MIDI=y
|
||||
CONFIG_USB_CONFIGFS_F_MIDI2=y
|
||||
CONFIG_USB_CONFIGFS_F_HID=y
|
||||
CONFIG_USB_CONFIGFS_F_UVC=y
|
||||
CONFIG_USB_CONFIGFS_F_PRINTER=y
|
||||
@ -8388,7 +8456,6 @@ CONFIG_MMC_SDHCI_XENON=m
|
||||
CONFIG_SCSI_UFSHCD=m
|
||||
CONFIG_SCSI_UFS_BSG=y
|
||||
CONFIG_SCSI_UFS_CRYPTO=y
|
||||
CONFIG_SCSI_UFS_HPB=y
|
||||
CONFIG_SCSI_UFS_HWMON=y
|
||||
CONFIG_SCSI_UFSHCD_PCI=m
|
||||
# CONFIG_SCSI_UFS_DWC_TC_PCI is not set
|
||||
@ -8440,6 +8507,7 @@ CONFIG_LEDS_LP8788=m
|
||||
CONFIG_LEDS_PCA955X=m
|
||||
CONFIG_LEDS_PCA955X_GPIO=y
|
||||
CONFIG_LEDS_PCA963X=m
|
||||
CONFIG_LEDS_PCA995X=m
|
||||
CONFIG_LEDS_WM831X_STATUS=m
|
||||
CONFIG_LEDS_WM8350=m
|
||||
CONFIG_LEDS_DA903X=m
|
||||
@ -8519,6 +8587,7 @@ CONFIG_LEDS_TRIGGER_BLKDEV=m
|
||||
CONFIG_LEDS_SIEMENS_SIMATIC_IPC=m
|
||||
CONFIG_LEDS_SIEMENS_SIMATIC_IPC_APOLLOLAKE=m
|
||||
CONFIG_LEDS_SIEMENS_SIMATIC_IPC_F7188X=m
|
||||
CONFIG_LEDS_SIEMENS_SIMATIC_IPC_ELKHARTLAKE=m
|
||||
CONFIG_ACCESSIBILITY=y
|
||||
CONFIG_A11Y_BRAILLE_CONSOLE=y
|
||||
|
||||
@ -8721,7 +8790,6 @@ CONFIG_RTC_DRV_M48T86=m
|
||||
CONFIG_RTC_DRV_M48T35=m
|
||||
CONFIG_RTC_DRV_M48T59=m
|
||||
CONFIG_RTC_DRV_MSM6242=m
|
||||
CONFIG_RTC_DRV_BQ4802=m
|
||||
CONFIG_RTC_DRV_RP5C01=m
|
||||
CONFIG_RTC_DRV_WM831X=m
|
||||
CONFIG_RTC_DRV_WM8350=m
|
||||
@ -8760,6 +8828,7 @@ CONFIG_INTEL_IDXD_SVM=y
|
||||
CONFIG_INTEL_IDXD_PERFMON=y
|
||||
CONFIG_INTEL_IOATDMA=m
|
||||
CONFIG_PLX_DMA=m
|
||||
CONFIG_XILINX_DMA=m
|
||||
CONFIG_XILINX_XDMA=m
|
||||
CONFIG_AMD_PTDMA=m
|
||||
CONFIG_QCOM_HIDMA_MGMT=m
|
||||
@ -8796,8 +8865,6 @@ CONFIG_DMABUF_HEAPS_CMA=y
|
||||
# end of DMABUF options
|
||||
|
||||
CONFIG_DCA=m
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_PANEL is not set
|
||||
CONFIG_UIO=m
|
||||
CONFIG_UIO_CIF=m
|
||||
CONFIG_UIO_PDRV_GENIRQ=m
|
||||
@ -8811,6 +8878,8 @@ CONFIG_UIO_MF624=m
|
||||
CONFIG_UIO_HV_GENERIC=m
|
||||
CONFIG_UIO_DFL=m
|
||||
CONFIG_VFIO=m
|
||||
CONFIG_VFIO_DEVICE_CDEV=y
|
||||
CONFIG_VFIO_GROUP=y
|
||||
CONFIG_VFIO_CONTAINER=y
|
||||
CONFIG_VFIO_IOMMU_TYPE1=m
|
||||
# CONFIG_VFIO_NOIOMMU is not set
|
||||
@ -8826,6 +8895,7 @@ CONFIG_VFIO_PCI=m
|
||||
CONFIG_VFIO_PCI_VGA=y
|
||||
CONFIG_VFIO_PCI_IGD=y
|
||||
CONFIG_MLX5_VFIO_PCI=m
|
||||
CONFIG_PDS_VFIO_PCI=m
|
||||
# end of VFIO support for PCI devices
|
||||
|
||||
CONFIG_VFIO_MDEV=m
|
||||
@ -8911,6 +8981,7 @@ CONFIG_XEN_PVCALLS_FRONTEND=m
|
||||
CONFIG_XEN_PVCALLS_BACKEND=y
|
||||
CONFIG_XEN_SCSI_BACKEND=m
|
||||
CONFIG_XEN_PRIVCMD=m
|
||||
CONFIG_XEN_PRIVCMD_IRQFD=y
|
||||
CONFIG_XEN_ACPI_PROCESSOR=m
|
||||
CONFIG_XEN_MCE_LOG=y
|
||||
CONFIG_XEN_HAVE_PVMMU=y
|
||||
@ -9107,6 +9178,7 @@ CONFIG_GPD_POCKET_FAN=m
|
||||
CONFIG_X86_PLATFORM_DRIVERS_HP=y
|
||||
CONFIG_HP_ACCEL=m
|
||||
CONFIG_HP_WMI=m
|
||||
CONFIG_HP_BIOSCFG=m
|
||||
CONFIG_WIRELESS_HOTKEY=m
|
||||
CONFIG_IBM_RTL=m
|
||||
CONFIG_IDEAPAD_LAPTOP=m
|
||||
@ -9199,7 +9271,12 @@ CONFIG_INTEL_SCU_PCI=y
|
||||
CONFIG_INTEL_SCU_PLATFORM=m
|
||||
CONFIG_INTEL_SCU_IPC_UTIL=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC_BATT=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC_BATT_APOLLOLAKE=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC_BATT_ELKHARTLAKE=m
|
||||
CONFIG_SIEMENS_SIMATIC_IPC_BATT_F7188X=m
|
||||
CONFIG_WINMATE_FM07_KEYS=m
|
||||
CONFIG_SEL3350_PLATFORM=m
|
||||
CONFIG_STEAMDECK=m
|
||||
CONFIG_P2SB=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
@ -9612,6 +9689,7 @@ CONFIG_HID_SENSOR_IIO_COMMON=m
|
||||
CONFIG_HID_SENSOR_IIO_TRIGGER=m
|
||||
# end of Hid Sensor IIO Common
|
||||
|
||||
CONFIG_IIO_INV_SENSORS_TIMESTAMP=m
|
||||
CONFIG_IIO_MS_SENSORS_I2C=m
|
||||
|
||||
#
|
||||
@ -9668,6 +9746,7 @@ CONFIG_MAX517=m
|
||||
CONFIG_MAX5522=m
|
||||
CONFIG_MAX5821=m
|
||||
CONFIG_MCP4725=m
|
||||
CONFIG_MCP4728=m
|
||||
CONFIG_MCP4922=m
|
||||
CONFIG_TI_DAC082S085=m
|
||||
CONFIG_TI_DAC5571=m
|
||||
@ -9981,6 +10060,7 @@ CONFIG_AS3935=m
|
||||
# Proximity and distance sensors
|
||||
#
|
||||
CONFIG_CROS_EC_MKBP_PROXIMITY=m
|
||||
CONFIG_IRSD200=m
|
||||
CONFIG_ISL29501=m
|
||||
CONFIG_LIDAR_LITE_V2=m
|
||||
CONFIG_MB1232=m
|
||||
@ -10222,6 +10302,7 @@ CONFIG_HTE=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_VALIDATE_FS_PARSER=y
|
||||
CONFIG_FS_IOMAP=y
|
||||
CONFIG_BUFFER_HEAD=y
|
||||
CONFIG_LEGACY_DIRECT_IO=y
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
@ -10252,6 +10333,7 @@ CONFIG_XFS_POSIX_ACL=y
|
||||
CONFIG_XFS_RT=y
|
||||
CONFIG_XFS_DRAIN_INTENTS=y
|
||||
CONFIG_XFS_ONLINE_SCRUB=y
|
||||
# CONFIG_XFS_ONLINE_SCRUB_STATS is not set
|
||||
CONFIG_XFS_ONLINE_REPAIR=y
|
||||
# CONFIG_XFS_WARN is not set
|
||||
# CONFIG_XFS_DEBUG is not set
|
||||
@ -10316,7 +10398,6 @@ CONFIG_QUOTA_TREE=m
|
||||
CONFIG_QFMT_V1=m
|
||||
CONFIG_QFMT_V2=m
|
||||
CONFIG_QUOTACTL=y
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
CONFIG_FUSE_FS=m
|
||||
CONFIG_CUSE=m
|
||||
@ -10328,6 +10409,7 @@ CONFIG_OVERLAY_FS_REDIRECT_DIR=y
|
||||
CONFIG_OVERLAY_FS_INDEX=y
|
||||
CONFIG_OVERLAY_FS_XINO_AUTO=y
|
||||
CONFIG_OVERLAY_FS_METACOPY=y
|
||||
# CONFIG_OVERLAY_FS_DEBUG is not set
|
||||
|
||||
#
|
||||
# Caches
|
||||
@ -10388,11 +10470,11 @@ CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_TMPFS_INODE64=y
|
||||
CONFIG_TMPFS_QUOTA=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y
|
||||
# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
CONFIG_EFIVAR_FS=y
|
||||
@ -10463,19 +10545,7 @@ CONFIG_ROMFS_BACKED_BY_BLOCK=y
|
||||
CONFIG_ROMFS_ON_BLOCK=y
|
||||
CONFIG_PSTORE=y
|
||||
CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
|
||||
CONFIG_PSTORE_DEFLATE_COMPRESS=m
|
||||
CONFIG_PSTORE_LZO_COMPRESS=m
|
||||
CONFIG_PSTORE_LZ4_COMPRESS=m
|
||||
CONFIG_PSTORE_LZ4HC_COMPRESS=m
|
||||
# CONFIG_PSTORE_842_COMPRESS is not set
|
||||
CONFIG_PSTORE_ZSTD_COMPRESS=y
|
||||
CONFIG_PSTORE_COMPRESS=y
|
||||
# CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT is not set
|
||||
# CONFIG_PSTORE_LZO_COMPRESS_DEFAULT is not set
|
||||
# CONFIG_PSTORE_LZ4_COMPRESS_DEFAULT is not set
|
||||
# CONFIG_PSTORE_LZ4HC_COMPRESS_DEFAULT is not set
|
||||
CONFIG_PSTORE_ZSTD_COMPRESS_DEFAULT=y
|
||||
CONFIG_PSTORE_COMPRESS_DEFAULT="zstd"
|
||||
# CONFIG_PSTORE_CONSOLE is not set
|
||||
# CONFIG_PSTORE_PMSG is not set
|
||||
# CONFIG_PSTORE_FTRACE is not set
|
||||
@ -10496,6 +10566,7 @@ CONFIG_EROFS_FS_POSIX_ACL=y
|
||||
CONFIG_EROFS_FS_SECURITY=y
|
||||
CONFIG_EROFS_FS_ZIP=y
|
||||
CONFIG_EROFS_FS_ZIP_LZMA=y
|
||||
CONFIG_EROFS_FS_ZIP_DEFLATE=y
|
||||
CONFIG_EROFS_FS_ONDEMAND=y
|
||||
CONFIG_EROFS_FS_PCPU_KTHREAD=y
|
||||
CONFIG_EROFS_FS_PCPU_KTHREAD_HIPRI=y
|
||||
@ -10542,8 +10613,6 @@ CONFIG_SUNRPC_GSS=m
|
||||
CONFIG_SUNRPC_BACKCHANNEL=y
|
||||
CONFIG_SUNRPC_SWAP=y
|
||||
CONFIG_RPCSEC_GSS_KRB5=m
|
||||
CONFIG_RPCSEC_GSS_KRB5_CRYPTOSYSTEM=y
|
||||
# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_DES is not set
|
||||
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1=y
|
||||
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_CAMELLIA=y
|
||||
CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2=y
|
||||
@ -10631,6 +10700,7 @@ CONFIG_NLS_MAC_INUIT=m
|
||||
CONFIG_NLS_MAC_ROMANIAN=m
|
||||
CONFIG_NLS_MAC_TURKISH=m
|
||||
CONFIG_NLS_UTF8=m
|
||||
CONFIG_NLS_UCS2_UTILS=m
|
||||
CONFIG_DLM=m
|
||||
CONFIG_DLM_DEBUG=y
|
||||
CONFIG_UNICODE=y
|
||||
@ -10669,6 +10739,7 @@ CONFIG_SECURITY_SELINUX_DEVELOP=y
|
||||
CONFIG_SECURITY_SELINUX_AVC_STATS=y
|
||||
CONFIG_SECURITY_SELINUX_SIDTAB_HASH_BITS=9
|
||||
CONFIG_SECURITY_SELINUX_SID2STR_CACHE_SIZE=256
|
||||
# CONFIG_SECURITY_SELINUX_DEBUG is not set
|
||||
CONFIG_SECURITY_SMACK=y
|
||||
CONFIG_SECURITY_SMACK_BRINGUP=y
|
||||
CONFIG_SECURITY_SMACK_NETFILTER=y
|
||||
@ -10707,7 +10778,6 @@ CONFIG_INTEGRITY_MACHINE_KEYRING=y
|
||||
CONFIG_LOAD_UEFI_KEYS=y
|
||||
CONFIG_INTEGRITY_AUDIT=y
|
||||
# CONFIG_IMA is not set
|
||||
# CONFIG_IMA_KEYRINGS_PERMIT_SIGNED_BY_BUILTIN_OR_SECONDARY is not set
|
||||
# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
|
||||
# CONFIG_EVM is not set
|
||||
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
|
||||
@ -10737,6 +10807,13 @@ CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
|
||||
# CONFIG_ZERO_CALL_USED_REGS is not set
|
||||
# end of Memory initialization
|
||||
|
||||
#
|
||||
# Hardening of kernel data structures
|
||||
#
|
||||
CONFIG_LIST_HARDENED=y
|
||||
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
|
||||
# end of Hardening of kernel data structures
|
||||
|
||||
CONFIG_RANDSTRUCT_NONE=y
|
||||
# CONFIG_RANDSTRUCT_FULL is not set
|
||||
# CONFIG_RANDSTRUCT_PERFORMANCE is not set
|
||||
@ -11141,9 +11218,10 @@ CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_ARCH_DMA_ADDR_T_64BIT=y
|
||||
CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y
|
||||
CONFIG_SWIOTLB=y
|
||||
# CONFIG_SWIOTLB_DYNAMIC is not set
|
||||
CONFIG_DMA_COHERENT_POOL=y
|
||||
CONFIG_DMA_CMA=y
|
||||
# CONFIG_DMA_PERNUMA_CMA is not set
|
||||
# CONFIG_DMA_NUMA_CMA is not set
|
||||
|
||||
#
|
||||
# Default contiguous memory area size:
|
||||
@ -11408,7 +11486,6 @@ CONFIG_DEBUG_LIST=y
|
||||
# CONFIG_DEBUG_PLIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_BUG_ON_DATA_CORRUPTION is not set
|
||||
# CONFIG_DEBUG_MAPLE_TREE is not set
|
||||
# end of Debug kernel data structures
|
||||
|
||||
@ -11614,3 +11691,4 @@ CONFIG_MEMTEST=y
|
||||
#
|
||||
# end of Rust hacking
|
||||
# end of Kernel hacking
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,109 @@
|
||||
From 34713cb8d4e13bf9e3b1403cdea9551e0532ec5c Mon Sep 17 00:00:00 2001
|
||||
From: "Luke D. Jones" <luke@ljones.dev>
|
||||
Date: Wed, 23 Aug 2023 11:05:59 +1200
|
||||
Subject: [PATCH v2 2/2] ALSA: hda: cs35l41: Support ASUS 2023 laptops with
|
||||
missing DSD
|
||||
|
||||
Support adding the missing DSD properties required for ASUS ROG 2023
|
||||
laptops and other ASUS laptops to properly utilise the cs35l41.
|
||||
|
||||
The currently added laptops are:
|
||||
- ASUS GS650P, i2c
|
||||
- ASUS GA402X, i2c
|
||||
- ASUS GU604V, spi
|
||||
- ASUS GU603V, spi
|
||||
- ASUS GV601V, spi
|
||||
- ASUS GZ301V, spi
|
||||
- ASUS ROG ALLY, i2c
|
||||
- ASUS G614J, spi
|
||||
- ASUS G634J, spi
|
||||
- ASUS G614JI, spi
|
||||
- ASUS G713P, i2c
|
||||
- ASUS H7604JV, spi
|
||||
|
||||
The SPI connected amps may be required to use an external DSD patch
|
||||
to fix or add the "cs-gpios" property.
|
||||
|
||||
Co-developed-by: Jonathan LoBue <jlobue10@gmail.com>
|
||||
Signed-off-by: Jonathan LoBue <jlobue10@gmail.com>
|
||||
Co-developed-by: Luke D. Jones <luke@ljones.dev>
|
||||
Signed-off-by: Luke D. Jones <luke@ljones.dev>
|
||||
---
|
||||
sound/pci/hda/cs35l41_hda_property.c | 53 ++++++++++++++++++++++++++++
|
||||
1 file changed, 53 insertions(+)
|
||||
|
||||
diff --git a/sound/pci/hda/cs35l41_hda_property.c b/sound/pci/hda/cs35l41_hda_property.c
|
||||
index 673f23257a09..b06e8ca5f4b4 100644
|
||||
--- a/sound/pci/hda/cs35l41_hda_property.c
|
||||
+++ b/sound/pci/hda/cs35l41_hda_property.c
|
||||
@@ -43,6 +43,47 @@ static int lenovo_legion_no_acpi(struct cs35l41_hda *cs35l41, struct device *phy
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/*
|
||||
+ * The CSC3551 is used in almost the entire ASUS ROG laptop range in 2023, this is likely to
|
||||
+ * also include many non ROG labelled laptops. It is also used with either I2C connection or
|
||||
+ * SPI connection. The SPI connected versions may be missing a chip select GPIO and require
|
||||
+ * an DSD table patch.
|
||||
+ */
|
||||
+static int asus_rog_2023_spkr_id2(struct cs35l41_hda *cs35l41, struct device *physdev, int id,
|
||||
+ const char *hid)
|
||||
+{
|
||||
+ struct cs35l41_hw_cfg *hw_cfg = &cs35l41->hw_cfg;
|
||||
+ int reset_gpio = 0;
|
||||
+ int spkr_gpio = 2;
|
||||
+
|
||||
+ /* check SPI or I2C address to assign the index */
|
||||
+ cs35l41->index = (id == 0 || id == 0x40) ? 0 : 1;
|
||||
+ cs35l41->channel_index = 0;
|
||||
+ hw_cfg->spk_pos = cs35l41->index;
|
||||
+ hw_cfg->bst_type = CS35L41_EXT_BOOST;
|
||||
+ hw_cfg->gpio1.func = CS35l41_VSPK_SWITCH;
|
||||
+ hw_cfg->gpio1.valid = true;
|
||||
+ hw_cfg->gpio2.func = CS35L41_INTERRUPT;
|
||||
+ hw_cfg->gpio2.valid = true;
|
||||
+
|
||||
+ if (strcmp(cs35l41->acpi_subsystem_id, "10431483") == 0)
|
||||
+ spkr_gpio = 1;
|
||||
+ cs35l41->speaker_id = cs35l41_get_speaker_id(physdev, 0, 0, spkr_gpio);
|
||||
+
|
||||
+ if (strcmp(cs35l41->acpi_subsystem_id, "10431463") == 0)
|
||||
+ reset_gpio = 0;
|
||||
+ else if (strcmp(cs35l41->acpi_subsystem_id, "10431473") == 0
|
||||
+ || strcmp(cs35l41->acpi_subsystem_id, "10431483") == 0
|
||||
+ || strcmp(cs35l41->acpi_subsystem_id, "10431493") == 0) {
|
||||
+ reset_gpio = 1;
|
||||
+ }
|
||||
+ cs35l41->reset_gpio = gpiod_get_index(physdev, NULL, reset_gpio, GPIOD_OUT_HIGH);
|
||||
+
|
||||
+ hw_cfg->valid = true;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
struct cs35l41_prop_model {
|
||||
const char *hid;
|
||||
const char *ssid;
|
||||
@@ -53,6 +94,18 @@ struct cs35l41_prop_model {
|
||||
const struct cs35l41_prop_model cs35l41_prop_model_table[] = {
|
||||
{ "CLSA0100", NULL, lenovo_legion_no_acpi },
|
||||
{ "CLSA0101", NULL, lenovo_legion_no_acpi },
|
||||
{ "CSC3551", "103C89C6", hp_vision_acpi_fix },
|
||||
+ { "CSC3551", "10431433", asus_rog_2023_spkr_id2 }, // ASUS GS650P - i2c
|
||||
+ { "CSC3551", "10431463", asus_rog_2023_spkr_id2 }, // ASUS GA402X/N - i2c, reset gpio 0
|
||||
+ { "CSC3551", "10431473", asus_rog_2023_spkr_id2 }, // ASUS GU604V - spi, reset gpio 1
|
||||
+ { "CSC3551", "10431483", asus_rog_2023_spkr_id2 }, // ASUS GU603V - spi, reset 1, spkr 1
|
||||
+ { "CSC3551", "10431493", asus_rog_2023_spkr_id2 }, // ASUS GV601V - spi, reset gpio 1
|
||||
+ { "CSC3551", "10431573", asus_rog_2023_spkr_id2 }, // ASUS GZ301V - spi, reset gpio 0
|
||||
+ { "CSC3551", "104317F3", asus_rog_2023_spkr_id2 }, // ASUS ROG ALLY - i2c
|
||||
+ { "CSC3551", "10431B93", asus_rog_2023_spkr_id2 }, // ASUS G614J - spi, reset gpio 0
|
||||
+ { "CSC3551", "10431CAF", asus_rog_2023_spkr_id2 }, // ASUS G634J - spi, reset gpio 0
|
||||
+ { "CSC3551", "10431C9F", asus_rog_2023_spkr_id2 }, // ASUS G614JI -spi, reset gpio 0
|
||||
+ { "CSC3551", "10431D1F", asus_rog_2023_spkr_id2 }, // ASUS G713P - i2c
|
||||
+ { "CSC3551", "10431F1F", asus_rog_2023_spkr_id2 }, // ASUS H7604JV - spi, reset gpio 0
|
||||
{}
|
||||
};
|
||||
|
||||
--
|
||||
2.41.0
|
||||
|
181
patches/asuslinux/amd-tablet-sfh.patch
Normal file
181
patches/asuslinux/amd-tablet-sfh.patch
Normal file
@ -0,0 +1,181 @@
|
||||
diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_client.c b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
|
||||
index bdb578e0899f..f98a02eee783 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/amd_sfh_client.c
|
||||
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
|
||||
@@ -146,6 +146,8 @@ static const char *get_sensor_name(int idx)
|
||||
return "gyroscope";
|
||||
case mag_idx:
|
||||
return "magnetometer";
|
||||
+ case tms_idx:
|
||||
+ return "tablet-mode-switch";
|
||||
case als_idx:
|
||||
case ACS_IDX: /* ambient color sensor */
|
||||
return "ALS";
|
||||
diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_hid.h b/drivers/hid/amd-sfh-hid/amd_sfh_hid.h
|
||||
index 97296f587bc7..cea7ec6f6288 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/amd_sfh_hid.h
|
||||
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_hid.h
|
||||
@@ -11,7 +11,7 @@
|
||||
#ifndef AMDSFH_HID_H
|
||||
#define AMDSFH_HID_H
|
||||
|
||||
-#define MAX_HID_DEVICES 6
|
||||
+#define MAX_HID_DEVICES 7
|
||||
#define AMD_SFH_HID_VENDOR 0x1022
|
||||
#define AMD_SFH_HID_PRODUCT 0x0001
|
||||
|
||||
diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
|
||||
index 2530fa98b568..af5b37a62b10 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
|
||||
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.c
|
||||
@@ -27,6 +27,7 @@
|
||||
#define ACEL_EN BIT(0)
|
||||
#define GYRO_EN BIT(1)
|
||||
#define MAGNO_EN BIT(2)
|
||||
+#define TMS_EN BIT(15)
|
||||
#define HPD_EN BIT(16)
|
||||
#define ALS_EN BIT(19)
|
||||
#define ACS_EN BIT(22)
|
||||
@@ -228,6 +229,9 @@ int amd_mp2_get_sensor_num(struct amd_mp2_dev *privdata, u8 *sensor_id)
|
||||
if (MAGNO_EN & activestatus)
|
||||
sensor_id[num_of_sensors++] = mag_idx;
|
||||
|
||||
+ if (TMS_EN & activestatus)
|
||||
+ sensor_id[num_of_sensors++] = tms_idx;
|
||||
+
|
||||
if (ALS_EN & activestatus)
|
||||
sensor_id[num_of_sensors++] = als_idx;
|
||||
|
||||
diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
|
||||
index 70add75fc506..60130ad846a4 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
|
||||
+++ b/drivers/hid/amd-sfh-hid/amd_sfh_pcie.h
|
||||
@@ -79,6 +79,7 @@ enum sensor_idx {
|
||||
accel_idx = 0,
|
||||
gyro_idx = 1,
|
||||
mag_idx = 2,
|
||||
+ tms_idx = 15,
|
||||
als_idx = 19
|
||||
};
|
||||
|
||||
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
|
||||
index 8716a05950c8..b6725e8daf0c 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
|
||||
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.c
|
||||
@@ -47,6 +47,11 @@ static int get_report_descriptor(int sensor_idx, u8 *rep_desc)
|
||||
memcpy(rep_desc, comp3_report_descriptor,
|
||||
sizeof(comp3_report_descriptor));
|
||||
break;
|
||||
+ case tms_idx: /* tablet mode switch */
|
||||
+ memset(rep_desc, 0, sizeof(tms_report_descriptor));
|
||||
+ memcpy(rep_desc, tms_report_descriptor,
|
||||
+ sizeof(tms_report_descriptor));
|
||||
+ break;
|
||||
case als_idx: /* ambient light sensor */
|
||||
case ACS_IDX: /* ambient color sensor */
|
||||
memset(rep_desc, 0, sizeof(als_report_descriptor));
|
||||
@@ -97,6 +102,16 @@ static u32 get_descr_sz(int sensor_idx, int descriptor_name)
|
||||
return sizeof(struct magno_feature_report);
|
||||
}
|
||||
break;
|
||||
+ case tms_idx:
|
||||
+ switch (descriptor_name) {
|
||||
+ case descr_size:
|
||||
+ return sizeof(tms_report_descriptor);
|
||||
+ case input_size:
|
||||
+ return sizeof(struct tms_input_report);
|
||||
+ case feature_size:
|
||||
+ return sizeof(struct tms_feature_report);
|
||||
+ }
|
||||
+ break;
|
||||
case als_idx:
|
||||
case ACS_IDX: /* ambient color sensor */
|
||||
switch (descriptor_name) {
|
||||
@@ -140,6 +155,7 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report)
|
||||
struct accel3_feature_report acc_feature;
|
||||
struct gyro_feature_report gyro_feature;
|
||||
struct magno_feature_report magno_feature;
|
||||
+ struct tms_feature_report tms_feature;
|
||||
struct hpd_feature_report hpd_feature;
|
||||
struct als_feature_report als_feature;
|
||||
u8 report_size = 0;
|
||||
@@ -175,6 +191,11 @@ static u8 get_feature_report(int sensor_idx, int report_id, u8 *feature_report)
|
||||
memcpy(feature_report, &magno_feature, sizeof(magno_feature));
|
||||
report_size = sizeof(magno_feature);
|
||||
break;
|
||||
+ case tms_idx: /* tablet mode switch */
|
||||
+ get_common_features(&tms_feature.common_property, report_id);
|
||||
+ memcpy(feature_report, &tms_feature, sizeof(tms_feature));
|
||||
+ report_size = sizeof(tms_feature);
|
||||
+ break;
|
||||
case als_idx: /* ambient light sensor */
|
||||
case ACS_IDX: /* ambient color sensor */
|
||||
get_common_features(&als_feature.common_property, report_id);
|
||||
@@ -214,6 +235,7 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id,
|
||||
struct accel3_input_report acc_input;
|
||||
struct gyro_input_report gyro_input;
|
||||
struct hpd_input_report hpd_input;
|
||||
+ struct tms_input_report tms_input;
|
||||
struct als_input_report als_input;
|
||||
struct hpd_status hpdstatus;
|
||||
u8 report_size = 0;
|
||||
@@ -247,6 +269,11 @@ static u8 get_input_report(u8 current_index, int sensor_idx, int report_id,
|
||||
memcpy(input_report, &magno_input, sizeof(magno_input));
|
||||
report_size = sizeof(magno_input);
|
||||
break;
|
||||
+ case tms_idx: /* tablet mode switch */
|
||||
+ get_common_inputs(&tms_input.common_property, report_id);
|
||||
+ report_size = sizeof(tms_input);
|
||||
+ memcpy(input_report, &tms_input, sizeof(tms_input));
|
||||
+ break;
|
||||
case als_idx: /* Als */
|
||||
case ACS_IDX: /* ambient color sensor */
|
||||
get_common_inputs(&als_input.common_property, report_id);
|
||||
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
|
||||
index ebd55675eb62..b22068a47429 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
|
||||
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_desc.h
|
||||
@@ -111,4 +111,11 @@ struct hpd_input_report {
|
||||
u8 human_presence;
|
||||
} __packed;
|
||||
|
||||
+struct tms_feature_report {
|
||||
+ struct common_feature_property common_property;
|
||||
+} __packed;
|
||||
+
|
||||
+struct tms_input_report {
|
||||
+ struct common_input_property common_property;
|
||||
+} __packed;
|
||||
#endif
|
||||
diff --git a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
|
||||
index 697f2791ea9c..96cbc1e5b9a7 100644
|
||||
--- a/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
|
||||
+++ b/drivers/hid/amd-sfh-hid/hid_descriptor/amd_sfh_hid_report_desc.h
|
||||
@@ -644,6 +644,27 @@ static const u8 als_report_descriptor[] = {
|
||||
0xC0 /* HID end collection */
|
||||
};
|
||||
|
||||
+
|
||||
+/* TABLET MODE SWITCH */
|
||||
+__maybe_unused // Used by sfh1.0, but not yet implemented in sfh1.1
|
||||
+static const u8 tms_report_descriptor[] = {
|
||||
+0x06, 0x43, 0xFF, // Usage Page (Vendor Defined 0xFF43)
|
||||
+0x0A, 0x02, 0x02, // Usage (0x0202)
|
||||
+0xA1, 0x01, // Collection (Application)
|
||||
+0x85, 0x11, // Report ID (17)
|
||||
+0x15, 0x00, // Logical Minimum (0)
|
||||
+0x25, 0x01, // Logical Maximum (1)
|
||||
+0x35, 0x00, // Physical Minimum (0)
|
||||
+0x45, 0x01, // Physical Maximum (1)
|
||||
+0x65, 0x00, // Unit (None)
|
||||
+0x55, 0x00, // Unit Exponent (0)
|
||||
+0x75, 0x01, // Report Size (1)
|
||||
+0x95, 0x98, // Report Count (-104)
|
||||
+0x81, 0x03, // Input (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
|
||||
+0x91, 0x03, // Output (Const,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
|
||||
+0xC1, 0x00, // End Collection
|
||||
+};
|
||||
+
|
||||
/* BIOMETRIC PRESENCE*/
|
||||
static const u8 hpd_report_descriptor[] = {
|
||||
0x05, 0x20, /* Usage page */
|
@ -0,0 +1,248 @@
|
||||
From b35a4c957b3f0e5b4c7c73dec4fe3a5b9dbc4873 Mon Sep 17 00:00:00 2001
|
||||
From: "Luke D. Jones" <luke@ljones.dev>
|
||||
Date: Sun, 30 Apr 2023 10:56:34 +1200
|
||||
Subject: [PATCH v6 1/1] platform/x86: asus-wmi: add support for ASUS screenpad
|
||||
|
||||
Add support for the WMI methods used to turn off and adjust the
|
||||
brightness of the secondary "screenpad" device found on some high-end
|
||||
ASUS laptops like the GX650P series and others.
|
||||
|
||||
There are some small quirks with this device when considering only the
|
||||
raw WMI methods:
|
||||
1. The Off method can only switch the device off
|
||||
2. Changing the brightness turns the device back on
|
||||
3. To turn the device back on the brightness must be > 1
|
||||
4. When the device is off the brightness can't be changed (so it is
|
||||
stored by the driver if device is off).
|
||||
5. Booting with a value of 0 brightness (retained by bios) means the bios
|
||||
will set a value of >0 <15
|
||||
6. When the device is off it is "unplugged"
|
||||
|
||||
asus_wmi sets the minimum brightness as 20 in general use, and 60 for
|
||||
booting with values <= min.
|
||||
|
||||
The ACPI methods are used in a new backlight device named asus_screenpad.
|
||||
|
||||
Signed-off-by: Luke D. Jones <luke@ljones.dev>
|
||||
---
|
||||
drivers/platform/x86/asus-wmi.c | 133 +++++++++++++++++++++
|
||||
drivers/platform/x86/asus-wmi.h | 1 +
|
||||
include/linux/platform_data/x86/asus-wmi.h | 4 +
|
||||
3 files changed, 138 insertions(+)
|
||||
|
||||
diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
|
||||
index f54178d6f780..0b13be703856 100644
|
||||
--- a/drivers/platform/x86/asus-wmi.c
|
||||
+++ b/drivers/platform/x86/asus-wmi.c
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <linux/input/sparse-keymap.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/leds.h>
|
||||
+#include <linux/minmax.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/pci_hotplug.h>
|
||||
@@ -127,6 +128,10 @@ module_param(fnlock_default, bool, 0444);
|
||||
#define NVIDIA_TEMP_MIN 75
|
||||
#define NVIDIA_TEMP_MAX 87
|
||||
|
||||
+#define ASUS_SCREENPAD_BRIGHT_MIN 20
|
||||
+#define ASUS_SCREENPAD_BRIGHT_MAX 255
|
||||
+#define ASUS_SCREENPAD_BRIGHT_DEFAULT 60
|
||||
+
|
||||
static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
|
||||
|
||||
static int throttle_thermal_policy_write(struct asus_wmi *);
|
||||
@@ -212,6 +217,7 @@ struct asus_wmi {
|
||||
|
||||
struct input_dev *inputdev;
|
||||
struct backlight_device *backlight_device;
|
||||
+ struct backlight_device *screenpad_backlight_device;
|
||||
struct platform_device *platform_device;
|
||||
|
||||
struct led_classdev wlan_led;
|
||||
@@ -3776,6 +3782,124 @@ static int is_display_toggle(int code)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Screenpad backlight *******************************************************/
|
||||
+
|
||||
+static int read_screenpad_backlight_power(struct asus_wmi *asus)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_SCREENPAD_POWER);
|
||||
+ if (ret < 0)
|
||||
+ return ret;
|
||||
+ /* 1 == powered */
|
||||
+ return ret ? FB_BLANK_UNBLANK : FB_BLANK_POWERDOWN;
|
||||
+}
|
||||
+
|
||||
+static int read_screenpad_brightness(struct backlight_device *bd)
|
||||
+{
|
||||
+ struct asus_wmi *asus = bl_get_data(bd);
|
||||
+ u32 retval;
|
||||
+ int err;
|
||||
+
|
||||
+ err = read_screenpad_backlight_power(asus);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+ /* The device brightness can only be read if powered, so return stored */
|
||||
+ if (err == FB_BLANK_POWERDOWN)
|
||||
+ return asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
|
||||
+
|
||||
+ err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &retval);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+
|
||||
+ return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK) - ASUS_SCREENPAD_BRIGHT_MIN;
|
||||
+}
|
||||
+
|
||||
+static int update_screenpad_bl_status(struct backlight_device *bd)
|
||||
+{
|
||||
+ struct asus_wmi *asus = bl_get_data(bd);
|
||||
+ int power, err = 0;
|
||||
+ u32 ctrl_param;
|
||||
+
|
||||
+ power = read_screenpad_backlight_power(asus);
|
||||
+ if (power < 0)
|
||||
+ return power;
|
||||
+
|
||||
+ if (bd->props.power != power) {
|
||||
+ if (power != FB_BLANK_UNBLANK) {
|
||||
+ /* Only brightness > 0 can power it back on */
|
||||
+ ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
|
||||
+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
|
||||
+ ctrl_param, NULL);
|
||||
+ } else {
|
||||
+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
|
||||
+ }
|
||||
+ } else if (power == FB_BLANK_UNBLANK) {
|
||||
+ /* Only set brightness if powered on or we get invalid/unsync state */
|
||||
+ ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
|
||||
+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
|
||||
+ }
|
||||
+
|
||||
+ /* Ensure brightness is stored to turn back on with */
|
||||
+ if (err == 0)
|
||||
+ asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+static const struct backlight_ops asus_screenpad_bl_ops = {
|
||||
+ .get_brightness = read_screenpad_brightness,
|
||||
+ .update_status = update_screenpad_bl_status,
|
||||
+ .options = BL_CORE_SUSPENDRESUME,
|
||||
+};
|
||||
+
|
||||
+static int asus_screenpad_init(struct asus_wmi *asus)
|
||||
+{
|
||||
+ struct backlight_device *bd;
|
||||
+ struct backlight_properties props;
|
||||
+ int err, power;
|
||||
+ int brightness = 0;
|
||||
+
|
||||
+ power = read_screenpad_backlight_power(asus);
|
||||
+ if (power < 0)
|
||||
+ return power;
|
||||
+
|
||||
+ if (power != FB_BLANK_POWERDOWN) {
|
||||
+ err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &brightness);
|
||||
+ if (err < 0)
|
||||
+ return err;
|
||||
+ }
|
||||
+ /* default to an acceptable min brightness on boot if too low */
|
||||
+ if (brightness < ASUS_SCREENPAD_BRIGHT_MIN)
|
||||
+ brightness = ASUS_SCREENPAD_BRIGHT_DEFAULT;
|
||||
+
|
||||
+ memset(&props, 0, sizeof(struct backlight_properties));
|
||||
+ props.type = BACKLIGHT_RAW; /* ensure this bd is last to be picked */
|
||||
+ props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX - ASUS_SCREENPAD_BRIGHT_MIN;
|
||||
+ bd = backlight_device_register("asus_screenpad",
|
||||
+ &asus->platform_device->dev, asus,
|
||||
+ &asus_screenpad_bl_ops, &props);
|
||||
+ if (IS_ERR(bd)) {
|
||||
+ pr_err("Could not register backlight device\n");
|
||||
+ return PTR_ERR(bd);
|
||||
+ }
|
||||
+
|
||||
+ asus->screenpad_backlight_device = bd;
|
||||
+ asus->driver->screenpad_brightness = brightness;
|
||||
+ bd->props.brightness = brightness;
|
||||
+ bd->props.power = power;
|
||||
+ backlight_update_status(bd);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void asus_screenpad_exit(struct asus_wmi *asus)
|
||||
+{
|
||||
+ backlight_device_unregister(asus->screenpad_backlight_device);
|
||||
+
|
||||
+ asus->screenpad_backlight_device = NULL;
|
||||
+}
|
||||
+
|
||||
/* Fn-lock ********************************************************************/
|
||||
|
||||
static bool asus_wmi_has_fnlock_key(struct asus_wmi *asus)
|
||||
@@ -4431,6 +4555,12 @@ static int asus_wmi_add(struct platform_device *pdev)
|
||||
} else if (asus->driver->quirks->wmi_backlight_set_devstate)
|
||||
err = asus_wmi_set_devstate(ASUS_WMI_DEVID_BACKLIGHT, 2, NULL);
|
||||
|
||||
+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT)) {
|
||||
+ err = asus_screenpad_init(asus);
|
||||
+ if (err && err != -ENODEV)
|
||||
+ goto fail_screenpad;
|
||||
+ }
|
||||
+
|
||||
if (asus_wmi_has_fnlock_key(asus)) {
|
||||
asus->fnlock_locked = fnlock_default;
|
||||
asus_wmi_fnlock_update(asus);
|
||||
@@ -4454,6 +4584,8 @@ static int asus_wmi_add(struct platform_device *pdev)
|
||||
asus_wmi_backlight_exit(asus);
|
||||
fail_backlight:
|
||||
asus_wmi_rfkill_exit(asus);
|
||||
+fail_screenpad:
|
||||
+ asus_screenpad_exit(asus);
|
||||
fail_rfkill:
|
||||
asus_wmi_led_exit(asus);
|
||||
fail_leds:
|
||||
@@ -4480,6 +4612,7 @@ static int asus_wmi_remove(struct platform_device *device)
|
||||
asus = platform_get_drvdata(device);
|
||||
wmi_remove_notify_handler(asus->driver->event_guid);
|
||||
asus_wmi_backlight_exit(asus);
|
||||
+ asus_screenpad_exit(asus);
|
||||
asus_wmi_input_exit(asus);
|
||||
asus_wmi_led_exit(asus);
|
||||
asus_wmi_rfkill_exit(asus);
|
||||
diff --git a/drivers/platform/x86/asus-wmi.h b/drivers/platform/x86/asus-wmi.h
|
||||
index a478ebfd34df..5fbdd0eafa02 100644
|
||||
--- a/drivers/platform/x86/asus-wmi.h
|
||||
+++ b/drivers/platform/x86/asus-wmi.h
|
||||
@@ -57,6 +57,7 @@ struct quirk_entry {
|
||||
struct asus_wmi_driver {
|
||||
int brightness;
|
||||
int panel_power;
|
||||
+ int screenpad_brightness;
|
||||
int wlan_ctrl_by_user;
|
||||
|
||||
const char *name;
|
||||
diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
|
||||
index 16e99a1c37fc..63e630276499 100644
|
||||
--- a/include/linux/platform_data/x86/asus-wmi.h
|
||||
+++ b/include/linux/platform_data/x86/asus-wmi.h
|
||||
@@ -58,6 +58,10 @@
|
||||
#define ASUS_WMI_DEVID_KBD_BACKLIGHT 0x00050021
|
||||
#define ASUS_WMI_DEVID_LIGHT_SENSOR 0x00050022 /* ?? */
|
||||
#define ASUS_WMI_DEVID_LIGHTBAR 0x00050025
|
||||
+/* This can only be used to disable the screen, not re-enable */
|
||||
+#define ASUS_WMI_DEVID_SCREENPAD_POWER 0x00050031
|
||||
+/* Writing a brightness re-enables the screen if disabled */
|
||||
+#define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032
|
||||
#define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018
|
||||
#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075
|
||||
|
||||
--
|
||||
2.41.0
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,552 +0,0 @@
|
||||
From c92de794ee60ef526ca33cfee59e96f0d95b0697 Mon Sep 17 00:00:00 2001
|
||||
From: Piotr Gorski <lucjan.lucjanov@gmail.com>
|
||||
Date: Sun, 17 Sep 2023 22:51:20 +0200
|
||||
Subject: [PATCH] bore-eevdf
|
||||
|
||||
Signed-off-by: Piotr Gorski <lucjan.lucjanov@gmail.com>
|
||||
---
|
||||
include/linux/sched.h | 31 ++++++++
|
||||
init/Kconfig | 20 +++++
|
||||
kernel/sched/core.c | 160 +++++++++++++++++++++++++++++++++++++++
|
||||
kernel/sched/debug.c | 3 +
|
||||
kernel/sched/fair.c | 169 +++++++++++++++++++++++++++++++++++++++++-
|
||||
5 files changed, 381 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/include/linux/sched.h b/include/linux/sched.h
|
||||
index c940c4dc8..e88251927 100644
|
||||
--- a/include/linux/sched.h
|
||||
+++ b/include/linux/sched.h
|
||||
@@ -545,6 +545,24 @@ struct sched_statistics {
|
||||
#endif /* CONFIG_SCHEDSTATS */
|
||||
} ____cacheline_aligned;
|
||||
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+typedef union {
|
||||
+ u16 u16;
|
||||
+ s16 s16;
|
||||
+ u8 u8[2];
|
||||
+ s8 s8[2];
|
||||
+} x16;
|
||||
+
|
||||
+typedef union {
|
||||
+ u32 u32;
|
||||
+ s32 s32;
|
||||
+ u16 u16[2];
|
||||
+ s16 s16[2];
|
||||
+ u8 u8[4];
|
||||
+ s8 s8[4];
|
||||
+} x32;
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
+
|
||||
struct sched_entity {
|
||||
/* For load-balancing: */
|
||||
struct load_weight load;
|
||||
@@ -559,6 +577,12 @@ struct sched_entity {
|
||||
u64 sum_exec_runtime;
|
||||
u64 prev_sum_exec_runtime;
|
||||
u64 vruntime;
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ u64 burst_time;
|
||||
+ u16 prev_burst_penalty;
|
||||
+ u16 curr_burst_penalty;
|
||||
+ u16 burst_penalty;
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
s64 vlag;
|
||||
u64 slice;
|
||||
|
||||
@@ -990,6 +1014,13 @@ struct task_struct {
|
||||
struct list_head children;
|
||||
struct list_head sibling;
|
||||
struct task_struct *group_leader;
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ u16 child_burst_cache;
|
||||
+ u16 child_burst_count_cache;
|
||||
+ u64 child_burst_last_cached;
|
||||
+ u16 group_burst_cache;
|
||||
+ u64 group_burst_last_cached;
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
|
||||
/*
|
||||
* 'ptraced' is the list of tasks this task is using ptrace() on.
|
||||
diff --git a/init/Kconfig b/init/Kconfig
|
||||
index 25193a9d5..acc02af18 100644
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -1278,6 +1278,26 @@ config CHECKPOINT_RESTORE
|
||||
|
||||
If unsure, say N here.
|
||||
|
||||
+config SCHED_BORE
|
||||
+ bool "Burst-Oriented Response Enhancer"
|
||||
+ default y
|
||||
+ help
|
||||
+ In Desktop and Mobile computing, one might prefer interactive
|
||||
+ tasks to keep responsive no matter what they run in the background.
|
||||
+
|
||||
+ Enabling this kernel feature modifies the scheduler to discriminate
|
||||
+ tasks by their burst time (runtime since it last went sleeping or
|
||||
+ yielding state) and prioritize those that run less bursty.
|
||||
+ Such tasks usually include window compositor, widgets backend,
|
||||
+ terminal emulator, video playback, games and so on.
|
||||
+ With a little impact to scheduling fairness, it may improve
|
||||
+ responsiveness especially under heavy background workload.
|
||||
+
|
||||
+ You can turn it off by setting the sysctl kernel.sched_bore = 0.
|
||||
+ Enabling this feature implies NO_GENTLE_FAIR_SLEEPERS by default.
|
||||
+
|
||||
+ If unsure say Y here.
|
||||
+
|
||||
config SCHED_AUTOGROUP
|
||||
bool "Automatic process group scheduling"
|
||||
select CGROUPS
|
||||
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
|
||||
index aff81e124..2cc47b723 100644
|
||||
--- a/kernel/sched/core.c
|
||||
+++ b/kernel/sched/core.c
|
||||
@@ -4491,6 +4491,155 @@ int wake_up_state(struct task_struct *p, unsigned int state)
|
||||
return try_to_wake_up(p, state, 0);
|
||||
}
|
||||
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+extern unsigned int sched_burst_cache_lifetime;
|
||||
+extern unsigned int sched_bore;
|
||||
+extern unsigned int sched_burst_fork_atavistic;
|
||||
+
|
||||
+void __init sched_init_bore(void) {
|
||||
+ init_task.child_burst_cache = 0;
|
||||
+ init_task.child_burst_count_cache = 0;
|
||||
+ init_task.child_burst_last_cached = 0;
|
||||
+ init_task.group_burst_cache = 0;
|
||||
+ init_task.group_burst_last_cached = 0;
|
||||
+ init_task.se.burst_time = 0;
|
||||
+ init_task.se.prev_burst_penalty = 0;
|
||||
+ init_task.se.curr_burst_penalty = 0;
|
||||
+ init_task.se.burst_penalty = 0;
|
||||
+}
|
||||
+
|
||||
+void inline sched_fork_bore(struct task_struct *p) {
|
||||
+ p->child_burst_cache = 0;
|
||||
+ p->child_burst_count_cache = 0;
|
||||
+ p->child_burst_last_cached = 0;
|
||||
+ p->group_burst_cache = 0;
|
||||
+ p->group_burst_last_cached = 0;
|
||||
+ p->se.burst_time = 0;
|
||||
+ p->se.curr_burst_penalty = 0;
|
||||
+}
|
||||
+
|
||||
+static u32 count_child_tasks(struct task_struct *p) {
|
||||
+ struct task_struct *child;
|
||||
+ u32 cnt = 0;
|
||||
+ list_for_each_entry(child, &p->children, sibling) {cnt++;}
|
||||
+ return cnt;
|
||||
+}
|
||||
+
|
||||
+static inline bool child_burst_cache_expired(struct task_struct *p, u64 now) {
|
||||
+ return (p->child_burst_last_cached + sched_burst_cache_lifetime < now);
|
||||
+}
|
||||
+
|
||||
+static inline bool group_burst_cache_expired(struct task_struct *p, u64 now) {
|
||||
+ return (p->group_burst_last_cached + sched_burst_cache_lifetime < now);
|
||||
+}
|
||||
+
|
||||
+static void __update_child_burst_cache(
|
||||
+ struct task_struct *p, u32 cnt, u32 sum, u64 now) {
|
||||
+ u16 avg = 0;
|
||||
+ if (cnt) avg = DIV_ROUND_CLOSEST(sum, cnt);
|
||||
+ p->child_burst_cache = max(avg, p->se.burst_penalty);
|
||||
+ p->child_burst_count_cache = cnt;
|
||||
+ p->child_burst_last_cached = now;
|
||||
+}
|
||||
+
|
||||
+static void update_child_burst_cache(struct task_struct *p, u64 now) {
|
||||
+ struct task_struct *child;
|
||||
+ u32 cnt = 0;
|
||||
+ u32 sum = 0;
|
||||
+
|
||||
+ list_for_each_entry(child, &p->children, sibling) {
|
||||
+ cnt++;
|
||||
+ sum += child->se.burst_penalty;
|
||||
+ }
|
||||
+
|
||||
+ __update_child_burst_cache(p, cnt, sum, now);
|
||||
+}
|
||||
+
|
||||
+static void update_child_burst_cache_atavistic(
|
||||
+ struct task_struct *p, u64 now, u32 depth, u32 *acnt, u32 *asum) {
|
||||
+ struct task_struct *child, *dec;
|
||||
+ u32 cnt = 0, dcnt = 0;
|
||||
+ u32 sum = 0;
|
||||
+
|
||||
+ list_for_each_entry(child, &p->children, sibling) {
|
||||
+ dec = child;
|
||||
+ while ((dcnt = count_child_tasks(dec)) == 1)
|
||||
+ dec = list_first_entry(&dec->children, struct task_struct, sibling);
|
||||
+
|
||||
+ if (!dcnt || !depth) {
|
||||
+ cnt++;
|
||||
+ sum += dec->se.burst_penalty;
|
||||
+ } else {
|
||||
+ if (child_burst_cache_expired(dec, now))
|
||||
+ update_child_burst_cache_atavistic(dec, now, depth - 1, &cnt, &sum);
|
||||
+ else {
|
||||
+ cnt += dec->child_burst_count_cache;
|
||||
+ sum += (u32)dec->child_burst_cache * dec->child_burst_count_cache;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ __update_child_burst_cache(p, cnt, sum, now);
|
||||
+ *acnt += cnt;
|
||||
+ *asum += sum;
|
||||
+}
|
||||
+
|
||||
+static void update_group_burst_cache(struct task_struct *p, u64 now) {
|
||||
+ struct task_struct *member;
|
||||
+ u32 cnt = 0, sum = 0;
|
||||
+ u16 avg = 0;
|
||||
+
|
||||
+ for_each_thread(p, member) {
|
||||
+ cnt++;
|
||||
+ sum += member->se.burst_penalty;
|
||||
+ }
|
||||
+
|
||||
+ if (cnt) avg = DIV_ROUND_CLOSEST(sum, cnt);
|
||||
+ p->group_burst_cache = max(avg, p->se.burst_penalty);
|
||||
+ p->group_burst_last_cached = now;
|
||||
+}
|
||||
+
|
||||
+#define forked_task_is_process(p) (p->pid == p->tgid)
|
||||
+
|
||||
+static void fork_burst_penalty(struct task_struct *p) {
|
||||
+ struct sched_entity *se = &p->se;
|
||||
+ struct task_struct *anc;
|
||||
+ u64 now = ktime_get_ns();
|
||||
+ u32 cnt = 0, sum = 0;
|
||||
+ u16 burst_cache;
|
||||
+
|
||||
+ if (likely(sched_bore)) {
|
||||
+ read_lock(&tasklist_lock);
|
||||
+
|
||||
+ if (forked_task_is_process(p)) {
|
||||
+ anc = p->real_parent;
|
||||
+ if (likely(sched_burst_fork_atavistic)) {
|
||||
+ while ((anc->real_parent != anc) &&
|
||||
+ (count_child_tasks(anc) == 1))
|
||||
+ anc = anc->real_parent;
|
||||
+ if (child_burst_cache_expired(anc, now))
|
||||
+ update_child_burst_cache_atavistic(
|
||||
+ anc, now, sched_burst_fork_atavistic - 1, &cnt, &sum);
|
||||
+ } else
|
||||
+ if (child_burst_cache_expired(anc, now))
|
||||
+ update_child_burst_cache(anc, now);
|
||||
+
|
||||
+ burst_cache = anc->child_burst_cache;
|
||||
+ } else {
|
||||
+ anc = p->group_leader;
|
||||
+ if (group_burst_cache_expired(anc, now))
|
||||
+ update_group_burst_cache(anc, now);
|
||||
+
|
||||
+ burst_cache = anc->group_burst_cache;
|
||||
+ }
|
||||
+
|
||||
+ read_unlock(&tasklist_lock);
|
||||
+ se->prev_burst_penalty = max(se->prev_burst_penalty, burst_cache);
|
||||
+ }
|
||||
+ se->burst_penalty = se->prev_burst_penalty;
|
||||
+}
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
+
|
||||
/*
|
||||
* Perform scheduler related setup for a newly forked process p.
|
||||
* p is forked by current.
|
||||
@@ -4507,6 +4656,9 @@ static void __sched_fork(unsigned long clone_flags, struct task_struct *p)
|
||||
p->se.prev_sum_exec_runtime = 0;
|
||||
p->se.nr_migrations = 0;
|
||||
p->se.vruntime = 0;
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ sched_fork_bore(p);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
p->se.vlag = 0;
|
||||
INIT_LIST_HEAD(&p->se.group_node);
|
||||
|
||||
@@ -4828,6 +4980,9 @@ void sched_cgroup_fork(struct task_struct *p, struct kernel_clone_args *kargs)
|
||||
|
||||
void sched_post_fork(struct task_struct *p)
|
||||
{
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ fork_burst_penalty(p);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
uclamp_post_fork(p);
|
||||
}
|
||||
|
||||
@@ -9954,6 +10109,11 @@ void __init sched_init(void)
|
||||
BUG_ON(&dl_sched_class != &stop_sched_class + 1);
|
||||
#endif
|
||||
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ sched_init_bore();
|
||||
+ printk(KERN_INFO "BORE (Burst-Oriented Response Enhancer) CPU Scheduler modification 3.1.4 by Masahito Suzuki");
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
+
|
||||
wait_bit_init();
|
||||
|
||||
#ifdef CONFIG_FAIR_GROUP_SCHED
|
||||
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
|
||||
index e7e83181f..6ebd52247 100644
|
||||
--- a/kernel/sched/debug.c
|
||||
+++ b/kernel/sched/debug.c
|
||||
@@ -594,6 +594,9 @@ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
|
||||
SPLIT_NS(schedstat_val_or_zero(p->stats.sum_sleep_runtime)),
|
||||
SPLIT_NS(schedstat_val_or_zero(p->stats.sum_block_runtime)));
|
||||
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ SEQ_printf(m, " %2d", ((x16*)&p->se.burst_penalty)->u8[1]);
|
||||
+#endif
|
||||
#ifdef CONFIG_NUMA_BALANCING
|
||||
SEQ_printf(m, " %d %d", task_node(p), task_numa_group_id(p));
|
||||
#endif
|
||||
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
|
||||
index d49c0f979..dffee0766 100644
|
||||
--- a/kernel/sched/fair.c
|
||||
+++ b/kernel/sched/fair.c
|
||||
@@ -19,6 +19,9 @@
|
||||
*
|
||||
* Adaptive scheduling granularity, math enhancements by Peter Zijlstra
|
||||
* Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra
|
||||
+ *
|
||||
+ * Burst-Oriented Response Enhancer (BORE) CPU Scheduler
|
||||
+ * Copyright (C) 2021-2023 Masahito Suzuki <firelzrd@gmail.com>
|
||||
*/
|
||||
#include <linux/energy_model.h>
|
||||
#include <linux/mmap_lock.h>
|
||||
@@ -86,6 +89,67 @@ unsigned int sysctl_sched_child_runs_first __read_mostly;
|
||||
|
||||
const_debug unsigned int sysctl_sched_migration_cost = 500000UL;
|
||||
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+unsigned int __read_mostly sched_bore = 1;
|
||||
+unsigned int __read_mostly sched_bore_extra_flags = 0;
|
||||
+unsigned int __read_mostly sched_burst_cache_lifetime = 60000000;
|
||||
+unsigned int __read_mostly sched_burst_penalty_offset = 22;
|
||||
+unsigned int __read_mostly sched_burst_penalty_scale = 1366;
|
||||
+unsigned int __read_mostly sched_burst_smoothness_up = 1;
|
||||
+unsigned int __read_mostly sched_burst_smoothness_down = 0;
|
||||
+unsigned int __read_mostly sched_burst_fork_atavistic = 2;
|
||||
+static int three = 3;
|
||||
+static int sixty_four = 64;
|
||||
+static int maxval_12_bits = 4095;
|
||||
+
|
||||
+#define MAX_BURST_PENALTY ((40U << 8) - 1)
|
||||
+
|
||||
+static inline u32 log2plus1_u64_u32f8(u64 v) {
|
||||
+ x32 result;
|
||||
+ int msb = fls64(v);
|
||||
+ int excess_bits = msb - 9;
|
||||
+ result.u8[0] = (0 <= excess_bits)? v >> excess_bits: v << -excess_bits;
|
||||
+ result.u8[1] = msb;
|
||||
+ return result.u32;
|
||||
+}
|
||||
+
|
||||
+static inline u32 calc_burst_penalty(u64 burst_time) {
|
||||
+ u32 greed, tolerance, penalty, scaled_penalty;
|
||||
+
|
||||
+ greed = log2plus1_u64_u32f8(burst_time);
|
||||
+ tolerance = sched_burst_penalty_offset << 8;
|
||||
+ penalty = max(0, (s32)greed - (s32)tolerance);
|
||||
+ scaled_penalty = penalty * sched_burst_penalty_scale >> 10;
|
||||
+
|
||||
+ return min(MAX_BURST_PENALTY, scaled_penalty);
|
||||
+}
|
||||
+
|
||||
+static void update_burst_penalty(struct sched_entity *se) {
|
||||
+ se->curr_burst_penalty = calc_burst_penalty(se->burst_time);
|
||||
+ se->burst_penalty = max(se->prev_burst_penalty, se->curr_burst_penalty);
|
||||
+}
|
||||
+
|
||||
+static inline u64 penalty_scale(u64 delta, struct sched_entity *se, bool half) {
|
||||
+ u32 score = ((x16*)&se->burst_penalty)->u8[1];
|
||||
+ if (half) score >>= 1;
|
||||
+ return mul_u64_u32_shr(delta, sched_prio_to_wmult[score], 22);
|
||||
+}
|
||||
+
|
||||
+static inline u32 binary_smooth(u32 new, u32 old) {
|
||||
+ int increment = new - old;
|
||||
+ return (0 <= increment)?
|
||||
+ old + ( increment >> sched_burst_smoothness_up):
|
||||
+ old - (-increment >> sched_burst_smoothness_down);
|
||||
+}
|
||||
+
|
||||
+static void restart_burst(struct sched_entity *se) {
|
||||
+ se->burst_penalty = se->prev_burst_penalty =
|
||||
+ binary_smooth(se->curr_burst_penalty, se->prev_burst_penalty);
|
||||
+ se->curr_burst_penalty = 0;
|
||||
+ se->burst_time = 0;
|
||||
+}
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
+
|
||||
int sched_thermal_decay_shift;
|
||||
static int __init setup_sched_thermal_decay_shift(char *str)
|
||||
{
|
||||
@@ -145,6 +209,78 @@ static unsigned int sysctl_numa_balancing_promote_rate_limit = 65536;
|
||||
|
||||
#ifdef CONFIG_SYSCTL
|
||||
static struct ctl_table sched_fair_sysctls[] = {
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ {
|
||||
+ .procname = "sched_bore",
|
||||
+ .data = &sched_bore,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = SYSCTL_ONE,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_bore_extra_flags",
|
||||
+ .data = &sched_bore_extra_flags,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = SYSCTL_ONE,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_burst_cache_lifetime",
|
||||
+ .data = &sched_burst_cache_lifetime,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = proc_dointvec,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_burst_fork_atavistic",
|
||||
+ .data = &sched_burst_fork_atavistic,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = &three,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_burst_penalty_offset",
|
||||
+ .data = &sched_burst_penalty_offset,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = &sixty_four,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_burst_penalty_scale",
|
||||
+ .data = &sched_burst_penalty_scale,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = &maxval_12_bits,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_burst_smoothness_down",
|
||||
+ .data = &sched_burst_smoothness_down,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = &three,
|
||||
+ },
|
||||
+ {
|
||||
+ .procname = "sched_burst_smoothness_up",
|
||||
+ .data = &sched_burst_smoothness_up,
|
||||
+ .maxlen = sizeof(unsigned int),
|
||||
+ .mode = 0644,
|
||||
+ .proc_handler = &proc_dointvec_minmax,
|
||||
+ .extra1 = SYSCTL_ZERO,
|
||||
+ .extra2 = &three,
|
||||
+ },
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
{
|
||||
.procname = "sched_child_runs_first",
|
||||
.data = &sysctl_sched_child_runs_first,
|
||||
@@ -308,11 +444,22 @@ static u64 __calc_delta(u64 delta_exec, unsigned long weight, struct load_weight
|
||||
/*
|
||||
* delta /= w
|
||||
*/
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+#define bore_start_debit_full_penalty (sched_bore_extra_flags)
|
||||
+#define calc_delta_fair_debit(delta, se) \
|
||||
+ __calc_delta_fair(delta, se, !bore_start_debit_full_penalty)
|
||||
+#define calc_delta_fair(delta, se) __calc_delta_fair(delta, se, false)
|
||||
+static inline u64 __calc_delta_fair(u64 delta, struct sched_entity *se, bool half)
|
||||
+#else // CONFIG_SCHED_BORE
|
||||
static inline u64 calc_delta_fair(u64 delta, struct sched_entity *se)
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
{
|
||||
if (unlikely(se->load.weight != NICE_0_LOAD))
|
||||
delta = __calc_delta(delta, NICE_0_LOAD, &se->load);
|
||||
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ if (likely(sched_bore)) delta = penalty_scale(delta, se, half);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
return delta;
|
||||
}
|
||||
|
||||
@@ -1128,7 +1275,11 @@ static void update_curr(struct cfs_rq *cfs_rq)
|
||||
curr->sum_exec_runtime += delta_exec;
|
||||
schedstat_add(cfs_rq->exec_clock, delta_exec);
|
||||
|
||||
- curr->vruntime += calc_delta_fair(delta_exec, curr);
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ curr->burst_time += delta_exec;
|
||||
+ update_burst_penalty(curr);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
+ curr->vruntime += max(1ULL, calc_delta_fair(delta_exec, curr));
|
||||
update_deadline(cfs_rq, curr);
|
||||
update_min_vruntime(cfs_rq);
|
||||
|
||||
@@ -4926,7 +5077,11 @@ static inline void update_misfit_status(struct task_struct *p, struct rq *rq) {}
|
||||
static void
|
||||
place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int flags)
|
||||
{
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ u64 vslice = calc_delta_fair_debit(se->slice, se);
|
||||
+#else // CONFIG_SCHED_BORE
|
||||
u64 vslice = calc_delta_fair(se->slice, se);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
u64 vruntime = avg_vruntime(cfs_rq);
|
||||
s64 lag = 0;
|
||||
|
||||
@@ -6482,6 +6637,9 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
|
||||
util_est_dequeue(&rq->cfs, p);
|
||||
|
||||
for_each_sched_entity(se) {
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ if (task_sleep) restart_burst(se);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
cfs_rq = cfs_rq_of(se);
|
||||
dequeue_entity(cfs_rq, se, flags);
|
||||
|
||||
@@ -8206,8 +8364,12 @@ static void yield_task_fair(struct rq *rq)
|
||||
/*
|
||||
* Are we the only task in the tree?
|
||||
*/
|
||||
- if (unlikely(rq->nr_running == 1))
|
||||
+ if (unlikely(rq->nr_running == 1)) {
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ restart_burst(se);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
return;
|
||||
+ }
|
||||
|
||||
clear_buddies(cfs_rq, se);
|
||||
|
||||
@@ -8216,6 +8378,9 @@ static void yield_task_fair(struct rq *rq)
|
||||
* Update run-time statistics of the 'current'.
|
||||
*/
|
||||
update_curr(cfs_rq);
|
||||
+#ifdef CONFIG_SCHED_BORE
|
||||
+ restart_burst(se);
|
||||
+#endif // CONFIG_SCHED_BORE
|
||||
/*
|
||||
* Tell update_rq_clock() that we've just updated,
|
||||
* so we don't do microscopic update in schedule()
|
||||
--
|
||||
2.42.0
|
@ -1,57 +1,44 @@
|
||||
From e55f6f53ab572901f826fb66d385eaa7d1210bb5 Mon Sep 17 00:00:00 2001
|
||||
From: Jan200101 <sentrycraft123@gmail.com>
|
||||
Date: Tue, 22 Mar 2022 17:52:14 +0100
|
||||
Subject: [PATCH] drm/amdgpu: enable SI and CIK support by default
|
||||
|
||||
Signed-off-by: Jan200101 <sentrycraft123@gmail.com>
|
||||
---
|
||||
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 14 ++------------
|
||||
drivers/gpu/drm/radeon/radeon_drv.c | 10 ++++++++++
|
||||
2 files changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
index 0ead08ba58c2..95a59d203922 100644
|
||||
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
@@ -575,15 +575,10 @@ module_param_named(timeout_period, amdgpu_watchdog_timer.period, uint, 0644);
|
||||
diff '--color=auto' -uraN cachyos/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c cachyos-amdgpu/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
|
||||
--- cachyos/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 2023-10-30 05:31:08.000000000 +0300
|
||||
+++ cachyos-amdgpu/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c 2023-11-04 18:03:47.475158392 +0300
|
||||
@@ -582,15 +582,11 @@
|
||||
*/
|
||||
#ifdef CONFIG_DRM_AMDGPU_SI
|
||||
|
||||
-#if defined(CONFIG_DRM_RADEON) || defined(CONFIG_DRM_RADEON_MODULE)
|
||||
-#if IS_ENABLED(CONFIG_DRM_RADEON) || IS_ENABLED(CONFIG_DRM_RADEON_MODULE)
|
||||
-int amdgpu_si_support = 0;
|
||||
-MODULE_PARM_DESC(si_support, "SI support (1 = enabled, 0 = disabled (default))");
|
||||
-#else
|
||||
int amdgpu_si_support = 1;
|
||||
MODULE_PARM_DESC(si_support, "SI support (1 = enabled (default), 0 = disabled)");
|
||||
-#endif
|
||||
-
|
||||
|
||||
module_param_named(si_support, amdgpu_si_support, int, 0444);
|
||||
+
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -594,15 +589,10 @@ module_param_named(si_support, amdgpu_si_support, int, 0444);
|
||||
@@ -601,15 +597,11 @@
|
||||
*/
|
||||
#ifdef CONFIG_DRM_AMDGPU_CIK
|
||||
|
||||
-#if defined(CONFIG_DRM_RADEON) || defined(CONFIG_DRM_RADEON_MODULE)
|
||||
-#if IS_ENABLED(CONFIG_DRM_RADEON) || IS_ENABLED(CONFIG_DRM_RADEON_MODULE)
|
||||
-int amdgpu_cik_support = 0;
|
||||
-MODULE_PARM_DESC(cik_support, "CIK support (1 = enabled, 0 = disabled (default))");
|
||||
-#else
|
||||
int amdgpu_cik_support = 1;
|
||||
MODULE_PARM_DESC(cik_support, "CIK support (1 = enabled (default), 0 = disabled)");
|
||||
-#endif
|
||||
-
|
||||
|
||||
module_param_named(cik_support, amdgpu_cik_support, int, 0444);
|
||||
+
|
||||
#endif
|
||||
|
||||
/**
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
index 956c72b5aa33..5102711ece53 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
@@ -272,12 +272,22 @@ module_param_named(uvd, radeon_uvd, int, 0444);
|
||||
diff '--color=auto' -uraN cachyos/drivers/gpu/drm/radeon/radeon_drv.c cachyos-amdgpu/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
--- cachyos/drivers/gpu/drm/radeon/radeon_drv.c 2023-10-30 05:31:08.000000000 +0300
|
||||
+++ cachyos-amdgpu/drivers/gpu/drm/radeon/radeon_drv.c 2023-11-04 18:00:50.099902000 +0300
|
||||
@@ -239,12 +239,22 @@
|
||||
MODULE_PARM_DESC(vce, "vce enable/disable vce support (1 = enable, 0 = disable)");
|
||||
module_param_named(vce, radeon_vce, int, 0444);
|
||||
|
||||
@ -74,6 +61,3 @@ index 956c72b5aa33..5102711ece53 100644
|
||||
module_param_named(cik_support, radeon_cik_support, int, 0444);
|
||||
|
||||
static struct pci_device_id pciidlist[] = {
|
||||
--
|
||||
2.35.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,719 +0,0 @@
|
||||
From 309712fae7491a876359ddda6e4cf8944f454731 Mon Sep 17 00:00:00 2001
|
||||
From: GloriousEggroll <gloriouseggroll@gmail.com>
|
||||
Date: Wed, 13 Sep 2023 17:59:59 -0600
|
||||
Subject: [PATCH] OpenRGB
|
||||
|
||||
---
|
||||
drivers/i2c/busses/Kconfig | 9 +
|
||||
drivers/i2c/busses/Makefile | 1 +
|
||||
drivers/i2c/busses/i2c-nct6775.c | 647 +++++++++++++++++++++++++++++++
|
||||
drivers/i2c/busses/i2c-piix4.c | 4 +-
|
||||
4 files changed, 659 insertions(+), 2 deletions(-)
|
||||
create mode 100644 drivers/i2c/busses/i2c-nct6775.c
|
||||
|
||||
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
|
||||
index 9cfe8fc50..efc3b0c0b 100644
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -229,6 +229,15 @@ config I2C_CHT_WC
|
||||
combined with a FUSB302 Type-C port-controller as such it is advised
|
||||
to also select CONFIG_TYPEC_FUSB302=m.
|
||||
|
||||
+config I2C_NCT6775
|
||||
+ tristate "Nuvoton NCT6775 and compatible SMBus controller"
|
||||
+ help
|
||||
+ If you say yes to this option, support will be included for the
|
||||
+ Nuvoton NCT6775 and compatible SMBus controllers.
|
||||
+
|
||||
+ This driver can also be built as a module. If so, the module
|
||||
+ will be called i2c-nct6775.
|
||||
+
|
||||
config I2C_NFORCE2
|
||||
tristate "Nvidia nForce2, nForce3 and nForce4"
|
||||
depends on PCI
|
||||
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
|
||||
index af56fe2c7..76be74584 100644
|
||||
--- a/drivers/i2c/busses/Makefile
|
||||
+++ b/drivers/i2c/busses/Makefile
|
||||
@@ -20,6 +20,7 @@ obj-$(CONFIG_I2C_CHT_WC) += i2c-cht-wc.o
|
||||
obj-$(CONFIG_I2C_I801) += i2c-i801.o
|
||||
obj-$(CONFIG_I2C_ISCH) += i2c-isch.o
|
||||
obj-$(CONFIG_I2C_ISMT) += i2c-ismt.o
|
||||
+obj-$(CONFIG_I2C_NCT6775) += i2c-nct6775.o
|
||||
obj-$(CONFIG_I2C_NFORCE2) += i2c-nforce2.o
|
||||
obj-$(CONFIG_I2C_NFORCE2_S4985) += i2c-nforce2-s4985.o
|
||||
obj-$(CONFIG_I2C_NVIDIA_GPU) += i2c-nvidia-gpu.o
|
||||
diff --git a/drivers/i2c/busses/i2c-nct6775.c b/drivers/i2c/busses/i2c-nct6775.c
|
||||
new file mode 100644
|
||||
index 000000000..0462f0952
|
||||
--- /dev/null
|
||||
+++ b/drivers/i2c/busses/i2c-nct6775.c
|
||||
@@ -0,0 +1,647 @@
|
||||
+/*
|
||||
+ * i2c-nct6775 - Driver for the SMBus master functionality of
|
||||
+ * Nuvoton NCT677x Super-I/O chips
|
||||
+ *
|
||||
+ * Copyright (C) 2019 Adam Honse <calcprogrammer1@gmail.com>
|
||||
+ *
|
||||
+ * Derived from nct6775 hwmon driver
|
||||
+ * Copyright (C) 2012 Guenter Roeck <linux@roeck-us.net>
|
||||
+ *
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ * You should have received a copy of the GNU General Public License
|
||||
+ * along with this program; if not, write to the Free Software
|
||||
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/init.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/jiffies.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/hwmon.h>
|
||||
+#include <linux/hwmon-sysfs.h>
|
||||
+#include <linux/hwmon-vid.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/mutex.h>
|
||||
+#include <linux/delay.h>
|
||||
+#include <linux/ioport.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/bitops.h>
|
||||
+#include <linux/dmi.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/nospec.h>
|
||||
+
|
||||
+#define DRVNAME "i2c-nct6775"
|
||||
+
|
||||
+/* Nuvoton SMBus address offsets */
|
||||
+#define SMBHSTDAT (0 + nuvoton_nct6793d_smba)
|
||||
+#define SMBBLKSZ (1 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTCMD (2 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTIDX (3 + nuvoton_nct6793d_smba) //Index field is the Command field on other controllers
|
||||
+#define SMBHSTCTL (4 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTADD (5 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTERR (9 + nuvoton_nct6793d_smba)
|
||||
+#define SMBHSTSTS (0xE + nuvoton_nct6793d_smba)
|
||||
+
|
||||
+/* Command register */
|
||||
+#define NCT6793D_READ_BYTE 0
|
||||
+#define NCT6793D_READ_WORD 1
|
||||
+#define NCT6793D_READ_BLOCK 2
|
||||
+#define NCT6793D_BLOCK_WRITE_READ_PROC_CALL 3
|
||||
+#define NCT6793D_PROC_CALL 4
|
||||
+#define NCT6793D_WRITE_BYTE 8
|
||||
+#define NCT6793D_WRITE_WORD 9
|
||||
+#define NCT6793D_WRITE_BLOCK 10
|
||||
+
|
||||
+/* Control register */
|
||||
+#define NCT6793D_MANUAL_START 128
|
||||
+#define NCT6793D_SOFT_RESET 64
|
||||
+
|
||||
+/* Error register */
|
||||
+#define NCT6793D_NO_ACK 32
|
||||
+
|
||||
+/* Status register */
|
||||
+#define NCT6793D_FIFO_EMPTY 1
|
||||
+#define NCT6793D_FIFO_FULL 2
|
||||
+#define NCT6793D_MANUAL_ACTIVE 4
|
||||
+
|
||||
+#define NCT6775_LD_SMBUS 0x0B
|
||||
+
|
||||
+/* Other settings */
|
||||
+#define MAX_RETRIES 400
|
||||
+
|
||||
+enum kinds { nct6106, nct6775, nct6776, nct6779, nct6791, nct6792, nct6793,
|
||||
+ nct6795, nct6796, nct6798 };
|
||||
+
|
||||
+struct nct6775_sio_data {
|
||||
+ int sioreg;
|
||||
+ enum kinds kind;
|
||||
+};
|
||||
+
|
||||
+/* used to set data->name = nct6775_device_names[data->sio_kind] */
|
||||
+static const char * const nct6775_device_names[] = {
|
||||
+ "nct6106",
|
||||
+ "nct6775",
|
||||
+ "nct6776",
|
||||
+ "nct6779",
|
||||
+ "nct6791",
|
||||
+ "nct6792",
|
||||
+ "nct6793",
|
||||
+ "nct6795",
|
||||
+ "nct6796",
|
||||
+ "nct6798",
|
||||
+};
|
||||
+
|
||||
+static const char * const nct6775_sio_names[] __initconst = {
|
||||
+ "NCT6106D",
|
||||
+ "NCT6775F",
|
||||
+ "NCT6776D/F",
|
||||
+ "NCT6779D",
|
||||
+ "NCT6791D",
|
||||
+ "NCT6792D",
|
||||
+ "NCT6793D",
|
||||
+ "NCT6795D",
|
||||
+ "NCT6796D",
|
||||
+ "NCT6798D",
|
||||
+};
|
||||
+
|
||||
+#define SIO_REG_LDSEL 0x07 /* Logical device select */
|
||||
+#define SIO_REG_DEVID 0x20 /* Device ID (2 bytes) */
|
||||
+#define SIO_REG_SMBA 0x62 /* SMBus base address register */
|
||||
+
|
||||
+#define SIO_NCT6106_ID 0xc450
|
||||
+#define SIO_NCT6775_ID 0xb470
|
||||
+#define SIO_NCT6776_ID 0xc330
|
||||
+#define SIO_NCT6779_ID 0xc560
|
||||
+#define SIO_NCT6791_ID 0xc800
|
||||
+#define SIO_NCT6792_ID 0xc910
|
||||
+#define SIO_NCT6793_ID 0xd120
|
||||
+#define SIO_NCT6795_ID 0xd350
|
||||
+#define SIO_NCT6796_ID 0xd420
|
||||
+#define SIO_NCT6798_ID 0xd428
|
||||
+#define SIO_ID_MASK 0xFFF0
|
||||
+
|
||||
+static inline void
|
||||
+superio_outb(int ioreg, int reg, int val)
|
||||
+{
|
||||
+ outb(reg, ioreg);
|
||||
+ outb(val, ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+superio_inb(int ioreg, int reg)
|
||||
+{
|
||||
+ outb(reg, ioreg);
|
||||
+ return inb(ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+superio_select(int ioreg, int ld)
|
||||
+{
|
||||
+ outb(SIO_REG_LDSEL, ioreg);
|
||||
+ outb(ld, ioreg + 1);
|
||||
+}
|
||||
+
|
||||
+static inline int
|
||||
+superio_enter(int ioreg)
|
||||
+{
|
||||
+ /*
|
||||
+ * Try to reserve <ioreg> and <ioreg + 1> for exclusive access.
|
||||
+ */
|
||||
+ if (!request_muxed_region(ioreg, 2, DRVNAME))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
+ outb(0x87, ioreg);
|
||||
+ outb(0x87, ioreg);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static inline void
|
||||
+superio_exit(int ioreg)
|
||||
+{
|
||||
+ outb(0xaa, ioreg);
|
||||
+ outb(0x02, ioreg);
|
||||
+ outb(0x02, ioreg + 1);
|
||||
+ release_region(ioreg, 2);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * ISA constants
|
||||
+ */
|
||||
+
|
||||
+#define IOREGION_ALIGNMENT (~7)
|
||||
+#define IOREGION_LENGTH 2
|
||||
+#define ADDR_REG_OFFSET 0
|
||||
+#define DATA_REG_OFFSET 1
|
||||
+
|
||||
+#define NCT6775_REG_BANK 0x4E
|
||||
+#define NCT6775_REG_CONFIG 0x40
|
||||
+
|
||||
+static struct i2c_adapter *nct6775_adapter;
|
||||
+
|
||||
+struct i2c_nct6775_adapdata {
|
||||
+ unsigned short smba;
|
||||
+};
|
||||
+
|
||||
+/* Return negative errno on error. */
|
||||
+static s32 nct6775_access(struct i2c_adapter * adap, u16 addr,
|
||||
+ unsigned short flags, char read_write,
|
||||
+ u8 command, int size, union i2c_smbus_data * data)
|
||||
+{
|
||||
+ struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
|
||||
+ unsigned short nuvoton_nct6793d_smba = adapdata->smba;
|
||||
+ int i, len, cnt;
|
||||
+ union i2c_smbus_data tmp_data;
|
||||
+ int timeout = 0;
|
||||
+
|
||||
+ tmp_data.word = 0;
|
||||
+ cnt = 0;
|
||||
+ len = 0;
|
||||
+
|
||||
+ outb_p(NCT6793D_SOFT_RESET, SMBHSTCTL);
|
||||
+
|
||||
+ switch (size) {
|
||||
+ case I2C_SMBUS_QUICK:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ break;
|
||||
+ case I2C_SMBUS_BYTE_DATA:
|
||||
+ tmp_data.byte = data->byte;
|
||||
+ case I2C_SMBUS_BYTE:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ outb_p(tmp_data.byte, SMBHSTDAT);
|
||||
+ outb_p(NCT6793D_WRITE_BYTE, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ outb_p(NCT6793D_READ_BYTE, SMBHSTCMD);
|
||||
+ }
|
||||
+ break;
|
||||
+ case I2C_SMBUS_WORD_DATA:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ outb_p(data->word & 0xff, SMBHSTDAT);
|
||||
+ outb_p((data->word & 0xff00) >> 8, SMBHSTDAT);
|
||||
+ outb_p(NCT6793D_WRITE_WORD, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ outb_p(NCT6793D_READ_WORD, SMBHSTCMD);
|
||||
+ }
|
||||
+ break;
|
||||
+ case I2C_SMBUS_BLOCK_DATA:
|
||||
+ outb_p((addr << 1) | read_write,
|
||||
+ SMBHSTADD);
|
||||
+ outb_p(command, SMBHSTIDX);
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ len = data->block[0];
|
||||
+ if (len == 0 || len > I2C_SMBUS_BLOCK_MAX)
|
||||
+ return -EINVAL;
|
||||
+ outb_p(len, SMBBLKSZ);
|
||||
+
|
||||
+ cnt = 1;
|
||||
+ if (len >= 4) {
|
||||
+ for (i = cnt; i <= 4; i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len -= 4;
|
||||
+ cnt += 4;
|
||||
+ }
|
||||
+ else {
|
||||
+ for (i = cnt; i <= len; i++ ) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ }
|
||||
+
|
||||
+ outb_p(NCT6793D_WRITE_BLOCK, SMBHSTCMD);
|
||||
+ }
|
||||
+ else {
|
||||
+ return -ENOTSUPP;
|
||||
+ }
|
||||
+ break;
|
||||
+ default:
|
||||
+ dev_warn(&adap->dev, "Unsupported transaction %d\n", size);
|
||||
+ return -EOPNOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ outb_p(NCT6793D_MANUAL_START, SMBHSTCTL);
|
||||
+
|
||||
+ while ((size == I2C_SMBUS_BLOCK_DATA) && (len > 0)) {
|
||||
+ if (read_write == I2C_SMBUS_WRITE) {
|
||||
+ timeout = 0;
|
||||
+ while ((inb_p(SMBHSTSTS) & NCT6793D_FIFO_EMPTY) == 0)
|
||||
+ {
|
||||
+ if(timeout > MAX_RETRIES)
|
||||
+ {
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+ usleep_range(250, 500);
|
||||
+ timeout++;
|
||||
+ }
|
||||
+
|
||||
+ //Load more bytes into FIFO
|
||||
+ if (len >= 4) {
|
||||
+ for (i = cnt; i <= (cnt + 4); i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len -= 4;
|
||||
+ cnt += 4;
|
||||
+ }
|
||||
+ else {
|
||||
+ for (i = cnt; i <= (cnt + len); i++) {
|
||||
+ outb_p(data->block[i], SMBHSTDAT);
|
||||
+ }
|
||||
+
|
||||
+ len = 0;
|
||||
+ }
|
||||
+ }
|
||||
+ else {
|
||||
+ return -ENOTSUPP;
|
||||
+ }
|
||||
+
|
||||
+ }
|
||||
+
|
||||
+ //wait for manual mode to complete
|
||||
+ timeout = 0;
|
||||
+ while ((inb_p(SMBHSTSTS) & NCT6793D_MANUAL_ACTIVE) != 0)
|
||||
+ {
|
||||
+ if(timeout > MAX_RETRIES)
|
||||
+ {
|
||||
+ return -ETIMEDOUT;
|
||||
+ }
|
||||
+ usleep_range(250, 500);
|
||||
+ timeout++;
|
||||
+ }
|
||||
+
|
||||
+ if ((inb_p(SMBHSTERR) & NCT6793D_NO_ACK) != 0) {
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+ else if ((read_write == I2C_SMBUS_WRITE) || (size == I2C_SMBUS_QUICK)) {
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ switch (size) {
|
||||
+ case I2C_SMBUS_QUICK:
|
||||
+ case I2C_SMBUS_BYTE_DATA:
|
||||
+ data->byte = inb_p(SMBHSTDAT);
|
||||
+ break;
|
||||
+ case I2C_SMBUS_WORD_DATA:
|
||||
+ data->word = inb_p(SMBHSTDAT) + (inb_p(SMBHSTDAT) << 8);
|
||||
+ break;
|
||||
+ }
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static u32 nct6775_func(struct i2c_adapter *adapter)
|
||||
+{
|
||||
+ return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE |
|
||||
+ I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA |
|
||||
+ I2C_FUNC_SMBUS_BLOCK_DATA;
|
||||
+}
|
||||
+
|
||||
+static const struct i2c_algorithm smbus_algorithm = {
|
||||
+ .smbus_xfer = nct6775_access,
|
||||
+ .functionality = nct6775_func,
|
||||
+};
|
||||
+
|
||||
+static int nct6775_add_adapter(unsigned short smba, const char *name, struct i2c_adapter **padap)
|
||||
+{
|
||||
+ struct i2c_adapter *adap;
|
||||
+ struct i2c_nct6775_adapdata *adapdata;
|
||||
+ int retval;
|
||||
+
|
||||
+ adap = kzalloc(sizeof(*adap), GFP_KERNEL);
|
||||
+ if (adap == NULL) {
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ adap->owner = THIS_MODULE;
|
||||
+ adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
|
||||
+ adap->algo = &smbus_algorithm;
|
||||
+
|
||||
+ adapdata = kzalloc(sizeof(*adapdata), GFP_KERNEL);
|
||||
+ if (adapdata == NULL) {
|
||||
+ kfree(adap);
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ adapdata->smba = smba;
|
||||
+
|
||||
+ snprintf(adap->name, sizeof(adap->name),
|
||||
+ "SMBus NCT67xx adapter%s at %04x", name, smba);
|
||||
+
|
||||
+ i2c_set_adapdata(adap, adapdata);
|
||||
+
|
||||
+ retval = i2c_add_adapter(adap);
|
||||
+ if (retval) {
|
||||
+ kfree(adapdata);
|
||||
+ kfree(adap);
|
||||
+ return retval;
|
||||
+ }
|
||||
+
|
||||
+ *padap = adap;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void nct6775_remove_adapter(struct i2c_adapter *adap)
|
||||
+{
|
||||
+ struct i2c_nct6775_adapdata *adapdata = i2c_get_adapdata(adap);
|
||||
+
|
||||
+ if (adapdata->smba) {
|
||||
+ i2c_del_adapter(adap);
|
||||
+ kfree(adapdata);
|
||||
+ kfree(adap);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+//static SIMPLE_DEV_PM_OPS(nct6775_dev_pm_ops, nct6775_suspend, nct6775_resume);
|
||||
+
|
||||
+/*
|
||||
+ * when Super-I/O functions move to a separate file, the Super-I/O
|
||||
+ * bus will manage the lifetime of the device and this module will only keep
|
||||
+ * track of the nct6775 driver. But since we use platform_device_alloc(), we
|
||||
+ * must keep track of the device
|
||||
+ */
|
||||
+static struct platform_device *pdev[2];
|
||||
+
|
||||
+static int nct6775_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct device *dev = &pdev->dev;
|
||||
+ struct nct6775_sio_data *sio_data = dev_get_platdata(dev);
|
||||
+ struct resource *res;
|
||||
+
|
||||
+ res = platform_get_resource(pdev, IORESOURCE_IO, 0);
|
||||
+ if (!devm_request_region(&pdev->dev, res->start, IOREGION_LENGTH,
|
||||
+ DRVNAME))
|
||||
+ return -EBUSY;
|
||||
+
|
||||
+ switch (sio_data->kind) {
|
||||
+ case nct6791:
|
||||
+ case nct6792:
|
||||
+ case nct6793:
|
||||
+ case nct6795:
|
||||
+ case nct6796:
|
||||
+ case nct6798:
|
||||
+ nct6775_add_adapter(res->start, "", &nct6775_adapter);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+/*
|
||||
+static void nct6791_enable_io_mapping(int sioaddr)
|
||||
+{
|
||||
+ int val;
|
||||
+
|
||||
+ val = superio_inb(sioaddr, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE);
|
||||
+ if (val & 0x10) {
|
||||
+ pr_info("Enabling hardware monitor logical device mappings.\n");
|
||||
+ superio_outb(sioaddr, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE,
|
||||
+ val & ~0x10);
|
||||
+ }
|
||||
+}*/
|
||||
+
|
||||
+static struct platform_driver i2c_nct6775_driver = {
|
||||
+ .driver = {
|
||||
+ .name = DRVNAME,
|
||||
+// .pm = &nct6775_dev_pm_ops,
|
||||
+ },
|
||||
+ .probe = nct6775_probe,
|
||||
+};
|
||||
+
|
||||
+static void __exit i2c_nct6775_exit(void)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if(nct6775_adapter)
|
||||
+ nct6775_remove_adapter(nct6775_adapter);
|
||||
+
|
||||
+ for (i = 0; i < ARRAY_SIZE(pdev); i++) {
|
||||
+ if (pdev[i])
|
||||
+ platform_device_unregister(pdev[i]);
|
||||
+ }
|
||||
+ platform_driver_unregister(&i2c_nct6775_driver);
|
||||
+}
|
||||
+
|
||||
+/* nct6775_find() looks for a '627 in the Super-I/O config space */
|
||||
+static int __init nct6775_find(int sioaddr, struct nct6775_sio_data *sio_data)
|
||||
+{
|
||||
+ u16 val;
|
||||
+ int err;
|
||||
+ int addr;
|
||||
+
|
||||
+ err = superio_enter(sioaddr);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) |
|
||||
+ superio_inb(sioaddr, SIO_REG_DEVID + 1);
|
||||
+
|
||||
+ switch (val & SIO_ID_MASK) {
|
||||
+ case SIO_NCT6106_ID:
|
||||
+ sio_data->kind = nct6106;
|
||||
+ break;
|
||||
+ case SIO_NCT6775_ID:
|
||||
+ sio_data->kind = nct6775;
|
||||
+ break;
|
||||
+ case SIO_NCT6776_ID:
|
||||
+ sio_data->kind = nct6776;
|
||||
+ break;
|
||||
+ case SIO_NCT6779_ID:
|
||||
+ sio_data->kind = nct6779;
|
||||
+ break;
|
||||
+ case SIO_NCT6791_ID:
|
||||
+ sio_data->kind = nct6791;
|
||||
+ break;
|
||||
+ case SIO_NCT6792_ID:
|
||||
+ sio_data->kind = nct6792;
|
||||
+ break;
|
||||
+ case SIO_NCT6793_ID:
|
||||
+ sio_data->kind = nct6793;
|
||||
+ break;
|
||||
+ case SIO_NCT6795_ID:
|
||||
+ sio_data->kind = nct6795;
|
||||
+ break;
|
||||
+ case SIO_NCT6796_ID:
|
||||
+ sio_data->kind = nct6796;
|
||||
+ break;
|
||||
+ case SIO_NCT6798_ID:
|
||||
+ sio_data->kind = nct6798;
|
||||
+ break;
|
||||
+ default:
|
||||
+ if (val != 0xffff)
|
||||
+ pr_debug("unsupported chip ID: 0x%04x\n", val);
|
||||
+ superio_exit(sioaddr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ /* We have a known chip, find the SMBus I/O address */
|
||||
+ superio_select(sioaddr, NCT6775_LD_SMBUS);
|
||||
+ val = (superio_inb(sioaddr, SIO_REG_SMBA) << 8)
|
||||
+ | superio_inb(sioaddr, SIO_REG_SMBA + 1);
|
||||
+ addr = val & IOREGION_ALIGNMENT;
|
||||
+ if (addr == 0) {
|
||||
+ pr_err("Refusing to enable a Super-I/O device with a base I/O port 0\n");
|
||||
+ superio_exit(sioaddr);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ //if (sio_data->kind == nct6791 || sio_data->kind == nct6792 ||
|
||||
+ // sio_data->kind == nct6793 || sio_data->kind == nct6795 ||
|
||||
+ // sio_data->kind == nct6796)
|
||||
+ // nct6791_enable_io_mapping(sioaddr);
|
||||
+
|
||||
+ superio_exit(sioaddr);
|
||||
+ pr_info("Found %s or compatible chip at %#x:%#x\n",
|
||||
+ nct6775_sio_names[sio_data->kind], sioaddr, addr);
|
||||
+ sio_data->sioreg = sioaddr;
|
||||
+
|
||||
+ return addr;
|
||||
+}
|
||||
+
|
||||
+static int __init i2c_nct6775_init(void)
|
||||
+{
|
||||
+ int i, err;
|
||||
+ bool found = false;
|
||||
+ int address;
|
||||
+ struct resource res;
|
||||
+ struct nct6775_sio_data sio_data;
|
||||
+ int sioaddr[2] = { 0x2e, 0x4e };
|
||||
+
|
||||
+ err = platform_driver_register(&i2c_nct6775_driver);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ /*
|
||||
+ * initialize sio_data->kind and sio_data->sioreg.
|
||||
+ *
|
||||
+ * when Super-I/O functions move to a separate file, the Super-I/O
|
||||
+ * driver will probe 0x2e and 0x4e and auto-detect the presence of a
|
||||
+ * nct6775 hardware monitor, and call probe()
|
||||
+ */
|
||||
+ for (i = 0; i < ARRAY_SIZE(pdev); i++) {
|
||||
+ address = nct6775_find(sioaddr[i], &sio_data);
|
||||
+ if (address <= 0)
|
||||
+ continue;
|
||||
+
|
||||
+ found = true;
|
||||
+
|
||||
+ pdev[i] = platform_device_alloc(DRVNAME, address);
|
||||
+ if (!pdev[i]) {
|
||||
+ err = -ENOMEM;
|
||||
+ goto exit_device_unregister;
|
||||
+ }
|
||||
+
|
||||
+ err = platform_device_add_data(pdev[i], &sio_data,
|
||||
+ sizeof(struct nct6775_sio_data));
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+
|
||||
+ memset(&res, 0, sizeof(res));
|
||||
+ res.name = DRVNAME;
|
||||
+ res.start = address;
|
||||
+ res.end = address + IOREGION_LENGTH - 1;
|
||||
+ res.flags = IORESOURCE_IO;
|
||||
+
|
||||
+ err = acpi_check_resource_conflict(&res);
|
||||
+ if (err) {
|
||||
+ platform_device_put(pdev[i]);
|
||||
+ pdev[i] = NULL;
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ err = platform_device_add_resources(pdev[i], &res, 1);
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+
|
||||
+ /* platform_device_add calls probe() */
|
||||
+ err = platform_device_add(pdev[i]);
|
||||
+ if (err)
|
||||
+ goto exit_device_put;
|
||||
+ }
|
||||
+ if (!found) {
|
||||
+ err = -ENODEV;
|
||||
+ goto exit_unregister;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+
|
||||
+exit_device_put:
|
||||
+ platform_device_put(pdev[i]);
|
||||
+exit_device_unregister:
|
||||
+ while (--i >= 0) {
|
||||
+ if (pdev[i])
|
||||
+ platform_device_unregister(pdev[i]);
|
||||
+ }
|
||||
+exit_unregister:
|
||||
+ platform_driver_unregister(&i2c_nct6775_driver);
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+MODULE_AUTHOR("Adam Honse <calcprogrammer1@gmail.com>");
|
||||
+MODULE_DESCRIPTION("SMBus driver for NCT6775F and compatible chips");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+
|
||||
+module_init(i2c_nct6775_init);
|
||||
+module_exit(i2c_nct6775_exit);
|
||||
diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
|
||||
index 809fbd014..d54b35b14 100644
|
||||
--- a/drivers/i2c/busses/i2c-piix4.c
|
||||
+++ b/drivers/i2c/busses/i2c-piix4.c
|
||||
@@ -568,11 +568,11 @@ static int piix4_transaction(struct i2c_adapter *piix4_adapter)
|
||||
if (srvrworks_csb5_delay) /* Extra delay for SERVERWORKS_CSB5 */
|
||||
usleep_range(2000, 2100);
|
||||
else
|
||||
- usleep_range(250, 500);
|
||||
+ usleep_range(25, 50);
|
||||
|
||||
while ((++timeout < MAX_TIMEOUT) &&
|
||||
((temp = inb_p(SMBHSTSTS)) & 0x01))
|
||||
- usleep_range(250, 500);
|
||||
+ usleep_range(25, 50);
|
||||
|
||||
/* If the SMBus is still busy, we give up */
|
||||
if (timeout == MAX_TIMEOUT) {
|
||||
--
|
||||
2.41.0
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,43 +0,0 @@
|
||||
From ca89780690f7492c2d357e0ed2213a1d027341ae Mon Sep 17 00:00:00 2001
|
||||
From: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
Date: Sun, 29 May 2022 01:32:19 -0700
|
||||
Subject: [PATCH] mt76: mt7921: Disable powersave features by default
|
||||
|
||||
This brings WiFi latency down considerably and makes latency consistent by
|
||||
disabling runtime PM and typical powersave features by default. The actual
|
||||
power consumption difference is inconsequential on desktops and laptops,
|
||||
while the performance difference is monumental. Latencies of 20+ ms are no
|
||||
longer observed after this change, and the connection is much more stable.
|
||||
|
||||
Signed-off-by: Sultan Alsawaf <sultan@kerneltoast.com>
|
||||
---
|
||||
drivers/net/wireless/mediatek/mt76/mt7921/init.c | 9 ++-------
|
||||
1 file changed, 2 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/init.c b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
|
||||
index 91fc41922d95..cfa0bb51004d 100644
|
||||
--- a/drivers/net/wireless/mediatek/mt76/mt7921/init.c
|
||||
+++ b/drivers/net/wireless/mediatek/mt76/mt7921/init.c
|
||||
@@ -99,7 +99,8 @@
|
||||
wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
|
||||
}
|
||||
wiphy->flags &= ~(WIPHY_FLAG_IBSS_RSN | WIPHY_FLAG_4ADDR_AP |
|
||||
- WIPHY_FLAG_4ADDR_STATION);
|
||||
+ WIPHY_FLAG_4ADDR_STATION |
|
||||
+ WIPHY_FLAG_PS_ON_BY_DEFAULT);
|
||||
wiphy->interface_modes = BIT(NL80211_IFTYPE_STATION) |
|
||||
BIT(NL80211_IFTYPE_AP) |
|
||||
BIT(NL80211_IFTYPE_P2P_CLIENT) |
|
||||
@@ -408,12 +409,6 @@
|
||||
dev->pm.idle_timeout = MT7921_PM_TIMEOUT;
|
||||
dev->pm.stats.last_wake_event = jiffies;
|
||||
dev->pm.stats.last_doze_event = jiffies;
|
||||
- if (!mt76_is_usb(&dev->mt76)) {
|
||||
- dev->pm.enable_user = true;
|
||||
- dev->pm.enable = true;
|
||||
- dev->pm.ds_enable_user = true;
|
||||
- dev->pm.ds_enable = true;
|
||||
- }
|
||||
|
||||
if (!mt76_is_mmio(&dev->mt76))
|
||||
hw->extra_tx_headroom += MT_SDIO_TXD_SIZE + MT_SDIO_HDR_SIZE;
|
File diff suppressed because it is too large
Load Diff
@ -1,23 +1,16 @@
|
||||
### These patches Have some conflicts to be fixed later for now the conflicts are solved in a mega patch
|
||||
#0001-cachyos-base-all.patch
|
||||
#0002-eevdf.patch
|
||||
#0002-eevdfbore.patch
|
||||
#0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch
|
||||
#amdgpu-si-cik-default.patch
|
||||
#0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch
|
||||
#0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch
|
||||
#0001-acpi-proc-idle-skip-dummy-wait.patch
|
||||
#0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch
|
||||
#0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
|
||||
#OpenRGB.patch
|
||||
#asus-linux.patch
|
||||
#chimera-ALSA.patch
|
||||
#lenovo-legion-laptop.patch
|
||||
#linux-surface.patch
|
||||
#mt76:-mt7921:-Disable-powersave-features-by-default.patch
|
||||
#rog-ally-alsa.patch
|
||||
#rog-ally-bmc150.patch
|
||||
#rog-ally-side-keys-fix.patch
|
||||
#set-ps4-bt-poll-rate-1000hz.patch
|
||||
#steam-deck.patch
|
||||
0001-pikaos-base-all.patch
|
||||
cachyos/0001-cachyos-base-all.patch
|
||||
nobara/0001-Allow-to-set-custom-USB-pollrate-for-specific-device.patch
|
||||
nobara/set-ps4-bt-poll-rate-1000hz.patch
|
||||
nobara-rebased/amdgpu-si-cik-default.patch
|
||||
nobara/0001-Revert-PCI-Add-a-REBAR-size-quirk-for-Sapphire-RX-56.patch
|
||||
#nobara/0001-Revert-nvme-pci-drop-redundant-pci_enable_pcie_error.patch
|
||||
nobara/0001-acpi-proc-idle-skip-dummy-wait.patch
|
||||
nobara/0001-drm-i915-quirks-disable-async-flipping-on-specific-d.patch
|
||||
nobara/0002-drm-i915-add-kernel-parameter-to-disable-async-page-.patch
|
||||
asuslinux/v6-0001-platform-x86-asus-wmi-add-support-for-ASUS-screen.patch
|
||||
asuslinux-rebased/v2-0002-ALSA-hda-cs35l41-Support-ASUS-2023-laptops-with-m.patch
|
||||
asuslinux/amd-tablet-sfh.patch
|
||||
nobara-rebased/linux-surface.patch
|
||||
nobara/rog-ally-bmc150.patch
|
||||
nobara/rog-ally-side-keys-fix.patch
|
||||
nobara/rog-ally-alsa.patch
|
||||
|
Loading…
Reference in New Issue
Block a user