summaryrefslogtreecommitdiff
path: root/SOURCES
diff options
context:
space:
mode:
Diffstat (limited to 'SOURCES')
-rw-r--r--SOURCES/Patchlist.changelog4
-rw-r--r--SOURCES/kernel-x86_64-debug-fedora.config5
-rw-r--r--SOURCES/kernel-x86_64-debug-rhel.config3
-rw-r--r--SOURCES/kernel-x86_64-fedora.config5
-rw-r--r--SOURCES/kernel-x86_64-rhel.config3
-rw-r--r--SOURCES/kernel-x86_64-rt-debug-rhel.config3
-rw-r--r--SOURCES/kernel-x86_64-rt-rhel.config3
-rw-r--r--SOURCES/kernel.changelog6
-rw-r--r--SOURCES/patch-6.8-redhat.patch21
-rw-r--r--SOURCES/rog-ally-gyro-fix.patch276
-rw-r--r--SOURCES/steam-deck.patch84
-rw-r--r--SOURCES/steamdeck-oled-refresh-rate.patch (renamed from SOURCES/oled-deck-refresh-rate.patch)171
12 files changed, 410 insertions, 174 deletions
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 <acaringi@redhat.com> [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 <jforbes@fedoraproject.org> [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/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 <linux/delay.h>
- #include <linux/slab.h>
- #include <linux/acpi.h>
-+#include <linux/dmi.h>
- #include <linux/of_irq.h>
- #include <linux/pm.h>
- #include <linux/pm_runtime.h>
-@@ -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 <jlobue10@gmail.com>
+
+Adds a description of the duplicate ACPI identifier issue
+between devices using bmc150 and bmi323.
+
+Tested-by: Hans de Goede <hdegoede@redhat.com>
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
+Co-developed-by: Luke D. Jones <luke@ljones.dev>
+Signed-off-by: Luke D. Jones <luke@ljones.dev>
+Co-developed-by: Denis Benato <benato.denis96@gmail.com>
+Signed-off-by: Denis Benato <benato.denis96@gmail.com>
+Co-developed-by: Antheas Kapenekakis <lkml@antheas.dev>
+Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
+Signed-off-by: Jonathan LoBue <jlobue10@gmail.com>
+---
+ 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 <jlobue10@gmail.com>
+
+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 <hdegoede@redhat.com>
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
+Co-developed-by: Luke D. Jones <luke@ljones.dev>
+Signed-off-by: Luke D. Jones <luke@ljones.dev>
+Co-developed-by: Denis Benato <benato.denis96@gmail.com>
+Signed-off-by: Denis Benato <benato.denis96@gmail.com>
+Co-developed-by: Antheas Kapenekakis <lkml@antheas.dev>
+Signed-off-by: Antheas Kapenekakis <lkml@antheas.dev>
+Signed-off-by: Jonathan LoBue <jlobue10@gmail.com>
+---
+ 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 <jagathjog1996@gmail.com>
- */
-
-+#include <linux/acpi.h>
- #include <linux/i2c.h>
- #include <linux/mod_devicetable.h>
- #include <linux/module.h>
-@@ -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 <linux/cdev.h>
- #include <linux/debugfs.h>
+From: Jonathan LoBue <jlobue10@gmail.com>
+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 <linux/acpi.h>
+ #include <linux/bitfield.h>
+ #include <linux/cleanup.h>
#include <linux/device.h>
-+#include <linux/dmi.h>
- #include <linux/err.h>
- #include <linux/fs.h>
- #include <linux/idr.h>
-@@ -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 <linux/bitfield.h>
- #include <linux/cleanup.h>
- #include <linux/device.h>
-+#include <linux/dmi.h>
- #include <linux/interrupt.h>
- #include <linux/minmax.h>
- #include <linux/module.h>
@@ -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 <njtransit215@gmail.com> Mon Sep 17 00:00:00 2001
+From: Andrey Smirnov <andrew.smirnov@gmail.com>
+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 <andrew.smirnov@gmail.com>
+(cherry picked from commit c4ea057992e189ec8821cde3a65e2cc0529a5088)
+(cherry picked from commit e90fb9bec45c15c0c541ce60b994bab3922ddadf)
+Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
+---
+ 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/oled-deck-refresh-rate.patch b/SOURCES/steamdeck-oled-refresh-rate.patch
index d6643f9..9f82ab9 100644
--- a/SOURCES/oled-deck-refresh-rate.patch
+++ b/SOURCES/steamdeck-oled-refresh-rate.patch
@@ -1,5 +1,119 @@
+From 74b669e1b1296dfb2987a29840ddae29c2b31353 Mon Sep 17 00:00:00 2001
+From: Matthew Schwartz <njtransit215@gmail.com>
+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 <alexander.deucher@amd.com>
+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 <hamza.mahfooz@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ 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 <alexander.deucher@amd.com>
+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 <hamza.mahfooz@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ 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 9246bca0a0089b24cf315de75d9bee155c74d32d..9c62552bec344e370996a028d809934e4a6f4420 100644
+index 9246bca0a008..9c62552bec34 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -196,6 +196,7 @@
@@ -11,7 +125,7 @@ index 9246bca0a0089b24cf315de75d9bee155c74d32d..9c62552bec344e370996a028d809934e
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
+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;
@@ -55,55 +169,6 @@ index af7fae7907d71ed9efb771f50acdf483b4230113..8e1299fe2c54a809761301c15e8bcbe9
/**
* 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;
+--
+2.44.0