Compare commits

...

5 Commits

Author SHA1 Message Date
Andy Nguyen
76db3a464b linux: add bc250 audio patch by essdee 2026-06-19 17:19:34 +02:00
Andy Nguyen
9fec3c7729 config: update to 7.1.1 2026-06-19 17:17:46 +02:00
MassZero0
e00c8a7d38 linux: mts: fix NAPI poll storm that pins a CPU when the NIC MSI never fires (#14)
The PS5 GbE NIC has no INTx pin and its MSI sometimes never fires after a
cold boot. The driver already works around that with a 1 Hz link-poll
watchdog that kicks NAPI by hand.

But gbe_poll() re-checks GBE_REG_ISR after completing NAPI and reschedules
itself whenever a GBE_IER_MASK cause is still latched, without ever
acknowledging (W1C) the ISR -- only the hardware handler gbe_isr() does.
When the MSI is dead gbe_isr() never runs, so the latched cause (e.g.
RX_DONE) is never cleared, the re-check stays true forever, and NAPI
reschedules itself ~30k times/s, pinning ksoftirqd on that CPU at 100%.

Acknowledge the pending causes before re-kicking so a stale, undelivered
cause can no longer spin NAPI.

While the MSI is dead also poll the rings every GBE_POLL_FALLBACK_MS (10 ms)
instead of once per second, so interactive RX latency drops from ~1 s to a
few ms; fall back to HZ as soon as real IRQs start arriving.
2026-06-01 21:54:28 +02:00
Andy Nguyen
45c3a2ec19 linux: improve hdmi sequence in amdgpu dm 2026-05-31 21:47:54 +02:00
rmux
61eb7c0f71 Add buzzer driver for PS5 chassis piezo (#12)
thanks to cow for testing. legend as usual.
2026-05-30 23:11:28 +02:00
2 changed files with 476 additions and 126 deletions

78
.config
View File

@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
# Linux/x86 7.0.10 Kernel Configuration
# Linux/x86 7.1.1 Kernel Configuration
#
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0"
CONFIG_CC_IS_GCC=y
@@ -13,6 +13,7 @@ CONFIG_LD_VERSION=24600
CONFIG_LLD_VERSION=0
CONFIG_RUSTC_VERSION=0
CONFIG_RUSTC_LLVM_VERSION=0
CONFIG_RUSTC_LLVM_MAJOR_VERSION=0
CONFIG_CC_CAN_LINK=y
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
@@ -86,12 +87,16 @@ CONFIG_SPARSE_IRQ=y
CONFIG_CLOCKSOURCE_WATCHDOG=y
CONFIG_ARCH_CLOCKSOURCE_INIT=y
CONFIG_ARCH_WANTS_CLOCKSOURCE_READ_INLINE=y
CONFIG_GENERIC_TIME_VSYSCALL=y
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST_IDLE=y
CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
CONFIG_GENERIC_CLOCKEVENTS_COUPLED=y
CONFIG_GENERIC_CLOCKEVENTS_COUPLED_INLINE=y
CONFIG_GENERIC_CMOS_UPDATE=y
CONFIG_HRTIMER_REARM_DEFERRED=y
CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
CONFIG_CONTEXT_TRACKING=y
@@ -109,7 +114,6 @@ CONFIG_CONTEXT_TRACKING_USER=y
# CONFIG_CONTEXT_TRACKING_USER_FORCE is not set
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=100
CONFIG_POSIX_AUX_CLOCKS=y
# end of Timers subsystem
@@ -209,6 +213,7 @@ CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
CONFIG_CC_HAS_INT128=y
CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
CONFIG_CC_MS_EXTENSIONS="-fms-extensions"
CONFIG_GCC10_NO_ARRAY_BOUNDS=y
CONFIG_CC_NO_ARRAY_BOUNDS=y
CONFIG_GCC_NO_STRINGOP_OVERFLOW=y
@@ -231,6 +236,7 @@ CONFIG_FAIR_GROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_EXT_GROUP_SCHED=y
CONFIG_EXT_SUB_SCHED=y
CONFIG_SCHED_MM_CID=y
CONFIG_UCLAMP_TASK_GROUP=y
CONFIG_CGROUP_PIDS=y
@@ -250,6 +256,7 @@ CONFIG_SOCK_CGROUP_DATA=y
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_TIME_NS=y
CONFIG_TIME_NS_VDSO=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
@@ -597,6 +604,7 @@ CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
# CONFIG_ACPI_PROCESSOR_AGGREGATOR is not set
CONFIG_ACPI_THERMAL=y
CONFIG_ACPI_PLATFORM_PROFILE=y
CONFIG_ACPI_CUSTOM_DSDT_FILE=""
CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
CONFIG_ACPI_TABLE_UPGRADE=y
@@ -947,6 +955,7 @@ CONFIG_FUNCTION_ALIGNMENT=16
CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y
CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y
CONFIG_ARCH_HAS_CPU_ATTACK_VECTORS=y
CONFIG_HAVE_ARCH_GET_SECUREBOOT=y
# end of General architecture-dependent options
CONFIG_RT_MUTEXES=y
@@ -1098,7 +1107,6 @@ CONFIG_MEMORY_ISOLATION=y
CONFIG_EXCLUSIVE_SYSTEM_RAM=y
CONFIG_HAVE_BOOTMEM_INFO_NODE=y
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
CONFIG_MEMORY_HOTPLUG=y
# CONFIG_MHP_DEFAULT_ONLINE_TYPE_OFFLINE is not set
CONFIG_MHP_DEFAULT_ONLINE_TYPE_ONLINE_AUTO=y
@@ -1113,6 +1121,7 @@ CONFIG_SPLIT_PMD_PTLOCKS=y
CONFIG_COMPACTION=y
CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
CONFIG_PAGE_REPORTING=y
CONFIG_NUMA_MIGRATION=y
CONFIG_MIGRATION=y
CONFIG_DEVICE_MIGRATION=y
CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
@@ -1377,7 +1386,6 @@ CONFIG_NF_CONNTRACK_TIMEOUT=y
CONFIG_NF_CONNTRACK_TIMESTAMP=y
CONFIG_NF_CONNTRACK_LABELS=y
# CONFIG_NF_CT_PROTO_SCTP is not set
# CONFIG_NF_CT_PROTO_UDPLITE is not set
# CONFIG_NF_CONNTRACK_AMANDA is not set
# CONFIG_NF_CONNTRACK_FTP is not set
# CONFIG_NF_CONNTRACK_H323 is not set
@@ -1710,7 +1718,6 @@ CONFIG_NET_FLOW_LIMIT=y
# end of Network testing
# end of Networking options
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
CONFIG_BT=m
CONFIG_BT_BREDR=y
@@ -1787,7 +1794,6 @@ CONFIG_NET_9P=m
CONFIG_NET_9P_FD=m
# CONFIG_NET_9P_VIRTIO is not set
# CONFIG_NET_9P_DEBUG is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set
# CONFIG_NFC is not set
# CONFIG_PSAMPLE is not set
@@ -1888,7 +1894,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16
# CONFIG_PCI_SW_SWITCHTEC is not set
# end of PCI switch controller drivers
# CONFIG_PCI_PWRCTRL_SLOT is not set
# CONFIG_PCI_PWRCTRL_GENERIC is not set
# CONFIG_PCI_PWRCTRL_TC9563 is not set
# CONFIG_CXL_BUS is not set
# CONFIG_PCCARD is not set
@@ -1904,6 +1910,7 @@ CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_DEVTMPFS_SAFE=y
CONFIG_DRIVER_DEFERRED_PROBE_TIMEOUT=10
# CONFIG_STANDALONE is not set
CONFIG_PREVENT_FIRMWARE_BUILD=y
@@ -2070,7 +2077,6 @@ CONFIG_NVME_HWMON=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
# CONFIG_RPMB is not set
# CONFIG_TI_FPC202 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
@@ -2348,7 +2354,6 @@ CONFIG_MDIO=m
# CONFIG_NET_VENDOR_ADAPTEC is not set
# CONFIG_NET_VENDOR_AGERE is not set
# CONFIG_NET_VENDOR_ALACRITECH is not set
# CONFIG_NET_VENDOR_ALTEON is not set
# CONFIG_ALTERA_TSE is not set
# CONFIG_NET_VENDOR_AMAZON is not set
# CONFIG_NET_VENDOR_AMD is not set
@@ -2405,7 +2410,6 @@ CONFIG_NET_VENDOR_CHELSIO=y
# CONFIG_NET_VENDOR_NVIDIA is not set
# CONFIG_NET_VENDOR_OKI is not set
# CONFIG_ETHOC is not set
# CONFIG_NET_VENDOR_PACKET_ENGINES is not set
# CONFIG_NET_VENDOR_PENSANDO is not set
# CONFIG_NET_VENDOR_QLOGIC is not set
# CONFIG_NET_VENDOR_BROCADE is not set
@@ -2432,7 +2436,6 @@ CONFIG_NET_VENDOR_CHELSIO=y
# CONFIG_NET_VENDOR_WIZNET is not set
# CONFIG_NET_VENDOR_XILINX is not set
# CONFIG_FDDI is not set
CONFIG_MDIO_BUS=y
CONFIG_PHYLINK=m
CONFIG_PHYLIB=y
CONFIG_SWPHY=y
@@ -2717,7 +2720,6 @@ CONFIG_RTW89_8852CU=m
# CONFIG_FUJITSU_ES is not set
# CONFIG_NETDEVSIM is not set
CONFIG_NET_FAILOVER=y
# CONFIG_ISDN is not set
#
# Input device support
@@ -2821,7 +2823,6 @@ CONFIG_SERIO=y
CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
# CONFIG_SERIO_I8042 is not set
# CONFIG_SERIO_SERPORT is not set
# CONFIG_SERIO_CT82C710 is not set
# CONFIG_SERIO_PCIPS2 is not set
# CONFIG_SERIO_LIBPS2 is not set
# CONFIG_SERIO_RAW is not set
@@ -3018,6 +3019,7 @@ CONFIG_PINCTRL=y
# CONFIG_PINCTRL_AMD is not set
# CONFIG_PINCTRL_CY8C95X0 is not set
# CONFIG_PINCTRL_MCP23S08 is not set
# CONFIG_PINCTRL_STMFX is not set
# CONFIG_PINCTRL_SX150X is not set
#
@@ -3067,6 +3069,7 @@ CONFIG_POWER_SUPPLY=y
# CONFIG_BATTERY_DS2781 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_SAMSUNG_SDI is not set
# CONFIG_BATTERY_S2MU005 is not set
# CONFIG_BATTERY_SBS is not set
# CONFIG_CHARGER_SBS is not set
# CONFIG_BATTERY_BQ27XXX is not set
@@ -3147,6 +3150,7 @@ CONFIG_SENSORS_K10TEMP=m
# CONFIG_SENSORS_JC42 is not set
# CONFIG_SENSORS_POWERZ is not set
# CONFIG_SENSORS_POWR1220 is not set
# CONFIG_SENSORS_LATTEPANDA_SIGMA_EC is not set
# CONFIG_SENSORS_LENOVO_EC is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LTC2945 is not set
@@ -3176,6 +3180,7 @@ CONFIG_SENSORS_K10TEMP=m
# CONFIG_SENSORS_MAX31790 is not set
# CONFIG_SENSORS_MC34VR500 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_MCP9982 is not set
# CONFIG_SENSORS_TC654 is not set
# CONFIG_SENSORS_TPS23861 is not set
# CONFIG_SENSORS_MR75203 is not set
@@ -3260,6 +3265,7 @@ CONFIG_SENSORS_K10TEMP=m
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
# CONFIG_SENSORS_XGENE is not set
# CONFIG_SENSORS_YOGAFAN is not set
#
# ACPI drivers
@@ -3496,6 +3502,7 @@ CONFIG_AGP_AMD64=y
# CONFIG_AGP_SIS is not set
# CONFIG_AGP_VIA is not set
# CONFIG_VGA_SWITCHEROO is not set
CONFIG_GPU_BUDDY=y
CONFIG_DRM=y
#
@@ -3512,6 +3519,7 @@ CONFIG_DRM_PANIC_FOREGROUND_COLOR=0xffffff
CONFIG_DRM_PANIC_BACKGROUND_COLOR=0x5e2750
# CONFIG_DRM_PANIC_DEBUG is not set
CONFIG_DRM_PANIC_SCREEN="user"
# CONFIG_DRM_RAS is not set
# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
CONFIG_DRM_CLIENT=y
@@ -3966,6 +3974,8 @@ CONFIG_HID_JABRA=m
# CONFIG_HID_LCPOWER is not set
CONFIG_HID_LED=m
# CONFIG_HID_LENOVO is not set
# CONFIG_HID_LENOVO_GO is not set
# CONFIG_HID_LENOVO_GO_S is not set
# CONFIG_HID_LETSKETCH is not set
CONFIG_HID_LOGITECH=m
CONFIG_HID_LOGITECH_DJ=m
@@ -4034,6 +4044,7 @@ CONFIG_HID_SENSOR_HUB=m
CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
CONFIG_HID_ALPS=m
# CONFIG_HID_MCP2221 is not set
# CONFIG_HID_HUAWEI is not set
# end of Special HID drivers
#
@@ -4405,6 +4416,7 @@ CONFIG_DMA_ACPI=y
# CONFIG_INTEL_IDXD_COMPAT is not set
# CONFIG_INTEL_IOATDMA is not set
# CONFIG_PLX_DMA is not set
# CONFIG_SWITCHTEC_DMA is not set
# CONFIG_XILINX_DMA is not set
# CONFIG_XILINX_XDMA is not set
# CONFIG_AMD_PTDMA is not set
@@ -4429,7 +4441,6 @@ CONFIG_DMA_ACPI=y
CONFIG_SYNC_FILE=y
CONFIG_SW_SYNC=y
CONFIG_UDMABUF=y
CONFIG_DMABUF_MOVE_NOTIFY=y
# CONFIG_DMABUF_DEBUG is not set
# CONFIG_DMABUF_SELFTESTS is not set
CONFIG_DMABUF_HEAPS=y
@@ -4505,6 +4516,7 @@ CONFIG_X86_PLATFORM_DEVICES=y
# CONFIG_XIAOMI_WMI is not set
# CONFIG_REDMI_WMI is not set
# CONFIG_GIGABYTE_WMI is not set
# CONFIG_BITLAND_MIFS_WMI is not set
# CONFIG_ACER_WIRELESS is not set
#
@@ -4629,6 +4641,7 @@ CONFIG_GENERIC_PT=y
CONFIG_IOMMU_PT=y
CONFIG_IOMMU_PT_AMDV1=y
# CONFIG_IOMMU_PT_VTDSS is not set
# CONFIG_IOMMU_PT_RISCV64 is not set
CONFIG_IOMMU_PT_X86_64=y
#
@@ -4752,8 +4765,8 @@ CONFIG_IRQ_MSI_LIB=y
# PHY Subsystem
#
# CONFIG_GENERIC_PHY is not set
# CONFIG_USB_LGM_PHY is not set
# CONFIG_PHY_CAN_TRANSCEIVER is not set
# CONFIG_USB_LGM_PHY is not set
#
# PHY drivers for Broadcom platforms
@@ -4761,9 +4774,9 @@ CONFIG_IRQ_MSI_LIB=y
# CONFIG_BCM_KONA_USB2_PHY is not set
# end of PHY drivers for Broadcom platforms
# CONFIG_PHY_INTEL_LGM_EMMC is not set
# CONFIG_PHY_PXA_28NM_HSIC is not set
# CONFIG_PHY_PXA_28NM_USB2 is not set
# CONFIG_PHY_INTEL_LGM_EMMC is not set
# end of PHY Subsystem
# CONFIG_POWERCAP is not set
@@ -4803,6 +4816,7 @@ CONFIG_NVMEM_SYSFS=y
# CONFIG_FPGA is not set
# CONFIG_TEE is not set
# CONFIG_MUX_CORE is not set
CONFIG_PM_OPP=y
# CONFIG_SIOX is not set
# CONFIG_SLIMBUS is not set
@@ -4919,11 +4933,13 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_FAT_DEFAULT_UTF8 is not set
CONFIG_EXFAT_FS=m
CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_FS_POSIX_ACL is not set
CONFIG_NTFS3_FS=m
# CONFIG_NTFS3_64BIT_CLUSTER is not set
CONFIG_NTFS3_LZX_XPRESS=y
CONFIG_NTFS3_FS_POSIX_ACL=y
CONFIG_NTFS_FS=m
# end of DOS/FAT/EXFAT/NT Filesystems
#
@@ -5187,7 +5203,6 @@ CONFIG_RANDSTRUCT_NONE=y
# end of Kernel hardening options
# end of Security options
CONFIG_XOR_BLOCKS=m
CONFIG_CRYPTO=y
#
@@ -5205,7 +5220,6 @@ CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_RNG_DEFAULT=y
CONFIG_CRYPTO_AKCIPHER2=y
CONFIG_CRYPTO_AKCIPHER=y
CONFIG_CRYPTO_KPP2=y
@@ -5286,17 +5300,15 @@ CONFIG_CRYPTO_ESSIV=m
#
CONFIG_CRYPTO_BLAKE2B=m
CONFIG_CRYPTO_CMAC=m
CONFIG_CRYPTO_GHASH=y
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_MD4=m
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_SHA1=y
CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=y
CONFIG_CRYPTO_SHA3=y
# CONFIG_CRYPTO_SM3_GENERIC is not set
# CONFIG_CRYPTO_SM3 is not set
CONFIG_CRYPTO_STREEBOG=m
# CONFIG_CRYPTO_WP512 is not set
CONFIG_CRYPTO_XCBC=m
@@ -5358,7 +5370,6 @@ CONFIG_CRYPTO_AES_NI_INTEL=m
# CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64 is not set
# CONFIG_CRYPTO_CAST5_AVX_X86_64 is not set
# CONFIG_CRYPTO_CAST6_AVX_X86_64 is not set
# CONFIG_CRYPTO_DES3_EDE_X86_64 is not set
# CONFIG_CRYPTO_SERPENT_SSE2_X86_64 is not set
# CONFIG_CRYPTO_SERPENT_AVX_X86_64 is not set
# CONFIG_CRYPTO_SERPENT_AVX2_X86_64 is not set
@@ -5371,8 +5382,6 @@ CONFIG_CRYPTO_AES_NI_INTEL=m
# CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64 is not set
# CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64 is not set
CONFIG_CRYPTO_AEGIS128_AESNI_SSE2=m
CONFIG_CRYPTO_SM3_AVX_X86_64=m
CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
# end of Accelerated Cryptographic Algorithms for CPU (x86)
CONFIG_CRYPTO_HW=y
@@ -5444,16 +5453,13 @@ CONFIG_CRC_ITU_T=m
CONFIG_CRC32=y
CONFIG_CRC32_ARCH=y
CONFIG_CRC_OPTIMIZATIONS=y
#
# Crypto library routines
#
CONFIG_CRYPTO_HASH_INFO=y
CONFIG_CRYPTO_LIB_UTILS=y
CONFIG_CRYPTO_LIB_AES=y
CONFIG_CRYPTO_LIB_AES_ARCH=y
CONFIG_CRYPTO_LIB_AES_CBC_MACS=m
CONFIG_CRYPTO_LIB_ARC4=m
CONFIG_CRYPTO_LIB_GF128MUL=y
CONFIG_CRYPTO_LIB_GF128MUL=m
CONFIG_CRYPTO_LIB_BLAKE2B=m
CONFIG_CRYPTO_LIB_BLAKE2S_ARCH=y
CONFIG_CRYPTO_LIB_CHACHA=m
@@ -5462,6 +5468,8 @@ CONFIG_CRYPTO_LIB_CURVE25519=m
CONFIG_CRYPTO_LIB_CURVE25519_ARCH=y
CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y
CONFIG_CRYPTO_LIB_DES=m
CONFIG_CRYPTO_LIB_GF128HASH=y
CONFIG_CRYPTO_LIB_GF128HASH_ARCH=y
CONFIG_CRYPTO_LIB_MD5=y
CONFIG_CRYPTO_LIB_NH=m
CONFIG_CRYPTO_LIB_NH_ARCH=y
@@ -5469,8 +5477,6 @@ CONFIG_CRYPTO_LIB_POLY1305=m
CONFIG_CRYPTO_LIB_POLY1305_ARCH=y
CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y
CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
CONFIG_CRYPTO_LIB_POLYVAL=m
CONFIG_CRYPTO_LIB_POLYVAL_ARCH=y
CONFIG_CRYPTO_LIB_CHACHA20POLY1305=m
CONFIG_CRYPTO_LIB_SHA1=y
CONFIG_CRYPTO_LIB_SHA1_ARCH=y
@@ -5479,9 +5485,8 @@ CONFIG_CRYPTO_LIB_SHA256_ARCH=y
CONFIG_CRYPTO_LIB_SHA512=y
CONFIG_CRYPTO_LIB_SHA512_ARCH=y
CONFIG_CRYPTO_LIB_SHA3=y
CONFIG_CRYPTO_LIB_SM3=m
# end of Crypto library routines
CONFIG_XOR_BLOCKS=m
CONFIG_XOR_BLOCKS_ARCH=y
CONFIG_XXHASH=y
# CONFIG_RANDOM32_SELFTEST is not set
CONFIG_842_COMPRESS=m
@@ -5927,6 +5932,7 @@ CONFIG_TRACE_EVENT_INJECT=y
# CONFIG_KPROBE_EVENT_GEN_TEST is not set
# CONFIG_HIST_TRIGGERS_DEBUG is not set
# CONFIG_RV is not set
# CONFIG_TRACE_REMOTE_TEST is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y
@@ -5994,6 +6000,7 @@ CONFIG_RUNTIME_TESTING_MENU=y
# CONFIG_TEST_LKM is not set
# CONFIG_TEST_BITOPS is not set
# CONFIG_TEST_VMALLOC is not set
# CONFIG_TEST_WORKQUEUE is not set
# CONFIG_TEST_BPF is not set
# CONFIG_FIND_BIT_BENCHMARK is not set
# CONFIG_TEST_FIRMWARE is not set
@@ -6023,3 +6030,4 @@ CONFIG_MEMTEST=y
CONFIG_IO_URING_ZCRX=y
CONFIG_IO_URING_BPF=y
CONFIG_IO_URING_BPF_OPS=y

View File

@@ -1,8 +1,8 @@
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index fe106da41ae5..6fd78cbfe1d6 100644
index f3f7cb01d69d..15d2e0de3bf6 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -605,6 +605,14 @@ config X86_NUMACHIP
@@ -601,6 +601,14 @@ config X86_NUMACHIP
enable more than ~168 cores.
If you don't have one of these, you should say N here.
@@ -18,7 +18,7 @@ index fe106da41ae5..6fd78cbfe1d6 100644
bool "ScaleMP vSMP"
select HYPERVISOR_GUEST
diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h
index 4efbbf9d117b..403d5ff74ef0 100644
index 86554de9a3f5..70b0eb8e32c9 100644
--- a/arch/x86/include/asm/msr-index.h
+++ b/arch/x86/include/asm/msr-index.h
@@ -26,6 +26,7 @@
@@ -139,10 +139,10 @@ index cb9852ad6098..83bb0cf9e40b 100644
return true;
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index ccc7b2e34a11..7d941c4d30f6 100644
index 0550359ed798..297ac533e017 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -112,7 +112,11 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_host);
@@ -114,7 +114,11 @@ EXPORT_SYMBOL_FOR_KVM_INTERNAL(kvm_host);
*/
#ifdef CONFIG_X86_64
static
@@ -392,7 +392,7 @@ index 000000000000..731fed163a83
+ legacy_pic = &null_legacy_pic;
+}
diff --git a/block/partitions/efi.c b/block/partitions/efi.c
index 75474fb3848e..44a0744533a0 100644
index 9865d59093fa..5ffe7fefeae6 100644
--- a/block/partitions/efi.c
+++ b/block/partitions/efi.c
@@ -90,6 +90,9 @@
@@ -459,20 +459,20 @@ index 75474fb3848e..44a0744533a0 100644
&pgpt, &pptes);
if (good_pgpt)
diff --git a/drivers/Makefile b/drivers/Makefile
index 53fbd2e0acdd..d36c1909e0e6 100644
index 0841ea851847..02052a6cb226 100644
--- a/drivers/Makefile
+++ b/drivers/Makefile
@@ -199,3 +199,5 @@ obj-y += resctrl/
@@ -198,3 +198,5 @@ obj-y += resctrl/
obj-$(CONFIG_DIBS) += dibs/
obj-$(CONFIG_S390) += s390/
+
+obj-$(CONFIG_X86_PS5) += ps5/
diff --git a/drivers/ata/Kconfig b/drivers/ata/Kconfig
index 2349bca136e0..3efbb88fdc32 100644
index fff305ec1e78..eb91eacbe159 100644
--- a/drivers/ata/Kconfig
+++ b/drivers/ata/Kconfig
@@ -299,6 +299,18 @@ config AHCI_QORIQ
@@ -298,6 +298,18 @@ config AHCI_QORIQ
If unsure, say N.
@@ -1112,10 +1112,10 @@ index 477a37e2ef80..e1af70946c89 100644
dmi_id_init_attr_table();
diff --git a/drivers/firmware/dmi_scan.c b/drivers/firmware/dmi_scan.c
index 70d39adf50dc..5d283649817e 100644
index a3f7dabd4955..77f616a11b1c 100644
--- a/drivers/firmware/dmi_scan.c
+++ b/drivers/firmware/dmi_scan.c
@@ -953,6 +953,14 @@ const char *dmi_get_system_info(int field)
@@ -957,6 +957,14 @@ const char *dmi_get_system_info(int field)
}
EXPORT_SYMBOL(dmi_get_system_info);
@@ -1131,10 +1131,10 @@ index 70d39adf50dc..5d283649817e 100644
* dmi_name_in_serial - Check if string is in the DMI product serial information
* @str: string to check for
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 447e734c362b..c52c81e084a7 100644
index fd50da4c7b18..caf9cce37100 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -271,6 +271,10 @@ extern int amdgpu_user_queue;
@@ -270,6 +270,10 @@ extern int amdgpu_user_queue;
extern uint amdgpu_hdmi_hpd_debounce_delay_ms;
@@ -1181,10 +1181,10 @@ index 35d04e69aec0..314ceaaaab9f 100644
if (amdgpu_read_platform_bios(adev)) {
dev_info(adev->dev, "Fetched VBIOS from platform\n");
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 2ec69fa05cb1..502b878373e0 100644
index feab90e3efd1..4ebde822fca2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -2512,6 +2512,26 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
@@ -1814,6 +1814,26 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
case CHIP_CYAN_SKILLFISH:
if (adev->discovery.bin)
return 0;
@@ -1212,10 +1212,10 @@ index 2ec69fa05cb1..502b878373e0 100644
break;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
index 3459d356151e..f09233c05e04 100644
index 80efeca0ab73..e0683340ff12 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c
@@ -2914,6 +2914,9 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
@@ -3018,6 +3018,9 @@ int amdgpu_discovery_set_ip_blocks(struct amdgpu_device *adev)
adev->ip_versions[SMUIO_HWIP][0] = IP_VERSION(11, 0, 8);
adev->ip_versions[GC_HWIP][0] = IP_VERSION(10, 1, 3);
adev->ip_versions[UVD_HWIP][0] = IP_VERSION(2, 0, 3);
@@ -1226,7 +1226,7 @@ index 3459d356151e..f09233c05e04 100644
break;
default:
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index c91638e65174..00618809031f 100644
index 60debd543e44..3af3b36f4b60 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -41,6 +41,10 @@
@@ -1240,7 +1240,7 @@ index c91638e65174..00618809031f 100644
#include "amdgpu.h"
#include "amdgpu_amdkfd.h"
#include "amdgpu_dma_buf.h"
@@ -1134,6 +1138,12 @@ module_param_named(user_queue, amdgpu_user_queue, int, 0444);
@@ -1112,6 +1116,12 @@ module_param_named(user_queue, amdgpu_user_queue, int, 0444);
MODULE_PARM_DESC(hdmi_hpd_debounce_delay_ms, "HDMI HPD disconnect debounce delay in milliseconds (0 to disable (by default), 1500 is common)");
module_param_named(hdmi_hpd_debounce_delay_ms, amdgpu_hdmi_hpd_debounce_delay_ms, uint, 0644);
@@ -1253,7 +1253,7 @@ index c91638e65174..00618809031f 100644
/* These devices are not supported by amdgpu.
* They are supported by the mach64, r128, radeon drivers
*/
@@ -2179,6 +2189,7 @@ static const struct pci_device_id pciidlist[] = {
@@ -2157,6 +2167,7 @@ static const struct pci_device_id pciidlist[] = {
{0x1002, 0x7410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN},
/* CYAN_SKILLFISH */
@@ -1261,7 +1261,7 @@ index c91638e65174..00618809031f 100644
{0x1002, 0x13DB, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU},
{0x1002, 0x13F9, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU},
{0x1002, 0x13FA, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_CYAN_SKILLFISH|AMD_IS_APU},
@@ -2393,6 +2404,11 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
@@ -2370,6 +2381,11 @@ static int amdgpu_pci_probe(struct pci_dev *pdev,
int ret, retry = 0, i;
bool supports_atomic = false;
@@ -1274,10 +1274,10 @@ index c91638e65174..00618809031f 100644
(pdev->class >> 8) == PCI_CLASS_DISPLAY_OTHER) {
if (drm_firmware_drivers_only() && amdgpu_modeset == -1)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
index 77578ecc6782..b037a6f57a6d 100644
index b8ca876694ff..02c04136f293 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gfx.c
@@ -2344,6 +2344,11 @@ void amdgpu_gfx_profile_ring_begin_use(struct amdgpu_ring *ring)
@@ -2434,6 +2434,11 @@ void amdgpu_gfx_profile_ring_begin_use(struct amdgpu_ring *ring)
enum PP_SMC_POWER_PROFILE profile;
int r;
@@ -1289,7 +1289,7 @@ index 77578ecc6782..b037a6f57a6d 100644
if (amdgpu_dpm_is_overdrive_enabled(adev))
return;
@@ -2379,6 +2384,11 @@ void amdgpu_gfx_profile_ring_end_use(struct amdgpu_ring *ring)
@@ -2469,6 +2474,11 @@ void amdgpu_gfx_profile_ring_end_use(struct amdgpu_ring *ring)
{
struct amdgpu_device *adev = ring->adev;
@@ -1473,10 +1473,10 @@ index 8b60299b73ef..7ecf928cae8e 100644
for (j = 0; j < adev->gfx.config.max_sh_per_se; j++) {
bitmap = i * adev->gfx.config.max_sh_per_se + j;
diff --git a/drivers/gpu/drm/amd/amdgpu/nv.c b/drivers/gpu/drm/amd/amdgpu/nv.c
index f17c3839aea1..a561038f3f79 100644
index 7ce1a1b95606..0bef516616ee 100644
--- a/drivers/gpu/drm/amd/amdgpu/nv.c
+++ b/drivers/gpu/drm/amd/amdgpu/nv.c
@@ -868,6 +868,10 @@ static int nv_common_early_init(struct amdgpu_ip_block *ip_block)
@@ -862,6 +862,10 @@ static int nv_common_early_init(struct amdgpu_ip_block *ip_block)
adev->cg_flags = 0;
adev->pg_flags = 0;
adev->external_rev_id = adev->rev_id + 0x82;
@@ -1488,10 +1488,10 @@ index f17c3839aea1..a561038f3f79 100644
case IP_VERSION(10, 3, 6):
adev->cg_flags = AMD_CG_SUPPORT_GFX_MGCG |
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
index e3a035c9fece..6eb67dd7b52c 100644
index 52f4e9e099cb..6e4ff7444536 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_0.c
@@ -1362,6 +1362,12 @@ static int sdma_v5_0_early_init(struct amdgpu_ip_block *ip_block)
@@ -1368,6 +1368,12 @@ static int sdma_v5_0_early_init(struct amdgpu_ip_block *ip_block)
struct amdgpu_device *adev = ip_block->adev;
int r;
@@ -1505,7 +1505,7 @@ index e3a035c9fece..6eb67dd7b52c 100644
if (r)
return r;
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 0aee65503642..1ca2bcd7755d 100644
index f8c13bad4ac2..e2e6a2605f2a 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -80,6 +80,10 @@
@@ -1519,7 +1519,7 @@ index 0aee65503642..1ca2bcd7755d 100644
#include <drm/drm_privacy_screen_consumer.h>
#include <drm/display/drm_dp_mst_helper.h>
#include <drm/display/drm_hdmi_helper.h>
@@ -3007,7 +3011,10 @@ static int dm_hw_init(struct amdgpu_ip_block *ip_block)
@@ -3093,7 +3097,10 @@ static int dm_hw_init(struct amdgpu_ip_block *ip_block)
r = amdgpu_dm_init(adev);
if (r)
return r;
@@ -1530,7 +1530,7 @@ index 0aee65503642..1ca2bcd7755d 100644
r = dm_oem_i2c_hw_init(adev);
if (r)
@@ -3028,7 +3035,10 @@ static int dm_hw_fini(struct amdgpu_ip_block *ip_block)
@@ -3114,7 +3121,10 @@ static int dm_hw_fini(struct amdgpu_ip_block *ip_block)
{
struct amdgpu_device *adev = ip_block->adev;
@@ -1541,7 +1541,7 @@ index 0aee65503642..1ca2bcd7755d 100644
amdgpu_dm_irq_fini(adev);
amdgpu_dm_fini(adev);
@@ -6809,6 +6819,12 @@ static void fill_stream_properties_from_drm_display_mode(
@@ -6880,6 +6890,12 @@ static void fill_stream_properties_from_drm_display_mode(
stream->output_color_space = get_output_color_space(timing_out, connector_state);
stream->content_type = get_output_content_type(connector_state);
@@ -1554,7 +1554,7 @@ index 0aee65503642..1ca2bcd7755d 100644
}
static void fill_audio_info(struct audio_info *audio_info,
@@ -8198,6 +8214,11 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec
@@ -8269,6 +8285,11 @@ enum drm_mode_status amdgpu_dm_connector_mode_valid(struct drm_connector *connec
*/
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
@@ -1566,33 +1566,44 @@ index 0aee65503642..1ca2bcd7755d 100644
if ((mode->flags & DRM_MODE_FLAG_INTERLACE) ||
(mode->flags & DRM_MODE_FLAG_DBLSCAN))
return result;
@@ -10458,6 +10479,9 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,
new_crtc_state, i) {
struct amdgpu_crtc *acrtc = to_amdgpu_crtc(crtc);
@@ -10957,12 +10978,58 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
drm_atomic_helper_update_legacy_modeset_state(dev, state);
drm_dp_mst_atomic_wait_for_dependencies(state);
+#ifdef CONFIG_X86_PS5
+ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state,
+ new_crtc_state, i) {
+ dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
+#endif
dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
if (old_crtc_state->active &&
@@ -10465,6 +10489,11 @@ static void amdgpu_dm_commit_streams(struct drm_atomic_state *state,
drm_atomic_crtc_needs_modeset(new_crtc_state))) {
manage_dm_interrupts(adev, acrtc, NULL);
dc_stream_release(dm_old_crtc_state->stream);
+#ifdef CONFIG_X86_PS5
+ dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
+
+ if ((new_crtc_state->active &&
+ (!old_crtc_state->active ||
+ drm_atomic_crtc_needs_modeset(new_crtc_state))) ||
+ (old_crtc_state->active &&
+ (!new_crtc_state->active ||
+ drm_atomic_crtc_needs_modeset(new_crtc_state)))) {
+ if (dm_new_crtc_state->stream && dc_is_dp_signal(dm_new_crtc_state->stream->signal)) {
+ sceHdmiInitVideoConfig();
+ }
+ }
+ }
+#endif
}
+
dm_state = dm_atomic_get_new_state(state);
if (dm_state && dm_state->context) {
dc_state = dm_state->context;
amdgpu_dm_commit_streams(state, dc_state);
}
@@ -11035,6 +11064,22 @@ static void amdgpu_dm_atomic_commit_tail(struct drm_atomic_state *state)
dc_stream_retain(dm_new_crtc_state->stream);
acrtc->dm_irq_params.stream = dm_new_crtc_state->stream;
manage_dm_interrupts(adev, acrtc, dm_new_crtc_state);
+#ifdef CONFIG_X86_PS5
+ for_each_oldnew_crtc_in_state(state, crtc, old_crtc_state,
+ new_crtc_state, i) {
+ dm_new_crtc_state = to_dm_crtc_state(new_crtc_state);
+ dm_old_crtc_state = to_dm_crtc_state(old_crtc_state);
+
+ if (new_crtc_state->active &&
+ (!old_crtc_state->active ||
+ drm_atomic_crtc_needs_modeset(new_crtc_state))) {
+ if (dm_new_crtc_state->stream && dc_is_dp_signal(dm_new_crtc_state->stream->signal)) {
+ struct dc_stream_state *stream = dm_new_crtc_state->stream;
+ int channels = 0;
@@ -1607,15 +1618,31 @@ index 0aee65503642..1ca2bcd7755d 100644
+ sceHdmiSetAudioConfig(channels);
+ sceHdmiSetAudioMute(0);
+ }
+ }
+ }
+#endif
}
/* Handle vrr on->off / off->on transitions */
amdgpu_dm_handle_vrr_transition(dm_old_crtc_state, dm_new_crtc_state);
+
amdgpu_dm_update_hdcp(state);
/* Handle connector state changes */
diff --git a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn201/dcn201_clk_mgr.c b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn201/dcn201_clk_mgr.c
index 76c612ecfe3c..953cd538402b 100644
--- a/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn201/dcn201_clk_mgr.c
+++ b/drivers/gpu/drm/amd/display/dc/clk_mgr/dcn201/dcn201_clk_mgr.c
@@ -214,4 +214,8 @@ void dcn201_clk_mgr_construct(struct dc_context *ctx,
clk_mgr->dfs_bypass_enabled = true;
dce_clock_read_ss_info(clk_mgr);
+#ifdef CONFIG_X86_PS5
+ clk_mgr->ss_on_dprefclk = false;
+ clk_mgr->dprefclk_ss_percentage = 0;
+#endif
}
diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
index 896f4719cf7b..0eb818421a50 100644
index 05991a10f8bf..777593dddd56 100644
--- a/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
+++ b/drivers/gpu/drm/amd/display/dc/core/dc_resource.c
@@ -204,6 +204,7 @@ enum dce_version resource_parse_asic_id(struct hw_asic_id asic_id)
@@ -205,6 +205,7 @@ enum dce_version resource_parse_asic_id(struct hw_asic_id asic_id)
asic_id.chip_id == DEVICE_ID_NV_13FA ||
asic_id.chip_id == DEVICE_ID_NV_13FB ||
asic_id.chip_id == DEVICE_ID_NV_13FC ||
@@ -1668,10 +1695,10 @@ index 13e14aad3daa..edc4b9ccfea4 100644
/* OF_SKIP_POWER_DOWN_INACTIVE_ENCODER */
/*in DP_Alt_No_Connect case, we turn off the dig already,
diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
index 699a756bbc40..4a9d4ba6abf4 100644
index f0abbb7c2cb2..bd90d174ba24 100644
--- a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
+++ b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
@@ -1753,6 +1753,11 @@ static void power_down_clock_sources(struct dc *dc)
@@ -1821,6 +1821,11 @@ static void power_down_clock_sources(struct dc *dc)
{
int i;
@@ -1684,10 +1711,10 @@ index 699a756bbc40..4a9d4ba6abf4 100644
dc->res_pool->dp_clock_source) == false)
dm_error("Failed to power down pll! (dp clk src)\n");
diff --git a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
index cdc7587cf0b6..7a7b17fe5a89 100644
index 782a45caa13d..444259795140 100644
--- a/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
+++ b/drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c
@@ -1015,6 +1015,12 @@ bool link_decide_link_settings(struct dc_stream_state *stream,
@@ -1018,6 +1018,12 @@ bool link_decide_link_settings(struct dc_stream_state *stream,
decide_dp_link_settings(link, link_setting, req_bw);
}
@@ -1700,7 +1727,7 @@ index cdc7587cf0b6..7a7b17fe5a89 100644
return link_setting->lane_count != LANE_COUNT_UNKNOWN &&
link_setting->link_rate != LINK_RATE_UNKNOWN;
}
@@ -1455,6 +1461,8 @@ void dpcd_set_source_specific_data(struct dc_link *link)
@@ -1458,6 +1464,8 @@ void dpcd_set_source_specific_data(struct dc_link *link)
(uint8_t *)(&amd_device_id),
sizeof(amd_device_id));
@@ -1709,7 +1736,7 @@ index cdc7587cf0b6..7a7b17fe5a89 100644
if (link->ctx->dce_version >= DCN_VERSION_2_0 &&
link->dc->caps.min_horizontal_blanking_period != 0) {
@@ -1464,6 +1472,7 @@ void dpcd_set_source_specific_data(struct dc_link *link)
@@ -1467,6 +1475,7 @@ void dpcd_set_source_specific_data(struct dc_link *link)
DP_SOURCE_MINIMUM_HBLANK_SUPPORTED, (uint8_t *)(&hblank_size),
sizeof(hblank_size));
}
@@ -1718,7 +1745,7 @@ index cdc7587cf0b6..7a7b17fe5a89 100644
WPP_BIT_FLAG_DC_DETECTION_DP_CAPS,
"result=%u link_index=%u enum dce_version=%d DPCD=0x%04X min_hblank=%u branch_dev_id=0x%x branch_dev_name='%c%c%c%c%c%c'",
diff --git a/drivers/gpu/drm/amd/display/include/dal_asic_id.h b/drivers/gpu/drm/amd/display/include/dal_asic_id.h
index 8aea50aa9533..8b647bd95691 100644
index 92510af1bd65..85c9e587834d 100644
--- a/drivers/gpu/drm/amd/display/include/dal_asic_id.h
+++ b/drivers/gpu/drm/amd/display/include/dal_asic_id.h
@@ -217,6 +217,7 @@ enum {
@@ -1730,10 +1757,10 @@ index 8aea50aa9533..8b647bd95691 100644
#define FAMILY_VGH 144
#define DEVICE_ID_VGH_163F 0x163F
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
index ff432ac6b569..2efeaec03ea1 100644
index 404208bf23a6..85718d593c42 100644
--- a/drivers/gpu/drm/drm_edid.c
+++ b/drivers/gpu/drm/drm_edid.c
@@ -2219,6 +2219,10 @@ static void connector_bad_edid(struct drm_connector *connector,
@@ -2242,6 +2242,10 @@ static void connector_bad_edid(struct drm_connector *connector,
edid_block_dump(KERN_DEBUG, edid + i, i);
}
@@ -1744,7 +1771,7 @@ index ff432ac6b569..2efeaec03ea1 100644
/* Get override or firmware EDID */
static const struct drm_edid *drm_edid_override_get(struct drm_connector *connector)
{
@@ -2234,6 +2238,11 @@ static const struct drm_edid *drm_edid_override_get(struct drm_connector *connec
@@ -2257,6 +2261,11 @@ static const struct drm_edid *drm_edid_override_get(struct drm_connector *connec
if (!override)
override = drm_edid_load_firmware(connector);
@@ -1769,10 +1796,10 @@ index a5d8f45b7881..3c7b76af13e4 100644
case 0x68: /* Lucienne */
case 0x71: /* Zen2 */
diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c
index f3fd7f39efb4..7dd1b138ae78 100644
index 3bdb380d23e9..e25db11bb1e5 100644
--- a/drivers/iommu/amd/init.c
+++ b/drivers/iommu/amd/init.c
@@ -3093,6 +3093,8 @@ static void __init free_iommu_resources(void)
@@ -3107,6 +3107,8 @@ static void __init free_iommu_resources(void)
free_pci_segments();
}
@@ -1781,7 +1808,7 @@ index f3fd7f39efb4..7dd1b138ae78 100644
/* SB IOAPIC is always on this device in AMD systems */
#define IOAPIC_SB_DEVID ((0x00 << 8) | PCI_DEVFN(0x14, 0))
@@ -3145,6 +3147,8 @@ static bool __init check_ioapic_information(void)
@@ -3159,6 +3161,8 @@ static bool __init check_ioapic_information(void)
return ret;
}
@@ -1790,7 +1817,7 @@ index f3fd7f39efb4..7dd1b138ae78 100644
static void __init free_dma_resources(void)
{
amd_iommu_pdom_id_destroy();
@@ -3269,8 +3273,11 @@ static int __init early_amd_iommu_init(void)
@@ -3283,8 +3287,11 @@ static int __init early_amd_iommu_init(void)
if (!is_kdump_kernel() || amd_iommu_disabled)
disable_iommus();
@@ -1803,16 +1830,16 @@ index f3fd7f39efb4..7dd1b138ae78 100644
if (amd_iommu_irq_remap) {
struct amd_iommu_pci_seg *pci_seg;
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig
index 7b73332a13d9..b92217f5ef0e 100644
index b5ee338b620d..5e3b12332ef0 100644
--- a/drivers/net/phy/Kconfig
+++ b/drivers/net/phy/Kconfig
@@ -471,3 +471,4 @@ config XILINX_GMII2RGMII
@@ -465,3 +465,4 @@ config XILINX_GMII2RGMII
Ethernet physical media devices and the Gigabit Ethernet controller.
endif # PHYLIB
+source "drivers/net/phy/mts/Kconfig"
diff --git a/drivers/net/phy/Makefile b/drivers/net/phy/Makefile
index 3a34917adea7..2f0ec5e17d90 100644
index 05e4878af27a..3a61917ba549 100644
--- a/drivers/net/phy/Makefile
+++ b/drivers/net/phy/Makefile
@@ -71,6 +71,7 @@ obj-$(CONFIG_MARVELL_88X2222_PHY) += marvell-88x2222.o
@@ -1850,10 +1877,10 @@ index 000000000000..e01771be845b
+mts-y := mts_main.o mts_phy.o
diff --git a/drivers/net/phy/mts/mts.h b/drivers/net/phy/mts/mts.h
new file mode 100644
index 000000000000..e846b6b0edbc
index 000000000000..a0e41029aea2
--- /dev/null
+++ b/drivers/net/phy/mts/mts.h
@@ -0,0 +1,181 @@
@@ -0,0 +1,186 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * PlayStation 5 Gigabit Ethernet driver
@@ -1925,6 +1952,11 @@ index 000000000000..e846b6b0edbc
+
+#define GBE_COAL_VAL 0x10001388
+
+/* this chip has no intx pin and its msi sometimes never fires (cold boot). when
+ * we detect that, the link_poll work becomes the only way to service the rings,
+ * so it polls this often (ms) instead of once a second to stay responsive. */
+#define GBE_POLL_FALLBACK_MS 10
+
+/* excludes bit2 (LINK) - polling link state avoids IRQ storm from autoneg pulses */
+#define GBE_IER_MASK 0x5014fa
+
@@ -2037,10 +2069,10 @@ index 000000000000..e846b6b0edbc
+#endif /* _MTS_H */
diff --git a/drivers/net/phy/mts/mts_main.c b/drivers/net/phy/mts/mts_main.c
new file mode 100644
index 000000000000..4250a25d7260
index 000000000000..c193cb2d1bd4
--- /dev/null
+++ b/drivers/net/phy/mts/mts_main.c
@@ -0,0 +1,810 @@
@@ -0,0 +1,823 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * PlayStation 5 Gigabit Ethernet driver
@@ -2515,26 +2547,32 @@ index 000000000000..4250a25d7260
+{
+ struct gbe_priv *p = container_of(to_delayed_work(work),
+ struct gbe_priv, link_poll);
+ unsigned long delay = HZ;
+
+ gbe_link_change(p);
+
+ /*
+ * on a cold boot the chip sometimes just never fires its first irq and
+ * napi sits there doing nothing. if the irq count hasnt moved since last tick,
+ * we kick it by hand and re-arm the mask.
+ * napi sits there doing nothing. if the irq count hasnt moved since last
+ * tick the msi is dead -- kick napi by hand and re-arm the mask. msi is the
+ * only irq source (no intx pin), so while it stays dead we keep polling fast
+ * (GBE_POLL_FALLBACK_MS) instead of once a second, or interactive rx lags by
+ * up to a second. as soon as real irqs start arriving we drop back to HZ.
+ */
+ if (netif_running(p->netdev) && p->cnt_irq == p->irq_watchdog) {
+ napi_schedule(&p->napi);
+ gbe_wr(p, GBE_REG_IER, GBE_IER_MASK);
+ delay = max_t(unsigned long, 1, msecs_to_jiffies(GBE_POLL_FALLBACK_MS));
+ }
+ p->irq_watchdog = p->cnt_irq;
+
+ if (++p->poll_tick >= 10) {
+ /* dump stats roughly every 10s regardless of the current poll cadence */
+ if (++p->poll_tick >= 10 * HZ / delay) {
+ gbe_dump_stats(p);
+ p->poll_tick = 0;
+ }
+
+ schedule_delayed_work(&p->link_poll, HZ);
+ schedule_delayed_work(&p->link_poll, delay);
+}
+
+/*
@@ -2582,11 +2620,18 @@ index 000000000000..4250a25d7260
+ rx_done = gbe_rx_poll(p, budget);
+
+ if (rx_done < budget) {
+ u32 isr;
+
+ napi_complete_done(napi, rx_done);
+ gbe_wr(p, GBE_REG_IER, GBE_IER_MASK);
+ /* chip wont send a fresh msi for stuff that landed while ier was
+ off, so re-check isr and re-kick or interrupts just freeze */
+ if (gbe_rd(p, GBE_REG_ISR) & GBE_IER_MASK) {
+ off, so re-check isr and re-kick or interrupts just freeze.
+ ACK the causes (W1C) first: otherwise a latched/undelivered
+ cause (the msi-silent cold-boot case) keeps this condition
+ permanently true and spins napi at ~30k polls/s, pinning a cpu. */
+ isr = gbe_rd(p, GBE_REG_ISR) & GBE_IER_MASK;
+ if (isr) {
+ gbe_wr(p, GBE_REG_ISR, isr);
+ if (napi_schedule_prep(&p->napi)) {
+ gbe_wr(p, GBE_REG_IER, 0);
+ __napi_schedule(&p->napi);
@@ -3262,10 +3307,10 @@ index 000000000000..91fedcca4589
+ return 0;
+}
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c
index b4707640e102..7b854e5bb8ff 100644
index b63cd0c310bc..495b2714838b 100644
--- a/drivers/pci/probe.c
+++ b/drivers/pci/probe.c
@@ -2801,6 +2801,14 @@ static int next_ari_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
@@ -2806,6 +2806,14 @@ static int next_ari_fn(struct pci_bus *bus, struct pci_dev *dev, int fn)
u16 cap = 0;
unsigned int next_fn;
@@ -3282,11 +3327,11 @@ index b4707640e102..7b854e5bb8ff 100644
diff --git a/drivers/ps5/Makefile b/drivers/ps5/Makefile
new file mode 100644
index 000000000000..7acb030a4976
index 000000000000..ff1bbbbf219c
--- /dev/null
+++ b/drivers/ps5/Makefile
@@ -0,0 +1 @@
+obj-y += spcie.o tpcie.o hdmi.o mp1.o
+obj-y += spcie.o tpcie.o hdmi.o mp1.o buzzer.o
diff --git a/drivers/ps5/autoservo_param.h b/drivers/ps5/autoservo_param.h
new file mode 100644
index 000000000000..d2c25e461bf7
@@ -5195,6 +5240,303 @@ index 000000000000..d2c25e461bf7
+};
+
+#endif /* _AUTOSERVO_PARAM_H */
diff --git a/drivers/ps5/buzzer.c b/drivers/ps5/buzzer.c
new file mode 100644
index 000000000000..f48ad6f92534
--- /dev/null
+++ b/drivers/ps5/buzzer.c
@@ -0,0 +1,291 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/miscdevice.h>
+#include <linux/fs.h>
+#include <linux/slab.h>
+#include <linux/uaccess.h>
+#include <linux/input.h>
+#include <linux/delay.h>
+#include <linux/kthread.h>
+#include <linux/mutex.h>
+#include <linux/device.h>
+#include <linux/ps5.h>
+
+#define BUZZER_IOC_MAGIC 'B'
+
+#define PS5_BUZZ_SILENT 0
+#define PS5_BUZZ_SHORT 1
+#define PS5_BUZZ_ERROR 2
+#define PS5_BUZZ_LONG 3
+
+struct ps5_buzzer_step {
+ __u8 value;
+ __u16 hold_ms;
+} __attribute__((packed));
+
+struct ps5_buzzer_pattern {
+ __u32 nsteps;
+ struct ps5_buzzer_step steps[];
+};
+
+#define PS5_BUZZER_BEEP _IOW(BUZZER_IOC_MAGIC, 1, __u8)
+#define PS5_BUZZER_PLAY _IOW(BUZZER_IOC_MAGIC, 2, struct ps5_buzzer_pattern)
+#define PS5_BUZZER_STOP _IO(BUZZER_IOC_MAGIC, 3)
+
+#define MAX_PATTERN_STEPS 1024
+
+static struct input_dev *snd_idev;
+static struct task_struct *play_thread;
+static DEFINE_MUTEX(play_lock);
+
+static int ps5_buzz_raw(u8 level)
+{
+ u8 buf[ICC_MSG_MAX_SIZE] = {};
+ struct icc_msg *msg = (struct icc_msg *)buf;
+
+ if (level > PS5_BUZZ_LONG)
+ return -EINVAL;
+
+ msg->service_id = ICC_SERVICE_ID_INDICATOR;
+ msg->msg_type = 0x00;
+ msg->length = 0x20;
+ msg->data[0] = level;
+
+ return icc_query(buf, buf);
+}
+
+struct play_ctx {
+ struct ps5_buzzer_step *steps;
+ u32 nsteps;
+};
+
+static int play_fn(void *data)
+{
+ struct play_ctx *ctx = data;
+ u32 i;
+
+ for (i = 0; i < ctx->nsteps && !kthread_should_stop(); i++) {
+ ps5_buzz_raw(ctx->steps[i].value);
+ if (ctx->steps[i].hold_ms)
+ msleep_interruptible(ctx->steps[i].hold_ms);
+ }
+
+ kfree(ctx->steps);
+ kfree(ctx);
+
+ mutex_lock(&play_lock);
+ play_thread = NULL;
+ mutex_unlock(&play_lock);
+ return 0;
+}
+
+static int play_start(struct ps5_buzzer_step *steps, u32 nsteps)
+{
+ struct play_ctx *ctx;
+ struct task_struct *t;
+
+ mutex_lock(&play_lock);
+ if (play_thread) {
+ mutex_unlock(&play_lock);
+ return -EBUSY;
+ }
+
+ ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+ if (!ctx) {
+ mutex_unlock(&play_lock);
+ return -ENOMEM;
+ }
+ ctx->steps = steps;
+ ctx->nsteps = nsteps;
+
+ t = kthread_run(play_fn, ctx, "ps5_buzz_play");
+ if (IS_ERR(t)) {
+ kfree(ctx);
+ mutex_unlock(&play_lock);
+ return PTR_ERR(t);
+ }
+ play_thread = t;
+ mutex_unlock(&play_lock);
+ return 0;
+}
+
+static int play_stop(void)
+{
+ mutex_lock(&play_lock);
+ if (play_thread) {
+ kthread_stop(play_thread);
+ play_thread = NULL;
+ }
+ mutex_unlock(&play_lock);
+ return 0;
+}
+
+static ssize_t buzz_write(struct file *f, const char __user *ubuf,
+ size_t n, loff_t *pos)
+{
+ char c;
+ int ret;
+
+ if (n < 1)
+ return -EINVAL;
+ if (get_user(c, ubuf))
+ return -EFAULT;
+ if (c < '0' || c > '3')
+ return -EINVAL;
+
+ ret = ps5_buzz_raw(c - '0');
+ return ret ? ret : n;
+}
+
+static long buzz_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
+{
+ switch (cmd) {
+ case PS5_BUZZER_BEEP: {
+ u8 level;
+ if (get_user(level, (u8 __user *)arg))
+ return -EFAULT;
+ return ps5_buzz_raw(level);
+ }
+ case PS5_BUZZER_PLAY: {
+ struct ps5_buzzer_pattern hdr;
+ struct ps5_buzzer_step *steps;
+ size_t bytes;
+ int ret;
+
+ if (copy_from_user(&hdr, (void __user *)arg, sizeof(hdr)))
+ return -EFAULT;
+ if (!hdr.nsteps || hdr.nsteps > MAX_PATTERN_STEPS)
+ return -EINVAL;
+
+ bytes = hdr.nsteps * sizeof(struct ps5_buzzer_step);
+ steps = kmalloc(bytes, GFP_KERNEL);
+ if (!steps)
+ return -ENOMEM;
+ if (copy_from_user(steps,
+ (void __user *)(arg + sizeof(hdr)), bytes)) {
+ kfree(steps);
+ return -EFAULT;
+ }
+ ret = play_start(steps, hdr.nsteps);
+ if (ret)
+ kfree(steps);
+ return ret;
+ }
+ case PS5_BUZZER_STOP:
+ return play_stop();
+ }
+ return -ENOTTY;
+}
+
+static const struct file_operations buzz_fops = {
+ .owner = THIS_MODULE,
+ .write = buzz_write,
+ .unlocked_ioctl = buzz_ioctl,
+ .llseek = noop_llseek,
+};
+
+static struct miscdevice buzz_misc = {
+ .minor = MISC_DYNAMIC_MINOR,
+ .name = "ps5_buzzer",
+ .fops = &buzz_fops,
+ .mode = 0660,
+};
+
+static int snd_event(struct input_dev *dev, unsigned int type,
+ unsigned int code, int value)
+{
+ if (type == EV_SND && code == SND_BELL)
+ ps5_buzz_raw(value ? PS5_BUZZ_SHORT : PS5_BUZZ_SILENT);
+ return 0;
+}
+
+static ssize_t beep_store(struct device *d, struct device_attribute *a,
+ const char *buf, size_t n)
+{
+ u8 level;
+ int ret;
+
+ if (kstrtou8(buf, 0, &level))
+ return -EINVAL;
+ ret = ps5_buzz_raw(level);
+ return ret ? ret : n;
+}
+static DEVICE_ATTR_WO(beep);
+
+static ssize_t stop_store(struct device *d, struct device_attribute *a,
+ const char *buf, size_t n)
+{
+ play_stop();
+ return n;
+}
+static DEVICE_ATTR_WO(stop);
+
+static struct attribute *buzz_attrs[] = {
+ &dev_attr_beep.attr,
+ &dev_attr_stop.attr,
+ NULL,
+};
+
+static const struct attribute_group buzz_attr_group = {
+ .attrs = buzz_attrs,
+};
+
+static int __init ps5_buzzer_init(void)
+{
+ int ret;
+
+ ret = misc_register(&buzz_misc);
+ if (ret)
+ return ret;
+
+ ret = sysfs_create_group(&buzz_misc.this_device->kobj, &buzz_attr_group);
+ if (ret)
+ goto err_misc;
+
+ snd_idev = input_allocate_device();
+ if (!snd_idev) {
+ ret = -ENOMEM;
+ goto err_sysfs;
+ }
+ snd_idev->name = "PS5 Chassis Buzzer";
+ snd_idev->phys = "ps5_buzzer/input0";
+ snd_idev->id.bustype = BUS_VIRTUAL;
+ snd_idev->event = snd_event;
+ input_set_capability(snd_idev, EV_SND, SND_BELL);
+
+ ret = input_register_device(snd_idev);
+ if (ret)
+ goto err_input;
+
+ return 0;
+
+err_input:
+ input_free_device(snd_idev);
+ snd_idev = NULL;
+err_sysfs:
+ sysfs_remove_group(&buzz_misc.this_device->kobj, &buzz_attr_group);
+err_misc:
+ misc_deregister(&buzz_misc);
+ return ret;
+}
+
+static void __exit ps5_buzzer_exit(void)
+{
+ play_stop();
+ if (snd_idev)
+ input_unregister_device(snd_idev);
+ sysfs_remove_group(&buzz_misc.this_device->kobj, &buzz_attr_group);
+ misc_deregister(&buzz_misc);
+}
+
+module_init(ps5_buzzer_init);
+module_exit(ps5_buzzer_exit);
+
+MODULE_AUTHOR("Armandas Kvietkus");
+MODULE_DESCRIPTION("PlayStation 5 chassis piezo buzzer");
+MODULE_LICENSE("GPL");
diff --git a/drivers/ps5/hdmi.c b/drivers/ps5/hdmi.c
new file mode 100644
index 000000000000..8f094490d677
@@ -8397,10 +8739,10 @@ index 000000000000..23de43ea4b00
+MODULE_DESCRIPTION("PlayStation 5 Titania PCI Express glue driver");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index 2eedf44e6801..2785a47665be 100644
index c8700e6a694d..7d0afd378c4e 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -105,6 +105,9 @@ extern struct kobject *dmi_kobj;
@@ -120,6 +120,9 @@ extern struct kobject *dmi_kobj;
extern int dmi_check_system(const struct dmi_system_id *list);
const struct dmi_system_id *dmi_first_match(const struct dmi_system_id *list);
extern const char * dmi_get_system_info(int field);
@@ -8524,10 +8866,10 @@ index 28169d7e143b..44f516daa21d 100755
do
case "$1" in
diff --git a/sound/hda/controllers/intel.c b/sound/hda/controllers/intel.c
index a4104376523a..befee7ef6c94 100644
index 4b03c64e72ab..4cb7d285ccd6 100644
--- a/sound/hda/controllers/intel.c
+++ b/sound/hda/controllers/intel.c
@@ -2640,6 +2640,8 @@ static const struct pci_device_id azx_ids[] = {
@@ -2643,6 +2643,8 @@ static const struct pci_device_id azx_ids[] = {
AZX_DCAPS_PM_RUNTIME },
{ PCI_VDEVICE(ATI, 0x1308),
.driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },