aboutsummaryrefslogtreecommitdiff
path: root/SOURCES/patch-6.11-redhat.patch
diff options
context:
space:
mode:
Diffstat (limited to 'SOURCES/patch-6.11-redhat.patch')
-rw-r--r--SOURCES/patch-6.11-redhat.patch233
1 files changed, 185 insertions, 48 deletions
diff --git a/SOURCES/patch-6.11-redhat.patch b/SOURCES/patch-6.11-redhat.patch
index 60f889c..e702390 100644
--- a/SOURCES/patch-6.11-redhat.patch
+++ b/SOURCES/patch-6.11-redhat.patch
@@ -24,12 +24,13 @@
drivers/firmware/efi/Makefile | 1 +
drivers/firmware/efi/efi.c | 124 ++++++---
drivers/firmware/efi/secureboot.c | 38 +++
+ drivers/hid/amd-sfh-hid/amd_sfh_client.c | 14 +-
+ drivers/hid/hid-lenovo.c | 8 +
drivers/hid/hid-rmi.c | 66 -----
drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 ++
drivers/input/rmi4/rmi_driver.c | 124 +++++----
drivers/iommu/iommu.c | 22 ++
- drivers/media/platform/qcom/camss/camss-video.c | 6 -
- drivers/media/platform/qcom/camss/camss.c | 5 +-
+ drivers/net/wireless/realtek/rtw89/pci.c | 48 +++-
drivers/pci/quirks.c | 24 ++
drivers/scsi/sd.c | 10 +
drivers/usb/core/hub.c | 7 +
@@ -45,10 +46,10 @@
security/lockdown/Kconfig | 13 +
security/lockdown/lockdown.c | 1 +
security/security.c | 12 +
- 47 files changed, 974 insertions(+), 241 deletions(-)
+ 48 files changed, 1023 insertions(+), 251 deletions(-)
diff --git a/Makefile b/Makefile
-index 7bcf0c32ea5e..f2c0bc57ebaa 100644
+index 108d314ea95b..3d8560f9b0f6 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
@@ -126,10 +127,10 @@ index 84c08b46519d..c281697142b1 100644
reg = <0x40000000 0x100>;
interrupt-controller;
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
-index c8cba20a4d11..40a1665236ab 100644
+index 89b331575ed4..1934eeb89804 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
-@@ -1365,7 +1365,7 @@ endchoice
+@@ -1366,7 +1366,7 @@ endchoice
config ARM64_FORCE_52BIT
bool "Force 52-bit virtual addresses for userspace"
@@ -1260,6 +1261,105 @@ index 000000000000..de0a3714a5d4
+ }
+ }
+}
+diff --git a/drivers/hid/amd-sfh-hid/amd_sfh_client.c b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
+index 4b59687ff5d8..3438d392920f 100644
+--- a/drivers/hid/amd-sfh-hid/amd_sfh_client.c
++++ b/drivers/hid/amd-sfh-hid/amd_sfh_client.c
+@@ -236,9 +236,9 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
+ cl_data->in_data = in_data;
+
+ for (i = 0; i < cl_data->num_hid_devices; i++) {
+- in_data->sensor_virt_addr[i] = dma_alloc_coherent(dev, sizeof(int) * 8,
+- &cl_data->sensor_dma_addr[i],
+- GFP_KERNEL);
++ in_data->sensor_virt_addr[i] = dmam_alloc_coherent(dev, sizeof(int) * 8,
++ &cl_data->sensor_dma_addr[i],
++ GFP_KERNEL);
+ if (!in_data->sensor_virt_addr[i]) {
+ rc = -ENOMEM;
+ goto cleanup;
+@@ -331,7 +331,6 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
+ int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
+ {
+ struct amdtp_cl_data *cl_data = privdata->cl_data;
+- struct amd_input_data *in_data = cl_data->in_data;
+ int i, status;
+
+ for (i = 0; i < cl_data->num_hid_devices; i++) {
+@@ -351,12 +350,5 @@ int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
+ cancel_delayed_work_sync(&cl_data->work_buffer);
+ amdtp_hid_remove(cl_data);
+
+- for (i = 0; i < cl_data->num_hid_devices; i++) {
+- if (in_data->sensor_virt_addr[i]) {
+- dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int),
+- in_data->sensor_virt_addr[i],
+- cl_data->sensor_dma_addr[i]);
+- }
+- }
+ return 0;
+ }
+diff --git a/drivers/hid/hid-lenovo.c b/drivers/hid/hid-lenovo.c
+index e5e72aa5260a..24654c7ecb04 100644
+--- a/drivers/hid/hid-lenovo.c
++++ b/drivers/hid/hid-lenovo.c
+@@ -473,6 +473,7 @@ static int lenovo_input_mapping(struct hid_device *hdev,
+ return lenovo_input_mapping_tp10_ultrabook_kbd(hdev, hi, field,
+ usage, bit, max);
+ case USB_DEVICE_ID_LENOVO_X1_TAB:
++ case USB_DEVICE_ID_LENOVO_X1_TAB3:
+ return lenovo_input_mapping_x1_tab_kbd(hdev, hi, field, usage, bit, max);
+ default:
+ return 0;
+@@ -583,6 +584,7 @@ static ssize_t attr_fn_lock_store(struct device *dev,
+ break;
+ case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+ case USB_DEVICE_ID_LENOVO_X1_TAB:
++ case USB_DEVICE_ID_LENOVO_X1_TAB3:
+ ret = lenovo_led_set_tp10ubkbd(hdev, TP10UBKBD_FN_LOCK_LED, value);
+ if (ret)
+ return ret;
+@@ -776,6 +778,7 @@ static int lenovo_event(struct hid_device *hdev, struct hid_field *field,
+ return lenovo_event_cptkbd(hdev, field, usage, value);
+ case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+ case USB_DEVICE_ID_LENOVO_X1_TAB:
++ case USB_DEVICE_ID_LENOVO_X1_TAB3:
+ return lenovo_event_tp10ubkbd(hdev, field, usage, value);
+ default:
+ return 0;
+@@ -1056,6 +1059,7 @@ static int lenovo_led_brightness_set(struct led_classdev *led_cdev,
+ break;
+ case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+ case USB_DEVICE_ID_LENOVO_X1_TAB:
++ case USB_DEVICE_ID_LENOVO_X1_TAB3:
+ ret = lenovo_led_set_tp10ubkbd(hdev, tp10ubkbd_led[led_nr], value);
+ break;
+ }
+@@ -1286,6 +1290,7 @@ static int lenovo_probe(struct hid_device *hdev,
+ break;
+ case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+ case USB_DEVICE_ID_LENOVO_X1_TAB:
++ case USB_DEVICE_ID_LENOVO_X1_TAB3:
+ ret = lenovo_probe_tp10ubkbd(hdev);
+ break;
+ default:
+@@ -1372,6 +1377,7 @@ static void lenovo_remove(struct hid_device *hdev)
+ break;
+ case USB_DEVICE_ID_LENOVO_TP10UBKBD:
+ case USB_DEVICE_ID_LENOVO_X1_TAB:
++ case USB_DEVICE_ID_LENOVO_X1_TAB3:
+ lenovo_remove_tp10ubkbd(hdev);
+ break;
+ }
+@@ -1421,6 +1427,8 @@ static const struct hid_device_id lenovo_devices[] = {
+ */
+ { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
+ USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB) },
++ { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
++ USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_X1_TAB3) },
+ { }
+ };
+
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
index d4af17fdba46..154f0403cbf4 100644
--- a/drivers/hid/hid-rmi.c
@@ -1645,53 +1745,90 @@ index ed6c5cb60c5a..70cb770b78bb 100644
/**
* iommu_setup_default_domain - Set the default_domain for the group
* @group: Group to change
-diff --git a/drivers/media/platform/qcom/camss/camss-video.c b/drivers/media/platform/qcom/camss/camss-video.c
-index cd72feca618c..3b8fc31d957c 100644
---- a/drivers/media/platform/qcom/camss/camss-video.c
-+++ b/drivers/media/platform/qcom/camss/camss-video.c
-@@ -297,12 +297,6 @@ static void video_stop_streaming(struct vb2_queue *q)
-
- ret = v4l2_subdev_call(subdev, video, s_stream, 0);
-
-- if (entity->use_count > 1) {
-- /* Don't stop if other instances of the pipeline are still running */
-- dev_dbg(video->camss->dev, "Video pipeline still used, don't stop streaming.\n");
-- return;
-- }
+diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
+index 02afeb3acce4..5aef7fa37878 100644
+--- a/drivers/net/wireless/realtek/rtw89/pci.c
++++ b/drivers/net/wireless/realtek/rtw89/pci.c
+@@ -3026,24 +3026,54 @@ static void rtw89_pci_declaim_device(struct rtw89_dev *rtwdev,
+ pci_disable_device(pdev);
+ }
+
+-static void rtw89_pci_cfg_dac(struct rtw89_dev *rtwdev)
++static bool rtw89_pci_chip_is_manual_dac(struct rtw89_dev *rtwdev)
+ {
+- struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
+ const struct rtw89_chip_info *chip = rtwdev->chip;
+
+- if (!rtwpci->enable_dac)
+- return;
-
- if (ret) {
- dev_err(video->camss->dev, "Video pipeline stop failed: %d\n", ret);
- return;
-diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c
-index 51b1d3550421..d64985ca6e88 100644
---- a/drivers/media/platform/qcom/camss/camss.c
-+++ b/drivers/media/platform/qcom/camss/camss.c
-@@ -2283,6 +2283,8 @@ static int camss_probe(struct platform_device *pdev)
-
- v4l2_async_nf_init(&camss->notifier, &camss->v4l2_dev);
-
-+ pm_runtime_enable(dev);
-+
- num_subdevs = camss_of_parse_ports(camss);
- if (num_subdevs < 0) {
- ret = num_subdevs;
-@@ -2323,8 +2325,6 @@ static int camss_probe(struct platform_device *pdev)
- }
+ switch (chip->chip_id) {
+ case RTL8852A:
+ case RTL8852B:
+ case RTL8851B:
+ case RTL8852BT:
+- break;
++ return true;
+ default:
+- return;
++ return false;
++ }
++}
++
++static bool rtw89_pci_is_dac_compatible_bridge(struct rtw89_dev *rtwdev)
++{
++ struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
++ struct pci_dev *bridge = pci_upstream_bridge(rtwpci->pdev);
++
++ if (!rtw89_pci_chip_is_manual_dac(rtwdev))
++ return true;
++
++ if (!bridge)
++ return false;
++
++ switch (bridge->vendor) {
++ case PCI_VENDOR_ID_INTEL:
++ return true;
++ case PCI_VENDOR_ID_ASMEDIA:
++ if (bridge->device == 0x2806)
++ return true;
++ break;
}
-- pm_runtime_enable(dev);
--
- return 0;
++ return false;
++}
++
++static void rtw89_pci_cfg_dac(struct rtw89_dev *rtwdev)
++{
++ struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
++
++ if (!rtwpci->enable_dac)
++ return;
++
++ if (!rtw89_pci_chip_is_manual_dac(rtwdev))
++ return;
++
+ rtw89_pci_config_byte_set(rtwdev, RTW89_PCIE_L1_CTRL, RTW89_PCIE_BIT_EN_64BITS);
+ }
- err_register_subdevs:
-@@ -2332,6 +2332,7 @@ static int camss_probe(struct platform_device *pdev)
- err_v4l2_device_unregister:
- v4l2_device_unregister(&camss->v4l2_dev);
- v4l2_async_nf_cleanup(&camss->notifier);
-+ pm_runtime_disable(dev);
- err_genpd_cleanup:
- camss_genpd_cleanup(camss);
+@@ -3061,6 +3091,9 @@ static int rtw89_pci_setup_mapping(struct rtw89_dev *rtwdev,
+ goto err;
+ }
+
++ if (!rtw89_pci_is_dac_compatible_bridge(rtwdev))
++ goto no_dac;
++
+ ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(36));
+ if (!ret) {
+ rtwpci->enable_dac = true;
+@@ -3073,6 +3106,7 @@ static int rtw89_pci_setup_mapping(struct rtw89_dev *rtwdev,
+ goto err_release_regions;
+ }
+ }
++no_dac:
+ resource_len = pci_resource_len(pdev, bar_id);
+ rtwpci->mmap = pci_iomap(pdev, bar_id, resource_len);
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 5d57ea27dbc4..304afc09fc11 100644
--- a/drivers/pci/quirks.c