Merge tag 'char-misc-5.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregk...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Mar 2022 19:27:35 +0000 (12:27 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Mar 2022 19:27:35 +0000 (12:27 -0700)
Pull char/misc and other driver updates from Greg KH:
 "Here is the big set of char/misc and other small driver subsystem
  updates for 5.18-rc1.

  Included in here are merges from driver subsystems which contain:

   - iio driver updates and new drivers

   - fsi driver updates

   - fpga driver updates

   - habanalabs driver updates and support for new hardware

   - soundwire driver updates and new drivers

   - phy driver updates and new drivers

   - coresight driver updates

   - icc driver updates

  Individual changes include:

   - mei driver updates

   - interconnect driver updates

   - new PECI driver subsystem added

   - vmci driver updates

   - lots of tiny misc/char driver updates

  All of these have been in linux-next for a while with no reported
  problems"

* tag 'char-misc-5.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (556 commits)
  firmware: google: Properly state IOMEM dependency
  kgdbts: fix return value of __setup handler
  firmware: sysfb: fix platform-device leak in error path
  firmware: stratix10-svc: add missing callback parameter on RSU
  arm64: dts: qcom: add non-secure domain property to fastrpc nodes
  misc: fastrpc: Add dma handle implementation
  misc: fastrpc: Add fdlist implementation
  misc: fastrpc: Add helper function to get list and page
  misc: fastrpc: Add support to secure memory map
  dt-bindings: misc: add fastrpc domain vmid property
  misc: fastrpc: check before loading process to the DSP
  misc: fastrpc: add secure domain support
  dt-bindings: misc: add property to support non-secure DSP
  misc: fastrpc: Add support to get DSP capabilities
  misc: fastrpc: add support for FASTRPC_IOCTL_MEM_MAP/UNMAP
  misc: fastrpc: separate fastrpc device from channel context
  dt-bindings: nvmem: brcm,nvram: add basic NVMEM cells
  dt-bindings: nvmem: make "reg" property optional
  nvmem: brcm_nvram: parse NVRAM content into NVMEM cells
  nvmem: dt-bindings: Fix the error of dt-bindings check
  ...

43 files changed:
1  2 
.mailmap
Documentation/devicetree/bindings/phy/qcom,usb-hs-phy.yaml
Documentation/devicetree/bindings/trivial-devices.yaml
Documentation/devicetree/bindings/vendor-prefixes.yaml
Documentation/hwmon/index.rst
MAINTAINERS
arch/arm64/Kconfig
arch/arm64/boot/dts/qcom/msm8916.dtsi
arch/arm64/boot/dts/qcom/sdm845.dtsi
arch/arm64/boot/dts/qcom/sm8150.dtsi
arch/arm64/boot/dts/qcom/sm8250.dtsi
arch/arm64/boot/dts/qcom/sm8350.dtsi
drivers/ata/ahci.h
drivers/ata/ahci_mvebu.c
drivers/ata/libahci_platform.c
drivers/char/virtio_console.c
drivers/firmware/sysfb_simplefb.c
drivers/firmware/xilinx/zynqmp.c
drivers/gpio/Kconfig
drivers/gpio/Makefile
drivers/hwmon/Kconfig
drivers/hwmon/Makefile
drivers/iio/accel/bma400_spi.c
drivers/iio/accel/bmc150-accel-spi.c
drivers/iio/accel/bmi088-accel-spi.c
drivers/iio/accel/kxsd9-spi.c
drivers/iio/accel/mma7455_spi.c
drivers/iio/common/ssp_sensors/ssp_dev.c
drivers/iio/dac/ad5592r.c
drivers/iio/dac/ad5686-spi.c
drivers/iio/frequency/adf4350.c
drivers/iio/magnetometer/bmc150_magn_spi.c
drivers/iio/magnetometer/hmc5843_spi.c
drivers/iio/pressure/ms5611_spi.c
drivers/iio/pressure/zpa2326_spi.c
drivers/misc/fastrpc.c
drivers/misc/habanalabs/include/common/cpucp_if.h
drivers/mmc/host/rtsx_pci_sdmmc.c
drivers/mtd/mtdcore.c
drivers/pci/controller/pci-aardvark.c
drivers/phy/freescale/Kconfig
drivers/usb/host/xhci-plat.c
include/linux/firmware/xlnx-zynqmp.h

diff --combined .mailmap
+++ b/.mailmap
@@@ -71,6 -71,7 +71,7 @@@ Boris Brezillon <bbrezillon@kernel.org
  Brian Avery <b.avery@hp.com>
  Brian King <brking@us.ibm.com>
  Brian Silverman <bsilver16384@gmail.com> <brian.silverman@bluerivertech.com>
+ Cai Huoqing <cai.huoqing@linux.dev> <caihuoqing@baidu.com>
  Changbin Du <changbin.du@intel.com> <changbin.du@gmail.com>
  Changbin Du <changbin.du@intel.com> <changbin.du@intel.com>
  Chao Yu <chao@kernel.org> <chao2.yu@samsung.com>
@@@ -187,8 -188,6 +188,8 @@@ Jiri Slaby <jirislaby@kernel.org> <jsla
  Jiri Slaby <jirislaby@kernel.org> <jslaby@suse.com>
  Jiri Slaby <jirislaby@kernel.org> <jslaby@suse.cz>
  Jiri Slaby <jirislaby@kernel.org> <xslaby@fi.muni.cz>
 +Jisheng Zhang <jszhang@kernel.org> <jszhang@marvell.com>
 +Jisheng Zhang <jszhang@kernel.org> <Jisheng.Zhang@synaptics.com>
  Johan Hovold <johan@kernel.org> <jhovold@gmail.com>
  Johan Hovold <johan@kernel.org> <johan@hovoldconsulting.com>
  John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
@@@ -218,7 -217,6 +219,7 @@@ Koushik <raghavendra.koushik@neterion.c
  Krishna Manikandan <quic_mkrishn@quicinc.com> <mkrishn@codeaurora.org>
  Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski.k@gmail.com>
  Krzysztof Kozlowski <krzk@kernel.org> <k.kozlowski@samsung.com>
 +Krzysztof Kozlowski <krzk@kernel.org> <krzysztof.kozlowski@canonical.com>
  Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
  Kuogee Hsieh <quic_khsieh@quicinc.com> <khsieh@codeaurora.org>
  Leonardo Bras <leobras.c@gmail.com> <leonardo@linux.ibm.com>
index 0000000,a60386b..e23e559
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,108 +1,109 @@@
+ # SPDX-License-Identifier: GPL-2.0-only
+ %YAML 1.2
+ ---
+ $id: http://devicetree.org/schemas/phy/qcom,usb-hs-phy.yaml#
+ $schema: http://devicetree.org/meta-schemas/core.yaml#
+ title: Qualcomm's USB HS PHY binding description
+ maintainers:
+   - Bjorn Andersson <bjorn.andersson@linaro.org>
+ if:
+   properties:
+     compatible:
+       contains:
+         const: qcom,usb-hs-phy-apq8064
+   then:
+     properties:
+       resets:
+         maxItems: 1
+       reset-names:
+         const: por
+   else:
+     properties:
+       resets:
+         minItems: 2
+         maxItems: 2
+       reset-names:
+         items:
+           - const: phy
+           - const: por
+ properties:
+   compatible:
+     items:
+       - enum:
+           - qcom,usb-hs-phy-apq8064
++          - qcom,usb-hs-phy-msm8226
+           - qcom,usb-hs-phy-msm8916
+           - qcom,usb-hs-phy-msm8974
+       - const: qcom,usb-hs-phy
+   clocks:
+     minItems: 2
+     maxItems: 2
+   clock-names:
+     maxItems: 2
+     contains:
+       items:
+         - const: ref
+         - const: sleep
+   resets: true
+   reset-names: true
+   v1p8-supply: true
+   v3p3-supply: true
+   extcon: true
+   "#phy-cells":
+     const: 0
+   qcom,init-seq:
+     $ref: /schemas/types.yaml#/definitions/uint8-matrix
+     description: >
+       Sequence of ULPI address and value pairs to
+       program into the ULPI_EXT_VENDOR_SPECIFIC area.
+       This is related to Device Mode Eye Diagram test.
+     maxItems: 32 # no hard limit
+     items:
+       items:
+         - description: >
+             the address is offset from the ULPI_EXT_VENDOR_SPECIFIC address
+         - description: value
+ required:
+   - clocks
+   - clock-names
+   - resets
+   - reset-names
+   - "#phy-cells"
+ additionalProperties: false
+ examples:
+   - |
+     otg: usb-controller {
+       ulpi {
+         phy {
+           compatible = "qcom,usb-hs-phy-msm8974", "qcom,usb-hs-phy";
+           #phy-cells = <0>;
+           clocks = <&clk 0>, <&clk 258>;
+           clock-names = "ref", "sleep";
+           resets = <&gcc 10>, <&otg 0>;
+           reset-names = "phy", "por";
+           v3p3-supply = <&pm8941_l24>;
+           v1p8-supply = <&pm8941_l6>;
+           extcon = <&smbb>;
+           qcom,init-seq = /bits/ 8 <0x1 0x63>;
+         };
+       };
+     };
@@@ -77,7 -77,7 +77,7 @@@ properties
            - delta,ahe50dc-fan
              # Delta Electronics DPS-650-AB power supply
            - delta,dps650ab
 -          # Delta Electronics DPS920AB 920W 54V Power Supply
 +            # Delta Electronics DPS920AB 920W 54V Power Supply
            - delta,dps920ab
              # 1/4 Brick DC/DC Regulated Power Module
            - delta,q54sj108a2
            - ibm,cffps2
              # Infineon IR36021 digital POL buck controller
            - infineon,ir36021
 -          # Infineon IR38060 Voltage Regulator
 +            # Infineon IR38060 Voltage Regulator
            - infineon,ir38060
              # Infineon IR38064 Voltage Regulator
            - infineon,ir38064
 -          # Infineon IR38164 Voltage Regulator
 +            # Infineon IR38164 Voltage Regulator
            - infineon,ir38164
 -          # Infineon IR38263 Voltage Regulator
 +            # Infineon IR38263 Voltage Regulator
            - infineon,ir38263
              # Infineon SLB9635 (Soft-) I2C TPM (old protocol, max 100khz)
            - infineon,slb9635tt
            - infineon,slb9645tt
              # Infineon TLV493D-A1B6 I2C 3D Magnetic Sensor
            - infineon,tlv493d-a1b6
 +            # Infineon Multi-phase Digital VR Controller xdpe11280
 +          - infineon,xdpe11280
              # Infineon Multi-phase Digital VR Controller xdpe12254
            - infineon,xdpe12254
              # Infineon Multi-phase Digital VR Controller xdpe12284
            - infineon,xdpe12284
 +            # Injoinic IP5108 2.0A Power Bank IC with I2C
 +          - injoinic,ip5108
 +            # Injoinic IP5109 2.1A Power Bank IC with I2C
 +          - injoinic,ip5109
 +            # Injoinic IP5207 1.2A Power Bank IC with I2C
 +          - injoinic,ip5207
 +            # Injoinic IP5209 2.4A Power Bank IC with I2C
 +          - injoinic,ip5209
              # Inspur Power System power supply unit version 1
            - inspur,ipsps1
              # Intersil ISL29028 Ambient Light and Proximity Sensor
            - maxim,ds1803-050
              # 100 kOhm digital potentiometer with I2C interface
            - maxim,ds1803-100
+             # 10 kOhm digital potentiometer with I2C interface
+           - maxim,ds3502
              # Low-Power, 4-/12-Channel, 2-Wire Serial, 12-Bit ADCs
            - maxim,max1237
              # Temperature Sensor, I2C interface
            - renesas,isl29501
              # S524AD0XF1 (128K/256K-bit Serial EEPROM for Low Power)
            - samsung,24ad0xd1
+             # Samsung Exynos SoC SATA PHY I2C device
+           - samsung,exynos-sataphy-i2c
              # Sensirion low power multi-pixel gas sensor with I2C interface
            - sensirion,sgpc3
              # Sensirion multi-pixel gas sensor with I2C interface
              # Thermometer with SPI interface
            - ti,tmp121
            - ti,tmp122
 +          - ti,tmp125
              # Digital Temperature Sensor
            - ti,tmp275
              # TI DC-DC converter on PMBus
            - ti,tps544c25
              # Winbond/Nuvoton H/W Monitor
            - winbond,w83793
 +            # Vicor Corporation Digital Supervisor
 +          - vicor,pli1209bc
              # i2c trusted platform module (TPM)
            - winbond,wpct301
  
@@@ -23,8 -23,6 +23,8 @@@ patternProperties
    "^(simple-audio-card|st-plgpio|st-spics|ts),.*": true
  
    # Keep list in alphabetical order.
 +  "^100ask,.*":
 +    description: Baiwen.com (100ask).
    "^70mai,.*":
      description: 70mai Co., Ltd.
    "^8dev,.*":
@@@ -63,8 -61,6 +63,8 @@@
      description: Aeroflex Gaisler AB
    "^aesop,.*":
      description: AESOP Embedded Forum
 +  "^airoha,.*":
 +    description: Airoha
    "^al,.*":
      description: Annapurna Labs
    "^alcatel,.*":
      description: Hangzhou C-SKY Microsystems Co., Ltd
    "^csq,.*":
      description: Shenzen Chuangsiqi Technology Co.,Ltd.
 +  "^ctera,.*":
 +    description: CTERA Networks Intl.
    "^cubietech,.*":
      description: Cubietech, Ltd.
    "^cui,.*":
      description: CUI Devices
    "^cypress,.*":
      description: Cypress Semiconductor Corporation
 +  "^cyx,.*":
 +    description: Shenzhen CYX Industrial Co., Ltd
    "^cznic,.*":
      description: CZ.NIC, z.s.p.o.
    "^dallas,.*":
      deprecated: true
    "^hannstar,.*":
      description: HannStar Display Corporation
 +  "^haochuangyi,.*":
 +    description: Shenzhen Haochuangyi Technology Co.,Ltd
    "^haoyu,.*":
      description: Haoyu Microelectronic Co. Ltd.
    "^hardkernel,.*":
      description: Himax Technologies, Inc.
    "^hirschmann,.*":
      description: Hirschmann Automation and Control GmbH
 +  "^hisi,.*":
 +    description: HiSilicon Limited (deprecated, use hisilicon)
 +    deprecated: true
    "^hisilicon,.*":
      description: HiSilicon Limited.
    "^hit,.*":
    "^hoperun,.*":
      description: Jiangsu HopeRun Software Co., Ltd.
    "^hp,.*":
 -    description: Hewlett Packard
 +    description: Hewlett Packard Inc.
 +  "^hpe,.*":
 +    description: Hewlett Packard Enterprise
    "^hsg,.*":
      description: HannStar Display Co.
    "^holtek,.*":
      description: InfoVision Optoelectronics Kunshan Co. Ltd.
    "^ingenic,.*":
      description: Ingenic Semiconductor
 +  "^injoinic,.*":
 +    description: Injoinic Technology Corp.
    "^innolux,.*":
      description: Innolux Corporation
    "^inside-secure,.*":
      description: MiraMEMS Sensing Technology Co., Ltd.
    "^mitsubishi,.*":
      description: Mitsubishi Electric Corporation
 +  "^miyoo,.*":
 +    description: Miyoo
    "^mntre,.*":
      description: MNT Research GmbH
    "^modtronix,.*":
      description: Mundo Reader S.L.
    "^murata,.*":
      description: Murata Manufacturing Co., Ltd.
 +  "^mxic,.*":
 +    description: Macronix International Co., Ltd.
 +    deprecated: true
    "^mxicy,.*":
      description: Macronix International Co., Ltd.
    "^myir,.*":
      description: NXP Semiconductors
    "^oceanic,.*":
      description: Oceanic Systems (UK) Ltd.
 +  "^ocs,.*":
 +    description: Orient Chip Technology Co., Ltd.
    "^oct,.*":
      description: Octavo Systems LLC
    "^okaya,.*":
      description: Ortus Technology Co., Ltd.
    "^osddisplays,.*":
      description: OSD Displays
 +  "^osmc,.*":
 +    description: Sam Nazarko Trading Ltd. (Open Source Media Centre)
    "^ouya,.*":
      description: Ouya Inc.
    "^overkiz,.*":
      description: Silicon Image
    "^silabs,.*":
      description: Silicon Laboratories
+   "^silan,.*":
+     description: Hangzhou Silan Microelectronics Co., Ltd.
    "^silead,.*":
      description: Silead Inc.
    "^silergy,.*":
      description: Synaptics Inc.
    "^synology,.*":
      description: Synology, Inc.
 +  "^synopsys,.*":
 +    description: Synopsys, Inc. (deprecated, use snps)
 +    deprecated: true
    "^tbs,.*":
      description: TBS Technologies
    "^tbs-biometrics,.*":
      description: Shenzhen Techstar Electronics Co., Ltd.
    "^terasic,.*":
      description: Terasic Inc.
 +  "^tesla,.*":
 +    description: Tesla, Inc.
    "^tfc,.*":
      description: Three Five Corp
    "^thead,.*":
      description: Vertexcom Technologies, Inc.
    "^via,.*":
      description: VIA Technologies, Inc.
 +  "^vicor,.*":
 +    description: Vicor Corporation
    "^videostrong,.*":
      description: Videostrong Technology Co., Ltd.
    "^virtio,.*":
      description: Wi2Wi, Inc.
    "^wiligear,.*":
      description: Wiligear, Ltd.
 +  "^willsemi,.*":
 +    description: Will Semiconductor Ltd.
    "^winbond,.*":
      description: Winbond Electronics corp.
    "^wingtech,.*":
      description: WinLink Co., Ltd
    "^winstar,.*":
      description: Winstar Display Corp.
 +  "^wirelesstag,.*":
 +    description: Wireless Tag (qiming yunduan)
    "^wits,.*":
      description: Shenzhen Merrii Technology Co., Ltd. (WITS)
    "^wlf,.*":
      description: Wanchanglong Electronics Technology(SHENZHEN)Co.,Ltd.
    "^x-powers,.*":
      description: X-Powers
 +  "^xen,.*":
 +    description: Xen Hypervisor
    "^xes,.*":
      description: Extreme Engineering Solutions (X-ES)
    "^xiaomi,.*":
@@@ -43,7 -43,6 +43,7 @@@ Hardware Monitoring Kernel Driver
     asb100
     asc7621
     aspeed-pwm-tacho
 +   asus_ec_sensors
     asus_wmi_ec_sensors
     asus_wmi_sensors
     bcm54140
     pc87427
     pcf8591
     pim4328
 +   pli1209bc
     pm6764tr
+    peci-cputemp
+    peci-dimmtemp
     pmbus
     powr1220
     pxe1610
     smsc47m1
     sparx5-temp
     stpddc60
 +   sy7636a-hwmon
     tc654
     tc74
     thmc50
     tmp108
     tmp401
     tmp421
 +   tmp464
     tmp513
     tps23861
     tps40422
diff --combined MAINTAINERS
@@@ -389,11 -389,11 +389,11 @@@ L:      linux-arm-kernel@lists.infradead.or
  S:    Maintained
  F:    drivers/acpi/arm64
  
 -ACPI I2C MULTI INSTANTIATE DRIVER
 +ACPI SERIAL MULTI INSTANTIATE DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 -F:    drivers/platform/x86/i2c-multi-instantiate.c
 +F:    drivers/platform/x86/serial-multi-instantiate.c
  
  ACPI PCC(Platform Communication Channel) MAILBOX DRIVER
  M:    Sudeep Holla <sudeep.holla@arm.com>
@@@ -461,35 -461,35 +461,35 @@@ AD525X ANALOG DEVICES DIGITAL POTENTIOM
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/AD5254
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/misc/ad525x_dpot.c
  
  AD5398 CURRENT REGULATOR DRIVER (AD5398/AD5821)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/AD5398
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/regulator/ad5398.c
  
  AD714X CAPACITANCE TOUCH SENSOR DRIVER (AD7142/3/7/8/7A)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/AD7142
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/input/misc/ad714x.c
  
  AD7877 TOUCHSCREEN DRIVER
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/AD7877
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/input/touchscreen/ad7877.c
  
  AD7879 TOUCHSCREEN DRIVER (AD7879/AD7889)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/AD7879
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/input/touchscreen/ad7879.c
  
  ADDRESS SPACE LAYOUT RANDOMIZATION (ASLR)
@@@ -501,7 -501,7 +501,7 @@@ M: Michael Hennerich <michael.hennerich
  L:    linux-wpan@vger.kernel.org
  S:    Supported
  W:    https://wiki.analog.com/ADF7242
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/net/ieee802154/adf7242.txt
  F:    drivers/net/ieee802154/adf7242.c
  
@@@ -535,7 -535,7 +535,7 @@@ ADP5520 BACKLIGHT DRIVER WITH IO EXPAND
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/ADP5520
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/gpio/gpio-adp5520.c
  F:    drivers/input/keyboard/adp5520-keys.c
  F:    drivers/leds/leds-adp5520.c
@@@ -546,7 -546,7 +546,7 @@@ ADP5588 QWERTY KEYPAD AND IO EXPANDER D
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/ADP5588
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/gpio/gpio-adp5588.c
  F:    drivers/input/keyboard/adp5588-keys.c
  
