]> Git Repo - J-linux.git/commitdiff
Merge tag 'drm-misc-next-2023-09-11-1' of git://anongit.freedesktop.org/drm/drm-misc...
authorDave Airlie <[email protected]>
Fri, 22 Sep 2023 06:28:29 +0000 (16:28 +1000)
committerDave Airlie <[email protected]>
Fri, 22 Sep 2023 06:28:36 +0000 (16:28 +1000)
drm-misc-next for v6.7-rc1:

UAPI Changes:
- Nouveau changed to not set NO_PREFETCH flag explicitly.

Cross-subsystem Changes:
- Update documentation of dma-buf intro and uapi.
- fbdev/sbus fixes.
- Use initializer macros in a lot of fbdev drivers.
- Add Boris Brezillon as Panfrost driver maintainer.
- Add Jessica Zhang as drm/panel reviewer.
- Make more fbdev drivers use fb_ops helpers for deferred io.
- Small hid trailing whitespace fix.
- Use fb_ops in hid/picolcd

Core Changes:
- Assorted small fixes to ttm tests, drm/mst.
- Documentation updates to bridge.
- Add kunit tests for some drm_fb functions.
- Rework drm_debugfs implementation.
- Update xe documentation to mark todos as completed.

Driver Changes:
- Add support to rockchip for rv1126 mipi-dsi and vop.
- Assorted small fixes to nouveau, bridge/samsung-dsim,
  bridge/lvds-codec, loongson, rockchip, panfrost, gma500, repaper,
  komeda, virtio, ssd130x.
- Add support for simple panels Mitsubishi AA084XE01,
  JDI LPM102A188A,
- Documentation updates to accel/ivpu.
- Some nouveau scheduling/fence fixes.
- Power management related fixes and other fixes to ivpu.
- Assorted bridge/it66121 fixes.
- Make platform drivers return void in remove() callback.

Signed-off-by: Dave Airlie <[email protected]>
From: Maarten Lankhorst <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
26 files changed:
1  2 
MAINTAINERS
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c
drivers/gpu/drm/arm/display/komeda/komeda_pipeline_state.c
drivers/gpu/drm/bridge/samsung-dsim.c
drivers/gpu/drm/drm_atomic.c
drivers/gpu/drm/imx/ipuv3/ipuv3-crtc.c
drivers/gpu/drm/msm/adreno/adreno_device.c
drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
drivers/gpu/drm/msm/disp/mdp4/mdp4_kms.c
drivers/gpu/drm/msm/disp/mdp5/mdp5_kms.c
drivers/gpu/drm/msm/msm_drv.c
drivers/gpu/drm/msm/msm_mdss.c
drivers/gpu/drm/nouveau/dispnv50/disp.c
drivers/gpu/drm/panel/panel-simple.c
drivers/gpu/drm/rockchip/rockchip_drm_vop.c
drivers/hid/Kconfig
drivers/video/fbdev/Kconfig
drivers/video/fbdev/Makefile
drivers/video/fbdev/bw2.c
drivers/video/fbdev/cg14.c
drivers/video/fbdev/cg3.c
drivers/video/fbdev/cg6.c
drivers/video/fbdev/ffb.c
drivers/video/fbdev/leo.c
drivers/video/fbdev/p9100.c
drivers/video/fbdev/tcx.c

diff --combined MAINTAINERS
index bf0f54c24f81714b64a6b5a4169c12fc62bd63a1,0a6b229b820a7f3ec89975c39bc1c5d6079c9ff3..5ea898ffd8de041c038c04eb1a219e15da7b8098
@@@ -915,18 -915,6 +915,18 @@@ S:       Supporte
  F:    drivers/crypto/ccp/sev*
  F:    include/uapi/linux/psp-sev.h
  
 +AMD CRYPTOGRAPHIC COPROCESSOR (CCP) DRIVER - DBC SUPPORT
 +M:    Mario Limonciello <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/crypto/ccp/dbc.c
 +F:    drivers/crypto/ccp/dbc.h
 +F:    drivers/crypto/ccp/platform-access.c
 +F:    drivers/crypto/ccp/platform-access.h
 +F:    include/uapi/linux/psp-dbc.h
 +F:    tools/crypto/ccp/*.c
 +F:    tools/crypto/ccp/*.py
 +
  AMD DISPLAY CORE
  M:    Harry Wentland <[email protected]>
  M:    Leo Li <[email protected]>
@@@ -1018,7 -1006,7 +1018,7 @@@ AMD PMC DRIVE
  M:    Shyam Sundar S K <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    drivers/platform/x86/amd/pmc.c
 +F:    drivers/platform/x86/amd/pmc/
  
  AMD PMF DRIVER
  M:    Shyam Sundar S K <[email protected]>
@@@ -1086,6 -1074,7 +1086,6 @@@ F:      include/soc/amlogic
  
  AMPHION VPU CODEC V4L2 DRIVER
  M:    Ming Qian <[email protected]>
 -M:    Shijie Qin <[email protected]>
  M:    Zhou Peng <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -1569,10 -1558,9 +1569,10 @@@ M:    Olof Johansson <[email protected]
  M:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 +P:    Documentation/process/maintainer-soc.rst
  C:    irc://irc.libera.chat/armlinux
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc.git
 -F:    Documentation/process/maintainer-soc.rst
 +F:    Documentation/process/maintainer-soc*.rst
  F:    arch/arm/boot/dts/Makefile
  F:    arch/arm64/boot/dts/Makefile
  
@@@ -1626,10 -1614,9 +1626,9 @@@ F:     drivers/gpu/drm/arm/display/include
  F:    drivers/gpu/drm/arm/display/komeda/
  
  ARM MALI PANFROST DRM DRIVER
+ M:    Boris Brezillon <[email protected]>
  M:    Rob Herring <[email protected]>
- M:    Tomeu Vizoso <[email protected]>
  R:    Steven Price <[email protected]>
- R:    Alyssa Rosenzweig <[email protected]>
  L:    [email protected]
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
@@@ -1855,7 -1842,6 +1854,7 @@@ F:      Documentation/devicetree/bindings/ph
  F:    arch/arm/boot/dts/amlogic/
  F:    arch/arm/mach-meson/
  F:    arch/arm64/boot/dts/amlogic/
 +F:    drivers/pmdomain/amlogic/
  F:    drivers/mmc/host/meson*
  F:    drivers/phy/amlogic/
  F:    drivers/pinctrl/meson/
@@@ -1878,11 -1864,9 +1877,11 @@@ M:    Martin Povišer <[email protected]
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/adi,ssm3515.yaml
  F:    Documentation/devicetree/bindings/sound/apple,*
  F:    sound/soc/apple/*
  F:    sound/soc/codecs/cs42l83-i2c.c
 +F:    sound/soc/codecs/ssm3515.c
  
  ARM/APPLE MACHINE SUPPORT
  M:    Hector Martin <[email protected]>
@@@ -1918,7 -1902,6 +1917,7 @@@ F:      drivers/bluetooth/hci_bcm4377.
  F:    drivers/clk/clk-apple-nco.c
  F:    drivers/cpufreq/apple-soc-cpufreq.c
  F:    drivers/dma/apple-admac.c
 +F:    drivers/pmdomain/apple/
  F:    drivers/i2c/busses/i2c-pasemi-core.c
  F:    drivers/i2c/busses/i2c-pasemi-platform.c
  F:    drivers/iommu/apple-dart.c
@@@ -2353,7 -2336,7 +2352,7 @@@ F:      drivers/phy/mediatek
  ARM/MICROCHIP (ARM64) SoC support
  M:    Conor Dooley <[email protected]>
  M:    Nicolas Ferre <[email protected]>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  T:    git https://git.kernel.org/pub/scm/linux/kernel/git/at91/linux.git
@@@ -2362,7 -2345,7 +2361,7 @@@ F:      arch/arm64/boot/dts/microchip
  ARM/Microchip (AT91) SoC support
  M:    Nicolas Ferre <[email protected]>
  M:    Alexandre Belloni <[email protected]>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  W:    http://www.linux4sam.org
@@@ -2435,7 -2418,6 +2434,7 @@@ F:      arch/arm/mach-ux500
  F:    drivers/clk/clk-nomadik.c
  F:    drivers/clocksource/clksrc-dbx500-prcmu.c
  F:    drivers/dma/ste_dma40*
 +F:    drivers/pmdomain/st/ste-ux500-pm-domain.c
  F:    drivers/hwspinlock/u8500_hsem.c
  F:    drivers/i2c/busses/i2c-nomadik.c
  F:    drivers/iio/adc/ab8500-gpadc.c
@@@ -2508,6 -2490,16 +2507,6 @@@ S:     Maintaine
  W:    http://www.digriz.org.uk/ts78xx/kernel
  F:    arch/arm/mach-orion5x/ts78xx-*
  
 -ARM/OXNAS platform support
 -M:    Neil Armstrong <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 -L:    [email protected] (moderated for non-subscribers)
 -S:    Maintained
 -F:    arch/arm/boot/dts/ox8*.dts*
 -F:    arch/arm/mach-oxnas/
 -F:    drivers/power/reset/oxnas-restart.c
 -N:    oxnas
 -
  ARM/QUALCOMM CHROMEBOOK SUPPORT
  R:    [email protected]
  F:    arch/arm64/boot/dts/qcom/sc7180*
@@@ -2598,7 -2590,6 +2597,7 @@@ F:      arch/arm/include/debug/renesas-scif.
  F:    arch/arm/mach-shmobile/
  F:    arch/arm64/boot/dts/renesas/
  F:    arch/riscv/boot/dts/renesas/
 +F:    drivers/pmdomain/renesas/
  F:    drivers/soc/renesas/
  F:    include/linux/soc/renesas/
  K:    \brenesas,
@@@ -2641,7 -2632,6 +2640,7 @@@ R:      Alim Akhtar <[email protected]
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Maintained
 +P:    Documentation/process/maintainer-soc-clean-dts.rst
  Q:    https://patchwork.kernel.org/project/linux-samsung-soc/list/
  B:    mailto:[email protected]
  C:    irc://irc.libera.chat/linux-exynos
@@@ -2936,13 -2926,14 +2935,13 @@@ M:   Sudeep Holla <[email protected]
  M:    Lorenzo Pieralisi <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -F:    */*/*/vexpress*
 -F:    */*/vexpress*
 -F:    arch/arm/boot/dts/arm/vexpress*
 +N:    mps2
 +N:    vexpress
  F:    arch/arm/mach-versatile/
  F:    arch/arm64/boot/dts/arm/
 -F:    drivers/clk/versatile/clk-vexpress-osc.c
  F:    drivers/clocksource/timer-versatile.c
 -N:    mps2
 +X:    drivers/cpufreq/vexpress-spc-cpufreq.c
 +X:    Documentation/devicetree/bindings/arm/arm,vexpress-juno.yaml
  
  ARM/VFP SUPPORT
  M:    Russell King <[email protected]>
@@@ -3256,7 -3247,7 +3255,7 @@@ F:      include/uapi/linux/atm
  
  ATMEL MACB ETHERNET DRIVER
  M:    Nicolas Ferre <[email protected]>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  S:    Supported
  F:    drivers/net/ethernet/cadence/
  
@@@ -3268,8 -3259,9 +3267,8 @@@ F:      Documentation/devicetree/bindings/in
  F:    drivers/input/touchscreen/atmel_mxt_ts.c
  
  ATMEL WIRELESS DRIVER
 -M:    Simon Kelley <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Orphan
  W:    http://www.thekelleys.org.uk/atmel
  W:    http://atmelwlandriver.sourceforge.net/
  F:    drivers/net/wireless/atmel/atmel*
@@@ -3399,7 -3391,7 +3398,7 @@@ F:      drivers/media/radio/radio-aztech
  B43 WIRELESS DRIVER
  L:    [email protected]
  L:    [email protected]
 -S:    Odd Fixes
 +S:    Orphan
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/b43
  F:    drivers/net/wireless/broadcom/b43/
  
@@@ -3691,7 -3683,6 +3690,7 @@@ F:      include/linux/filter.
  F:    include/linux/tnum.h
  F:    kernel/bpf/core.c
  F:    kernel/bpf/dispatcher.c
 +F:    kernel/bpf/mprog.c
  F:    kernel/bpf/syscall.c
  F:    kernel/bpf/tnum.c
  F:    kernel/bpf/trampoline.c
@@@ -3702,7 -3693,7 +3701,7 @@@ R:      David Vernet <[email protected]
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/bpf/instruction-set.rst
 +F:    Documentation/bpf/standardization/
  
  BPF [GENERAL] (Safe Dynamic Programs and Tools)
  M:    Alexei Starovoitov <[email protected]>
@@@ -3710,7 -3701,7 +3709,7 @@@ M:      Daniel Borkmann <[email protected]
  M:    Andrii Nakryiko <[email protected]>
  R:    Martin KaFai Lau <[email protected]>
  R:    Song Liu <[email protected]>
 -R:    Yonghong Song <y[email protected]>
 +R:    Yonghong Song <y[email protected]>
  R:    John Fastabend <[email protected]>
  R:    KP Singh <[email protected]>
  R:    Stanislav Fomichev <[email protected]>
