summaryrefslogtreecommitdiff
path: root/SOURCES/patch-6.2-redhat.patch
diff options
context:
space:
mode:
authorJan200101 <sentrycraft123@gmail.com>2023-04-10 13:25:49 +0200
committerJan200101 <sentrycraft123@gmail.com>2023-04-10 13:25:49 +0200
commit799a1c2b96f0d931ba44a839795c9cf31fdbce79 (patch)
tree35e110ae9ae75647129321cce8c549fb0668fda4 /SOURCES/patch-6.2-redhat.patch
parent4b0c9e6653550c9ca30435bdccae35736505d038 (diff)
downloadkernel-fsync-799a1c2b96f0d931ba44a839795c9cf31fdbce79.tar.gz
kernel-fsync-799a1c2b96f0d931ba44a839795c9cf31fdbce79.zip
kernel 6.2.10
Diffstat (limited to 'SOURCES/patch-6.2-redhat.patch')
-rw-r--r--SOURCES/patch-6.2-redhat.patch996
1 files changed, 745 insertions, 251 deletions
diff --git a/SOURCES/patch-6.2-redhat.patch b/SOURCES/patch-6.2-redhat.patch
index 0578914..c6546eb 100644
--- a/SOURCES/patch-6.2-redhat.patch
+++ b/SOURCES/patch-6.2-redhat.patch
@@ -1,6 +1,8 @@
+ .../bindings/display/panel/himax,hx8394.yaml | 76 +++
Makefile | 4 +
arch/arm/Kconfig | 4 +-
arch/arm64/Kconfig | 3 +-
+ .../boot/dts/rockchip/rk3399-pinephone-pro.dts | 114 +++++
arch/s390/include/asm/ipl.h | 1 +
arch/s390/kernel/ipl.c | 5 +
arch/s390/kernel/setup.c | 4 +
@@ -15,20 +17,16 @@
drivers/firmware/efi/efi.c | 124 +++--
drivers/firmware/efi/secureboot.c | 38 ++
drivers/firmware/sysfb.c | 18 +-
- drivers/gpu/drm/nouveau/nouveau_backlight.c | 7 +-
+ drivers/gpu/drm/panel/Kconfig | 12 +
+ drivers/gpu/drm/panel/Makefile | 1 +
+ drivers/gpu/drm/panel/panel-himax-hx8394.c | 451 ++++++++++++++++++
drivers/hid/hid-rmi.c | 66 ---
drivers/hwtracing/coresight/coresight-etm4x-core.c | 19 +
- drivers/input/mouse/alps.c | 16 +-
- drivers/input/mouse/focaltech.c | 8 +-
drivers/input/rmi4/rmi_driver.c | 124 +++--
drivers/iommu/iommu.c | 22 +
- drivers/net/wwan/iosm/iosm_ipc_imem.c | 7 +
drivers/pci/quirks.c | 24 +
drivers/usb/core/hub.c | 7 +
drivers/usb/host/xhci-pci.c | 7 +-
- drivers/usb/typec/ucsi/ucsi.c | 22 +-
- fs/btrfs/ioctl.c | 2 +
- fs/btrfs/qgroup.c | 11 +-
include/linux/efi.h | 22 +-
include/linux/lsm_hook_defs.h | 2 +
include/linux/lsm_hooks.h | 6 +
@@ -41,10 +39,92 @@
security/lockdown/Kconfig | 13 +
security/lockdown/lockdown.c | 1 +
security/security.c | 6 +
- 43 files changed, 1029 insertions(+), 208 deletions(-)
+ 41 files changed, 1637 insertions(+), 181 deletions(-)
+diff --git a/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml
+new file mode 100644
+index 000000000000..1b2a1baa26f9
+--- /dev/null
++++ b/Documentation/devicetree/bindings/display/panel/himax,hx8394.yaml
+@@ -0,0 +1,76 @@
++# SPDX-License-Identifier: (GPL-2.0-only or BSD-2-Clause)
++%YAML 1.2
++---
++$id: http://devicetree.org/schemas/display/panel/himax,hx8394.yaml#
++$schema: http://devicetree.org/meta-schemas/core.yaml#
++
++title: Himax HX8394 MIPI-DSI LCD panel controller
++
++maintainers:
++ - Ondrej Jirman <megi@xff.cz>
++ - Javier Martinez Canillas <javierm@redhat.com>
++
++description:
++ Device tree bindings for panels based on the Himax HX8394 controller,
++ such as the HannStar HSD060BHW4 720x1440 TFT LCD panel connected with
++ a MIPI-DSI video interface.
++
++allOf:
++ - $ref: panel-common.yaml#
++
++properties:
++ compatible:
++ items:
++ - enum:
++ - hannstar,hsd060bhw4
++ - const: himax,hx8394
++
++ reg: true
++
++ reset-gpios: true
++
++ backlight: true
++
++ port: true
++
++ vcc-supply:
++ description: Panel power supply
++
++ iovcc-supply:
++ description: I/O voltage supply
++
++required:
++ - compatible
++ - reg
++ - reset-gpios
++ - backlight
++ - port
++ - vcc-supply
++ - iovcc-supply
++
++additionalProperties: false
++
++examples:
++ - |
++ #include <dt-bindings/gpio/gpio.h>
++
++ dsi {
++ #address-cells = <1>;
++ #size-cells = <0>;
++ panel@0 {
++ compatible = "hannstar,hsd060bhw4", "himax,hx8394";
++ reg = <0>;
++ vcc-supply = <&reg_2v8_p>;
++ iovcc-supply = <&reg_1v8_p>;
++ reset-gpios = <&gpio3 13 GPIO_ACTIVE_LOW>;
++ backlight = <&backlight>;
++
++ port {
++ mipi_in_panel: endpoint {
++ remote-endpoint = <&mipi_out_panel>;
++ };
++ };
++ };
++ };
++
++...
diff --git a/Makefile b/Makefile
-index 8732f7208d59..2ef18d9eed77 100644
+index 6ec0ec452e46..40a89b4c3682 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,10 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
@@ -95,6 +175,170 @@ index ddfd35c86bda..2b69e42dff58 100644
default "12" if ARM64_16K_PAGES
default "11"
help
+diff --git a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
+index a0795a2b1cb1..475ba78acc09 100644
+--- a/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
++++ b/arch/arm64/boot/dts/rockchip/rk3399-pinephone-pro.dts
+@@ -29,6 +29,11 @@ chosen {
+ stdout-path = "serial2:115200n8";
+ };
+
++ backlight: backlight {
++ compatible = "pwm-backlight";
++ pwms = <&pwm0 0 50000 0>;
++ };
++
+ gpio-keys {
+ compatible = "gpio-keys";
+ pinctrl-names = "default";
+@@ -102,6 +107,30 @@ wifi_pwrseq: sdio-wifi-pwrseq {
+ /* WL_REG_ON on module */
+ reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
+ };
++
++ /* MIPI DSI panel 1.8v supply */
++ vcc1v8_lcd: vcc1v8-lcd {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ regulator-name = "vcc1v8_lcd";
++ regulator-min-microvolt = <1800000>;
++ regulator-max-microvolt = <1800000>;
++ vin-supply = <&vcc3v3_sys>;
++ gpio = <&gpio3 RK_PA5 GPIO_ACTIVE_HIGH>;
++ pinctrl-names = "default";
++ };
++
++ /* MIPI DSI panel 2.8v supply */
++ vcc2v8_lcd: vcc2v8-lcd {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ regulator-name = "vcc2v8_lcd";
++ regulator-min-microvolt = <2800000>;
++ regulator-max-microvolt = <2800000>;
++ vin-supply = <&vcc3v3_sys>;
++ gpio = <&gpio3 RK_PA1 GPIO_ACTIVE_HIGH>;
++ pinctrl-names = "default";
++ };
+ };
+
+ &cpu_alert0 {
+@@ -139,6 +168,11 @@ &emmc_phy {
+ status = "okay";
+ };
+
++&gpu {
++ mali-supply = <&vdd_gpu>;
++ status = "okay";
++};
++
+ &i2c0 {
+ clock-frequency = <400000>;
+ i2c-scl-rising-time-ns = <168>;
+@@ -333,6 +367,25 @@ regulator-state-mem {
+ };
+ };
+
++&i2c3 {
++ i2c-scl-rising-time-ns = <450>;
++ i2c-scl-falling-time-ns = <15>;
++ status = "okay";
++
++ touchscreen@14 {
++ compatible = "goodix,gt1158";
++ reg = <0x14>;
++ interrupt-parent = <&gpio3>;
++ interrupts = <RK_PB5 IRQ_TYPE_EDGE_RISING>;
++ irq-gpios = <&gpio3 RK_PB5 GPIO_ACTIVE_HIGH>;
++ reset-gpios = <&gpio3 RK_PB4 GPIO_ACTIVE_HIGH>;
++ AVDD28-supply = <&vcc3v0_touch>;
++ VDDIO-supply = <&vcc3v0_touch>;
++ touchscreen-size-x = <720>;
++ touchscreen-size-y = <1440>;
++ };
++};
++
+ &cluster0_opp {
+ opp04 {
+ status = "disabled";
+@@ -362,6 +415,39 @@ &io_domains {
+ status = "okay";
+ };
+
++&mipi_dsi {
++ status = "okay";
++ clock-master;
++
++ ports {
++ mipi_out: port@1 {
++ #address-cells = <0>;
++ #size-cells = <0>;
++ reg = <1>;
++
++ mipi_out_panel: endpoint {
++ remote-endpoint = <&mipi_in_panel>;
++ };
++ };
++ };
++
++ panel@0 {
++ compatible = "hannstar,hsd060bhw4";
++ reg = <0>;
++ backlight = <&backlight>;
++ reset-gpios = <&gpio4 RK_PD1 GPIO_ACTIVE_LOW>;
++ vcc-supply = <&vcc2v8_lcd>;
++ iovcc-supply = <&vcc1v8_lcd>;
++ pinctrl-names = "default";
++
++ port {
++ mipi_in_panel: endpoint {
++ remote-endpoint = <&mipi_out_panel>;
++ };
++ };
++ };
++};
++
+ &pmu_io_domains {
+ pmu1830-supply = <&vcc_1v8>;
+ status = "okay";
+@@ -429,6 +515,10 @@ &sdio0 {
+ status = "okay";
+ };
+
++&pwm0 {
++ status = "okay";
++};
++
+ &sdmmc {
+ bus-width = <4>;
+ cap-sd-highspeed;
+@@ -479,3 +569,27 @@ bluetooth {
+ &uart2 {
+ status = "okay";
+ };
++
++&vopb {
++ status = "okay";
++ assigned-clocks = <&cru DCLK_VOP0_DIV>, <&cru DCLK_VOP0>,
++ <&cru ACLK_VOP0>, <&cru HCLK_VOP0>;
++ assigned-clock-rates = <0>, <0>, <400000000>, <100000000>;
++ assigned-clock-parents = <&cru PLL_GPLL>, <&cru DCLK_VOP0_DIV>;
++};
++
++&vopb_mmu {
++ status = "okay";
++};
++
++&vopl {
++ status = "okay";
++ assigned-clocks = <&cru DCLK_VOP1_DIV>, <&cru DCLK_VOP1>,
++ <&cru ACLK_VOP1>, <&cru HCLK_VOP1>;
++ assigned-clock-rates = <0>, <0>, <400000000>, <100000000>;
++ assigned-clock-parents = <&cru PLL_GPLL>, <&cru DCLK_VOP1_DIV>;
++};
++
++&vopl_mmu {
++ status = "okay";
++};
diff --git a/arch/s390/include/asm/ipl.h b/arch/s390/include/asm/ipl.h
index b0d00032479d..afb9544fb007 100644
--- a/arch/s390/include/asm/ipl.h
@@ -598,32 +842,498 @@ index 3c197db42c9d..16e4a2e90fae 100644
pd = sysfb_create_simplefb(si, &mode);
if (!IS_ERR(pd))
goto unlock_mutex;
-diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c
-index 40409a29f5b6..91b5ecc57538 100644
---- a/drivers/gpu/drm/nouveau/nouveau_backlight.c
-+++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c
-@@ -33,6 +33,7 @@
- #include <linux/apple-gmux.h>
- #include <linux/backlight.h>
- #include <linux/idr.h>
-+#include <drm/drm_probe_helper.h>
-
- #include "nouveau_drv.h"
- #include "nouveau_reg.h"
-@@ -299,8 +300,12 @@ nv50_backlight_init(struct nouveau_backlight *bl,
- struct nouveau_drm *drm = nouveau_drm(nv_encoder->base.base.dev);
- struct nvif_object *device = &drm->client.device.object;
-
-+ /*
-+ * Note when this runs the connectors have not been probed yet,
-+ * so nv_conn->base.status is not set yet.
-+ */
- if (!nvif_rd32(device, NV50_PDISP_SOR_PWM_CTL(ffs(nv_encoder->dcb->or) - 1)) ||
-- nv_conn->base.status != connector_status_connected)
-+ drm_helper_probe_detect(&nv_conn->base, NULL, false) != connector_status_connected)
- return -ENODEV;
-
- if (nv_conn->type == DCB_CONNECTOR_eDP) {
+diff --git a/drivers/gpu/drm/panel/Kconfig b/drivers/gpu/drm/panel/Kconfig
+index 737edcdf9eef..7ee9c83f09a7 100644
+--- a/drivers/gpu/drm/panel/Kconfig
++++ b/drivers/gpu/drm/panel/Kconfig
+@@ -154,6 +154,18 @@ config DRM_PANEL_FEIYANG_FY07024DI26A30D
+ Say Y if you want to enable support for panels based on the
+ Feiyang FY07024DI26A30-D MIPI-DSI interface.
+
++config DRM_PANEL_HIMAX_HX8394
++ tristate "HIMAX HX8394 MIPI-DSI LCD panels"
++ depends on OF
++ depends on DRM_MIPI_DSI
++ depends on BACKLIGHT_CLASS_DEVICE
++ help
++ Say Y if you want to enable support for panels based on the
++ Himax HX8394 controller, such as the HannStar HSD060BHW4
++ 720x1440 TFT LCD panel that uses a MIPI-DSI interface.
++
++ If M is selected the module will be called panel-himax-hx8394.
++
+ config DRM_PANEL_ILITEK_IL9322
+ tristate "Ilitek ILI9322 320x240 QVGA panels"
+ depends on OF && SPI
+diff --git a/drivers/gpu/drm/panel/Makefile b/drivers/gpu/drm/panel/Makefile
+index f8f9d9f6a307..84c01adafd4c 100644
+--- a/drivers/gpu/drm/panel/Makefile
++++ b/drivers/gpu/drm/panel/Makefile
+@@ -13,6 +13,7 @@ obj-$(CONFIG_DRM_PANEL_EBBG_FT8719) += panel-ebbg-ft8719.o
+ obj-$(CONFIG_DRM_PANEL_ELIDA_KD35T133) += panel-elida-kd35t133.o
+ obj-$(CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02) += panel-feixin-k101-im2ba02.o
+ obj-$(CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D) += panel-feiyang-fy07024di26a30d.o
++obj-$(CONFIG_DRM_PANEL_HIMAX_HX8394) += panel-himax-hx8394.o
+ obj-$(CONFIG_DRM_PANEL_ILITEK_IL9322) += panel-ilitek-ili9322.o
+ obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9341) += panel-ilitek-ili9341.o
+ obj-$(CONFIG_DRM_PANEL_ILITEK_ILI9881C) += panel-ilitek-ili9881c.o
+diff --git a/drivers/gpu/drm/panel/panel-himax-hx8394.c b/drivers/gpu/drm/panel/panel-himax-hx8394.c
+new file mode 100644
+index 000000000000..d4fb5d1b295b
+--- /dev/null
++++ b/drivers/gpu/drm/panel/panel-himax-hx8394.c
+@@ -0,0 +1,451 @@
++// SPDX-License-Identifier: GPL-2.0
++/*
++ * Driver for panels based on Himax HX8394 controller, such as:
++ *
++ * - HannStar HSD060BHW4 5.99" MIPI-DSI panel
++ *
++ * Copyright (C) 2021 Kamil Trzciński
++ *
++ * Based on drivers/gpu/drm/panel/panel-sitronix-st7703.c
++ * Copyright (C) Purism SPC 2019
++ */
++
++#include <linux/delay.h>
++#include <linux/gpio/consumer.h>
++#include <linux/media-bus-format.h>
++#include <linux/mod_devicetable.h>
++#include <linux/module.h>
++#include <linux/of_device.h>
++#include <linux/regulator/consumer.h>
++
++#include <video/mipi_display.h>
++
++#include <drm/drm_mipi_dsi.h>
++#include <drm/drm_modes.h>
++#include <drm/drm_panel.h>
++
++#define DRV_NAME "panel-himax-hx8394"
++
++/* Manufacturer specific commands sent via DSI, listed in HX8394-F datasheet */
++#define HX8394_CMD_SETSEQUENCE 0xb0
++#define HX8394_CMD_SETPOWER 0xb1
++#define HX8394_CMD_SETDISP 0xb2
++#define HX8394_CMD_SETCYC 0xb4
++#define HX8394_CMD_SETVCOM 0xb6
++#define HX8394_CMD_SETTE 0xb7
++#define HX8394_CMD_SETSENSOR 0xb8
++#define HX8394_CMD_SETEXTC 0xb9
++#define HX8394_CMD_SETMIPI 0xba
++#define HX8394_CMD_SETOTP 0xbb
++#define HX8394_CMD_SETREGBANK 0xbd
++#define HX8394_CMD_UNKNOWN1 0xc0
++#define HX8394_CMD_SETDGCLUT 0xc1
++#define HX8394_CMD_SETID 0xc3
++#define HX8394_CMD_SETDDB 0xc4
++#define HX8394_CMD_UNKNOWN2 0xc6
++#define HX8394_CMD_SETCABC 0xc9
++#define HX8394_CMD_SETCABCGAIN 0xca
++#define HX8394_CMD_SETPANEL 0xcc
++#define HX8394_CMD_SETOFFSET 0xd2
++#define HX8394_CMD_SETGIP0 0xd3
++#define HX8394_CMD_UNKNOWN3 0xd4
++#define HX8394_CMD_SETGIP1 0xd5
++#define HX8394_CMD_SETGIP2 0xd6
++#define HX8394_CMD_SETGPO 0xd6
++#define HX8394_CMD_SETSCALING 0xdd
++#define HX8394_CMD_SETIDLE 0xdf
++#define HX8394_CMD_SETGAMMA 0xe0
++#define HX8394_CMD_SETCHEMODE_DYN 0xe4
++#define HX8394_CMD_SETCHE 0xe5
++#define HX8394_CMD_SETCESEL 0xe6
++#define HX8394_CMD_SET_SP_CMD 0xe9
++#define HX8394_CMD_SETREADINDEX 0xfe
++#define HX8394_CMD_GETSPIREAD 0xff
++
++struct hx8394 {
++ struct device *dev;
++ struct drm_panel panel;
++ struct gpio_desc *reset_gpio;
++ struct regulator *vcc;
++ struct regulator *iovcc;
++ bool prepared;
++
++ const struct hx8394_panel_desc *desc;
++};
++
++struct hx8394_panel_desc {
++ const struct drm_display_mode *mode;
++ unsigned int lanes;
++ unsigned long mode_flags;
++ enum mipi_dsi_pixel_format format;
++ int (*init_sequence)(struct hx8394 *ctx);
++};
++
++static inline struct hx8394 *panel_to_hx8394(struct drm_panel *panel)
++{
++ return container_of(panel, struct hx8394, panel);
++}
++
++static int hsd060bhw4_init_sequence(struct hx8394 *ctx)
++{
++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
++
++ /* 5.19.8 SETEXTC: Set extension command (B9h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETEXTC,
++ 0xff, 0x83, 0x94);
++
++ /* 5.19.2 SETPOWER: Set power (B1h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
++ 0x48, 0x11, 0x71, 0x09, 0x32, 0x24, 0x71, 0x31, 0x55, 0x30);
++
++ /* 5.19.9 SETMIPI: Set MIPI control (BAh) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETMIPI,
++ 0x63, 0x03, 0x68, 0x6b, 0xb2, 0xc0);
++
++ /* 5.19.3 SETDISP: Set display related register (B2h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETDISP,
++ 0x00, 0x80, 0x78, 0x0c, 0x07);
++
++ /* 5.19.4 SETCYC: Set display waveform cycles (B4h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETCYC,
++ 0x12, 0x63, 0x12, 0x63, 0x12, 0x63, 0x01, 0x0c, 0x7c, 0x55,
++ 0x00, 0x3f, 0x12, 0x6b, 0x12, 0x6b, 0x12, 0x6b, 0x01, 0x0c,
++ 0x7c);
++
++ /* 5.19.19 SETGIP0: Set GIP Option0 (D3h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP0,
++ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x1c, 0x00, 0x00, 0x32, 0x10,
++ 0x09, 0x00, 0x09, 0x32, 0x15, 0xad, 0x05, 0xad, 0x32, 0x00,
++ 0x00, 0x00, 0x00, 0x37, 0x03, 0x0b, 0x0b, 0x37, 0x00, 0x00,
++ 0x00, 0x0c, 0x40);
++
++ /* 5.19.20 Set GIP Option1 (D5h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP1,
++ 0x19, 0x19, 0x18, 0x18, 0x1b, 0x1b, 0x1a, 0x1a, 0x00, 0x01,
++ 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x20, 0x21, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x24, 0x25, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18);
++
++ /* 5.19.21 Set GIP Option2 (D6h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGIP2,
++ 0x18, 0x18, 0x19, 0x19, 0x1b, 0x1b, 0x1a, 0x1a, 0x07, 0x06,
++ 0x05, 0x04, 0x03, 0x02, 0x01, 0x00, 0x25, 0x24, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x21, 0x20, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
++ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18);
++
++ /* 5.19.25 SETGAMMA: Set gamma curve related setting (E0h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETGAMMA,
++ 0x00, 0x04, 0x0c, 0x12, 0x14, 0x18, 0x1a, 0x18, 0x31, 0x3f,
++ 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f, 0x82, 0x7e, 0x8a,
++ 0x99, 0x4a, 0x48, 0x49, 0x4b, 0x4a, 0x4c, 0x4b, 0x7f, 0x00,
++ 0x04, 0x0c, 0x11, 0x13, 0x17, 0x1a, 0x18, 0x31,
++ 0x3f, 0x4d, 0x4c, 0x54, 0x65, 0x6b, 0x70, 0x7f,
++ 0x82, 0x7e, 0x8a, 0x99, 0x4a, 0x48, 0x49, 0x4b,
++ 0x4a, 0x4c, 0x4b, 0x7f);
++
++ /* 5.19.17 SETPANEL (CCh) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPANEL,
++ 0x0b);
++
++ /* Unknown command, not listed in the HX8394-F datasheet */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN1,
++ 0x1f, 0x31);
++
++ /* 5.19.5 SETVCOM: Set VCOM voltage (B6h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETVCOM,
++ 0x7d, 0x7d);
++
++ /* Unknown command, not listed in the HX8394-F datasheet */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3,
++ 0x02);
++
++ /* 5.19.11 Set register bank (BDh) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
++ 0x01);
++
++ /* 5.19.2 SETPOWER: Set power (B1h) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETPOWER,
++ 0x00);
++
++ /* 5.19.11 Set register bank (BDh) */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_SETREGBANK,
++ 0x00);
++
++ /* Unknown command, not listed in the HX8394-F datasheet */
++ mipi_dsi_dcs_write_seq(dsi, HX8394_CMD_UNKNOWN3,
++ 0xed);
++
++ return 0;
++}
++
++static const struct drm_display_mode hsd060bhw4_mode = {
++ .hdisplay = 720,
++ .hsync_start = 720 + 40,
++ .hsync_end = 720 + 40 + 46,
++ .htotal = 720 + 40 + 46 + 40,
++ .vdisplay = 1440,
++ .vsync_start = 1440 + 9,
++ .vsync_end = 1440 + 9 + 7,
++ .vtotal = 1440 + 9 + 7 + 7,
++ .clock = 74250,
++ .flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC,
++ .width_mm = 68,
++ .height_mm = 136,
++};
++
++static const struct hx8394_panel_desc hsd060bhw4_desc = {
++ .mode = &hsd060bhw4_mode,
++ .lanes = 4,
++ .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_VIDEO_BURST,
++ .format = MIPI_DSI_FMT_RGB888,
++ .init_sequence = hsd060bhw4_init_sequence,
++};
++
++static int hx8394_enable(struct drm_panel *panel)
++{
++ struct hx8394 *ctx = panel_to_hx8394(panel);
++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
++ int ret;
++
++ ret = ctx->desc->init_sequence(ctx);
++ if (ret) {
++ dev_err(ctx->dev, "Panel init sequence failed: %d\n", ret);
++ return ret;
++ }
++
++ ret = mipi_dsi_dcs_exit_sleep_mode(dsi);
++ if (ret) {
++ dev_err(ctx->dev, "Failed to exit sleep mode: %d\n", ret);
++ return ret;
++ }
++
++ /* Panel is operational 120 msec after reset */
++ msleep(120);
++
++ ret = mipi_dsi_dcs_set_display_on(dsi);
++ if (ret) {
++ dev_err(ctx->dev, "Failed to turn on the display: %d\n", ret);
++ goto sleep_in;
++ }
++
++ return 0;
++
++sleep_in:
++ /* This will probably fail, but let's try orderly power off anyway. */
++ ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
++ if (!ret)
++ msleep(50);
++
++ return ret;
++}
++
++static int hx8394_disable(struct drm_panel *panel)
++{
++ struct hx8394 *ctx = panel_to_hx8394(panel);
++ struct mipi_dsi_device *dsi = to_mipi_dsi_device(ctx->dev);
++ int ret;
++
++ ret = mipi_dsi_dcs_enter_sleep_mode(dsi);
++ if (ret) {
++ dev_err(ctx->dev, "Failed to enter sleep mode: %d\n", ret);
++ return ret;
++ }
++
++ msleep(50); /* about 3 frames */
++
++ return 0;
++}
++
++static int hx8394_unprepare(struct drm_panel *panel)
++{
++ struct hx8394 *ctx = panel_to_hx8394(panel);
++
++ if (!ctx->prepared)
++ return 0;
++
++ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
++
++ regulator_disable(ctx->iovcc);
++ regulator_disable(ctx->vcc);
++
++ ctx->prepared = false;
++
++ return 0;
++}
++
++static int hx8394_prepare(struct drm_panel *panel)
++{
++ struct hx8394 *ctx = panel_to_hx8394(panel);
++ int ret;
++
++ if (ctx->prepared)
++ return 0;
++
++ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
++
++ ret = regulator_enable(ctx->vcc);
++ if (ret) {
++ dev_err(ctx->dev, "Failed to enable vcc supply: %d\n", ret);
++ return ret;
++ }
++
++ ret = regulator_enable(ctx->iovcc);
++ if (ret) {
++ dev_err(ctx->dev, "Failed to enable iovcc supply: %d\n", ret);
++ goto disable_vcc;
++ }
++
++ gpiod_set_value_cansleep(ctx->reset_gpio, 0);
++
++ msleep(180);
++
++ ctx->prepared = true;
++
++ return 0;
++
++disable_vcc:
++ gpiod_set_value_cansleep(ctx->reset_gpio, 1);
++ regulator_disable(ctx->vcc);
++ return ret;
++}
++
++static int hx8394_get_modes(struct drm_panel *panel,
++ struct drm_connector *connector)
++{
++ struct hx8394 *ctx = panel_to_hx8394(panel);
++ struct drm_display_mode *mode;
++
++ mode = drm_mode_duplicate(connector->dev, ctx->desc->mode);
++ if (!mode) {
++ dev_err(ctx->dev, "Failed to add mode %ux%u@%u\n",
++ ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay,
++ drm_mode_vrefresh(ctx->desc->mode));
++ return -ENOMEM;
++ }
++
++ drm_mode_set_name(mode);
++
++ mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
++ connector->display_info.width_mm = mode->width_mm;
++ connector->display_info.height_mm = mode->height_mm;
++ drm_mode_probed_add(connector, mode);
++
++ return 1;
++}
++
++static const struct drm_panel_funcs hx8394_drm_funcs = {
++ .disable = hx8394_disable,
++ .unprepare = hx8394_unprepare,
++ .prepare = hx8394_prepare,
++ .enable = hx8394_enable,
++ .get_modes = hx8394_get_modes,
++};
++
++static int hx8394_probe(struct mipi_dsi_device *dsi)
++{
++ struct device *dev = &dsi->dev;
++ struct hx8394 *ctx;
++ int ret;
++
++ ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
++ if (!ctx)
++ return -ENOMEM;
++
++ ctx->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
++ if (IS_ERR(ctx->reset_gpio))
++ return dev_err_probe(dev, PTR_ERR(ctx->reset_gpio),
++ "Failed to get reset gpio\n");
++
++ mipi_dsi_set_drvdata(dsi, ctx);
++
++ ctx->dev = dev;
++ ctx->desc = of_device_get_match_data(dev);
++
++ dsi->mode_flags = ctx->desc->mode_flags;
++ dsi->format = ctx->desc->format;
++ dsi->lanes = ctx->desc->lanes;
++
++ ctx->vcc = devm_regulator_get(dev, "vcc");
++ if (IS_ERR(ctx->vcc))
++ return dev_err_probe(dev, PTR_ERR(ctx->vcc),
++ "Failed to request vcc regulator\n");
++
++ ctx->iovcc = devm_regulator_get(dev, "iovcc");
++ if (IS_ERR(ctx->iovcc))
++ return dev_err_probe(dev, PTR_ERR(ctx->iovcc),
++ "Failed to request iovcc regulator\n");
++
++ drm_panel_init(&ctx->panel, dev, &hx8394_drm_funcs,
++ DRM_MODE_CONNECTOR_DSI);
++
++ ret = drm_panel_of_backlight(&ctx->panel);
++ if (ret)
++ return ret;
++
++ drm_panel_add(&ctx->panel);
++
++ ret = mipi_dsi_attach(dsi);
++ if (ret < 0) {
++ dev_err_probe(dev, ret, "mipi_dsi_attach failed\n");
++ drm_panel_remove(&ctx->panel);
++ return ret;
++ }
++
++ dev_dbg(dev, "%ux%u@%u %ubpp dsi %udl - ready\n",
++ ctx->desc->mode->hdisplay, ctx->desc->mode->vdisplay,
++ drm_mode_vrefresh(ctx->desc->mode),
++ mipi_dsi_pixel_format_to_bpp(dsi->format), dsi->lanes);
++
++ return 0;
++}
++
++static void hx8394_shutdown(struct mipi_dsi_device *dsi)
++{
++ struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi);
++ int ret;
++
++ ret = drm_panel_disable(&ctx->panel);
++ if (ret < 0)
++ dev_err(&dsi->dev, "Failed to disable panel: %d\n", ret);
++
++ ret = drm_panel_unprepare(&ctx->panel);
++ if (ret < 0)
++ dev_err(&dsi->dev, "Failed to unprepare panel: %d\n", ret);
++}
++
++static void hx8394_remove(struct mipi_dsi_device *dsi)
++{
++ struct hx8394 *ctx = mipi_dsi_get_drvdata(dsi);
++ int ret;
++
++ hx8394_shutdown(dsi);
++
++ ret = mipi_dsi_detach(dsi);
++ if (ret < 0)
++ dev_err(&dsi->dev, "Failed to detach from DSI host: %d\n", ret);
++
++ drm_panel_remove(&ctx->panel);
++}
++
++static const struct of_device_id hx8394_of_match[] = {
++ { .compatible = "hannstar,hsd060bhw4", .data = &hsd060bhw4_desc },
++ { /* sentinel */ }
++};
++MODULE_DEVICE_TABLE(of, hx8394_of_match);
++
++static struct mipi_dsi_driver hx8394_driver = {
++ .probe = hx8394_probe,
++ .remove = hx8394_remove,
++ .shutdown = hx8394_shutdown,
++ .driver = {
++ .name = DRV_NAME,
++ .of_match_table = hx8394_of_match,
++ },
++};
++module_mipi_dsi_driver(hx8394_driver);
++
++MODULE_AUTHOR("Kamil Trzciński <ayufan@ayufan.eu>");
++MODULE_DESCRIPTION("DRM driver for Himax HX8394 based MIPI DSI panels");
++MODULE_LICENSE("GPL");
diff --git a/drivers/hid/hid-rmi.c b/drivers/hid/hid-rmi.c
index 84e7ba5314d3..efc96776f761 100644
--- a/drivers/hid/hid-rmi.c
@@ -777,83 +1487,6 @@ index 77bca6932f01..27f5455aef6c 100644
amba_driver_unregister(&etm4x_amba_driver);
platform_driver_unregister(&etm4_platform_driver);
etm4_pm_clear();
-diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
-index 989228b5a0a4..e2c11d9f3868 100644
---- a/drivers/input/mouse/alps.c
-+++ b/drivers/input/mouse/alps.c
-@@ -852,8 +852,8 @@ static void alps_process_packet_v6(struct psmouse *psmouse)
- x = y = z = 0;
-
- /* Divide 4 since trackpoint's speed is too fast */
-- input_report_rel(dev2, REL_X, (char)x / 4);
-- input_report_rel(dev2, REL_Y, -((char)y / 4));
-+ input_report_rel(dev2, REL_X, (s8)x / 4);
-+ input_report_rel(dev2, REL_Y, -((s8)y / 4));
-
- psmouse_report_standard_buttons(dev2, packet[3]);
-
-@@ -1104,8 +1104,8 @@ static void alps_process_trackstick_packet_v7(struct psmouse *psmouse)
- ((packet[3] & 0x20) << 1);
- z = (packet[5] & 0x3f) | ((packet[3] & 0x80) >> 1);
-
-- input_report_rel(dev2, REL_X, (char)x);
-- input_report_rel(dev2, REL_Y, -((char)y));
-+ input_report_rel(dev2, REL_X, (s8)x);
-+ input_report_rel(dev2, REL_Y, -((s8)y));
- input_report_abs(dev2, ABS_PRESSURE, z);
-
- psmouse_report_standard_buttons(dev2, packet[1]);
-@@ -2294,20 +2294,20 @@ static int alps_get_v3_v7_resolution(struct psmouse *psmouse, int reg_pitch)
- if (reg < 0)
- return reg;
-
-- x_pitch = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */
-+ x_pitch = (s8)(reg << 4) >> 4; /* sign extend lower 4 bits */
- x_pitch = 50 + 2 * x_pitch; /* In 0.1 mm units */
-
-- y_pitch = (char)reg >> 4; /* sign extend upper 4 bits */
-+ y_pitch = (s8)reg >> 4; /* sign extend upper 4 bits */
- y_pitch = 36 + 2 * y_pitch; /* In 0.1 mm units */
-
- reg = alps_command_mode_read_reg(psmouse, reg_pitch + 1);
- if (reg < 0)
- return reg;
-
-- x_electrode = (char)(reg << 4) >> 4; /* sign extend lower 4 bits */
-+ x_electrode = (s8)(reg << 4) >> 4; /* sign extend lower 4 bits */
- x_electrode = 17 + x_electrode;
-
-- y_electrode = (char)reg >> 4; /* sign extend upper 4 bits */
-+ y_electrode = (s8)reg >> 4; /* sign extend upper 4 bits */
- y_electrode = 13 + y_electrode;
-
- x_phys = x_pitch * (x_electrode - 1); /* In 0.1 mm units */
-diff --git a/drivers/input/mouse/focaltech.c b/drivers/input/mouse/focaltech.c
-index 6fd5fff0cbff..c74b99077d16 100644
---- a/drivers/input/mouse/focaltech.c
-+++ b/drivers/input/mouse/focaltech.c
-@@ -202,8 +202,8 @@ static void focaltech_process_rel_packet(struct psmouse *psmouse,
- state->pressed = packet[0] >> 7;
- finger1 = ((packet[0] >> 4) & 0x7) - 1;
- if (finger1 < FOC_MAX_FINGERS) {
-- state->fingers[finger1].x += (char)packet[1];
-- state->fingers[finger1].y += (char)packet[2];
-+ state->fingers[finger1].x += (s8)packet[1];
-+ state->fingers[finger1].y += (s8)packet[2];
- } else {
- psmouse_err(psmouse, "First finger in rel packet invalid: %d\n",
- finger1);
-@@ -218,8 +218,8 @@ static void focaltech_process_rel_packet(struct psmouse *psmouse,
- */
- finger2 = ((packet[3] >> 4) & 0x7) - 1;
- if (finger2 < FOC_MAX_FINGERS) {
-- state->fingers[finger2].x += (char)packet[4];
-- state->fingers[finger2].y += (char)packet[5];
-+ state->fingers[finger2].x += (s8)packet[4];
-+ state->fingers[finger2].y += (s8)packet[5];
- }
- }
-
diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c
index 258d5fe3d395..f7298e3dc8f3 100644
--- a/drivers/input/rmi4/rmi_driver.c
@@ -1086,24 +1719,6 @@ index f8100067502f..e0823c45e2fa 100644
/*
* Changes the default domain of an iommu group that has *only* one device
*
-diff --git a/drivers/net/wwan/iosm/iosm_ipc_imem.c b/drivers/net/wwan/iosm/iosm_ipc_imem.c
-index 1e6a47976642..c066b0040a3f 100644
---- a/drivers/net/wwan/iosm/iosm_ipc_imem.c
-+++ b/drivers/net/wwan/iosm/iosm_ipc_imem.c
-@@ -587,6 +587,13 @@ static void ipc_imem_run_state_worker(struct work_struct *instance)
- while (ctrl_chl_idx < IPC_MEM_MAX_CHANNELS) {
- if (!ipc_chnl_cfg_get(&chnl_cfg_port, ctrl_chl_idx)) {
- ipc_imem->ipc_port[ctrl_chl_idx] = NULL;
-+
-+ if (ipc_imem->pcie->pci->device == INTEL_CP_DEVICE_7560_ID &&
-+ chnl_cfg_port.wwan_port_type == WWAN_PORT_XMMRPC) {
-+ ctrl_chl_idx++;
-+ continue;
-+ }
-+
- if (ipc_imem->pcie->pci->device == INTEL_CP_DEVICE_7360_ID &&
- chnl_cfg_port.wwan_port_type == WWAN_PORT_MBIM) {
- ctrl_chl_idx++;
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 494fa46f5767..27bc8dd45ad8 100644
--- a/drivers/pci/quirks.c
@@ -1177,127 +1792,6 @@ index fb988e4ea924..6db07ca419c3 100644
};
static int __init xhci_pci_init(void)
-diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
-index 8cbbb002fefe..086b50968983 100644
---- a/drivers/usb/typec/ucsi/ucsi.c
-+++ b/drivers/usb/typec/ucsi/ucsi.c
-@@ -1039,9 +1039,8 @@ static struct fwnode_handle *ucsi_find_fwnode(struct ucsi_connector *con)
- return NULL;
- }
-
--static int ucsi_register_port(struct ucsi *ucsi, int index)
-+static int ucsi_register_port(struct ucsi *ucsi, struct ucsi_connector *con)
- {
-- struct ucsi_connector *con = &ucsi->connector[index];
- struct typec_capability *cap = &con->typec_cap;
- enum typec_accessory *accessory = cap->accessory;
- enum usb_role u_role = USB_ROLE_NONE;
-@@ -1062,7 +1061,6 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
- init_completion(&con->complete);
- mutex_init(&con->lock);
- INIT_LIST_HEAD(&con->partner_tasks);
-- con->num = index + 1;
- con->ucsi = ucsi;
-
- cap->fwnode = ucsi_find_fwnode(con);
-@@ -1204,7 +1202,7 @@ static int ucsi_register_port(struct ucsi *ucsi, int index)
- */
- static int ucsi_init(struct ucsi *ucsi)
- {
-- struct ucsi_connector *con;
-+ struct ucsi_connector *con, *connector;
- u64 command, ntfy;
- int ret;
- int i;
-@@ -1235,16 +1233,16 @@ static int ucsi_init(struct ucsi *ucsi)
- }
-
- /* Allocate the connectors. Released in ucsi_unregister() */
-- ucsi->connector = kcalloc(ucsi->cap.num_connectors + 1,
-- sizeof(*ucsi->connector), GFP_KERNEL);
-- if (!ucsi->connector) {
-+ connector = kcalloc(ucsi->cap.num_connectors + 1, sizeof(*connector), GFP_KERNEL);
-+ if (!connector) {
- ret = -ENOMEM;
- goto err_reset;
- }
-
- /* Register all connectors */
- for (i = 0; i < ucsi->cap.num_connectors; i++) {
-- ret = ucsi_register_port(ucsi, i);
-+ connector[i].num = i + 1;
-+ ret = ucsi_register_port(ucsi, &connector[i]);
- if (ret)
- goto err_unregister;
- }
-@@ -1256,11 +1254,12 @@ static int ucsi_init(struct ucsi *ucsi)
- if (ret < 0)
- goto err_unregister;
-
-+ ucsi->connector = connector;
- ucsi->ntfy = ntfy;
- return 0;
-
- err_unregister:
-- for (con = ucsi->connector; con->port; con++) {
-+ for (con = connector; con->port; con++) {
- ucsi_unregister_partner(con);
- ucsi_unregister_altmodes(con, UCSI_RECIPIENT_CON);
- ucsi_unregister_port_psy(con);
-@@ -1269,10 +1268,7 @@ static int ucsi_init(struct ucsi *ucsi)
- typec_unregister_port(con->port);
- con->port = NULL;
- }
--
-- kfree(ucsi->connector);
-- ucsi->connector = NULL;
--
-+ kfree(connector);
- err_reset:
- memset(&ucsi->cap, 0, sizeof(ucsi->cap));
- ucsi_reset_ppm(ucsi);
-diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
-index 7e348bd2ccde..c232636ecdfe 100644
---- a/fs/btrfs/ioctl.c
-+++ b/fs/btrfs/ioctl.c
-@@ -3731,7 +3731,9 @@ static long btrfs_ioctl_qgroup_assign(struct file *file, void __user *arg)
- }
-
- /* update qgroup status and info */
-+ mutex_lock(&fs_info->qgroup_ioctl_lock);
- err = btrfs_run_qgroups(trans);
-+ mutex_unlock(&fs_info->qgroup_ioctl_lock);
- if (err < 0)
- btrfs_handle_fs_error(fs_info, err,
- "failed to update qgroup status and info");
-diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
-index af97413abcf4..abf2b7f14307 100644
---- a/fs/btrfs/qgroup.c
-+++ b/fs/btrfs/qgroup.c
-@@ -2828,13 +2828,22 @@ int btrfs_qgroup_account_extents(struct btrfs_trans_handle *trans)
- }
-
- /*
-- * called from commit_transaction. Writes all changed qgroups to disk.
-+ * Writes all changed qgroups to disk.
-+ * Called by the transaction commit path and the qgroup assign ioctl.
- */
- int btrfs_run_qgroups(struct btrfs_trans_handle *trans)
- {
- struct btrfs_fs_info *fs_info = trans->fs_info;
- int ret = 0;
-
-+ /*
-+ * In case we are called from the qgroup assign ioctl, assert that we
-+ * are holding the qgroup_ioctl_lock, otherwise we can race with a quota
-+ * disable operation (ioctl) and access a freed quota root.
-+ */
-+ if (trans->transaction->state != TRANS_STATE_COMMIT_DOING)
-+ lockdep_assert_held(&fs_info->qgroup_ioctl_lock);
-+
- if (!fs_info->quota_root)
- return ret;
-
diff --git a/include/linux/efi.h b/include/linux/efi.h
index ac22f7ca195a..e680835ad387 100644
--- a/include/linux/efi.h