@@@ -554,7 -554,7 +554,7 @@@ ADP8860 BACKLIGHT DRIVER (ADP8860/ADP88
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/ADP8860
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/video/backlight/adp8860_bl.c
  
  ADT746X FAN DRIVER
@@@ -593,7 -593,7 +593,7 @@@ ADXL34X THREE-AXIS DIGITAL ACCELEROMETE
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/ADXL345
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/accel/adi,adxl345.yaml
  F:    drivers/input/misc/adxl34x.c
  
@@@ -607,10 -607,18 +607,18 @@@ F:      drivers/iio/accel/adxl355_core.
  F:    drivers/iio/accel/adxl355_i2c.c
  F:    drivers/iio/accel/adxl355_spi.c
  
+ ADXL367 THREE-AXIS DIGITAL ACCELEROMETER DRIVER
+ M:    Cosmin Tanislav <cosmin.tanislav@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    http://ez.analog.com/community/linux-device-drivers
+ F:    Documentation/devicetree/bindings/iio/accel/adi,adxl367.yaml
+ F:    drivers/iio/accel/adxl367*
  ADXL372 THREE-AXIS DIGITAL ACCELEROMETER DRIVER
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/accel/adi,adxl372.yaml
  F:    drivers/iio/accel/adxl372.c
  F:    drivers/iio/accel/adxl372_i2c.c
@@@ -989,16 -997,6 +997,16 @@@ L:       platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/amd-pmc.*
  
 +AMD HSMP DRIVER
 +M:    Naveen Krishna Chatradhi <naveenkrishna.chatradhi@amd.com>
 +R:    Carlos Bilbao <carlos.bilbao@amd.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/x86/amd_hsmp.rst
 +F:    arch/x86/include/asm/amd_hsmp.h
 +F:    arch/x86/include/uapi/asm/amd_hsmp.h
 +F:    drivers/platform/x86/amd_hsmp.c
 +
  AMD POWERPLAY AND SWSMU
  M:    Evan Quan <evan.quan@amd.com>
  L:    amd-gfx@lists.freedesktop.org
@@@ -1012,7 -1010,6 +1020,7 @@@ L:      linux-pm@vger.kernel.or
  S:    Supported
  F:    Documentation/admin-guide/pm/amd-pstate.rst
  F:    drivers/cpufreq/amd-pstate*
 +F:    tools/power/x86/amd_pstate_tracer/amd_pstate_trace.py
  
  AMD PTDMA DRIVER
  M:    Sanjay R Mehta <sanju.mehta@amd.com>
@@@ -1042,15 -1039,6 +1050,15 @@@ S:    Maintaine
  F:    Documentation/hid/amd-sfh*
  F:    drivers/hid/amd-sfh-hid/
  
 +AMPHION VPU CODEC V4L2 DRIVER
 +M:    Ming Qian <ming.qian@nxp.com>
 +M:    Shijie Qin <shijie.qin@nxp.com>
 +M:    Zhou Peng <eagle.zhou@nxp.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/amphion,vpu.yaml
 +F:    drivers/media/platform/amphion/
 +
  AMS AS73211 DRIVER
  M:    Christian Eggers <ceggers@arri.de>
  L:    linux-iio@vger.kernel.org
@@@ -1070,7 -1058,7 +1078,7 @@@ ANALOG DEVICES INC AD7192 DRIVE
  M:    Alexandru Tachici <alexandru.tachici@analog.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/adc/adi,ad7192.yaml
  F:    drivers/iio/adc/ad7192.c
  
@@@ -1078,15 -1066,23 +1086,23 @@@ ANALOG DEVICES INC AD7292 DRIVE
  M:    Marcelo Schmitt <marcelo.schmitt1@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/adc/adi,ad7292.yaml
  F:    drivers/iio/adc/ad7292.c
  
+ ANALOG DEVICES INC AD7293 DRIVER
+ M:    Antoniu Miclaus <antoniu.miclaus@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    https://ez.analog.com/linux-software-drivers
+ F:    Documentation/devicetree/bindings/iio/dac/adi,ad7293.yaml
+ F:    drivers/iio/dac/ad7293.c
  ANALOG DEVICES INC AD7768-1 DRIVER
  M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/adc/adi,ad7768-1.yaml
  F:    drivers/iio/adc/ad7768-1.c
  
@@@ -1095,7 -1091,7 +1111,7 @@@ M:      Michael Hennerich <Michael.Hennerich
  M:    Renato Lui Geh <renatogeh@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/adc/adi,ad7780.yaml
  F:    drivers/iio/adc/ad7780.c
  
@@@ -1114,6 -1110,14 +1130,14 @@@ L:    linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/i2c/ad9389b*
  
+ ANALOG DEVICES INC ADA4250 DRIVER
+ M:    Antoniu Miclaus <antoniu.miclaus@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    https://ez.analog.com/linux-software-drivers
+ F:    Documentation/devicetree/bindings/iio/amplifiers/adi,ada4250.yaml
+ F:    drivers/iio/amplifiers/ada4250.c
  ANALOG DEVICES INC ADGS1408 DRIVER
  M:    Mircea Caprioru <mircea.caprioru@analog.com>
  S:    Supported
@@@ -1124,7 -1128,7 +1148,7 @@@ ANALOG DEVICES INC ADIN DRIVE
  M:    Michael Hennerich <michael.hennerich@analog.com>
  L:    netdev@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/net/adi,adin.yaml
  F:    drivers/net/phy/adin.c
  
@@@ -1133,20 -1137,22 +1157,22 @@@ M:   Nuno Sa <nuno.sa@analog.com
  L:    linux-iio@vger.kernel.org
  S:    Supported
  F:    drivers/iio/imu/adis.c
+ F:    drivers/iio/imu/adis_buffer.c
+ F:    drivers/iio/imu/adis_trigger.c
  F:    include/linux/iio/imu/adis.h
  
  ANALOG DEVICES INC ADIS16460 DRIVER
  M:    Dragos Bogdan <dragos.bogdan@analog.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/imu/adi,adis16460.yaml
  F:    drivers/iio/imu/adis16460.c
  
  ANALOG DEVICES INC ADIS16475 DRIVER
  M:    Nuno Sa <nuno.sa@analog.com>
  L:    linux-iio@vger.kernel.org
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  S:    Supported
  F:    drivers/iio/imu/adis16475.c
  F:    Documentation/devicetree/bindings/iio/imu/adi,adis16475.yaml
@@@ -1155,22 -1161,54 +1181,54 @@@ ANALOG DEVICES INC ADM1177 DRIVE
  M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/hwmon/adi,adm1177.yaml
  F:    drivers/hwmon/adm1177.c
  
+ ANALOG DEVICES INC ADMV1013 DRIVER
+ M:    Antoniu Miclaus <antoniu.miclaus@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    https://ez.analog.com/linux-software-drivers
+ F:    Documentation/devicetree/bindings/iio/frequency/adi,admv1013.yaml
+ F:    drivers/iio/frequency/admv1013.c
+ ANALOG DEVICES INC ADMV8818 DRIVER
+ M:    Antoniu Miclaus <antoniu.miclaus@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    https://ez.analog.com/linux-software-drivers
+ F:    Documentation/devicetree/bindings/iio/filter/adi,admv8818.yaml
+ F:    drivers/iio/filter/admv8818.c
+ ANALOG DEVICES INC ADMV1014 DRIVER
+ M:    Antoniu Miclaus <antoniu.miclaus@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    https://ez.analog.com/linux-software-drivers
+ F:    Documentation/devicetree/bindings/iio/frequency/adi,admv1014.yaml
+ F:    drivers/iio/frequency/admv1014.c
  ANALOG DEVICES INC ADP5061 DRIVER
  M:    Michael Hennerich <Michael.Hennerich@analog.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/power/supply/adp5061.c
  
+ ANALOG DEVICES INC ADRF6780 DRIVER
+ M:    Antoniu Miclaus <antoniu.miclaus@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    https://ez.analog.com/linux-software-drivers
+ F:    Documentation/devicetree/bindings/iio/frequency/adi,adrf6780.yaml
+ F:    drivers/iio/frequency/adrf6780.c
  ANALOG DEVICES INC ADV7180 DRIVER
  M:    Lars-Peter Clausen <lars@metafoo.de>
  L:    linux-media@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/media/i2c/adv7180.c
  F:    Documentation/devicetree/bindings/media/i2c/adv7180.yaml
  
@@@ -1213,7 -1251,7 +1271,7 @@@ M:      Nuno Sá <nuno.sa@analog.com
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
  W:    http://wiki.analog.com/
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    sound/soc/codecs/ad1*
  F:    sound/soc/codecs/ad7*
  F:    sound/soc/codecs/adau*
@@@ -1224,7 -1262,7 +1282,7 @@@ F:      sound/soc/codecs/ssm
  ANALOG DEVICES INC DMA DRIVERS
  M:    Lars-Peter Clausen <lars@metafoo.de>
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    drivers/dma/dma-axi-dmac.c
  
  ANALOG DEVICES INC IIO DRIVERS
@@@ -1232,7 -1270,7 +1290,7 @@@ M:      Lars-Peter Clausen <lars@metafoo.de
  M:    Michael Hennerich <Michael.Hennerich@analog.com>
  S:    Supported
  W:    http://wiki.analog.com/
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-ad9523
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-adf4350
  F:    Documentation/devicetree/bindings/iio/*/adi,*
@@@ -1249,6 -1287,18 +1307,6 @@@ S:     Supporte
  F:    drivers/clk/analogbits/*
  F:    include/linux/clk/analogbits*
  
 -ANDES ARCHITECTURE
 -M:    Nick Hu <nickhu@andestech.com>
 -M:    Greentime Hu <green.hu@gmail.com>
 -M:    Vincent Chen <deanbo422@gmail.com>
 -S:    Supported
 -T:    git https://git.kernel.org/pub/scm/linux/kernel/git/greentime/linux.git
 -F:    Documentation/devicetree/bindings/interrupt-controller/andestech,ativic32.txt
 -F:    Documentation/devicetree/bindings/nds32/
 -F:    arch/nds32/
 -N:    nds32
 -K:    nds32
 -
  ANDROID CONFIG FRAGMENTS
  M:    Rob Herring <robh@kernel.org>
  S:    Supported
@@@ -1695,9 -1745,9 +1753,9 @@@ S:      Maintaine
  F:    drivers/clk/sunxi/
  
  ARM/Allwinner sunXi SoC support
 -M:    Maxime Ripard <mripard@kernel.org>
  M:    Chen-Yu Tsai <wens@csie.org>
 -R:    Jernej Skrabec <jernej.skrabec@gmail.com>
 +M:    Jernej Skrabec <jernej.skrabec@gmail.com>
 +M:    Samuel Holland <samuel@sholland.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
@@@ -1777,7 -1827,7 +1835,7 @@@ T:      git https://github.com/AsahiLinux/li
  F:    Documentation/devicetree/bindings/arm/apple.yaml
  F:    Documentation/devicetree/bindings/arm/apple/*
  F:    Documentation/devicetree/bindings/i2c/apple,i2c.yaml
 -F:    Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/apple,*
  F:    Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
  F:    Documentation/devicetree/bindings/pci/apple,pcie.yaml
  F:    Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
@@@ -2127,6 -2177,13 +2185,6 @@@ F:     Documentation/devicetree/bindings/ar
  F:    arch/arm64/boot/dts/intel/keembay-evm.dts
  F:    arch/arm64/boot/dts/intel/keembay-soc.dtsi
  
 -ARM/INTEL RESEARCH IMOTE/STARGATE 2 MACHINE SUPPORT
 -M:    Jonathan Cameron <jic23@cam.ac.uk>
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/mach-pxa/stargate2.c
 -F:    drivers/pcmcia/pxa2xx_stargate2.c
 -
  ARM/INTEL XSC3 (MANZANO) ARM CORE
  M:    Lennert Buytenhek <kernel@wantstofly.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -2255,7 -2312,7 +2313,7 @@@ F:      drivers/phy/mediatek
  ARM/Microchip (AT91) SoC support
  M:    Nicolas Ferre <nicolas.ferre@microchip.com>
  M:    Alexandre Belloni <alexandre.belloni@bootlin.com>
 -M:    Ludovic Desroches <ludovic.desroches@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@microchip.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Supported
  W:    http://www.linux4sam.org
@@@ -2368,7 -2425,6 +2426,7 @@@ L:      openbmc@lists.ozlabs.org (moderated 
  S:    Supported
  F:    Documentation/devicetree/bindings/*/*/*npcm*
  F:    Documentation/devicetree/bindings/*/*npcm*
 +F:    Documentation/devicetree/bindings/arm/npcm/*
  F:    arch/arm/boot/dts/nuvoton-npcm*
  F:    arch/arm/mach-npcm/
  F:    drivers/*/*npcm*
@@@ -2379,11 -2435,9 +2437,11 @@@ ARM/NUVOTON WPCM450 ARCHITECTUR
  M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
  L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
  S:    Maintained
 +W:    https://github.com/neuschaefer/wpcm450/wiki
  F:    Documentation/devicetree/bindings/*/*wpcm*
  F:    arch/arm/boot/dts/nuvoton-wpcm450*
  F:    arch/arm/mach-npcm/wpcm450.c
 +F:    drivers/*/*/*wpcm*
  F:    drivers/*/*wpcm*
  
  ARM/NXP S32G ARCHITECTURE
@@@ -2511,7 -2565,7 +2569,7 @@@ S:      Maintaine
  F:    Documentation/devicetree/bindings/arm/rda.yaml
  F:    Documentation/devicetree/bindings/gpio/gpio-rda.yaml
  F:    Documentation/devicetree/bindings/interrupt-controller/rda,8810pl-intc.txt
 -F:    Documentation/devicetree/bindings/serial/rda,8810pl-uart.txt
 +F:    Documentation/devicetree/bindings/serial/rda,8810pl-uart.yaml
  F:    Documentation/devicetree/bindings/timer/rda,8810pl-timer.txt
  F:    arch/arm/boot/dts/rda8810pl-*
  F:    drivers/clocksource/timer-rda.c
@@@ -2535,7 -2589,6 +2593,7 @@@ M:      Magnus Damm <magnus.damm@gmail.com
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  Q:    http://patchwork.kernel.org/project/linux-renesas-soc/list/
 +C:    irc://irc.libera.chat/renesas-soc
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
  F:    Documentation/devicetree/bindings/arm/renesas.yaml
  F:    arch/arm64/boot/dts/renesas/
@@@ -2577,7 -2630,7 +2635,7 @@@ F:      sound/soc/rockchip
  N:    rockchip
  
  ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  R:    Alim Akhtar <alim.akhtar@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
@@@ -2619,7 -2672,7 +2677,7 @@@ M:      Łukasz Stelmach <l.stelmach@samsung
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s5p-g2d/
 +F:    drivers/media/platform/samsung/s5p-g2d/
  
  ARM/SAMSUNG S5P SERIES HDMI CEC SUBSYSTEM SUPPORT
  M:    Marek Szyprowski <m.szyprowski@samsung.com>
@@@ -2636,7 -2689,7 +2694,7 @@@ M:      Sylwester Nawrocki <s.nawrocki@samsu
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s5p-jpeg/
 +F:    drivers/media/platform/samsung/s5p-jpeg/
  
  ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
  M:    Marek Szyprowski <m.szyprowski@samsung.com>
@@@ -2644,7 -2697,7 +2702,7 @@@ M:      Andrzej Hajda <andrzej.hajda@intel.c
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s5p-mfc/
 +F:    drivers/media/platform/samsung/s5p-mfc/
  
  ARM/SHMOBILE ARM ARCHITECTURE
  M:    Geert Uytterhoeven <geert+renesas@glider.be>
@@@ -2652,7 -2705,6 +2710,7 @@@ M:      Magnus Damm <magnus.damm@gmail.com
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  Q:    http://patchwork.kernel.org/project/linux-renesas-soc/list/
 +C:    irc://irc.libera.chat/renesas-soc
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel.git next
  F:    Documentation/devicetree/bindings/arm/renesas.yaml
  F:    arch/arm/boot/dts/emev2*
@@@ -2714,7 -2766,7 +2772,7 @@@ F:      drivers/clocksource/clksrc_st_lpc.
  F:    drivers/cpufreq/sti-cpufreq.c
  F:    drivers/dma/st_fdma*
  F:    drivers/i2c/busses/i2c-st.c
 -F:    drivers/media/platform/sti/c8sectpfe/
 +F:    drivers/media/platform/st/sti/c8sectpfe/
  F:    drivers/media/rc/st_rc.c
  F:    drivers/mmc/host/sdhci-st.c
  F:    drivers/phy/st/phy-miphy28lp.c
@@@ -2745,7 -2797,7 +2803,7 @@@ N:      stm3
  N:    stm
  
  ARM/Synaptics SoC support
 -M:    Jisheng Zhang <Jisheng.Zhang@synaptics.com>
 +M:    Jisheng Zhang <jszhang@kernel.org>
  M:    Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -2766,14 -2818,6 +2824,14 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/media/tegra-cec.txt
  F:    drivers/media/cec/platform/tegra/
  
 +ARM/TESLA FSD SoC SUPPORT
 +M:    Alim Akhtar <alim.akhtar@samsung.com>
 +M:    linux-fsd@tesla.com
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Maintained
 +F:    arch/arm64/boot/dts/tesla*
 +
  ARM/TETON BGA MACHINE SUPPORT
  M:    "Mark F. Brown" <mark.brown314@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -3006,6 -3050,14 +3064,14 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/net/asix,ax88796c.yaml
  F:    drivers/net/ethernet/asix/ax88796c_*
  
+ ASPEED PECI CONTROLLER
+ M:    Iwona Winiarska <iwona.winiarska@intel.com>
+ L:    linux-aspeed@lists.ozlabs.org (moderated for non-subscribers)
+ L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
+ S:    Supported
+ F:    Documentation/devicetree/bindings/peci/peci-aspeed.yaml
+ F:    drivers/peci/controller/peci-aspeed.c
  ASPEED PINCTRL DRIVERS
  M:    Andrew Jeffery <andrew@aj.id.au>
  L:    linux-aspeed@lists.ozlabs.org (moderated for non-subscribers)
@@@ -3038,7 -3090,7 +3104,7 @@@ L:      linux-media@vger.kernel.or
  L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/aspeed-video.txt
 -F:    drivers/media/platform/aspeed-video.c
 +F:    drivers/media/platform/aspeed/
  
  ASUS NOTEBOOKS AND EEEPC ACPI/WMI EXTRAS DRIVERS
  M:    Corentin Chary <corentin.chary@gmail.com>
@@@ -3070,12 -3122,6 +3136,12 @@@ L:    linux-hwmon@vger.kernel.or
  S:    Maintained
  F:    drivers/hwmon/asus_wmi_ec_sensors.c
  
 +ASUS EC HARDWARE MONITOR DRIVER
 +M:    Eugene Shalygin <eugene.shalygin@gmail.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hwmon/asus-ec-sensors.c
 +
  ASUS WIRELESS RADIO CONTROL DRIVER
  M:    João Paulo Rechi Vita <jprvita@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -3218,7 -3264,6 +3284,7 @@@ ATOMIC INFRASTRUCTUR
  M:    Will Deacon <will@kernel.org>
  M:    Peter Zijlstra <peterz@infradead.org>
  R:    Boqun Feng <boqun.feng@gmail.com>
 +R:    Mark Rutland <mark.rutland@arm.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    arch/*/include/asm/atomic*.h
@@@ -3299,7 -3344,7 +3365,7 @@@ AXI-FAN-CONTROL HARDWARE MONITOR DRIVE
  M:    Nuno Sá <nuno.sa@analog.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/hwmon/adi,axi-fan-control.yaml
  F:    drivers/hwmon/axi-fan-control.c
  
@@@ -3400,7 -3445,7 +3466,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/sti/bdisp
 +F:    drivers/media/platform/st/sti/bdisp
  
  BECKHOFF CX5020 ETHERCAT MASTER DRIVER
  M:    Dariusz Marcinkiewicz <reksio@newterm.pl>
@@@ -3461,7 -3506,6 +3527,7 @@@ F:      Documentation/ABI/stable/sysfs-bloc
  F:    Documentation/block/
  F:    block/
  F:    drivers/block/
 +F:    include/linux/bio.h
  F:    include/linux/blk*
  F:    kernel/trace/blktrace.c
  F:    lib/sbitmap.c
@@@ -3549,8 -3593,6 +3615,8 @@@ F:      net/sched/act_bpf.
  F:    net/sched/cls_bpf.c
  F:    samples/bpf/
  F:    scripts/bpf_doc.py
 +F:    scripts/pahole-flags.sh
 +F:    scripts/pahole-version.sh
  F:    tools/bpf/
  F:    tools/lib/bpf/
  F:    tools/testing/selftests/bpf/
@@@ -3717,14 -3759,6 +3783,14 @@@ F:    Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/broadcom/bcm4908_enet.*
  F:    drivers/net/ethernet/broadcom/unimac.h
  
 +BROADCOM BCM4908 PINMUX DRIVER
 +M:    Rafał Miłecki <rafal@milecki.pl>
 +M:    bcm-kernel-feedback-list@broadcom.com
 +L:    linux-gpio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/pinctrl/brcm,bcm4908-pinctrl.yaml
 +F:    drivers/pinctrl/bcm/pinctrl-bcm4908.c
 +
  BROADCOM BCM5301X ARM ARCHITECTURE
  M:    Florian Fainelli <f.fainelli@gmail.com>
  M:    Hauke Mehrtens <hauke@hauke-m.de>
@@@ -3851,6 -3885,9 +3917,6 @@@ BROADCOM BRCM80211 IEEE802.11n WIRELES
  M:    Arend van Spriel <aspriel@gmail.com>
  M:    Franky Lin <franky.lin@broadcom.com>
  M:    Hante Meuleman <hante.meuleman@broadcom.com>
 -M:    Chi-hsien Lin <chi-hsien.lin@infineon.com>
 -M:    Wright Feng <wright.feng@infineon.com>
 -M:    Chung-hsien Hsu <chung-hsien.hsu@infineon.com>
  L:    linux-wireless@vger.kernel.org
  L:    brcm80211-dev-list.pdl@broadcom.com
  L:    SHA-cyfmac-dev-list@infineon.com
@@@ -3934,7 -3971,7 +4000,7 @@@ M:      Scott Branden <sbranden@broadcom.com
  M:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://github.com/broadcom/cygnus-linux.git
 +T:    git git://github.com/broadcom/stblinux.git
  F:    arch/arm64/boot/dts/broadcom/northstar2/*
  F:    arch/arm64/boot/dts/broadcom/stingray/*
  F:    drivers/clk/bcm/clk-ns*
@@@ -4055,7 -4092,6 +4121,7 @@@ L:      linux-mtd@lists.infradead.or
  L:    bcm-kernel-feedback-list@broadcom.com
  S:    Maintained
  F:    drivers/mtd/nand/raw/brcmnand/
 +F:    include/linux/platform_data/brcmnand.h
  
  BROADCOM STB PCIE DRIVER
  M:    Jim Quinlan <jim2101024@gmail.com>
@@@ -4273,7 -4309,7 +4339,7 @@@ L:      linux-media@vger.kernel.or
  S:    Orphan
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/admin-guide/media/cafe_ccic*
 -F:    drivers/media/platform/marvell-ccic/
 +F:    drivers/media/platform/marvell/
  
  CAIF NETWORK LAYER
  L:    netdev@vger.kernel.org
@@@ -4476,7 -4512,6 +4542,7 @@@ F:      drivers/power/supply/cw2015_battery.
  CEPH COMMON CODE (LIBCEPH)
  M:    Ilya Dryomov <idryomov@gmail.com>
  M:    Jeff Layton <jlayton@kernel.org>
 +M:    Xiubo Li <xiubli@redhat.com>
  L:    ceph-devel@vger.kernel.org
  S:    Supported
  W:    http://ceph.com/
@@@ -4487,7 -4522,6 +4553,7 @@@ F:      net/ceph
  
  CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH)
  M:    Jeff Layton <jlayton@kernel.org>
 +M:    Xiubo Li <xiubli@redhat.com>
  M:    Ilya Dryomov <idryomov@gmail.com>
  L:    ceph-devel@vger.kernel.org
  S:    Supported
@@@ -4799,7 -4833,7 +4865,7 @@@ M:      Philipp Zabel <p.zabel@pengutronix.d
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/coda.yaml
 -F:    drivers/media/platform/coda/
 +F:    drivers/media/platform/chips-media/
  
  CODE OF CONDUCT
  M:    Greg Kroah-Hartman <gregkh@linuxfoundation.org>
@@@ -4983,6 -5017,7 +5049,7 @@@ COUNTER SUBSYSTE
  M:    William Breathitt Gray <vilhelm.gray@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
+ T:    git git@gitlab.com:vilhelmgray/counter.git
  F:    Documentation/ABI/testing/sysfs-bus-counter
  F:    Documentation/driver-api/generic-counter.rst
  F:    drivers/counter/
@@@ -5349,7 -5384,6 +5416,7 @@@ DATA ACCESS MONITO
  M:    SeongJae Park <sj@kernel.org>
  L:    linux-mm@kvack.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-kernel-mm-damon
  F:    Documentation/admin-guide/mm/damon/
  F:    Documentation/vm/damon/
  F:    include/linux/damon.h
@@@ -5443,7 -5477,6 +5510,7 @@@ F:      drivers/platform/x86/dell/dell-rbtn.
  DELL LAPTOP SMM DRIVER
  M:    Pali Rohár <pali@kernel.org>
  S:    Maintained
 +F:    Documentation/ABI/obsolete/procfs-i8k
  F:    drivers/hwmon/dell-smm-hwmon.c
  F:    include/uapi/linux/i8k.h
  
@@@ -5513,7 -5546,7 +5580,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/sti/delta
 +F:    drivers/media/platform/st/sti/delta
  
  DELTA AHE-50DC FAN CONTROL MODULE DRIVER
  M:    Zev Weiss <zev@bewilderbeest.net>
@@@ -5528,6 -5561,15 +5595,15 @@@ S:    Maintaine
  F:    Documentation/hwmon/dps920ab.rst
  F:    drivers/hwmon/pmbus/dps920ab.c
  
+ DELTA NETWORKS TN48M CPLD DRIVERS
+ M:    Robert Marko <robert.marko@sartura.hr>
+ S:    Maintained
+ F:    Documentation/devicetree/bindings/gpio/delta,tn48m-gpio.yaml
+ F:    Documentation/devicetree/bindings/mfd/delta,tn48m-cpld.yaml
+ F:    Documentation/devicetree/bindings/reset/delta,tn48m-reset.yaml
+ F:    drivers/gpio/gpio-tn48m.c
+ F:    include/dt-bindings/reset/delta,tn48m-reset.h
  DENALI NAND DRIVER
  L:    linux-mtd@lists.infradead.org
  S:    Orphan
@@@ -5625,7 -5667,7 +5701,7 @@@ F:      include/linux/devm-helpers.
  
  DEVICE-MAPPER  (LVM)
  M:    Alasdair Kergon <agk@redhat.com>
 -M:    Mike Snitzer <snitzer@redhat.com>
 +M:    Mike Snitzer <snitzer@kernel.org>
  M:    dm-devel@redhat.com
  L:    dm-devel@redhat.com
  S:    Maintained
@@@ -5773,7 -5815,7 +5849,7 @@@ T:      git git://anongit.freedesktop.org/dr
  F:    Documentation/driver-api/dma-buf.rst
  F:    drivers/dma-buf/
  F:    include/linux/*fence.h
 -F:    include/linux/dma-buf*
 +F:    include/linux/dma-buf.h
  F:    include/linux/dma-resv.h
  K:    \bdma_(?:buf|fence|resv)\b
  
@@@ -6116,8 -6158,7 +6192,8 @@@ L:      dri-devel@lists.freedesktop.or
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  S:    Maintained
  F:    drivers/gpu/drm/panel/panel-lvds.c
 -F:    Documentation/devicetree/bindings/display/panel/lvds.yaml
 +F:    Documentation/devicetree/bindings/display/lvds.yaml
 +F:    Documentation/devicetree/bindings/display/panel/panel-lvds.yaml
  
  DRM DRIVER FOR MANTIX MLAF057WE51 PANELS
  M:    Guido Günther <agx@sigxcpu.org>
@@@ -6146,14 -6187,6 +6222,14 @@@ T:    git git://anongit.freedesktop.org/dr
  F:    Documentation/devicetree/bindings/display/multi-inno,mi0283qt.txt
  F:    drivers/gpu/drm/tiny/mi0283qt.c
  
 +DRM DRIVER FOR MIPI DBI compatible panels
 +M:    Noralf Trønnes <noralf@tronnes.org>
 +S:    Maintained
 +W:    https://github.com/notro/panel-mipi-dbi/wiki
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    Documentation/devicetree/bindings/display/panel/panel-mipi-dbi-spi.yaml
 +F:    drivers/gpu/drm/tiny/panel-mipi-dbi.c
 +
  DRM DRIVER FOR MSM ADRENO GPU
  M:    Rob Clark <robdclark@gmail.com>
  M:    Sean Paul <sean@poorly.run>
@@@ -6174,13 -6207,6 +6250,13 @@@ T:    git git://anongit.freedesktop.org/dr
  F:    Documentation/devicetree/bindings/display/panel/novatek,nt35510.yaml
  F:    drivers/gpu/drm/panel/panel-novatek-nt35510.c
  
 +DRM DRIVER FOR NOVATEK NT35560 PANELS
 +M:    Linus Walleij <linus.walleij@linaro.org>
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    Documentation/devicetree/bindings/display/panel/sony,acx424akp.yaml
 +F:    drivers/gpu/drm/panel/panel-novatek-nt35560.c
 +
  DRM DRIVER FOR NOVATEK NT36672A PANELS
  M:    Sumit Semwal <sumit.semwal@linaro.org>
  S:    Maintained
@@@ -6217,13 -6243,6 +6293,13 @@@ T:    git git://anongit.freedesktop.org/dr
  F:    Documentation/devicetree/bindings/display/repaper.txt
  F:    drivers/gpu/drm/tiny/repaper.c
  
 +DRM DRIVER FOR SOLOMON SSD130X OLED DISPLAYS
 +M:    Javier Martinez Canillas <javierm@redhat.com>
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    Documentation/devicetree/bindings/display/solomon,ssd1307fb.yaml
 +F:    drivers/gpu/drm/solomon/ssd130x*
 +
  DRM DRIVER FOR QEMU'S CIRRUS DEVICE
  M:    Dave Airlie <airlied@redhat.com>
  M:    Gerd Hoffmann <kraxel@redhat.com>
@@@ -6312,6 -6331,12 +6388,6 @@@ T:     git git://anongit.freedesktop.org/dr
  F:    Documentation/devicetree/bindings/display/sitronix,st7735r.yaml
  F:    drivers/gpu/drm/tiny/st7735r.c
  
 -DRM DRIVER FOR SONY ACX424AKP PANELS
 -M:    Linus Walleij <linus.walleij@linaro.org>
 -S:    Maintained
 -T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    drivers/gpu/drm/panel/panel-sony-acx424akp.c
 -
  DRM DRIVER FOR ST-ERICSSON MCDE
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
@@@ -6358,8 -6383,8 +6434,8 @@@ T:      git git://anongit.freedesktop.org/dr
  F:    drivers/gpu/drm/vboxvideo/
  
  DRM DRIVER FOR VMWARE VIRTUAL GPU
 -M:    "VMware Graphics" <linux-graphics-maintainer@vmware.com>
  M:    Zack Rusin <zackr@vmware.com>
 +R:    VMware Graphics Reviewers <linux-graphics-maintainer@vmware.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -6453,7 -6478,6 +6529,7 @@@ L:      dri-devel@lists.freedesktop.or
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git
  F:    Documentation/devicetree/bindings/display/exynos/
 +F:    Documentation/devicetree/bindings/display/samsung/
  F:    drivers/gpu/drm/exynos/
  F:    include/uapi/drm/exynos_drm.h
  
@@@ -7277,9 -7301,6 +7353,9 @@@ F:      net/core/of_net.
  EXEC & BINFMT API
  R:    Eric Biederman <ebiederm@xmission.com>
  R:    Kees Cook <keescook@chromium.org>
 +L:    linux-mm@kvack.org
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/execve
  F:    arch/alpha/kernel/binfmt_loader.c
  F:    arch/x86/ia32/ia32_aout.c
  F:    fs/*binfmt_*.c
@@@ -7287,7 -7308,6 +7363,7 @@@ F:      fs/exec.
  F:    include/linux/binfmts.h
  F:    include/linux/elf.h
  F:    include/uapi/linux/binfmts.h
 +F:    include/uapi/linux/elf.h
  F:    tools/testing/selftests/exec/
  N:    asm/elf.h
  N:    binfmt
@@@ -7323,9 -7343,7 +7399,9 @@@ Extended Verification Module (EVM
  M:    Mimi Zohar <zohar@linux.ibm.com>
  L:    linux-integrity@vger.kernel.org
  S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git
  F:    security/integrity/evm/
 +F:    security/integrity/
  
  EXTENSIBLE FIRMWARE INTERFACE (EFI)
  M:    Ard Biesheuvel <ardb@kernel.org>
@@@ -7802,7 -7820,8 +7878,7 @@@ M:      Qiang Zhao <qiang.zhao@nxp.com
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
  F:    drivers/soc/fsl/qe/
 -F:    include/soc/fsl/*qe*.h
 -F:    include/soc/fsl/*ucc*.h
 +F:    include/soc/fsl/qe/
  
  FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
  M:    Li Yang <leoyang.li@nxp.com>
@@@ -7833,7 -7852,6 +7909,7 @@@ F:      Documentation/devicetree/bindings/mi
  F:    Documentation/devicetree/bindings/soc/fsl/
  F:    drivers/soc/fsl/
  F:    include/linux/fsl/
 +F:    include/soc/fsl/
  
  FREESCALE SOC FS_ENET DRIVER
  M:    Pantelis Antoniou <pantelis.antoniou@gmail.com>
@@@ -7844,10 -7862,10 +7920,10 @@@ F:   drivers/net/ethernet/freescale/fs_en
  F:    include/linux/fs_enet_pd.h
  
  FREESCALE SOC SOUND DRIVERS
 -M:    Nicolin Chen <nicoleotsuka@gmail.com>
 +M:    Shengjiu Wang <shengjiu.wang@gmail.com>
  M:    Xiubo Li <Xiubo.Lee@gmail.com>
  R:    Fabio Estevam <festevam@gmail.com>
 -R:    Shengjiu Wang <shengjiu.wang@gmail.com>
 +R:    Nicolin Chen <nicoleotsuka@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  L:    linuxppc-dev@lists.ozlabs.org
  S:    Maintained
@@@ -7988,12 -8006,6 +8064,12 @@@ L:    platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/fujitsu-tablet.c
  
 +FUNGIBLE ETHERNET DRIVERS
 +M:    Dimitris Michailidis <dmichail@fungible.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    drivers/net/ethernet/fungible/
 +
  FUSE: FILESYSTEM IN USERSPACE
  M:    Miklos Szeredi <miklos@szeredi.hu>
  L:    linux-fsdevel@vger.kernel.org
@@@ -8707,7 -8719,7 +8783,7 @@@ S:      Maintaine
  F:    drivers/gpio/gpio-hisi.c
  
  HISILICON HIGH PERFORMANCE RSA ENGINE DRIVER (HPRE)
 -M:    Zaibo Xu <xuzaibo@huawei.com>
 +M:    Longfang Liu <liulongfang@huawei.com>
  L:    linux-crypto@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/debugfs-hisi-hpre
@@@ -8767,9 -8779,9 +8843,9 @@@ L:      linux-crypto@vger.kernel.or
  S:    Maintained
  F:    Documentation/ABI/testing/debugfs-hisi-zip
  F:    drivers/crypto/hisilicon/qm.c
 -F:    drivers/crypto/hisilicon/qm.h
  F:    drivers/crypto/hisilicon/sgl.c
  F:    drivers/crypto/hisilicon/zip/
 +F:    include/linux/hisi_acc_qm.h
  
  HISILICON ROCE DRIVER
  M:    Wenpeng Liang <liangwenpeng@huawei.com>
@@@ -8787,8 -8799,8 +8863,8 @@@ F:      Documentation/devicetree/bindings/sc
  F:    drivers/scsi/hisi_sas/
  
  HISILICON SECURITY ENGINE V2 DRIVER (SEC2)
 -M:    Zaibo Xu <xuzaibo@huawei.com>
  M:    Kai Ye <yekai13@huawei.com>
 +M:    Longfang Liu <liulongfang@huawei.com>
  L:    linux-crypto@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/debugfs-hisi-sec
@@@ -8819,7 -8831,7 +8895,7 @@@ F:      Documentation/devicetree/bindings/mf
  F:    drivers/mfd/hi6421-spmi-pmic.c
  
  HISILICON TRUE RANDOM NUMBER GENERATOR V2 SUPPORT
 -M:    Zaibo Xu <xuzaibo@huawei.com>
 +M:    Weili Qian <qianweili@huawei.com>
  S:    Maintained
  F:    drivers/crypto/hisilicon/trng/trng.c
  
@@@ -8933,7 -8945,7 +9009,7 @@@ L:      linux-media@vger.kernel.or
  S:    Supported
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/sti/hva
 +F:    drivers/media/platform/st/sti/hva
  
  HWPOISON MEMORY FAILURE HANDLING
  M:    Naoya Horiguchi <naoya.horiguchi@nec.com>
@@@ -8968,12 -8980,6 +9044,12 @@@ L:    linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/media/i2c/hi846.c
  
 +HYNIX HI847 SENSOR DRIVER
 +M:    Shawn Tu <shawnx.tu@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/hi847.c
 +
  Hyper-V/Azure CORE AND DRIVERS
  M:    "K. Y. Srinivasan" <kys@microsoft.com>
  M:    Haiyang Zhang <haiyangz@microsoft.com>
@@@ -9548,11 -9554,6 +9624,11 @@@ F:    include/linux/mfd/ingenic-tcu.
  F:    sound/soc/codecs/jz47*
  F:    sound/soc/jz4740/
  
 +INJOINIC IP5xxx POWER BANK IC DRIVER
 +M:    Samuel Holland <samuel@sholland.org>
 +S:    Maintained
 +F:    drivers/power/supply/ip5xxx_power.c
 +
  INOTIFY
  M:    Jan Kara <jack@suse.cz>
  R:    Amir Goldstein <amir73il@gmail.com>
@@@ -9599,7 -9600,6 +9675,7 @@@ L:      linux-integrity@vger.kernel.or
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/zohar/linux-integrity.git
  F:    security/integrity/ima/
 +F:    security/integrity/
  
  INTEL 810/815 FRAMEBUFFER DRIVER
  M:    Antonino Daplas <adaplas@gmail.com>
@@@ -9960,13 -9960,6 +10036,13 @@@ S:   Maintaine
  F:    arch/x86/include/asm/intel_scu_ipc.h
  F:    drivers/platform/x86/intel_scu_*
  
 +INTEL SDSI DRIVER
 +M:    David E. Box <david.e.box@linux.intel.com>
 +S:    Supported
 +F:    drivers/platform/x86/intel/sdsi.c
 +F:    tools/arch/x86/intel_sdsi/
 +F:    tools/testing/selftests/drivers/sdsi/
 +
  INTEL SKYLAKE INT3472 ACPI DEVICE DRIVER
  M:    Daniel Scally <djrscally@gmail.com>
  S:    Maintained
@@@ -9990,6 -9983,7 +10066,7 @@@ F:     drivers/firmware/stratix10-rsu.
  F:    drivers/firmware/stratix10-svc.c
  F:    include/linux/firmware/intel/stratix10-smc.h
  F:    include/linux/firmware/intel/stratix10-svc-client.h
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/dinguyen/linux.git
  
  INTEL TELEMETRY DRIVER
  M:    Rajneesh Bhardwaj <irenic.rajneesh@gmail.com>
@@@ -10003,7 -9997,7 +10080,7 @@@ INTEL UNCORE FREQUENCY CONTRO
  M:    Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 -F:    drivers/platform/x86/intel/uncore-frequency.c
 +F:    drivers/platform/x86/intel/uncore-frequency/
  
  INTEL VENDOR SPECIFIC EXTENDED CAPABILITIES DRIVER
  M:    David E. Box <david.e.box@linux.intel.com>
@@@ -10100,14 -10094,6 +10177,14 @@@ L: linux-iio@vger.kernel.or
  F:    Documentation/devicetree/bindings/counter/interrupt-counter.yaml
  F:    drivers/counter/interrupt-cnt.c
  
 +INTERSIL ISL7998X VIDEO DECODER DRIVER
 +M:    Michael Tretter <m.tretter@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/isil,isl79987.yaml
 +F:    drivers/media/i2c/isl7998x.c
 +
  INVENSENSE ICM-426xx IMU DRIVER
  M:    Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
  L:    linux-iio@vger.kernel.org
@@@ -10155,13 -10141,6 +10232,13 @@@ F: include/linux/iova.
  F:    include/linux/of_iommu.h
  F:    include/uapi/linux/iommu.h
  
 +IOSYS-MAP HELPERS
 +M:    Thomas Zimmermann <tzimmermann@suse.de>
 +L:    dri-devel@lists.freedesktop.org
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    include/linux/iosys-map.h
 +
  IO_URING
  M:    Jens Axboe <axboe@kernel.dk>
  R:    Pavel Begunkov <asml.silence@gmail.com>
@@@ -10181,7 -10160,6 +10258,7 @@@ M:   Corey Minyard <minyard@acm.org
  L:    openipmi-developer@lists.sourceforge.net (moderated for non-subscribers)
  S:    Supported
  W:    http://openipmi.sourceforge.net/
 +T:    git https://github.com/cminyard/linux-ipmi.git for-next
  F:    Documentation/driver-api/ipmi.rst
  F:    Documentation/devicetree/bindings/ipmi/
  F:    drivers/char/ipmi/
@@@ -10415,7 -10393,7 +10492,7 @@@ M:   Mikhail Ulyanov <mikhail.ulyanov@cog
  L:    linux-media@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/rcar_jpu.c
 +F:    drivers/media/platform/renesas/rcar_jpu.c
  
  JSM Neo PCI based serial card
  L:    linux-serial@vger.kernel.org
@@@ -10554,8 -10532,6 +10631,8 @@@ KERNEL REGRESSION
  M:    Thorsten Leemhuis <linux@leemhuis.info>
  L:    regressions@lists.linux.dev
  S:    Supported
 +F:    Documentation/admin-guide/reporting-regressions.rst
 +F:    Documentation/process/handling-regressions.rst
  
  KERNEL SELFTEST FRAMEWORK
  M:    Shuah Khan <shuah@kernel.org>
@@@ -10663,8 -10639,8 +10740,8 @@@ F:   arch/riscv/kvm
  KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
  M:    Christian Borntraeger <borntraeger@linux.ibm.com>
  M:    Janosch Frank <frankja@linux.ibm.com>
 +M:    Claudio Imbrenda <imbrenda@linux.ibm.com>
  R:    David Hildenbrand <david@redhat.com>
 -R:    Claudio Imbrenda <imbrenda@linux.ibm.com>
  L:    kvm@vger.kernel.org
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -10761,14 -10737,6 +10838,14 @@@ F: include/linux/keyctl.
  F:    include/uapi/linux/keyctl.h
  F:    security/keys/
  
 +KEYS/KEYRINGS_INTEGRITY
 +M:    Jarkko Sakkinen <jarkko@kernel.org>
 +M:    Mimi Zohar <zohar@linux.ibm.com>
 +L:    linux-integrity@vger.kernel.org
 +L:    keyrings@vger.kernel.org
 +S:    Supported
 +F:    security/integrity/platform_certs
 +
  KFENCE
  M:    Alexander Potapenko <glider@google.com>
  M:    Marco Elver <elver@google.com>
@@@ -10874,6 -10842,7 +10951,6 @@@ L7 BPF FRAMEWOR
  M:    John Fastabend <john.fastabend@gmail.com>
  M:    Daniel Borkmann <daniel@iogearbox.net>
  M:    Jakub Sitnicki <jakub@cloudflare.com>
 -M:    Lorenz Bauer <lmb@cloudflare.com>
  L:    netdev@vger.kernel.org
  L:    bpf@vger.kernel.org
  S:    Maintained
@@@ -11238,17 -11207,12 +11315,17 @@@ F:        lib/list-test.
  LITEX PLATFORM
  M:    Karol Gugala <kgugala@antmicro.com>
  M:    Mateusz Holenko <mholenko@antmicro.com>
 +M:    Gabriel Somlo <gsomlo@gmail.com>
 +M:    Joel Stanley <joel@jms.id.au>
  S:    Maintained
  F:    Documentation/devicetree/bindings/*/litex,*.yaml
  F:    arch/openrisc/boot/dts/or1klitex.dts
 -F:    drivers/soc/litex/litex_soc_ctrl.c
 -F:    drivers/tty/serial/liteuart.c
  F:    include/linux/litex.h
 +F:    drivers/tty/serial/liteuart.c
 +F:    drivers/soc/litex/*
 +F:    drivers/net/ethernet/litex/*
 +F:    drivers/mmc/host/litex_mmc.c
 +N:    litex
  
  LIVE PATCHING
  M:    Josh Poimboeuf <jpoimboe@redhat.com>
@@@ -11395,11 -11359,20 +11472,20 @@@ S:        Maintaine
  F:    Documentation/devicetree/bindings/iio/dac/lltc,ltc1660.yaml
  F:    drivers/iio/dac/ltc1660.c
  
+ LTC2688 IIO DAC DRIVER
+ M:    Nuno Sá <nuno.sa@analog.com>
+ L:    linux-iio@vger.kernel.org
+ S:    Supported
+ W:    http://ez.analog.com/community/linux-device-drivers
+ F:    Documentation/ABI/testing/sysfs-bus-iio-dac-ltc2688
+ F:    Documentation/devicetree/bindings/iio/dac/adi,ltc2688.yaml
+ F:    drivers/iio/dac/ltc2688.c
  LTC2947 HARDWARE MONITOR DRIVER
  M:    Nuno Sá <nuno.sa@analog.com>
  L:    linux-hwmon@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/hwmon/adi,ltc2947.yaml
  F:    drivers/hwmon/ltc2947-core.c
  F:    drivers/hwmon/ltc2947-i2c.c
@@@ -11410,7 -11383,7 +11496,7 @@@ LTC2983 IIO TEMPERATURE DRIVE
  M:    Nuno Sá <nuno.sa@analog.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/iio/temperature/adi,ltc2983.yaml
  F:    drivers/iio/temperature/ltc2983.c
  
@@@ -11425,7 -11398,7 +11511,7 @@@ LTC4306 I2C MULTIPLEXER DRIVE
  M:    Michael Hennerich <michael.hennerich@analog.com>
  L:    linux-i2c@vger.kernel.org
  S:    Supported
- W:    http://ez.analog.com/community/linux-device-drivers
+ W:    https://ez.analog.com/linux-software-drivers
  F:    Documentation/devicetree/bindings/i2c/i2c-mux-ltc4306.txt
  F:    drivers/i2c/muxes/i2c-mux-ltc4306.c
  
@@@ -11441,13 -11414,6 +11527,13 @@@ S: Maintaine
  W:    http://linux-test-project.github.io/
  T:    git git://github.com/linux-test-project/ltp.git
  
 +LYNX 28G SERDES PHY DRIVER
 +M:    Ioana Ciornei <ioana.ciornei@nxp.com>
 +L:    netdev@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/phy/fsl,lynx-28g.yaml
 +F:    drivers/phy/freescale/phy-fsl-lynx-28g.c
 +
  LYNX PCS MODULE
  M:    Ioana Ciornei <ioana.ciornei@nxp.com>
  L:    netdev@vger.kernel.org
@@@ -11795,7 -11761,7 +11881,7 @@@ F:   drivers/iio/proximity/mb1232.
  
  MAXIM MAX17040 FAMILY FUEL GAUGE DRIVERS
  R:    Iskren Chernev <iskren.chernev@gmail.com>
 -R:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +R:    Krzysztof Kozlowski <krzk@kernel.org>
  R:    Marek Szyprowski <m.szyprowski@samsung.com>
  R:    Matheus Castello <matheus@castello.eng.br>
  L:    linux-pm@vger.kernel.org
@@@ -11805,7 -11771,7 +11891,7 @@@ F:   drivers/power/supply/max17040_batter
  
  MAXIM MAX17042 FAMILY FUEL GAUGE DRIVERS
  R:    Hans de Goede <hdegoede@redhat.com>
 -R:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +R:    Krzysztof Kozlowski <krzk@kernel.org>
  R:    Marek Szyprowski <m.szyprowski@samsung.com>
  R:    Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>
  R:    Purism Kernel Team <kernel@puri.sm>
@@@ -11835,18 -11801,11 +11921,18 @@@ F:        drivers/power/supply/max77650-charge
  F:    drivers/regulator/max77650-regulator.c
  F:    include/linux/mfd/max77650.h
  
 +MAXIM MAX77714 PMIC MFD DRIVER
 +M:    Luca Ceresoli <luca@lucaceresoli.net>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/maxim,max77714.yaml
 +F:    drivers/mfd/max77714.c
 +F:    include/linux/mfd/max77714.h
 +
  MAXIM MAX77802 PMIC REGULATOR DEVICE DRIVER
  M:    Javier Martinez Canillas <javier@dowhile0.org>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/*/*max77802.txt
 +F:    Documentation/devicetree/bindings/*/*max77802.yaml
  F:    drivers/regulator/max77802-regulator.c
  F:    include/dt-bindings/*/*max77802.h
  
@@@ -11857,28 -11816,23 +11943,28 @@@ F:        Documentation/devicetree/bindings/po
  F:    drivers/power/supply/max77976_charger.c
  
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/power/supply/maxim,max14577.yaml
 +F:    Documentation/devicetree/bindings/power/supply/maxim,max77693.yaml
  F:    drivers/power/supply/max14577_charger.c
  F:    drivers/power/supply/max77693_charger.c
  
  MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/*/maxim,max14577.yaml
  F:    Documentation/devicetree/bindings/*/maxim,max77686.yaml
 +F:    Documentation/devicetree/bindings/*/maxim,max77693.yaml
 +F:    Documentation/devicetree/bindings/*/maxim,max77843.yaml
  F:    Documentation/devicetree/bindings/clock/maxim,max77686.txt
 -F:    Documentation/devicetree/bindings/mfd/max14577.txt
  F:    Documentation/devicetree/bindings/mfd/max77693.txt
 +F:    drivers/*/*max77843.c
  F:    drivers/*/max14577*.c
  F:    drivers/*/max77686*.c
  F:    drivers/*/max77693*.c
@@@ -11974,7 -11928,7 +12060,7 @@@ M:   Philipp Zabel <p.zabel@pengutronix.d
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/platform/imx-pxp.[ch]
 +F:    drivers/media/platform/nxp/imx-pxp.[ch]
  
  MEDIA DRIVERS FOR ASCOT2E
  M:    Sergey Kozlov <serjk@netup.ru>
@@@ -12039,10 -11993,10 +12125,10 @@@ L:        linux-media@vger.kernel.or
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/admin-guide/media/imx7.rst
 +F:    Documentation/devicetree/bindings/media/nxp,imx-mipi-csi2.yaml
  F:    Documentation/devicetree/bindings/media/nxp,imx7-csi.yaml
 -F:    Documentation/devicetree/bindings/media/nxp,imx7-mipi-csi2.yaml
 +F:    drivers/media/platform/imx/imx-mipi-csis.c
  F:    drivers/staging/media/imx/imx7-media-csi.c
 -F:    drivers/staging/media/imx/imx7-mipi-csis.c
  
  MEDIA DRIVERS FOR HELENE
  M:    Abylay Ospan <aospan@netup.ru>
@@@ -12097,7 -12051,7 +12183,7 @@@ L:   linux-tegra@vger.kernel.or
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/nvidia,tegra-vde.txt
 -F:    drivers/staging/media/tegra-vde/
 +F:    drivers/media/platform/nvidia/tegra-vde/
  
  MEDIA DRIVERS FOR RENESAS - CEU
  M:    Jacopo Mondi <jacopo@jmondi.org>
@@@ -12106,7 -12060,7 +12192,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,ceu.yaml
 -F:    drivers/media/platform/renesas-ceu.c
 +F:    drivers/media/platform/renesas/renesas-ceu.c
  F:    include/media/drv-intf/renesas-ceu.h
  
  MEDIA DRIVERS FOR RENESAS - DRIF
@@@ -12116,7 -12070,7 +12202,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,drif.yaml
 -F:    drivers/media/platform/rcar_drif.c
 +F:    drivers/media/platform/renesas/rcar_drif.c
  
  MEDIA DRIVERS FOR RENESAS - FCP
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@@@ -12125,7 -12079,7 +12211,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,fcp.yaml
 -F:    drivers/media/platform/rcar-fcp.c
 +F:    drivers/media/platform/renesas/rcar-fcp.c
  F:    include/media/rcar-fcp.h
  
  MEDIA DRIVERS FOR RENESAS - FDP1
@@@ -12135,7 -12089,7 +12221,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,fdp1.yaml
 -F:    drivers/media/platform/rcar_fdp1.c
 +F:    drivers/media/platform/renesas/rcar_fdp1.c
  
  MEDIA DRIVERS FOR RENESAS - VIN
  M:    Niklas Söderlund <niklas.soderlund@ragnatech.se>
@@@ -12146,8 -12100,8 +12232,8 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    Documentation/devicetree/bindings/media/renesas,csi2.yaml
  F:    Documentation/devicetree/bindings/media/renesas,isp.yaml
  F:    Documentation/devicetree/bindings/media/renesas,vin.yaml
 -F:    drivers/media/platform/rcar-isp.c
 -F:    drivers/media/platform/rcar-vin/
 +F:    drivers/media/platform/renesas/rcar-isp.c
 +F:    drivers/media/platform/renesas/rcar-vin/
  
  MEDIA DRIVERS FOR RENESAS - VSP1
  M:    Laurent Pinchart <laurent.pinchart@ideasonboard.com>
@@@ -12157,7 -12111,7 +12243,7 @@@ L:   linux-renesas-soc@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/renesas,vsp1.yaml
 -F:    drivers/media/platform/vsp1/
 +F:    drivers/media/platform/renesas/vsp1/
  
  MEDIA DRIVERS FOR ST STV0910 DEMODULATOR ICs
  L:    linux-media@vger.kernel.org
@@@ -12179,7 -12133,7 +12265,7 @@@ L:   linux-media@vger.kernel.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/st,stm32-dcmi.yaml
 -F:    drivers/media/platform/stm32/stm32-dcmi.c
 +F:    drivers/media/platform/st/stm32/stm32-dcmi.c
  
  MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
@@@ -12263,7 -12217,7 +12349,7 @@@ M:   Rick Chang <rick.chang@mediatek.com
  M:    Bin Liu <bin.liu@mediatek.com>
  S:    Supported
  F:    Documentation/devicetree/bindings/media/mediatek-jpeg-decoder.txt
 -F:    drivers/media/platform/mtk-jpeg/
 +F:    drivers/media/platform/mediatek/jpeg/
  
  MEDIATEK MDP DRIVER
  M:    Minghsiu Tsai <minghsiu.tsai@mediatek.com>
@@@ -12271,8 -12225,8 +12357,8 @@@ M:   Houlong Wei <houlong.wei@mediatek.co
  M:    Andrew-CT Chen <andrew-ct.chen@mediatek.com>
  S:    Supported
  F:    Documentation/devicetree/bindings/media/mediatek-mdp.txt
 -F:    drivers/media/platform/mtk-mdp/
 -F:    drivers/media/platform/mtk-vpu/
 +F:    drivers/media/platform/mediatek/mdp/
 +F:    drivers/media/platform/mediatek/vpu/
  
  MEDIATEK MEDIA DRIVER
  M:    Tiffany Lin <tiffany.lin@mediatek.com>
@@@ -12280,8 -12234,8 +12366,8 @@@ M:   Andrew-CT Chen <andrew-ct.chen@media
  S:    Supported
  F:    Documentation/devicetree/bindings/media/mediatek-vcodec.txt
  F:    Documentation/devicetree/bindings/media/mediatek-vpu.txt
 -F:    drivers/media/platform/mtk-vcodec/
 -F:    drivers/media/platform/mtk-vpu/
 +F:    drivers/media/platform/mediatek/vcodec/
 +F:    drivers/media/platform/mediatek/vpu/
  
  MEDIATEK MMC/SD/SDIO DRIVER
  M:    Chaotian Jing <chaotian.jing@mediatek.com>
@@@ -12297,7 -12251,6 +12383,7 @@@ R:   Shayne Chen <shayne.chen@mediatek.co
  R:    Sean Wang <sean.wang@mediatek.com>
  L:    linux-wireless@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/net/wireless/mediatek,mt76.yaml
  F:    drivers/net/wireless/mediatek/mt76/
  
  MEDIATEK MT7601U WIRELESS LAN DRIVER
@@@ -12559,10 -12512,9 +12645,10 @@@ S: Maintaine
  F:    Documentation/core-api/boot-time-mm.rst
  F:    include/linux/memblock.h
  F:    mm/memblock.c
 +F:    tools/testing/memblock/
  
  MEMORY CONTROLLER DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
@@@ -12658,7 -12610,7 +12744,7 @@@ L:   linux-amlogic@lists.infradead.or
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/amlogic,axg-ge2d.yaml
 -F:    drivers/media/platform/meson/ge2d/
 +F:    drivers/media/platform/amlogic/meson-ge2d/
  
  MESON NAND CONTROLLER DRIVER FOR AMLOGIC SOCS
  M:    Liang Yang <liang.yang@amlogic.com>
@@@ -12740,13 -12692,6 +12826,13 @@@ L: alsa-devel@alsa-project.org (moderat
  S:    Supported
  F:    sound/soc/atmel
  
 +MICROCHIP CSI2DC DRIVER
 +M:    Eugen Hristev <eugen.hristev@microchip.com>
 +L:    linux-media@vger.kernel.org
 +S:    Supported
 +F:    Documentation/devicetree/bindings/media/microchip,csi2dc.yaml
 +F:    drivers/media/platform/atmel/microchip-csi2dc.c
 +
  MICROCHIP ECC DRIVER
  M:    Tudor Ambarus <tudor.ambarus@microchip.com>
  L:    linux-crypto@vger.kernel.org
@@@ -12772,8 -12717,11 +12858,8 @@@ L:  linux-media@vger.kernel.or
  S:    Supported
  F:    Documentation/devicetree/bindings/media/atmel,isc.yaml
  F:    Documentation/devicetree/bindings/media/microchip,xisc.yaml
 -F:    drivers/media/platform/atmel/atmel-isc-base.c
 -F:    drivers/media/platform/atmel/atmel-isc-regs.h
 -F:    drivers/media/platform/atmel/atmel-isc.h
 -F:    drivers/media/platform/atmel/atmel-sama5d2-isc.c
 -F:    drivers/media/platform/atmel/atmel-sama7g5-isc.c
 +F:    drivers/media/platform/atmel/atmel-isc*
 +F:    drivers/media/platform/atmel/atmel-sama*-isc*
  F:    include/linux/atmel-isc-media.h
  
  MICROCHIP ISI DRIVER
@@@ -13514,7 -13462,6 +13600,7 @@@ F:   net/core/drop_monitor.
  NETWORKING DRIVERS
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Jakub Kicinski <kuba@kernel.org>
 +M:    Paolo Abeni <pabeni@redhat.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  Q:    https://patchwork.kernel.org/project/netdevbpf/list/
@@@ -13561,7 -13508,6 +13647,7 @@@ F:   tools/testing/selftests/drivers/net/
  NETWORKING [GENERAL]
  M:    "David S. Miller" <davem@davemloft.net>
  M:    Jakub Kicinski <kuba@kernel.org>
 +M:    Paolo Abeni <pabeni@redhat.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  Q:    https://patchwork.kernel.org/project/netdevbpf/list/
@@@ -13705,7 -13651,7 +13791,7 @@@ F:   include/uapi/linux/nexthop.
  F:    net/ipv4/nexthop.c
  
  NFC SUBSYSTEM
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-nfc@lists.01.org (subscribers-only)
  L:    netdev@vger.kernel.org
  S:    Maintained
@@@ -13839,7 -13785,7 +13925,7 @@@ F:   scripts/nsdep
  NTB AMD DRIVER
  M:    Sanjay R Mehta <sanju.mehta@amd.com>
  M:    Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  F:    drivers/ntb/hw/amd/
  
@@@ -13847,7 -13793,7 +13933,7 @@@ NTB DRIVER COR
  M:    Jon Mason <jdmason@kudzu.us>
  M:    Dave Jiang <dave.jiang@intel.com>
  M:    Allen Hubbe <allenbh@gmail.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  W:    https://github.com/jonmason/ntb/wiki
  T:    git git://github.com/jonmason/ntb.git
@@@ -13859,13 -13805,13 +13945,13 @@@ F:        tools/testing/selftests/ntb
  
  NTB IDT DRIVER
  M:    Serge Semin <fancer.lancer@gmail.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  F:    drivers/ntb/hw/idt/
  
  NTB INTEL DRIVER
  M:    Dave Jiang <dave.jiang@intel.com>
 -L:    linux-ntb@googlegroups.com
 +L:    ntb@lists.linux.dev
  S:    Supported
  W:    https://github.com/davejiang/linux/wiki
  T:    git https://github.com/davejiang/linux.git
@@@ -14019,7 -13965,7 +14105,7 @@@ F:   Documentation/devicetree/bindings/re
  F:    drivers/regulator/pf8x00-regulator.c
  
  NXP PTN5150A CC LOGIC AND EXTCON DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml
@@@ -14232,7 -14178,7 +14318,7 @@@ M:   Laurent Pinchart <laurent.pinchart@i
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/ti,omap3isp.txt
 -F:    drivers/media/platform/omap3isp/
 +F:    drivers/media/platform/ti/omap3isp/
  F:    drivers/staging/media/omap4iss/
  
  OMAP MMC SUPPORT
@@@ -14340,12 -14286,6 +14426,12 @@@ M: Harald Welte <laforge@gnumonks.org
  S:    Maintained
  F:    drivers/char/pcmcia/cm4040_cs.*
  
 +OMNIVISION OG01A1B SENSOR DRIVER
 +M:    Shawn Tu <shawnx.tu@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    drivers/media/i2c/og01a1b.c
 +
  OMNIVISION OV02A10 SENSOR DRIVER
  M:    Dongchun Zhu <dongchun.zhu@mediatek.com>
  L:    linux-media@vger.kernel.org
@@@ -14354,13 -14294,6 +14440,13 @@@ T: git git://linuxtv.org/media_tree.gi
  F:    Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
  F:    drivers/media/i2c/ov02a10.c
  
 +OMNIVISION OV08D10 SENSOR DRIVER
 +M:    Jimmy Su <jimmy.su@intel.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +F:    drivers/media/i2c/ov08d10.c
 +
  OMNIVISION OV13858 SENSOR DRIVER
  M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    linux-media@vger.kernel.org
@@@ -14567,7 -14500,6 +14653,7 @@@ F:   scripts/dtc
  
  OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
  M:    Rob Herring <robh+dt@kernel.org>
 +M:    Krzysztof Kozlowski <krzk+dt@kernel.org>
  L:    devicetree@vger.kernel.org
  S:    Maintained
  C:    irc://irc.libera.chat/devicetree
@@@ -14757,9 -14689,8 +14843,9 @@@ F:   include/uapi/linux/ppdev.
  
  PARAVIRT_OPS INTERFACE
  M:    Juergen Gross <jgross@suse.com>
 -M:    Deep Shah <sdeep@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +M:    Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu>
 +R:    Alexey Makhalov <amakhalov@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    virtualization@lists.linux-foundation.org
  L:    x86@kernel.org
  S:    Supported
@@@ -14966,7 -14897,6 +15052,7 @@@ F:   drivers/pci/controller/mobiveil/pcie
  
  PCI DRIVER FOR MVEBU (Marvell Armada 370 and Armada XP SOC support)
  M:    Thomas Petazzoni <thomas.petazzoni@bootlin.com>
 +M:    Pali Rohár <pali@kernel.org>
  L:    linux-pci@vger.kernel.org
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
@@@ -15274,6 -15204,24 +15360,24 @@@ L: platform-driver-x86@vger.kernel.or
  S:    Maintained
  F:    drivers/platform/x86/peaq-wmi.c
  
+ PECI HARDWARE MONITORING DRIVERS
+ M:    Iwona Winiarska <iwona.winiarska@intel.com>
+ L:    linux-hwmon@vger.kernel.org
+ S:    Supported
+ F:    Documentation/hwmon/peci-cputemp.rst
+ F:    Documentation/hwmon/peci-dimmtemp.rst
+ F:    drivers/hwmon/peci/
+ PECI SUBSYSTEM
+ M:    Iwona Winiarska <iwona.winiarska@intel.com>
+ L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
+ S:    Supported
+ F:    Documentation/devicetree/bindings/peci/
+ F:    Documentation/peci/
+ F:    drivers/peci/
+ F:    include/linux/peci-cpu.h
+ F:    include/linux/peci.h
  PENSANDO ETHERNET DRIVERS
  M:    Shannon Nelson <snelson@pensando.io>
  M:    drivers@pensando.io
@@@ -15461,7 -15409,7 +15565,7 @@@ F:   drivers/pinctrl/renesas
  
  PIN CONTROLLER - SAMSUNG
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  R:    Alim Akhtar <alim.akhtar@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -15470,7 -15418,7 +15574,7 @@@ S:   Maintaine
  C:    irc://irc.libera.chat/linux-exynos
  Q:    https://patchwork.kernel.org/project/linux-samsung-soc/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/samsung.git
 -F:    Documentation/devicetree/bindings/pinctrl/samsung-pinctrl.txt
 +F:    Documentation/devicetree/bindings/pinctrl/samsung,pinctrl*yaml
  F:    drivers/pinctrl/samsung/
  F:    include/dt-bindings/pinctrl/samsung.h
  
@@@ -15487,16 -15435,6 +15591,16 @@@ M: Lakshmi Sowjanya D <lakshmi.sowjanya
  S:    Supported
  F:    drivers/pinctrl/pinctrl-thunderbay.c
  
 +PIN CONTROLLER - SUNPLUS / TIBBO
 +M:    Dvorkin Dmitry <dvorkin@tibbo.com>
 +M:    Wells Lu <wellslutw@gmail.com>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +W:    https://sunplus.atlassian.net/wiki/spaces/doc/overview
 +F:    Documentation/devicetree/bindings/pinctrl/sunplus,*
 +F:    drivers/pinctrl/sunplus/
 +F:    include/dt-bindings/pinctrl/sppctl*.h
 +
  PKTCDVD DRIVER
  M:    linux-block@vger.kernel.org
  S:    Orphan
@@@ -15699,7 -15637,6 +15803,7 @@@ F:   drivers/net/ppp/pptp.
  
  PRESSURE STALL INFORMATION (PSI)
  M:    Johannes Weiner <hannes@cmpxchg.org>
 +M:    Suren Baghdasaryan <surenb@google.com>
  S:    Maintained
  F:    include/linux/psi*
  F:    kernel/sched/psi.c
@@@ -15937,14 -15874,6 +16041,14 @@@ F: sound/soc/codecs/wcd-clsh-v2.
  F:    sound/soc/codecs/wsa881x.c
  F:    sound/soc/qcom/
  
 +QCOM EMBEDDED USB DEBUGGER (EUD)
 +M:    Souradeep Chowdhury <quic_schowdhu@quicinc.com>
 +L:    linux-arm-msm@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-eud
 +F:    Documentation/devicetree/bindings/soc/qcom/qcom,eud.yaml
 +F:    drivers/usb/misc/qcom_eud.c
 +
  QCOM IPA DRIVER
  M:    Alex Elder <elder@kernel.org>
  L:    netdev@vger.kernel.org
@@@ -16098,8 -16027,8 +16202,8 @@@ M:   Kalle Valo <kvalo@kernel.org
  L:    ath11k@lists.infradead.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
 +F:    Documentation/devicetree/bindings/net/wireless/qcom,ath11k.yaml
  F:    drivers/net/wireless/ath/ath11k/
 -F:    Documentation/devicetree/bindings/net/wireless/qcom,ath11k.txt
  
  QUALCOMM ATHEROS ATH9K WIRELESS DRIVER
  M:    Toke Høiland-Jørgensen <toke@toke.dk>
@@@ -16382,7 -16311,6 +16486,7 @@@ M:   Jason A. Donenfeld <Jason@zx2c4.com
  T:    git https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git
  S:    Maintained
  F:    drivers/char/random.c
 +F:    drivers/virt/vmgenid.c
  
  RAPIDIO SUBSYSTEM
  M:    Matt Porter <mporter@kernel.crashing.org>
@@@ -16497,8 -16425,6 +16601,8 @@@ F:   tools/testing/selftests/resctrl
  
  READ-COPY UPDATE (RCU)
  M:    "Paul E. McKenney" <paulmck@kernel.org>
 +M:    Frederic Weisbecker <frederic@kernel.org> (kernel/rcu/tree_nocb.h)
 +M:    Neeraj Upadhyay <quic_neeraju@quicinc.com> (kernel/rcu/tasks.h)
  M:    Josh Triplett <josh@joshtriplett.org>
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
@@@ -16548,8 -16474,9 +16652,8 @@@ REALTEK RTL83xx SMI DSA ROUTER CHIP
  M:    Linus Walleij <linus.walleij@linaro.org>
  M:    Alvin Šipraga <alsi@bang-olufsen.dk>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/net/dsa/realtek-smi.txt
 -F:    drivers/net/dsa/realtek-smi*
 -F:    drivers/net/dsa/rtl83*
 +F:    Documentation/devicetree/bindings/net/dsa/realtek.yaml
 +F:    drivers/net/dsa/realtek/*
  
  REALTEK WIRELESS DRIVER (rtlwifi family)
  M:    Ping-Ke Shih <pkshih@realtek.com>
@@@ -16771,15 -16698,6 +16875,15 @@@ S: Maintaine
  F:    drivers/mtd/nand/raw/r852.c
  F:    drivers/mtd/nand/raw/r852.h
  
 +RISC-V PMU DRIVERS
 +M:    Atish Patra <atishp@atishpatra.org>
 +R:    Anup Patel <anup@brainfault.org>
 +L:    linux-riscv@lists.infradead.org
 +S:    Supported
 +F:    drivers/perf/riscv_pmu.c
 +F:    drivers/perf/riscv_pmu_legacy.c
 +F:    drivers/perf/riscv_pmu_sbi.c
 +
  RISC-V ARCHITECTURE
  M:    Paul Walmsley <paul.walmsley@sifive.com>
  M:    Palmer Dabbelt <palmer@dabbelt.com>
@@@ -16794,10 -16712,8 +16898,10 @@@ K: risc
  
  RISC-V/MICROCHIP POLARFIRE SOC SUPPORT
  M:    Lewis Hanly <lewis.hanly@microchip.com>
 +M:    Conor Dooley <conor.dooley@microchip.com>
  L:    linux-riscv@lists.infradead.org
  S:    Supported
 +F:    arch/riscv/boot/dts/microchip/
  F:    drivers/mailbox/mailbox-mpfs.c
  F:    drivers/soc/microchip/
  F:    include/soc/microchip/mpfs.h
@@@ -16825,7 -16741,8 +16929,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/rockchip/rockchip_i2s_tdm.*
  
  ROCKCHIP ISP V1 DRIVER
 -M:    Helen Koike <helen.koike@collabora.com>
 -M:    Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
 +M:    Dafna Hirschfeld <dafna@fastmail.com>
  L:    linux-media@vger.kernel.org
  L:    linux-rockchip@lists.infradead.org
  S:    Maintained
@@@ -16882,7 -16799,7 +16986,7 @@@ M:   Marek Vasut <marek.vasut+renesas@gma
  L:    linux-kernel@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/mfd/bd9571mwv.txt
 +F:    Documentation/devicetree/bindings/mfd/rohm,bd9571mwv.yaml
  F:    drivers/gpio/gpio-bd9571mwv.c
  F:    drivers/mfd/bd9571mwv.c
  F:    drivers/regulator/bd9571mwv-regulator.c
@@@ -17094,7 -17011,9 +17198,7 @@@ L:   linux-s390@vger.kernel.or
  S:    Supported
  W:    http://www.ibm.com/developerworks/linux/linux390/
  F:    Documentation/s390/vfio-ap.rst
 -F:    drivers/s390/crypto/vfio_ap_drv.c
 -F:    drivers/s390/crypto/vfio_ap_ops.c
 -F:    drivers/s390/crypto/vfio_ap_private.h
 +F:    drivers/s390/crypto/vfio_ap*
  
  S390 VFIO-CCW DRIVER
  M:    Eric Farman <farman@linux.ibm.com>
@@@ -17132,7 -17051,7 +17236,7 @@@ W:   http://www.ibm.com/developerworks/li
  F:    drivers/s390/scsi/zfcp_*
  
  S3C ADC BATTERY DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-samsung-soc@vger.kernel.org
  S:    Odd Fixes
  F:    drivers/power/supply/s3c_adc_battery.c
@@@ -17177,7 -17096,7 +17281,7 @@@ F:   Documentation/admin-guide/LSM/SafeSe
  F:    security/safesetid/
  
  SAMSUNG AUDIO (ASoC) DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
@@@ -17185,7 -17104,7 +17289,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/samsung/
  
  SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -17220,7 -17139,7 +17324,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/samsung-laptop.c
  
  SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -17242,11 -17161,11 +17346,11 @@@ M:        Sylwester Nawrocki <sylvester.nawroc
  L:    linux-media@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 -F:    drivers/media/platform/s3c-camif/
 +F:    drivers/media/platform/samsung/s3c-camif/
  F:    include/media/drv-intf/s3c_camif.h
  
  SAMSUNG S3FWRN5 NFC DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Krzysztof Opasiak <k.opasiak@samsung.com>
  L:    linux-nfc@lists.01.org (subscribers-only)
  S:    Maintained
@@@ -17268,7 -17187,7 +17372,7 @@@ S:   Supporte
  F:    drivers/media/i2c/s5k5baf.c
  
  SAMSUNG S5P Security SubSystem (SSS) DRIVER
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -17282,7 -17201,7 +17386,7 @@@ M:   Sylwester Nawrocki <s.nawrocki@samsu
  L:    linux-media@vger.kernel.org
  S:    Supported
  Q:    https://patchwork.linuxtv.org/project/linux-media/list/
 -F:    drivers/media/platform/exynos4-is/
 +F:    drivers/media/platform/samsung/exynos4-is/
  
  SAMSUNG SOC CLOCK DRIVERS
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
@@@ -17303,12 -17222,12 +17407,12 @@@ F:        include/linux/clk/samsung.
  F:    include/linux/platform_data/clk-s3c2410.h
  
  SAMSUNG SPI DRIVERS
 -M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  M:    Andi Shyti <andi@etezian.org>
  L:    linux-spi@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/spi/spi-samsung.txt
 +F:    Documentation/devicetree/bindings/spi/samsung,spi*.yaml
  F:    drivers/spi/spi-s3c*
  F:    include/linux/platform_data/spi-s3c64xx.h
  F:    include/linux/spi/s3c24xx-fiq.h
@@@ -17320,19 -17239,18 +17424,19 @@@ S:        Supporte
  F:    drivers/net/ethernet/samsung/sxgbe/
  
  SAMSUNG THERMAL DRIVER
 -M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
 +M:    Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
  L:    linux-pm@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
 -S:    Supported
 -T:    git https://github.com/lmajewski/linux-samsung-thermal.git
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/thermal/samsung,exynos-thermal.yaml
  F:    drivers/thermal/samsung/
  
  SAMSUNG USB2 PHY DRIVER
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
- F:    Documentation/devicetree/bindings/phy/samsung-phy.txt
+ F:    Documentation/devicetree/bindings/phy/samsung,usb2-phy.yaml
  F:    Documentation/driver-api/phy/samsung-usb2.rst
  F:    drivers/phy/samsung/phy-exynos4210-usb2.c
  F:    drivers/phy/samsung/phy-exynos4x12-usb2.c
@@@ -17717,7 -17635,7 +17821,7 @@@ F:   include/media/i2c/rj54n1cb0c.
  SH_VOU V4L2 OUTPUT DRIVER
  L:    linux-media@vger.kernel.org
  S:    Orphan
 -F:    drivers/media/platform/sh_vou.c
 +F:    drivers/media/platform/renesas/sh_vou.c
  F:    include/media/drv-intf/sh_vou.h
  
  SI2157 MEDIA DRIVER
@@@ -18489,8 -18407,7 +18593,8 @@@ F:   Documentation/devicetree/bindings/ii
  F:    drivers/iio/imu/st_lsm6dsx/
  
  ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
 -M:    Mickael Guene <mickael.guene@st.com>
 +M:    Benjamin Mugnier <benjamin.mugnier@foss.st.com>
 +M:    Sylvain Petinot <sylvain.petinot@foss.st.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -18722,6 -18639,6 +18826,12 @@@ L:  netdev@vger.kernel.or
  S:    Maintained
  F:    drivers/net/ethernet/dlink/sundance.c
  
++SUNPLUS OCOTP DRIVER
++M:    Vincent Shih <vincent.sunplus@gmail.com>
++S:    Maintained
++F:    Documentation/devicetree/bindings/nvmem/sunplus,sp7021-ocotp.yaml
++F:    drivers/nvmem/sunplus-ocotp.c
++
  SUNPLUS RTC DRIVER
  M:    Vincent Shih <vincent.sunplus@gmail.com>
  L:    linux-rtc@vger.kernel.org
@@@ -18729,12 -18646,11 +18839,12 @@@ S:        Maintaine
  F:    Documentation/devicetree/bindings/rtc/sunplus,sp7021-rtc.yaml
  F:    drivers/rtc/rtc-sunplus.c
  
 -SUNPLUS OCOTP DRIVER
 -M:    Vincent Shih <vincent.sunplus@gmail.com>
 +SUNPLUS SPI CONTROLLER INTERFACE DRIVER
 +M:    Li-hao Kuo <lhjeff911@gmail.com>
 +L:    linux-spi@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/nvmem/sunplus,sp7021-ocotp.yaml
 -F:    drivers/nvmem/sunplus-ocotp.c
 +F:    Documentation/devicetree/bindings/spi/spi-sunplus-sp7021.yaml
 +F:    drivers/spi/spi-sunplus-sp7021.c
  
  SUPERH
  M:    Yoshinori Sato <ysato@users.sourceforge.jp>
@@@ -18905,7 -18821,6 +19015,7 @@@ SYNOPSYS DESIGNWARE I2C DRIVE
  M:    Jarkko Nikula <jarkko.nikula@linux.intel.com>
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  R:    Mika Westerberg <mika.westerberg@linux.intel.com>
 +R:    Jan Dabros <jsd@semihalf.com>
  L:    linux-i2c@vger.kernel.org
  S:    Maintained
  F:    drivers/i2c/busses/i2c-designware-*
@@@ -19288,7 -19203,6 +19398,7 @@@ TEXAS INSTRUMENTS ASoC DRIVER
  M:    Peter Ujfalusi <peter.ujfalusi@gmail.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml
  F:    sound/soc/ti/
  
  TEXAS INSTRUMENTS' DAC7612 DAC DRIVER
@@@ -19469,7 -19383,7 +19579,7 @@@ S:   Maintaine
  W:    https://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 -F:    drivers/media/platform/am437x/
 +F:    drivers/media/platform/ti/am437x/
  
  TI BANDGAP AND THERMAL DRIVER
  M:    Eduardo Valentin <edubezval@gmail.com>
@@@ -19528,7 -19442,7 +19638,7 @@@ S:   Maintaine
  W:    https://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  T:    git git://linuxtv.org/mhadli/v4l-dvb-davinci_devices.git
 -F:    drivers/media/platform/davinci/
 +F:    drivers/media/platform/ti/davinci/
  F:    include/media/davinci/
  
  TI ENHANCED QUADRATURE ENCODER PULSE (eQEP) DRIVER
@@@ -19614,8 -19528,7 +19724,8 @@@ W:   http://linuxtv.org
  Q:    http://patchwork.linuxtv.org/project/linux-media/list/
  F:    Documentation/devicetree/bindings/media/ti,cal.yaml
  F:    Documentation/devicetree/bindings/media/ti,vpe.yaml
 -F:    drivers/media/platform/ti-vpe/
 +F:    drivers/media/platform/ti/cal/
 +F:    drivers/media/platform/ti/vpe/
  
  TI WILINK WIRELESS DRIVERS
  L:    linux-wireless@vger.kernel.org
@@@ -19686,15 -19599,6 +19796,15 @@@ S: Maintaine
  F:    Documentation/hwmon/tmp401.rst
  F:    drivers/hwmon/tmp401.c
  
 +TMP464 HARDWARE MONITOR DRIVER
 +M:    Agathe Porte <agathe.porte@nokia.com>
 +M:    Guenter Roeck <linux@roeck-us.net>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/hwmon/ti,tmp464.yaml
 +F:    Documentation/hwmon/tmp464.rst
 +F:    drivers/hwmon/tmp464.c
 +
  TMP513 HARDWARE MONITOR DRIVER
  M:    Eric Tremblay <etremblay@distech-controls.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -19934,11 -19838,6 +20044,11 @@@ W: http://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/pci/tw686x/
  
 +U-BOOT ENVIRONMENT VARIABLES
 +M:    Rafał Miłecki <rafal@milecki.pl>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/nvmem/u-boot,env.yaml
 +
  UACCE ACCELERATOR FRAMEWORK
  M:    Zhangfei Gao <zhangfei.gao@linaro.org>
  M:    Zhou Wang <wangzhou1@hisilicon.com>
@@@ -20041,7 -19940,6 +20151,7 @@@ R:   Alim Akhtar <alim.akhtar@samsung.com
  R:    Avri Altman <avri.altman@wdc.com>
  L:    linux-scsi@vger.kernel.org
  S:    Supported
 +F:    Documentation/devicetree/bindings/ufs/
  F:    Documentation/scsi/ufs.rst
  F:    drivers/scsi/ufs/
  
@@@ -20516,13 -20414,6 +20626,13 @@@ L: kvm@vger.kernel.or
  S:    Maintained
  F:    drivers/vfio/fsl-mc/
  
 +VFIO HISILICON PCI DRIVER
 +M:    Longfang Liu <liulongfang@huawei.com>
 +M:    Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
 +L:    kvm@vger.kernel.org
 +S:    Maintained
 +F:    drivers/vfio/pci/hisilicon/
 +
  VFIO MEDIATED DEVICE DRIVERS
  M:    Kirti Wankhede <kwankhede@nvidia.com>
  L:    kvm@vger.kernel.org
@@@ -20532,28 -20423,12 +20642,28 @@@ F:        drivers/vfio/mdev
  F:    include/linux/mdev.h
  F:    samples/vfio-mdev/
  
 +VFIO PCI DEVICE SPECIFIC DRIVERS
 +R:    Jason Gunthorpe <jgg@nvidia.com>
 +R:    Yishai Hadas <yishaih@nvidia.com>
 +R:    Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
 +R:    Kevin Tian <kevin.tian@intel.com>
 +L:    kvm@vger.kernel.org
 +S:    Maintained
 +P:    Documentation/driver-api/vfio-pci-device-specific-driver-acceptance.rst
 +F:    drivers/vfio/pci/*/
 +
  VFIO PLATFORM DRIVER
  M:    Eric Auger <eric.auger@redhat.com>
  L:    kvm@vger.kernel.org
  S:    Maintained
  F:    drivers/vfio/platform/
  
 +VFIO MLX5 PCI DRIVER
 +M:    Yishai Hadas <yishaih@nvidia.com>
 +L:    kvm@vger.kernel.org
 +S:    Maintained
 +F:    drivers/vfio/pci/mlx5/
 +
  VGA_SWITCHEROO
  R:    Lukas Wunner <lukas@wunner.de>
  S:    Maintained
@@@ -20617,8 -20492,8 +20727,8 @@@ F:   drivers/media/common/videobuf2/
  F:    include/media/videobuf2-*
  
  VIMC VIRTUAL MEDIA CONTROLLER DRIVER
 -M:    Helen Koike <helen.koike@collabora.com>
 -R:    Shuah Khan <skhan@linuxfoundation.org>
 +M:    Shuah Khan <skhan@linuxfoundation.org>
 +R:    Kieran Bingham <kieran.bingham@ideasonboard.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  W:    https://linuxtv.org
@@@ -20873,33 -20748,30 +20983,33 @@@ F:        tools/testing/vsock
  
  VMWARE BALLOON DRIVER
  M:    Nadav Amit <namit@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    drivers/misc/vmw_balloon.c
  
  VMWARE HYPERVISOR INTERFACE
 -M:    Deep Shah <sdeep@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +M:    Srivatsa S. Bhat (VMware) <srivatsa@csail.mit.edu>
 +M:    Alexey Makhalov <amakhalov@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    virtualization@lists.linux-foundation.org
 +L:    x86@kernel.org
  S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/vmware
  F:    arch/x86/include/asm/vmware.h
  F:    arch/x86/kernel/cpu/vmware.c
  
  VMWARE PVRDMA DRIVER
  M:    Bryan Tan <bryantan@vmware.com>
  M:    Vishnu Dasa <vdasa@vmware.com>
 -M:    VMware PV-Drivers <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
  F:    drivers/infiniband/hw/vmw_pvrdma/
  
  VMware PVSCSI driver
  M:    Vishal Bhakta <vbhakta@vmware.com>
 -M:    VMware PV-Drivers <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-scsi@vger.kernel.org
  S:    Maintained
  F:    drivers/scsi/vmw_pvscsi.c
@@@ -20907,23 -20779,23 +21017,24 @@@ F:        drivers/scsi/vmw_pvscsi.
  
  VMWARE VIRTUAL PTP CLOCK DRIVER
  M:    Vivek Thampi <vithampi@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    netdev@vger.kernel.org
  S:    Supported
  F:    drivers/ptp/ptp_vmw.c
  
  VMWARE VMCI DRIVER
- M:    Jorgen Hansen <jhansen@vmware.com>
+ M:    Bryan Tan <bryantan@vmware.com>
+ M:    Rajesh Jalisatgi <rjalisatgi@vmware.com>
  M:    Vishnu Dasa <vdasa@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-kernel@vger.kernel.org
 -L:    pv-drivers@vmware.com (private)
  S:    Maintained
  F:    drivers/misc/vmw_vmci/
  
  VMWARE VMMOUSE SUBDRIVER
 -M:    "VMware Graphics" <linux-graphics-maintainer@vmware.com>
 -M:    "VMware, Inc." <pv-drivers@vmware.com>
 +M:    Zack Rusin <zackr@vmware.com>
 +R:    VMware Graphics Reviewers <linux-graphics-maintainer@vmware.com>
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    linux-input@vger.kernel.org
  S:    Maintained
  F:    drivers/input/mouse/vmmouse.c
@@@ -20931,7 -20803,7 +21042,7 @@@ F:   drivers/input/mouse/vmmouse.
  
  VMWARE VMXNET3 ETHERNET DRIVER
  M:    Ronak Doshi <doshir@vmware.com>
 -M:    pv-drivers@vmware.com
 +R:    VMware PV-Drivers Reviewers <pv-drivers@vmware.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/vmxnet3/
@@@ -21307,7 -21179,7 +21418,7 @@@ L:   linux-media@vger.kernel.or
  S:    Maintained
  W:    https://linuxtv.org
  T:    git git://linuxtv.org/media_tree.git
 -F:    drivers/media/tuners/tuner-xc2028.*
 +F:    drivers/media/tuners/xc2028.*
  
  XDP (eXpress Data Path)
  M:    Alexei Starovoitov <ast@kernel.org>
@@@ -21527,11 -21399,6 +21638,11 @@@ T: git https://github.com/Xilinx/linux-
  F:    Documentation/devicetree/bindings/phy/xlnx,zynqmp-psgtr.yaml
  F:    drivers/phy/xilinx/phy-zynqmp.c
  
 +XILINX ZYNQMP SHA3 DRIVER
 +M:    Harsha <harsha.harsha@xilinx.com>
 +S:    Maintained
 +F:    drivers/crypto/xilinx/zynqmp-sha.c
 +
  XILINX EVENT MANAGEMENT DRIVER
  M:    Abhyuday Godhasara <abhyuday.godhasara@xilinx.com>
  S:    Maintained
@@@ -21549,6 -21416,7 +21660,6 @@@ M:   George Cherian <gcherian@marvell.com
  L:    linux-i2c@vger.kernel.org
  S:    Supported
  W:    http://www.marvell.com
 -F:    Documentation/devicetree/bindings/i2c/i2c-xlp9xx.txt
  F:    drivers/i2c/busses/i2c-xlp9xx.c
  
  XRA1403 GPIO EXPANDER
@@@ -21711,6 -21579,7 +21822,6 @@@ THE RES
  M:    Linus Torvalds <torvalds@linux-foundation.org>
  L:    linux-kernel@vger.kernel.org
  S:    Buried alive in reporters
 -Q:    http://patchwork.kernel.org/project/LKML/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  F:    *
  F:    */
diff --combined arch/arm64/Kconfig
@@@ -10,7 -10,6 +10,7 @@@ config ARM6
        select ACPI_SPCR_TABLE if ACPI
        select ACPI_PPTT if ACPI
        select ARCH_HAS_DEBUG_WX
 +      select ARCH_BINFMT_ELF_EXTRA_PHDRS
        select ARCH_BINFMT_ELF_STATE
        select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
        select ARCH_ENABLE_HUGEPAGE_MIGRATION if HUGETLB_PAGE && MIGRATION
@@@ -19,7 -18,6 +19,7 @@@
        select ARCH_ENABLE_SPLIT_PMD_PTLOCK if PGTABLE_LEVELS > 2
        select ARCH_ENABLE_THP_MIGRATION if TRANSPARENT_HUGEPAGE
        select ARCH_HAS_CACHE_LINE_SIZE
 +      select ARCH_HAS_CURRENT_STACK_POINTER
        select ARCH_HAS_DEBUG_VIRTUAL
        select ARCH_HAS_DEBUG_VM_PGTABLE
        select ARCH_HAS_DMA_PREP_COHERENT
        select HAVE_PERF_EVENTS
        select HAVE_PERF_REGS
        select HAVE_PERF_USER_STACK_DUMP
 +      select HAVE_PREEMPT_DYNAMIC_KEY
        select HAVE_REGS_AND_STACK_ACCESS_API
        select HAVE_POSIX_CPU_TIMERS_TASK_WORK
        select HAVE_FUNCTION_ARG_ACCESS_API
        select IOMMU_DMA if IOMMU_SUPPORT
        select IRQ_DOMAIN
        select IRQ_FORCED_THREADING
 -      select KASAN_VMALLOC if KASAN_GENERIC
 +      select KASAN_VMALLOC if KASAN
        select MODULES_USE_ELF_RELA
        select NEED_DMA_MAP_STATE
        select NEED_SG_DMA_LENGTH
@@@ -686,7 -683,6 +686,7 @@@ config ARM64_ERRATUM_205167
  
  config ARM64_ERRATUM_2077057
        bool "Cortex-A510: 2077057: workaround software-step corrupting SPSR_EL2"
 +      default y
        help
          This option adds the workaround for ARM Cortex-A510 erratum 2077057.
          Affected Cortex-A510 may corrupt SPSR_EL2 when the a step exception is
@@@ -811,7 -807,7 +811,7 @@@ config ARM64_ERRATUM_222448
  
  config ARM64_ERRATUM_2064142
        bool "Cortex-A510: 2064142: workaround TRBE register writes while disabled"
-       depends on COMPILE_TEST # Until the CoreSight TRBE driver changes are in
+       depends on CORESIGHT_TRBE
        default y
        help
          This option adds the workaround for ARM Cortex-A510 erratum 2064142.
  
  config ARM64_ERRATUM_2038923
        bool "Cortex-A510: 2038923: workaround TRBE corruption with enable"
-       depends on COMPILE_TEST # Until the CoreSight TRBE driver changes are in
+       depends on CORESIGHT_TRBE
        default y
        help
          This option adds the workaround for ARM Cortex-A510 erratum 2038923.
  
  config ARM64_ERRATUM_1902691
        bool "Cortex-A510: 1902691: workaround TRBE trace corruption"
-       depends on COMPILE_TEST # Until the CoreSight TRBE driver changes are in
+       depends on CORESIGHT_TRBE
        default y
        help
          This option adds the workaround for ARM Cortex-A510 erratum 1902691.
@@@ -895,17 -891,13 +895,17 @@@ config CAVIUM_ERRATUM_2314
          If unsure, say Y.
  
  config CAVIUM_ERRATUM_23154
 -      bool "Cavium erratum 23154: Access to ICC_IAR1_EL1 is not sync'ed"
 +      bool "Cavium errata 23154 and 38545: GICv3 lacks HW synchronisation"
        default y
        help
 -        The gicv3 of ThunderX requires a modified version for
 +        The ThunderX GICv3 implementation requires a modified version for
          reading the IAR status to ensure data synchronization
          (access to icc_iar1_el1 is not sync'ed before and after).
  
 +        It also suffers from erratum 38545 (also present on Marvell's
 +        OcteonTX and OcteonTX2), resulting in deactivated interrupts being
 +        spuriously presented to the CPU interface.
 +
          If unsure, say Y.
  
  config CAVIUM_ERRATUM_27456
@@@ -1260,7 -1252,10 +1260,7 @@@ config HW_PERF_EVENT
        def_bool y
        depends on ARM_PMU
  
 -config ARCH_HAS_FILTER_PGPROT
 -      def_bool y
 -
 -# Supported by clang >= 7.0
 +# Supported by clang >= 7.0 or GCC >= 12.0.0
  config CC_HAVE_SHADOW_CALL_STACK
        def_bool $(cc-option, -fsanitize=shadow-call-stack -ffixed-x18)
  
@@@ -1388,15 -1383,6 +1388,15 @@@ config UNMAP_KERNEL_AT_EL
  
          If unsure, say Y.
  
 +config MITIGATE_SPECTRE_BRANCH_HISTORY
 +      bool "Mitigate Spectre style attacks against branch history" if EXPERT
 +      default y
 +      help
 +        Speculation attacks against some high-performance processors can
 +        make use of branch history to influence future speculation.
 +        When taking an exception from user-space, a sequence of branches
 +        or a firmware call overwrites the branch history.
 +
  config RODATA_FULL_DEFAULT_ENABLED
        bool "Apply r/o permissions of VM areas also to their linear aliases"
        default y
                                        compatible = "qcom,fastrpc";
                                        qcom,smd-channels = "fastrpcsmd-apps-dsp";
                                        label = "adsp";
+                                       qcom,non-secure-domain;
  
                                        #address-cells = <1>;
                                        #size-cells = <0>;
                                        clock-names = "ref", "sleep";
                                        resets = <&gcc GCC_USB2A_PHY_BCR>, <&usb 0>;
                                        reset-names = "phy", "por";
 -                                      qcom,init-seq = /bits/ 8 <0x0 0x44
 -                                              0x1 0x6b 0x2 0x24 0x3 0x13>;
 +                                      qcom,init-seq = /bits/ 8 <0x0 0x44>,
 +                                                               <0x1 0x6b>,
 +                                                               <0x2 0x24>,
 +                                                               <0x3 0x13>;
                                };
                        };
                };
