From bde575cbc9394d605daacfb57607ea423cfeb0e6 Mon Sep 17 00:00:00 2001 From: Jan200101 Date: Thu, 18 Apr 2024 15:10:48 +0200 Subject: kernel 6.8.7 --- SOURCES/Patchlist.changelog | 4 +- SOURCES/kernel-x86_64-debug-fedora.config | 5 +- SOURCES/kernel-x86_64-debug-rhel.config | 3 +- SOURCES/kernel-x86_64-fedora.config | 5 +- SOURCES/kernel-x86_64-rhel.config | 3 +- SOURCES/kernel-x86_64-rt-debug-rhel.config | 3 +- SOURCES/kernel-x86_64-rt-rhel.config | 3 +- SOURCES/kernel.changelog | 6 + SOURCES/oled-deck-refresh-rate.patch | 109 ------------ SOURCES/patch-6.8-redhat.patch | 21 +-- SOURCES/rog-ally-gyro-fix.patch | 276 ++++++++++++++++++++--------- SOURCES/steam-deck.patch | 84 +++++++++ SOURCES/steamdeck-oled-refresh-rate.patch | 174 ++++++++++++++++++ 13 files changed, 466 insertions(+), 230 deletions(-) delete mode 100644 SOURCES/oled-deck-refresh-rate.patch create mode 100644 SOURCES/steamdeck-oled-refresh-rate.patch (limited to 'SOURCES') diff --git a/SOURCES/Patchlist.changelog b/SOURCES/Patchlist.changelog index 0e3b693..86f341d 100644 --- a/SOURCES/Patchlist.changelog +++ b/SOURCES/Patchlist.changelog @@ -1,5 +1,5 @@ -"https://gitlab.com/cki-project/kernel-ark/-/commit"/429ecd1add008c0f027e68eb958276b2dc60417f - 429ecd1add008c0f027e68eb958276b2dc60417f Revert "cpupower: Bump soname version" +"https://gitlab.com/cki-project/kernel-ark/-/commit"/0c2a5d1fe131e609b8939b1be078241fe07823bd + 0c2a5d1fe131e609b8939b1be078241fe07823bd Revert "cpupower: Bump soname version" "https://gitlab.com/cki-project/kernel-ark/-/commit"/e56840b5f971b4d0f4032f6f5ab95c0c5ba40f8e e56840b5f971b4d0f4032f6f5ab95c0c5ba40f8e nouveau: fix devinit paths to only handle display on GSP. diff --git a/SOURCES/kernel-x86_64-debug-fedora.config b/SOURCES/kernel-x86_64-debug-fedora.config index 4c8c459..e5dd048 100644 --- a/SOURCES/kernel-x86_64-debug-fedora.config +++ b/SOURCES/kernel-x86_64-debug-fedora.config @@ -4084,6 +4084,7 @@ CONFIG_MISC_FILESYSTEMS=y CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y # CONFIG_MK8 is not set CONFIG_MKISS=m CONFIG_MLX4_CORE_GEN2=y @@ -7280,8 +7281,6 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m # CONFIG_SPECTRE_BHI_AUTO is not set -# CONFIG_SPECTRE_BHI_OFF is not set -CONFIG_SPECTRE_BHI_ON=y CONFIG_SPECULATION_MITIGATIONS=y CONFIG_SPI_ALTERA_CORE=m CONFIG_SPI_ALTERA_DFL=m @@ -8774,7 +8773,7 @@ CONFIG_XDP_SOCKETS=y CONFIG_XEN_512GB=y CONFIG_XEN_ACPI_PROCESSOR=m CONFIG_XEN_BACKEND=y -# CONFIG_XEN_BALLOON_MEMORY_HOTPLUG is not set +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y CONFIG_XEN_BALLOON=y CONFIG_XEN_BLKDEV_BACKEND=m CONFIG_XEN_BLKDEV_FRONTEND=m diff --git a/SOURCES/kernel-x86_64-debug-rhel.config b/SOURCES/kernel-x86_64-debug-rhel.config index 9710775..1608aaa 100644 --- a/SOURCES/kernel-x86_64-debug-rhel.config +++ b/SOURCES/kernel-x86_64-debug-rhel.config @@ -3612,6 +3612,7 @@ CONFIG_MISC_FILESYSTEMS=y CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y # CONFIG_MK8 is not set # CONFIG_MLX4_CORE_GEN2 is not set # CONFIG_MLX4_CORE is not set @@ -6509,8 +6510,6 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m # CONFIG_SPECTRE_BHI_AUTO is not set -# CONFIG_SPECTRE_BHI_OFF is not set -CONFIG_SPECTRE_BHI_ON=y CONFIG_SPECULATION_MITIGATIONS=y # CONFIG_SPI_ALTERA_CORE is not set # CONFIG_SPI_ALTERA is not set diff --git a/SOURCES/kernel-x86_64-fedora.config b/SOURCES/kernel-x86_64-fedora.config index dbab6e9..664ae5d 100644 --- a/SOURCES/kernel-x86_64-fedora.config +++ b/SOURCES/kernel-x86_64-fedora.config @@ -4058,6 +4058,7 @@ CONFIG_MISC_FILESYSTEMS=y CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y # CONFIG_MK8 is not set CONFIG_MKISS=m CONFIG_MLX4_CORE_GEN2=y @@ -7250,8 +7251,6 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m # CONFIG_SPECTRE_BHI_AUTO is not set -# CONFIG_SPECTRE_BHI_OFF is not set -CONFIG_SPECTRE_BHI_ON=y CONFIG_SPECULATION_MITIGATIONS=y CONFIG_SPI_ALTERA_CORE=m CONFIG_SPI_ALTERA_DFL=m @@ -8744,7 +8743,7 @@ CONFIG_XDP_SOCKETS=y CONFIG_XEN_512GB=y CONFIG_XEN_ACPI_PROCESSOR=m CONFIG_XEN_BACKEND=y -# CONFIG_XEN_BALLOON_MEMORY_HOTPLUG is not set +CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y CONFIG_XEN_BALLOON=y CONFIG_XEN_BLKDEV_BACKEND=m CONFIG_XEN_BLKDEV_FRONTEND=m diff --git a/SOURCES/kernel-x86_64-rhel.config b/SOURCES/kernel-x86_64-rhel.config index d7ea366..49f089f 100644 --- a/SOURCES/kernel-x86_64-rhel.config +++ b/SOURCES/kernel-x86_64-rhel.config @@ -3592,6 +3592,7 @@ CONFIG_MISC_FILESYSTEMS=y CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y # CONFIG_MK8 is not set # CONFIG_MLX4_CORE_GEN2 is not set # CONFIG_MLX4_CORE is not set @@ -6485,8 +6486,6 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m # CONFIG_SPECTRE_BHI_AUTO is not set -# CONFIG_SPECTRE_BHI_OFF is not set -CONFIG_SPECTRE_BHI_ON=y CONFIG_SPECULATION_MITIGATIONS=y # CONFIG_SPI_ALTERA_CORE is not set # CONFIG_SPI_ALTERA is not set diff --git a/SOURCES/kernel-x86_64-rt-debug-rhel.config b/SOURCES/kernel-x86_64-rt-debug-rhel.config index cfb8093..28ee03c 100644 --- a/SOURCES/kernel-x86_64-rt-debug-rhel.config +++ b/SOURCES/kernel-x86_64-rt-debug-rhel.config @@ -3657,6 +3657,7 @@ CONFIG_MISC_FILESYSTEMS=y CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y # CONFIG_MK8 is not set # CONFIG_MLX4_CORE_GEN2 is not set # CONFIG_MLX4_CORE is not set @@ -6562,8 +6563,6 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m # CONFIG_SPECTRE_BHI_AUTO is not set -# CONFIG_SPECTRE_BHI_OFF is not set -CONFIG_SPECTRE_BHI_ON=y CONFIG_SPECULATION_MITIGATIONS=y # CONFIG_SPI_ALTERA_CORE is not set # CONFIG_SPI_ALTERA is not set diff --git a/SOURCES/kernel-x86_64-rt-rhel.config b/SOURCES/kernel-x86_64-rt-rhel.config index 30a8b7d..9044189 100644 --- a/SOURCES/kernel-x86_64-rt-rhel.config +++ b/SOURCES/kernel-x86_64-rt-rhel.config @@ -3637,6 +3637,7 @@ CONFIG_MISC_FILESYSTEMS=y CONFIG_MISC_RTSX_PCI=m CONFIG_MISC_RTSX_USB=m CONFIG_MITIGATION_RFDS=y +CONFIG_MITIGATION_SPECTRE_BHI=y # CONFIG_MK8 is not set # CONFIG_MLX4_CORE_GEN2 is not set # CONFIG_MLX4_CORE is not set @@ -6538,8 +6539,6 @@ CONFIG_SPEAKUP_SYNTH_SOFT=m CONFIG_SPEAKUP_SYNTH_SPKOUT=m CONFIG_SPEAKUP_SYNTH_TXPRT=m # CONFIG_SPECTRE_BHI_AUTO is not set -# CONFIG_SPECTRE_BHI_OFF is not set -CONFIG_SPECTRE_BHI_ON=y CONFIG_SPECULATION_MITIGATIONS=y # CONFIG_SPI_ALTERA_CORE is not set # CONFIG_SPI_ALTERA is not set diff --git a/SOURCES/kernel.changelog b/SOURCES/kernel.changelog index 236a866..8e5a734 100644 --- a/SOURCES/kernel.changelog +++ b/SOURCES/kernel.changelog @@ -1,3 +1,9 @@ +* Wed Apr 17 2024 Augusto Caringi [6.8.7-0] +- redhat/configs: Enable CONFIG_MITIGATION_SPECTRE_BHI (Augusto Caringi) +- Turn on XEN_BALLOON_MEMORY_HOTPLUG for Fedora (Justin M. Forbes) +- Linux v6.8.7 +Resolves: + * Sat Apr 13 2024 Justin M. Forbes [6.8.6-0] - nouveau: fix devinit paths to only handle display on GSP. (Dave Airlie) - Add bluetooth bug to Bugsfixed for 6.8.6 (Justin M. Forbes) diff --git a/SOURCES/oled-deck-refresh-rate.patch b/SOURCES/oled-deck-refresh-rate.patch deleted file mode 100644 index d6643f9..0000000 --- a/SOURCES/oled-deck-refresh-rate.patch +++ /dev/null @@ -1,109 +0,0 @@ -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -index 9246bca0a0089b24cf315de75d9bee155c74d32d..9c62552bec344e370996a028d809934e4a6f4420 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h -@@ -196,6 +196,7 @@ - extern uint amdgpu_smu_memory_pool_size; - extern int amdgpu_smu_pptable_id; - extern uint amdgpu_dc_feature_mask; -+extern uint amdgpu_freesync_vid_mode; - extern uint amdgpu_dc_debug_mask; - extern uint amdgpu_dc_visual_confirm; - extern uint amdgpu_dm_abm_level; -diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -index af7fae7907d71ed9efb771f50acdf483b4230113..8e1299fe2c54a809761301c15e8bcbe918986bac 100644 ---- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c -@@ -199,6 +199,7 @@ int amdgpu_mes_kiq; - int amdgpu_noretry = -1; - int amdgpu_force_asic_type = -1; - int amdgpu_tmz = -1; /* auto */ -+uint amdgpu_freesync_vid_mode; - int amdgpu_reset_method = -1; /* auto */ - int amdgpu_num_kcq = -1; - int amdgpu_smartshift_bias; -@@ -883,6 +884,32 @@ module_param_named(damageclips, amdgpu_damage_clips, int, 0444); - MODULE_PARM_DESC(tmz, "Enable TMZ feature (-1 = auto (default), 0 = off, 1 = on)"); - module_param_named(tmz, amdgpu_tmz, int, 0444); - -+/** -+ * DOC: freesync_video (uint) -+ * Enable the optimization to adjust front porch timing to achieve seamless -+ * mode change experience when setting a freesync supported mode for which full -+ * modeset is not needed. -+ * -+ * The Display Core will add a set of modes derived from the base FreeSync -+ * video mode into the corresponding connector's mode list based on commonly -+ * used refresh rates and VRR range of the connected display, when users enable -+ * this feature. From the userspace perspective, they can see a seamless mode -+ * change experience when the change between different refresh rates under the -+ * same resolution. Additionally, userspace applications such as Video playback -+ * can read this modeset list and change the refresh rate based on the video -+ * frame rate. Finally, the userspace can also derive an appropriate mode for a -+ * particular refresh rate based on the FreeSync Mode and add it to the -+ * connector's mode list. -+ * -+ * Note: This is an experimental feature. -+ * -+ * The default value: 0 (off). -+ */ -+MODULE_PARM_DESC( -+ freesync_video, -+ "Enable freesync modesetting optimization feature (0 = off (default), 1 = on)"); -+module_param_named(freesync_video, amdgpu_freesync_vid_mode, uint, 0444); -+ - /** - * DOC: reset_method (int) - * GPU reset method (-1 = auto (default), 0 = legacy, 1 = mode0, 2 = mode1, 3 = mode2, 4 = baco) -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 46dd06e8fc7e127dbaa0d7c8c96632c7972b901a..1010a89a17e627845c322fc4874fd1dba2f55cff 100644 ---- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c -@@ -6233,7 +6233,8 @@ create_stream_for_sink(struct drm_connector *connector, - */ - DRM_DEBUG_DRIVER("No preferred mode found\n"); - } else if (aconnector) { -- recalculate_timing = is_freesync_video_mode(&mode, aconnector); -+ recalculate_timing = amdgpu_freesync_vid_mode && -+ is_freesync_video_mode(&mode, aconnector); - if (recalculate_timing) { - freesync_mode = get_highest_refresh_rate_mode(aconnector, false); - drm_mode_copy(&saved_mode, &mode); -@@ -7544,7 +7545,7 @@ static void amdgpu_dm_connector_add_freesync_modes(struct drm_connector *connect - struct amdgpu_dm_connector *amdgpu_dm_connector = - to_amdgpu_dm_connector(connector); - -- if (!edid) -+ if (!(amdgpu_freesync_vid_mode && edid)) - return; - - if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10) -@@ -9838,7 +9839,8 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, - * TODO: Refactor this function to allow this check to work - * in all conditions. - */ -- if (dm_new_crtc_state->stream && -+ if (amdgpu_freesync_vid_mode && -+ dm_new_crtc_state->stream && - is_timing_unchanged_for_freesync(new_crtc_state, old_crtc_state)) - goto skip_modeset; - -@@ -9878,7 +9880,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, - } - - /* Now check if we should set freesync video mode */ -- if (dm_new_crtc_state->stream && -+ if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream && - dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) && - dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream) && - is_timing_unchanged_for_freesync(new_crtc_state, -@@ -9891,7 +9893,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, - set_freesync_fixed_config(dm_new_crtc_state); - - goto skip_modeset; -- } else if (aconnector && -+ } else if (amdgpu_freesync_vid_mode && aconnector && - is_freesync_video_mode(&new_crtc_state->mode, - aconnector)) { - struct drm_display_mode *high_mode; - diff --git a/SOURCES/patch-6.8-redhat.patch b/SOURCES/patch-6.8-redhat.patch index 64246c0..676fce8 100644 --- a/SOURCES/patch-6.8-redhat.patch +++ b/SOURCES/patch-6.8-redhat.patch @@ -29,7 +29,6 @@ include/linux/security.h | 5 + kernel/module/main.c | 2 + kernel/module/signing.c | 9 +- - net/bluetooth/l2cap_core.c | 3 +- scripts/mod/modpost.c | 8 + scripts/tags.sh | 2 + security/integrity/platform_certs/load_uefi.c | 6 +- @@ -37,10 +36,10 @@ security/lockdown/lockdown.c | 1 + security/security.c | 12 ++ tools/power/cpupower/Makefile | 2 +- - 39 files changed, 673 insertions(+), 180 deletions(-) + 38 files changed, 672 insertions(+), 178 deletions(-) diff --git a/Makefile b/Makefile -index c426d47f4b7b..9e0540aa3691 100644 +index e6c0a00722ea..ac70a1596394 100644 --- a/Makefile +++ b/Makefile @@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \ @@ -234,7 +233,7 @@ index 1687483ff319..390b67f19181 100644 return ctx.rc; } diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c -index 617f3e0e963d..92d9066ab4c2 100644 +index eb4ca85d16ff..be8278b39b22 100644 --- a/drivers/acpi/scan.c +++ b/drivers/acpi/scan.c @@ -1757,6 +1757,15 @@ static bool acpi_device_enumeration_by_parent(struct acpi_device *device) @@ -1417,20 +1416,6 @@ index a2ff4242e623..f0d2be1ee4f1 100644 } int module_sig_check(struct load_info *info, int flags) -diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c -index ab5a9d42fae7..706d2478ddb3 100644 ---- a/net/bluetooth/l2cap_core.c -+++ b/net/bluetooth/l2cap_core.c -@@ -4054,8 +4054,7 @@ static int l2cap_connect_req(struct l2cap_conn *conn, - return -EPROTO; - - hci_dev_lock(hdev); -- if (hci_dev_test_flag(hdev, HCI_MGMT) && -- !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags)) -+ if (hci_dev_test_flag(hdev, HCI_MGMT)) - mgmt_device_connected(hdev, hcon, NULL, 0); - hci_dev_unlock(hdev); - diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index ce686ebf5591..0d28efddb253 100644 --- a/scripts/mod/modpost.c diff --git a/SOURCES/rog-ally-gyro-fix.patch b/SOURCES/rog-ally-gyro-fix.patch index b5f57cc..8416b43 100644 --- a/SOURCES/rog-ally-gyro-fix.patch +++ b/SOURCES/rog-ally-gyro-fix.patch @@ -1,120 +1,222 @@ -diff --git a/drivers/iio/accel/bmc150-accel-core.c b/drivers/iio/accel/bmc150-accel-core.c -index 1105918..d665a6e 100644 ---- a/drivers/iio/accel/bmc150-accel-core.c -+++ b/drivers/iio/accel/bmc150-accel-core.c -@@ -10,6 +10,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -1670,6 +1671,8 @@ int bmc150_accel_core_probe(struct device *dev, struct regmap *regmap, int irq, - struct iio_dev *indio_dev; - int ret; +From: Jonathan LoBue + +Adds a description of the duplicate ACPI identifier issue +between devices using bmc150 and bmi323. + +Tested-by: Hans de Goede +Reviewed-by: Hans de Goede +Reviewed-by: Andy Shevchenko +Co-developed-by: Luke D. Jones +Signed-off-by: Luke D. Jones +Co-developed-by: Denis Benato +Signed-off-by: Denis Benato +Co-developed-by: Antheas Kapenekakis +Signed-off-by: Antheas Kapenekakis +Signed-off-by: Jonathan LoBue +--- + drivers/iio/accel/bmc150-accel-i2c.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/drivers/iio/accel/bmc150-accel-i2c.c b/drivers/iio/accel/bmc150-accel-i2c.c +index ee1ba134ad42..353271e23235 100644 +--- a/drivers/iio/accel/bmc150-accel-i2c.c ++++ b/drivers/iio/accel/bmc150-accel-i2c.c +@@ -224,6 +224,19 @@ static const struct acpi_device_id bmc150_accel_acpi_match[] = { + {"BMA250E"}, + {"BMC150A"}, + {"BMI055A"}, ++ /* ++ * The "BOSC0200" identifier used here is not unique to devices using ++ * bmc150. The same "BOSC0200" identifier is found in the ACPI tables of ++ * the ASUS ROG ALLY and Ayaneo AIR Plus which both use a Bosch BMI323 ++ * chip. This creates a conflict with duplicate ACPI identifiers which ++ * multiple drivers want to use. Fortunately, when the bmc150 driver ++ * starts to load on the ASUS ROG ALLY, the chip ID check portion fails ++ * (correctly) because the chip IDs received (via i2c) are unique between ++ * bmc150 and bmi323 and a dmesg output similar to this: ++ * "bmc150_accel_i2c i2c-BOSC0200:00: Invalid chip 0" can be seen. ++ * This allows the bmi323 driver to take over for ASUS ROG ALLY, and ++ * other devices using the bmi323 chip. ++ */ + {"BOSC0200"}, + {"BSBA0150"}, + {"DUAL250E"}, +From: Jonathan LoBue + +Adds the ACPI match table for ASUS ROG ALLY to load the bmi323 +driver with an ACPI match of "BOSC0200", and a comment about duplicate +ACPI identifiers between devices using the bmc150 and bmi323 chips. + +Tested-by: Hans de Goede +Reviewed-by: Hans de Goede +Reviewed-by: Andy Shevchenko +Co-developed-by: Luke D. Jones +Signed-off-by: Luke D. Jones +Co-developed-by: Denis Benato +Signed-off-by: Denis Benato +Co-developed-by: Antheas Kapenekakis +Signed-off-by: Antheas Kapenekakis +Signed-off-by: Jonathan LoBue +--- + drivers/iio/imu/bmi323/bmi323_i2c.c | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) -+ if (dmi_match(DMI_BOARD_NAME, "RC71L") || (dmi_match(DMI_BOARD_NAME, "AB05-AMD") && dmi_match(DMI_PRODUCT_NAME, "AIR Plus"))) -+ return -ENODEV; // Abort loading bmc150 for ASUS ROG ALLY, Ayaneo Air Plus - indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); - if (!indio_dev) - return -ENOMEM; diff --git a/drivers/iio/imu/bmi323/bmi323_i2c.c b/drivers/iio/imu/bmi323/bmi323_i2c.c -index 20a8001..346ba2d 100644 +index 20a8001b9956..f7550503e47e 100644 --- a/drivers/iio/imu/bmi323/bmi323_i2c.c +++ b/drivers/iio/imu/bmi323/bmi323_i2c.c -@@ -5,6 +5,7 @@ - * Copyright (C) 2023, Jagath Jog J - */ - -+#include - #include - #include - #include -@@ -93,6 +94,12 @@ static int bmi323_i2c_probe(struct i2c_client *i2c) +@@ -93,6 +93,25 @@ static int bmi323_i2c_probe(struct i2c_client *i2c) return bmi323_core_probe(dev); } +static const struct acpi_device_id bmi323_acpi_match[] = { -+ {"BOSC0200"}, -+ { }, ++ /* ++ * The "BOSC0200" identifier used here is not unique to bmi323 devices. ++ * The same "BOSC0200" identifier is found in the ACPI tables of devices ++ * using the bmc150 chip. This creates a conflict with duplicate ACPI ++ * identifiers which multiple drivers want to use. If a non-bmi323 device ++ * starts to load with this "BOSC0200" ACPI match here, then the chip ++ * ID check portion should fail because the chip IDs received (via i2c) are ++ * unique between bmc150 and bmi323 and the driver should relinquish the ++ * device. If and when a different driver (such as bmc150) starts to load ++ * with the "BOSC0200" ACPI match, a short reset should ensure that the ++ * device is not in a bad state during that driver initialization. This ++ * device reset does occur in both the bmi323 and bmc150 init sequences. ++ */ ++ { "BOSC0200" }, ++ { } +}; +MODULE_DEVICE_TABLE(acpi, bmi323_acpi_match); + static const struct i2c_device_id bmi323_i2c_ids[] = { { "bmi323" }, { } -@@ -109,6 +116,7 @@ static struct i2c_driver bmi323_i2c_driver = { +@@ -109,6 +128,7 @@ static struct i2c_driver bmi323_i2c_driver = { .driver = { .name = "bmi323", .of_match_table = bmi323_of_i2c_match, -+ .acpi_match_table = ACPI_PTR(bmi323_acpi_match), ++ .acpi_match_table = bmi323_acpi_match, }, .probe = bmi323_i2c_probe, .id_table = bmi323_i2c_ids, -diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c -index d752e9c..b495dba 100644 ---- a/drivers/iio/industrialio-core.c -+++ b/drivers/iio/industrialio-core.c -@@ -13,6 +13,7 @@ - #include - #include +From: Jonathan LoBue +Date: Sun, 25 Feb 2024 14:43:01 -0800 +Subject: [PATCH] iio: imu: bmi323: Implement ACPI method ROTM for mount matrix + +Retrieve mount matrix from ACPI ROTM table. + +--- + drivers/iio/imu/bmi323/bmi323_core.c | 79 ++++++++++++++++++++++++++-- + 1 file changed, 76 insertions(+), 3 deletions(-) + +diff --git a/drivers/iio/imu/bmi323/bmi323_core.c b/drivers/iio/imu/bmi323/bmi323_core.c +index 183af482828f..bb9f05183814 100644 +--- a/drivers/iio/imu/bmi323/bmi323_core.c ++++ b/drivers/iio/imu/bmi323/bmi323_core.c +@@ -7,6 +7,7 @@ + * Datasheet: https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bmi323-ds000.pdf + */ + ++#include + #include + #include #include -+#include - #include - #include - #include -@@ -571,6 +572,14 @@ static const struct iio_mount_matrix iio_mount_idmatrix = { - } - }; - -+static const struct iio_mount_matrix iio_mount_invert_x_matrix = { -+ .rotation = { -+ "-1", "0", "0", -+ "0", "1", "0", -+ "0", "0", "1" +@@ -1997,6 +1998,76 @@ static int bmi323_set_bw(struct bmi323_data *data, + FIELD_PREP(BMI323_ACC_GYRO_CONF_BW_MSK, bw)); + } + ++static bool bmi323_acpi_orientation(struct device *dev, ++ struct iio_mount_matrix *orientation) ++{ ++ struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; ++ struct acpi_device *adev = ACPI_COMPANION(dev); ++ char *str; ++ union acpi_object *obj, *elements; ++ acpi_status status; ++ int i, j, val[3]; ++ bool ret = false; ++ ++ if (!acpi_has_method(adev->handle, "ROTM")) ++ return false; ++ ++ status = acpi_evaluate_object(adev->handle, "ROTM", NULL, &buffer); ++ if (ACPI_FAILURE(status)) { ++ dev_err(dev, "Failed to get ACPI mount matrix: %d\n", status); ++ return false; + } -+}; + - static int iio_setup_mount_idmatrix(const struct device *dev, - struct iio_mount_matrix *matrix) - { -@@ -579,6 +588,14 @@ static int iio_setup_mount_idmatrix(const struct device *dev, - return 0; - } - -+static int iio_setup_mount_invert_x_matrix(const struct device *dev, -+ struct iio_mount_matrix *matrix) ++ obj = buffer.pointer; ++ if (obj->type != ACPI_TYPE_PACKAGE || obj->package.count != 3) { ++ dev_err(dev, "Unknown ACPI mount matrix package format\n"); ++ goto out_free_buffer; ++ } ++ ++ elements = obj->package.elements; ++ for (i = 0; i < 3; i++) { ++ if (elements[i].type != ACPI_TYPE_STRING) { ++ dev_err(dev, "Unknown ACPI mount matrix element format\n"); ++ goto out_free_buffer; ++ } ++ ++ str = elements[i].string.pointer; ++ if (sscanf(str, "%d %d %d", &val[0], &val[1], &val[2]) != 3) { ++ dev_err(dev, "Incorrect ACPI mount matrix string format\n"); ++ goto out_free_buffer; ++ } ++ ++ for (j = 0; j < 3; j++) { ++ switch (val[j]) { ++ case -1: str = "-1"; break; ++ case 0: str = "0"; break; ++ case 1: str = "1"; break; ++ default: ++ dev_err(dev, "Invalid value in ACPI mount matrix: %d\n", val[j]); ++ goto out_free_buffer; ++ } ++ orientation->rotation[i * 3 + j] = str; ++ } ++ } ++ ++ ret = true; ++ ++out_free_buffer: ++ kfree(buffer.pointer); ++ return ret; ++} ++ ++static bool bmi323_apply_acpi_orientation(struct device *dev, ++ struct iio_mount_matrix *orientation) +{ -+ *matrix = iio_mount_invert_x_matrix; -+ dev_info(dev, "using inverted X-axis mounting matrix...\n"); -+ return 0; ++ struct acpi_device *adev = ACPI_COMPANION(dev); ++ ++ if (adev) ++ return bmi323_acpi_orientation(dev, orientation); ++ ++ return false; +} + - ssize_t iio_show_mount_matrix(struct iio_dev *indio_dev, uintptr_t priv, - const struct iio_chan_spec *chan, char *buf) + static int bmi323_init(struct bmi323_data *data) { -@@ -615,6 +632,8 @@ int iio_read_mount_matrix(struct device *dev, struct iio_mount_matrix *matrix) - int err; - - err = device_property_read_string_array(dev, "mount-matrix", matrix->rotation, len); -+ if (dmi_match(DMI_BOARD_NAME, "RC71L")) -+ return iio_setup_mount_invert_x_matrix(dev, matrix); - if (err == len) - return 0; - + int ret, val; +@@ -2099,9 +2170,11 @@ int bmi323_core_probe(struct device *dev) + if (ret) + return -EINVAL; + +- ret = iio_read_mount_matrix(dev, &data->orientation); +- if (ret) +- return ret; ++ if (!bmi323_apply_acpi_orientation(dev, &data->orientation)) { ++ ret = iio_read_mount_matrix(dev, &data->orientation); ++ if (ret) ++ return ret; ++ } + + indio_dev->name = "bmi323-imu"; + indio_dev->info = &bmi323_info; diff --git a/drivers/iio/imu/bmi323/bmi323_core.c b/drivers/iio/imu/bmi323/bmi323_core.c index 0bd5ded..ded8596 100644 --- a/drivers/iio/imu/bmi323/bmi323_core.c +++ b/drivers/iio/imu/bmi323/bmi323_core.c -@@ -10,6 +10,7 @@ - #include - #include - #include -+#include - #include - #include - #include @@ -285,6 +286,9 @@ static const int bmi323_acc_gyro_odr[][2] = { { 200, 0 }, { 400, 0 }, @@ -123,5 +225,5 @@ index 0bd5ded..ded8596 100644 + { 3200, 0}, + { 6400, 0}, }; - + static const int bmi323_acc_gyro_odrns[] = { diff --git a/SOURCES/steam-deck.patch b/SOURCES/steam-deck.patch index b118c46..25a3e52 100644 --- a/SOURCES/steam-deck.patch +++ b/SOURCES/steam-deck.patch @@ -976,5 +976,89 @@ index 0e504b3c2796..a60fa7db9141 100644 NULL }; +From: Matthew Schwartz Mon Sep 17 00:00:00 2001 +From: Andrey Smirnov +Date: Mon, 20 Nov 2023 05:42:03 -0800 +Subject: [PATCH] leds-steamdeck: Add support for LED birghtness multiplier + +Add support for LED birghtness multiplier exposed via custom sysfs +attribute (led_brightness_multiplier). + +Signed-off-by: Andrey Smirnov +(cherry picked from commit c4ea057992e189ec8821cde3a65e2cc0529a5088) +(cherry picked from commit e90fb9bec45c15c0c541ce60b994bab3922ddadf) +Signed-off-by: Cristian Ciocaltea +--- + drivers/leds/leds-steamdeck.c | 49 +++++++++++++++++++++++++++++++++++ + 1 file changed, 49 insertions(+) + +diff --git a/drivers/leds/leds-steamdeck.c b/drivers/leds/leds-steamdeck.c +index 686500b8de736..ada9fffc0a420 100644 +--- a/drivers/leds/leds-steamdeck.c ++++ b/drivers/leds/leds-steamdeck.c +@@ -16,6 +16,54 @@ struct steamdeck_led { + struct led_classdev cdev; + }; + ++static ssize_t led_brightness_multiplier_show(struct device *dev, ++ struct device_attribute *attr, ++ char *buf) ++{ ++ struct led_classdev *cdev = dev_get_drvdata(dev); ++ struct steamdeck_led *sd = container_of(cdev, struct steamdeck_led, ++ cdev); ++ unsigned long long led_brightness_multiplier; ++ ++ if (ACPI_FAILURE(acpi_evaluate_integer(sd->adev->handle, ++ "GLDM", ++ NULL, ++ &led_brightness_multiplier))) ++ return -EIO; ++ ++ ++ return sprintf(buf, "%llu", led_brightness_multiplier); ++} ++ ++static ssize_t led_brightness_multiplier_store(struct device *dev, ++ struct device_attribute *attr, ++ const char *buf, size_t count) ++{ ++ struct led_classdev *cdev = dev_get_drvdata(dev); ++ struct steamdeck_led *sd = container_of(cdev, struct steamdeck_led, ++ cdev); ++ unsigned long value; ++ ++ if (kstrtoul(buf, 10, &value) || value > 100) ++ return -EINVAL; ++ ++ ++ if (ACPI_FAILURE(acpi_execute_simple_method(sd->adev->handle, ++ "SLDM", value))) ++ return -EIO; ++ ++ ++ return count; ++} ++ ++static DEVICE_ATTR_RW(led_brightness_multiplier); ++ ++static struct attribute *steamdeck_led_attrs[] = { ++ &dev_attr_led_brightness_multiplier.attr, ++ NULL ++}; ++ATTRIBUTE_GROUPS(steamdeck_led); ++ + static int steamdeck_leds_brightness_set(struct led_classdev *cdev, + enum led_brightness value) + { +@@ -44,6 +92,7 @@ static int steamdeck_leds_probe(struct platform_device *pdev) + sd->cdev.name = "status:white"; + sd->cdev.brightness_set_blocking = steamdeck_leds_brightness_set; + sd->cdev.max_brightness = 100; ++ sd->cdev.groups = steamdeck_led_groups; + + ret = devm_led_classdev_register(dev, &sd->cdev); + if (ret) { + -- 2.41.0 diff --git a/SOURCES/steamdeck-oled-refresh-rate.patch b/SOURCES/steamdeck-oled-refresh-rate.patch new file mode 100644 index 0000000..9f82ab9 --- /dev/null +++ b/SOURCES/steamdeck-oled-refresh-rate.patch @@ -0,0 +1,174 @@ +From 74b669e1b1296dfb2987a29840ddae29c2b31353 Mon Sep 17 00:00:00 2001 +From: Matthew Schwartz +Date: Wed, 17 Apr 2024 21:31:14 -0700 +Subject: [PATCH 0/2] fix Galileo/OLED Deck refresh rate modesetting + +For some bizarre reason, these amdgpu_freesync_vid_mode parameters are the key to letting the Galileo/OLED Deck's 90hz display modeset properly within gamescope and gamescope-session. This adds the parameters back until a fix comes from upstream. + +Alex Deucher (2): + Reapply "Revert drm/amd/display: Enable Freesync Video Mode by + default" + Revert "drm/amd: Remove freesync video mode amdgpu parameter" + + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 27 +++++++++++++++++++ + .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 +++++---- + 3 files changed, 35 insertions(+), 5 deletions(-) + +-- +2.44.0 + +From dbdedb7714422407d78a715031304e1be54680e1 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 27 Feb 2024 13:08:12 -0500 +Subject: [PATCH 1/2] Reapply "Revert drm/amd/display: Enable Freesync Video + Mode by default" + +This reverts commit 11b92df8a2f7f4605ccc764ce6ae4a72760674df. + +This conflicts with how compositors want to handle VRR. Now +that compositors actually handle VRR, we probably don't need +freesync video. + +Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2985 +Acked-by: Hamza Mahfooz +Signed-off-by: Alex Deucher +--- + drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +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 46dd06e8fc7e..1010a89a17e6 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +@@ -6233,7 +6233,8 @@ create_stream_for_sink(struct drm_connector *connector, + */ + DRM_DEBUG_DRIVER("No preferred mode found\n"); + } else if (aconnector) { +- recalculate_timing = is_freesync_video_mode(&mode, aconnector); ++ recalculate_timing = amdgpu_freesync_vid_mode && ++ is_freesync_video_mode(&mode, aconnector); + if (recalculate_timing) { + freesync_mode = get_highest_refresh_rate_mode(aconnector, false); + drm_mode_copy(&saved_mode, &mode); +@@ -7544,7 +7545,7 @@ static void amdgpu_dm_connector_add_freesync_modes(struct drm_connector *connect + struct amdgpu_dm_connector *amdgpu_dm_connector = + to_amdgpu_dm_connector(connector); + +- if (!edid) ++ if (!(amdgpu_freesync_vid_mode && edid)) + return; + + if (amdgpu_dm_connector->max_vfreq - amdgpu_dm_connector->min_vfreq > 10) +@@ -9838,7 +9839,8 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, + * TODO: Refactor this function to allow this check to work + * in all conditions. + */ +- if (dm_new_crtc_state->stream && ++ if (amdgpu_freesync_vid_mode && ++ dm_new_crtc_state->stream && + is_timing_unchanged_for_freesync(new_crtc_state, old_crtc_state)) + goto skip_modeset; + +@@ -9878,7 +9880,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, + } + + /* Now check if we should set freesync video mode */ +- if (dm_new_crtc_state->stream && ++ if (amdgpu_freesync_vid_mode && dm_new_crtc_state->stream && + dc_is_stream_unchanged(new_stream, dm_old_crtc_state->stream) && + dc_is_stream_scaling_unchanged(new_stream, dm_old_crtc_state->stream) && + is_timing_unchanged_for_freesync(new_crtc_state, +@@ -9891,7 +9893,7 @@ static int dm_update_crtc_state(struct amdgpu_display_manager *dm, + set_freesync_fixed_config(dm_new_crtc_state); + + goto skip_modeset; +- } else if (aconnector && ++ } else if (amdgpu_freesync_vid_mode && aconnector && + is_freesync_video_mode(&new_crtc_state->mode, + aconnector)) { + struct drm_display_mode *high_mode; +-- +2.44.0 + + +From 74b669e1b1296dfb2987a29840ddae29c2b31353 Mon Sep 17 00:00:00 2001 +From: Alex Deucher +Date: Tue, 27 Feb 2024 13:03:40 -0500 +Subject: [PATCH 2/2] Revert "drm/amd: Remove freesync video mode amdgpu + parameter" + +This reverts commit e94e787e37b99645e7c02d20d0a1ba0f8a18a82a. + +This conflicts with how compositors want to handle VRR. Now +that compositors actually handle VRR, we probably don't need +freesync video. + +Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/2985 +Acked-by: Hamza Mahfooz +Signed-off-by: Alex Deucher +--- + drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 + + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 27 +++++++++++++++++++++++++ + 2 files changed, 28 insertions(+) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +index 9246bca0a008..9c62552bec34 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h +@@ -196,6 +196,7 @@ + extern uint amdgpu_smu_memory_pool_size; + extern int amdgpu_smu_pptable_id; + extern uint amdgpu_dc_feature_mask; ++extern uint amdgpu_freesync_vid_mode; + extern uint amdgpu_dc_debug_mask; + extern uint amdgpu_dc_visual_confirm; + extern uint amdgpu_dm_abm_level; +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +index af7fae7907d7..8e1299fe2c54 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c +@@ -199,6 +199,7 @@ int amdgpu_mes_kiq; + int amdgpu_noretry = -1; + int amdgpu_force_asic_type = -1; + int amdgpu_tmz = -1; /* auto */ ++uint amdgpu_freesync_vid_mode; + int amdgpu_reset_method = -1; /* auto */ + int amdgpu_num_kcq = -1; + int amdgpu_smartshift_bias; +@@ -883,6 +884,32 @@ module_param_named(damageclips, amdgpu_damage_clips, int, 0444); + MODULE_PARM_DESC(tmz, "Enable TMZ feature (-1 = auto (default), 0 = off, 1 = on)"); + module_param_named(tmz, amdgpu_tmz, int, 0444); + ++/** ++ * DOC: freesync_video (uint) ++ * Enable the optimization to adjust front porch timing to achieve seamless ++ * mode change experience when setting a freesync supported mode for which full ++ * modeset is not needed. ++ * ++ * The Display Core will add a set of modes derived from the base FreeSync ++ * video mode into the corresponding connector's mode list based on commonly ++ * used refresh rates and VRR range of the connected display, when users enable ++ * this feature. From the userspace perspective, they can see a seamless mode ++ * change experience when the change between different refresh rates under the ++ * same resolution. Additionally, userspace applications such as Video playback ++ * can read this modeset list and change the refresh rate based on the video ++ * frame rate. Finally, the userspace can also derive an appropriate mode for a ++ * particular refresh rate based on the FreeSync Mode and add it to the ++ * connector's mode list. ++ * ++ * Note: This is an experimental feature. ++ * ++ * The default value: 0 (off). ++ */ ++MODULE_PARM_DESC( ++ freesync_video, ++ "Enable freesync modesetting optimization feature (0 = off (default), 1 = on)"); ++module_param_named(freesync_video, amdgpu_freesync_vid_mode, uint, 0444); ++ + /** + * DOC: reset_method (int) + * GPU reset method (-1 = auto (default), 0 = legacy, 1 = mode0, 2 = mode1, 3 = mode2, 4 = baco) +-- +2.44.0 + -- cgit v1.2.3