@@@ -3749,7 -3740,7 +3748,7 @@@ F:      tools/lib/bpf
  F:    tools/testing/selftests/bpf/
  
  BPF [ITERATOR]
 -M:    Yonghong Song <y[email protected]>
 +M:    Yonghong Song <y[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    kernel/bpf/*iter.c
  S:    Maintained
  F:    kernel/bpf/bpf_struct*
  
 -BPF [NETWORKING] (tc BPF, sock_addr)
 +BPF [NETWORKING] (tcx & tc BPF, sock_addr)
  M:    Martin KaFai Lau <[email protected]>
  M:    Daniel Borkmann <[email protected]>
  R:    John Fastabend <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
 +F:    include/net/tcx.h
 +F:    kernel/bpf/tcx.c
  F:    net/core/filter.c
  F:    net/sched/act_bpf.c
  F:    net/sched/cls_bpf.c
@@@ -3845,15 -3834,6 +3844,15 @@@ S:    Maintaine
  F:    kernel/bpf/stackmap.c
  F:    kernel/trace/bpf_trace.c
  
 +BROADCOM ASP 2.0 ETHERNET DRIVER
 +M:    Justin Chen <[email protected]>
 +M:    Florian Fainelli <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    Documentation/devicetree/bindings/net/brcm,asp-v2.0.yaml
 +F:    drivers/net/ethernet/broadcom/asp2/
 +
  BROADCOM B44 10/100 ETHERNET DRIVER
  M:    Michael Chan <[email protected]>
  L:    [email protected]
@@@ -4026,7 -4006,7 +4025,7 @@@ F:      arch/mips/kernel/*bmips
  F:    drivers/irqchip/irq-bcm63*
  F:    drivers/irqchip/irq-bcm7*
  F:    drivers/irqchip/irq-brcmstb*
 -F:    drivers/soc/bcm/bcm63xx
 +F:    drivers/pmdomain/bcm/bcm63xx-power.c
  F:    include/linux/bcm963xx_nvram.h
  F:    include/linux/bcm963xx_tag.h
  
@@@ -4144,7 -4124,7 +4143,7 @@@ BROADCOM BCM6348/BCM6358 SPI controlle
  M:    Jonas Gorski <[email protected]>
  L:    [email protected]
  S:    Odd Fixes
 -F:    Documentation/devicetree/bindings/spi/spi-bcm63xx.txt
 +F:    Documentation/devicetree/bindings/spi/brcm,bcm63xx-spi.yaml
  F:    drivers/spi/spi-bcm63xx.c
  
  BROADCOM ETHERNET PHY DRIVERS
@@@ -4213,7 -4193,7 +4212,7 @@@ BROADCOM KONA GPIO DRIVE
  M:    Ray Jui <[email protected]>
  R:    Broadcom internal kernel review list <[email protected]>
  S:    Supported
 -F:    Documentation/devicetree/bindings/gpio/brcm,kona-gpio.txt
 +F:    Documentation/devicetree/bindings/gpio/brcm,kona-gpio.yaml
  F:    drivers/gpio/gpio-bcm-kona.c
  
  BROADCOM MPI3 STORAGE CONTROLLER DRIVER
@@@ -4248,7 -4228,7 +4247,7 @@@ R:      Broadcom internal kernel review lis
  L:    [email protected]
  S:    Maintained
  T:    git https://github.com/broadcom/stblinux.git
 -F:    drivers/soc/bcm/bcm63xx/bcm-pmb.c
 +F:    drivers/pmdomain/bcm/bcm-pmb.c
  F:    include/dt-bindings/soc/bcm-pmb.h
  
  BROADCOM SPECIFIC AMBA DRIVER (BCMA)
@@@ -4378,6 -4358,7 +4377,6 @@@ M:      David Sterba <[email protected]
  L:    [email protected]
  S:    Maintained
  W:    https://btrfs.readthedocs.io
 -W:    https://btrfs.wiki.kernel.org/
  Q:    https://patchwork.kernel.org/project/linux-btrfs/list/
  C:    irc://irc.libera.chat/btrfs
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git
@@@ -4467,7 -4448,6 +4466,7 @@@ M:      Maxime Ripard <[email protected]
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/media/cdns,*.txt
 +F:    Documentation/devicetree/bindings/media/cdns,csi2rx.yaml
  F:    drivers/media/platform/cadence/cdns-csi2*
  
  CADENCE NAND DRIVER
@@@ -4480,6 -4460,7 +4479,6 @@@ CADENCE USB3 DRD IP DRIVE
  M:    Peter Chen <[email protected]>
  M:    Pawel Laszczak <[email protected]>
  R:    Roger Quadros <[email protected]>
 -R:    Aswath Govindraju <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/peter.chen/usb.git
@@@ -4837,7 -4818,6 +4836,7 @@@ F:      drivers/input/touchscreen/chipone_ic
  
  CHROME HARDWARE PLATFORM SUPPORT
  M:    Benson Leung <[email protected]>
 +M:    Tzung-Bi Shih <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git
@@@ -4905,11 -4885,7 +4904,11 @@@ L:    [email protected] (moderat
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/sound/cirrus,cs*
 +F:    drivers/mfd/cs42l43*
 +F:    drivers/pinctrl/cirrus/pinctrl-cs42l43*
 +F:    drivers/spi/spi-cs42l43*
  F:    include/dt-bindings/sound/cs*
 +F:    include/linux/mfd/cs42l43*
  F:    include/sound/cs*
  F:    sound/pci/hda/cs*
  F:    sound/pci/hda/hda_cs_dsp_ctl.*
@@@ -5170,12 -5146,10 +5169,12 @@@ S:   Maintaine
  F:    include/linux/compiler_attributes.h
  
  COMPUTE EXPRESS LINK (CXL)
 +M:    Davidlohr Bueso <[email protected]>
 +M:    Jonathan Cameron <[email protected]>
 +M:    Dave Jiang <[email protected]>
  M:    Alison Schofield <[email protected]>
  M:    Vishal Verma <[email protected]>
  M:    Ira Weiny <[email protected]>
 -M:    Ben Widawsky <[email protected]>
  M:    Dan Williams <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -5254,8 -5228,6 +5253,8 @@@ T:      git git://git.kernel.org/pub/scm/lin
  F:    Documentation/admin-guide/cgroup-v1/cpusets.rst
  F:    include/linux/cpuset.h
  F:    kernel/cgroup/cpuset.c
 +F:    tools/testing/selftests/cgroup/test_cpuset.c
 +F:    tools/testing/selftests/cgroup/test_cpuset_prs.sh
  
  CONTROL GROUP - MEMORY RESOURCE CONTROLLER (MEMCG)
  M:    Johannes Weiner <[email protected]>
@@@ -5394,7 -5366,7 +5393,7 @@@ M:      Kukjin Kim <[email protected]
  R:    Krzysztof Kozlowski <[email protected]>
  L:    [email protected]
  L:    [email protected]
 -S:    Supported
 +S:    Maintained
  F:    arch/arm/mach-exynos/pm.c
  F:    drivers/cpuidle/cpuidle-exynos.c
  F:    include/linux/platform_data/cpuidle-exynos.h
@@@ -5486,7 -5458,8 +5485,7 @@@ F:      Documentation/devicetree/bindings/ne
  F:    drivers/net/can/ctucanfd/
  
  CW1200 WLAN driver
 -M:    Solomon Peachy <[email protected]>
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/st/cw1200/
  
  CX18 VIDEO4LINUX DRIVER
@@@ -6034,7 -6007,7 +6033,7 @@@ F:      Documentation/devicetree/bindings/mf
  F:    Documentation/devicetree/bindings/mfd/dlg,da90*.yaml
  F:    Documentation/devicetree/bindings/regulator/da92*.txt
  F:    Documentation/devicetree/bindings/regulator/dlg,da9*.yaml
 -F:    Documentation/devicetree/bindings/regulator/slg51000.txt
 +F:    Documentation/devicetree/bindings/regulator/dlg,slg51000.yaml
  F:    Documentation/devicetree/bindings/sound/da[79]*.txt
  F:    Documentation/devicetree/bindings/thermal/da90??-thermal.txt
  F:    Documentation/devicetree/bindings/watchdog/da90??-wdt.txt
@@@ -6117,7 -6090,7 +6116,7 @@@ F:      include/video/udlfb.
  DISTRIBUTED LOCK MANAGER (DLM)
  M:    Christine Caulfield <[email protected]>
  M:    David Teigland <[email protected]>
 -L:    [email protected]
 +L:    [email protected]
  S:    Supported
  W:    http://sources.redhat.com/cluster/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/teigland/linux-dlm.git
@@@ -6132,6 -6105,7 +6131,7 @@@ L:      [email protected] (mode
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    Documentation/driver-api/dma-buf.rst
+ F:    Documentation/userspace-api/dma-buf-alloc-exchange.rst
  F:    drivers/dma-buf/
  F:    include/linux/*fence.h
  F:    include/linux/dma-buf.h
@@@ -6238,7 -6212,6 +6238,7 @@@ DOCUMENTATION PROCES
  M:    Jonathan Corbet <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/maintainer/
  F:    Documentation/process/
  
  DOCUMENTATION REPORTING ISSUES
@@@ -6276,17 -6249,11 +6276,17 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    Documentation/devicetree/bindings/media/i2c/dongwoon,dw9714.yaml
  F:    drivers/media/i2c/dw9714.c
  
 -DONGWOON DW9768 LENS VOICE COIL DRIVER
 -M:    Dongchun Zhu <dongchun.zhu@mediatek.com>
 +DONGWOON DW9719 LENS VOICE COIL DRIVER
 +M:    Daniel Scally <djrscally@gmail.com>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 +F:    drivers/media/i2c/dw9719.c
 +
 +DONGWOON DW9768 LENS VOICE COIL DRIVER
 +L:    [email protected]
 +S:    Orphan
 +T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/i2c/dongwoon,dw9768.yaml
  F:    drivers/media/i2c/dw9768.c
  
@@@ -7138,6 -7105,7 +7138,7 @@@ F:      include/drm/gpu_scheduler.
  
  DRM PANEL DRIVERS
  M:    Neil Armstrong <[email protected]>
+ R:    Jessica Zhang <[email protected]>
  R:    Sam Ravnborg <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -7164,14 -7132,6 +7165,14 @@@ T:    git git://anongit.freedesktop.org/dr
  F:    drivers/gpu/drm/ttm/
  F:    include/drm/ttm/
  
 +DRM AUTOMATED TESTING
 +M:    Helen Koike <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    Documentation/gpu/automated_testing.rst
 +F:    drivers/gpu/drm/ci/
 +
  DSBR100 USB FM RADIO DRIVER
  M:    Alexey Klimov <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/mmc/host/cqhci*
  
 +EMS CPC-PCI CAN DRIVER
 +M:    Gerhard Uttenthaler <[email protected]>
 +M:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/net/can/sja1000/ems_pci.c
 +
  EMULEX 10Gbps iSCSI - OneConnect DRIVER
  M:    Ketan Mukadam <[email protected]>
  L:    [email protected]
@@@ -7789,7 -7742,6 +7790,7 @@@ F:      include/linux/mii.
  F:    include/linux/of_net.h
  F:    include/linux/phy.h
  F:    include/linux/phy_fixed.h
 +F:    include/linux/phylib_stubs.h
  F:    include/linux/platform_data/mdio-bcm-unimac.h
  F:    include/linux/platform_data/mdio-gpio.h
  F:    include/trace/events/mdio.h
@@@ -8409,6 -8361,7 +8410,6 @@@ L:      [email protected]
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/ethernet/freescale/fs_enet/
 -F:    include/linux/fs_enet_pd.h
  
  FREESCALE SOC SOUND DRIVERS
  M:    Shengjiu Wang <[email protected]>
@@@ -8459,6 -8412,13 +8460,6 @@@ F:     Documentation/power/freezing-of-task
  F:    include/linux/freezer.h
  F:    kernel/freezer.c
  
 -FRONTSWAP API
 -M:    Konrad Rzeszutek Wilk <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    include/linux/frontswap.h
 -F:    mm/frontswap.c
 -
  FS-CACHE: LOCAL CACHING FOR NETWORK FILESYSTEMS
  M:    David Howells <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -8723,13 -8683,6 +8724,13 @@@ F:    Documentation/devicetree/bindings/po
  F:    drivers/base/power/domain*.c
  F:    include/linux/pm_domain.h
  
 +GENERIC PM DOMAIN PROVIDERS
 +M:    Ulf Hansson <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/linux-pm.git
 +F:    drivers/pmdomain/
 +
  GENERIC RESISTIVE TOUCHSCREEN ADC DRIVER
  M:    Eugen Hristev <[email protected]>
  L:    [email protected]
@@@ -8781,7 -8734,7 +8782,7 @@@ F:      scripts/get_maintainer.p
  GFS2 FILE SYSTEM
  M:    Bob Peterson <[email protected]>
  M:    Andreas Gruenbacher <[email protected]>
 -L:    [email protected]
 +L:    [email protected]
  S:    Supported
  B:    https://bugzilla.kernel.org/enter_bug.cgi?product=File%20System&component=gfs2
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
@@@ -8826,15 -8779,6 +8827,15 @@@ S:    Supporte
  F:    Documentation/networking/device_drivers/ethernet/google/gve.rst
  F:    drivers/net/ethernet/google
  
 +GOOGLE FIRMWARE DRIVERS
 +M:    Tzung-Bi Shih <[email protected]>
 +R:    Brian Norris <[email protected]>
 +R:    Julius Werner <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux.git
 +F:    drivers/firmware/google/
 +
  GPD POCKET FAN DRIVER
  M:    Hans de Goede <[email protected]>
  L:    [email protected]
@@@ -8878,7 -8822,6 +8879,7 @@@ R:      Michael Walle <[email protected]
  S:    Maintained
  F:    drivers/gpio/gpio-regmap.c
  F:    include/linux/gpio/regmap.h
 +K:    (devm_)?gpio_regmap_(un)?register
  
  GPIO SUBSYSTEM
  M:    Linus Walleij <[email protected]>
@@@ -9372,7 -9315,7 +9373,7 @@@ F:      drivers/crypto/hisilicon/hpre/hpre_c
  F:    drivers/crypto/hisilicon/hpre/hpre_main.c
  
  HISILICON HNS3 PMU DRIVER
 -M:    Guangbin Huang <huangguangbin2@huawei.com>
 +M:    Jijie Shao <shaojijie@huawei.com>
  S:    Supported
  F:    Documentation/admin-guide/perf/hns3-pmu.rst
  F:    drivers/perf/hisilicon/hns3_pmu.c
@@@ -9385,13 -9328,6 +9386,13 @@@ W:    https://www.hisilicon.co
  F:    Documentation/devicetree/bindings/i2c/hisilicon,ascend910-i2c.yaml
  F:    drivers/i2c/busses/i2c-hisi.c
  
 +HISILICON KUNPENG SOC HCCS DRIVER
 +M:    Huisong Li <[email protected]>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-devices-platform-kunpeng_hccs
 +F:    drivers/soc/hisilicon/kunpeng_hccs.c
 +F:    drivers/soc/hisilicon/kunpeng_hccs.h
 +
  HISILICON LPC BUS DRIVER
  M:    Jay Fang <[email protected]>
  S:    Maintained
@@@ -9417,7 -9353,7 +9418,7 @@@ F:      Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/hisilicon/
  
  HISILICON PMU DRIVER
 -M:    Shaokun Zhang <zhangshaokun@hisilicon.com>
 +M:    Yicong Yang <yangyicong@hisilicon.com>
  M:    Jonathan Cameron <[email protected]>
  S:    Supported
  W:    http://www.hisilicon.com
@@@ -9449,6 -9385,7 +9450,6 @@@ F:      drivers/crypto/hisilicon/sgl.
  F:    include/linux/hisi_acc_qm.h
  
  HISILICON ROCE DRIVER
 -M:    Haoyue Xu <[email protected]>
  M:    Junxian Huang <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -9537,12 -9474,6 +9538,12 @@@ S:    Obsolet
  W:    http://w1.fi/hostap-driver.html
  F:    drivers/net/wireless/intersil/hostap/
  
 +HP BIOSCFG DRIVER
 +M:    Jorge Lopez <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/platform/x86/hp/hp-bioscfg/
 +
  HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
  L:    [email protected]
  S:    Orphan
@@@ -9574,12 -9505,6 +9575,12 @@@ S:    Maintaine
  W:    http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi
  F:    fs/hpfs/
  
 +HS3001 Hardware Temperature and Humidity Sensor
 +M:    Andre Werner <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/hwmon/hs3001.c
 +
  HSI SUBSYSTEM
  M:    Sebastian Reichel <[email protected]>
  S:    Maintained
@@@ -9683,7 -9608,7 +9684,7 @@@ S:      Maintaine
  F:    arch/x86/kernel/cpu/hygon.c
  
  HYNIX HI556 SENSOR DRIVER
 -M:    Shawn Tu <shawnx.tu@intel.com>
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -9696,7 -9621,7 +9697,7 @@@ S:      Maintaine
  F:    drivers/media/i2c/hi846.c
  
  HYNIX HI847 SENSOR DRIVER
 -M:    Shawn Tu <shawnx.tu@intel.com>
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    [email protected]
  S:    Maintained
  F:    drivers/media/i2c/hi847.c
@@@ -9745,7 -9670,6 +9746,7 @@@ F:      tools/hv
  
  HYPERBUS SUPPORT
  M:    Vignesh Raghavendra <[email protected]>
 +R:    Tudor Ambarus <[email protected]>
  L:    [email protected]
  S:    Supported
  Q:    http://patchwork.ozlabs.org/project/linux-mtd/list/
  S:    Maintained
  F:    drivers/i2c/i2c-core-acpi.c
  
 +I2C ADDRESS TRANSLATOR (ATR)
 +M:    Tomi Valkeinen <[email protected]>
 +R:    Luca Ceresoli <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/i2c/i2c-atr.c
 +F:    include/linux/i2c-atr.h
 +
  I2C CONTROLLER DRIVER FOR NVIDIA GPU
  M:    Ajay Gupta <[email protected]>
  L:    [email protected]
@@@ -10831,7 -10747,6 +10832,7 @@@ INTEL TPMI DRIVE
  M:    Srinivas Pandruvada <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/ABI/testing/debugfs-tpmi
  F:    drivers/platform/x86/intel/tpmi.c
  F:    include/linux/intel_tpmi.h
  
@@@ -11016,6 -10931,7 +11017,6 @@@ F:   include/linux/io_uring_types.
  F:    include/trace/events/io_uring.h
  F:    include/uapi/linux/io_uring.h
  F:    io_uring/
 -F:    tools/io_uring/
  
  IPMI SUBSYSTEM
  M:    Corey Minyard <[email protected]>
@@@ -11389,7 -11305,6 +11390,7 @@@ F:   scripts/dummy-tools
  F:    scripts/mk*
  F:    scripts/mod/
  F:    scripts/package/
 +F:    usr/
  
  KERNEL HARDENING (not covered by other areas)
  M:    Kees Cook <[email protected]>
@@@ -11478,8 -11393,6 +11479,8 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    Documentation/dev-tools/kunit/
  F:    include/kunit/
  F:    lib/kunit/
 +F:    rust/kernel/kunit.rs
 +F:    scripts/rustdoc_test_*
  F:    tools/testing/kunit/
  
  KERNEL USERMODE HELPER
@@@ -11596,8 -11509,6 +11597,8 @@@ F:   arch/x86/include/uapi/asm/svm.
  F:    arch/x86/include/uapi/asm/vmx.h
  F:    arch/x86/kvm/
  F:    arch/x86/kvm/*/
 +F:    tools/testing/selftests/kvm/*/x86_64/
 +F:    tools/testing/selftests/kvm/x86_64/
  
  KERNFS
  M:    Greg Kroah-Hartman <[email protected]>
@@@ -12341,8 -12252,8 +12342,8 @@@ R:   WANG Xuerui <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git
 -F:    Documentation/loongarch/
 -F:    Documentation/translations/zh_CN/loongarch/
 +F:    Documentation/arch/loongarch/
 +F:    Documentation/translations/zh_CN/arch/loongarch/
  F:    arch/loongarch/
  F:    drivers/*/*loongarch*
  
@@@ -12368,16 -12279,6 +12369,16 @@@ F: Documentation/devicetree/bindings/cl
  F:    drivers/clk/clk-loongson2.c
  F:    include/dt-bindings/clock/loongson,ls2k-clk.h
  
 +LOONGSON SPI DRIVER
 +M:    Yinbo Zhu <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/loongson,ls2k-spi.yaml
 +F:    drivers/spi/spi-loongson-core.c
 +F:    drivers/spi/spi-loongson-pci.c
 +F:    drivers/spi/spi-loongson-plat.c
 +F:    drivers/spi/spi-loongson.h
 +
  LOONGSON-2 SOC SERIES GUTS DRIVER
  M:    Yinbo Zhu <[email protected]>
  L:    [email protected]
@@@ -12385,13 -12286,6 +12386,13 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/hwinfo/loongson,ls2k-chipid.yaml
  F:    drivers/soc/loongson/loongson2_guts.c
  
 +LOONGSON-2 SOC SERIES PM DRIVER
 +M:    Yinbo Zhu <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/soc/loongson/loongson,ls2k-pmc.yaml
 +F:    drivers/soc/loongson/loongson2_pm.c
 +
  LOONGSON-2 SOC SERIES PINCTRL DRIVER
  M:    zhanghongchen <[email protected]>
  M:    Yinbo Zhu <[email protected]>
@@@ -12400,14 -12294,6 +12401,14 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/pinctrl/loongson,ls2k-pinctrl.yaml
  F:    drivers/pinctrl/pinctrl-loongson2.c
  
 +LOONGSON-2 SOC SERIES THERMAL DRIVER
 +M:    zhanghongchen <[email protected]>
 +M:    Yinbo Zhu <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/thermal/loongson,ls2k-thermal.yaml
 +F:    drivers/thermal/loongson2_thermal.c
 +
  LSILOGIC MPT FUSION DRIVERS (FC/SAS/SPI)
  M:    Sathya Prakash <[email protected]>
  M:    Sreekanth Reddy <[email protected]>
@@@ -12603,7 -12489,6 +12604,7 @@@ F:   net/mctp
  
  MAPLE TREE
  M:    Liam R. Howlett <[email protected]>
 +L:    [email protected]
  L:    [email protected]
  S:    Supported
  F:    Documentation/core-api/maple_tree.rst
@@@ -12715,14 -12600,18 +12716,14 @@@ F:        Documentation/devicetree/bindings/ne
  F:    drivers/net/ethernet/marvell/mvpp2/
  
  MARVELL MWIFIEX WIRELESS DRIVER
 -M:    Amitkumar Karwar <[email protected]>
 -M:    Ganapathi Bhat <[email protected]>
 -M:    Sharvari Harisangam <[email protected]>
 -M:    Xinming Hu <[email protected]>
 +M:    Brian Norris <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Odd Fixes
  F:    drivers/net/wireless/marvell/mwifiex/
  
  MARVELL MWL8K WIRELESS DRIVER
 -M:    Lennert Buytenhek <[email protected]>
  L:    [email protected]
 -S:    Odd Fixes
 +S:    Orphan
  F:    drivers/net/wireless/marvell/mwl8k.c
  
  MARVELL NAND CONTROLLER DRIVER
@@@ -12949,7 -12838,7 +12950,7 @@@ F:   drivers/power/supply/max77976_charge
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
  M:    Krzysztof Kozlowski <[email protected]>
  L:    [email protected]
 -S:    Supported
 +S:    Maintained
  B:    mailto:[email protected]
  F:    Documentation/devicetree/bindings/power/supply/maxim,max14577.yaml
  F:    Documentation/devicetree/bindings/power/supply/maxim,max77693.yaml
@@@ -12960,7 -12849,7 +12961,7 @@@ MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS 
  M:    Chanwoo Choi <[email protected]>
  M:    Krzysztof Kozlowski <[email protected]>
  L:    [email protected]
 -S:    Supported
 +S:    Maintained
  B:    mailto:[email protected]
  F:    Documentation/devicetree/bindings/*/maxim,max14577.yaml
  F:    Documentation/devicetree/bindings/*/maxim,max77686.yaml
@@@ -13128,21 -13017,17 +13129,21 @@@ F:        drivers/staging/media/imx
  F:    include/linux/imx-media.h
  F:    include/media/imx.h
  
 -MEDIA DRIVERS FOR FREESCALE IMX7
 +MEDIA DRIVERS FOR FREESCALE IMX7/8
  M:    Rui Miguel Silva <[email protected]>
  M:    Laurent Pinchart <[email protected]>
 +M:    Martin Kepplinger <[email protected]>
 +R:    Purism Kernel Team <[email protected]>
  L:    [email protected]
  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,imx8mq-mipi-csi2.yaml
  F:    drivers/media/platform/nxp/imx-mipi-csis.c
  F:    drivers/media/platform/nxp/imx7-media-csi.c
 +F:    drivers/media/platform/nxp/imx8mq-mipi-csi2.c
  
  MEDIA DRIVERS FOR HELENE
  M:    Abylay Ospan <[email protected]>
  S:    Supported
  F:    Documentation/devicetree/bindings/iommu/mediatek*
  F:    drivers/iommu/mtk_iommu*
 +F:    include/dt-bindings/memory/mediatek,mt*-port.h
  F:    include/dt-bindings/memory/mt*-port.h
  
  MEDIATEK JPEG DRIVER
@@@ -13752,7 -13636,6 +13753,7 @@@ F:   include/linux/memory_hotplug.
  F:    include/linux/mm.h
  F:    include/linux/mmzone.h
  F:    include/linux/pagewalk.h
 +F:    include/linux/rmap.h
  F:    include/trace/events/ksm.h
  F:    mm/
  F:    tools/mm/
@@@ -13916,7 -13799,7 +13917,7 @@@ F:   Documentation/devicetree/bindings/se
  F:    drivers/spi/spi-at91-usart.c
  
  MICROCHIP AUDIO ASOC DRIVERS
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/sound/atmel*
@@@ -13939,7 -13822,7 +13940,7 @@@ S:   Maintaine
  F:    drivers/crypto/atmel-ecc.*
  
  MICROCHIP EIC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/interrupt-controller/microchip,sama7g5-eic.yaml
@@@ -14012,7 -13895,7 +14013,7 @@@ F:   drivers/video/fbdev/atmel_lcdfb.
  F:    include/video/atmel_lcdc.h
  
  MICROCHIP MCP16502 PMIC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/regulator/mcp16502-regulator.txt
@@@ -14039,7 -13922,7 +14040,7 @@@ F:   Documentation/devicetree/bindings/mt
  F:    drivers/mtd/nand/raw/atmel/*
  
  MICROCHIP OTPC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/nvmem/microchip,sama7g5-otpc.yaml
@@@ -14047,14 -13930,12 +14048,14 @@@ F:        drivers/nvmem/microchip-otpc.
  F:    include/dt-bindings/nvmem/microchip,sama7g5-otpc.h
  
  MICROCHIP PCI1XXXX GP DRIVER
 +M:    Vaibhaav Ram T.L <[email protected]>
  M:    Kumaravel Thiagarajan <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gp.c
  F:    drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gp.h
  F:    drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_gpio.c
 +F:    drivers/misc/mchp_pci1xxxx/mchp_pci1xxxx_otpe2p.c
  
  MICROCHIP PCI1XXXX I2C DRIVER
  M:    Tharun Kumar P <[email protected]>
@@@ -14080,7 -13961,7 +14081,7 @@@ F:   Documentation/devicetree/bindings/fp
  F:    drivers/fpga/microchip-spi.c
  
  MICROCHIP PWM DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Supported
@@@ -14096,7 -13977,7 +14097,7 @@@ F:   drivers/iio/adc/at91-sama5d2_adc.
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
  MICROCHIP SAMA5D2-COMPATIBLE SHUTDOWN CONTROLLER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  S:    Supported
  F:    Documentation/devicetree/bindings/power/reset/atmel,sama5d2-shdwc.yaml
  F:    drivers/power/reset/at91-sama5d2_shdwc.c
@@@ -14113,7 -13994,7 +14114,7 @@@ S:   Supporte
  F:    drivers/spi/spi-atmel.*
  
  MICROCHIP SSC DRIVER
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/misc/atmel-ssc.txt
@@@ -14142,7 -14023,7 +14143,7 @@@ F:   drivers/usb/gadget/udc/atmel_usba_ud
  
  MICROCHIP WILC1000 WIFI DRIVER
  M:    Ajay Singh <[email protected]>
 -M:    Claudiu Beznea <claudiu.beznea@microchip.com>
 +M:    Claudiu Beznea <claudiu.beznea@tuxon.dev>
  L:    [email protected]
  S:    Supported
  F:    drivers/net/wireless/microchip/wilc1000/
@@@ -14300,7 -14181,7 +14301,7 @@@ W:   http://www.linux-mips.org
  Q:    https://patchwork.kernel.org/project/linux-mips/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git
  F:    Documentation/devicetree/bindings/mips/
 -F:    Documentation/mips/
 +F:    Documentation/arch/mips/
  F:    arch/mips/
  F:    drivers/platform/mips/
  F:    include/dt-bindings/mips/
@@@ -14771,7 -14652,7 +14772,7 @@@ F:   drivers/rtc/rtc-ntxec.
  F:    include/linux/mfd/ntxec.h
  
  NETRONOME ETHERNET DRIVERS
 -M:    Simon Horman <simon.horman@corigine.com>
 +M:    Louis Peens <louis.peens@corigine.com>
  R:    Jakub Kicinski <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -14934,16 -14815,6 +14935,16 @@@ F: net/netfilter/xt_CONNSECMARK.
  F:    net/netfilter/xt_SECMARK.c
  F:    net/netlabel/
  
 +NETWORKING [MACSEC]
 +M:    Sabrina Dubroca <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/net/macsec.c
 +F:    include/net/macsec.h
 +F:    include/uapi/linux/if_macsec.h
 +K:    macsec
 +K:    \bmdo_
 +
  NETWORKING [MPTCP]
  M:    Matthieu Baerts <[email protected]>
  M:    Mat Martineau <[email protected]>
@@@ -14966,6 -14837,7 +14967,6 @@@ NETWORKING [TCP
  M:    Eric Dumazet <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    include/linux/net_mm.h
  F:    include/linux/tcp.h
  F:    include/net/tcp.h
  F:    include/trace/events/tcp.h
@@@ -15128,7 -15000,6 +15129,7 @@@ F:   include/linux/power/bq27xxx_battery.
  
  NOLIBC HEADER FILE
  M:    Willy Tarreau <[email protected]>
 +M:    Thomas Weißschuh <[email protected]>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/wtarreau/nolibc.git
  F:    tools/include/nolibc/
@@@ -15655,7 -15526,6 +15656,7 @@@ W:   http://www.muru.com/linux/omap
  W:    http://linux.omap.com/
  Q:    http://patchwork.kernel.org/project/linux-omap/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap.git
 +F:    Documentation/devicetree/bindings/arm/ti/omap.yaml
  F:    arch/arm/configs/omap2plus_defconfig
  F:    arch/arm/mach-omap2/
  F:    drivers/bus/ti-sysc.c
@@@ -15692,7 -15562,7 +15693,7 @@@ F:   Documentation/filesystems/omfs.rs
  F:    fs/omfs/
  
  OMNIVISION OG01A1B SENSOR DRIVER
 -M:    Shawn Tu <shawnx.tu@intel.com>
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    [email protected]
  S:    Maintained
  F:    drivers/media/i2c/og01a1b.c
@@@ -15705,8 -15575,9 +15706,8 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    drivers/media/i2c/ov01a10.c
  
  OMNIVISION OV02A10 SENSOR DRIVER
 -M:    Dongchun Zhu <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Orphan
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/i2c/ovti,ov02a10.yaml
  F:    drivers/media/i2c/ov02a10.c
@@@ -15741,7 -15612,6 +15742,7 @@@ F:   drivers/media/i2c/ov13b10.
  
  OMNIVISION OV2680 SENSOR DRIVER
  M:    Rui Miguel Silva <[email protected]>
 +M:    Hans de Goede <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -15758,7 -15628,7 +15759,7 @@@ F:   drivers/media/i2c/ov2685.
  
  OMNIVISION OV2740 SENSOR DRIVER
  M:    Tianshu Qiu <[email protected]>
 -R:    Shawn Tu <shawnx.tu@intel.com>
 +R:    Sakari Ailus <sakari.ailus@linux.intel.com>
  R:    Bingbu Cao <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -15790,7 -15660,7 +15791,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/ov5647.c
  
  OMNIVISION OV5670 SENSOR DRIVER
 -M:    Chiranjeevi Rapolu <chiranjeevi.rapolu@intel.com>
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -15798,7 -15668,7 +15799,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/i2c/ov5670.c
  
  OMNIVISION OV5675 SENSOR DRIVER
 -M:    Shawn Tu <shawnx.tu@intel.com>
 +M:    Sakari Ailus <sakari.ailus@linux.intel.com>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -15837,8 -15707,9 +15838,8 @@@ F:   drivers/media/i2c/ov772x.
  F:    include/media/i2c/ov772x.h
  
  OMNIVISION OV7740 SENSOR DRIVER
 -M:    Wenyou Yang <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Orphan
  T:    git git://linuxtv.org/media_tree.git
  F:    Documentation/devicetree/bindings/media/i2c/ov7740.txt
  F:    drivers/media/i2c/ov7740.c
@@@ -16143,7 -16014,7 +16144,7 @@@ M:   Ilias Apalodimas <ilias.apalodimas@l
  L:    [email protected]
  S:    Supported
  F:    Documentation/networking/page_pool.rst
 -F:    include/net/page_pool.h
 +F:    include/net/page_pool/
  F:    include/trace/events/page_pool.h
  F:    net/core/page_pool.c
  
@@@ -16435,7 -16306,6 +16436,7 @@@ F:   drivers/pci/controller/dwc/pci-exyno
  PCI DRIVER FOR SYNOPSYS DESIGNWARE
  M:    Jingoo Han <[email protected]>
  M:    Gustavo Pimentel <[email protected]>
 +M:    Manivannan Sadhasivam <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/pci/snps,dw-pcie-ep.yaml
  S:    Supported
  W:    https://perf.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools.git perf-tools
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools-next.git perf-tools-next
  F:    arch/*/events/*
  F:    arch/*/events/*/*
  F:    arch/*/include/asm/perf_event.h
@@@ -17174,7 -17042,7 +17175,7 @@@ L:   [email protected] (subscriber
  S:    Maintained
  W:    http://wiki.enneenne.com/index.php/LinuxPPS_support
  F:    Documentation/ABI/testing/sysfs-pps
 -F:    Documentation/devicetree/bindings/pps/pps-gpio.txt
 +F:    Documentation/devicetree/bindings/pps/pps-gpio.yaml
  F:    Documentation/driver-api/pps.rst
  F:    drivers/pps/
  F:    include/linux/pps*.h
@@@ -17190,16 -17058,15 +17191,16 @@@ F:        drivers/net/ppp/pptp.
  PRESSURE STALL INFORMATION (PSI)
  M:    Johannes Weiner <[email protected]>
  M:    Suren Baghdasaryan <[email protected]>
 +R:    Peter Ziljstra <[email protected]>
  S:    Maintained
  F:    include/linux/psi*
  F:    kernel/sched/psi.c
  
  PRINTK
  M:    Petr Mladek <[email protected]>
 -M:    Sergey Senozhatsky <[email protected]>
  R:    Steven Rostedt <[email protected]>
  R:    John Ogness <[email protected]>
 +R:    Sergey Senozhatsky <[email protected]>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
  F:    include/linux/printk.h
@@@ -17298,13 -17165,6 +17299,13 @@@ F: drivers/ptp/
  F:    include/linux/ptp_cl*
  K:    (?:\b|_)ptp(?:\b|_)
  
 +PTP MOCKUP CLOCK SUPPORT
 +M:    Vladimir Oltean <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/ptp/ptp_mock.c
 +F:    include/linux/ptp_mock.h
 +
  PTP VIRTUAL CLOCK SUPPORT
  M:    Yangbo Lu <[email protected]>
  L:    [email protected]
@@@ -17597,7 -17457,6 +17598,7 @@@ F:   drivers/media/tuners/qt1010
  
  QUALCOMM ATH12K WIRELESS DRIVER
  M:    Kalle Valo <[email protected]>
 +M:    Jeff Johnson <[email protected]>
  L:    [email protected]
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
@@@ -17605,7 -17464,6 +17606,7 @@@ F:   drivers/net/wireless/ath/ath12k
  
  QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
  M:    Kalle Valo <[email protected]>
 +M:    Jeff Johnson <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
@@@ -17615,7 -17473,6 +17616,7 @@@ F:   drivers/net/wireless/ath/ath10k
  
  QUALCOMM ATHEROS ATH11K WIRELESS DRIVER
  M:    Kalle Valo <[email protected]>
 +M:    Jeff Johnson <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath11k
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/power/avs/qcom,cpr.yaml
 -F:    drivers/soc/qcom/cpr.c
 +F:    drivers/pmdomain/qcom/cpr.c
  
  QUALCOMM CPUFREQ DRIVER MSM8996/APQ8096
  M:    Ilia Lin <[email protected]>
@@@ -18093,6 -17950,7 +18094,6 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    Documentation/admin-guide/rtc.rst
  F:    Documentation/devicetree/bindings/rtc/
  F:    drivers/rtc/
 -F:    include/linux/platform_data/rtc-*
  F:    include/linux/rtc.h
  F:    include/linux/rtc/
  F:    include/uapi/linux/rtc.h
@@@ -18135,7 -17993,7 +18136,7 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/realtek/rtlwifi/
  
  REALTEK WIRELESS DRIVER (rtw88)
 -M:    Yan-Hsuan Chuang <tony0620emma@gmail.com>
 +M:    Ping-Ke Shih <pkshih@realtek.com>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/wireless/realtek/rtw88/
@@@ -18162,7 -18020,7 +18163,7 @@@ F:   include/linux/regmap.
  
  REISERFS FILE SYSTEM
  L:    [email protected]
 -S:    Supported
 +S:    Obsolete
  F:    fs/reiserfs/
  
  REMOTE PROCESSOR (REMOTEPROC) SUBSYSTEM
@@@ -18660,14 -18518,17 +18661,14 @@@ RTL8180 WIRELESS DRIVE
  L:    [email protected]
  S:    Orphan
  W:    https://wireless.wiki.kernel.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  F:    drivers/net/wireless/realtek/rtl818x/rtl8180/
  
  RTL8187 WIRELESS DRIVER
 -M:    Herton Ronaldo Krzesinski <[email protected]>
 -M:    Hin-Tak Leung <[email protected]>
 +M:    Hin-Tak Leung <[email protected]>
  M:    Larry Finger <[email protected]>
  L:    [email protected]
  S:    Maintained
  W:    https://wireless.wiki.kernel.org/
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
  F:    drivers/net/wireless/realtek/rtl818x/rtl8187/
  
  RTL8XXXU WIRELESS DRIVER (rtl8xxxu)
@@@ -18703,8 -18564,6 +18704,8 @@@ R:   Boqun Feng <[email protected]
  R:    Gary Guo <[email protected]>
  R:    Björn Roy Baron <[email protected]>
  R:    Benno Lossin <[email protected]>
 +R:    Andreas Hindborg <[email protected]>
 +R:    Alice Ryhl <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    https://github.com/Rust-for-Linux/linux
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux.git
  F:    Documentation/driver-api/s390-drivers.rst
 -F:    Documentation/s390/
 +F:    Documentation/arch/s390/
  F:    arch/s390/
  F:    drivers/s390/
  F:    drivers/watchdog/diag288_wdt.c
@@@ -18807,7 -18666,7 +18808,7 @@@ M:   Niklas Schnelle <[email protected].
  M:    Gerald Schaefer <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/s390/pci.rst
 +F:    Documentation/arch/s390/pci.rst
  F:    arch/s390/pci/
  F:    drivers/pci/hotplug/s390_pci_hpc.c
  
@@@ -18824,7 -18683,7 +18825,7 @@@ M:   Halil Pasic <[email protected]
  M:    Jason Herne <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/s390/vfio-ap*
 +F:    Documentation/arch/s390/vfio-ap*
  F:    drivers/s390/crypto/vfio_ap*
  
  S390 VFIO-CCW DRIVER
@@@ -18834,7 -18693,7 +18835,7 @@@ R:   Halil Pasic <[email protected]
  L:    [email protected]
  L:    [email protected]
  S:    Supported
 -F:    Documentation/s390/vfio-ccw.rst
 +F:    Documentation/arch/s390/vfio-ccw.rst
  F:    drivers/s390/cio/vfio_ccw*
  F:    include/uapi/linux/vfio_ccw.h
  
@@@ -18940,7 -18799,7 +18941,7 @@@ SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVE
  M:    Krzysztof Kozlowski <[email protected]>
  L:    [email protected]
  L:    [email protected]
 -S:    Supported
 +S:    Maintained
  B:    mailto:[email protected]
  F:    Documentation/devicetree/bindings/clock/samsung,s2mps11.yaml
  F:    Documentation/devicetree/bindings/mfd/samsung,s2m*.yaml
@@@ -19012,7 -18871,7 +19013,7 @@@ M:   Tomasz Figa <[email protected]
  M:    Chanwoo Choi <[email protected]>
  R:    Alim Akhtar <[email protected]>
  L:    [email protected]
 -S:    Supported
 +S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git
  F:    Documentation/devicetree/bindings/clock/samsung,*.yaml
@@@ -19376,6 -19235,13 +19377,6 @@@ F:  Documentation/devicetree/bindings/se
  F:    drivers/tty/serdev/
  F:    include/linux/serdev.h
  
 -SERIAL DRIVERS
 -M:    Greg Kroah-Hartman <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/serial/
 -F:    drivers/tty/serial/
 -
  SERIAL IR RECEIVER
  M:    Sean Young <[email protected]>
  L:    [email protected]
@@@ -19427,6 -19293,7 +19428,6 @@@ F:   drivers/misc/sgi-gru
  SGI XP/XPC/XPNET DRIVER
  M:    Robin Holt <[email protected]>
  M:    Steve Wahl <[email protected]>
 -R:    Mike Travis <[email protected]>
  S:    Maintained
  F:    drivers/misc/sgi-xp/
  
@@@ -19545,32 -19412,6 +19546,32 @@@ F: drivers/media/mmc/siano
  F:    drivers/media/usb/siano/
  F:    drivers/media/usb/siano/
  
 +SIEMENS IPC LED DRIVERS
 +M:    Gerd Haeussler <[email protected]>
 +M:    Xing Tong Wu <[email protected]>
 +M:    Tobias Schaffner <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/leds/simple/
 +
 +SIEMENS IPC PLATFORM DRIVERS
 +M:    Gerd Haeussler <[email protected]>
 +M:    Xing Tong Wu <[email protected]>
 +M:    Tobias Schaffner <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/platform/x86/siemens/
 +F:    include/linux/platform_data/x86/simatic-ipc-base.h
 +F:    include/linux/platform_data/x86/simatic-ipc.h
 +
 +SIEMENS IPC WATCHDOG DRIVERS
 +M:    Gerd Haeussler <[email protected]>
 +M:    Xing Tong Wu <[email protected]>
 +M:    Tobias Schaffner <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/watchdog/simatic-ipc-wdt.c
 +
  SIFIVE DRIVERS
  M:    Palmer Dabbelt <[email protected]>
  M:    Paul Walmsley <[email protected]>
@@@ -19763,6 -19604,13 +19764,6 @@@ M:  Nicolas Pitre <[email protected]
  S:    Odd Fixes
  F:    drivers/net/ethernet/smsc/smc91x.*
  
 -SMM665 HARDWARE MONITOR DRIVER
 -M:    Guenter Roeck <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    Documentation/hwmon/smm665.rst
 -F:    drivers/hwmon/smm665.c
 -
  SMSC EMC2103 HARDWARE MONITOR DRIVER
  M:    Steve Glendinning <[email protected]>
  L:    [email protected]
@@@ -20415,13 -20263,6 +20416,13 @@@ S: Supporte
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
  F:    drivers/staging/
  
 +STANDALONE CACHE CONTROLLER DRIVERS
 +M:    Conor Dooley <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/
 +F:    drivers/cache
 +
  STARFIRE/DURALAN NETWORK DRIVER
  M:    Ion Badulescu <[email protected]>
  S:    Odd Fixes
@@@ -20446,31 -20287,12 +20447,31 @@@ S:        Maintaine
  F:    Documentation/devicetree/bindings/net/starfive,jh7110-dwmac.yaml
  F:    drivers/net/ethernet/stmicro/stmmac/dwmac-starfive.c
  
 +STARFIVE JH7110 DPHY RX DRIVER
 +M:    Jack Zhu <[email protected]>
 +M:    Changhuang Liang <[email protected]>
 +S:    Supported
 +F:    Documentation/devicetree/bindings/phy/starfive,jh7110-dphy-rx.yaml
 +F:    drivers/phy/starfive/phy-jh7110-dphy-rx.c
 +
  STARFIVE JH7110 MMC/SD/SDIO DRIVER
  M:    William Qiu <[email protected]>
  S:    Supported
  F:    Documentation/devicetree/bindings/mmc/starfive*
  F:    drivers/mmc/host/dw_mmc-starfive.c
  
 +STARFIVE JH7110 PLL CLOCK DRIVER
 +M:    Xingyu Wu <[email protected]>
 +S:    Supported
 +F:    Documentation/devicetree/bindings/clock/starfive,jh7110-pll.yaml
 +F:    drivers/clk/starfive/clk-starfive-jh7110-pll.c
 +
 +STARFIVE JH7110 SYSCON
 +M:    William Qiu <[email protected]>
 +M:    Xingyu Wu <[email protected]>
 +S:    Supported
 +F:    Documentation/devicetree/bindings/soc/starfive/starfive,jh7110-syscon.yaml
 +
  STARFIVE JH7110 TDM DRIVER
  M:    Walker Chen <[email protected]>
  S:    Maintained
@@@ -20513,14 -20335,13 +20514,14 @@@ STARFIVE JH71XX PMU CONTROLLER DRIVE
  M:    Walker Chen <[email protected]>
  S:    Supported
  F:    Documentation/devicetree/bindings/power/starfive*
 -F:    drivers/soc/starfive/jh71xx_pmu.c
 +F:    drivers/pmdomain/starfive/jh71xx-pmu.c
  F:    include/dt-bindings/power/starfive,jh7110-pmu.h
  
  STARFIVE SOC DRIVERS
  M:    Conor Dooley <[email protected]>
  S:    Maintained
  T:    git https://git.kernel.org/pub/scm/linux/kernel/git/conor/linux.git/
 +F:    Documentation/devicetree/bindings/soc/starfive/
  F:    drivers/soc/starfive/
  
  STARFIVE TRNG DRIVER
@@@ -20536,14 -20357,6 +20537,14 @@@ S: Supporte
  F:    Documentation/devicetree/bindings/watchdog/starfive*
  F:    drivers/watchdog/starfive-wdt.c
  
 +STARFIVE JH71X0 PCIE AND USB PHY DRIVER
 +M:    Minda Chen <[email protected]>
 +S:    Supported
 +F:    Documentation/devicetree/bindings/phy/starfive,jh7110-pcie-phy.yaml
 +F:    Documentation/devicetree/bindings/phy/starfive,jh7110-usb-phy.yaml
 +F:    drivers/phy/starfive/phy-jh7110-pcie.c
 +F:    drivers/phy/starfive/phy-jh7110-usb.c
 +
  STATIC BRANCH/CALL
  M:    Peter Zijlstra <[email protected]>
  M:    Josh Poimboeuf <[email protected]>
@@@ -20599,6 -20412,7 +20600,6 @@@ F:   drivers/pwm/pwm-stm32
  F:    include/linux/*/stm32-*tim*
  
  STMMAC ETHERNET DRIVER
 -M:    Giuseppe Cavallaro <[email protected]>
  M:    Alexandre Torgue <[email protected]>
  M:    Jose Abreu <[email protected]>
  L:    [email protected]
@@@ -21257,39 -21071,6 +21258,39 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/sound/davinci-mcasp-audio.yaml
  F:    sound/soc/ti/
  
 +TEXAS INSTRUMENTS AUDIO (ASoC/HDA) DRIVERS
 +M:    Shenghao Ding <[email protected]>
 +M:    Kevin Lu <[email protected]>
 +M:    Baojun Xu <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/tas2552.txt
 +F:    Documentation/devicetree/bindings/sound/tas2562.yaml
 +F:    Documentation/devicetree/bindings/sound/tas2770.yaml
 +F:    Documentation/devicetree/bindings/sound/tas27xx.yaml
 +F:    Documentation/devicetree/bindings/sound/ti,pcm1681.txt
 +F:    Documentation/devicetree/bindings/sound/ti,pcm3168a.yaml
 +F:    Documentation/devicetree/bindings/sound/ti,tlv320*.yaml
 +F:    Documentation/devicetree/bindings/sound/tlv320adcx140.yaml
 +F:    Documentation/devicetree/bindings/sound/tlv320aic31xx.txt
 +F:    Documentation/devicetree/bindings/sound/tpa6130a2.txt
 +F:    include/sound/tas2*.h
 +F:    include/sound/tlv320*.h
 +F:    include/sound/tpa6130a2-plat.h
 +F:    sound/pci/hda/tas2781_hda_i2c.c
 +F:    sound/soc/codecs/pcm1681.c
 +F:    sound/soc/codecs/pcm1789*.*
 +F:    sound/soc/codecs/pcm179x*.*
 +F:    sound/soc/codecs/pcm186x*.*
 +F:    sound/soc/codecs/pcm3008.*
 +F:    sound/soc/codecs/pcm3060*.*
 +F:    sound/soc/codecs/pcm3168a*.*
 +F:    sound/soc/codecs/pcm5102a.c
 +F:    sound/soc/codecs/pcm512x*.*
 +F:    sound/soc/codecs/tas2*.*
 +F:    sound/soc/codecs/tlv320*.*
 +F:    sound/soc/codecs/tpa6130a2.*
 +
  TEXAS INSTRUMENTS DMA DRIVERS
  M:    Peter Ujfalusi <[email protected]>
  L:    [email protected]
@@@ -21338,7 -21119,7 +21339,7 @@@ F:   drivers/irqchip/irq-ti-sci-inta.
  F:    drivers/irqchip/irq-ti-sci-intr.c
  F:    drivers/reset/reset-ti-sci.c
  F:    drivers/soc/ti/ti_sci_inta_msi.c
 -F:    drivers/soc/ti/ti_sci_pm_domains.c
 +F:    drivers/pmdomain/ti/ti_sci_pm_domains.c
  F:    include/dt-bindings/soc/ti,sci_pm_domain.h
  F:    include/linux/soc/ti/ti_sci_inta_msi.h
  F:    include/linux/soc/ti/ti_sci_protocol.h
@@@ -21565,14 -21346,6 +21566,14 @@@ F: drivers/misc/tifm
  F:    drivers/mmc/host/tifm_sd.c
  F:    include/linux/tifm.h
  
 +TI FPD-LINK DRIVERS
 +M:    Tomi Valkeinen <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/ti,ds90*
 +F:    drivers/media/i2c/ds90*
 +F:    include/media/i2c/ds90*
 +
  TI KEYSTONE MULTICORE NAVIGATOR DRIVERS
  M:    Nishanth Menon <[email protected]>
  M:    Santosh Shilimkar <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux.git
 +F:    drivers/pmdomain/ti/omap_prm.c
  F:    drivers/soc/ti/*
  
  TI LM49xxx FAMILY ASoC CODEC DRIVERS
@@@ -21823,20 -21595,6 +21824,20 @@@ S: Maintaine
  F:    Documentation/hwmon/tps546d24.rst
  F:    drivers/hwmon/pmbus/tps546d24.c
  
 +TQ SYSTEMS BOARD & DRIVER SUPPORT
 +L:    [email protected]
 +S:    Supported
 +W:    https://www.tq-group.com/en/products/tq-embedded/
 +F:    arch/arm/boot/dts/imx*mba*.dts*
 +F:    arch/arm/boot/dts/imx*tqma*.dts*
 +F:    arch/arm/boot/dts/mba*.dtsi
 +F:    arch/arm64/boot/dts/freescale/imx*mba*.dts*
 +F:    arch/arm64/boot/dts/freescale/imx*tqma*.dts*
 +F:    arch/arm64/boot/dts/freescale/mba*.dtsi
 +F:    drivers/gpio/gpio-tqmx86.c
 +F:    drivers/mfd/tqmx86.c
 +F:    drivers/watchdog/tqmx86_wdt.c
 +
  TRACING
  M:    Steven Rostedt <[email protected]>
  M:    Masami Hiramatsu <[email protected]>
@@@ -21882,22 -21640,21 +21883,22 @@@ F:        kernel/trace/trace_osnoise.
  F:    kernel/trace/trace_sched_wakeup.c
  
  TRADITIONAL CHINESE DOCUMENTATION
 -M:    Hu Haowen <[email protected]>
 -L:    [email protected] (moderated for non-subscribers)
 +M:    Hu Haowen <[email protected]>
  S:    Maintained
  W:    https://github.com/srcres258/linux-doc
  T:    git git://github.com/srcres258/linux-doc.git doc-zh-tw
  F:    Documentation/translations/zh_TW/
  
 -TTY LAYER
 +TTY LAYER AND SERIAL DRIVERS
  M:    Greg Kroah-Hartman <[email protected]>
  M:    Jiri Slaby <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git
 +F:    Documentation/devicetree/bindings/serial/
  F:    Documentation/driver-api/serial/
  F:    drivers/tty/
 -F:    drivers/tty/serial/serial_core.c
  F:    include/linux/selection.h
  F:    include/linux/serial.h
  F:    include/linux/serial_core.h
@@@ -21926,14 -21683,11 +21927,14 @@@ S:        Orpha
  F:    drivers/net/ethernet/dec/tulip/
  
  TUN/TAP driver
 -M:    Maxim Krasnyansky <[email protected]>
 +M:    Willem de Bruijn <[email protected]>
 +M:    Jason Wang <[email protected]>
  S:    Maintained
  W:    http://vtun.sourceforge.net/tun
  F:    Documentation/networking/tuntap.rst
  F:    arch/um/os-Linux/drivers/
 +F:    drivers/net/tap.c
 +F:    drivers/net/tun.c
  
  TURBOCHANNEL SUBSYSTEM
  M:    "Maciej W. Rozycki" <[email protected]>
@@@ -22046,7 -21800,7 +22047,7 @@@ F:   Documentation/admin-guide/ufs.rs
  F:    fs/ufs/
  
  UHID USERSPACE HID IO DRIVER
 -M:    David Rheinsberg <david[email protected]>
 +M:    David Rheinsberg <david@readahead.eu>
  L:    [email protected]
  S:    Maintained
  F:    drivers/hid/uhid.c
@@@ -22156,8 -21910,9 +22157,8 @@@ S:   Maintaine
  F:    drivers/usb/misc/apple-mfi-fastcharge.c
  
  USB AR5523 WIRELESS DRIVER
 -M:    Pontus Fuchs <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/ath/ar5523/
  
  USB ATTACHED SCSI
@@@ -22434,8 -22189,9 +22435,8 @@@ F:   drivers/usb/gadget/legacy/webcam.
  F:    include/uapi/linux/usb/g_uvc.h
  
  USB WIRELESS RNDIS DRIVER (rndis_wlan)
 -M:    Jussi Kivilinna <[email protected]>
  L:    [email protected]
 -S:    Maintained
 +S:    Orphan
  F:    drivers/net/wireless/legacy/rndis_wlan.c
  
  USB XHCI DRIVER
  S:    Maintained
  F:    drivers/clk/ux500/
  
 +V4L2 ASYNC AND FWNODE FRAMEWORKS
 +M:    Sakari Ailus <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +F:    drivers/media/v4l2-core/v4l2-async.c
 +F:    drivers/media/v4l2-core/v4l2-fwnode.c
 +F:    include/media/v4l2-async.h
 +F:    include/media/v4l2-fwnode.h
 +
 +V4L2 LENS DRIVERS
 +M:    Sakari Ailus <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/media/i2c/ak*
 +F:    drivers/media/i2c/dw*
 +F:    drivers/media/i2c/lm*
 +
 +V4L2 CAMERA SENSOR DRIVERS
 +M:    Sakari Ailus <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/driver-api/media/camera-sensor.rst
 +F:    Documentation/driver-api/media/tx-rx.rst
 +F:    drivers/media/i2c/ar*
 +F:    drivers/media/i2c/hi*
 +F:    drivers/media/i2c/imx*
 +F:    drivers/media/i2c/mt*
 +F:    drivers/media/i2c/og*
 +F:    drivers/media/i2c/ov*
 +F:    drivers/media/i2c/s5*
 +F:    drivers/media/i2c/st-vgxy61.c
 +
  VF610 NAND DRIVER
  M:    Stefan Agner <[email protected]>
  L:    [email protected]
@@@ -22634,13 -22357,6 +22635,13 @@@ S: Maintaine
  P:    Documentation/driver-api/vfio-pci-device-specific-driver-acceptance.rst
  F:    drivers/vfio/pci/*/
  
 +VFIO PDS PCI DRIVER
 +M:    Brett Creeley <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/networking/device_drivers/ethernet/amd/pds_vfio_pci.rst
 +F:    drivers/vfio/pci/pds/
 +
  VFIO PLATFORM DRIVER
  M:    Eric Auger <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/block/virtio_blk.c
  F:    drivers/scsi/virtio_scsi.c
 -F:    drivers/vhost/scsi.c
  F:    include/uapi/linux/virtio_blk.h
  F:    include/uapi/linux/virtio_scsi.h
  
@@@ -22862,16 -22579,6 +22863,16 @@@ F: include/linux/vhost_iotlb.
  F:    include/uapi/linux/vhost.h
  F:    kernel/vhost_task.c
  
 +VIRTIO HOST (VHOST-SCSI)
 +M:    "Michael S. Tsirkin" <[email protected]>
 +M:    Jason Wang <[email protected]>
 +M:    Mike Christie <[email protected]>
 +R:    Paolo Bonzini <[email protected]>
 +R:    Stefan Hajnoczi <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/vhost/scsi.c
 +
  VIRTIO I2C DRIVER
  M:    Conghui Chen <[email protected]>
  M:    Viresh Kumar <[email protected]>
@@@ -23113,9 -22820,9 +23114,9 @@@ F:   drivers/net/vrf.
  VSPRINTF
  M:    Petr Mladek <[email protected]>
  M:    Steven Rostedt <[email protected]>
 -M:    Sergey Senozhatsky <[email protected]>
  R:    Andy Shevchenko <[email protected]>
  R:    Rasmus Villemoes <[email protected]>
 +R:    Sergey Senozhatsky <[email protected]>
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
  F:    Documentation/core-api/printk-formats.rst
@@@ -23189,7 -22896,6 +23190,7 @@@ S:   Maintaine
  W:    https://www.net-swift.com
  F:    Documentation/networking/device_drivers/ethernet/wangxun/*
  F:    drivers/net/ethernet/wangxun/
 +F:    drivers/net/pcs/pcs-xpcs-wx.c
  
  WATCHDOG DEVICE DRIVERS
  M:    Wim Van Sebroeck <[email protected]>
@@@ -23218,7 -22924,7 +23219,7 @@@ S:   Maintaine
  F:    drivers/rtc/rtc-sd3078.c
  
  WIIMOTE HID DRIVER
 -M:    David Rheinsberg <david[email protected]>
 +M:    David Rheinsberg <david@readahead.eu>
  L:    [email protected]
  S:    Maintained
  F:    drivers/hid/hid-wiimote*
@@@ -23260,14 -22966,12 +23261,14 @@@ F:        drivers/input/misc/wistron_btns.
  
  WL3501 WIRELESS PCMCIA CARD DRIVER
  L:    [email protected]
 -S:    Odd fixes
 +S:    Orphan
  F:    drivers/net/wireless/legacy/wl3501*
  
  WMI BINARY MOF DRIVER
 -L:    [email protected]
 -S:    Orphan
 +M:    Armin Wolf <[email protected]>
 +R:    Thomas Weißschuh <[email protected]>
 +L:    [email protected]
 +S:    Maintained
  F:    Documentation/ABI/stable/sysfs-platform-wmi-bmof
  F:    Documentation/wmi/devices/wmi-bmof.rst
  F:    drivers/platform/x86/wmi-bmof.c
@@@ -23442,8 -23146,7 +23443,8 @@@ F:   arch/x86/platfor
  
  X86 PLATFORM UV HPE SUPERDOME FLEX
  M:    Steve Wahl <[email protected]>
 -R:    Mike Travis <[email protected]>
 +R:    Justin Ernst <[email protected]>
 +R:    Kyle Meyer <[email protected]>
  R:    Dimitri Sivanich <[email protected]>
  R:    Russ Anderson <[email protected]>
  S:    Supported
@@@ -23630,14 -23333,12 +23631,14 @@@ F:        include/xen/arm/swiotlb-xen.
  F:    include/xen/swiotlb-xen.h
  
  XFS FILESYSTEM
 -M:    Darrick J. Wong <[email protected]>
 +M:    Chandan Babu R <[email protected]>
 +R:    Darrick J. Wong <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://xfs.org/
  C:    irc://irc.oftc.net/xfs
  T:    git git://git.kernel.org/pub/scm/fs/xfs/xfs-linux.git
 +P:    Documentation/filesystems/xfs-maintainer-entry-profile.rst
  F:    Documentation/ABI/testing/sysfs-fs-xfs
  F:    Documentation/admin-guide/xfs.rst
  F:    Documentation/filesystems/xfs-delayed-logging-design.rst
@@@ -23836,8 -23537,11 +23837,8 @@@ S:  Maintaine
  F:    mm/zbud.c
  
  ZD1211RW WIRELESS DRIVER
 -M:    Ulrich Kunitz <[email protected]>
  L:    [email protected]
 -L:    [email protected] (subscribers-only)
 -S:    Maintained
 -W:    http://zd1211.ath.cx/wiki/DriverRewrite
 +S:    Orphan
  F:    drivers/net/wireless/zydas/zd1211rw/
  
  ZD1301 MEDIA DRIVER
index 4b230933b28ebf4313396797959e09febcd71869,9ad509279b0a65d5e6d13464092762eef0635a26..cbef4ff28cd8a6ecb664be7594e7ca7998224814
@@@ -68,15 -68,15 +68,15 @@@ static void apply_edid_quirks(struct ed
        }
  }
  
 -/* dm_helpers_parse_edid_caps
 - *
 - * Parse edid caps
 +/**
 + * dm_helpers_parse_edid_caps() - Parse edid caps
   *
 + * @link: current detected link
   * @edid:     [in] pointer to edid
 - *  edid_caps:        [in] pointer to edid caps
 - * @return
 - *    void
 - * */
 + * @edid_caps:        [in] pointer to edid caps
 + *
 + * Return: void
 + */
  enum dc_edid_status dm_helpers_parse_edid_caps(
                struct dc_link *link,
                const struct dc_edid *edid,
        if (sad_count <= 0)
                return result;
  
 -      edid_caps->audio_mode_count = sad_count < DC_MAX_AUDIO_DESC_COUNT ? sad_count : DC_MAX_AUDIO_DESC_COUNT;
 +      edid_caps->audio_mode_count = min(sad_count, DC_MAX_AUDIO_DESC_COUNT);
        for (i = 0; i < edid_caps->audio_mode_count; ++i) {
                struct cea_sad *sad = &sads[i];
  
@@@ -219,7 -219,7 +219,7 @@@ static void dm_helpers_construct_old_pa
        /* Set correct time_slots/PBN of old payload.
         * other fields (delete & dsc_enabled) in
         * struct drm_dp_mst_atomic_payload are don't care fields
-        * while calling drm_dp_remove_payload()
+        * while calling drm_dp_remove_payload_part2()
         */
        for (i = 0; i < current_link_table.stream_count; i++) {
                dc_alloc =
@@@ -255,21 -255,19 +255,20 @@@ bool dm_helpers_dp_mst_write_payload_al
        /* Accessing the connector state is required for vcpi_slots allocation
         * and directly relies on behaviour in commit check
         * that blocks before commit guaranteeing that the state
 -       * is not gonna be swapped while still in use in commit tail */
 +       * is not gonna be swapped while still in use in commit tail
 +       */
  
        if (!aconnector || !aconnector->mst_root)
                return false;
  
        mst_mgr = &aconnector->mst_root->mst_mgr;
        mst_state = to_drm_dp_mst_topology_state(mst_mgr->base.state);
-       /* It's OK for this to fail */
        new_payload = drm_atomic_get_mst_payload_state(mst_state, aconnector->mst_output_port);
  
        if (enable) {
                target_payload = new_payload;
  
+               /* It's OK for this to fail */
                drm_dp_add_payload_part1(mst_mgr, mst_state, new_payload);
        } else {
                /* construct old payload by VCPI*/
                                                new_payload, &old_payload);
                target_payload = &old_payload;
  
-               drm_dp_remove_payload(mst_mgr, mst_state, &old_payload, new_payload);
+               drm_dp_remove_payload_part1(mst_mgr, mst_state, new_payload);
        }
  
        /* mst_mgr->->payloads are VC payload notify MST branch using DPCD or
         * AUX message. The sequence is slot 1-63 allocated sequence for each
         * stream. AMD ASIC stream slot allocation should follow the same
 -       * sequence. copy DRM MST allocation to dc */
 +       * sequence. copy DRM MST allocation to dc
 +       */
        fill_dc_mst_payload_table_from_drm(stream->link, enable, target_payload, proposed_table);
  
        return true;
@@@ -344,7 -341,7 +343,7 @@@ bool dm_helpers_dp_mst_send_payload_all
        struct amdgpu_dm_connector *aconnector;
        struct drm_dp_mst_topology_state *mst_state;
        struct drm_dp_mst_topology_mgr *mst_mgr;
-       struct drm_dp_mst_atomic_payload *payload;
+       struct drm_dp_mst_atomic_payload *new_payload, *old_payload;
        enum mst_progress_status set_flag = MST_ALLOCATE_NEW_PAYLOAD;
        enum mst_progress_status clr_flag = MST_CLEAR_ALLOCATED_PAYLOAD;
        int ret = 0;
        mst_mgr = &aconnector->mst_root->mst_mgr;
        mst_state = to_drm_dp_mst_topology_state(mst_mgr->base.state);
  
-       payload = drm_atomic_get_mst_payload_state(mst_state, aconnector->mst_output_port);
+       new_payload = drm_atomic_get_mst_payload_state(mst_state, aconnector->mst_output_port);
  
        if (!enable) {
                set_flag = MST_CLEAR_ALLOCATED_PAYLOAD;
                clr_flag = MST_ALLOCATE_NEW_PAYLOAD;
        }
  
-       if (enable)
-               ret = drm_dp_add_payload_part2(mst_mgr, mst_state->base.state, payload);
+       if (enable) {
+               ret = drm_dp_add_payload_part2(mst_mgr, mst_state->base.state, new_payload);
+       } else {
+               dm_helpers_construct_old_payload(stream->link, mst_state->pbn_div,
+                                                new_payload, old_payload);
+               drm_dp_remove_payload_part2(mst_mgr, mst_state, old_payload, new_payload);
+       }
  
        if (ret) {
                amdgpu_dm_set_mst_status(&aconnector->mst_status,
@@@ -428,7 -430,7 +432,7 @@@ void dm_dtn_log_append_v(struct dc_cont
        total = log_ctx->pos + n + 1;
  
        if (total > log_ctx->size) {
 -              char *buf = (char *)kvcalloc(total, sizeof(char), GFP_KERNEL);
 +              char *buf = kvcalloc(total, sizeof(char), GFP_KERNEL);
  
                if (buf) {
                        memcpy(buf, log_ctx->buf, log_ctx->pos);
@@@ -635,7 -637,7 +639,7 @@@ static bool execute_synaptics_rc_comman
        ret = drm_dp_dpcd_write(aux, SYNAPTICS_RC_COMMAND, &rc_cmd, sizeof(rc_cmd));
  
        if (ret < 0) {
 -              DRM_ERROR("     execute_synaptics_rc_command - write cmd ..., err = %d\n", ret);
 +              DRM_ERROR("%s: write cmd ..., err = %d\n",  __func__, ret);
                return false;
        }
  
                drm_dp_dpcd_read(aux, SYNAPTICS_RC_DATA, data, length);
        }
  
 -      DC_LOG_DC("     execute_synaptics_rc_command - success = %d\n", success);
 +      DC_LOG_DC("%s: success = %d\n", __func__, success);
  
        return success;
  }
@@@ -666,7 -668,7 +670,7 @@@ static void apply_synaptics_fifo_reset_
  {
        unsigned char data[16] = {0};
  
 -      DC_LOG_DC("Start apply_synaptics_fifo_reset_wa\n");
 +      DC_LOG_DC("Start %s\n", __func__);
  
        // Step 2
        data[0] = 'P';
        if (!execute_synaptics_rc_command(aux, true, 0x02, 0, 0, NULL))
                return;
  
 -      DC_LOG_DC("Done apply_synaptics_fifo_reset_wa\n");
 +      DC_LOG_DC("Done %s\n", __func__);
  }
  
  /* MST Dock */
@@@ -997,8 -999,9 +1001,8 @@@ void dm_helpers_override_panel_settings
        struct dc_panel_config *panel_config)
  {
        // Feature DSC
 -      if (amdgpu_dc_debug_mask & DC_DISABLE_DSC) {
 +      if (amdgpu_dc_debug_mask & DC_DISABLE_DSC)
                panel_config->dsc.disable_dsc_edp = true;
 -      }
  }
  
  void *dm_helpers_allocate_gpu_mem(
index 4618687a8f4d64e68d93b7324901fcea40942d93,916f2c36bf2f7e1ddd8a4de023de38ebf6809dbb..f3e744172673c315fa366e1e0cd6adcc1400442a
@@@ -305,12 -305,12 +305,12 @@@ komeda_layer_check_cfg(struct komeda_la
        if (komeda_fb_check_src_coords(kfb, src_x, src_y, src_w, src_h))
                return -EINVAL;
  
 -      if (!in_range(&layer->hsize_in, src_w)) {
 +      if (!malidp_in_range(&layer->hsize_in, src_w)) {
                DRM_DEBUG_ATOMIC("invalidate src_w %d.\n", src_w);
                return -EINVAL;
        }
  
 -      if (!in_range(&layer->vsize_in, src_h)) {
 +      if (!malidp_in_range(&layer->vsize_in, src_h)) {
                DRM_DEBUG_ATOMIC("invalidate src_h %d.\n", src_h);
                return -EINVAL;
        }
@@@ -452,14 -452,14 +452,14 @@@ komeda_scaler_check_cfg(struct komeda_s
        hsize_out = dflow->out_w;
        vsize_out = dflow->out_h;
  
 -      if (!in_range(&scaler->hsize, hsize_in) ||
 -          !in_range(&scaler->hsize, hsize_out)) {
 +      if (!malidp_in_range(&scaler->hsize, hsize_in) ||
 +          !malidp_in_range(&scaler->hsize, hsize_out)) {
                DRM_DEBUG_ATOMIC("Invalid horizontal sizes");
                return -EINVAL;
        }
  
 -      if (!in_range(&scaler->vsize, vsize_in) ||
 -          !in_range(&scaler->vsize, vsize_out)) {
 +      if (!malidp_in_range(&scaler->vsize, vsize_in) ||
 +          !malidp_in_range(&scaler->vsize, vsize_out)) {
                DRM_DEBUG_ATOMIC("Invalid vertical sizes");
                return -EINVAL;
        }
@@@ -574,13 -574,13 +574,13 @@@ komeda_splitter_validate(struct komeda_
                return -EINVAL;
        }
  
 -      if (!in_range(&splitter->hsize, dflow->in_w)) {
 +      if (!malidp_in_range(&splitter->hsize, dflow->in_w)) {
                DRM_DEBUG_ATOMIC("split in_w:%d is out of the acceptable range.\n",
                                 dflow->in_w);
                return -EINVAL;
        }
  
 -      if (!in_range(&splitter->vsize, dflow->in_h)) {
 +      if (!malidp_in_range(&splitter->vsize, dflow->in_h)) {
                DRM_DEBUG_ATOMIC("split in_h: %d exceeds the acceptable range.\n",
                                 dflow->in_h);
                return -EINVAL;
@@@ -624,13 -624,13 +624,13 @@@ komeda_merger_validate(struct komeda_me
                return -EINVAL;
        }
  
 -      if (!in_range(&merger->hsize_merged, output->out_w)) {
 +      if (!malidp_in_range(&merger->hsize_merged, output->out_w)) {
                DRM_DEBUG_ATOMIC("merged_w: %d is out of the accepted range.\n",
                                 output->out_w);
                return -EINVAL;
        }
  
 -      if (!in_range(&merger->vsize_merged, output->out_h)) {
 +      if (!malidp_in_range(&merger->vsize_merged, output->out_h)) {
                DRM_DEBUG_ATOMIC("merged_h: %d is out of the accepted range.\n",
                                 output->out_h);
                return -EINVAL;
@@@ -866,8 -866,8 +866,8 @@@ void komeda_complete_data_flow_cfg(stru
         * input/output range.
         */
        if (dflow->en_scaling && scaler)
 -              dflow->en_split = !in_range(&scaler->hsize, dflow->in_w) ||
 -                                !in_range(&scaler->hsize, dflow->out_w);
 +              dflow->en_split = !malidp_in_range(&scaler->hsize, dflow->in_w) ||
 +                                !malidp_in_range(&scaler->hsize, dflow->out_w);
  }
  
  static bool merger_is_available(struct komeda_pipeline *pipe,
@@@ -1223,7 -1223,7 +1223,7 @@@ int komeda_build_display_data_flow(stru
        return 0;
  }
  
- static void
+ static int
  komeda_pipeline_unbound_components(struct komeda_pipeline *pipe,
                                   struct komeda_pipeline_state *new)
  {
                c = komeda_pipeline_get_component(pipe, id);
                c_st = komeda_component_get_state_and_set_user(c,
                                drm_st, NULL, new->crtc);
+               if (PTR_ERR(c_st) == -EDEADLK)
+                       return -EDEADLK;
                WARN_ON(IS_ERR(c_st));
        }
+       return 0;
  }
  
  /* release unclaimed pipeline resource */
@@@ -1266,9 -1270,8 +1270,8 @@@ int komeda_release_unclaimed_resources(
        if (WARN_ON(IS_ERR_OR_NULL(st)))
                return -EINVAL;
  
-       komeda_pipeline_unbound_components(pipe, st);
+       return komeda_pipeline_unbound_components(pipe, st);
  
-       return 0;
  }
  
  /* Since standalone disabled components must be disabled separately and in the
index cf777bdb25d2a4642c0af1cb81347fb865938461,b1df91e37b1b446429b683afa08340133c5a4ec0..19bdb32dbc9aa07da865e8bcb323f424f2f984b9
@@@ -385,7 -385,7 +385,7 @@@ static const unsigned int imx8mm_dsim_r
        [RESET_TYPE] = DSIM_SWRST,
        [PLL_TIMER] = 500,
        [STOP_STATE_CNT] = 0xf,
-       [PHYCTRL_ULPS_EXIT] = 0,
+       [PHYCTRL_ULPS_EXIT] = DSIM_PHYCTRL_ULPS_EXIT(0xaf),
        [PHYCTRL_VREG_LP] = 0,
        [PHYCTRL_SLEW_UP] = 0,
        [PHYTIMING_LPX] = DSIM_PHYTIMING_LPX(0x06),
@@@ -413,6 -413,7 +413,7 @@@ static const struct samsung_dsim_driver
        .m_min = 41,
        .m_max = 125,
        .min_freq = 500,
+       .has_broken_fifoctrl_emptyhdr = 1,
  };
  
  static const struct samsung_dsim_driver_data exynos4_dsi_driver_data = {
        .m_min = 41,
        .m_max = 125,
        .min_freq = 500,
+       .has_broken_fifoctrl_emptyhdr = 1,
  };
  
  static const struct samsung_dsim_driver_data exynos5_dsi_driver_data = {
@@@ -1010,8 -1012,20 +1012,20 @@@ static int samsung_dsim_wait_for_hdr_fi
        do {
                u32 reg = samsung_dsim_read(dsi, DSIM_FIFOCTRL_REG);
  
-               if (reg & DSIM_SFR_HEADER_EMPTY)
-                       return 0;
+               if (!dsi->driver_data->has_broken_fifoctrl_emptyhdr) {
+                       if (reg & DSIM_SFR_HEADER_EMPTY)
+                               return 0;
+               } else {
+                       if (!(reg & DSIM_SFR_HEADER_FULL)) {
+                               /*
+                                * Wait a little bit, so the pending data can
+                                * actually leave the FIFO to avoid overflow.
+                                */
+                               if (!cond_resched())
+                                       usleep_range(950, 1050);
+                               return 0;
+                       }
+               }
  
                if (!cond_resched())
                        usleep_range(950, 1050);
@@@ -1387,18 -1401,6 +1401,18 @@@ static void samsung_dsim_disable_irq(st
        disable_irq(dsi->irq);
  }
  
 +static void samsung_dsim_set_stop_state(struct samsung_dsim *dsi, bool enable)
 +{
 +      u32 reg = samsung_dsim_read(dsi, DSIM_ESCMODE_REG);
 +
 +      if (enable)
 +              reg |= DSIM_FORCE_STOP_STATE;
 +      else
 +              reg &= ~DSIM_FORCE_STOP_STATE;
 +
 +      samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg);
 +}
 +
  static int samsung_dsim_init(struct samsung_dsim *dsi)
  {
        const struct samsung_dsim_driver_data *driver_data = dsi->driver_data;
@@@ -1458,12 -1460,15 +1472,12 @@@ static void samsung_dsim_atomic_enable(
                                       struct drm_bridge_state *old_bridge_state)
  {
        struct samsung_dsim *dsi = bridge_to_dsi(bridge);
 -      u32 reg;
  
        if (samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type)) {
                samsung_dsim_set_display_mode(dsi);
                samsung_dsim_set_display_enable(dsi, true);
        } else {
 -              reg = samsung_dsim_read(dsi, DSIM_ESCMODE_REG);
 -              reg &= ~DSIM_FORCE_STOP_STATE;
 -              samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg);
 +              samsung_dsim_set_stop_state(dsi, false);
        }
  
        dsi->state |= DSIM_STATE_VIDOUT_AVAILABLE;
@@@ -1473,12 -1478,16 +1487,12 @@@ static void samsung_dsim_atomic_disable
                                        struct drm_bridge_state *old_bridge_state)
  {
        struct samsung_dsim *dsi = bridge_to_dsi(bridge);
 -      u32 reg;
  
        if (!(dsi->state & DSIM_STATE_ENABLED))
                return;
  
 -      if (!samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type)) {
 -              reg = samsung_dsim_read(dsi, DSIM_ESCMODE_REG);
 -              reg |= DSIM_FORCE_STOP_STATE;
 -              samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg);
 -      }
 +      if (!samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type))
 +              samsung_dsim_set_stop_state(dsi, true);
  
        dsi->state &= ~DSIM_STATE_VIDOUT_AVAILABLE;
  }
@@@ -1781,8 -1790,6 +1795,8 @@@ static ssize_t samsung_dsim_host_transf
        if (ret)
                return ret;
  
 +      samsung_dsim_set_stop_state(dsi, false);
 +
        ret = mipi_dsi_create_packet(&xfer.packet, msg);
        if (ret < 0)
                return ret;
index c277b198fa3fa2b6e7c221e51d6a515d5e9364f1,affce6a8851f9c32c4c0044f37b34c3662109dc9..f1a503aafe5aa18526a5bbe92a79c475433906c4
@@@ -140,12 -140,6 +140,12 @@@ drm_atomic_state_init(struct drm_devic
        if (!state->planes)
                goto fail;
  
 +      /*
 +       * Because drm_atomic_state can be committed asynchronously we need our
 +       * own reference and cannot rely on the on implied by drm_file in the
 +       * ioctl call.
 +       */
 +      drm_dev_get(dev);
        state->dev = dev;
  
        drm_dbg_atomic(dev, "Allocated atomic state %p\n", state);
@@@ -305,8 -299,7 +305,8 @@@ EXPORT_SYMBOL(drm_atomic_state_clear)
  void __drm_atomic_state_free(struct kref *ref)
  {
        struct drm_atomic_state *state = container_of(ref, typeof(*state), ref);
 -      struct drm_mode_config *config = &state->dev->mode_config;
 +      struct drm_device *dev = state->dev;
 +      struct drm_mode_config *config = &dev->mode_config;
  
        drm_atomic_state_clear(state);
  
                drm_atomic_state_default_release(state);
                kfree(state);
        }
 +
 +      drm_dev_put(dev);
  }
  EXPORT_SYMBOL(__drm_atomic_state_free);
  
@@@ -1841,9 -1832,9 +1841,9 @@@ static const struct drm_debugfs_info dr
        {"state", drm_state_info, 0},
  };
  
- void drm_atomic_debugfs_init(struct drm_minor *minor)
+ void drm_atomic_debugfs_init(struct drm_device *dev)
  {
-       drm_debugfs_add_files(minor->dev, drm_atomic_debugfs_list,
+       drm_debugfs_add_files(dev, drm_atomic_debugfs_list,
                              ARRAY_SIZE(drm_atomic_debugfs_list));
  }
  #endif
index 89585b31b985e182948d1a3838f21e10b7941ffb,8819e40d5e6ed3bc7fe8fd2ac20151f59ceb3c7a..ef29c9a61a4617c890846c4d5f6bdc501803319a
@@@ -310,7 -310,7 +310,7 @@@ static void ipu_crtc_mode_set_nofb(stru
                dev_warn(ipu_crtc->dev, "8-pixel align hactive %d -> %d\n",
                         sig_cfg.mode.hactive, new_hactive);
  
 -              sig_cfg.mode.hfront_porch = new_hactive - sig_cfg.mode.hactive;
 +              sig_cfg.mode.hfront_porch -= new_hactive - sig_cfg.mode.hactive;
                sig_cfg.mode.hactive = new_hactive;
        }
  
@@@ -441,10 -441,9 +441,9 @@@ static int ipu_drm_probe(struct platfor
        return component_add(dev, &ipu_crtc_ops);
  }
  
- static int ipu_drm_remove(struct platform_device *pdev)
+ static void ipu_drm_remove(struct platform_device *pdev)
  {
        component_del(&pdev->dev, &ipu_crtc_ops);
-       return 0;
  }
  
  struct platform_driver ipu_drm_driver = {
                .name = "imx-ipuv3-crtc",
        },
        .probe = ipu_drm_probe,
-       .remove = ipu_drm_remove,
+       .remove_new = ipu_drm_remove,
  };
index 575e7c56219ff155d93f1cb9cfc2629b8c7cf757,26a27cb039e9482fc3a641b70d0d7840307c0a5a..fa527935ffd4230a546000d5f382a912625e9f56
@@@ -22,9 -22,9 +22,9 @@@ module_param_named(allow_vram_carveout
  
  static const struct adreno_info gpulist[] = {
        {
 -              .rev   = ADRENO_REV(2, 0, 0, 0),
 +              .chip_ids = ADRENO_CHIP_IDS(0x02000000),
 +              .family = ADRENO_2XX_GEN1,
                .revn  = 200,
 -              .name  = "A200",
                .fw = {
                        [ADRENO_FW_PM4] = "yamato_pm4.fw",
                        [ADRENO_FW_PFP] = "yamato_pfp.fw",
@@@ -33,9 -33,9 +33,9 @@@
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a2xx_gpu_init,
        }, { /* a200 on i.mx51 has only 128kib gmem */
 -              .rev   = ADRENO_REV(2, 0, 0, 1),
 +              .chip_ids = ADRENO_CHIP_IDS(0x02000001),
 +              .family = ADRENO_2XX_GEN1,
                .revn  = 201,
 -              .name  = "A200",
                .fw = {
                        [ADRENO_FW_PM4] = "yamato_pm4.fw",
                        [ADRENO_FW_PFP] = "yamato_pfp.fw",
@@@ -44,9 -44,9 +44,9 @@@
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a2xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(2, 2, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x02020000),
 +              .family = ADRENO_2XX_GEN2,
                .revn  = 220,
 -              .name  = "A220",
                .fw = {
                        [ADRENO_FW_PM4] = "leia_pm4_470.fw",
                        [ADRENO_FW_PFP] = "leia_pfp_470.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a2xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(3, 0, 5, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(
 +                      0x03000512,
 +                      0x03000520
 +              ),
 +              .family = ADRENO_3XX,
                .revn  = 305,
 -              .name  = "A305",
                .fw = {
                        [ADRENO_FW_PM4] = "a300_pm4.fw",
                        [ADRENO_FW_PFP] = "a300_pfp.fw",
@@@ -69,9 -66,9 +69,9 @@@
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a3xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(3, 0, 6, 0),
 +              .chip_ids = ADRENO_CHIP_IDS(0x03000600),
 +              .family = ADRENO_3XX,
                .revn  = 307,        /* because a305c is revn==306 */
 -              .name  = "A306",
                .fw = {
                        [ADRENO_FW_PM4] = "a300_pm4.fw",
                        [ADRENO_FW_PFP] = "a300_pfp.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a3xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(3, 2, ANY_ID, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(
 +                      0x03020000,
 +                      0x03020001,
 +                      0x03020002
 +              ),
 +              .family = ADRENO_3XX,
                .revn  = 320,
 -              .name  = "A320",
                .fw = {
                        [ADRENO_FW_PM4] = "a300_pm4.fw",
                        [ADRENO_FW_PFP] = "a300_pfp.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a3xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(3, 3, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(
 +                      0x03030000,
 +                      0x03030001,
 +                      0x03030002
 +              ),
 +              .family = ADRENO_3XX,
                .revn  = 330,
 -              .name  = "A330",
                .fw = {
                        [ADRENO_FW_PM4] = "a330_pm4.fw",
                        [ADRENO_FW_PFP] = "a330_pfp.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a3xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(4, 0, 5, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x04000500),
 +              .family = ADRENO_4XX,
                .revn  = 405,
 -              .name  = "A405",
                .fw = {
                        [ADRENO_FW_PM4] = "a420_pm4.fw",
                        [ADRENO_FW_PFP] = "a420_pfp.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a4xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(4, 2, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x04020000),
 +              .family = ADRENO_4XX,
                .revn  = 420,
 -              .name  = "A420",
                .fw = {
                        [ADRENO_FW_PM4] = "a420_pm4.fw",
                        [ADRENO_FW_PFP] = "a420_pfp.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a4xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(4, 3, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x04030002),
 +              .family = ADRENO_4XX,
                .revn  = 430,
 -              .name  = "A430",
                .fw = {
                        [ADRENO_FW_PM4] = "a420_pm4.fw",
                        [ADRENO_FW_PFP] = "a420_pfp.fw",
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init  = a4xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(5, 0, 6, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x05000600),
 +              .family = ADRENO_5XX,
                .revn = 506,
 -              .name = "A506",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                .init = a5xx_gpu_init,
                .zapfw = "a506_zap.mdt",
        }, {
 -              .rev   = ADRENO_REV(5, 0, 8, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x05000800),
 +              .family = ADRENO_5XX,
                .revn = 508,
 -              .name = "A508",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                .init = a5xx_gpu_init,
                .zapfw = "a508_zap.mdt",
        }, {
 -              .rev   = ADRENO_REV(5, 0, 9, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x05000900),
 +              .family = ADRENO_5XX,
                .revn = 509,
 -              .name = "A509",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                /* Adreno 509 uses the same ZAP as 512 */
                .zapfw = "a512_zap.mdt",
        }, {
 -              .rev   = ADRENO_REV(5, 1, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x05010000),
 +              .family = ADRENO_5XX,
                .revn = 510,
 -              .name = "A510",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                .inactive_period = 250,
                .init = a5xx_gpu_init,
        }, {
 -              .rev   = ADRENO_REV(5, 1, 2, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x05010200),
 +              .family = ADRENO_5XX,
                .revn = 512,
 -              .name = "A512",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                .init = a5xx_gpu_init,
                .zapfw = "a512_zap.mdt",
        }, {
 -              .rev = ADRENO_REV(5, 3, 0, 2),
 +              .chip_ids = ADRENO_CHIP_IDS(
 +                      0x05030002,
 +                      0x05030004
 +              ),
 +              .family = ADRENO_5XX,
                .revn = 530,
 -              .name = "A530",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                .init = a5xx_gpu_init,
                .zapfw = "a530_zap.mdt",
        }, {
 -              .rev = ADRENO_REV(5, 4, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x05040001),
 +              .family = ADRENO_5XX,
                .revn = 540,
 -              .name = "A540",
                .fw = {
                        [ADRENO_FW_PM4] = "a530_pm4.fw",
                        [ADRENO_FW_PFP] = "a530_pfp.fw",
                .init = a5xx_gpu_init,
                .zapfw = "a540_zap.mdt",
        }, {
 -              .rev = ADRENO_REV(6, 1, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06010000),
 +              .family = ADRENO_6XX_GEN1,
                .revn = 610,
 -              .name = "A610",
                .fw = {
                        [ADRENO_FW_SQE] = "a630_sqe.fw",
                },
                .init = a6xx_gpu_init,
                .zapfw = "a610_zap.mdt",
                .hwcg = a612_hwcg,
 +              /*
 +               * There are (at least) three SoCs implementing A610: SM6125
 +               * (trinket), SM6115 (bengal) and SM6225 (khaje). Trinket does
 +               * not have speedbinning, as only a single SKU exists and we
 +               * don't support khaje upstream yet.  Hence, this matching
 +               * table is only valid for bengal.
 +               */
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0,   0 },
 +                      { 206, 1 },
 +                      { 200, 2 },
 +                      { 157, 3 },
 +                      { 127, 4 },
 +              ),
        }, {
 -              .rev = ADRENO_REV(6, 1, 8, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06010800),
 +              .family = ADRENO_6XX_GEN1,
                .revn = 618,
 -              .name = "A618",
                .fw = {
                        [ADRENO_FW_SQE] = "a630_sqe.fw",
                        [ADRENO_FW_GMU] = "a630_gmu.bin",
                },
                .gmem = SZ_512K,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT,
 +              .init = a6xx_gpu_init,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0,   0 },
 +                      { 169, 1 },
 +                      { 174, 2 },
 +              ),
 +      }, {
 +              .machine = "qcom,sm4350",
 +              .chip_ids = ADRENO_CHIP_IDS(0x06010900),
 +              .family = ADRENO_6XX_GEN1,
 +              .revn = 619,
 +              .fw = {
 +                      [ADRENO_FW_SQE] = "a630_sqe.fw",
 +                      [ADRENO_FW_GMU] = "a619_gmu.bin",
 +              },
 +              .gmem = SZ_512K,
 +              .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .init = a6xx_gpu_init,
 +              .zapfw = "a615_zap.mdt",
 +              .hwcg = a615_hwcg,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0,   0 },
 +                      { 138, 1 },
 +                      { 92,  2 },
 +              ),
 +      }, {
 +              .machine = "qcom,sm6375",
 +              .chip_ids = ADRENO_CHIP_IDS(0x06010900),
 +              .family = ADRENO_6XX_GEN1,
 +              .revn = 619,
 +              .fw = {
 +                      [ADRENO_FW_SQE] = "a630_sqe.fw",
 +                      [ADRENO_FW_GMU] = "a619_gmu.bin",
 +              },
 +              .gmem = SZ_512K,
 +              .inactive_period = DRM_MSM_INACTIVE_PERIOD,
                .init = a6xx_gpu_init,
 +              .zapfw = "a615_zap.mdt",
 +              .hwcg = a615_hwcg,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0,   0 },
 +                      { 190, 1 },
 +                      { 177, 2 },
 +              ),
        }, {
 -              .rev = ADRENO_REV(6, 1, 9, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06010900),
 +              .family = ADRENO_6XX_GEN1,
                .revn = 619,
 -              .name = "A619",
                .fw = {
                        [ADRENO_FW_SQE] = "a630_sqe.fw",
                        [ADRENO_FW_GMU] = "a619_gmu.bin",
                },
                .gmem = SZ_512K,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT,
                .init = a6xx_gpu_init,
                .zapfw = "a615_zap.mdt",
                .hwcg = a615_hwcg,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0,   0 },
 +                      { 120, 4 },
 +                      { 138, 3 },
 +                      { 169, 2 },
 +                      { 180, 1 },
 +              ),
        }, {
 -              .rev = ADRENO_REV(6, 3, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(
 +                      0x06030001,
 +                      0x06030002
 +              ),
 +              .family = ADRENO_6XX_GEN1,
                .revn = 630,
 -              .name = "A630",
                .fw = {
                        [ADRENO_FW_SQE] = "a630_sqe.fw",
                        [ADRENO_FW_GMU] = "a630_gmu.bin",
                },
                .gmem = SZ_1M,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT,
                .init = a6xx_gpu_init,
                .zapfw = "a630_zap.mdt",
                .hwcg = a630_hwcg,
        }, {
 -              .rev = ADRENO_REV(6, 4, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06040001),
 +              .family = ADRENO_6XX_GEN2,
                .revn = 640,
 -              .name = "A640",
                .fw = {
                        [ADRENO_FW_SQE] = "a630_sqe.fw",
                        [ADRENO_FW_GMU] = "a640_gmu.bin",
                },
                .gmem = SZ_1M,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT,
                .init = a6xx_gpu_init,
                .zapfw = "a640_zap.mdt",
                .hwcg = a640_hwcg,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0, 0 },
 +                      { 1, 1 },
 +              ),
        }, {
 -              .rev = ADRENO_REV(6, 5, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06050002),
 +              .family = ADRENO_6XX_GEN3,
                .revn = 650,
 -              .name = "A650",
                .fw = {
                        [ADRENO_FW_SQE] = "a650_sqe.fw",
                        [ADRENO_FW_GMU] = "a650_gmu.bin",
                },
                .gmem = SZ_1M + SZ_128K,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
 +                      ADRENO_QUIRK_HAS_HW_APRIV,
                .init = a6xx_gpu_init,
                .zapfw = "a650_zap.mdt",
                .hwcg = a650_hwcg,
                .address_space_size = SZ_16G,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0, 0 },
 +                      { 1, 1 },
 +                      { 2, 3 }, /* Yep, 2 and 3 are swapped! :/ */
 +                      { 3, 2 },
 +              ),
        }, {
 -              .rev = ADRENO_REV(6, 6, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06060001),
 +              .family = ADRENO_6XX_GEN4,
                .revn = 660,
 -              .name = "A660",
                .fw = {
                        [ADRENO_FW_SQE] = "a660_sqe.fw",
                        [ADRENO_FW_GMU] = "a660_gmu.bin",
                },
                .gmem = SZ_1M + SZ_512K,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
 +                      ADRENO_QUIRK_HAS_HW_APRIV,
                .init = a6xx_gpu_init,
                .zapfw = "a660_zap.mdt",
                .hwcg = a660_hwcg,
                .address_space_size = SZ_16G,
        }, {
 -              .rev = ADRENO_REV(6, 3, 5, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06030500),
 +              .family = ADRENO_6XX_GEN4,
                .fw = {
                        [ADRENO_FW_SQE] = "a660_sqe.fw",
                        [ADRENO_FW_GMU] = "a660_gmu.bin",
                },
                .gmem = SZ_512K,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
 +                      ADRENO_QUIRK_HAS_HW_APRIV,
                .init = a6xx_gpu_init,
                .hwcg = a660_hwcg,
                .address_space_size = SZ_16G,
 +              .speedbins = ADRENO_SPEEDBINS(
 +                      { 0,   0 },
 +                      { 117, 0 },
 +                      { 190, 1 },
 +              ),
        }, {
 -              .rev = ADRENO_REV(6, 8, 0, ANY_ID),
 +              .chip_ids = ADRENO_CHIP_IDS(0x06080000),
 +              .family = ADRENO_6XX_GEN2,
                .revn = 680,
 -              .name = "A680",
                .fw = {
                        [ADRENO_FW_SQE] = "a630_sqe.fw",
                        [ADRENO_FW_GMU] = "a640_gmu.bin",
                },
                .gmem = SZ_2M,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT,
                .init = a6xx_gpu_init,
                .zapfw = "a640_zap.mdt",
                .hwcg = a640_hwcg,
        }, {
 -              .rev = ADRENO_REV(6, 9, 0, ANY_ID),
 -              .revn = 690,
 -              .name = "A690",
 +              .chip_ids = ADRENO_CHIP_IDS(0x06090000),
 +              .family = ADRENO_6XX_GEN4,
                .fw = {
                        [ADRENO_FW_SQE] = "a660_sqe.fw",
 -                      [ADRENO_FW_GMU] = "a690_gmu.bin",
 +                      [ADRENO_FW_GMU] = "a660_gmu.bin",
                },
                .gmem = SZ_4M,
                .inactive_period = DRM_MSM_INACTIVE_PERIOD,
 +              .quirks = ADRENO_QUIRK_HAS_CACHED_COHERENT |
 +                      ADRENO_QUIRK_HAS_HW_APRIV,
                .init = a6xx_gpu_init,
                .zapfw = "a690_zap.mdt",
                .hwcg = a690_hwcg,
@@@ -506,31 -397,34 +506,31 @@@ MODULE_FIRMWARE("qcom/a530_zap.mdt")
  MODULE_FIRMWARE("qcom/a530_zap.b00");
  MODULE_FIRMWARE("qcom/a530_zap.b01");
  MODULE_FIRMWARE("qcom/a530_zap.b02");
 +MODULE_FIRMWARE("qcom/a540_gpmu.fw2");
  MODULE_FIRMWARE("qcom/a619_gmu.bin");
  MODULE_FIRMWARE("qcom/a630_sqe.fw");
  MODULE_FIRMWARE("qcom/a630_gmu.bin");
  MODULE_FIRMWARE("qcom/a630_zap.mbn");
 -
 -static inline bool _rev_match(uint8_t entry, uint8_t id)
 +MODULE_FIRMWARE("qcom/a640_gmu.bin");
 +MODULE_FIRMWARE("qcom/a650_gmu.bin");
 +MODULE_FIRMWARE("qcom/a650_sqe.fw");
 +MODULE_FIRMWARE("qcom/a660_gmu.bin");
 +MODULE_FIRMWARE("qcom/a660_sqe.fw");
 +MODULE_FIRMWARE("qcom/leia_pfp_470.fw");
 +MODULE_FIRMWARE("qcom/leia_pm4_470.fw");
 +MODULE_FIRMWARE("qcom/yamato_pfp.fw");
 +MODULE_FIRMWARE("qcom/yamato_pm4.fw");
 +
 +static const struct adreno_info *adreno_info(uint32_t chip_id)
  {
 -      return (entry == ANY_ID) || (entry == id);
 -}
 -
 -bool adreno_cmp_rev(struct adreno_rev rev1, struct adreno_rev rev2)
 -{
 -
 -      return _rev_match(rev1.core, rev2.core) &&
 -              _rev_match(rev1.major, rev2.major) &&
 -              _rev_match(rev1.minor, rev2.minor) &&
 -              _rev_match(rev1.patchid, rev2.patchid);
 -}
 -
 -const struct adreno_info *adreno_info(struct adreno_rev rev)
 -{
 -      int i;
 -
        /* identify gpu: */
 -      for (i = 0; i < ARRAY_SIZE(gpulist); i++) {
 +      for (int i = 0; i < ARRAY_SIZE(gpulist); i++) {
                const struct adreno_info *info = &gpulist[i];
 -              if (adreno_cmp_rev(info->rev, rev))
 -                      return info;
 +              if (info->machine && !of_machine_is_compatible(info->machine))
 +                      continue;
 +              for (int j = 0; info->chip_ids[j]; j++)
 +                      if (info->chip_ids[j] == chip_id)
 +                              return info;
        }
  
        return NULL;
@@@ -610,11 -504,12 +610,11 @@@ err_disable_rpm
        return NULL;
  }
  
 -static int find_chipid(struct device *dev, struct adreno_rev *rev)
 +static int find_chipid(struct device *dev, uint32_t *chipid)
  {
        struct device_node *node = dev->of_node;
        const char *compat;
        int ret;
 -      u32 chipid;
  
        /* first search the compat strings for qcom,adreno-XYZ.W: */
        ret = of_property_read_string_index(node, "compatible", 0, &compat);
  
                if (sscanf(compat, "qcom,adreno-%u.%u", &r, &patch) == 2 ||
                    sscanf(compat, "amd,imageon-%u.%u", &r, &patch) == 2) {
 -                      rev->core = r / 100;
 +                      uint32_t core, major, minor;
 +
 +                      core = r / 100;
                        r %= 100;
 -                      rev->major = r / 10;
 +                      major = r / 10;
                        r %= 10;
 -                      rev->minor = r;
 -                      rev->patchid = patch;
 +                      minor = r;
 +
 +                      *chipid = (core << 24) |
 +                              (major << 16) |
 +                              (minor << 8) |
 +                              patch;
  
                        return 0;
                }
 +
 +              if (sscanf(compat, "qcom,adreno-%08x", chipid) == 1)
 +                      return 0;
        }
  
        /* and if that fails, fall back to legacy "qcom,chipid" property: */
 -      ret = of_property_read_u32(node, "qcom,chipid", &chipid);
 +      ret = of_property_read_u32(node, "qcom,chipid", chipid);
        if (ret) {
                DRM_DEV_ERROR(dev, "could not parse qcom,chipid: %d\n", ret);
                return ret;
        }
  
 -      rev->core = (chipid >> 24) & 0xff;
 -      rev->major = (chipid >> 16) & 0xff;
 -      rev->minor = (chipid >> 8) & 0xff;
 -      rev->patchid = (chipid & 0xff);
 -
        dev_warn(dev, "Using legacy qcom,chipid binding!\n");
 -      dev_warn(dev, "Use compatible qcom,adreno-%u%u%u.%u instead.\n",
 -              rev->core, rev->major, rev->minor, rev->patchid);
  
        return 0;
  }
@@@ -664,27 -557,26 +664,27 @@@ static int adreno_bind(struct device *d
        struct msm_gpu *gpu;
        int ret;
  
 -      ret = find_chipid(dev, &config.rev);
 +      ret = find_chipid(dev, &config.chip_id);
        if (ret)
                return ret;
  
        dev->platform_data = &config;
        priv->gpu_pdev = to_platform_device(dev);
  
 -      info = adreno_info(config.rev);
 -
 +      info = adreno_info(config.chip_id);
        if (!info) {
 -              dev_warn(drm->dev, "Unknown GPU revision: %u.%u.%u.%u\n",
 -                      config.rev.core, config.rev.major,
 -                      config.rev.minor, config.rev.patchid);
 +              dev_warn(drm->dev, "Unknown GPU revision: %"ADRENO_CHIPID_FMT"\n",
 +                      ADRENO_CHIPID_ARGS(config.chip_id));
                return -ENXIO;
        }
  
 -      DBG("Found GPU: %u.%u.%u.%u", config.rev.core, config.rev.major,
 -              config.rev.minor, config.rev.patchid);
 +      config.info = info;
  
 -      priv->is_a2xx = config.rev.core == 2;
 +      DBG("Found GPU: %"ADRENO_CHIPID_FMT, ADRENO_CHIPID_ARGS(config.chip_id));
 +
 +      priv->is_a2xx = info->family < ADRENO_3XX;
 +      priv->has_cached_coherent =
 +              !!(info->quirks & ADRENO_QUIRK_HAS_CACHED_COHERENT);
  
        gpu = info->init(drm);
        if (IS_ERR(gpu)) {
        if (ret)
                return ret;
  
 -      if (config.rev.core >= 6)
 -              if (!adreno_has_gmu_wrapper(to_adreno_gpu(gpu)))
 -                      priv->has_cached_coherent = true;
 -
        return 0;
  }
  
@@@ -751,10 -647,9 +751,9 @@@ static int adreno_probe(struct platform
        return 0;
  }
  
- static int adreno_remove(struct platform_device *pdev)
+ static void adreno_remove(struct platform_device *pdev)
  {
        component_del(&pdev->dev, &a3xx_ops);
-       return 0;
  }
  
  static void adreno_shutdown(struct platform_device *pdev)
@@@ -869,7 -764,7 +868,7 @@@ static const struct dev_pm_ops adreno_p
  
  static struct platform_driver adreno_driver = {
        .probe = adreno_probe,
-       .remove = adreno_remove,
+       .remove_new = adreno_remove,
        .shutdown = adreno_shutdown,
        .driver = {
                .name = "adreno",
index aa6ba2cf4b840618eb6c6d67bb2f3211fd26afd0,a16ae7db6245cca23159a1e955531c8cfadc4563..82381d12414d82a27b12eda72ecce4e4924abf96
@@@ -22,7 -22,6 +22,7 @@@
  
  #include "msm_drv.h"
  #include "msm_mmu.h"
 +#include "msm_mdss.h"
  #include "msm_gem.h"
  #include "disp/msm_disp_snapshot.h"
  
@@@ -545,6 -544,8 +545,6 @@@ static int _dpu_kms_initialize_dsi(stru
  
                info.is_cmd_mode = msm_dsi_is_cmd_mode(priv->dsi[i]);
  
 -              info.dsc = msm_dsi_get_dsc_config(priv->dsi[i]);
 -
                encoder = dpu_encoder_init(dev, DRM_MODE_ENCODER_DSI, &info);
                if (IS_ERR(encoder)) {
                        DPU_ERROR("encoder init failed for dsi display\n");
@@@ -793,7 -794,7 +793,7 @@@ static int _dpu_kms_drm_obj_init(struc
                        ret = PTR_ERR(crtc);
                        return ret;
                }
 -              priv->crtcs[priv->num_crtcs++] = crtc;
 +              priv->num_crtcs++;
        }
  
        /* All CRTCs are compatible with all encoders */
@@@ -889,7 -890,6 +889,7 @@@ static void dpu_kms_mdp_snapshot(struc
        int i;
        struct dpu_kms *dpu_kms;
        const struct dpu_mdss_cfg *cat;
 +      void __iomem *base;
  
        dpu_kms = to_dpu_kms(kms);
  
        /* dump CTL sub-blocks HW regs info */
        for (i = 0; i < cat->ctl_count; i++)
                msm_disp_snapshot_add_block(disp_state, cat->ctl[i].len,
 -                              dpu_kms->mmio + cat->ctl[i].base, "ctl_%d", i);
 +                              dpu_kms->mmio + cat->ctl[i].base, cat->ctl[i].name);
  
        /* dump DSPP sub-blocks HW regs info */
 -      for (i = 0; i < cat->dspp_count; i++)
 -              msm_disp_snapshot_add_block(disp_state, cat->dspp[i].len,
 -                              dpu_kms->mmio + cat->dspp[i].base, "dspp_%d", i);
 +      for (i = 0; i < cat->dspp_count; i++) {
 +              base = dpu_kms->mmio + cat->dspp[i].base;
 +              msm_disp_snapshot_add_block(disp_state, cat->dspp[i].len, base, cat->dspp[i].name);
 +
 +              if (cat->dspp[i].sblk && cat->dspp[i].sblk->pcc.len > 0)
 +                      msm_disp_snapshot_add_block(disp_state, cat->dspp[i].sblk->pcc.len,
 +                                                  base + cat->dspp[i].sblk->pcc.base, "%s_%s",
 +                                                  cat->dspp[i].name,
 +                                                  cat->dspp[i].sblk->pcc.name);
 +      }
  
        /* dump INTF sub-blocks HW regs info */
        for (i = 0; i < cat->intf_count; i++)
                msm_disp_snapshot_add_block(disp_state, cat->intf[i].len,
 -                              dpu_kms->mmio + cat->intf[i].base, "intf_%d", i);
 +                              dpu_kms->mmio + cat->intf[i].base, cat->intf[i].name);
  
        /* dump PP sub-blocks HW regs info */
 -      for (i = 0; i < cat->pingpong_count; i++)
 -              msm_disp_snapshot_add_block(disp_state, cat->pingpong[i].len,
 -                              dpu_kms->mmio + cat->pingpong[i].base, "pingpong_%d", i);
 +      for (i = 0; i < cat->pingpong_count; i++) {
 +              base = dpu_kms->mmio + cat->pingpong[i].base;
 +              msm_disp_snapshot_add_block(disp_state, cat->pingpong[i].len, base,
 +                                          cat->pingpong[i].name);
 +
 +              /* TE2 sub-block has length of 0, so will not print it */
 +
 +              if (cat->pingpong[i].sblk && cat->pingpong[i].sblk->dither.len > 0)
 +                      msm_disp_snapshot_add_block(disp_state, cat->pingpong[i].sblk->dither.len,
 +                                                  base + cat->pingpong[i].sblk->dither.base,
 +                                                  "%s_%s", cat->pingpong[i].name,
 +                                                  cat->pingpong[i].sblk->dither.name);
 +      }
  
        /* dump SSPP sub-blocks HW regs info */
 -      for (i = 0; i < cat->sspp_count; i++)
 -              msm_disp_snapshot_add_block(disp_state, cat->sspp[i].len,
 -                              dpu_kms->mmio + cat->sspp[i].base, "sspp_%d", i);
 +      for (i = 0; i < cat->sspp_count; i++) {
 +              base = dpu_kms->mmio + cat->sspp[i].base;
 +              msm_disp_snapshot_add_block(disp_state, cat->sspp[i].len, base, cat->sspp[i].name);
 +
 +              if (cat->sspp[i].sblk && cat->sspp[i].sblk->scaler_blk.len > 0)
 +                      msm_disp_snapshot_add_block(disp_state, cat->sspp[i].sblk->scaler_blk.len,
 +                                                  base + cat->sspp[i].sblk->scaler_blk.base,
 +                                                  "%s_%s", cat->sspp[i].name,
 +                                                  cat->sspp[i].sblk->scaler_blk.name);
 +
 +              if (cat->sspp[i].sblk && cat->sspp[i].sblk->csc_blk.len > 0)
 +                      msm_disp_snapshot_add_block(disp_state, cat->sspp[i].sblk->csc_blk.len,
 +                                                  base + cat->sspp[i].sblk->csc_blk.base,
 +                                                  "%s_%s", cat->sspp[i].name,
 +                                                  cat->sspp[i].sblk->csc_blk.name);
 +      }
  
        /* dump LM sub-blocks HW regs info */
        for (i = 0; i < cat->mixer_count; i++)
                msm_disp_snapshot_add_block(disp_state, cat->mixer[i].len,
 -                              dpu_kms->mmio + cat->mixer[i].base, "lm_%d", i);
 +                              dpu_kms->mmio + cat->mixer[i].base, cat->mixer[i].name);
  
        /* dump WB sub-blocks HW regs info */
        for (i = 0; i < cat->wb_count; i++)
                msm_disp_snapshot_add_block(disp_state, cat->wb[i].len,
 -                              dpu_kms->mmio + cat->wb[i].base, "wb_%d", i);
 +                              dpu_kms->mmio + cat->wb[i].base, cat->wb[i].name);
  
        if (cat->mdp[0].features & BIT(DPU_MDP_PERIPH_0_REMOVED)) {
                msm_disp_snapshot_add_block(disp_state, MDP_PERIPH_TOP0,
        }
  
        /* dump DSC sub-blocks HW regs info */
 -      for (i = 0; i < cat->dsc_count; i++)
 -              msm_disp_snapshot_add_block(disp_state, cat->dsc[i].len,
 -                              dpu_kms->mmio + cat->dsc[i].base, "dsc_%d", i);
 +      for (i = 0; i < cat->dsc_count; i++) {
 +              base = dpu_kms->mmio + cat->dsc[i].base;
 +              msm_disp_snapshot_add_block(disp_state, cat->dsc[i].len, base, cat->dsc[i].name);
 +
 +              if (cat->dsc[i].features & BIT(DPU_DSC_HW_REV_1_2)) {
 +                      struct dpu_dsc_blk enc = cat->dsc[i].sblk->enc;
 +                      struct dpu_dsc_blk ctl = cat->dsc[i].sblk->ctl;
 +
 +                      msm_disp_snapshot_add_block(disp_state, enc.len, base + enc.base, "%s_%s",
 +                                                  cat->dsc[i].name, enc.name);
 +                      msm_disp_snapshot_add_block(disp_state, ctl.len, base + ctl.base, "%s_%s",
 +                                                  cat->dsc[i].name, ctl.name);
 +              }
 +      }
  
        pm_runtime_put_sync(&dpu_kms->pdev->dev);
  }
@@@ -1052,14 -1011,11 +1052,14 @@@ unsigned long dpu_kms_get_clk_rate(stru
        return clk_get_rate(clk);
  }
  
 +#define       DPU_PERF_DEFAULT_MAX_CORE_CLK_RATE      412500000
 +
  static int dpu_kms_hw_init(struct msm_kms *kms)
  {
        struct dpu_kms *dpu_kms;
        struct drm_device *dev;
        int i, rc = -EINVAL;
 +      unsigned long max_core_clk_rate;
        u32 core_rev;
  
        if (!kms) {
                goto power_error;
        }
  
 -      rc = dpu_rm_init(&dpu_kms->rm, dpu_kms->catalog, dpu_kms->mmio);
 +      dpu_kms->mdss = msm_mdss_get_mdss_data(dpu_kms->pdev->dev.parent);
 +      if (IS_ERR(dpu_kms->mdss)) {
 +              rc = PTR_ERR(dpu_kms->mdss);
 +              DPU_ERROR("failed to get MDSS data: %d\n", rc);
 +              goto power_error;
 +      }
 +
 +      if (!dpu_kms->mdss) {
 +              rc = -EINVAL;
 +              DPU_ERROR("NULL MDSS data\n");
 +              goto power_error;
 +      }
 +
 +      rc = dpu_rm_init(&dpu_kms->rm, dpu_kms->catalog, dpu_kms->mdss, dpu_kms->mmio);
        if (rc) {
                DPU_ERROR("rm init failed: %d\n", rc);
                goto power_error;
  
        dpu_kms->rm_init = true;
  
 -      dpu_kms->hw_mdp = dpu_hw_mdptop_init(MDP_TOP, dpu_kms->mmio,
 +      dpu_kms->hw_mdp = dpu_hw_mdptop_init(dpu_kms->catalog->mdp,
 +                                           dpu_kms->mmio,
                                             dpu_kms->catalog);
        if (IS_ERR(dpu_kms->hw_mdp)) {
                rc = PTR_ERR(dpu_kms->hw_mdp);
                dpu_kms->hw_vbif[vbif->id] = hw;
        }
  
 -      rc = dpu_core_perf_init(&dpu_kms->perf, dev, dpu_kms->catalog,
 -                      msm_clk_bulk_get_clock(dpu_kms->clocks, dpu_kms->num_clocks, "core"));
 +      /* TODO: use the same max_freq as in dpu_kms_hw_init */
 +      max_core_clk_rate = dpu_kms_get_clk_rate(dpu_kms, "core");
 +      if (!max_core_clk_rate) {
 +              DPU_DEBUG("max core clk rate not determined, using default\n");
 +              max_core_clk_rate = DPU_PERF_DEFAULT_MAX_CORE_CLK_RATE;
 +      }
 +
 +      rc = dpu_core_perf_init(&dpu_kms->perf, dpu_kms->catalog->perf, max_core_clk_rate);
        if (rc) {
                DPU_ERROR("failed to init perf %d\n", rc);
                goto perf_err;
        return 0;
  
  drm_obj_init_err:
 -      dpu_core_perf_destroy(&dpu_kms->perf);
  hw_intr_init_err:
  perf_err:
  power_error:
@@@ -1302,11 -1239,9 +1302,9 @@@ static int dpu_dev_probe(struct platfor
        return msm_drv_probe(&pdev->dev, dpu_kms_init);
  }
  
- static int dpu_dev_remove(struct platform_device *pdev)
+ static void dpu_dev_remove(struct platform_device *pdev)
  {
        component_master_del(&pdev->dev, &msm_drm_ops);
-       return 0;
  }
  
  static int __maybe_unused dpu_runtime_suspend(struct device *dev)
@@@ -1368,7 -1303,6 +1366,7 @@@ static const struct of_device_id dpu_dt
        { .compatible = "qcom,sc8180x-dpu", .data = &dpu_sc8180x_cfg, },
        { .compatible = "qcom,sc8280xp-dpu", .data = &dpu_sc8280xp_cfg, },
        { .compatible = "qcom,sm6115-dpu", .data = &dpu_sm6115_cfg, },
 +      { .compatible = "qcom,sm6125-dpu", .data = &dpu_sm6125_cfg, },
        { .compatible = "qcom,sm6350-dpu", .data = &dpu_sm6350_cfg, },
        { .compatible = "qcom,sm6375-dpu", .data = &dpu_sm6375_cfg, },
        { .compatible = "qcom,sm8150-dpu", .data = &dpu_sm8150_cfg, },
@@@ -1382,7 -1316,7 +1380,7 @@@ MODULE_DEVICE_TABLE(of, dpu_dt_match)
  
  static struct platform_driver dpu_driver = {
        .probe = dpu_dev_probe,
-       .remove = dpu_dev_remove,
+       .remove_new = dpu_dev_remove,
        .shutdown = msm_drv_shutdown,
        .driver = {
                .name = "msm_dpu",
index 700df4040e9a198dc87607f875f3a5bea44b8beb,3c4258d1784ba34eadf15b781aa9baaa51861b4e..e5012fa6771fc6b27e7d9d6e12d9b595bc3eefe9
@@@ -332,7 -332,7 +332,7 @@@ static int modeset_init(struct mdp4_km
                        goto fail;
                }
  
 -              priv->crtcs[priv->num_crtcs++] = crtc;
 +              priv->num_crtcs++;
        }
  
        /*
@@@ -417,6 -417,7 +417,6 @@@ static int mdp4_kms_init(struct drm_dev
        irq = platform_get_irq(pdev, 0);
        if (irq < 0) {
                ret = irq;
 -              DRM_DEV_ERROR(dev->dev, "failed to get irq: %d\n", ret);
                goto fail;
        }
  
@@@ -560,11 -561,9 +560,9 @@@ static int mdp4_probe(struct platform_d
        return msm_drv_probe(&pdev->dev, mdp4_kms_init);
  }
  
- static int mdp4_remove(struct platform_device *pdev)
+ static void mdp4_remove(struct platform_device *pdev)
  {
        component_master_del(&pdev->dev, &msm_drm_ops);
-       return 0;
  }
  
  static const struct of_device_id mdp4_dt_match[] = {
@@@ -575,7 -574,7 +573,7 @@@ MODULE_DEVICE_TABLE(of, mdp4_dt_match)
  
  static struct platform_driver mdp4_platform_driver = {
        .probe      = mdp4_probe,
-       .remove     = mdp4_remove,
+       .remove_new = mdp4_remove,
        .shutdown   = msm_drv_shutdown,
        .driver     = {
                .name   = "mdp4",
index 92bf9d949d0998b7400d169429f53eb32a932948,e8aebad5f20822dafc4f8b8e0eb3eb181afea9bd..8a7b44376bc68c89fb6d39b17c0b44dfd5e06599
@@@ -497,7 -497,7 +497,7 @@@ static int modeset_init(struct mdp5_km
                        DRM_DEV_ERROR(dev->dev, "failed to construct crtc %d (%d)\n", i, ret);
                        goto fail;
                }
 -              priv->crtcs[priv->num_crtcs++] = crtc;
 +              priv->num_crtcs++;
        }
  
        /*
@@@ -942,11 -942,10 +942,10 @@@ static int mdp5_dev_probe(struct platfo
        return msm_drv_probe(&pdev->dev, mdp5_kms_init);
  }
  
- static int mdp5_dev_remove(struct platform_device *pdev)
+ static void mdp5_dev_remove(struct platform_device *pdev)
  {
        DBG("");
        component_master_del(&pdev->dev, &msm_drm_ops);
-       return 0;
  }
  
  static __maybe_unused int mdp5_runtime_suspend(struct device *dev)
@@@ -987,7 -986,7 +986,7 @@@ MODULE_DEVICE_TABLE(of, mdp5_dt_match)
  
  static struct platform_driver mdp5_driver = {
        .probe = mdp5_dev_probe,
-       .remove = mdp5_dev_remove,
+       .remove_new = mdp5_dev_remove,
        .shutdown = msm_drv_shutdown,
        .driver = {
                .name = "msm_mdp",
index 4bd028fa750065f1f7d20dc95fdcbd336be0985a,551b0bc28095129f3eac15f648b059f94e61e01c..a428951ee5399e9a732b41a98558baf85076c6d3
@@@ -155,7 -155,7 +155,7 @@@ static void msm_irq_uninstall(struct dr
  
  struct msm_vblank_work {
        struct work_struct work;
 -      int crtc_id;
 +      struct drm_crtc *crtc;
        bool enable;
        struct msm_drm_private *priv;
  };
@@@ -168,15 -168,15 +168,15 @@@ static void vblank_ctrl_worker(struct w
        struct msm_kms *kms = priv->kms;
  
        if (vbl_work->enable)
 -              kms->funcs->enable_vblank(kms, priv->crtcs[vbl_work->crtc_id]);
 +              kms->funcs->enable_vblank(kms, vbl_work->crtc);
        else
 -              kms->funcs->disable_vblank(kms, priv->crtcs[vbl_work->crtc_id]);
 +              kms->funcs->disable_vblank(kms, vbl_work->crtc);
  
        kfree(vbl_work);
  }
  
  static int vblank_ctrl_queue_work(struct msm_drm_private *priv,
 -                                      int crtc_id, bool enable)
 +                                      struct drm_crtc *crtc, bool enable)
  {
        struct msm_vblank_work *vbl_work;
  
  
        INIT_WORK(&vbl_work->work, vblank_ctrl_worker);
  
 -      vbl_work->crtc_id = crtc_id;
 +      vbl_work->crtc = crtc;
        vbl_work->enable = enable;
        vbl_work->priv = priv;
  
@@@ -407,8 -407,7 +407,8 @@@ static int msm_drm_init(struct device *
        struct msm_drm_private *priv = dev_get_drvdata(dev);
        struct drm_device *ddev;
        struct msm_kms *kms;
 -      int ret, i;
 +      struct drm_crtc *crtc;
 +      int ret;
  
        if (drm_firmware_drivers_only())
                return -ENODEV;
        ddev->mode_config.funcs = &mode_config_funcs;
        ddev->mode_config.helper_private = &mode_config_helper_funcs;
  
 -      for (i = 0; i < priv->num_crtcs; i++) {
 +      drm_for_each_crtc(crtc, ddev) {
 +              struct msm_drm_thread *ev_thread;
 +
                /* initialize event thread */
 -              priv->event_thread[i].crtc_id = priv->crtcs[i]->base.id;
 -              priv->event_thread[i].dev = ddev;
 -              priv->event_thread[i].worker = kthread_create_worker(0,
 -                      "crtc_event:%d", priv->event_thread[i].crtc_id);
 -              if (IS_ERR(priv->event_thread[i].worker)) {
 -                      ret = PTR_ERR(priv->event_thread[i].worker);
 +              ev_thread = &priv->event_thread[drm_crtc_index(crtc)];
 +              ev_thread->dev = ddev;
 +              ev_thread->worker = kthread_create_worker(0, "crtc_event:%d", crtc->base.id);
 +              if (IS_ERR(ev_thread->worker)) {
 +                      ret = PTR_ERR(ev_thread->worker);
                        DRM_DEV_ERROR(dev, "failed to create crtc_event kthread\n");
 -                      priv->event_thread[i].worker = NULL;
 +                      ev_thread->worker = NULL;
                        goto err_msm_uninit;
                }
  
 -              sched_set_fifo(priv->event_thread[i].worker->task);
 +              sched_set_fifo(ev_thread->worker->task);
        }
  
        ret = drm_vblank_init(ddev, priv->num_crtcs);
@@@ -641,23 -639,25 +641,23 @@@ static void msm_postclose(struct drm_de
  int msm_crtc_enable_vblank(struct drm_crtc *crtc)
  {
        struct drm_device *dev = crtc->dev;
 -      unsigned int pipe = crtc->index;
        struct msm_drm_private *priv = dev->dev_private;
        struct msm_kms *kms = priv->kms;
        if (!kms)
                return -ENXIO;
 -      drm_dbg_vbl(dev, "crtc=%u", pipe);
 -      return vblank_ctrl_queue_work(priv, pipe, true);
 +      drm_dbg_vbl(dev, "crtc=%u", crtc->base.id);
 +      return vblank_ctrl_queue_work(priv, crtc, true);
  }
  
  void msm_crtc_disable_vblank(struct drm_crtc *crtc)
  {
        struct drm_device *dev = crtc->dev;
 -      unsigned int pipe = crtc->index;
        struct msm_drm_private *priv = dev->dev_private;
        struct msm_kms *kms = priv->kms;
        if (!kms)
                return;
 -      drm_dbg_vbl(dev, "crtc=%u", pipe);
 -      vblank_ctrl_queue_work(priv, pipe, false);
 +      drm_dbg_vbl(dev, "crtc=%u", crtc->base.id);
 +      vblank_ctrl_queue_work(priv, crtc, false);
  }
  
  /*
@@@ -1278,11 -1278,9 +1278,9 @@@ static int msm_pdev_probe(struct platfo
        return msm_drv_probe(&pdev->dev, NULL);
  }
  
- static int msm_pdev_remove(struct platform_device *pdev)
+ static void msm_pdev_remove(struct platform_device *pdev)
  {
        component_master_del(&pdev->dev, &msm_drm_ops);
-       return 0;
  }
  
  void msm_drv_shutdown(struct platform_device *pdev)
  
  static struct platform_driver msm_platform_driver = {
        .probe      = msm_pdev_probe,
-       .remove     = msm_pdev_remove,
+       .remove_new = msm_pdev_remove,
        .shutdown   = msm_drv_shutdown,
        .driver     = {
                .name   = "msm",
index 2e87dd6cb17bf5488433301b92efa5055cf25862,268fb3d490de16036bb3413d3a88a5ae2ba7e511..a429b704059ee87f2c9c571231ca1c3d6141cd9a
@@@ -15,7 -15,7 +15,7 @@@
  #include <linux/pm_runtime.h>
  #include <linux/reset.h>
  
 -#include "msm_drv.h"
 +#include "msm_mdss.h"
  #include "msm_kms.h"
  
  #define HW_REV                                0x0
  
  #define MIN_IB_BW     400000000UL /* Min ib vote 400MB */
  
 -struct msm_mdss_data {
 -      u32 ubwc_version;
 -      /* can be read from register 0x58 */
 -      u32 ubwc_dec_version;
 -      u32 ubwc_swizzle;
 -      u32 ubwc_static;
 -      u32 highest_bank_bit;
 -      u32 macrotile_mode;
 -};
 -
  struct msm_mdss {
        struct device *dev;
  
@@@ -177,6 -187,11 +177,6 @@@ static int _msm_mdss_irq_domain_add(str
        return 0;
  }
  
 -#define UBWC_1_0 0x10000000
 -#define UBWC_2_0 0x20000000
 -#define UBWC_3_0 0x30000000
 -#define UBWC_4_0 0x40000000
 -
  static void msm_mdss_setup_ubwc_dec_20(struct msm_mdss *msm_mdss)
  {
        const struct msm_mdss_data *data = msm_mdss->mdss_data;
@@@ -191,10 -206,10 +191,10 @@@ static void msm_mdss_setup_ubwc_dec_30(
                    (data->highest_bank_bit & 0x3) << 4 |
                    (data->macrotile_mode & 0x1) << 12;
  
 -      if (data->ubwc_version == UBWC_3_0)
 +      if (data->ubwc_enc_version == UBWC_3_0)
                value |= BIT(10);
  
 -      if (data->ubwc_version == UBWC_1_0)
 +      if (data->ubwc_enc_version == UBWC_1_0)
                value |= BIT(8);
  
        writel_relaxed(value, msm_mdss->mmio + UBWC_STATIC);
@@@ -210,30 -225,15 +210,30 @@@ static void msm_mdss_setup_ubwc_dec_40(
  
        writel_relaxed(value, msm_mdss->mmio + UBWC_STATIC);
  
 -      if (data->ubwc_version == UBWC_3_0) {
 +      if (data->ubwc_enc_version == UBWC_3_0) {
                writel_relaxed(1, msm_mdss->mmio + UBWC_CTRL_2);
                writel_relaxed(0, msm_mdss->mmio + UBWC_PREDICTION_MODE);
        } else {
 -              writel_relaxed(2, msm_mdss->mmio + UBWC_CTRL_2);
 +              if (data->ubwc_dec_version == UBWC_4_3)
 +                      writel_relaxed(3, msm_mdss->mmio + UBWC_CTRL_2);
 +              else
 +                      writel_relaxed(2, msm_mdss->mmio + UBWC_CTRL_2);
                writel_relaxed(1, msm_mdss->mmio + UBWC_PREDICTION_MODE);
        }
  }
  
 +const struct msm_mdss_data *msm_mdss_get_mdss_data(struct device *dev)
 +{
 +      struct msm_mdss *mdss;
 +
 +      if (!dev)
 +              return ERR_PTR(-EINVAL);
 +
 +      mdss = dev_get_drvdata(dev);
 +
 +      return mdss->mdss_data;
 +}
 +
  static int msm_mdss_enable(struct msm_mdss *msm_mdss)
  {
        int ret;
         * UBWC_n and the rest of params comes from hw data.
         */
        switch (msm_mdss->mdss_data->ubwc_dec_version) {
 +      case 0: /* no UBWC */
 +      case UBWC_1_0:
 +              /* do nothing */
 +              break;
        case UBWC_2_0:
                msm_mdss_setup_ubwc_dec_20(msm_mdss);
                break;
                msm_mdss_setup_ubwc_dec_30(msm_mdss);
                break;
        case UBWC_4_0:
 +      case UBWC_4_3:
                msm_mdss_setup_ubwc_dec_40(msm_mdss);
                break;
        default:
@@@ -497,37 -492,23 +497,35 @@@ static int mdss_probe(struct platform_d
        return 0;
  }
  
- static int mdss_remove(struct platform_device *pdev)
+ static void mdss_remove(struct platform_device *pdev)
  {
        struct msm_mdss *mdss = platform_get_drvdata(pdev);
  
        of_platform_depopulate(&pdev->dev);
  
        msm_mdss_destroy(mdss);
-       return 0;
  }
  
 +static const struct msm_mdss_data msm8998_data = {
 +      .ubwc_enc_version = UBWC_1_0,
 +      .ubwc_dec_version = UBWC_1_0,
 +      .highest_bank_bit = 1,
 +};
 +
 +static const struct msm_mdss_data qcm2290_data = {
 +      /* no UBWC */
 +      .highest_bank_bit = 0x2,
 +};
 +
  static const struct msm_mdss_data sc7180_data = {
 -      .ubwc_version = UBWC_2_0,
 +      .ubwc_enc_version = UBWC_2_0,
        .ubwc_dec_version = UBWC_2_0,
        .ubwc_static = 0x1e,
 +      .highest_bank_bit = 0x3,
  };
  
  static const struct msm_mdss_data sc7280_data = {
 -      .ubwc_version = UBWC_3_0,
 +      .ubwc_enc_version = UBWC_3_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
        .ubwc_static = 1,
  };
  
  static const struct msm_mdss_data sc8180x_data = {
 -      .ubwc_version = UBWC_3_0,
 +      .ubwc_enc_version = UBWC_3_0,
        .ubwc_dec_version = UBWC_3_0,
        .highest_bank_bit = 3,
        .macrotile_mode = 1,
  };
  
  static const struct msm_mdss_data sc8280xp_data = {
 -      .ubwc_version = UBWC_4_0,
 +      .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
        .ubwc_static = 1,
  };
  
  static const struct msm_mdss_data sdm845_data = {
 -      .ubwc_version = UBWC_2_0,
 +      .ubwc_enc_version = UBWC_2_0,
        .ubwc_dec_version = UBWC_2_0,
        .highest_bank_bit = 2,
  };
  
  static const struct msm_mdss_data sm6350_data = {
 -      .ubwc_version = UBWC_2_0,
 +      .ubwc_enc_version = UBWC_2_0,
        .ubwc_dec_version = UBWC_2_0,
        .ubwc_swizzle = 6,
        .ubwc_static = 0x1e,
  };
  
  static const struct msm_mdss_data sm8150_data = {
 -      .ubwc_version = UBWC_3_0,
 +      .ubwc_enc_version = UBWC_3_0,
        .ubwc_dec_version = UBWC_3_0,
        .highest_bank_bit = 2,
  };
  
  static const struct msm_mdss_data sm6115_data = {
 -      .ubwc_version = UBWC_1_0,
 +      .ubwc_enc_version = UBWC_1_0,
        .ubwc_dec_version = UBWC_2_0,
        .ubwc_swizzle = 7,
        .ubwc_static = 0x11f,
 +      .highest_bank_bit = 0x1,
 +};
 +
 +static const struct msm_mdss_data sm6125_data = {
 +      .ubwc_enc_version = UBWC_1_0,
 +      .ubwc_dec_version = UBWC_3_0,
 +      .ubwc_swizzle = 1,
 +      .highest_bank_bit = 1,
  };
  
  static const struct msm_mdss_data sm8250_data = {
 -      .ubwc_version = UBWC_4_0,
 +      .ubwc_enc_version = UBWC_4_0,
        .ubwc_dec_version = UBWC_4_0,
        .ubwc_swizzle = 6,
        .ubwc_static = 1,
        .macrotile_mode = 1,
  };
  
 +static const struct msm_mdss_data sm8550_data = {
 +      .ubwc_enc_version = UBWC_4_0,
 +      .ubwc_dec_version = UBWC_4_3,
 +      .ubwc_swizzle = 6,
 +      .ubwc_static = 1,
 +      /* TODO: highest_bank_bit = 2 for LP_DDR4 */
 +      .highest_bank_bit = 3,
 +      .macrotile_mode = 1,
 +};
  static const struct of_device_id mdss_dt_match[] = {
        { .compatible = "qcom,mdss" },
 -      { .compatible = "qcom,msm8998-mdss" },
 -      { .compatible = "qcom,qcm2290-mdss" },
 +      { .compatible = "qcom,msm8998-mdss", .data = &msm8998_data },
 +      { .compatible = "qcom,qcm2290-mdss", .data = &qcm2290_data },
        { .compatible = "qcom,sdm845-mdss", .data = &sdm845_data },
        { .compatible = "qcom,sc7180-mdss", .data = &sc7180_data },
        { .compatible = "qcom,sc7280-mdss", .data = &sc7280_data },
        { .compatible = "qcom,sc8180x-mdss", .data = &sc8180x_data },
        { .compatible = "qcom,sc8280xp-mdss", .data = &sc8280xp_data },
        { .compatible = "qcom,sm6115-mdss", .data = &sm6115_data },
 +      { .compatible = "qcom,sm6125-mdss", .data = &sm6125_data },
        { .compatible = "qcom,sm6350-mdss", .data = &sm6350_data },
        { .compatible = "qcom,sm6375-mdss", .data = &sm6350_data },
        { .compatible = "qcom,sm8150-mdss", .data = &sm8150_data },
        { .compatible = "qcom,sm8250-mdss", .data = &sm8250_data },
        { .compatible = "qcom,sm8350-mdss", .data = &sm8250_data },
        { .compatible = "qcom,sm8450-mdss", .data = &sm8250_data },
 -      { .compatible = "qcom,sm8550-mdss", .data = &sm8250_data },
 +      { .compatible = "qcom,sm8550-mdss", .data = &sm8550_data },
        {}
  };
  MODULE_DEVICE_TABLE(of, mdss_dt_match);
  
  static struct platform_driver mdss_platform_driver = {
        .probe      = mdss_probe,
-       .remove     = mdss_remove,
+       .remove_new = mdss_remove,
        .driver     = {
                .name   = "msm-mdss",
                .of_match_table = mdss_dt_match,
index 4e7c9c353c5112c898a565ea5d388062d9682baf,39e9ba4139c7dbeeda5733a7842afe43e2e74aeb..bba01fa0780c9c285cfd86ba8d5e5a6733c347ca
@@@ -882,21 -882,26 +882,26 @@@ struct nouveau_encoder *nv50_real_outp(
  
  static void
  nv50_msto_cleanup(struct drm_atomic_state *state,
-                 struct drm_dp_mst_topology_state *mst_state,
+                 struct drm_dp_mst_topology_state *new_mst_state,
                  struct drm_dp_mst_topology_mgr *mgr,
                  struct nv50_msto *msto)
  {
        struct nouveau_drm *drm = nouveau_drm(msto->encoder.dev);
-       struct drm_dp_mst_atomic_payload *payload =
-               drm_atomic_get_mst_payload_state(mst_state, msto->mstc->port);
+       struct drm_dp_mst_atomic_payload *new_payload =
+               drm_atomic_get_mst_payload_state(new_mst_state, msto->mstc->port);
+       struct drm_dp_mst_topology_state *old_mst_state =
+               drm_atomic_get_old_mst_topology_state(state, mgr);
+       const struct drm_dp_mst_atomic_payload *old_payload =
+               drm_atomic_get_mst_payload_state(old_mst_state, msto->mstc->port);
  
        NV_ATOMIC(drm, "%s: msto cleanup\n", msto->encoder.name);
  
        if (msto->disabled) {
                msto->mstc = NULL;
                msto->disabled = false;
+               drm_dp_remove_payload_part2(mgr, new_mst_state, old_payload, new_payload);
        } else if (msto->enabled) {
-               drm_dp_add_payload_part2(mgr, state, payload);
+               drm_dp_add_payload_part2(mgr, state, new_payload);
                msto->enabled = false;
        }
  }
@@@ -910,19 -915,15 +915,15 @@@ nv50_msto_prepare(struct drm_atomic_sta
        struct nouveau_drm *drm = nouveau_drm(msto->encoder.dev);
        struct nv50_mstc *mstc = msto->mstc;
        struct nv50_mstm *mstm = mstc->mstm;
-       struct drm_dp_mst_topology_state *old_mst_state;
-       struct drm_dp_mst_atomic_payload *payload, *old_payload;
+       struct drm_dp_mst_atomic_payload *payload;
  
        NV_ATOMIC(drm, "%s: msto prepare\n", msto->encoder.name);
  
-       old_mst_state = drm_atomic_get_old_mst_topology_state(state, mgr);
        payload = drm_atomic_get_mst_payload_state(mst_state, mstc->port);
-       old_payload = drm_atomic_get_mst_payload_state(old_mst_state, mstc->port);
  
        // TODO: Figure out if we want to do a better job of handling VCPI allocation failures here?
        if (msto->disabled) {
-               drm_dp_remove_payload(mgr, mst_state, old_payload, payload);
+               drm_dp_remove_payload_part1(mgr, mst_state, payload);
  
                nvif_outp_dp_mst_vcpi(&mstm->outp->outp, msto->head->base.index, 0, 0, 0, 0);
        } else {
@@@ -1877,8 -1878,6 +1878,8 @@@ nv50_pior_destroy(struct drm_encoder *e
        nvif_outp_dtor(&nv_encoder->outp);
  
        drm_encoder_cleanup(encoder);
 +
 +      mutex_destroy(&nv_encoder->dp.hpd_irq_lock);
        kfree(encoder);
  }
  
@@@ -1923,8 -1922,6 +1924,8 @@@ nv50_pior_create(struct drm_connector *
        nv_encoder->i2c = ddc;
        nv_encoder->aux = aux;
  
 +      mutex_init(&nv_encoder->dp.hpd_irq_lock);
 +
        encoder = to_drm_encoder(nv_encoder);
        encoder->possible_crtcs = dcbe->heads;
        encoder->possible_clones = 0;
index 95959dcc6e0e2ca454df765f7a6c13b96f5324e1,bb89e6d047bcb135c46f061348ff236388e0ab80..857bc01591db65e66a715427134d61cc6a1acacc
@@@ -995,21 -995,21 +995,21 @@@ static const struct panel_desc auo_g104
        .connector_type = DRM_MODE_CONNECTOR_LVDS,
  };
  
 -static const struct drm_display_mode auo_g121ean01_mode = {
 -      .clock = 66700,
 -      .hdisplay = 1280,
 -      .hsync_start = 1280 + 58,
 -      .hsync_end = 1280 + 58 + 8,
 -      .htotal = 1280 + 58 + 8 + 70,
 -      .vdisplay = 800,
 -      .vsync_start = 800 + 6,
 -      .vsync_end = 800 + 6 + 4,
 -      .vtotal = 800 + 6 + 4 + 10,
 +static const struct display_timing auo_g121ean01_timing = {
 +      .pixelclock = { 60000000, 74400000, 90000000 },
 +      .hactive = { 1280, 1280, 1280 },
 +      .hfront_porch = { 20, 50, 100 },
 +      .hback_porch = { 20, 50, 100 },
 +      .hsync_len = { 30, 100, 200 },
 +      .vactive = { 800, 800, 800 },
 +      .vfront_porch = { 2, 10, 25 },
 +      .vback_porch = { 2, 10, 25 },
 +      .vsync_len = { 4, 18, 50 },
  };
  
  static const struct panel_desc auo_g121ean01 = {
 -      .modes = &auo_g121ean01_mode,
 -      .num_modes = 1,
 +      .timings = &auo_g121ean01_timing,
 +      .num_timings = 1,
        .bpc = 8,
        .size = {
                .width = 261,
@@@ -2377,7 -2377,7 +2377,7 @@@ static const struct panel_desc innolux_
  };
  
  static const struct display_timing innolux_g156hce_l01_timings = {
 -      .pixelclock = { 120000000, 144000000, 150000000 },
 +      .pixelclock = { 120000000, 141860000, 150000000 },
        .hactive = { 1920, 1920, 1920 },
        .hfront_porch = { 80, 90, 100 },
        .hback_porch = { 80, 90, 100 },
@@@ -2793,6 -2793,32 +2793,32 @@@ static const struct panel_desc mitsubis
        .bus_flags = DRM_BUS_FLAG_DE_HIGH,
  };
  
+ static const struct drm_display_mode mitsubishi_aa084xe01_mode = {
+       .clock = 56234,
+       .hdisplay = 1024,
+       .hsync_start = 1024 + 24,
+       .hsync_end = 1024 + 24 + 63,
+       .htotal = 1024 + 24 + 63 + 1,
+       .vdisplay = 768,
+       .vsync_start = 768 + 3,
+       .vsync_end = 768 + 3 + 6,
+       .vtotal = 768 + 3 + 6 + 1,
+       .flags = DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC,
+ };
+ static const struct panel_desc mitsubishi_aa084xe01 = {
+       .modes = &mitsubishi_aa084xe01_mode,
+       .num_modes = 1,
+       .bpc = 8,
+       .size = {
+               .width = 1024,
+               .height = 768,
+       },
+       .bus_format = MEDIA_BUS_FMT_RGB565_1X16,
+       .connector_type = DRM_MODE_CONNECTOR_DPI,
+       .bus_flags = DRM_BUS_FLAG_DE_HIGH | DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE,
+ };
  static const struct display_timing multi_inno_mi0700s4t_6_timing = {
        .pixelclock = { 29000000, 33000000, 38000000 },
        .hactive = { 800, 800, 800 },
@@@ -4321,6 -4347,9 +4347,9 @@@ static const struct of_device_id platfo
        }, {
                .compatible = "mitsubishi,aa070mc01-ca1",
                .data = &mitsubishi_aa070mc01,
+       }, {
+               .compatible = "mitsubishi,aa084xe01",
+               .data = &mitsubishi_aa084xe01,
        }, {
                .compatible = "multi-inno,mi0700s4t-6",
                .data = &multi_inno_mi0700s4t_6,
index 14320bc73e5bfcab07a8d1fce6d1c34b22029cc7,4872aecda066f8d403c87151080eb282bbd8dda7..e1ea50c8fd395432f58ee12929a6572df3fb4496
@@@ -765,11 -765,6 +765,6 @@@ out
        }
  }
  
- static void vop_plane_destroy(struct drm_plane *plane)
- {
-       drm_plane_cleanup(plane);
- }
  static inline bool rockchip_afbc(u64 modifier)
  {
        return modifier == ROCKCHIP_AFBC_MOD;
@@@ -832,12 -827,12 +827,12 @@@ static int vop_plane_atomic_check(struc
         * need align with 2 pixel.
         */
        if (fb->format->is_yuv && ((new_plane_state->src.x1 >> 16) % 2)) {
 -              DRM_ERROR("Invalid Source: Yuv format not support odd xpos\n");
 +              DRM_DEBUG_KMS("Invalid Source: Yuv format not support odd xpos\n");
                return -EINVAL;
        }
  
        if (fb->format->is_yuv && new_plane_state->rotation & DRM_MODE_REFLECT_Y) {
 -              DRM_ERROR("Invalid Source: Yuv format does not support this rotation\n");
 +              DRM_DEBUG_KMS("Invalid Source: Yuv format does not support this rotation\n");
                return -EINVAL;
        }
  
                struct vop *vop = to_vop(crtc);
  
                if (!vop->data->afbc) {
 -                      DRM_ERROR("vop does not support AFBC\n");
 +                      DRM_DEBUG_KMS("vop does not support AFBC\n");
                        return -EINVAL;
                }
  
                        return ret;
  
                if (new_plane_state->src.x1 || new_plane_state->src.y1) {
 -                      DRM_ERROR("AFBC does not support offset display, xpos=%d, ypos=%d, offset=%d\n",
 -                                new_plane_state->src.x1,
 -                                new_plane_state->src.y1, fb->offsets[0]);
 +                      DRM_DEBUG_KMS("AFBC does not support offset display, " \
 +                                    "xpos=%d, ypos=%d, offset=%d\n",
 +                                    new_plane_state->src.x1, new_plane_state->src.y1,
 +                                    fb->offsets[0]);
                        return -EINVAL;
                }
  
                if (new_plane_state->rotation && new_plane_state->rotation != DRM_MODE_ROTATE_0) {
 -                      DRM_ERROR("No rotation support in AFBC, rotation=%d\n",
 -                                new_plane_state->rotation);
 +                      DRM_DEBUG_KMS("No rotation support in AFBC, rotation=%d\n",
 +                                    new_plane_state->rotation);
                        return -EINVAL;
                }
        }
@@@ -1131,7 -1125,7 +1126,7 @@@ static const struct drm_plane_helper_fu
  static const struct drm_plane_funcs vop_plane_funcs = {
        .update_plane   = drm_atomic_helper_update_plane,
        .disable_plane  = drm_atomic_helper_disable_plane,
-       .destroy = vop_plane_destroy,
+       .destroy = drm_plane_cleanup,
        .reset = drm_atomic_helper_plane_reset,
        .atomic_duplicate_state = drm_atomic_helper_plane_duplicate_state,
        .atomic_destroy_state = drm_atomic_helper_plane_destroy_state,
@@@ -1602,11 -1596,6 +1597,6 @@@ static const struct drm_crtc_helper_fun
        .atomic_disable = vop_crtc_atomic_disable,
  };
  
- static void vop_crtc_destroy(struct drm_crtc *crtc)
- {
-       drm_crtc_cleanup(crtc);
- }
  static struct drm_crtc_state *vop_crtc_duplicate_state(struct drm_crtc *crtc)
  {
        struct rockchip_crtc_state *rockchip_state;
        if (WARN_ON(!crtc->state))
                return NULL;
  
-       rockchip_state = kzalloc(sizeof(*rockchip_state), GFP_KERNEL);
+       rockchip_state = kmemdup(to_rockchip_crtc_state(crtc->state),
+                                sizeof(*rockchip_state), GFP_KERNEL);
        if (!rockchip_state)
                return NULL;
  
@@@ -1639,7 -1629,10 +1630,10 @@@ static void vop_crtc_reset(struct drm_c
        if (crtc->state)
                vop_crtc_destroy_state(crtc, crtc->state);
  
-       __drm_atomic_helper_crtc_reset(crtc, &crtc_state->base);
+       if (crtc_state)
+               __drm_atomic_helper_crtc_reset(crtc, &crtc_state->base);
+       else
+               __drm_atomic_helper_crtc_reset(crtc, NULL);
  }
  
  #ifdef CONFIG_DRM_ANALOGIX_DP
@@@ -1710,7 -1703,7 +1704,7 @@@ vop_crtc_verify_crc_source(struct drm_c
  static const struct drm_crtc_funcs vop_crtc_funcs = {
        .set_config = drm_atomic_helper_set_config,
        .page_flip = drm_atomic_helper_page_flip,
-       .destroy = vop_crtc_destroy,
+       .destroy = drm_crtc_cleanup,
        .reset = vop_crtc_reset,
        .atomic_duplicate_state = vop_crtc_duplicate_state,
        .atomic_destroy_state = vop_crtc_destroy_state,
@@@ -1961,7 -1954,7 +1955,7 @@@ static void vop_destroy_crtc(struct vo
         */
        list_for_each_entry_safe(plane, tmp, &drm_dev->mode_config.plane_list,
                                 head)
-               vop_plane_destroy(plane);
+               drm_plane_cleanup(plane);
  
        /*
         * Destroy CRTC after vop_plane_destroy() since vop_disable_plane()
diff --combined drivers/hid/Kconfig
index 0cea301cc9a902a18e11301a6a0b3450d44a30f2,dbf632bb7e26a55846627d94987c7a803efc8e12..fbcc4b45cff548ac2c4c0ef3ae91f7ebbb9309e6
@@@ -412,13 -412,6 +412,13 @@@ config HID_GOOGLE_HAMME
        help
        Say Y here if you have a Google Hammer device.
  
 +config HID_GOOGLE_STADIA_FF
 +      tristate "Google Stadia force feedback"
 +      select INPUT_FF_MEMLESS
 +      help
 +      Say Y here if you want to enable force feedback support for the Google
 +      Stadia controller.
 +
  config HID_VIVALDI
        tristate "Vivaldi Keyboard"
        select HID_VIVALDI_COMMON
@@@ -878,11 -871,7 +878,7 @@@ config HID_PICOLCD_F
        default !EXPERT
        depends on HID_PICOLCD
        depends on HID_PICOLCD=FB || FB=y
-       select FB_DEFERRED_IO
-       select FB_SYS_FILLRECT
-       select FB_SYS_COPYAREA
-       select FB_SYS_IMAGEBLIT
-       select FB_SYS_FOPS
+       select FB_SYSMEM_HELPERS_DEFERRED
        help
          Provide access to PicoLCD's 256x64 monochrome display via a
          framebuffer device.
@@@ -1044,7 -1033,7 +1040,7 @@@ config HID_SON
          * Guitar Hero PS3 and PC guitar dongles
  
  config SONY_FF
-       bool "Sony PS2/3/4 accessories force feedback support" 
+       bool "Sony PS2/3/4 accessories force feedback support"
        depends on HID_SONY
        select INPUT_FF_MEMLESS
        help
@@@ -1073,11 -1062,9 +1069,11 @@@ config STEAM_F
        Deck.
  
  config HID_STEELSERIES
 -      tristate "Steelseries SRW-S1 steering wheel support"
 +      tristate "Steelseries devices support"
 +      depends on USB_HID
        help
 -      Support for Steelseries SRW-S1 steering wheel
 +      Support for Steelseries SRW-S1 steering wheel, and the Steelseries
 +      Arctis 1 Wireless for XBox headset.
  
  config HID_SUNPLUS
        tristate "Sunplus wireless desktop"
index eac0ba39581e3c5bfc7d6d345aee31a17a7e6730,4455bfd57f0ecf366ed369dfd21891617b65fbad..e2a8d9bc0679c51eba5a18160dbae29c9c97d382
@@@ -518,21 -518,23 +518,23 @@@ config FB_SBU
        help
          Say Y if you want support for SBUS or UPA based frame buffer device.
  
+ config FB_SBUS_HELPERS
+       bool
+       select FB_CFB_COPYAREA
+       select FB_CFB_FILLRECT
+       select FB_CFB_IMAGEBLIT
  config FB_BW2
        bool "BWtwo support"
        depends on (FB = y) && (SPARC && FB_SBUS)
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
+       select FB_SBUS_HELPERS
        help
          This is the frame buffer device driver for the BWtwo frame buffer.
  
  config FB_CG3
        bool "CGthree support"
        depends on (FB = y) && (SPARC && FB_SBUS)
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
+       select FB_SBUS_HELPERS
        help
          This is the frame buffer device driver for the CGthree frame buffer.
  
@@@ -557,9 -559,7 +559,7 @@@ config FB_FF
  config FB_TCX
        bool "TCX (SS4/SS5 only) support"
        depends on FB_SBUS
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
+       select FB_SBUS_HELPERS
        help
          This is the frame buffer device driver for the TCX 24/8bit frame
          buffer.
  config FB_CG14
        bool "CGfourteen (SX) support"
        depends on FB_SBUS
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
+       select FB_SBUS_HELPERS
        help
          This is the frame buffer device driver for the CGfourteen frame
          buffer on Desktop SPARCsystems with the SX graphics option.
  config FB_P9100
        bool "P9100 (Sparcbook 3 only) support"
        depends on FB_SBUS
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
+       select FB_SBUS_HELPERS
        help
          This is the frame buffer device driver for the P9100 card
          supported on Sparcbook 3 machines.
  config FB_LEO
        bool "Leo (ZX) support"
        depends on FB_SBUS
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
+       select FB_SBUS_HELPERS
        help
          This is the frame buffer device driver for the SBUS-based Sun ZX
          (leo) frame buffer cards.
@@@ -1887,6 -1881,17 +1881,6 @@@ config FB_PRE_INIT_F
          Select this option if display contents should be inherited as set by
          the bootloader.
  
 -config FB_MX3
 -      tristate "MX3 Framebuffer support"
 -      depends on FB && MX3_IPU
 -      select BACKLIGHT_CLASS_DEVICE
 -      select FB_IOMEM_HELPERS
 -      default y
 -      help
 -        This is a framebuffer device for the i.MX31 LCD Controller. So
 -        far only synchronous displays are supported. If you plan to use
 -        an LCD display with your i.MX31 system, say Y here.
 -
  config FB_BROADSHEET
        tristate "E-Ink Broadsheet/Epson S1D13521 controller support"
        depends on FB && (ARCH_PXA || COMPILE_TEST)
  config FB_HYPERV
        tristate "Microsoft Hyper-V Synthetic Video support"
        depends on FB && HYPERV
-       select FB_CFB_FILLRECT
-       select FB_CFB_COPYAREA
-       select FB_CFB_IMAGEBLIT
-       select FB_DEFERRED_IO
        select DMA_CMA if HAVE_DMA_CONTIGUOUS && CMA
+       select FB_IOMEM_HELPERS_DEFERRED
        select VIDEO_NOMODESET
        help
          This framebuffer driver supports Microsoft Hyper-V Synthetic Video.
index 70569f7027ed7b2110c51b1d01f21858a51ee3ce,b864ed308e74a773e8ad5d341dffe8658ff7f455..8e15220152bd091f38b0881338ebe4714ddfa880
@@@ -8,6 -8,7 +8,7 @@@
  obj-y                         += core/
  
  obj-$(CONFIG_FB_MACMODES)      += macmodes.o
+ obj-$(CONFIG_FB_SBUS)          += sbuslib.o
  obj-$(CONFIG_FB_WMT_GE_ROPS)   += wmt_ge_rops.o
  
  # Hardware specific drivers go first
@@@ -45,14 -46,14 +46,14 @@@ obj-$(CONFIG_FB_LE80578)          += ve
  obj-$(CONFIG_FB_S3)               += s3fb.o
  obj-$(CONFIG_FB_ARK)              += arkfb.o
  obj-$(CONFIG_FB_STI)              += stifb.o
- obj-$(CONFIG_FB_FFB)              += ffb.o sbuslib.o
- obj-$(CONFIG_FB_CG6)              += cg6.o sbuslib.o
- obj-$(CONFIG_FB_CG3)              += cg3.o sbuslib.o
- obj-$(CONFIG_FB_BW2)              += bw2.o sbuslib.o
- obj-$(CONFIG_FB_CG14)             += cg14.o sbuslib.o
- obj-$(CONFIG_FB_P9100)            += p9100.o sbuslib.o
- obj-$(CONFIG_FB_TCX)              += tcx.o sbuslib.o
- obj-$(CONFIG_FB_LEO)              += leo.o sbuslib.o
+ obj-$(CONFIG_FB_FFB)              += ffb.o
+ obj-$(CONFIG_FB_CG6)              += cg6.o
+ obj-$(CONFIG_FB_CG3)              += cg3.o
+ obj-$(CONFIG_FB_BW2)              += bw2.o
+ obj-$(CONFIG_FB_CG14)             += cg14.o
+ obj-$(CONFIG_FB_P9100)            += p9100.o
+ obj-$(CONFIG_FB_TCX)              += tcx.o
+ obj-$(CONFIG_FB_LEO)              += leo.o
  obj-$(CONFIG_FB_ACORN)            += acornfb.o
  obj-$(CONFIG_FB_ATARI)            += atafb.o c2p_iplan2.o atafb_mfb.o \
                                       atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o
@@@ -122,6 -123,7 +123,6 @@@ obj-$(CONFIG_FB_VESA)             += ve
  obj-$(CONFIG_FB_EFI)              += efifb.o
  obj-$(CONFIG_FB_VGA16)            += vga16fb.o
  obj-$(CONFIG_FB_OF)               += offb.o
 -obj-$(CONFIG_FB_MX3)            += mx3fb.o
  obj-$(CONFIG_FB_DA8XX)                  += da8xx-fb.o
  obj-$(CONFIG_FB_SSD1307)        += ssd1307fb.o
  obj-$(CONFIG_FB_SIMPLE)           += simplefb.o
index de34f1f333e2bb3063d87e3ad3155c2338aafff6,95ee91fece1291c3f2b443d5419e0d9669f1f312..eaab51be74f83ac4975fbf9f46b0ae280562a50f
@@@ -17,8 -17,7 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -31,8 -30,8 +31,8 @@@
  
  static int bw2_blank(int, struct fb_info *);
  
- static int bw2_mmap(struct fb_info *, struct vm_area_struct *);
- static int bw2_ioctl(struct fb_info *, unsigned int, unsigned long);
+ static int bw2_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int bw2_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  
  /*
   *  Frame buffer operations
  
  static const struct fb_ops bw2_ops = {
        .owner                  = THIS_MODULE,
+       FB_DEFAULT_SBUS_OPS(bw2),
        .fb_blank               = bw2_blank,
-       .fb_fillrect            = cfb_fillrect,
-       .fb_copyarea            = cfb_copyarea,
-       .fb_imageblit           = cfb_imageblit,
-       .fb_mmap                = bw2_mmap,
-       .fb_ioctl               = bw2_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
  };
  
  /* OBio addresses for the bwtwo registers */
@@@ -161,7 -153,7 +154,7 @@@ static struct sbus_mmap_map bw2_mmap_ma
        { .size = 0 }
  };
  
- static int bw2_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int bw2_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct bw2_par *par = (struct bw2_par *)info->par;
  
                                  vma);
  }
  
- static int bw2_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
+ static int bw2_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        return sbusfb_ioctl_helper(cmd, arg, info,
                                   FBTYPE_SUN2BW, 1, info->fix.smem_len);
index c0336c051c2490099bc4fc993715b8e0a28e21a8,06bdafbeed93f44c69c1cb94aebd4c352efaa5ad..c161b2af8933081b3dbbc2c5fc3e48a552015c2f
@@@ -17,8 -17,7 +17,8 @@@
  #include <linux/fb.h>
  #include <linux/mm.h>
  #include <linux/uaccess.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
  
  static int cg14_setcolreg(unsigned, unsigned, unsigned, unsigned,
                         unsigned, struct fb_info *);
- static int cg14_mmap(struct fb_info *, struct vm_area_struct *);
- static int cg14_ioctl(struct fb_info *, unsigned int, unsigned long);
  static int cg14_pan_display(struct fb_var_screeninfo *, struct fb_info *);
  
+ static int cg14_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int cg14_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  /*
   *  Frame buffer operations
   */
  
  static const struct fb_ops cg14_ops = {
        .owner                  = THIS_MODULE,
+       FB_DEFAULT_SBUS_OPS(cg14),
        .fb_setcolreg           = cg14_setcolreg,
        .fb_pan_display         = cg14_pan_display,
-       .fb_fillrect            = cfb_fillrect,
-       .fb_copyarea            = cfb_copyarea,
-       .fb_imageblit           = cfb_imageblit,
-       .fb_mmap                = cg14_mmap,
-       .fb_ioctl               = cg14_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
  };
  
  #define CG14_MCR_INTENABLE_SHIFT      7
@@@ -265,7 -257,7 +258,7 @@@ static int cg14_setcolreg(unsigned regn
        return 0;
  }
  
- static int cg14_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int cg14_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct cg14_par *par = (struct cg14_par *) info->par;
  
                                  par->iospace, vma);
  }
  
- static int cg14_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
+ static int cg14_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        struct cg14_par *par = (struct cg14_par *) info->par;
        struct cg14_regs __iomem *regs = par->regs;
index 0a897d5be3349675ff9257c55bac7a24e2d05b50,b30701e25e26df2e0397803c014151f90a30920b..5e1f1b9a81b636e2b4666e1b7cb05f3b2bf94a96
@@@ -17,8 -17,7 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -33,8 -32,8 +33,8 @@@ static int cg3_setcolreg(unsigned, unsi
                         unsigned, struct fb_info *);
  static int cg3_blank(int, struct fb_info *);
  
- static int cg3_mmap(struct fb_info *, struct vm_area_struct *);
- static int cg3_ioctl(struct fb_info *, unsigned int, unsigned long);
+ static int cg3_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int cg3_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  
  /*
   *  Frame buffer operations
  
  static const struct fb_ops cg3_ops = {
        .owner                  = THIS_MODULE,
+       FB_DEFAULT_SBUS_OPS(cg3),
        .fb_setcolreg           = cg3_setcolreg,
        .fb_blank               = cg3_blank,
-       .fb_fillrect            = cfb_fillrect,
-       .fb_copyarea            = cfb_copyarea,
-       .fb_imageblit           = cfb_imageblit,
-       .fb_mmap                = cg3_mmap,
-       .fb_ioctl               = cg3_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
  };
  
  
@@@ -225,7 -217,7 +218,7 @@@ static struct sbus_mmap_map cg3_mmap_ma
        { .size = 0 }
  };
  
- static int cg3_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int cg3_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct cg3_par *par = (struct cg3_par *)info->par;
  
                                  vma);
  }
  
- static int cg3_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
+ static int cg3_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        return sbusfb_ioctl_helper(cmd, arg, info,
                                   FBTYPE_SUN3COLOR, 8, info->fix.smem_len);
index 8ef6ac9132f3d134591c49fd0a3f6b801a8da360,894907045789d120d2fa5b2bc35e975468d350e9..69d3ce50948de341ff1828a7ea981cf34562fa2e
@@@ -17,8 -17,7 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -37,16 -36,18 +37,18 @@@ static void cg6_imageblit(struct fb_inf
  static void cg6_fillrect(struct fb_info *, const struct fb_fillrect *);
  static void cg6_copyarea(struct fb_info *info, const struct fb_copyarea *area);
  static int cg6_sync(struct fb_info *);
- static int cg6_mmap(struct fb_info *, struct vm_area_struct *);
- static int cg6_ioctl(struct fb_info *, unsigned int, unsigned long);
  static int cg6_pan_display(struct fb_var_screeninfo *, struct fb_info *);
  
+ static int cg6_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int cg6_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  /*
   *  Frame buffer operations
   */
  
  static const struct fb_ops cg6_ops = {
        .owner                  = THIS_MODULE,
+       __FB_DEFAULT_SBUS_OPS_RDWR(cg6),
        .fb_setcolreg           = cg6_setcolreg,
        .fb_blank               = cg6_blank,
        .fb_pan_display         = cg6_pan_display,
        .fb_copyarea            = cg6_copyarea,
        .fb_imageblit           = cg6_imageblit,
        .fb_sync                = cg6_sync,
-       .fb_mmap                = cg6_mmap,
-       .fb_ioctl               = cg6_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
+       __FB_DEFAULT_SBUS_OPS_IOCTL(cg6),
+       __FB_DEFAULT_SBUS_OPS_MMAP(cg6),
  };
  
  /* Offset of interesting structures in the OBIO space */
@@@ -590,7 -588,7 +589,7 @@@ static struct sbus_mmap_map cg6_mmap_ma
        { .size = 0 }
  };
  
- static int cg6_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int cg6_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct cg6_par *par = (struct cg6_par *)info->par;
  
                                  par->which_io, vma);
  }
  
- static int cg6_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
+ static int cg6_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        return sbusfb_ioctl_helper(cmd, arg, info,
                                   FBTYPE_SUNFAST_COLOR, 8, info->fix.smem_len);
index e3a9bb7e9dea4458c887922aa0cdc1b0405266b1,a3ce774f87bd98a2de7fc5e99f55a14afd37b965..2a0f5337e091ef036ab39d317e57ab5831a7b636
@@@ -16,8 -16,7 +16,8 @@@
  #include <linux/fb.h>
  #include <linux/mm.h>
  #include <linux/timer.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/upa.h>
@@@ -37,16 -36,18 +37,18 @@@ static void ffb_imageblit(struct fb_inf
  static void ffb_fillrect(struct fb_info *, const struct fb_fillrect *);
  static void ffb_copyarea(struct fb_info *, const struct fb_copyarea *);
  static int ffb_sync(struct fb_info *);
- static int ffb_mmap(struct fb_info *, struct vm_area_struct *);
- static int ffb_ioctl(struct fb_info *, unsigned int, unsigned long);
  static int ffb_pan_display(struct fb_var_screeninfo *, struct fb_info *);
  
+ static int ffb_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int ffb_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  /*
   *  Frame buffer operations
   */
  
  static const struct fb_ops ffb_ops = {
        .owner                  = THIS_MODULE,
+       __FB_DEFAULT_SBUS_OPS_RDWR(ffb),
        .fb_setcolreg           = ffb_setcolreg,
        .fb_blank               = ffb_blank,
        .fb_pan_display         = ffb_pan_display,
        .fb_copyarea            = ffb_copyarea,
        .fb_imageblit           = ffb_imageblit,
        .fb_sync                = ffb_sync,
-       .fb_mmap                = ffb_mmap,
-       .fb_ioctl               = ffb_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
+       __FB_DEFAULT_SBUS_OPS_IOCTL(ffb),
+       __FB_DEFAULT_SBUS_OPS_MMAP(ffb),
  };
  
  /* Register layout and definitions */
@@@ -850,7 -848,7 +849,7 @@@ static struct sbus_mmap_map ffb_mmap_ma
        { .size = 0 }
  };
  
- static int ffb_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int ffb_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct ffb_par *par = (struct ffb_par *)info->par;
  
                                  0, vma);
  }
  
- static int ffb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
+ static int ffb_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        struct ffb_par *par = (struct ffb_par *)info->par;
  
index 2f725cd7633ad3b7b1dc16b2e45aefdefbe399c7,a50178bcb2d1a91e7a0b2645d9bea5ecc7db3a12..7cf525c76079b63b12c9eba0e8604448b81caf2b
@@@ -16,9 -16,8 +16,9 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
 -#include <linux/of_device.h>
  #include <linux/io.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/fbio.h>
  
  static int leo_setcolreg(unsigned, unsigned, unsigned, unsigned,
                         unsigned, struct fb_info *);
  static int leo_blank(int, struct fb_info *);
- static int leo_mmap(struct fb_info *, struct vm_area_struct *);
- static int leo_ioctl(struct fb_info *, unsigned int, unsigned long);
  static int leo_pan_display(struct fb_var_screeninfo *, struct fb_info *);
  
+ static int leo_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int leo_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  /*
   *  Frame buffer operations
   */
  
  static const struct fb_ops leo_ops = {
        .owner                  = THIS_MODULE,
+       FB_DEFAULT_SBUS_OPS(leo),
        .fb_setcolreg           = leo_setcolreg,
        .fb_blank               = leo_blank,
        .fb_pan_display         = leo_pan_display,
-       .fb_fillrect            = cfb_fillrect,
-       .fb_copyarea            = cfb_copyarea,
-       .fb_imageblit           = cfb_imageblit,
-       .fb_mmap                = leo_mmap,
-       .fb_ioctl               = leo_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
  };
  
  #define LEO_OFF_LC_SS0_KRN    0x00200000UL
@@@ -414,7 -406,7 +407,7 @@@ static struct sbus_mmap_map leo_mmap_ma
        { .size = 0 }
  };
  
- static int leo_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int leo_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct leo_par *par = (struct leo_par *)info->par;
  
                                  par->which_io, vma);
  }
  
- static int leo_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
+ static int leo_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        return sbusfb_ioctl_helper(cmd, arg, info,
                                   FBTYPE_SUNLEO, 32, info->fix.smem_len);
index ca06886d957815bff82c3f743064f63fa6ec446e,c2da811a906b8a58e30efd84319fb953d1c9b1ae..e1356f8a866ea25cb9ff545fe135c3cce196fb80
@@@ -15,8 -15,7 +15,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
@@@ -31,8 -30,8 +31,8 @@@ static int p9100_setcolreg(unsigned, un
                           unsigned, struct fb_info *);
  static int p9100_blank(int, struct fb_info *);
  
- static int p9100_mmap(struct fb_info *, struct vm_area_struct *);
- static int p9100_ioctl(struct fb_info *, unsigned int, unsigned long);
+ static int p9100_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int p9100_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  
  /*
   *  Frame buffer operations
  
  static const struct fb_ops p9100_ops = {
        .owner                  = THIS_MODULE,
+       FB_DEFAULT_SBUS_OPS(p9100),
        .fb_setcolreg           = p9100_setcolreg,
        .fb_blank               = p9100_blank,
-       .fb_fillrect            = cfb_fillrect,
-       .fb_copyarea            = cfb_copyarea,
-       .fb_imageblit           = cfb_imageblit,
-       .fb_mmap                = p9100_mmap,
-       .fb_ioctl               = p9100_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
  };
  
  /* P9100 control registers */
@@@ -218,7 -210,7 +211,7 @@@ static struct sbus_mmap_map p9100_mmap_
        { 0,                    0,              0                   }
  };
  
- static int p9100_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int p9100_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct p9100_par *par = (struct p9100_par *)info->par;
  
                                  par->which_io, vma);
  }
  
- static int p9100_ioctl(struct fb_info *info, unsigned int cmd,
-                      unsigned long arg)
+ static int p9100_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        /* Make it look like a cg3. */
        return sbusfb_ioctl_helper(cmd, arg, info,
index 7fb8179a8f41578d6b27094762162221f2c0f506,a0abcd248db6f58fbf4d94d565129ae03b99b87b..fe7b7bc77eda39db4436c54f255c4d6b053c6a91
@@@ -17,8 -17,7 +17,8 @@@
  #include <linux/init.h>
  #include <linux/fb.h>
  #include <linux/mm.h>
 -#include <linux/of_device.h>
 +#include <linux/of.h>
 +#include <linux/platform_device.h>
  
  #include <asm/io.h>
  #include <asm/fbio.h>
  static int tcx_setcolreg(unsigned, unsigned, unsigned, unsigned,
                         unsigned, struct fb_info *);
  static int tcx_blank(int, struct fb_info *);
- static int tcx_mmap(struct fb_info *, struct vm_area_struct *);
- static int tcx_ioctl(struct fb_info *, unsigned int, unsigned long);
  static int tcx_pan_display(struct fb_var_screeninfo *, struct fb_info *);
  
+ static int tcx_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma);
+ static int tcx_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
  /*
   *  Frame buffer operations
   */
  
  static const struct fb_ops tcx_ops = {
        .owner                  = THIS_MODULE,
+       FB_DEFAULT_SBUS_OPS(tcx),
        .fb_setcolreg           = tcx_setcolreg,
        .fb_blank               = tcx_blank,
        .fb_pan_display         = tcx_pan_display,
-       .fb_fillrect            = cfb_fillrect,
-       .fb_copyarea            = cfb_copyarea,
-       .fb_imageblit           = cfb_imageblit,
-       .fb_mmap                = tcx_mmap,
-       .fb_ioctl               = tcx_ioctl,
- #ifdef CONFIG_COMPAT
-       .fb_compat_ioctl        = sbusfb_compat_ioctl,
- #endif
  };
  
  /* THC definitions */
@@@ -299,7 -291,7 +292,7 @@@ static struct sbus_mmap_map __tcx_mmap_
        { .size = 0 }
  };
  
- static int tcx_mmap(struct fb_info *info, struct vm_area_struct *vma)
+ static int tcx_sbusfb_mmap(struct fb_info *info, struct vm_area_struct *vma)
  {
        struct tcx_par *par = (struct tcx_par *)info->par;
  
                                  par->which_io, vma);
  }
  
- static int tcx_ioctl(struct fb_info *info, unsigned int cmd,
-                    unsigned long arg)
+ static int tcx_sbusfb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
  {
        struct tcx_par *par = (struct tcx_par *) info->par;
  
This page took 0.340323 seconds and 4 git commands to generate.