@@@ -12,7 -12,6 +12,7 @@@
  #include <dt-bindings/clock/qcom,lpass-sdm845.h>
  #include <dt-bindings/clock/qcom,rpmh.h>
  #include <dt-bindings/clock/qcom,videocc-sdm845.h>
 +#include <dt-bindings/dma/qcom-gpi.h>
  #include <dt-bindings/gpio/gpio.h>
  #include <dt-bindings/interconnect/qcom,osm-l3.h>
  #include <dt-bindings/interconnect/qcom,sdm845.h>
                #size-cells = <2>;
                ranges;
  
 -              hyp_mem: memory@85700000 {
 +              hyp_mem: hyp-mem@85700000 {
                        reg = <0 0x85700000 0 0x600000>;
                        no-map;
                };
  
 -              xbl_mem: memory@85e00000 {
 +              xbl_mem: xbl-mem@85e00000 {
                        reg = <0 0x85e00000 0 0x100000>;
                        no-map;
                };
  
 -              aop_mem: memory@85fc0000 {
 +              aop_mem: aop-mem@85fc0000 {
                        reg = <0 0x85fc0000 0 0x20000>;
                        no-map;
                };
  
 -              aop_cmd_db_mem: memory@85fe0000 {
 +              aop_cmd_db_mem: aop-cmd-db-mem@85fe0000 {
                        compatible = "qcom,cmd-db";
                        reg = <0x0 0x85fe0000 0 0x20000>;
                        no-map;
                        hwlocks = <&tcsr_mutex 3>;
                };
  
 -              tz_mem: memory@86200000 {
 +              tz_mem: tz@86200000 {
                        reg = <0 0x86200000 0 0x2d00000>;
                        no-map;
                };
  
 -              rmtfs_mem: memory@88f00000 {
 +              rmtfs_mem: rmtfs@88f00000 {
                        compatible = "qcom,rmtfs-mem";
                        reg = <0 0x88f00000 0 0x200000>;
                        no-map;
                        qcom,vmid = <15>;
                };
  
 -              qseecom_mem: memory@8ab00000 {
 +              qseecom_mem: qseecom@8ab00000 {
                        reg = <0 0x8ab00000 0 0x1400000>;
                        no-map;
                };
  
 -              camera_mem: memory@8bf00000 {
 +              camera_mem: camera-mem@8bf00000 {
                        reg = <0 0x8bf00000 0 0x500000>;
                        no-map;
                };
  
 -              ipa_fw_mem: memory@8c400000 {
 +              ipa_fw_mem: ipa-fw@8c400000 {
                        reg = <0 0x8c400000 0 0x10000>;
                        no-map;
                };
  
 -              ipa_gsi_mem: memory@8c410000 {
 +              ipa_gsi_mem: ipa-gsi@8c410000 {
                        reg = <0 0x8c410000 0 0x5000>;
                        no-map;
                };
  
 -              gpu_mem: memory@8c415000 {
 +              gpu_mem: gpu@8c415000 {
                        reg = <0 0x8c415000 0 0x2000>;
                        no-map;
                };
  
 -              adsp_mem: memory@8c500000 {
 +              adsp_mem: adsp@8c500000 {
                        reg = <0 0x8c500000 0 0x1a00000>;
                        no-map;
                };
  
 -              wlan_msa_mem: memory@8df00000 {
 +              wlan_msa_mem: wlan-msa@8df00000 {
                        reg = <0 0x8df00000 0 0x100000>;
                        no-map;
                };
  
 -              mpss_region: memory@8e000000 {
 +              mpss_region: mpss@8e000000 {
                        reg = <0 0x8e000000 0 0x7800000>;
                        no-map;
                };
  
 -              venus_mem: memory@95800000 {
 +              venus_mem: venus@95800000 {
                        reg = <0 0x95800000 0 0x500000>;
                        no-map;
                };
  
 -              cdsp_mem: memory@95d00000 {
 +              cdsp_mem: cdsp@95d00000 {
                        reg = <0 0x95d00000 0 0x800000>;
                        no-map;
                };
  
 -              mba_region: memory@96500000 {
 +              mba_region: mba@96500000 {
                        reg = <0 0x96500000 0 0x200000>;
                        no-map;
                };
  
 -              slpi_mem: memory@96700000 {
 +              slpi_mem: slpi@96700000 {
                        reg = <0 0x96700000 0 0x1400000>;
                        no-map;
                };
  
 -              spss_mem: memory@97b00000 {
 +              spss_mem: spss@97b00000 {
                        reg = <0 0x97b00000 0 0x100000>;
                        no-map;
                };
                        apr {
                                compatible = "qcom,apr-v2";
                                qcom,glink-channels = "apr_audio_svc";
 -                              qcom,apr-domain = <APR_DOMAIN_ADSP>;
 +                              qcom,domain = <APR_DOMAIN_ADSP>;
                                #address-cells = <1>;
                                #size-cells = <0>;
                                qcom,intents = <512 20>;
                                compatible = "qcom,fastrpc";
                                qcom,glink-channels = "fastrpcglink-apps-dsp";
                                label = "adsp";
+                               qcom,non-secure-domain;
                                #address-cells = <1>;
                                #size-cells = <0>;
  
                                compatible = "qcom,fastrpc";
                                qcom,glink-channels = "fastrpcglink-apps-dsp";
                                label = "cdsp";
+                               qcom,non-secure-domain;
                                #address-cells = <1>;
                                #size-cells = <0>;
  
                        };
                };
  
 +              gpi_dma0: dma-controller@800000 {
 +                      #dma-cells = <3>;
 +                      compatible = "qcom,sdm845-gpi-dma";
 +                      reg = <0 0x00800000 0 0x60000>;
 +                      interrupts = <GIC_SPI 244 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 249 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 250 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 251 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 252 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 253 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 254 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 255 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>;
 +                      dma-channels = <13>;
 +                      dma-channel-mask = <0xfa>;
 +                      iommus = <&apps_smmu 0x0016 0x0>;
 +                      status = "disabled";
 +              };
 +
                qupv3_id_0: geniqup@8c0000 {
                        compatible = "qcom,geni-se-qup";
                        reg = <0 0x008c0000 0 0x6000>;
                                interconnects = <&aggre1_noc MASTER_QUP_1 0 &config_noc SLAVE_BLSP_1 0>,
                                                <&gladiator_noc MASTER_APPSS_PROC 0 &config_noc SLAVE_BLSP_1 0>;
                                interconnect-names = "qup-core", "qup-config";
 +                              dmas = <&gpi_dma0 0 0 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 0 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                status = "disabled";
                        };
  
                        };
                };
  
 +              gpi_dma1: dma-controller@0xa00000 {
 +                      #dma-cells = <3>;
 +                      compatible = "qcom,sdm845-gpi-dma";
 +                      reg = <0 0x00a00000 0 0x60000>;
 +                      interrupts = <GIC_SPI 279 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 280 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 281 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 284 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 293 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 294 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 295 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 296 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 297 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 298 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 299 IRQ_TYPE_LEVEL_HIGH>;
 +                      dma-channels = <13>;
 +                      dma-channel-mask = <0xfa>;
 +                      iommus = <&apps_smmu 0x06d6 0x0>;
 +                      status = "disabled";
 +              };
 +
                qupv3_id_1: geniqup@ac0000 {
                        compatible = "qcom,geni-se-qup";
                        reg = <0 0x00ac0000 0 0x6000>;
                        };
                };
  
 -              system-cache-controller@1100000 {
 +              llcc: system-cache-controller@1100000 {
                        compatible = "qcom,sdm845-llcc";
                        reg = <0 0x01100000 0 0x200000>, <0 0x01300000 0 0x50000>;
                        reg-names = "llcc_base", "llcc_broadcast_base";
                                               "gpio2", "gpio3";
                                        function = "qup0";
                                };
 +
 +                              config {
 +                                      pins = "gpio0", "gpio1",
 +                                             "gpio2", "gpio3";
 +                                      drive-strength = <6>;
 +                                      bias-disable;
 +                              };
                        };
  
                        qup_spi1_default: qup-spi1-default {
                                        #clock-cells = <0>;
                                        clock-frequency = <9600000>;
                                        clock-output-names = "mclk";
 -                                      qcom,micbias1-millivolt = <1800>;
 -                                      qcom,micbias2-millivolt = <1800>;
 -                                      qcom,micbias3-millivolt = <1800>;
 -                                      qcom,micbias4-millivolt = <1800>;
 +                                      qcom,micbias1-microvolt = <1800000>;
 +                                      qcom,micbias2-microvolt = <1800000>;
 +                                      qcom,micbias3-microvolt = <1800000>;
 +                                      qcom,micbias4-microvolt = <1800000>;
  
                                        #address-cells = <1>;
                                        #size-cells = <1>;
                        #clock-cells = <1>;
                        #reset-cells = <1>;
                        #power-domain-cells = <1>;
 +                      clocks = <&rpmhcc RPMH_CXO_CLK>;
 +                      clock-names = "bi_tcxo";
                };
  
                dsi_opp_table: dsi-opp-table {
                };
  
                aoss_qmp: power-controller@c300000 {
 -                      compatible = "qcom,sdm845-aoss-qmp";
 +                      compatible = "qcom,sdm845-aoss-qmp", "qcom,aoss-qmp";
                        reg = <0 0x0c300000 0 0x100000>;
                        interrupts = <GIC_SPI 389 IRQ_TYPE_EDGE_RISING>;
                        mboxes = <&apss_shared 0>;
                        };
                };
  
 -              gpu-thermal-top {
 +              gpu-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              gpu-thermal-bottom {
 +              gpu-bottom-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                                reg = <0 0x00880000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>;
 +                              dmas = <&gpi_dma0 0 0 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 0 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c0_default>;
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>;
 +                              dmas = <&gpi_dma0 0 0 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 0 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi0_default>;
                                interrupts = <GIC_SPI 601 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00884000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S1_CLK>;
 +                              dmas = <&gpi_dma0 0 1 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 1 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c1_default>;
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S1_CLK>;
 +                              dmas = <&gpi_dma0 0 1 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 1 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi1_default>;
                                interrupts = <GIC_SPI 602 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00888000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S2_CLK>;
 +                              dmas = <&gpi_dma0 0 2 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 2 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c2_default>;
                                interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S2_CLK>;
 +                              dmas = <&gpi_dma0 0 2 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 2 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi2_default>;
                                interrupts = <GIC_SPI 603 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x0088c000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S3_CLK>;
 +                              dmas = <&gpi_dma0 0 3 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 3 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c3_default>;
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S3_CLK>;
 +                              dmas = <&gpi_dma0 0 3 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 3 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi3_default>;
                                interrupts = <GIC_SPI 604 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00890000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>;
 +                              dmas = <&gpi_dma0 0 4 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 4 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c4_default>;
                                interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S4_CLK>;
 +                              dmas = <&gpi_dma0 0 4 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 4 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi4_default>;
                                interrupts = <GIC_SPI 605 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00894000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S5_CLK>;
 +                              dmas = <&gpi_dma0 0 5 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 5 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c5_default>;
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S5_CLK>;
 +                              dmas = <&gpi_dma0 0 5 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 5 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi5_default>;
                                interrupts = <GIC_SPI 606 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00898000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S6_CLK>;
 +                              dmas = <&gpi_dma0 0 6 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 6 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c6_default>;
                                interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S6_CLK>;
 +                              dmas = <&gpi_dma0 0 6 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 6 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi6_default>;
                                interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x0089c000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S7_CLK>;
 +                              dmas = <&gpi_dma0 0 7 QCOM_GPI_I2C>,
 +                                     <&gpi_dma0 1 7 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c7_default>;
                                interrupts = <GIC_SPI 607 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP0_S7_CLK>;
 +                              dmas = <&gpi_dma0 0 7 QCOM_GPI_SPI>,
 +                                     <&gpi_dma0 1 7 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi7_default>;
                                interrupts = <GIC_SPI 608 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00a80000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S0_CLK>;
 +                              dmas = <&gpi_dma1 0 0 QCOM_GPI_I2C>,
 +                                     <&gpi_dma1 1 0 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c8_default>;
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S0_CLK>;
 +                              dmas = <&gpi_dma1 0 0 QCOM_GPI_SPI>,
 +                                     <&gpi_dma1 1 0 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi8_default>;
                                interrupts = <GIC_SPI 353 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00a84000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S1_CLK>;
 +                              dmas = <&gpi_dma1 0 1 QCOM_GPI_I2C>,
 +                                     <&gpi_dma1 1 1 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c9_default>;
                                interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S1_CLK>;
 +                              dmas = <&gpi_dma1 0 1 QCOM_GPI_SPI>,
 +                                     <&gpi_dma1 1 1 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi9_default>;
                                interrupts = <GIC_SPI 354 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00a88000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
 +                              dmas = <&gpi_dma1 0 2 QCOM_GPI_I2C>,
 +                                     <&gpi_dma1 1 2 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c10_default>;
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S2_CLK>;
 +                              dmas = <&gpi_dma1 0 2 QCOM_GPI_SPI>,
 +                                     <&gpi_dma1 1 2 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi10_default>;
                                interrupts = <GIC_SPI 355 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00a8c000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S3_CLK>;
 +                              dmas = <&gpi_dma1 0 3 QCOM_GPI_I2C>,
 +                                     <&gpi_dma1 1 3 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c11_default>;
                                interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S3_CLK>;
 +                              dmas = <&gpi_dma1 0 3 QCOM_GPI_SPI>,
 +                                     <&gpi_dma1 1 3 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi11_default>;
                                interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00a90000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S4_CLK>;
 +                              dmas = <&gpi_dma1 0 4 QCOM_GPI_I2C>,
 +                                     <&gpi_dma1 1 4 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c12_default>;
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S4_CLK>;
 +                              dmas = <&gpi_dma1 0 4 QCOM_GPI_SPI>,
 +                                     <&gpi_dma1 1 4 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi12_default>;
                                interrupts = <GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x0094000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S5_CLK>;
 +                              dmas = <&gpi_dma2 0 5 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 5 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c16_default>;
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP1_S5_CLK>;
 +                              dmas = <&gpi_dma2 0 5 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 5 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi16_default>;
                                interrupts = <GIC_SPI 358 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00c80000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S0_CLK>;
 +                              dmas = <&gpi_dma2 0 0 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 0 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c17_default>;
                                interrupts = <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S0_CLK>;
 +                              dmas = <&gpi_dma2 0 0 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 0 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi17_default>;
                                interrupts = <GIC_SPI 373 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00c84000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S1_CLK>;
 +                              dmas = <&gpi_dma2 0 1 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 1 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c18_default>;
                                interrupts = <GIC_SPI 583 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S1_CLK>;
 +                              dmas = <&gpi_dma2 0 1 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 1 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi18_default>;
                                interrupts = <GIC_SPI 583 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00c88000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S2_CLK>;
 +                              dmas = <&gpi_dma2 0 2 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 2 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c19_default>;
                                interrupts = <GIC_SPI 584 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S2_CLK>;
 +                              dmas = <&gpi_dma2 0 2 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 2 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi19_default>;
                                interrupts = <GIC_SPI 584 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00c8c000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S3_CLK>;
 +                              dmas = <&gpi_dma2 0 3 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 3 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c13_default>;
                                interrupts = <GIC_SPI 585 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S3_CLK>;
 +                              dmas = <&gpi_dma2 0 3 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 3 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi13_default>;
                                interrupts = <GIC_SPI 585 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00c90000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S4_CLK>;
 +                              dmas = <&gpi_dma2 0 4 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 4 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c14_default>;
                                interrupts = <GIC_SPI 586 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S4_CLK>;
 +                              dmas = <&gpi_dma2 0 4 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 4 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi14_default>;
                                interrupts = <GIC_SPI 586 IRQ_TYPE_LEVEL_HIGH>;
                                reg = <0 0x00c94000 0 0x4000>;
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S5_CLK>;
 +                              dmas = <&gpi_dma2 0 5 QCOM_GPI_I2C>,
 +                                     <&gpi_dma2 1 5 QCOM_GPI_I2C>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_i2c15_default>;
                                interrupts = <GIC_SPI 587 IRQ_TYPE_LEVEL_HIGH>;
                                reg-names = "se";
                                clock-names = "se";
                                clocks = <&gcc GCC_QUPV3_WRAP2_S5_CLK>;
 +                              dmas = <&gpi_dma2 0 5 QCOM_GPI_SPI>,
 +                                     <&gpi_dma2 1 5 QCOM_GPI_SPI>;
 +                              dma-names = "tx", "rx";
                                pinctrl-names = "default";
                                pinctrl-0 = <&qup_spi15_default>;
                                interrupts = <GIC_SPI 587 IRQ_TYPE_LEVEL_HIGH>;
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "sdsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "cdsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "adsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                        qcom,tcs-offset = <0xd00>;
                        qcom,drv-id = <2>;
                        qcom,tcs-config = <ACTIVE_TCS  2>,
 -                                        <SLEEP_TCS   1>,
 -                                        <WAKE_TCS    1>,
 -                                        <CONTROL_TCS 0>;
 +                                        <SLEEP_TCS   3>,
 +                                        <WAKE_TCS    3>,
 +                                        <CONTROL_TCS 1>;
  
                        rpmhcc: clock-controller {
                                compatible = "qcom,sm8150-rpmh-clk";
                        #freq-domain-cells = <1>;
                };
  
 +              lmh_cluster1: lmh@18350800 {
 +                      compatible = "qcom,sm8150-lmh";
 +                      reg = <0 0x18350800 0 0x400>;
 +                      interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>;
 +                      cpus = <&CPU4>;
 +                      qcom,lmh-temp-arm-millicelsius = <60000>;
 +                      qcom,lmh-temp-low-millicelsius = <84500>;
 +                      qcom,lmh-temp-high-millicelsius = <85000>;
 +                      interrupt-controller;
 +                      #interrupt-cells = <1>;
 +              };
 +
 +              lmh_cluster0: lmh@18358800 {
 +                      compatible = "qcom,sm8150-lmh";
 +                      reg = <0 0x18358800 0 0x400>;
 +                      interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>;
 +                      cpus = <&CPU0>;
 +                      qcom,lmh-temp-arm-millicelsius = <60000>;
 +                      qcom,lmh-temp-low-millicelsius = <84500>;
 +                      qcom,lmh-temp-high-millicelsius = <85000>;
 +                      interrupt-controller;
 +                      #interrupt-cells = <1>;
 +              };
 +
                wifi: wifi@18800000 {
                        compatible = "qcom,wcn3990-wifi";
                        reg = <0 0x18800000 0 0x800000>;
                        };
                };
  
 -              gpu-thermal-top {
 +              gpu-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              gpu-thermal-bottom {
 +              gpu-bottom-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
@@@ -98,8 -98,6 +98,8 @@@
                        capacity-dmips-mhz = <448>;
                        dynamic-power-coefficient = <205>;
                        next-level-cache = <&L2_0>;
 +                      power-domains = <&CPU_PD0>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        operating-points-v2 = <&cpu0_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <448>;
                        dynamic-power-coefficient = <205>;
                        next-level-cache = <&L2_100>;
 +                      power-domains = <&CPU_PD1>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        operating-points-v2 = <&cpu0_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <448>;
                        dynamic-power-coefficient = <205>;
                        next-level-cache = <&L2_200>;
 +                      power-domains = <&CPU_PD2>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        operating-points-v2 = <&cpu0_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <448>;
                        dynamic-power-coefficient = <205>;
                        next-level-cache = <&L2_300>;
 +                      power-domains = <&CPU_PD3>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 0>;
                        operating-points-v2 = <&cpu0_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <379>;
                        next-level-cache = <&L2_400>;
 +                      power-domains = <&CPU_PD4>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 1>;
                        operating-points-v2 = <&cpu4_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <379>;
                        next-level-cache = <&L2_500>;
 +                      power-domains = <&CPU_PD5>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 1>;
                        operating-points-v2 = <&cpu4_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <379>;
                        next-level-cache = <&L2_600>;
 +                      power-domains = <&CPU_PD6>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 1>;
                        operating-points-v2 = <&cpu4_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                        capacity-dmips-mhz = <1024>;
                        dynamic-power-coefficient = <444>;
                        next-level-cache = <&L2_700>;
 +                      power-domains = <&CPU_PD7>;
 +                      power-domain-names = "psci";
                        qcom,freq-domain = <&cpufreq_hw 2>;
                        operating-points-v2 = <&cpu7_opp_table>;
                        interconnects = <&gem_noc MASTER_AMPSS_M0 &mc_virt SLAVE_EBI_CH0>,
                                };
                        };
                };
 +
 +              idle-states {
 +                      entry-method = "psci";
 +
 +                      LITTLE_CPU_SLEEP_0: cpu-sleep-0-0 {
 +                              compatible = "arm,idle-state";
 +                              idle-state-name = "silver-rail-power-collapse";
 +                              arm,psci-suspend-param = <0x40000004>;
 +                              entry-latency-us = <360>;
 +                              exit-latency-us = <531>;
 +                              min-residency-us = <3934>;
 +                              local-timer-stop;
 +                      };
 +
 +                      BIG_CPU_SLEEP_0: cpu-sleep-1-0 {
 +                              compatible = "arm,idle-state";
 +                              idle-state-name = "gold-rail-power-collapse";
 +                              arm,psci-suspend-param = <0x40000004>;
 +                              entry-latency-us = <702>;
 +                              exit-latency-us = <1061>;
 +                              min-residency-us = <4488>;
 +                              local-timer-stop;
 +                      };
 +              };
 +
 +              domain-idle-states {
 +                      CLUSTER_SLEEP_0: cluster-sleep-0 {
 +                              compatible = "domain-idle-state";
 +                              idle-state-name = "cluster-llcc-off";
 +                              arm,psci-suspend-param = <0x4100c244>;
 +                              entry-latency-us = <3264>;
 +                              exit-latency-us = <6562>;
 +                              min-residency-us = <9987>;
 +                              local-timer-stop;
 +                      };
 +              };
        };
  
        cpu0_opp_table: cpu0_opp_table {
        psci {
                compatible = "arm,psci-1.0";
                method = "smc";
 +
 +              CPU_PD0: cpu0 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&LITTLE_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD1: cpu1 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&LITTLE_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD2: cpu2 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&LITTLE_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD3: cpu3 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&LITTLE_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD4: cpu4 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&BIG_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD5: cpu5 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&BIG_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD6: cpu6 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&BIG_CPU_SLEEP_0>;
 +              };
 +
 +              CPU_PD7: cpu7 {
 +                      #power-domain-cells = <0>;
 +                      power-domains = <&CLUSTER_PD>;
 +                      domain-idle-states = <&BIG_CPU_SLEEP_0>;
 +              };
 +
 +              CLUSTER_PD: cpu-cluster0 {
 +                      #power-domain-cells = <0>;
 +                      domain-idle-states = <&CLUSTER_SLEEP_0>;
 +              };
        };
  
        reserved-memory {
                        phys = <&pcie0_lane>;
                        phy-names = "pciephy";
  
 -                      perst-gpio = <&tlmm 79 GPIO_ACTIVE_LOW>;
 -                      enable-gpio = <&tlmm 81 GPIO_ACTIVE_HIGH>;
 +                      perst-gpios = <&tlmm 79 GPIO_ACTIVE_LOW>;
 +                      wake-gpios = <&tlmm 81 GPIO_ACTIVE_HIGH>;
  
                        pinctrl-names = "default";
                        pinctrl-0 = <&pcie0_default_state>;
                        ranges = <0x01000000 0x0 0x40200000 0x0 0x40200000 0x0 0x100000>,
                                 <0x02000000 0x0 0x40300000 0x0 0x40300000 0x0 0x1fd00000>;
  
 -                      interrupts = <GIC_SPI 306 IRQ_TYPE_EDGE_RISING>;
 +                      interrupts = <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "msi";
                        #interrupt-cells = <1>;
                        interrupt-map-mask = <0 0 0 0x7>;
                        phys = <&pcie1_lane>;
                        phy-names = "pciephy";
  
 -                      perst-gpio = <&tlmm 82 GPIO_ACTIVE_LOW>;
 -                      enable-gpio = <&tlmm 84 GPIO_ACTIVE_HIGH>;
 +                      perst-gpios = <&tlmm 82 GPIO_ACTIVE_LOW>;
 +                      wake-gpios = <&tlmm 84 GPIO_ACTIVE_HIGH>;
  
                        pinctrl-names = "default";
                        pinctrl-0 = <&pcie1_default_state>;
                        ranges = <0x01000000 0x0 0x64200000 0x0 0x64200000 0x0 0x100000>,
                                 <0x02000000 0x0 0x64300000 0x0 0x64300000 0x0 0x3d00000>;
  
 -                      interrupts = <GIC_SPI 236 IRQ_TYPE_EDGE_RISING>;
 +                      interrupts = <GIC_SPI 243 IRQ_TYPE_LEVEL_HIGH>;
                        interrupt-names = "msi";
                        #interrupt-cells = <1>;
                        interrupt-map-mask = <0 0 0 0x7>;
                        phys = <&pcie2_lane>;
                        phy-names = "pciephy";
  
 -                      perst-gpio = <&tlmm 85 GPIO_ACTIVE_LOW>;
 -                      enable-gpio = <&tlmm 87 GPIO_ACTIVE_HIGH>;
 +                      perst-gpios = <&tlmm 85 GPIO_ACTIVE_LOW>;
 +                      wake-gpios = <&tlmm 87 GPIO_ACTIVE_HIGH>;
  
                        pinctrl-names = "default";
                        pinctrl-0 = <&pcie2_default_state>;
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "sdsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "cdsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                apr {
                                        compatible = "qcom,apr-v2";
                                        qcom,glink-channels = "apr_audio_svc";
 -                                      qcom,apr-domain = <APR_DOMAIN_ADSP>;
 +                                      qcom,domain = <APR_DOMAIN_ADSP>;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "adsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
  
                        clocks = <&rpmhcc RPMH_CXO_CLK>, <&gcc GPLL0>;
                        clock-names = "xo", "alternate";
 -
 +                      interrupts = <GIC_SPI 30 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>,
 +                                   <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
 +                      interrupt-names = "dcvsh-irq-0", "dcvsh-irq-1", "dcvsh-irq-2";
                        #freq-domain-cells = <1>;
                };
        };
                        };
                };
  
 -              gpu-thermal-top {
 +              gpu-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              gpu-thermal-bottom {
 +              gpu-bottom-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        clock-frequency = <32000>;
                        #clock-cells = <0>;
                };
 +
 +              ufs_phy_rx_symbol_0_clk: ufs-phy-rx-symbol-0 {
 +                      compatible = "fixed-clock";
 +                      clock-frequency = <1000>;
 +                      #clock-cells = <0>;
 +              };
 +
 +              ufs_phy_rx_symbol_1_clk: ufs-phy-rx-symbol-1 {
 +                      compatible = "fixed-clock";
 +                      clock-frequency = <1000>;
 +                      #clock-cells = <0>;
 +              };
 +
 +              ufs_phy_tx_symbol_0_clk: ufs-phy-tx-symbol-0 {
 +                      compatible = "fixed-clock";
 +                      clock-frequency = <1000>;
 +                      #clock-cells = <0>;
 +              };
        };
  
        cpus {
                                 <0>,
                                 <0>,
                                 <0>,
 -                               <0>,
 -                               <0>,
 -                               <0>,
 +                               <&ufs_phy_rx_symbol_0_clk>,
 +                               <&ufs_phy_rx_symbol_1_clk>,
 +                               <&ufs_phy_tx_symbol_0_clk>,
                                 <0>,
                                 <0>;
                };
                        interconnect-names = "memory",
                                             "config";
  
 +                      qcom,qmp = <&aoss_qmp>;
 +
                        qcom,smem-states = <&ipa_smp2p_out 0>,
                                           <&ipa_smp2p_out 1>;
                        qcom,smem-state-names = "ipa-clock-enabled-valid",
                        qcom,tcs-offset = <0xd00>;
                        qcom,drv-id = <2>;
                        qcom,tcs-config = <ACTIVE_TCS  2>, <SLEEP_TCS   3>,
 -                                        <WAKE_TCS    3>, <CONTROL_TCS 1>;
 +                                        <WAKE_TCS    3>, <CONTROL_TCS 0>;
  
                        rpmhcc: clock-controller {
                                compatible = "qcom,sm8350-rpmh-clk";
                                <75000000 300000000>,
                                <0 0>,
                                <0 0>,
 -                              <75000000 300000000>,
 -                              <75000000 300000000>;
 +                              <0>,
 +                              <0>;
                        status = "disabled";
                };
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "sdsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "cdsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                                        compatible = "qcom,fastrpc";
                                        qcom,glink-channels = "fastrpcglink-apps-dsp";
                                        label = "adsp";
+                                       qcom,non-secure-domain;
                                        #address-cells = <1>;
                                        #size-cells = <0>;
  
                        };
                };
  
 -              gpu-thermal-top {
 +              gpu-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              gpu-thermal-bottom {
 +              gpu-bottom-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              modem1-thermal-top {
 +              modem1-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              modem2-thermal-top {
 +              modem2-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              modem3-thermal-top {
 +              modem3-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              modem4-thermal-top {
 +              modem4-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              camera-thermal-top {
 +              camera-top-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
                        };
                };
  
 -              cam-thermal-bottom {
 +              cam-bottom-thermal {
                        polling-delay-passive = <250>;
                        polling-delay = <1000>;
  
diff --combined drivers/ata/ahci.h
@@@ -235,13 -235,11 +235,11 @@@ enum 
        AHCI_HFLAG_YES_ALPM             = (1 << 23), /* force ALPM cap on */
        AHCI_HFLAG_NO_WRITE_TO_RO       = (1 << 24), /* don't write to read
                                                        only registers */
 -      AHCI_HFLAG_IS_MOBILE            = (1 << 25), /* mobile chipset, use
 -                                                      SATA_MOBILE_LPM_POLICY
 +      AHCI_HFLAG_USE_LPM_POLICY       = (1 << 25), /* chipset that should use
 +                                                      SATA_LPM_POLICY
                                                        as default lpm_policy */
        AHCI_HFLAG_SUSPEND_PHYS         = (1 << 26), /* handle PHYs during
                                                        suspend/resume */
-       AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = (1 << 27), /* ignore -EOPNOTSUPP
-                                                       from phy_power_on() */
        AHCI_HFLAG_NO_SXS               = (1 << 28), /* SXS not supported */
  
        /* ap->flags bits */
diff --combined drivers/ata/ahci_mvebu.c
@@@ -227,7 -227,7 +227,7 @@@ static const struct ahci_mvebu_plat_dat
  
  static const struct ahci_mvebu_plat_data ahci_mvebu_armada_3700_plat_data = {
        .plat_config = ahci_mvebu_armada_3700_config,
-       .flags = AHCI_HFLAG_SUSPEND_PHYS | AHCI_HFLAG_IGN_NOTSUPP_POWER_ON,
+       .flags = AHCI_HFLAG_SUSPEND_PHYS,
  };
  
  static const struct of_device_id ahci_mvebu_of_match[] = {
                .compatible = "marvell,armada-3700-ahci",
                .data = &ahci_mvebu_armada_3700_plat_data,
        },
 -      { },
 +      { /* sentinel */ }
  };
  MODULE_DEVICE_TABLE(of, ahci_mvebu_of_match);
  
@@@ -59,7 -59,7 +59,7 @@@ int ahci_platform_enable_phys(struct ah
                }
  
                rc = phy_power_on(hpriv->phys[i]);
-               if (rc && !(rc == -EOPNOTSUPP && (hpriv->flags & AHCI_HFLAG_IGN_NOTSUPP_POWER_ON))) {
+               if (rc) {
                        phy_exit(hpriv->phys[i]);
                        goto disable_phys;
                }
@@@ -733,8 -733,7 +733,8 @@@ int ahci_platform_suspend_host(struct d
        if (hpriv->flags & AHCI_HFLAG_SUSPEND_PHYS)
                ahci_platform_disable_phys(hpriv);
  
 -      return ata_host_suspend(host, PMSG_SUSPEND);
 +      ata_host_suspend(host, PMSG_SUSPEND);
 +      return 0;
  }
  EXPORT_SYMBOL_GPL(ahci_platform_suspend_host);
  
@@@ -1957,13 -1957,6 +1957,13 @@@ static void virtcons_remove(struct virt
        list_del(&portdev->list);
        spin_unlock_irq(&pdrvdata_lock);
  
 +      /* Device is going away, exit any polling for buffers */
 +      virtio_break_device(vdev);
 +      if (use_multiport(portdev))
 +              flush_work(&portdev->control_work);
 +      else
 +              flush_work(&portdev->config_work);
 +
        /* Disable interrupts for vqs */
        virtio_reset_device(vdev);
        /* Finish up work that's lined up */
@@@ -2245,7 -2238,7 +2245,7 @@@ static struct virtio_driver virtio_rpro
        .remove =       virtcons_remove,
  };
  
- static int __init init(void)
+ static int __init virtio_console_init(void)
  {
        int err;
  
@@@ -2280,7 -2273,7 +2280,7 @@@ free
        return err;
  }
  
- static void __exit fini(void)
+ static void __exit virtio_console_fini(void)
  {
        reclaim_dma_bufs();
  
        class_destroy(pdrvdata.class);
        debugfs_remove_recursive(pdrvdata.debugfs_dir);
  }
- module_init(init);
- module_exit(fini);
+ module_init(virtio_console_init);
+ module_exit(virtio_console_fini);
  
  MODULE_DESCRIPTION("Virtio console driver");
  MODULE_LICENSE("GPL");
@@@ -99,7 -99,7 +99,7 @@@ __init int sysfb_create_simplefb(const 
  
        /* setup IORESOURCE_MEM as framebuffer memory */
        memset(&res, 0, sizeof(res));
 -      res.flags = IORESOURCE_MEM | IORESOURCE_BUSY;
 +      res.flags = IORESOURCE_MEM;
        res.name = simplefb_resname;
        res.start = base;
        res.end = res.start + length - 1;
        sysfb_apply_efi_quirks(pd);
  
        ret = platform_device_add_resources(pd, &res, 1);
-       if (ret) {
-               platform_device_put(pd);
-               return ret;
-       }
+       if (ret)
+               goto err_put_device;
  
        ret = platform_device_add_data(pd, mode, sizeof(*mode));
-       if (ret) {
-               platform_device_put(pd);
-               return ret;
-       }
+       if (ret)
+               goto err_put_device;
+       ret = platform_device_add(pd);
+       if (ret)
+               goto err_put_device;
+       return 0;
+ err_put_device:
+       platform_device_put(pd);
  
-       return platform_device_add(pd);
+       return ret;
  }
@@@ -42,6 -42,16 +42,16 @@@ static DEFINE_HASHTABLE(pm_api_features
  static struct platform_device *em_dev;
  
  /**
+  * struct zynqmp_devinfo - Structure for Zynqmp device instance
+  * @dev:              Device Pointer
+  * @feature_conf_id:  Feature conf id
+  */
+ struct zynqmp_devinfo {
+       struct device *dev;
+       u32 feature_conf_id;
+ };
+ /**
   * struct pm_api_feature_data - PM API Feature data
   * @pm_api_id:                PM API Id, used as key to index into hashmap
   * @feature_status:   status of PM API feature: valid, invalid
@@@ -1121,32 -1131,6 +1131,32 @@@ int zynqmp_pm_aes_engine(const u64 addr
  EXPORT_SYMBOL_GPL(zynqmp_pm_aes_engine);
  
  /**
 + * zynqmp_pm_sha_hash - Access the SHA engine to calculate the hash
 + * @address:  Address of the data/ Address of output buffer where
 + *            hash should be stored.
 + * @size:     Size of the data.
 + * @flags:
 + *    BIT(0) - for initializing csudma driver and SHA3(Here address
 + *             and size inputs can be NULL).
 + *    BIT(1) - to call Sha3_Update API which can be called multiple
 + *             times when data is not contiguous.
 + *    BIT(2) - to get final hash of the whole updated data.
 + *             Hash will be overwritten at provided address with
 + *             48 bytes.
 + *
 + * Return:    Returns status, either success or error code.
 + */
 +int zynqmp_pm_sha_hash(const u64 address, const u32 size, const u32 flags)
 +{
 +      u32 lower_addr = lower_32_bits(address);
 +      u32 upper_addr = upper_32_bits(address);
 +
 +      return zynqmp_pm_invoke_fn(PM_SECURE_SHA, upper_addr, lower_addr,
 +                                 size, flags, NULL);
 +}
 +EXPORT_SYMBOL_GPL(zynqmp_pm_sha_hash);
 +
 +/**
   * zynqmp_pm_register_notifier() - PM API for register a subsystem
   *                                to be notified about specific
   *                                event/error.
@@@ -1183,6 -1167,33 +1193,33 @@@ int zynqmp_pm_system_shutdown(const u3
  }
  
  /**
+  * zynqmp_pm_set_feature_config - PM call to request IOCTL for feature config
+  * @id:         The config ID of the feature to be configured
+  * @value:      The config value of the feature to be configured
+  *
+  * Return:      Returns 0 on success or error value on failure.
+  */
+ int zynqmp_pm_set_feature_config(enum pm_feature_config_id id, u32 value)
+ {
+       return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_SET_FEATURE_CONFIG,
+                                  id, value, NULL);
+ }
+ /**
+  * zynqmp_pm_get_feature_config - PM call to get value of configured feature
+  * @id:         The config id of the feature to be queried
+  * @payload:    Returned value array
+  *
+  * Return:      Returns 0 on success or error value on failure.
+  */
+ int zynqmp_pm_get_feature_config(enum pm_feature_config_id id,
+                                u32 *payload)
+ {
+       return zynqmp_pm_invoke_fn(PM_IOCTL, 0, IOCTL_GET_FEATURE_CONFIG,
+                                  id, 0, payload);
+ }
+ /**
   * struct zynqmp_pm_shutdown_scope - Struct for shutdown scope
   * @subtype:  Shutdown subtype
   * @name:     Matching string for scope argument
@@@ -1450,6 -1461,78 +1487,78 @@@ static DEVICE_ATTR_RW(pggs1)
  static DEVICE_ATTR_RW(pggs2);
  static DEVICE_ATTR_RW(pggs3);
  
+ static ssize_t feature_config_id_show(struct device *device,
+                                     struct device_attribute *attr,
+                                     char *buf)
+ {
+       struct zynqmp_devinfo *devinfo = dev_get_drvdata(device);
+       return sysfs_emit(buf, "%d\n", devinfo->feature_conf_id);
+ }
+ static ssize_t feature_config_id_store(struct device *device,
+                                      struct device_attribute *attr,
+                                      const char *buf, size_t count)
+ {
+       u32 config_id;
+       int ret;
+       struct zynqmp_devinfo *devinfo = dev_get_drvdata(device);
+       if (!buf)
+               return -EINVAL;
+       ret = kstrtou32(buf, 10, &config_id);
+       if (ret)
+               return ret;
+       devinfo->feature_conf_id = config_id;
+       return count;
+ }
+ static DEVICE_ATTR_RW(feature_config_id);
+ static ssize_t feature_config_value_show(struct device *device,
+                                        struct device_attribute *attr,
+                                        char *buf)
+ {
+       int ret;
+       u32 ret_payload[PAYLOAD_ARG_CNT];
+       struct zynqmp_devinfo *devinfo = dev_get_drvdata(device);
+       ret = zynqmp_pm_get_feature_config(devinfo->feature_conf_id,
+                                          ret_payload);
+       if (ret)
+               return ret;
+       return sysfs_emit(buf, "%d\n", ret_payload[1]);
+ }
+ static ssize_t feature_config_value_store(struct device *device,
+                                         struct device_attribute *attr,
+                                         const char *buf, size_t count)
+ {
+       u32 value;
+       int ret;
+       struct zynqmp_devinfo *devinfo = dev_get_drvdata(device);
+       if (!buf)
+               return -EINVAL;
+       ret = kstrtou32(buf, 10, &value);
+       if (ret)
+               return ret;
+       ret = zynqmp_pm_set_feature_config(devinfo->feature_conf_id,
+                                          value);
+       if (ret)
+               return ret;
+       return count;
+ }
+ static DEVICE_ATTR_RW(feature_config_value);
  static struct attribute *zynqmp_firmware_attrs[] = {
        &dev_attr_ggs0.attr,
        &dev_attr_ggs1.attr,
        &dev_attr_pggs3.attr,
        &dev_attr_shutdown_scope.attr,
        &dev_attr_health_status.attr,
+       &dev_attr_feature_config_id.attr,
+       &dev_attr_feature_config_value.attr,
        NULL,
  };
  
@@@ -1470,6 -1555,7 +1581,7 @@@ static int zynqmp_firmware_probe(struc
  {
        struct device *dev = &pdev->dev;
        struct device_node *np;
+       struct zynqmp_devinfo *devinfo;
        int ret;
  
        np = of_find_compatible_node(NULL, NULL, "xlnx,zynqmp");
        if (ret)
                return ret;
  
+       devinfo = devm_kzalloc(dev, sizeof(*devinfo), GFP_KERNEL);
+       if (!devinfo)
+               return -ENOMEM;
+       devinfo->dev = dev;
+       platform_set_drvdata(pdev, devinfo);
        /* Check PM API version number */
        ret = zynqmp_pm_get_api_version(&pm_api_version);
        if (ret)
diff --combined drivers/gpio/Kconfig
@@@ -247,16 -247,6 +247,16 @@@ config GPIO_E
        help
          Say yes here to support GPIO on Renesas Emma Mobile SoCs.
  
 +config GPIO_EN7523
 +      tristate "Airoha GPIO support"
 +      depends on ARCH_AIROHA
 +      default ARCH_AIROHA
 +      select GPIO_GENERIC
 +      select GPIOLIB_IRQCHIP
 +      help
 +        Say Y or M here to support the GPIO controller block on the
 +        Airoha EN7523 SoC. It supports two banks of 32 GPIOs.
 +
  config GPIO_EP93XX
        def_bool y
        depends on ARCH_EP93XX
@@@ -1356,6 -1346,18 +1356,18 @@@ config GPIO_TIMBERDAL
        help
        Add support for the GPIO IP in the timberdale FPGA.
  
+ config GPIO_TN48M_CPLD
+       tristate "Delta Networks TN48M switch CPLD GPIO driver"
+       depends on MFD_TN48M_CPLD
+       select GPIO_REGMAP
+       help
+         This enables support for the GPIOs found on the Delta
+         Networks TN48M switch Lattice CPLD. It provides 12 pins in total,
+         they are input-only or output-only type.
+         This driver can also be built as a module. If so, the
+         module will be called gpio-tn48m.
  config GPIO_TPS65086
        tristate "TI TPS65086 GPO"
        depends on MFD_TPS65086
@@@ -1390,7 -1392,7 +1402,7 @@@ config GPIO_TPS6591
          This driver supports TPS65912 GPIO chip.
  
  config GPIO_TPS68470
 -      bool "TPS68470 GPIO"
 +      tristate "TPS68470 GPIO"
        depends on INTEL_SKL_INT3472
        help
          Select this option to enable GPIO driver for the TPS68470
          input or output as appropriate, the sensor related GPIOs
          are "output only" GPIOs.
  
 -        This driver config is bool, as the GPIO functionality
 -        of the TPS68470 must be available before dependent
 -        drivers are loaded.
 -
  config GPIO_TQMX86
        tristate "TQ-Systems QTMX86 GPIO"
        depends on MFD_TQMX86 || COMPILE_TEST
diff --combined drivers/gpio/Makefile
@@@ -55,7 -55,6 +55,7 @@@ obj-$(CONFIG_GPIO_DLN2)                       += gpio-dln2.
  obj-$(CONFIG_GPIO_DWAPB)              += gpio-dwapb.o
  obj-$(CONFIG_GPIO_EIC_SPRD)           += gpio-eic-sprd.o
  obj-$(CONFIG_GPIO_EM)                 += gpio-em.o
 +obj-$(CONFIG_GPIO_EN7523)             += gpio-en7523.o
  obj-$(CONFIG_GPIO_EP93XX)             += gpio-ep93xx.o
  obj-$(CONFIG_GPIO_EXAR)                       += gpio-exar.o
  obj-$(CONFIG_GPIO_F7188X)             += gpio-f7188x.o
@@@ -149,6 -148,7 +149,7 @@@ obj-$(CONFIG_GPIO_TEGRA186)                += gpio-te
  obj-$(CONFIG_GPIO_TEGRA)              += gpio-tegra.o
  obj-$(CONFIG_GPIO_THUNDERX)           += gpio-thunderx.o
  obj-$(CONFIG_GPIO_TIMBERDALE)         += gpio-timberdale.o
+ obj-$(CONFIG_GPIO_TN48M_CPLD)         += gpio-tn48m.o
  obj-$(CONFIG_GPIO_TPIC2810)           += gpio-tpic2810.o
  obj-$(CONFIG_GPIO_TPS65086)           += gpio-tps65086.o
  obj-$(CONFIG_GPIO_TPS65218)           += gpio-tps65218.o
diff --combined drivers/hwmon/Kconfig
@@@ -174,7 -174,6 +174,7 @@@ config SENSORS_ADM924
  
  config SENSORS_ADT7X10
        tristate
 +      select REGMAP
        help
          This module contains common code shared by the ADT7310/ADT7320 and
          ADT7410/ADT7420 temperature monitoring chip drivers.
@@@ -506,21 -505,6 +506,21 @@@ config SENSORS_DELL_SM
          When option I8K is also enabled this driver provides legacy /proc/i8k
          userspace interface for i8kutils package.
  
 +config I8K
 +      bool "Legacy /proc/i8k interface of Dell laptop SMM BIOS hwmon driver"
 +      depends on SENSORS_DELL_SMM
 +      depends on PROC_FS
 +      help
 +        This option enables the legacy /proc/i8k userspace interface of the
 +        dell-smm-hwmon driver. The character file /proc/i8k exposes the BIOS
 +        version, temperatures and allows control of fan speeds of some Dell
 +        laptops. Sometimes it also reports power and hotkey status.
 +
 +        This interface is required to run programs from the i8kutils package.
 +
 +        Say Y if you intend to run userspace programs that use this interface.
 +        Say N otherwise.
 +
  config SENSORS_DA9052_ADC
        tristate "Dialog DA9052/DA9053 ADC"
        depends on PMIC_DA9052
@@@ -1224,8 -1208,8 +1224,8 @@@ config SENSORS_LM7
        depends on SPI_MASTER
        help
          If you say yes here you get support for the National Semiconductor
 -        LM70, LM71, LM74 and Texas Instruments TMP121/TMP123 digital tempera-
 -        ture sensor chips.
 +        LM70, LM71, LM74 and Texas Instruments TMP121/TMP123, TMP122/TMP124,
 +        TMP125 digital temperature sensor chips.
  
          This driver can also be built as a module. If so, the module
          will be called lm70.
@@@ -1304,7 -1288,6 +1304,7 @@@ config SENSORS_LM8
  config SENSORS_LM83
        tristate "National Semiconductor LM83 and compatibles"
        depends on I2C
 +      select REGMAP
        help
          If you say yes here you get support for National Semiconductor
          LM82 and LM83 sensor chips.
@@@ -1555,6 -1538,8 +1555,8 @@@ config SENSORS_PCF859
          These devices are hard to detect and rarely found on mainstream
          hardware. If unsure, say N.
  
+ source "drivers/hwmon/peci/Kconfig"
  source "drivers/hwmon/pmbus/Kconfig"
  
  config SENSORS_PWM_FAN
@@@ -1689,15 -1674,6 +1691,15 @@@ config SENSORS_SIS559
          This driver can also be built as a module. If so, the module
          will be called sis5595.
  
 +config SENSORS_SY7636A
 +      tristate "Silergy SY7636A"
 +      help
 +        If you say yes here you get support for the thermistor readout of
 +        the Silergy SY7636A PMIC.
 +
 +        This driver can also be built as a module.  If so, the module
 +        will be called sy7636a-hwmon.
 +
  config SENSORS_DME1737
        tristate "SMSC DME1737, SCH311x and compatibles"
        depends on I2C && !PPC
@@@ -2005,17 -1981,6 +2007,17 @@@ config SENSORS_TMP42
          This driver can also be built as a module. If so, the module
          will be called tmp421.
  
 +config SENSORS_TMP464
 +      tristate "Texas Instruments TMP464 and compatible"
 +      depends on I2C
 +      select REGMAP_I2C
 +      help
 +        If you say yes here you get support for Texas Instruments TMP464
 +        and TMP468 temperature sensor chips.
 +
 +        This driver can also be built as a module. If so, the module
 +        will be called tmp464.
 +
  config SENSORS_TMP513
        tristate "Texas Instruments TMP513 and compatibles"
        depends on I2C
@@@ -2289,31 -2254,16 +2291,31 @@@ config SENSORS_ASUS_WM
  
  config SENSORS_ASUS_WMI_EC
        tristate "ASUS WMI B550/X570"
 -      depends on ACPI_WMI
 +      depends on ACPI_WMI && SENSORS_ASUS_EC=n
        help
          If you say yes here you get support for the ACPI embedded controller
          hardware monitoring interface found in B550/X570 ASUS motherboards.
          This driver will provide readings of fans, voltages and temperatures
          through the system firmware.
  
 +        This driver is deprecated in favor of the ASUS EC Sensors driver
 +        which provides fully compatible output.
 +
          This driver can also be built as a module. If so, the module
          will be called asus_wmi_sensors_ec.
  
 +config SENSORS_ASUS_EC
 +      tristate "ASUS EC Sensors"
 +      depends on X86
 +      help
 +        If you say yes here you get support for the ACPI embedded controller
 +        hardware monitoring interface found in ASUS motherboards. The driver
 +        currently supports B550/X570 boards, although other ASUS boards might
 +        provide this monitoring interface as well.
 +
 +        This driver can also be built as a module. If so, the module
 +        will be called asus_ec_sensors.
 +
  endif # ACPI
  
  endif # HWMON
diff --combined drivers/hwmon/Makefile
@@@ -9,7 -9,6 +9,7 @@@ obj-$(CONFIG_HWMON_VID)          += hwmon-vid.
  # APCI drivers
  obj-$(CONFIG_SENSORS_ACPI_POWER) += acpi_power_meter.o
  obj-$(CONFIG_SENSORS_ATK0110) += asus_atk0110.o
 +obj-$(CONFIG_SENSORS_ASUS_EC) += asus-ec-sensors.o
  obj-$(CONFIG_SENSORS_ASUS_WMI)        += asus_wmi_sensors.o
  obj-$(CONFIG_SENSORS_ASUS_WMI_EC)     += asus_wmi_ec_sensors.o
  
@@@ -187,7 -186,6 +187,7 @@@ obj-$(CONFIG_SENSORS_SMSC47M1)     += smsc4
  obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
  obj-$(CONFIG_SENSORS_SPARX5)  += sparx5-temp.o
  obj-$(CONFIG_SENSORS_STTS751) += stts751.o
 +obj-$(CONFIG_SENSORS_SY7636A) += sy7636a-hwmon.o
  obj-$(CONFIG_SENSORS_AMC6821) += amc6821.o
  obj-$(CONFIG_SENSORS_TC74)    += tc74.o
  obj-$(CONFIG_SENSORS_THMC50)  += thmc50.o
@@@ -196,7 -194,6 +196,7 @@@ obj-$(CONFIG_SENSORS_TMP103)       += tmp103.
  obj-$(CONFIG_SENSORS_TMP108)  += tmp108.o
  obj-$(CONFIG_SENSORS_TMP401)  += tmp401.o
  obj-$(CONFIG_SENSORS_TMP421)  += tmp421.o
 +obj-$(CONFIG_SENSORS_TMP464)  += tmp464.o
  obj-$(CONFIG_SENSORS_TMP513)  += tmp513.o
  obj-$(CONFIG_SENSORS_VEXPRESS)        += vexpress-hwmon.o
  obj-$(CONFIG_SENSORS_VIA_CPUTEMP)+= via-cputemp.o
@@@ -211,6 -208,7 +211,7 @@@ obj-$(CONFIG_SENSORS_WM8350)       += wm8350-
  obj-$(CONFIG_SENSORS_XGENE)   += xgene-hwmon.o
  
  obj-$(CONFIG_SENSORS_OCC)     += occ/
+ obj-$(CONFIG_SENSORS_PECI)    += peci/
  obj-$(CONFIG_PMBUS)           += pmbus/
  
  ccflags-$(CONFIG_HWMON_DEBUG_CHIP) := -DDEBUG
@@@ -87,9 -87,11 +87,9 @@@ static int bma400_spi_probe(struct spi_
        return bma400_probe(&spi->dev, regmap, id->name);
  }
  
 -static int bma400_spi_remove(struct spi_device *spi)
 +static void bma400_spi_remove(struct spi_device *spi)
  {
        bma400_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id bma400_spi_ids[] = {
@@@ -118,3 -120,4 +118,4 @@@ module_spi_driver(bma400_spi_driver)
  MODULE_AUTHOR("Dan Robertson <dan@dlrobertson.com>");
  MODULE_DESCRIPTION("Bosch BMA400 triaxial acceleration sensor (SPI)");
  MODULE_LICENSE("GPL");
+ MODULE_IMPORT_NS(IIO_BMA400);
@@@ -35,9 -35,11 +35,9 @@@ static int bmc150_accel_probe(struct sp
                                       true);
  }
  
 -static int bmc150_accel_remove(struct spi_device *spi)
 +static void bmc150_accel_remove(struct spi_device *spi)
  {
        bmc150_accel_core_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct acpi_device_id bmc150_accel_acpi_match[] = {
@@@ -82,3 -84,4 +82,4 @@@ module_spi_driver(bmc150_accel_driver)
  MODULE_AUTHOR("Markus Pargmann <mpa@pengutronix.de>");
  MODULE_LICENSE("GPL v2");
  MODULE_DESCRIPTION("BMC150 SPI accelerometer driver");
+ MODULE_IMPORT_NS(IIO_BMC150);
@@@ -56,9 -56,11 +56,9 @@@ static int bmi088_accel_probe(struct sp
                                       true);
  }
  
 -static int bmi088_accel_remove(struct spi_device *spi)
 +static void bmi088_accel_remove(struct spi_device *spi)
  {
        bmi088_accel_core_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id bmi088_accel_id[] = {
@@@ -81,3 -83,4 +81,4 @@@ module_spi_driver(bmi088_accel_driver)
  MODULE_AUTHOR("Niek van Agt <niek.van.agt@topicproducts.com>");
  MODULE_LICENSE("GPL v2");
  MODULE_DESCRIPTION("BMI088 accelerometer driver (SPI)");
+ MODULE_IMPORT_NS(IIO_BMI088);
@@@ -32,9 -32,11 +32,9 @@@ static int kxsd9_spi_probe(struct spi_d
                                  spi_get_device_id(spi)->name);
  }
  
 -static int kxsd9_spi_remove(struct spi_device *spi)
 +static void kxsd9_spi_remove(struct spi_device *spi)
  {
        kxsd9_common_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id kxsd9_spi_id[] = {
@@@ -64,3 -66,4 +64,4 @@@ module_spi_driver(kxsd9_spi_driver)
  MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
  MODULE_DESCRIPTION("Kionix KXSD9 SPI driver");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_KXSD9);
@@@ -22,9 -22,11 +22,9 @@@ static int mma7455_spi_probe(struct spi
        return mma7455_core_probe(&spi->dev, regmap, id->name);
  }
  
 -static int mma7455_spi_remove(struct spi_device *spi)
 +static void mma7455_spi_remove(struct spi_device *spi)
  {
        mma7455_core_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id mma7455_spi_ids[] = {
@@@ -47,3 -49,4 +47,4 @@@ module_spi_driver(mma7455_spi_driver)
  MODULE_AUTHOR("Joachim Eastwood <manabian@gmail.com>");
  MODULE_DESCRIPTION("Freescale MMA7455L SPI accelerometer driver");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_MMA7455);
@@@ -7,9 -7,10 +7,10 @@@
  #include <linux/interrupt.h>
  #include <linux/io.h>
  #include <linux/mfd/core.h>
+ #include <linux/mod_devicetable.h>
  #include <linux/module.h>
- #include <linux/of.h>
- #include <linux/of_platform.h>
+ #include <linux/property.h>
  #include "ssp.h"
  
  #define SSP_WDT_TIME                  10000
@@@ -204,7 -205,7 +205,7 @@@ u32 ssp_get_sensor_delay(struct ssp_dat
  {
        return data->delay_buf[type];
  }
- EXPORT_SYMBOL(ssp_get_sensor_delay);
+ EXPORT_SYMBOL_NS(ssp_get_sensor_delay, IIO_SSP_SENSORS);
  
  /**
   * ssp_enable_sensor() - enables data acquisition for sensor
@@@ -266,7 -267,7 +267,7 @@@ int ssp_enable_sensor(struct ssp_data *
  derror:
        return ret;
  }
- EXPORT_SYMBOL(ssp_enable_sensor);
+ EXPORT_SYMBOL_NS(ssp_enable_sensor, IIO_SSP_SENSORS);
  
  /**
   * ssp_change_delay() - changes data acquisition for sensor
@@@ -297,7 -298,7 +298,7 @@@ int ssp_change_delay(struct ssp_data *d
  
        return 0;
  }
- EXPORT_SYMBOL(ssp_change_delay);
+ EXPORT_SYMBOL_NS(ssp_change_delay, IIO_SSP_SENSORS);
  
  /**
   * ssp_disable_sensor() - disables sensor
@@@ -334,7 -335,7 +335,7 @@@ int ssp_disable_sensor(struct ssp_data 
  
        return 0;
  }
- EXPORT_SYMBOL(ssp_disable_sensor);
+ EXPORT_SYMBOL_NS(ssp_disable_sensor, IIO_SSP_SENSORS);
  
  static irqreturn_t ssp_irq_thread_fn(int irq, void *dev_id)
  {
@@@ -425,7 -426,6 +426,6 @@@ int ssp_queue_ssp_refresh_task(struct s
                                  msecs_to_jiffies(delay));
  }
  
- #ifdef CONFIG_OF
  static const struct of_device_id ssp_of_match[] = {
        {
                .compatible     = "samsung,sensorhub-rinato",
@@@ -441,8 -441,6 +441,6 @@@ MODULE_DEVICE_TABLE(of, ssp_of_match)
  static struct ssp_data *ssp_parse_dt(struct device *dev)
  {
        struct ssp_data *data;
-       struct device_node *node = dev->of_node;
-       const struct of_device_id *match;
  
        data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
        if (!data)
        if (IS_ERR(data->mcu_reset_gpiod))
                return NULL;
  
-       match = of_match_node(ssp_of_match, node);
-       if (!match)
-               return NULL;
-       data->sensorhub_info = match->data;
+       data->sensorhub_info = device_get_match_data(dev);
  
        dev_set_drvdata(dev, data);
  
        return data;
  }
- #else
- static struct ssp_data *ssp_parse_dt(struct device *pdev)
- {
-       return NULL;
- }
- #endif
  
  /**
   * ssp_register_consumer() - registers iio consumer in ssp framework
@@@ -490,7 -478,7 +478,7 @@@ void ssp_register_consumer(struct iio_d
  
        data->sensor_devs[type] = indio_dev;
  }
- EXPORT_SYMBOL(ssp_register_consumer);
+ EXPORT_SYMBOL_NS(ssp_register_consumer, IIO_SSP_SENSORS);
  
  static int ssp_probe(struct spi_device *spi)
  {
@@@ -586,7 -574,7 +574,7 @@@ err_setup_irq
        return ret;
  }
  
 -static int ssp_remove(struct spi_device *spi)
 +static void ssp_remove(struct spi_device *spi)
  {
        struct ssp_data *data = spi_get_drvdata(spi);
  
        mutex_destroy(&data->pending_lock);
  
        mfd_remove_devices(&spi->dev);
 -
 -      return 0;
  }
  
- #ifdef CONFIG_PM_SLEEP
  static int ssp_suspend(struct device *dev)
  {
        int ret;
@@@ -659,18 -648,15 +646,15 @@@ static int ssp_resume(struct device *de
  
        return 0;
  }
- #endif /* CONFIG_PM_SLEEP */
  
- static const struct dev_pm_ops ssp_pm_ops = {
-       SET_SYSTEM_SLEEP_PM_OPS(ssp_suspend, ssp_resume)
- };
+ static DEFINE_SIMPLE_DEV_PM_OPS(ssp_pm_ops, ssp_suspend, ssp_resume);
  
  static struct spi_driver ssp_driver = {
        .probe = ssp_probe,
        .remove = ssp_remove,
        .driver = {
-               .pm = &ssp_pm_ops,
-               .of_match_table = of_match_ptr(ssp_of_match),
+               .pm = pm_sleep_ptr(&ssp_pm_ops),
+               .of_match_table = ssp_of_match,
                .name = "sensorhub"
        },
  };
@@@ -130,9 -130,11 +130,9 @@@ static int ad5592r_spi_probe(struct spi
        return ad5592r_probe(&spi->dev, id->name, &ad5592r_rw_ops);
  }
  
 -static int ad5592r_spi_remove(struct spi_device *spi)
 +static void ad5592r_spi_remove(struct spi_device *spi)
  {
        ad5592r_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id ad5592r_spi_ids[] = {
@@@ -168,3 -170,4 +168,4 @@@ module_spi_driver(ad5592r_spi_driver)
  MODULE_AUTHOR("Paul Cercueil <paul.cercueil@analog.com>");
  MODULE_DESCRIPTION("Analog Devices AD5592R multi-channel converters");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_AD5592R);
@@@ -95,9 -95,11 +95,9 @@@ static int ad5686_spi_probe(struct spi_
                            ad5686_spi_write, ad5686_spi_read);
  }
  
 -static int ad5686_spi_remove(struct spi_device *spi)
 +static void ad5686_spi_remove(struct spi_device *spi)
  {
        ad5686_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id ad5686_spi_id[] = {
@@@ -135,3 -137,4 +135,4 @@@ module_spi_driver(ad5686_spi_driver)
  MODULE_AUTHOR("Stefan Popa <stefan.popa@analog.com>");
  MODULE_DESCRIPTION("Analog Devices AD5686 and similar multi-channel DACs");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_AD5686);
@@@ -7,17 -7,18 +7,18 @@@
  
  #include <linux/device.h>
  #include <linux/kernel.h>
+ #include <linux/mod_devicetable.h>
+ #include <linux/module.h>
+ #include <linux/property.h>
  #include <linux/slab.h>
  #include <linux/sysfs.h>
  #include <linux/spi/spi.h>
  #include <linux/regulator/consumer.h>
  #include <linux/err.h>
- #include <linux/module.h>
  #include <linux/gcd.h>
  #include <linux/gpio/consumer.h>
  #include <asm/div64.h>
  #include <linux/clk.h>
- #include <linux/of.h>
  
  #include <linux/iio/iio.h>
  #include <linux/iio/sysfs.h>
@@@ -381,10 -382,8 +382,8 @@@ static const struct iio_info adf4350_in
        .debugfs_reg_access = &adf4350_reg_access,
  };
  
- #ifdef CONFIG_OF
  static struct adf4350_platform_data *adf4350_parse_dt(struct device *dev)
  {
-       struct device_node *np = dev->of_node;
        struct adf4350_platform_data *pdata;
        unsigned int tmp;
  
        if (!pdata)
                return NULL;
  
-       snprintf(&pdata->name[0], SPI_NAME_SIZE - 1, "%pOFn", np);
+       snprintf(pdata->name, sizeof(pdata->name), "%pfw", dev_fwnode(dev));
  
        tmp = 10000;
-       of_property_read_u32(np, "adi,channel-spacing", &tmp);
+       device_property_read_u32(dev, "adi,channel-spacing", &tmp);
        pdata->channel_spacing = tmp;
  
        tmp = 0;
-       of_property_read_u32(np, "adi,power-up-frequency", &tmp);
+       device_property_read_u32(dev, "adi,power-up-frequency", &tmp);
        pdata->power_up_frequency = tmp;
  
        tmp = 0;
-       of_property_read_u32(np, "adi,reference-div-factor", &tmp);
+       device_property_read_u32(dev, "adi,reference-div-factor", &tmp);
        pdata->ref_div_factor = tmp;
  
-       pdata->ref_doubler_en = of_property_read_bool(np,
-                       "adi,reference-doubler-enable");
-       pdata->ref_div2_en = of_property_read_bool(np,
-                       "adi,reference-div2-enable");
+       pdata->ref_doubler_en = device_property_read_bool(dev, "adi,reference-doubler-enable");
+       pdata->ref_div2_en = device_property_read_bool(dev, "adi,reference-div2-enable");
  
        /* r2_user_settings */
-       pdata->r2_user_settings = of_property_read_bool(np,
-                       "adi,phase-detector-polarity-positive-enable") ?
-                       ADF4350_REG2_PD_POLARITY_POS : 0;
-       pdata->r2_user_settings |= of_property_read_bool(np,
-                       "adi,lock-detect-precision-6ns-enable") ?
-                       ADF4350_REG2_LDP_6ns : 0;
-       pdata->r2_user_settings |= of_property_read_bool(np,
-                       "adi,lock-detect-function-integer-n-enable") ?
-                       ADF4350_REG2_LDF_INT_N : 0;
+       pdata->r2_user_settings = 0;
+       if (device_property_read_bool(dev, "adi,phase-detector-polarity-positive-enable"))
+               pdata->r2_user_settings |= ADF4350_REG2_PD_POLARITY_POS;
+       if (device_property_read_bool(dev, "adi,lock-detect-precision-6ns-enable"))
+               pdata->r2_user_settings |= ADF4350_REG2_LDP_6ns;
+       if (device_property_read_bool(dev, "adi,lock-detect-function-integer-n-enable"))
+               pdata->r2_user_settings |= ADF4350_REG2_LDF_INT_N;
  
        tmp = 2500;
-       of_property_read_u32(np, "adi,charge-pump-current", &tmp);
+       device_property_read_u32(dev, "adi,charge-pump-current", &tmp);
        pdata->r2_user_settings |= ADF4350_REG2_CHARGE_PUMP_CURR_uA(tmp);
  
        tmp = 0;
-       of_property_read_u32(np, "adi,muxout-select", &tmp);
+       device_property_read_u32(dev, "adi,muxout-select", &tmp);
        pdata->r2_user_settings |= ADF4350_REG2_MUXOUT(tmp);
  
-       pdata->r2_user_settings |= of_property_read_bool(np,
-                       "adi,low-spur-mode-enable") ?
-                       ADF4350_REG2_NOISE_MODE(0x3) : 0;
+       if (device_property_read_bool(dev, "adi,low-spur-mode-enable"))
+               pdata->r2_user_settings |= ADF4350_REG2_NOISE_MODE(0x3);
  
        /* r3_user_settings */
  
-       pdata->r3_user_settings = of_property_read_bool(np,
-                       "adi,cycle-slip-reduction-enable") ?
-                       ADF4350_REG3_12BIT_CSR_EN : 0;
-       pdata->r3_user_settings |= of_property_read_bool(np,
-                       "adi,charge-cancellation-enable") ?
-                       ADF4351_REG3_CHARGE_CANCELLATION_EN : 0;
-       pdata->r3_user_settings |= of_property_read_bool(np,
-                       "adi,anti-backlash-3ns-enable") ?
-                       ADF4351_REG3_ANTI_BACKLASH_3ns_EN : 0;
-       pdata->r3_user_settings |= of_property_read_bool(np,
-                       "adi,band-select-clock-mode-high-enable") ?
-                       ADF4351_REG3_BAND_SEL_CLOCK_MODE_HIGH : 0;
+       pdata->r3_user_settings = 0;
+       if (device_property_read_bool(dev, "adi,cycle-slip-reduction-enable"))
+               pdata->r3_user_settings |= ADF4350_REG3_12BIT_CSR_EN;
+       if (device_property_read_bool(dev, "adi,charge-cancellation-enable"))
+               pdata->r3_user_settings |= ADF4351_REG3_CHARGE_CANCELLATION_EN;
+       if (device_property_read_bool(dev, "adi,anti-backlash-3ns-enable"))
+               pdata->r3_user_settings |= ADF4351_REG3_ANTI_BACKLASH_3ns_EN;
+       if (device_property_read_bool(dev, "adi,band-select-clock-mode-high-enable"))
+               pdata->r3_user_settings |= ADF4351_REG3_BAND_SEL_CLOCK_MODE_HIGH;
  
        tmp = 0;
-       of_property_read_u32(np, "adi,12bit-clk-divider", &tmp);
+       device_property_read_u32(dev, "adi,12bit-clk-divider", &tmp);
        pdata->r3_user_settings |= ADF4350_REG3_12BIT_CLKDIV(tmp);
  
        tmp = 0;
-       of_property_read_u32(np, "adi,clk-divider-mode", &tmp);
+       device_property_read_u32(dev, "adi,clk-divider-mode", &tmp);
        pdata->r3_user_settings |= ADF4350_REG3_12BIT_CLKDIV_MODE(tmp);
  
        /* r4_user_settings */
  
-       pdata->r4_user_settings = of_property_read_bool(np,
-                       "adi,aux-output-enable") ?
-                       ADF4350_REG4_AUX_OUTPUT_EN : 0;
-       pdata->r4_user_settings |= of_property_read_bool(np,
-                       "adi,aux-output-fundamental-enable") ?
-                       ADF4350_REG4_AUX_OUTPUT_FUND : 0;
-       pdata->r4_user_settings |= of_property_read_bool(np,
-                       "adi,mute-till-lock-enable") ?
-                       ADF4350_REG4_MUTE_TILL_LOCK_EN : 0;
+       pdata->r4_user_settings = 0;
+       if (device_property_read_bool(dev, "adi,aux-output-enable"))
+               pdata->r4_user_settings |= ADF4350_REG4_AUX_OUTPUT_EN;
+       if (device_property_read_bool(dev, "adi,aux-output-fundamental-enable"))
+               pdata->r4_user_settings |= ADF4350_REG4_AUX_OUTPUT_FUND;
+       if (device_property_read_bool(dev, "adi,mute-till-lock-enable"))
+               pdata->r4_user_settings |= ADF4350_REG4_MUTE_TILL_LOCK_EN;
  
        tmp = 0;
-       of_property_read_u32(np, "adi,output-power", &tmp);
+       device_property_read_u32(dev, "adi,output-power", &tmp);
        pdata->r4_user_settings |= ADF4350_REG4_OUTPUT_PWR(tmp);
  
        tmp = 0;
-       of_property_read_u32(np, "adi,aux-output-power", &tmp);
+       device_property_read_u32(dev, "adi,aux-output-power", &tmp);
        pdata->r4_user_settings |= ADF4350_REG4_AUX_OUTPUT_PWR(tmp);
  
        return pdata;
  }
- #else
- static
- struct adf4350_platform_data *adf4350_parse_dt(struct device *dev)
- {
-       return NULL;
- }
- #endif
  
  static int adf4350_probe(struct spi_device *spi)
  {
        struct clk *clk = NULL;
        int ret;
  
-       if (spi->dev.of_node) {
+       if (dev_fwnode(&spi->dev)) {
                pdata = adf4350_parse_dt(&spi->dev);
                if (pdata == NULL)
                        return -EINVAL;
@@@ -589,7 -570,7 +570,7 @@@ error_disable_clk
        return ret;
  }
  
 -static int adf4350_remove(struct spi_device *spi)
 +static void adf4350_remove(struct spi_device *spi)
  {
        struct iio_dev *indio_dev = spi_get_drvdata(spi);
        struct adf4350_state *st = iio_priv(indio_dev);
  
        if (!IS_ERR(reg))
                regulator_disable(reg);
 -
 -      return 0;
  }
  
  static const struct of_device_id adf4350_of_match[] = {
@@@ -623,7 -606,7 +604,7 @@@ MODULE_DEVICE_TABLE(spi, adf4350_id)
  static struct spi_driver adf4350_driver = {
        .driver = {
                .name   = "adf4350",
-               .of_match_table = of_match_ptr(adf4350_of_match),
+               .of_match_table = adf4350_of_match,
        },
        .probe          = adf4350_probe,
        .remove         = adf4350_remove,
@@@ -29,9 -29,11 +29,9 @@@ static int bmc150_magn_spi_probe(struc
        return bmc150_magn_probe(&spi->dev, regmap, spi->irq, id->name);
  }
  
 -static int bmc150_magn_spi_remove(struct spi_device *spi)
 +static void bmc150_magn_spi_remove(struct spi_device *spi)
  {
        bmc150_magn_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id bmc150_magn_spi_id[] = {
@@@ -64,3 -66,4 +64,4 @@@ module_spi_driver(bmc150_magn_spi_drive
  MODULE_AUTHOR("Daniel Baluta <daniel.baluta@intel.com");
  MODULE_DESCRIPTION("BMC150 magnetometer SPI driver");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_BMC150_MAGN);
@@@ -74,9 -74,11 +74,9 @@@ static int hmc5843_spi_probe(struct spi
                        id->driver_data, id->name);
  }
  
 -static int hmc5843_spi_remove(struct spi_device *spi)
 +static void hmc5843_spi_remove(struct spi_device *spi)
  {
        hmc5843_common_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id hmc5843_id[] = {
@@@ -100,3 -102,4 +100,4 @@@ module_spi_driver(hmc5843_driver)
  MODULE_AUTHOR("Josef Gajdusek <atx@atx.name>");
  MODULE_DESCRIPTION("HMC5983 SPI driver");
  MODULE_LICENSE("GPL");
+ MODULE_IMPORT_NS(IIO_HMC5843);
@@@ -107,9 -107,11 +107,9 @@@ static int ms5611_spi_probe(struct spi_
                            spi_get_device_id(spi)->driver_data);
  }
  
 -static int ms5611_spi_remove(struct spi_device *spi)
 +static void ms5611_spi_remove(struct spi_device *spi)
  {
        ms5611_remove(spi_get_drvdata(spi));
 -
 -      return 0;
  }
  
  static const struct of_device_id ms5611_spi_matches[] = {
@@@ -140,3 -142,4 +140,4 @@@ module_spi_driver(ms5611_driver)
  MODULE_AUTHOR("Tomasz Duszynski <tduszyns@gmail.com>");
  MODULE_DESCRIPTION("MS5611 spi driver");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_MS5611);
@@@ -57,9 -57,11 +57,9 @@@ static int zpa2326_probe_spi(struct spi
                             spi->irq, ZPA2326_DEVICE_ID, regmap);
  }
  
 -static int zpa2326_remove_spi(struct spi_device *spi)
 +static void zpa2326_remove_spi(struct spi_device *spi)
  {
        zpa2326_remove(&spi->dev);
 -
 -      return 0;
  }
  
  static const struct spi_device_id zpa2326_spi_ids[] = {
@@@ -89,3 -91,4 +89,4 @@@ module_spi_driver(zpa2326_spi_driver)
  MODULE_AUTHOR("Gregor Boirie <gregor.boirie@parrot.com>");
  MODULE_DESCRIPTION("SPI driver for Murata ZPA2326 pressure sensor");
  MODULE_LICENSE("GPL v2");
+ MODULE_IMPORT_NS(IIO_ZPA2326);
diff --combined drivers/misc/fastrpc.c
@@@ -17,6 -17,7 +17,7 @@@
  #include <linux/rpmsg.h>
  #include <linux/scatterlist.h>
  #include <linux/slab.h>
+ #include <linux/qcom_scm.h>
  #include <uapi/misc/fastrpc.h>
  
  #define ADSP_DOMAIN_ID (0)
  #define CDSP_DOMAIN_ID (3)
  #define FASTRPC_DEV_MAX               4 /* adsp, mdsp, slpi, cdsp*/
  #define FASTRPC_MAX_SESSIONS  13 /*12 compute, 1 cpz*/
+ #define FASTRPC_MAX_VMIDS     16
  #define FASTRPC_ALIGN         128
  #define FASTRPC_MAX_FDLIST    16
  #define FASTRPC_MAX_CRCLIST   64
  #define FASTRPC_PHYS(p)       ((p) & 0xffffffff)
  #define FASTRPC_CTX_MAX (256)
  #define FASTRPC_INIT_HANDLE   1
+ #define FASTRPC_DSP_UTILITIES_HANDLE  2
  #define FASTRPC_CTXID_MASK (0xFF0)
  #define INIT_FILELEN_MAX (2 * 1024 * 1024)
  #define FASTRPC_DEVICE_NAME   "fastrpc"
  #define ADSP_MMAP_ADD_PAGES 0x1000
+ #define DSP_UNSUPPORTED_API (0x80000414)
+ /* MAX NUMBER of DSP ATTRIBUTES SUPPORTED */
+ #define FASTRPC_MAX_DSP_ATTRIBUTES (256)
+ #define FASTRPC_MAX_DSP_ATTRIBUTES_LEN (sizeof(u32) * FASTRPC_MAX_DSP_ATTRIBUTES)
  
  /* Retrives number of input buffers from the scalars parameter */
  #define REMOTE_SCALARS_INBUFS(sc)     (((sc) >> 16) & 0x0ff)
  #define FASTRPC_RMID_INIT_CREATE      6
  #define FASTRPC_RMID_INIT_CREATE_ATTR 7
  #define FASTRPC_RMID_INIT_CREATE_STATIC       8
+ #define FASTRPC_RMID_INIT_MEM_MAP      10
+ #define FASTRPC_RMID_INIT_MEM_UNMAP    11
  
  /* Protection Domain(PD) ids */
  #define AUDIO_PD      (0) /* also GUEST_OS PD? */
  #define USER_PD               (1)
  #define SENSORS_PD    (2)
  
- #define miscdev_to_cctx(d) container_of(d, struct fastrpc_channel_ctx, miscdev)
+ #define miscdev_to_fdevice(d) container_of(d, struct fastrpc_device, miscdev)
  
  static const char *domains[FASTRPC_DEV_MAX] = { "adsp", "mdsp",
                                                "sdsp", "cdsp"};
@@@ -92,9 -101,20 +101,20 @@@ struct fastrpc_invoke_buf 
        u32 pgidx;              /* index to start of contiguous region */
  };
  
- struct fastrpc_remote_arg {
-       u64 pv;
-       u64 len;
+ struct fastrpc_remote_dmahandle {
+       s32 fd;         /* dma handle fd */
+       u32 offset;     /* dma handle offset */
+       u32 len;        /* dma handle length */
+ };
+ struct fastrpc_remote_buf {
+       u64 pv;         /* buffer pointer */
+       u64 len;        /* length of buffer */
+ };
+ union fastrpc_remote_arg {
+       struct fastrpc_remote_buf buf;
+       struct fastrpc_remote_dmahandle dma;
  };
  
  struct fastrpc_mmap_rsp_msg {
@@@ -108,12 -128,29 +128,29 @@@ struct fastrpc_mmap_req_msg 
        s32 num;
  };
  
+ struct fastrpc_mem_map_req_msg {
+       s32 pgid;
+       s32 fd;
+       s32 offset;
+       u32 flags;
+       u64 vaddrin;
+       s32 num;
+       s32 data_len;
+ };
  struct fastrpc_munmap_req_msg {
        s32 pgid;
        u64 vaddr;
        u64 size;
  };
  
+ struct fastrpc_mem_unmap_req_msg {
+       s32 pgid;
+       s32 fd;
+       u64 vaddrin;
+       u64 len;
+ };
  struct fastrpc_msg {
        int pid;                /* process group id */
        int tid;                /* thread id */
@@@ -170,6 -207,8 +207,8 @@@ struct fastrpc_map 
        u64 size;
        void *va;
        u64 len;
+       u64 raddr;
+       u32 attr;
        struct kref refcount;
  };
  
@@@ -189,7 -228,7 +228,7 @@@ struct fastrpc_invoke_ctx 
        struct work_struct put_work;
        struct fastrpc_msg msg;
        struct fastrpc_user *fl;
-       struct fastrpc_remote_arg *rpra;
+       union fastrpc_remote_arg *rpra;
        struct fastrpc_map **maps;
        struct fastrpc_buf *buf;
        struct fastrpc_invoke_args *args;
@@@ -207,13 -246,28 +246,28 @@@ struct fastrpc_session_ctx 
  struct fastrpc_channel_ctx {
        int domain_id;
        int sesscount;
+       int vmcount;
+       u32 perms;
+       struct qcom_scm_vmperm vmperms[FASTRPC_MAX_VMIDS];
        struct rpmsg_device *rpdev;
        struct fastrpc_session_ctx session[FASTRPC_MAX_SESSIONS];
        spinlock_t lock;
        struct idr ctx_idr;
        struct list_head users;
-       struct miscdevice miscdev;
        struct kref refcount;
+       /* Flag if dsp attributes are cached */
+       bool valid_attributes;
+       u32 dsp_attributes[FASTRPC_MAX_DSP_ATTRIBUTES];
+       struct fastrpc_device *secure_fdevice;
+       struct fastrpc_device *fdevice;
+       bool secure;
+       bool unsigned_support;
+ };
+ struct fastrpc_device {
+       struct fastrpc_channel_ctx *cctx;
+       struct miscdevice miscdev;
+       bool secure;
  };
  
  struct fastrpc_user {
  
        int tgid;
        int pd;
+       bool is_secure_dev;
        /* Lock for lists */
        spinlock_t lock;
        /* lock for allocations */
@@@ -241,6 -296,20 +296,20 @@@ static void fastrpc_free_map(struct kre
        map = container_of(ref, struct fastrpc_map, refcount);
  
        if (map->table) {
+               if (map->attr & FASTRPC_ATTR_SECUREMAP) {
+                       struct qcom_scm_vmperm perm;
+                       int err = 0;
+                       perm.vmid = QCOM_SCM_VMID_HLOS;
+                       perm.perm = QCOM_SCM_PERM_RWX;
+                       err = qcom_scm_assign_mem(map->phys, map->size,
+                               &(map->fl->cctx->vmperms[0].vmid), &perm, 1);
+                       if (err) {
+                               dev_err(map->fl->sctx->dev, "Failed to assign memory phys 0x%llx size 0x%llx err %d",
+                                               map->phys, map->size, err);
+                               return;
+                       }
+               }
                dma_buf_unmap_attachment(map->attach, map->table,
                                         DMA_BIDIRECTIONAL);
                dma_buf_detach(map->buf, map->attach);
@@@ -262,7 -331,8 +331,8 @@@ static void fastrpc_map_get(struct fast
                kref_get(&map->refcount);
  }
  
- static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
+ static int fastrpc_map_lookup(struct fastrpc_user *fl, int fd,
                            struct fastrpc_map **ppmap)
  {
        struct fastrpc_map *map = NULL;
        mutex_lock(&fl->mutex);
        list_for_each_entry(map, &fl->maps, node) {
                if (map->fd == fd) {
-                       fastrpc_map_get(map);
                        *ppmap = map;
                        mutex_unlock(&fl->mutex);
                        return 0;
        return -ENOENT;
  }
  
+ static int fastrpc_map_find(struct fastrpc_user *fl, int fd,
+                           struct fastrpc_map **ppmap)
+ {
+       int ret = fastrpc_map_lookup(fl, fd, ppmap);
+       if (!ret)
+               fastrpc_map_get(*ppmap);
+       return ret;
+ }
  static void fastrpc_buf_free(struct fastrpc_buf *buf)
  {
        dma_free_coherent(buf->dev, buf->size, buf->virt,
@@@ -353,7 -433,7 +433,7 @@@ static void fastrpc_context_free(struc
        ctx = container_of(ref, struct fastrpc_invoke_ctx, refcount);
        cctx = ctx->cctx;
  
-       for (i = 0; i < ctx->nscalars; i++)
+       for (i = 0; i < ctx->nbufs; i++)
                fastrpc_map_put(ctx->maps[i]);
  
        if (ctx->buf)
@@@ -587,11 -667,11 +667,11 @@@ static void fastrpc_dma_buf_detatch(str
        kfree(a);
  }
  
 -static int fastrpc_vmap(struct dma_buf *dmabuf, struct dma_buf_map *map)
 +static int fastrpc_vmap(struct dma_buf *dmabuf, struct iosys_map *map)
  {
        struct fastrpc_buf *buf = dmabuf->priv;
  
 -      dma_buf_map_set_vaddr(map, buf->virt);
 +      iosys_map_set_vaddr(map, buf->virt);
  
        return 0;
  }
@@@ -617,7 -697,7 +697,7 @@@ static const struct dma_buf_ops fastrpc
  };
  
  static int fastrpc_map_create(struct fastrpc_user *fl, int fd,
-                             u64 len, struct fastrpc_map **ppmap)
+                             u64 len, u32 attr, struct fastrpc_map **ppmap)
  {
        struct fastrpc_session_ctx *sess = fl->sctx;
        struct fastrpc_map *map = NULL;
        map->len = len;
        kref_init(&map->refcount);
  
+       if (attr & FASTRPC_ATTR_SECUREMAP) {
+               /*
+                * If subsystem VMIDs are defined in DTSI, then do
+                * hyp_assign from HLOS to those VM(s)
+                */
+               unsigned int perms = BIT(QCOM_SCM_VMID_HLOS);
+               map->attr = attr;
+               err = qcom_scm_assign_mem(map->phys, (u64)map->size, &perms,
+                               fl->cctx->vmperms, fl->cctx->vmcount);
+               if (err) {
+                       dev_err(sess->dev, "Failed to assign memory with phys 0x%llx size 0x%llx err %d",
+                                       map->phys, map->size, err);
+                       goto map_err;
+               }
+       }
        spin_lock(&fl->lock);
        list_add_tail(&map->node, &fl->maps);
        spin_unlock(&fl->lock);
@@@ -682,7 -778,7 +778,7 @@@ get_err
   * >>>>>>  START of METADATA <<<<<<<<<
   * +---------------------------------+
   * |           Arguments             |
-  * | type:(struct fastrpc_remote_arg)|
+  * | type:(union fastrpc_remote_arg)|
   * |             (0 - N)             |
   * +---------------------------------+
   * |         Invoke Buffer list      |
@@@ -707,7 -803,7 +803,7 @@@ static int fastrpc_get_meta_size(struc
  {
        int size = 0;
  
-       size = (sizeof(struct fastrpc_remote_arg) +
+       size = (sizeof(struct fastrpc_remote_buf) +
                sizeof(struct fastrpc_invoke_buf) +
                sizeof(struct fastrpc_phy_page)) * ctx->nscalars +
                sizeof(u64) * FASTRPC_MAX_FDLIST +
@@@ -743,16 -839,13 +839,13 @@@ static int fastrpc_create_maps(struct f
        int i, err;
  
        for (i = 0; i < ctx->nscalars; ++i) {
-               /* Make sure reserved field is set to 0 */
-               if (ctx->args[i].reserved)
-                       return -EINVAL;
  
                if (ctx->args[i].fd == 0 || ctx->args[i].fd == -1 ||
                    ctx->args[i].length == 0)
                        continue;
  
                err = fastrpc_map_create(ctx->fl, ctx->args[i].fd,
-                                        ctx->args[i].length, &ctx->maps[i]);
+                        ctx->args[i].length, ctx->args[i].attr, &ctx->maps[i]);
                if (err) {
                        dev_err(dev, "Error Creating map %d\n", err);
                        return -EINVAL;
        return 0;
  }
  
+ static struct fastrpc_invoke_buf *fastrpc_invoke_buf_start(union fastrpc_remote_arg *pra, int len)
+ {
+       return (struct fastrpc_invoke_buf *)(&pra[len]);
+ }
+ static struct fastrpc_phy_page *fastrpc_phy_page_start(struct fastrpc_invoke_buf *buf, int len)
+ {
+       return (struct fastrpc_phy_page *)(&buf[len]);
+ }
  static int fastrpc_get_args(u32 kernel, struct fastrpc_invoke_ctx *ctx)
  {
        struct device *dev = ctx->fl->sctx->dev;
-       struct fastrpc_remote_arg *rpra;
+       union fastrpc_remote_arg *rpra;
        struct fastrpc_invoke_buf *list;
        struct fastrpc_phy_page *pages;
        int inbufs, i, oix, err = 0;
                return err;
  
        rpra = ctx->buf->virt;
-       list = ctx->buf->virt + ctx->nscalars * sizeof(*rpra);
-       pages = ctx->buf->virt + ctx->nscalars * (sizeof(*list) +
-               sizeof(*rpra));
+       list = fastrpc_invoke_buf_start(rpra, ctx->nscalars);
+       pages = fastrpc_phy_page_start(list, ctx->nscalars);
        args = (uintptr_t)ctx->buf->virt + metalen;
        rlen = pkt_size - metalen;
        ctx->rpra = rpra;
                i = ctx->olaps[oix].raix;
                len = ctx->args[i].length;
  
-               rpra[i].pv = 0;
-               rpra[i].len = len;
+               rpra[i].buf.pv = 0;
+               rpra[i].buf.len = len;
                list[i].num = len ? 1 : 0;
                list[i].pgidx = i;
  
                if (ctx->maps[i]) {
                        struct vm_area_struct *vma = NULL;
  
-                       rpra[i].pv = (u64) ctx->args[i].ptr;
+                       rpra[i].buf.pv = (u64) ctx->args[i].ptr;
                        pages[i].addr = ctx->maps[i]->phys;
  
                        mmap_read_lock(current->mm);
                        if (rlen < mlen)
                                goto bail;
  
-                       rpra[i].pv = args - ctx->olaps[oix].offset;
+                       rpra[i].buf.pv = args - ctx->olaps[oix].offset;
                        pages[i].addr = ctx->buf->phys -
                                        ctx->olaps[oix].offset +
                                        (pkt_size - rlen);
                }
  
                if (i < inbufs && !ctx->maps[i]) {
-                       void *dst = (void *)(uintptr_t)rpra[i].pv;
+                       void *dst = (void *)(uintptr_t)rpra[i].buf.pv;
                        void *src = (void *)(uintptr_t)ctx->args[i].ptr;
  
                        if (!kernel) {
        }
  
        for (i = ctx->nbufs; i < ctx->nscalars; ++i) {
-               rpra[i].pv = (u64) ctx->args[i].ptr;
-               rpra[i].len = ctx->args[i].length;
                list[i].num = ctx->args[i].length ? 1 : 0;
                list[i].pgidx = i;
-               pages[i].addr = ctx->maps[i]->phys;
-               pages[i].size = ctx->maps[i]->size;
+               if (ctx->maps[i]) {
+                       pages[i].addr = ctx->maps[i]->phys;
+                       pages[i].size = ctx->maps[i]->size;
+               }
+               rpra[i].dma.fd = ctx->args[i].fd;
+               rpra[i].dma.len = ctx->args[i].length;
+               rpra[i].dma.offset = (u64) ctx->args[i].ptr;
        }
  
  bail:
  static int fastrpc_put_args(struct fastrpc_invoke_ctx *ctx,
                            u32 kernel)
  {
-       struct fastrpc_remote_arg *rpra = ctx->rpra;
-       int i, inbufs;
+       union fastrpc_remote_arg *rpra = ctx->rpra;
+       struct fastrpc_user *fl = ctx->fl;
+       struct fastrpc_map *mmap = NULL;
+       struct fastrpc_invoke_buf *list;
+       struct fastrpc_phy_page *pages;
+       u64 *fdlist;
+       int i, inbufs, outbufs, handles;
  
        inbufs = REMOTE_SCALARS_INBUFS(ctx->sc);
+       outbufs = REMOTE_SCALARS_OUTBUFS(ctx->sc);
+       handles = REMOTE_SCALARS_INHANDLES(ctx->sc) + REMOTE_SCALARS_OUTHANDLES(ctx->sc);
+       list = fastrpc_invoke_buf_start(rpra, ctx->nscalars);
+       pages = fastrpc_phy_page_start(list, ctx->nscalars);
+       fdlist = (uint64_t *)(pages + inbufs + outbufs + handles);
  
        for (i = inbufs; i < ctx->nbufs; ++i) {
                if (!ctx->maps[i]) {
-                       void *src = (void *)(uintptr_t)rpra[i].pv;
+                       void *src = (void *)(uintptr_t)rpra[i].buf.pv;
                        void *dst = (void *)(uintptr_t)ctx->args[i].ptr;
-                       u64 len = rpra[i].len;
+                       u64 len = rpra[i].buf.len;
  
                        if (!kernel) {
                                if (copy_to_user((void __user *)dst, src, len))
                }
        }
  
+       for (i = 0; i < FASTRPC_MAX_FDLIST; i++) {
+               if (!fdlist[i])
+                       break;
+               if (!fastrpc_map_lookup(fl, (int)fdlist[i], &mmap))
+                       fastrpc_map_put(mmap);
+       }
        return 0;
  }
  
@@@ -1016,6 -1138,24 +1138,24 @@@ bail
        return err;
  }
  
+ static bool is_session_rejected(struct fastrpc_user *fl, bool unsigned_pd_request)
+ {
+       /* Check if the device node is non-secure and channel is secure*/
+       if (!fl->is_secure_dev && fl->cctx->secure) {
+               /*
+                * Allow untrusted applications to offload only to Unsigned PD when
+                * channel is configured as secure and block untrusted apps on channel
+                * that does not support unsigned PD offload
+                */
+               if (!fl->cctx->unsigned_support || !unsigned_pd_request) {
+                       dev_err(&fl->cctx->rpdev->dev, "Error: Untrusted application trying to offload to signed PD");
+                       return true;
+               }
+       }
+       return false;
+ }
  static int fastrpc_init_create_process(struct fastrpc_user *fl,
                                        char __user *argp)
  {
                u32 siglen;
        } inbuf;
        u32 sc;
+       bool unsigned_module = false;
  
        args = kcalloc(FASTRPC_CREATE_PROCESS_NARGS, sizeof(*args), GFP_KERNEL);
        if (!args)
                goto err;
        }
  
+       if (init.attrs & FASTRPC_MODE_UNSIGNED_MODULE)
+               unsigned_module = true;
+       if (is_session_rejected(fl, unsigned_module)) {
+               err = -ECONNREFUSED;
+               goto err;
+       }
        if (init.filelen > INIT_FILELEN_MAX) {
                err = -EINVAL;
                goto err;
        fl->pd = USER_PD;
  
        if (init.filelen && init.filefd) {
-               err = fastrpc_map_create(fl, init.filefd, init.filelen, &map);
+               err = fastrpc_map_create(fl, init.filefd, init.filelen, 0, &map);
                if (err)
                        goto err;
        }
@@@ -1168,7 -1317,6 +1317,6 @@@ static int fastrpc_release_current_dsp_
        args[0].ptr = (u64)(uintptr_t) &tgid;
        args[0].length = sizeof(tgid);
        args[0].fd = -1;
-       args[0].reserved = 0;
        sc = FASTRPC_SCALARS(FASTRPC_RMID_INIT_RELEASE, 1, 0);
  
        return fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE,
@@@ -1220,10 -1368,14 +1368,14 @@@ static int fastrpc_device_release(struc
  
  static int fastrpc_device_open(struct inode *inode, struct file *filp)
  {
-       struct fastrpc_channel_ctx *cctx = miscdev_to_cctx(filp->private_data);
+       struct fastrpc_channel_ctx *cctx;
+       struct fastrpc_device *fdevice;
        struct fastrpc_user *fl = NULL;
        unsigned long flags;
  
+       fdevice = miscdev_to_fdevice(filp->private_data);
+       cctx = fdevice->cctx;
        fl = kzalloc(sizeof(*fl), GFP_KERNEL);
        if (!fl)
                return -ENOMEM;
        INIT_LIST_HEAD(&fl->user);
        fl->tgid = current->tgid;
        fl->cctx = cctx;
+       fl->is_secure_dev = fdevice->secure;
  
        fl->sctx = fastrpc_session_alloc(cctx);
        if (!fl->sctx) {
@@@ -1311,7 -1464,6 +1464,6 @@@ static int fastrpc_init_attach(struct f
        args[0].ptr = (u64)(uintptr_t) &tgid;
        args[0].length = sizeof(tgid);
        args[0].fd = -1;
-       args[0].reserved = 0;
        sc = FASTRPC_SCALARS(FASTRPC_RMID_INIT_ATTACH, 1, 0);
        fl->pd = pd;
  
@@@ -1349,6 -1501,107 +1501,107 @@@ static int fastrpc_invoke(struct fastrp
        return err;
  }
  
+ static int fastrpc_get_info_from_dsp(struct fastrpc_user *fl, uint32_t *dsp_attr_buf,
+                                    uint32_t dsp_attr_buf_len)
+ {
+       struct fastrpc_invoke_args args[2] = { 0 };
+       /* Capability filled in userspace */
+       dsp_attr_buf[0] = 0;
+       args[0].ptr = (u64)(uintptr_t)&dsp_attr_buf_len;
+       args[0].length = sizeof(dsp_attr_buf_len);
+       args[0].fd = -1;
+       args[1].ptr = (u64)(uintptr_t)&dsp_attr_buf[1];
+       args[1].length = dsp_attr_buf_len;
+       args[1].fd = -1;
+       fl->pd = 1;
+       return fastrpc_internal_invoke(fl, true, FASTRPC_DSP_UTILITIES_HANDLE,
+                                      FASTRPC_SCALARS(0, 1, 1), args);
+ }
+ static int fastrpc_get_info_from_kernel(struct fastrpc_ioctl_capability *cap,
+                                       struct fastrpc_user *fl)
+ {
+       struct fastrpc_channel_ctx *cctx = fl->cctx;
+       uint32_t attribute_id = cap->attribute_id;
+       uint32_t *dsp_attributes;
+       unsigned long flags;
+       uint32_t domain = cap->domain;
+       int err;
+       spin_lock_irqsave(&cctx->lock, flags);
+       /* check if we already have queried dsp for attributes */
+       if (cctx->valid_attributes) {
+               spin_unlock_irqrestore(&cctx->lock, flags);
+               goto done;
+       }
+       spin_unlock_irqrestore(&cctx->lock, flags);
+       dsp_attributes = kzalloc(FASTRPC_MAX_DSP_ATTRIBUTES_LEN, GFP_KERNEL);
+       if (!dsp_attributes)
+               return -ENOMEM;
+       err = fastrpc_get_info_from_dsp(fl, dsp_attributes, FASTRPC_MAX_DSP_ATTRIBUTES_LEN);
+       if (err == DSP_UNSUPPORTED_API) {
+               dev_info(&cctx->rpdev->dev,
+                        "Warning: DSP capabilities not supported on domain: %d\n", domain);
+               kfree(dsp_attributes);
+               return -EOPNOTSUPP;
+       } else if (err) {
+               dev_err(&cctx->rpdev->dev, "Error: dsp information is incorrect err: %d\n", err);
+               kfree(dsp_attributes);
+               return err;
+       }
+       spin_lock_irqsave(&cctx->lock, flags);
+       memcpy(cctx->dsp_attributes, dsp_attributes, FASTRPC_MAX_DSP_ATTRIBUTES_LEN);
+       cctx->valid_attributes = true;
+       spin_unlock_irqrestore(&cctx->lock, flags);
+       kfree(dsp_attributes);
+ done:
+       cap->capability = cctx->dsp_attributes[attribute_id];
+       return 0;
+ }
+ static int fastrpc_get_dsp_info(struct fastrpc_user *fl, char __user *argp)
+ {
+       struct fastrpc_ioctl_capability cap = {0};
+       int err = 0;
+       if (copy_from_user(&cap, argp, sizeof(cap)))
+               return  -EFAULT;
+       cap.capability = 0;
+       if (cap.domain >= FASTRPC_DEV_MAX) {
+               dev_err(&fl->cctx->rpdev->dev, "Error: Invalid domain id:%d, err:%d\n",
+                       cap.domain, err);
+               return -ECHRNG;
+       }
+       /* Fastrpc Capablities does not support modem domain */
+       if (cap.domain == MDSP_DOMAIN_ID) {
+               dev_err(&fl->cctx->rpdev->dev, "Error: modem not supported %d\n", err);
+               return -ECHRNG;
+       }
+       if (cap.attribute_id >= FASTRPC_MAX_DSP_ATTRIBUTES) {
+               dev_err(&fl->cctx->rpdev->dev, "Error: invalid attribute: %d, err: %d\n",
+                       cap.attribute_id, err);
+               return -EOVERFLOW;
+       }
+       err = fastrpc_get_info_from_kernel(&cap, fl);
+       if (err)
+               return err;
+       if (copy_to_user(argp, &cap.capability, sizeof(cap.capability)))
+               return -EFAULT;
+       return 0;
+ }
  static int fastrpc_req_munmap_impl(struct fastrpc_user *fl,
                                   struct fastrpc_req_munmap *req)
  {
@@@ -1491,6 -1744,134 +1744,134 @@@ err_invoke
        return err;
  }
  
+ static int fastrpc_req_mem_unmap_impl(struct fastrpc_user *fl, struct fastrpc_mem_unmap *req)
+ {
+       struct fastrpc_invoke_args args[1] = { [0] = { 0 } };
+       struct fastrpc_map *map = NULL, *m;
+       struct fastrpc_mem_unmap_req_msg req_msg = { 0 };
+       int err = 0;
+       u32 sc;
+       struct device *dev = fl->sctx->dev;
+       spin_lock(&fl->lock);
+       list_for_each_entry_safe(map, m, &fl->maps, node) {
+               if ((req->fd < 0 || map->fd == req->fd) && (map->raddr == req->vaddr))
+                       break;
+               map = NULL;
+       }
+       spin_unlock(&fl->lock);
+       if (!map) {
+               dev_err(dev, "map not in list\n");
+               return -EINVAL;
+       }
+       req_msg.pgid = fl->tgid;
+       req_msg.len = map->len;
+       req_msg.vaddrin = map->raddr;
+       req_msg.fd = map->fd;
+       args[0].ptr = (u64) (uintptr_t) &req_msg;
+       args[0].length = sizeof(req_msg);
+       sc = FASTRPC_SCALARS(FASTRPC_RMID_INIT_MEM_UNMAP, 1, 0);
+       err = fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc,
+                                     &args[0]);
+       fastrpc_map_put(map);
+       if (err)
+               dev_err(dev, "unmmap\tpt fd = %d, 0x%09llx error\n",  map->fd, map->raddr);
+       return err;
+ }
+ static int fastrpc_req_mem_unmap(struct fastrpc_user *fl, char __user *argp)
+ {
+       struct fastrpc_mem_unmap req;
+       if (copy_from_user(&req, argp, sizeof(req)))
+               return -EFAULT;
+       return fastrpc_req_mem_unmap_impl(fl, &req);
+ }
+ static int fastrpc_req_mem_map(struct fastrpc_user *fl, char __user *argp)
+ {
+       struct fastrpc_invoke_args args[4] = { [0 ... 3] = { 0 } };
+       struct fastrpc_mem_map_req_msg req_msg = { 0 };
+       struct fastrpc_mmap_rsp_msg rsp_msg = { 0 };
+       struct fastrpc_mem_unmap req_unmap = { 0 };
+       struct fastrpc_phy_page pages = { 0 };
+       struct fastrpc_mem_map req;
+       struct device *dev = fl->sctx->dev;
+       struct fastrpc_map *map = NULL;
+       int err;
+       u32 sc;
+       if (copy_from_user(&req, argp, sizeof(req)))
+               return -EFAULT;
+       /* create SMMU mapping */
+       err = fastrpc_map_create(fl, req.fd, req.length, 0, &map);
+       if (err) {
+               dev_err(dev, "failed to map buffer, fd = %d\n", req.fd);
+               return err;
+       }
+       req_msg.pgid = fl->tgid;
+       req_msg.fd = req.fd;
+       req_msg.offset = req.offset;
+       req_msg.vaddrin = req.vaddrin;
+       map->va = (void *) (uintptr_t) req.vaddrin;
+       req_msg.flags = req.flags;
+       req_msg.num = sizeof(pages);
+       req_msg.data_len = 0;
+       args[0].ptr = (u64) (uintptr_t) &req_msg;
+       args[0].length = sizeof(req_msg);
+       pages.addr = map->phys;
+       pages.size = map->size;
+       args[1].ptr = (u64) (uintptr_t) &pages;
+       args[1].length = sizeof(pages);
+       args[2].ptr = (u64) (uintptr_t) &pages;
+       args[2].length = 0;
+       args[3].ptr = (u64) (uintptr_t) &rsp_msg;
+       args[3].length = sizeof(rsp_msg);
+       sc = FASTRPC_SCALARS(FASTRPC_RMID_INIT_MEM_MAP, 3, 1);
+       err = fastrpc_internal_invoke(fl, true, FASTRPC_INIT_HANDLE, sc, &args[0]);
+       if (err) {
+               dev_err(dev, "mem mmap error, fd %d, vaddr %llx, size %lld\n",
+                       req.fd, req.vaddrin, map->size);
+               goto err_invoke;
+       }
+       /* update the buffer to be able to deallocate the memory on the DSP */
+       map->raddr = rsp_msg.vaddr;
+       /* let the client know the address to use */
+       req.vaddrout = rsp_msg.vaddr;
+       if (copy_to_user((void __user *)argp, &req, sizeof(req))) {
+               /* unmap the memory and release the buffer */
+               req_unmap.vaddr = (uintptr_t) rsp_msg.vaddr;
+               req_unmap.length = map->size;
+               fastrpc_req_mem_unmap_impl(fl, &req_unmap);
+               return -EFAULT;
+       }
+       return 0;
+ err_invoke:
+       fastrpc_map_put(map);
+       return err;
+ }
  static long fastrpc_device_ioctl(struct file *file, unsigned int cmd,
                                 unsigned long arg)
  {
        case FASTRPC_IOCTL_MUNMAP:
                err = fastrpc_req_munmap(fl, argp);
                break;
+       case FASTRPC_IOCTL_MEM_MAP:
+               err = fastrpc_req_mem_map(fl, argp);
+               break;
+       case FASTRPC_IOCTL_MEM_UNMAP:
+               err = fastrpc_req_mem_unmap(fl, argp);
+               break;
+       case FASTRPC_IOCTL_GET_DSP_INFO:
+               err = fastrpc_get_dsp_info(fl, argp);
+               break;
        default:
                err = -ENOTTY;
                break;
@@@ -1615,12 -2005,41 +2005,41 @@@ static struct platform_driver fastrpc_c
        },
  };
  
+ static int fastrpc_device_register(struct device *dev, struct fastrpc_channel_ctx *cctx,
+                                  bool is_secured, const char *domain)
+ {
+       struct fastrpc_device *fdev;
+       int err;
+       fdev = devm_kzalloc(dev, sizeof(*fdev), GFP_KERNEL);
+       if (!fdev)
+               return -ENOMEM;
+       fdev->secure = is_secured;
+       fdev->cctx = cctx;
+       fdev->miscdev.minor = MISC_DYNAMIC_MINOR;
+       fdev->miscdev.fops = &fastrpc_fops;
+       fdev->miscdev.name = devm_kasprintf(dev, GFP_KERNEL, "fastrpc-%s%s",
+                                           domain, is_secured ? "-secure" : "");
+       err = misc_register(&fdev->miscdev);
+       if (!err) {
+               if (is_secured)
+                       cctx->secure_fdevice = fdev;
+               else
+                       cctx->fdevice = fdev;
+       }
+       return err;
+ }
  static int fastrpc_rpmsg_probe(struct rpmsg_device *rpdev)
  {
        struct device *rdev = &rpdev->dev;
        struct fastrpc_channel_ctx *data;
-       int i, err, domain_id = -1;
+       int i, err, domain_id = -1, vmcount;
        const char *domain;
+       bool secure_dsp;
+       unsigned int vmids[FASTRPC_MAX_VMIDS];
  
        err = of_property_read_string(rdev->of_node, "label", &domain);
        if (err) {
                return -EINVAL;
        }
  
+       vmcount = of_property_read_variable_u32_array(rdev->of_node,
+                               "qcom,vmids", &vmids[0], 0, FASTRPC_MAX_VMIDS);
+       if (vmcount < 0)
+               vmcount = 0;
+       else if (!qcom_scm_is_available())
+               return -EPROBE_DEFER;
        data = kzalloc(sizeof(*data), GFP_KERNEL);
        if (!data)
                return -ENOMEM;
  
-       data->miscdev.minor = MISC_DYNAMIC_MINOR;
-       data->miscdev.name = devm_kasprintf(rdev, GFP_KERNEL, "fastrpc-%s",
-                                           domains[domain_id]);
-       data->miscdev.fops = &fastrpc_fops;
-       err = misc_register(&data->miscdev);
-       if (err) {
-               kfree(data);
-               return err;
+       if (vmcount) {
+               data->vmcount = vmcount;
+               data->perms = BIT(QCOM_SCM_VMID_HLOS);
+               for (i = 0; i < data->vmcount; i++) {
+                       data->vmperms[i].vmid = vmids[i];
+                       data->vmperms[i].perm = QCOM_SCM_PERM_RWX;
+               }
+       }
+       secure_dsp = !(of_property_read_bool(rdev->of_node, "qcom,non-secure-domain"));
+       data->secure = secure_dsp;
+       switch (domain_id) {
+       case ADSP_DOMAIN_ID:
+       case MDSP_DOMAIN_ID:
+       case SDSP_DOMAIN_ID:
+               /* Unsigned PD offloading is only supported on CDSP*/
+               data->unsigned_support = false;
+               err = fastrpc_device_register(rdev, data, secure_dsp, domains[domain_id]);
+               if (err)
+                       goto fdev_error;
+               break;
+       case CDSP_DOMAIN_ID:
+               data->unsigned_support = true;
+               /* Create both device nodes so that we can allow both Signed and Unsigned PD */
+               err = fastrpc_device_register(rdev, data, true, domains[domain_id]);
+               if (err)
+                       goto fdev_error;
+               err = fastrpc_device_register(rdev, data, false, domains[domain_id]);
+               if (err)
+                       goto fdev_error;
+               break;
+       default:
+               err = -EINVAL;
+               goto fdev_error;
        }
  
        kref_init(&data->refcount);
        data->rpdev = rpdev;
  
        return of_platform_populate(rdev->of_node, NULL, NULL, rdev);
+ fdev_error:
+       kfree(data);
+       return err;
  }
  
  static void fastrpc_notify_users(struct fastrpc_user *user)
@@@ -1688,7 -2145,12 +2145,12 @@@ static void fastrpc_rpmsg_remove(struc
                fastrpc_notify_users(user);
        spin_unlock_irqrestore(&cctx->lock, flags);
  
-       misc_deregister(&cctx->miscdev);
+       if (cctx->fdevice)
+               misc_deregister(&cctx->fdevice->miscdev);
+       if (cctx->secure_fdevice)
+               misc_deregister(&cctx->secure_fdevice->miscdev);
        of_platform_depopulate(&rpdev->dev);
  
        cctx->rpdev = NULL;
@@@ -540,19 -540,19 +540,19 @@@ struct cpucp_packet 
  struct cpucp_unmask_irq_arr_packet {
        struct cpucp_packet cpucp_pkt;
        __le32 length;
 -      __le32 irqs[0];
 +      __le32 irqs[];
  };
  
  struct cpucp_nic_status_packet {
        struct cpucp_packet cpucp_pkt;
        __le32 length;
 -      __le32 data[0];
 +      __le32 data[];
  };
  
  struct cpucp_array_data_packet {
        struct cpucp_packet cpucp_pkt;
        __le32 length;
 -      __le32 data[0];
 +      __le32 data[];
  };
  
  enum cpucp_packet_rc {
@@@ -780,6 -780,7 +780,7 @@@ struct cpucp_security_info 
   *                     (0 = functional 1 = binned)
   * @xbar_binning_mask: Xbar binning mask, 1 bit per Xbar instance
   *                     (0 = functional 1 = binned)
+  * @fw_os_version: Firmware OS Version
   */
  struct cpucp_info {
        struct cpucp_sensor sensors[CPUCP_MAX_SENSORS];
        __le32 reserved6;
        __u8 pll_map[PLL_MAP_LEN];
        __le64 mme_binning_mask;
+       __u8 fw_os_version[VERSION_MAX_LEN];
  };
  
  struct cpucp_mac_addr {
@@@ -38,7 -38,10 +38,7 @@@ struct realtek_pci_sdmmc 
        bool                    double_clk;
        bool                    eject;
        bool                    initial_mode;
 -      int                     power_state;
 -#define SDMMC_POWER_ON                1
 -#define SDMMC_POWER_OFF               0
 -
 +      int                     prev_power_state;
        int                     sg_count;
        s32                     cookie;
        int                     cookie_sg_count;
@@@ -902,7 -905,7 +902,7 @@@ static int sd_set_bus_width(struct real
        return err;
  }
  
 -static int sd_power_on(struct realtek_pci_sdmmc *host)
 +static int sd_power_on(struct realtek_pci_sdmmc *host, unsigned char power_mode)
  {
        struct rtsx_pcr *pcr = host->pcr;
        struct mmc_host *mmc = host->mmc;
        u32 val;
        u8 test_mode;
  
 -      if (host->power_state == SDMMC_POWER_ON)
 +      if (host->prev_power_state == MMC_POWER_ON)
                return 0;
  
 +      if (host->prev_power_state == MMC_POWER_UP) {
 +              rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, 0);
 +              goto finish;
 +      }
 +
        msleep(100);
  
        rtsx_pci_init_cmd(pcr);
        if (err < 0)
                return err;
  
 +      mdelay(1);
 +
        err = rtsx_pci_write_register(pcr, CARD_OE, SD_OUTPUT_EN, SD_OUTPUT_EN);
        if (err < 0)
                return err;
  
 +      /* send at least 74 clocks */
 +      rtsx_pci_write_register(pcr, SD_BUS_STAT, SD_CLK_TOGGLE_EN, SD_CLK_TOGGLE_EN);
 +
        if (PCI_PID(pcr) == PID_5261) {
                /*
                 * If test mode is set switch to SD Express mandatorily,
                }
        }
  
 -      host->power_state = SDMMC_POWER_ON;
 +finish:
 +      host->prev_power_state = power_mode;
        return 0;
  }
  
@@@ -981,7 -973,7 +981,7 @@@ static int sd_power_off(struct realtek_
        struct rtsx_pcr *pcr = host->pcr;
        int err;
  
 -      host->power_state = SDMMC_POWER_OFF;
 +      host->prev_power_state = MMC_POWER_OFF;
  
        rtsx_pci_init_cmd(pcr);
  
@@@ -1007,7 -999,7 +1007,7 @@@ static int sd_set_power_mode(struct rea
        if (power_mode == MMC_POWER_OFF)
                err = sd_power_off(host);
        else
 -              err = sd_power_on(host);
 +              err = sd_power_on(host, power_mode);
  
        return err;
  }
@@@ -1490,11 -1482,10 +1490,11 @@@ static int rtsx_pci_sdmmc_drv_probe(str
  
        host = mmc_priv(mmc);
        host->pcr = pcr;
 +      mmc->ios.power_delay_ms = 5;
        host->mmc = mmc;
        host->pdev = pdev;
        host->cookie = -1;
 -      host->power_state = SDMMC_POWER_OFF;
 +      host->prev_power_state = MMC_POWER_OFF;
        INIT_WORK(&host->work, sd_request);
        platform_set_drvdata(pdev, host);
        pcr->slots[RTSX_SD_CARD].p_dev = pdev;
  
        realtek_init_host(host);
  
-       if (pcr->rtd3_en) {
-               pm_runtime_set_autosuspend_delay(&pdev->dev, 5000);
-               pm_runtime_use_autosuspend(&pdev->dev);
-               pm_runtime_enable(&pdev->dev);
-       }
+       pm_runtime_no_callbacks(&pdev->dev);
+       pm_runtime_set_active(&pdev->dev);
+       pm_runtime_enable(&pdev->dev);
+       pm_runtime_set_autosuspend_delay(&pdev->dev, 200);
+       pm_runtime_mark_last_busy(&pdev->dev);
+       pm_runtime_use_autosuspend(&pdev->dev);
  
        mmc_add_host(mmc);
  
@@@ -1530,11 -1521,6 +1530,6 @@@ static int rtsx_pci_sdmmc_drv_remove(st
        pcr->slots[RTSX_SD_CARD].card_event = NULL;
        mmc = host->mmc;
  
-       if (pcr->rtd3_en) {
-               pm_runtime_dont_use_autosuspend(&pdev->dev);
-               pm_runtime_disable(&pdev->dev);
-       }
        cancel_work_sync(&host->work);
  
        mutex_lock(&host->host_mutex);
  
        flush_work(&host->work);
  
+       pm_runtime_dont_use_autosuspend(&pdev->dev);
+       pm_runtime_disable(&pdev->dev);
        mmc_free_host(mmc);
  
        dev_dbg(&(pdev->dev),
diff --combined drivers/mtd/mtdcore.c
@@@ -336,31 -336,49 +336,31 @@@ static const struct device_type mtd_dev
        .release        = mtd_release,
  };
  
 -static int mtd_partid_debug_show(struct seq_file *s, void *p)
 -{
 -      struct mtd_info *mtd = s->private;
 -
 -      seq_printf(s, "%s\n", mtd->dbg.partid);
 +static bool mtd_expert_analysis_mode;
  
 -      return 0;
 -}
 -
 -DEFINE_SHOW_ATTRIBUTE(mtd_partid_debug);
 -
 -static int mtd_partname_debug_show(struct seq_file *s, void *p)
 +#ifdef CONFIG_DEBUG_FS
 +bool mtd_check_expert_analysis_mode(void)
  {
 -      struct mtd_info *mtd = s->private;
 -
 -      seq_printf(s, "%s\n", mtd->dbg.partname);
 +      const char *mtd_expert_analysis_warning =
 +              "Bad block checks have been entirely disabled.\n"
 +              "This is only reserved for post-mortem forensics and debug purposes.\n"
 +              "Never enable this mode if you do not know what you are doing!\n";
  
 -      return 0;
 +      return WARN_ONCE(mtd_expert_analysis_mode, mtd_expert_analysis_warning);
  }
 -
 -DEFINE_SHOW_ATTRIBUTE(mtd_partname_debug);
 +EXPORT_SYMBOL_GPL(mtd_check_expert_analysis_mode);
 +#endif
  
  static struct dentry *dfs_dir_mtd;
  
  static void mtd_debugfs_populate(struct mtd_info *mtd)
  {
 -      struct mtd_info *master = mtd_get_master(mtd);
        struct device *dev = &mtd->dev;
 -      struct dentry *root;
  
        if (IS_ERR_OR_NULL(dfs_dir_mtd))
                return;
  
 -      root = debugfs_create_dir(dev_name(dev), dfs_dir_mtd);
 -      mtd->dbg.dfs_dir = root;
 -
 -      if (master->dbg.partid)
 -              debugfs_create_file("partid", 0400, root, master,
 -                                  &mtd_partid_debug_fops);
 -
 -      if (master->dbg.partname)
 -              debugfs_create_file("partname", 0400, root, master,
 -                                  &mtd_partname_debug_fops);
 +      mtd->dbg.dfs_dir = debugfs_create_dir(dev_name(dev), dfs_dir_mtd);
  }
  
  #ifndef CONFIG_MMU
@@@ -725,8 -743,7 +725,7 @@@ int del_mtd_device(struct mtd_info *mtd
                debugfs_remove_recursive(mtd->dbg.dfs_dir);
  
                /* Try to remove the NVMEM provider */
-               if (mtd->nvmem)
-                       nvmem_unregister(mtd->nvmem);
+               nvmem_unregister(mtd->nvmem);
  
                device_unregister(&mtd->dev);
  
@@@ -905,8 -922,7 +904,7 @@@ static int mtd_otp_nvmem_add(struct mtd
        return 0;
  
  err:
-       if (mtd->otp_user_nvmem)
-               nvmem_unregister(mtd->otp_user_nvmem);
+       nvmem_unregister(mtd->otp_user_nvmem);
        return err;
  }
  
@@@ -1010,11 -1026,8 +1008,8 @@@ int mtd_device_unregister(struct mtd_in
                memset(&master->reboot_notifier, 0, sizeof(master->reboot_notifier));
        }
  
-       if (master->otp_user_nvmem)
-               nvmem_unregister(master->otp_user_nvmem);
-       if (master->otp_factory_nvmem)
-               nvmem_unregister(master->otp_factory_nvmem);
+       nvmem_unregister(master->otp_user_nvmem);
+       nvmem_unregister(master->otp_factory_nvmem);
  
        err = del_mtd_partitions(master);
        if (err)
@@@ -2354,6 -2367,14 +2349,6 @@@ static struct backing_dev_info * __ini
        return ret ? ERR_PTR(ret) : bdi;
  }
  
 -char *mtd_expert_analysis_warning =
 -      "Bad block checks have been entirely disabled.\n"
 -      "This is only reserved for post-mortem forensics and debug purposes.\n"
 -      "Never enable this mode if you do not know what you are doing!\n";
 -EXPORT_SYMBOL_GPL(mtd_expert_analysis_warning);
 -bool mtd_expert_analysis_mode;
 -EXPORT_SYMBOL_GPL(mtd_expert_analysis_mode);
 -
  static struct proc_dir_entry *proc_mtd;
  
  static int __init init_mtd(void)
  #define     PCIE_CORE_ERR_CAPCTL_ECRC_CHK_TX_EN                       BIT(6)
  #define     PCIE_CORE_ERR_CAPCTL_ECRC_CHCK                    BIT(7)
  #define     PCIE_CORE_ERR_CAPCTL_ECRC_CHCK_RCV                        BIT(8)
 -#define     PCIE_CORE_INT_A_ASSERT_ENABLE                     1
 -#define     PCIE_CORE_INT_B_ASSERT_ENABLE                     2
 -#define     PCIE_CORE_INT_C_ASSERT_ENABLE                     3
 -#define     PCIE_CORE_INT_D_ASSERT_ENABLE                     4
  /* PIO registers base address and register offsets */
  #define PIO_BASE_ADDR                         0x4000
  #define PIO_CTRL                              (PIO_BASE_ADDR + 0x0)
  #define PCIE_MSG_PM_PME_MASK                  BIT(7)
  #define PCIE_ISR0_MASK_REG                    (CONTROL_BASE_ADDR + 0x44)
  #define     PCIE_ISR0_MSI_INT_PENDING         BIT(24)
 +#define     PCIE_ISR0_CORR_ERR                        BIT(11)
 +#define     PCIE_ISR0_NFAT_ERR                        BIT(12)
 +#define     PCIE_ISR0_FAT_ERR                 BIT(13)
 +#define     PCIE_ISR0_ERR_MASK                        GENMASK(13, 11)
  #define     PCIE_ISR0_INTX_ASSERT(val)                BIT(16 + (val))
  #define     PCIE_ISR0_INTX_DEASSERT(val)      BIT(20 + (val))
  #define     PCIE_ISR0_ALL_MASK                        GENMASK(31, 0)
@@@ -272,16 -272,17 +272,16 @@@ struct advk_pcie 
                u32 actions;
        } wins[OB_WIN_COUNT];
        u8 wins_count;
 +      int irq;
 +      struct irq_domain *rp_irq_domain;
        struct irq_domain *irq_domain;
        struct irq_chip irq_chip;
        raw_spinlock_t irq_lock;
        struct irq_domain *msi_domain;
        struct irq_domain *msi_inner_domain;
 -      struct irq_chip msi_bottom_irq_chip;
 -      struct irq_chip msi_irq_chip;
 -      struct msi_domain_info msi_domain_info;
 +      raw_spinlock_t msi_irq_lock;
        DECLARE_BITMAP(msi_used, MSI_IRQ_NUM);
        struct mutex msi_used_lock;
 -      u16 msi_msg;
        int link_gen;
        struct pci_bridge_emul bridge;
        struct gpio_desc *reset_gpio;
@@@ -476,7 -477,6 +476,7 @@@ static void advk_pcie_disable_ob_win(st
  
  static void advk_pcie_setup_hw(struct advk_pcie *pcie)
  {
 +      phys_addr_t msi_addr;
        u32 reg;
        int i;
  
         */
        reg = advk_readl(pcie, PCIE_CORE_DEV_REV_REG);
        reg &= ~0xffffff00;
 -      reg |= (PCI_CLASS_BRIDGE_PCI << 8) << 8;
 +      reg |= PCI_CLASS_BRIDGE_PCI_NORMAL << 8;
        advk_writel(pcie, reg, PCIE_CORE_DEV_REV_REG);
  
        /* Disable Root Bridge I/O space, memory space and bus mastering */
        reg |= LANE_COUNT_1;
        advk_writel(pcie, reg, PCIE_CORE_CTRL0_REG);
  
 +      /* Set MSI address */
 +      msi_addr = virt_to_phys(pcie);
 +      advk_writel(pcie, lower_32_bits(msi_addr), PCIE_MSI_ADDR_LOW_REG);
 +      advk_writel(pcie, upper_32_bits(msi_addr), PCIE_MSI_ADDR_HIGH_REG);
 +
        /* Enable MSI */
        reg = advk_readl(pcie, PCIE_CORE_CTRL2_REG);
        reg |= PCIE_CORE_CTRL2_MSI_ENABLE;
        advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG);
        advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG);
  
 -      /* Disable All ISR0/1 Sources */
 -      reg = PCIE_ISR0_ALL_MASK;
 +      /* Disable All ISR0/1 and MSI Sources */
 +      advk_writel(pcie, PCIE_ISR0_ALL_MASK, PCIE_ISR0_MASK_REG);
 +      advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_MASK_REG);
 +      advk_writel(pcie, PCIE_MSI_ALL_MASK, PCIE_MSI_MASK_REG);
 +
 +      /* Unmask summary MSI interrupt */
 +      reg = advk_readl(pcie, PCIE_ISR0_MASK_REG);
        reg &= ~PCIE_ISR0_MSI_INT_PENDING;
        advk_writel(pcie, reg, PCIE_ISR0_MASK_REG);
  
 -      advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_MASK_REG);
 -
 -      /* Unmask all MSIs */
 -      advk_writel(pcie, ~(u32)PCIE_MSI_ALL_MASK, PCIE_MSI_MASK_REG);
 +      /* Unmask PME interrupt for processing of PME requester */
 +      reg = advk_readl(pcie, PCIE_ISR0_MASK_REG);
 +      reg &= ~PCIE_MSG_PM_PME_MASK;
 +      advk_writel(pcie, reg, PCIE_ISR0_MASK_REG);
  
        /* Enable summary interrupt for GIC SPI source */
        reg = PCIE_IRQ_ALL_MASK & (~PCIE_IRQ_ENABLE_INTS_MASK);
@@@ -788,15 -778,11 +788,15 @@@ advk_pci_bridge_emul_base_conf_read(str
        case PCI_INTERRUPT_LINE: {
                /*
                 * From the whole 32bit register we support reading from HW only
 -               * one bit: PCI_BRIDGE_CTL_BUS_RESET.
 +               * two bits: PCI_BRIDGE_CTL_BUS_RESET and PCI_BRIDGE_CTL_SERR.
                 * Other bits are retrieved only from emulated config buffer.
                 */
                __le32 *cfgspace = (__le32 *)&bridge->conf;
                u32 val = le32_to_cpu(cfgspace[PCI_INTERRUPT_LINE / 4]);
 +              if (advk_readl(pcie, PCIE_ISR0_MASK_REG) & PCIE_ISR0_ERR_MASK)
 +                      val &= ~(PCI_BRIDGE_CTL_SERR << 16);
 +              else
 +                      val |= PCI_BRIDGE_CTL_SERR << 16;
                if (advk_readl(pcie, PCIE_CORE_CTRL1_REG) & HOT_RESET_GEN)
                        val |= PCI_BRIDGE_CTL_BUS_RESET << 16;
                else
@@@ -822,19 -808,6 +822,19 @@@ advk_pci_bridge_emul_base_conf_write(st
                break;
  
        case PCI_INTERRUPT_LINE:
 +              /*
 +               * According to Figure 6-3: Pseudo Logic Diagram for Error
 +               * Message Controls in PCIe base specification, SERR# Enable bit
 +               * in Bridge Control register enable receiving of ERR_* messages
 +               */
 +              if (mask & (PCI_BRIDGE_CTL_SERR << 16)) {
 +                      u32 val = advk_readl(pcie, PCIE_ISR0_MASK_REG);
 +                      if (new & (PCI_BRIDGE_CTL_SERR << 16))
 +                              val &= ~PCIE_ISR0_ERR_MASK;
 +                      else
 +                              val |= PCIE_ISR0_ERR_MASK;
 +                      advk_writel(pcie, val, PCIE_ISR0_MASK_REG);
 +              }
                if (mask & (PCI_BRIDGE_CTL_BUS_RESET << 16)) {
                        u32 val = advk_readl(pcie, PCIE_CORE_CTRL1_REG);
                        if (new & (PCI_BRIDGE_CTL_BUS_RESET << 16))
@@@ -862,11 -835,20 +862,11 @@@ advk_pci_bridge_emul_pcie_conf_read(str
                *value = PCI_EXP_SLTSTA_PDS << 16;
                return PCI_BRIDGE_EMUL_HANDLED;
  
 -      case PCI_EXP_RTCTL: {
 -              u32 val = advk_readl(pcie, PCIE_ISR0_MASK_REG);
 -              *value = (val & PCIE_MSG_PM_PME_MASK) ? 0 : PCI_EXP_RTCTL_PMEIE;
 -              *value |= le16_to_cpu(bridge->pcie_conf.rootctl) & PCI_EXP_RTCTL_CRSSVE;
 -              *value |= PCI_EXP_RTCAP_CRSVIS << 16;
 -              return PCI_BRIDGE_EMUL_HANDLED;
 -      }
 -
 -      case PCI_EXP_RTSTA: {
 -              u32 isr0 = advk_readl(pcie, PCIE_ISR0_REG);
 -              u32 msglog = advk_readl(pcie, PCIE_MSG_LOG_REG);
 -              *value = (isr0 & PCIE_MSG_PM_PME_MASK) << 16 | (msglog >> 16);
 -              return PCI_BRIDGE_EMUL_HANDLED;
 -      }
 +      /*
 +       * PCI_EXP_RTCTL and PCI_EXP_RTSTA are also supported, but do not need
 +       * to be handled here, because their values are stored in emulated
 +       * config space buffer, and we read them from there when needed.
 +       */
  
        case PCI_EXP_LNKCAP: {
                u32 val = advk_readl(pcie, PCIE_CORE_PCIEXP_CAP + reg);
@@@ -921,18 -903,19 +921,18 @@@ advk_pci_bridge_emul_pcie_conf_write(st
                break;
  
        case PCI_EXP_RTCTL: {
 -              /* Only mask/unmask PME interrupt */
 -              u32 val = advk_readl(pcie, PCIE_ISR0_MASK_REG) &
 -                      ~PCIE_MSG_PM_PME_MASK;
 -              if ((new & PCI_EXP_RTCTL_PMEIE) == 0)
 -                      val |= PCIE_MSG_PM_PME_MASK;
 -              advk_writel(pcie, val, PCIE_ISR0_MASK_REG);
 +              u16 rootctl = le16_to_cpu(bridge->pcie_conf.rootctl);
 +              /* Only emulation of PMEIE and CRSSVE bits is provided */
 +              rootctl &= PCI_EXP_RTCTL_PMEIE | PCI_EXP_RTCTL_CRSSVE;
 +              bridge->pcie_conf.rootctl = cpu_to_le16(rootctl);
                break;
        }
  
 -      case PCI_EXP_RTSTA:
 -              new = (new & PCI_EXP_RTSTA_PME) >> 9;
 -              advk_writel(pcie, new, PCIE_ISR0_REG);
 -              break;
 +      /*
 +       * PCI_EXP_RTSTA is also supported, but does not need to be handled
 +       * here, because its value is stored in emulated config space buffer,
 +       * and we write it there when needed.
 +       */
  
        case PCI_EXP_DEVCTL:
        case PCI_EXP_DEVCTL2:
        }
  }
  
 -static struct pci_bridge_emul_ops advk_pci_bridge_emul_ops = {
 +static const struct pci_bridge_emul_ops advk_pci_bridge_emul_ops = {
        .read_base = advk_pci_bridge_emul_base_conf_read,
        .write_base = advk_pci_bridge_emul_base_conf_write,
        .read_pcie = advk_pci_bridge_emul_pcie_conf_read,
@@@ -976,7 -959,7 +976,7 @@@ static int advk_sw_pci_bridge_init(stru
        bridge->conf.pref_mem_limit = cpu_to_le16(PCI_PREF_RANGE_TYPE_64);
  
        /* Support interrupt A for MSI feature */
 -      bridge->conf.intpin = PCIE_CORE_INT_A_ASSERT_ENABLE;
 +      bridge->conf.intpin = PCI_INTERRUPT_INTA;
  
        /* Aardvark HW provides PCIe Capability structure in version 2 */
        bridge->pcie_conf.cap = cpu_to_le16(2);
@@@ -998,12 -981,8 +998,12 @@@ static bool advk_pcie_valid_device(stru
                return false;
  
        /*
 -       * If the link goes down after we check for link-up, nothing bad
 -       * happens but the config access times out.
 +       * If the link goes down after we check for link-up, we have a problem:
 +       * if a PIO request is executed while link-down, the whole controller
 +       * gets stuck in a non-functional state, and even after link comes up
 +       * again, PIO requests won't work anymore, and a reset of the whole PCIe
 +       * controller is needed. Therefore we need to prevent sending PIO
 +       * requests while the link is down.
         */
        if (!pci_is_root_bus(bus) && !advk_pcie_link_up(pcie))
                return false;
@@@ -1201,11 -1180,11 +1201,11 @@@ static void advk_msi_irq_compose_msi_ms
                                         struct msi_msg *msg)
  {
        struct advk_pcie *pcie = irq_data_get_irq_chip_data(data);
 -      phys_addr_t msi_msg = virt_to_phys(&pcie->msi_msg);
 +      phys_addr_t msi_addr = virt_to_phys(pcie);
  
 -      msg->address_lo = lower_32_bits(msi_msg);
 -      msg->address_hi = upper_32_bits(msi_msg);
 -      msg->data = data->irq;
 +      msg->address_lo = lower_32_bits(msi_addr);
 +      msg->address_hi = upper_32_bits(msi_addr);
 +      msg->data = data->hwirq;
  }
  
  static int advk_msi_set_affinity(struct irq_data *irq_data,
        return -EINVAL;
  }
  
 +static void advk_msi_irq_mask(struct irq_data *d)
 +{
 +      struct advk_pcie *pcie = d->domain->host_data;
 +      irq_hw_number_t hwirq = irqd_to_hwirq(d);
 +      unsigned long flags;
 +      u32 mask;
 +
 +      raw_spin_lock_irqsave(&pcie->msi_irq_lock, flags);
 +      mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
 +      mask |= BIT(hwirq);
 +      advk_writel(pcie, mask, PCIE_MSI_MASK_REG);
 +      raw_spin_unlock_irqrestore(&pcie->msi_irq_lock, flags);
 +}
 +
 +static void advk_msi_irq_unmask(struct irq_data *d)
 +{
 +      struct advk_pcie *pcie = d->domain->host_data;
 +      irq_hw_number_t hwirq = irqd_to_hwirq(d);
 +      unsigned long flags;
 +      u32 mask;
 +
 +      raw_spin_lock_irqsave(&pcie->msi_irq_lock, flags);
 +      mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
 +      mask &= ~BIT(hwirq);
 +      advk_writel(pcie, mask, PCIE_MSI_MASK_REG);
 +      raw_spin_unlock_irqrestore(&pcie->msi_irq_lock, flags);
 +}
 +
 +static void advk_msi_top_irq_mask(struct irq_data *d)
 +{
 +      pci_msi_mask_irq(d);
 +      irq_chip_mask_parent(d);
 +}
 +
 +static void advk_msi_top_irq_unmask(struct irq_data *d)
 +{
 +      pci_msi_unmask_irq(d);
 +      irq_chip_unmask_parent(d);
 +}
 +
 +static struct irq_chip advk_msi_bottom_irq_chip = {
 +      .name                   = "MSI",
 +      .irq_compose_msi_msg    = advk_msi_irq_compose_msi_msg,
 +      .irq_set_affinity       = advk_msi_set_affinity,
 +      .irq_mask               = advk_msi_irq_mask,
 +      .irq_unmask             = advk_msi_irq_unmask,
 +};
 +
  static int advk_msi_irq_domain_alloc(struct irq_domain *domain,
                                     unsigned int virq,
                                     unsigned int nr_irqs, void *args)
        int hwirq, i;
  
        mutex_lock(&pcie->msi_used_lock);
 -      hwirq = bitmap_find_next_zero_area(pcie->msi_used, MSI_IRQ_NUM,
 -                                         0, nr_irqs, 0);
 -      if (hwirq >= MSI_IRQ_NUM) {
 -              mutex_unlock(&pcie->msi_used_lock);
 -              return -ENOSPC;
 -      }
 -
 -      bitmap_set(pcie->msi_used, hwirq, nr_irqs);
 +      hwirq = bitmap_find_free_region(pcie->msi_used, MSI_IRQ_NUM,
 +                                      order_base_2(nr_irqs));
        mutex_unlock(&pcie->msi_used_lock);
 +      if (hwirq < 0)
 +              return -ENOSPC;
  
        for (i = 0; i < nr_irqs; i++)
                irq_domain_set_info(domain, virq + i, hwirq + i,
 -                                  &pcie->msi_bottom_irq_chip,
 +                                  &advk_msi_bottom_irq_chip,
                                    domain->host_data, handle_simple_irq,
                                    NULL, NULL);
  
@@@ -1292,7 -1227,7 +1292,7 @@@ static void advk_msi_irq_domain_free(st
        struct advk_pcie *pcie = domain->host_data;
  
        mutex_lock(&pcie->msi_used_lock);
 -      bitmap_clear(pcie->msi_used, d->hwirq, nr_irqs);
 +      bitmap_release_region(pcie->msi_used, d->hwirq, order_base_2(nr_irqs));
        mutex_unlock(&pcie->msi_used_lock);
  }
  
@@@ -1334,6 -1269,7 +1334,6 @@@ static int advk_pcie_irq_map(struct irq
  {
        struct advk_pcie *pcie = h->host_data;
  
 -      advk_pcie_irq_mask(irq_get_irq_data(virq));
        irq_set_status_flags(virq, IRQ_LEVEL);
        irq_set_chip_and_handler(virq, &pcie->irq_chip,
                                 handle_level_irq);
@@@ -1347,25 -1283,37 +1347,25 @@@ static const struct irq_domain_ops advk
        .xlate = irq_domain_xlate_onecell,
  };
  
 +static struct irq_chip advk_msi_irq_chip = {
 +      .name           = "advk-MSI",
 +      .irq_mask       = advk_msi_top_irq_mask,
 +      .irq_unmask     = advk_msi_top_irq_unmask,
 +};
 +
 +static struct msi_domain_info advk_msi_domain_info = {
 +      .flags  = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
 +                MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX,
 +      .chip   = &advk_msi_irq_chip,
 +};
 +
  static int advk_pcie_init_msi_irq_domain(struct advk_pcie *pcie)
  {
        struct device *dev = &pcie->pdev->dev;
 -      struct device_node *node = dev->of_node;
 -      struct irq_chip *bottom_ic, *msi_ic;
 -      struct msi_domain_info *msi_di;
 -      phys_addr_t msi_msg_phys;
  
 +      raw_spin_lock_init(&pcie->msi_irq_lock);
        mutex_init(&pcie->msi_used_lock);
  
 -      bottom_ic = &pcie->msi_bottom_irq_chip;
 -
 -      bottom_ic->name = "MSI";
 -      bottom_ic->irq_compose_msi_msg = advk_msi_irq_compose_msi_msg;
 -      bottom_ic->irq_set_affinity = advk_msi_set_affinity;
 -
 -      msi_ic = &pcie->msi_irq_chip;
 -      msi_ic->name = "advk-MSI";
 -
 -      msi_di = &pcie->msi_domain_info;
 -      msi_di->flags = MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS |
 -              MSI_FLAG_MULTI_PCI_MSI;
 -      msi_di->chip = msi_ic;
 -
 -      msi_msg_phys = virt_to_phys(&pcie->msi_msg);
 -
 -      advk_writel(pcie, lower_32_bits(msi_msg_phys),
 -                  PCIE_MSI_ADDR_LOW_REG);
 -      advk_writel(pcie, upper_32_bits(msi_msg_phys),
 -                  PCIE_MSI_ADDR_HIGH_REG);
 -
        pcie->msi_inner_domain =
                irq_domain_add_linear(NULL, MSI_IRQ_NUM,
                                      &advk_msi_domain_ops, pcie);
                return -ENOMEM;
  
        pcie->msi_domain =
 -              pci_msi_create_irq_domain(of_node_to_fwnode(node),
 -                                        msi_di, pcie->msi_inner_domain);
 +              pci_msi_create_irq_domain(dev_fwnode(dev),
 +                                        &advk_msi_domain_info,
 +                                        pcie->msi_inner_domain);
        if (!pcie->msi_domain) {
                irq_domain_remove(pcie->msi_inner_domain);
                return -ENOMEM;
@@@ -1416,6 -1363,7 +1416,6 @@@ static int advk_pcie_init_irq_domain(st
        }
  
        irq_chip->irq_mask = advk_pcie_irq_mask;
 -      irq_chip->irq_mask_ack = advk_pcie_irq_mask;
        irq_chip->irq_unmask = advk_pcie_irq_unmask;
  
        pcie->irq_domain =
@@@ -1437,73 -1385,10 +1437,73 @@@ static void advk_pcie_remove_irq_domain
        irq_domain_remove(pcie->irq_domain);
  }
  
 +static struct irq_chip advk_rp_irq_chip = {
 +      .name = "advk-RP",
 +};
 +
 +static int advk_pcie_rp_irq_map(struct irq_domain *h,
 +                              unsigned int virq, irq_hw_number_t hwirq)
 +{
 +      struct advk_pcie *pcie = h->host_data;
 +
 +      irq_set_chip_and_handler(virq, &advk_rp_irq_chip, handle_simple_irq);
 +      irq_set_chip_data(virq, pcie);
 +
 +      return 0;
 +}
 +
 +static const struct irq_domain_ops advk_pcie_rp_irq_domain_ops = {
 +      .map = advk_pcie_rp_irq_map,
 +      .xlate = irq_domain_xlate_onecell,
 +};
 +
 +static int advk_pcie_init_rp_irq_domain(struct advk_pcie *pcie)
 +{
 +      pcie->rp_irq_domain = irq_domain_add_linear(NULL, 1,
 +                                                  &advk_pcie_rp_irq_domain_ops,
 +                                                  pcie);
 +      if (!pcie->rp_irq_domain) {
 +              dev_err(&pcie->pdev->dev, "Failed to add Root Port IRQ domain\n");
 +              return -ENOMEM;
 +      }
 +
 +      return 0;
 +}
 +
 +static void advk_pcie_remove_rp_irq_domain(struct advk_pcie *pcie)
 +{
 +      irq_domain_remove(pcie->rp_irq_domain);
 +}
 +
 +static void advk_pcie_handle_pme(struct advk_pcie *pcie)
 +{
 +      u32 requester = advk_readl(pcie, PCIE_MSG_LOG_REG) >> 16;
 +
 +      advk_writel(pcie, PCIE_MSG_PM_PME_MASK, PCIE_ISR0_REG);
 +
 +      /*
 +       * PCIE_MSG_LOG_REG contains the last inbound message, so store
 +       * the requester ID only when PME was not asserted yet.
 +       * Also do not trigger PME interrupt when PME is still asserted.
 +       */
 +      if (!(le32_to_cpu(pcie->bridge.pcie_conf.rootsta) & PCI_EXP_RTSTA_PME)) {
 +              pcie->bridge.pcie_conf.rootsta = cpu_to_le32(requester | PCI_EXP_RTSTA_PME);
 +
 +              /*
 +               * Trigger PME interrupt only if PMEIE bit in Root Control is set.
 +               * Aardvark HW returns zero for PCI_EXP_FLAGS_IRQ, so use PCIe interrupt 0.
 +               */
 +              if (!(le16_to_cpu(pcie->bridge.pcie_conf.rootctl) & PCI_EXP_RTCTL_PMEIE))
 +                      return;
 +
 +              if (generic_handle_domain_irq(pcie->rp_irq_domain, 0) == -EINVAL)
 +                      dev_err_ratelimited(&pcie->pdev->dev, "unhandled PME IRQ\n");
 +      }
 +}
 +
  static void advk_pcie_handle_msi(struct advk_pcie *pcie)
  {
        u32 msi_val, msi_mask, msi_status, msi_idx;
 -      u16 msi_data;
  
        msi_mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
        msi_val = advk_readl(pcie, PCIE_MSI_STATUS_REG);
                if (!(BIT(msi_idx) & msi_status))
                        continue;
  
 -              /*
 -               * msi_idx contains bits [4:0] of the msi_data and msi_data
 -               * contains 16bit MSI interrupt number
 -               */
                advk_writel(pcie, BIT(msi_idx), PCIE_MSI_STATUS_REG);
 -              msi_data = advk_readl(pcie, PCIE_MSI_PAYLOAD_REG) & PCIE_MSI_DATA_MASK;
 -              generic_handle_irq(msi_data);
 +              if (generic_handle_domain_irq(pcie->msi_inner_domain, msi_idx) == -EINVAL)
 +                      dev_err_ratelimited(&pcie->pdev->dev, "unexpected MSI 0x%02x\n", msi_idx);
        }
  
        advk_writel(pcie, PCIE_ISR0_MSI_INT_PENDING,
@@@ -1536,22 -1425,6 +1536,22 @@@ static void advk_pcie_handle_int(struc
        isr1_mask = advk_readl(pcie, PCIE_ISR1_MASK_REG);
        isr1_status = isr1_val & ((~isr1_mask) & PCIE_ISR1_ALL_MASK);
  
 +      /* Process PME interrupt as the first one to do not miss PME requester id */
 +      if (isr0_status & PCIE_MSG_PM_PME_MASK)
 +              advk_pcie_handle_pme(pcie);
 +
 +      /* Process ERR interrupt */
 +      if (isr0_status & PCIE_ISR0_ERR_MASK) {
 +              advk_writel(pcie, PCIE_ISR0_ERR_MASK, PCIE_ISR0_REG);
 +
 +              /*
 +               * Aardvark HW returns zero for PCI_ERR_ROOT_AER_IRQ, so use
 +               * PCIe interrupt 0
 +               */
 +              if (generic_handle_domain_irq(pcie->rp_irq_domain, 0) == -EINVAL)
 +                      dev_err_ratelimited(&pcie->pdev->dev, "unhandled ERR IRQ\n");
 +      }
 +
        /* Process MSI interrupts */
        if (isr0_status & PCIE_ISR0_MSI_INT_PENDING)
                advk_pcie_handle_msi(pcie);
                advk_writel(pcie, PCIE_ISR1_INTX_ASSERT(i),
                            PCIE_ISR1_REG);
  
 -              generic_handle_domain_irq(pcie->irq_domain, i);
 +              if (generic_handle_domain_irq(pcie->irq_domain, i) == -EINVAL)
 +                      dev_err_ratelimited(&pcie->pdev->dev, "unexpected INT%c IRQ\n",
 +                                          (char)i + 'A');
        }
  }
  
 -static irqreturn_t advk_pcie_irq_handler(int irq, void *arg)
 +static void advk_pcie_irq_handler(struct irq_desc *desc)
  {
 -      struct advk_pcie *pcie = arg;
 -      u32 status;
 +      struct advk_pcie *pcie = irq_desc_get_handler_data(desc);
 +      struct irq_chip *chip = irq_desc_get_chip(desc);
 +      u32 val, mask, status;
 +
 +      chained_irq_enter(chip, desc);
 +
 +      val = advk_readl(pcie, HOST_CTRL_INT_STATUS_REG);
 +      mask = advk_readl(pcie, HOST_CTRL_INT_MASK_REG);
 +      status = val & ((~mask) & PCIE_IRQ_ALL_MASK);
 +
 +      if (status & PCIE_IRQ_CORE_INT) {
 +              advk_pcie_handle_int(pcie);
  
 -      status = advk_readl(pcie, HOST_CTRL_INT_STATUS_REG);
 -      if (!(status & PCIE_IRQ_CORE_INT))
 -              return IRQ_NONE;
 +              /* Clear interrupt */
 +              advk_writel(pcie, PCIE_IRQ_CORE_INT, HOST_CTRL_INT_STATUS_REG);
 +      }
  
 -      advk_pcie_handle_int(pcie);
 +      chained_irq_exit(chip, desc);
 +}
  
 -      /* Clear interrupt */
 -      advk_writel(pcie, PCIE_IRQ_CORE_INT, HOST_CTRL_INT_STATUS_REG);
 +static int advk_pcie_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
 +{
 +      struct advk_pcie *pcie = dev->bus->sysdata;
  
 -      return IRQ_HANDLED;
 +      /*
 +       * Emulated root bridge has its own emulated irq chip and irq domain.
 +       * Argument pin is the INTx pin (1=INTA, 2=INTB, 3=INTC, 4=INTD) and
 +       * hwirq for irq_create_mapping() is indexed from zero.
 +       */
 +      if (pci_is_root_bus(dev->bus))
 +              return irq_create_mapping(pcie->rp_irq_domain, pin - 1);
 +      else
 +              return of_irq_parse_and_map_pci(dev, slot, pin);
  }
  
 -static void __maybe_unused advk_pcie_disable_phy(struct advk_pcie *pcie)
 +static void advk_pcie_disable_phy(struct advk_pcie *pcie)
  {
        phy_power_off(pcie->phy);
        phy_exit(pcie->phy);
@@@ -1631,9 -1482,7 +1631,7 @@@ static int advk_pcie_enable_phy(struct 
        }
  
        ret = phy_power_on(pcie->phy);
-       if (ret == -EOPNOTSUPP) {
-               dev_warn(&pcie->pdev->dev, "PHY unsupported by firmware\n");
-       } else if (ret) {
+       if (ret) {
                phy_exit(pcie->phy);
                return ret;
        }
@@@ -1671,7 -1520,7 +1669,7 @@@ static int advk_pcie_probe(struct platf
        struct advk_pcie *pcie;
        struct pci_host_bridge *bridge;
        struct resource_entry *entry;
 -      int ret, irq;
 +      int ret;
  
        bridge = devm_pci_alloc_host_bridge(dev, sizeof(struct advk_pcie));
        if (!bridge)
        if (IS_ERR(pcie->base))
                return PTR_ERR(pcie->base);
  
 -      irq = platform_get_irq(pdev, 0);
 -      if (irq < 0)
 -              return irq;
 -
 -      ret = devm_request_irq(dev, irq, advk_pcie_irq_handler,
 -                             IRQF_SHARED | IRQF_NO_THREAD, "advk-pcie",
 -                             pcie);
 -      if (ret) {
 -              dev_err(dev, "Failed to register interrupt\n");
 -              return ret;
 -      }
 +      pcie->irq = platform_get_irq(pdev, 0);
 +      if (pcie->irq < 0)
 +              return pcie->irq;
  
        pcie->reset_gpio = devm_gpiod_get_from_of_node(dev, dev->of_node,
                                                       "reset-gpios", 0,
                return ret;
        }
  
 +      ret = advk_pcie_init_rp_irq_domain(pcie);
 +      if (ret) {
 +              dev_err(dev, "Failed to initialize irq\n");
 +              advk_pcie_remove_msi_irq_domain(pcie);
 +              advk_pcie_remove_irq_domain(pcie);
 +              return ret;
 +      }
 +
 +      irq_set_chained_handler_and_data(pcie->irq, advk_pcie_irq_handler, pcie);
 +
        bridge->sysdata = pcie;
        bridge->ops = &advk_pcie_ops;
 +      bridge->map_irq = advk_pcie_map_irq;
  
        ret = pci_host_probe(bridge);
        if (ret < 0) {
 +              irq_set_chained_handler_and_data(pcie->irq, NULL, NULL);
 +              advk_pcie_remove_rp_irq_domain(pcie);
                advk_pcie_remove_msi_irq_domain(pcie);
                advk_pcie_remove_irq_domain(pcie);
                return ret;
@@@ -1873,11 -1717,7 +1871,11 @@@ static int advk_pcie_remove(struct plat
        advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG);
        advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG);
  
 +      /* Remove IRQ handler */
 +      irq_set_chained_handler_and_data(pcie->irq, NULL, NULL);
 +
        /* Remove IRQ domains */
 +      advk_pcie_remove_rp_irq_domain(pcie);
        advk_pcie_remove_msi_irq_domain(pcie);
        advk_pcie_remove_irq_domain(pcie);
  
@@@ -1,4 -1,7 +1,7 @@@
  # SPDX-License-Identifier: GPL-2.0-only
+ if (ARCH_MXC && ARM64) || COMPILE_TEST
  config PHY_FSL_IMX8MQ_USB
        tristate "Freescale i.MX8M USB3 PHY"
        depends on OF && HAS_IOMEM
@@@ -23,12 -26,4 +26,14 @@@ config PHY_FSL_IMX8M_PCI
          Enable this to add support for the PCIE PHY as found on
          i.MX8M family of SOCs.
  
 +config PHY_FSL_LYNX_28G
 +      tristate "Freescale Layerscape Lynx 28G SerDes PHY support"
 +      depends on OF
 +      select GENERIC_PHY
 +      help
 +        Enable this to add support for the Lynx SerDes 28G PHY as
 +        found on NXP's Layerscape platforms such as LX2160A.
 +        Used to change the protocol running on SerDes lanes at runtime.
 +        Only useful for a restricted set of Ethernet protocols.
++
+ endif
@@@ -44,16 -44,6 +44,6 @@@ static void xhci_priv_plat_start(struc
                priv->plat_start(hcd);
  }
  
- static int xhci_priv_plat_setup(struct usb_hcd *hcd)
- {
-       struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
-       if (!priv->plat_setup)
-               return 0;
-       return priv->plat_setup(hcd);
- }
  static int xhci_priv_init_quirk(struct usb_hcd *hcd)
  {
        struct xhci_plat_priv *priv = hcd_to_xhci_priv(hcd);
@@@ -121,7 -111,6 +111,6 @@@ static const struct xhci_plat_priv xhci
  };
  
  static const struct xhci_plat_priv xhci_plat_marvell_armada3700 = {
-       .plat_setup = xhci_mvebu_a3700_plat_setup,
        .init_quirk = xhci_mvebu_a3700_init_quirk,
  };
  
@@@ -226,13 -215,20 +215,13 @@@ static int xhci_plat_probe(struct platf
        if (!sysdev)
                sysdev = &pdev->dev;
  
 -      /* Try to set 64-bit DMA first */
        if (WARN_ON(!sysdev->dma_mask))
                /* Platform did not initialize dma_mask */
 -              ret = dma_coerce_mask_and_coherent(sysdev,
 -                                                 DMA_BIT_MASK(64));
 +              ret = dma_coerce_mask_and_coherent(sysdev, DMA_BIT_MASK(64));
        else
                ret = dma_set_mask_and_coherent(sysdev, DMA_BIT_MASK(64));
 -
 -      /* If seting 64-bit DMA mask fails, fall back to 32-bit DMA mask */
 -      if (ret) {
 -              ret = dma_set_mask_and_coherent(sysdev, DMA_BIT_MASK(32));
 -              if (ret)
 -                      return ret;
 -      }
 +      if (ret)
 +              return ret;
  
        pm_runtime_set_active(&pdev->dev);
        pm_runtime_enable(&pdev->dev);
  
        hcd->tpl_support = of_usb_host_tpl_support(sysdev->of_node);
        xhci->shared_hcd->tpl_support = hcd->tpl_support;
-       if (priv) {
-               ret = xhci_priv_plat_setup(hcd);
-               if (ret)
-                       goto disable_usb_phy;
-       }
-       if ((xhci->quirks & XHCI_SKIP_PHY_INIT) || (priv && (priv->quirks & XHCI_SKIP_PHY_INIT)))
+       if (priv && (priv->quirks & XHCI_SKIP_PHY_INIT))
                hcd->skip_phy_initialization = 1;
  
        if (priv && (priv->quirks & XHCI_SG_TRB_CACHE_SIZE_QUIRK))
@@@ -93,7 -93,6 +93,7 @@@ enum pm_api_id 
        PM_FPGA_LOAD = 22,
        PM_FPGA_GET_STATUS = 23,
        PM_GET_CHIPID = 24,
 +      PM_SECURE_SHA = 26,
        PM_PINCTRL_REQUEST = 28,
        PM_PINCTRL_RELEASE = 29,
        PM_PINCTRL_GET_FUNCTION = 30,
@@@ -144,6 -143,9 +144,9 @@@ enum pm_ioctl_id 
        IOCTL_OSPI_MUX_SELECT = 21,
        /* Register SGI to ATF */
        IOCTL_REGISTER_SGI = 25,
+       /* Runtime feature configuration */
+       IOCTL_SET_FEATURE_CONFIG = 26,
+       IOCTL_GET_FEATURE_CONFIG = 27,
  };
  
  enum pm_query_id {
@@@ -377,6 -379,14 +380,14 @@@ enum ospi_mux_select_type 
        PM_OSPI_MUX_SEL_LINEAR = 1,
  };
  
+ enum pm_feature_config_id {
+       PM_FEATURE_INVALID = 0,
+       PM_FEATURE_OVERTEMP_STATUS = 1,
+       PM_FEATURE_OVERTEMP_VALUE = 2,
+       PM_FEATURE_EXTWDT_STATUS = 3,
+       PM_FEATURE_EXTWDT_VALUE = 4,
+ };
  /**
   * struct zynqmp_pm_query_data - PM query data
   * @qid:      query ID
@@@ -428,7 -438,6 +439,7 @@@ int zynqmp_pm_set_requirement(const u3
                              const u32 qos,
                              const enum zynqmp_pm_request_ack ack);
  int zynqmp_pm_aes_engine(const u64 address, u32 *out);
 +int zynqmp_pm_sha_hash(const u64 address, const u32 size, const u32 flags);
  int zynqmp_pm_fpga_load(const u64 address, const u32 size, const u32 flags);
  int zynqmp_pm_fpga_get_status(u32 *value);
  int zynqmp_pm_write_ggs(u32 index, u32 value);
@@@ -449,6 -458,8 +460,8 @@@ int zynqmp_pm_load_pdi(const u32 src, c
  int zynqmp_pm_register_notifier(const u32 node, const u32 event,
                                const u32 wake, const u32 enable);
  int zynqmp_pm_feature(const u32 api_id);
+ int zynqmp_pm_set_feature_config(enum pm_feature_config_id id, u32 value);
+ int zynqmp_pm_get_feature_config(enum pm_feature_config_id id, u32 *payload);
  #else
  static inline int zynqmp_pm_get_api_version(u32 *version)
  {
@@@ -603,12 -614,6 +616,12 @@@ static inline int zynqmp_pm_aes_engine(
        return -ENODEV;
  }
  
 +static inline int zynqmp_pm_sha_hash(const u64 address, const u32 size,
 +                                   const u32 flags)
 +{
 +      return -ENODEV;
 +}
 +
  static inline int zynqmp_pm_fpga_load(const u64 address, const u32 size,
                                      const u32 flags)
  {
@@@ -697,6 -702,18 +710,18 @@@ static inline int zynqmp_pm_feature(con
  {
        return -ENODEV;
  }
+ static inline int zynqmp_pm_set_feature_config(enum pm_feature_config_id id,
+                                              u32 value)
+ {
+       return -ENODEV;
+ }
+ static inline int zynqmp_pm_get_feature_config(enum pm_feature_config_id id,
+                                              u32 *payload)
+ {
+       return -ENODEV;
+ }
  #endif
  
  #endif /* __FIRMWARE_ZYNQMP_H__ */