Merge tag 'amd-drm-next-5.14-2021-05-19' of https://gitlab.freedesktop.org/agd5f...
authorDave Airlie <airlied@redhat.com>
Fri, 21 May 2021 05:29:34 +0000 (15:29 +1000)
committerDave Airlie <airlied@redhat.com>
Fri, 21 May 2021 05:29:40 +0000 (15:29 +1000)
amd-drm-next-5.14-2021-05-19:

amdgpu:
- Aldebaran updates
- More LTTPR display work
- Vangogh updates
- SDMA 5.x GCR fixes
- RAS fixes
- PCIe ASPM support
- Modifier fixes
- Enable TMZ on Renoir
- Buffer object code cleanup
- Display overlay fixes
- Initial support for multiple eDP panels
- Initial SR-IOV support for Aldebaran
- DP link training refactor
- Misc code cleanups and bug fixes
- SMU regression fixes for variable sized arrays
- MAINTAINERS fixes for amdgpu

amdkfd:
- Initial SR-IOV support for Aldebaran
- Topology fixes
- Initial HMM SVM support
- Misc code cleanups and bug fixes

radeon:
- Misc code cleanups and bug fixes
- SMU regression fixes for variable sized arrays
- Flickering fix for Oland with multiple 4K displays

UAPI:
- amdgpu: Drop AMDGPU_GEM_CREATE_SHADOW flag.
  This was always a kernel internal flag and userspace use of it has always been blocked.
  It's no longer needed so remove it.
- amdkgd: HMM SVM support
  Overview: https://patchwork.freedesktop.org/series/85562/
  Porposed userspace: https://github.com/RadeonOpenCompute/ROCT-Thunk-Interface/tree/fxkamd/hmm-wip

Signed-off-by: Dave Airlie <airlied@redhat.com>
From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210520031258.231896-1-alexander.deucher@amd.com
15 files changed:
1  2 
MAINTAINERS
drivers/gpu/drm/amd/amdgpu/Makefile
drivers/gpu/drm/amd/amdgpu/amdgpu.h
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c
drivers/gpu/drm/amd/display/dc/core/dc_link_dp.c
drivers/gpu/drm/amd/display/dc/dc_link.h

diff --combined MAINTAINERS
@@@ -300,6 -300,7 +300,6 @@@ M: Syed Nayyar Waris <syednwaris@gmail.
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-counter-104-quad-8
 -F:    Documentation/ABI/testing/sysfs-bus-iio-counter-104-quad-8
  F:    drivers/counter/104-quad-8.c
  
  ACCES PCI-IDIO-16 GPIO DRIVER
@@@ -572,12 -573,6 +572,12 @@@ S:       Maintaine
  F:    Documentation/scsi/advansys.rst
  F:    drivers/scsi/advansys.c
  
 +ADVANTECH SWBTN DRIVER
 +M:    Andrea Ho <Andrea.Ho@advantech.com.tw>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/adv_swbutton.c
 +
  ADXL34X THREE-AXIS DIGITAL ACCELEROMETER DRIVER (ADXL345/ADXL346)
  M:    Michael Hennerich <michael.hennerich@analog.com>
  S:    Supported
@@@ -624,7 -619,6 +624,7 @@@ F: fs/affs
  
  AFS FILESYSTEM
  M:    David Howells <dhowells@redhat.com>
 +M:    Marc Dionne <marc.dionne@auristor.com>
  L:    linux-afs@lists.infradead.org
  S:    Supported
  W:    https://www.infradead.org/~dhowells/kafs/
@@@ -703,11 -697,6 +703,11 @@@ S:       Maintaine
  F:    Documentation/i2c/busses/i2c-ali1563.rst
  F:    drivers/i2c/busses/i2c-ali1563.c
  
 +ALIENWARE WMI DRIVER
 +L:    Dell.Client.Kernel@dell.com
 +S:    Maintained
 +F:    drivers/platform/x86/dell/alienware-wmi.c
 +
  ALL SENSORS DLH SERIES PRESSURE SENSORS DRIVER
  M:    Tomislav Denis <tomislav.denis@avl.com>
  L:    linux-iio@vger.kernel.org
@@@ -878,9 -867,16 +878,9 @@@ M:        Harry Wentland <harry.wentland@amd.c
  M:    Leo Li <sunpeng.li@amd.com>
  L:    amd-gfx@lists.freedesktop.org
  S:    Supported
- T:    git git://people.freedesktop.org/~agd5f/linux
+ T:    git https://gitlab.freedesktop.org/agd5f/linux.git
  F:    drivers/gpu/drm/amd/display/
  
 -AMD ENERGY DRIVER
 -M:    Naveen Krishna Chatradhi <nchatrad@amd.com>
 -L:    linux-hwmon@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/hwmon/amd_energy.rst
 -F:    drivers/hwmon/amd_energy.c
 -
  AMD FAM15H PROCESSOR POWER MONITORING DRIVER
  M:    Huang Rui <ray.huang@amd.com>
  L:    linux-hwmon@vger.kernel.org
@@@ -954,7 -950,7 +954,7 @@@ AMD POWERPLA
  M:    Evan Quan <evan.quan@amd.com>
  L:    amd-gfx@lists.freedesktop.org
  S:    Supported
- T:    git git://people.freedesktop.org/~agd5f/linux
+ T:    git https://gitlab.freedesktop.org/agd5f/linux.git
  F:    drivers/gpu/drm/amd/pm/powerplay/
  
  AMD SEATTLE DEVICE TREE SUPPORT
@@@ -1146,7 -1142,7 +1146,7 @@@ W:      http://ez.analog.com/community/linux
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-ad9523
  F:    Documentation/ABI/testing/sysfs-bus-iio-frequency-adf4350
  F:    Documentation/devicetree/bindings/iio/*/adi,*
 -F:    Documentation/devicetree/bindings/iio/dac/ad5758.txt
 +F:    Documentation/devicetree/bindings/iio/dac/adi,ad5758.yaml
  F:    drivers/iio/*/ad*
  F:    drivers/iio/adc/ltc249*
  F:    drivers/iio/amplifiers/hmc425a.c
@@@ -1534,7 -1530,6 +1534,7 @@@ F:      Documentation/devicetree/bindings/dm
  F:    Documentation/devicetree/bindings/i2c/i2c-owl.yaml
  F:    Documentation/devicetree/bindings/interrupt-controller/actions,owl-sirq.yaml
  F:    Documentation/devicetree/bindings/mmc/owl-mmc.yaml
 +F:    Documentation/devicetree/bindings/net/actions,owl-emac.yaml
  F:    Documentation/devicetree/bindings/pinctrl/actions,*
  F:    Documentation/devicetree/bindings/power/actions,owl-sps.txt
  F:    Documentation/devicetree/bindings/timer/actions,owl-timer.txt
@@@ -1547,7 -1542,6 +1547,7 @@@ F:      drivers/dma/owl-dma.
  F:    drivers/i2c/busses/i2c-owl.c
  F:    drivers/irqchip/irq-owl-sirq.c
  F:    drivers/mmc/host/owl-mmc.c
 +F:    drivers/net/ethernet/actions/
  F:    drivers/pinctrl/actions/*
  F:    drivers/soc/actions/
  F:    include/dt-bindings/power/owl-*
@@@ -1578,17 -1572,15 +1578,17 @@@ F:   drivers/clk/sunxi
  ARM/Allwinner sunXi SoC support
  M:    Maxime Ripard <mripard@kernel.org>
  M:    Chen-Yu Tsai <wens@csie.org>
 -R:    Jernej Skrabec <jernej.skrabec@siol.net>
 +R:    Jernej Skrabec <jernej.skrabec@gmail.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git
 +L:    linux-sunxi@lists.linux.dev
  F:    arch/arm/mach-sunxi/
  F:    arch/arm64/boot/dts/allwinner/
  F:    drivers/clk/sunxi-ng/
  F:    drivers/pinctrl/sunxi/
  F:    drivers/soc/sunxi/
 +N:    allwinner
  N:    sun[x456789]i
  N:    sun50i
  
@@@ -1645,20 -1637,6 +1645,20 @@@ F:    arch/arm/mach-alpine
  F:    arch/arm64/boot/dts/amazon/
  F:    drivers/*/*alpine*
  
 +ARM/APPLE MACHINE SUPPORT
 +M:    Hector Martin <marcan@marcan.st>
 +L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 +S:    Maintained
 +W:    https://asahilinux.org
 +B:    https://github.com/AsahiLinux/linux/issues
 +C:    irc://chat.freenode.net/asahi-dev
 +T:    git https://github.com/AsahiLinux/linux.git
 +F:    Documentation/devicetree/bindings/arm/apple.yaml
 +F:    Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
 +F:    arch/arm64/boot/dts/apple/
 +F:    drivers/irqchip/irq-apple-aic.c
 +F:    include/dt-bindings/interrupt-controller/apple-aic.h
 +
  ARM/ARTPEC MACHINE SUPPORT
  M:    Jesper Nilsson <jesper.nilsson@axis.com>
  M:    Lars Persson <lars.persson@axis.com>
@@@ -1783,12 -1761,9 +1783,12 @@@ F:    Documentation/ABI/testing/sysfs-bus-
  F:    Documentation/devicetree/bindings/arm/coresight-cpu-debug.txt
  F:    Documentation/devicetree/bindings/arm/coresight-cti.yaml
  F:    Documentation/devicetree/bindings/arm/coresight.txt
 +F:    Documentation/devicetree/bindings/arm/ete.yaml
 +F:    Documentation/devicetree/bindings/arm/trbe.yaml
  F:    Documentation/trace/coresight/*
  F:    drivers/hwtracing/coresight/*
  F:    include/dt-bindings/arm/coresight-cti-dt.h
 +F:    include/linux/coresight*
  F:    tools/perf/arch/arm/util/auxtrace.c
  F:    tools/perf/arch/arm/util/cs-etm.c
  F:    tools/perf/arch/arm/util/cs-etm.h
@@@ -2226,15 -2201,6 +2226,15 @@@ F:    drivers/*/*npcm
  F:    drivers/*/*/*npcm*
  F:    include/dt-bindings/clock/nuvoton,npcm7xx-clock.h
  
 +ARM/NUVOTON WPCM450 ARCHITECTURE
 +M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
 +L:    openbmc@lists.ozlabs.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/*/*wpcm*
 +F:    arch/arm/boot/dts/nuvoton-wpcm450*
 +F:    arch/arm/mach-npcm/wpcm450.c
 +F:    drivers/*/*wpcm*
 +
  ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
  L:    openmoko-kernel@lists.openmoko.org (subscribers-only)
  S:    Orphan
@@@ -2337,7 -2303,6 +2337,7 @@@ F:      drivers/tty/serial/msm_serial.
  F:    drivers/usb/dwc3/dwc3-qcom.c
  F:    include/dt-bindings/*/qcom*
  F:    include/linux/*/qcom*
 +F:    include/linux/soc/qcom/
  
  ARM/RADISYS ENP2611 MACHINE SUPPORT
  M:    Lennert Buytenhek <kernel@wantstofly.org>
@@@ -2417,7 -2382,7 +2417,7 @@@ F:      sound/soc/rockchip
  N:    rockchip
  
  ARM/SAMSUNG S3C, S5P AND EXYNOS ARM ARCHITECTURES
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -2673,10 -2638,8 +2673,10 @@@ F:    drivers/watchdog/visconti_wdt.
  N:    visconti
  
  ARM/UNIPHIER ARCHITECTURE
 +M:    Kunihiko Hayashi <hayashi.kunihiko@socionext.com>
 +M:    Masami Hiramatsu <mhiramat@kernel.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Orphan
 +S:    Maintained
  F:    Documentation/devicetree/bindings/arm/socionext/uniphier.yaml
  F:    Documentation/devicetree/bindings/gpio/socionext,uniphier-gpio.yaml
  F:    Documentation/devicetree/bindings/pinctrl/socionext,uniphier-pinctrl.yaml
@@@ -2761,6 -2724,7 +2761,6 @@@ F:      Documentation/devicetree/bindings/i2
  F:    Documentation/devicetree/bindings/i2c/xlnx,xps-iic-2.00.a.yaml
  F:    Documentation/devicetree/bindings/spi/xlnx,zynq-qspi.yaml
  F:    arch/arm/mach-zynq/
 -F:    drivers/block/xsysace.c
  F:    drivers/clocksource/timer-cadence-ttc.c
  F:    drivers/cpuidle/cpuidle-zynq.c
  F:    drivers/edac/synopsys_edac.c
@@@ -2899,18 -2863,6 +2899,18 @@@ W:    http://www.openaoe.org
  F:    Documentation/admin-guide/aoe/
  F:    drivers/block/aoe/
  
 +ATC260X PMIC MFD DRIVER
 +M:    Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
 +M:    Cristian Ciocaltea <cristian.ciocaltea@gmail.com>
 +L:    linux-actions@lists.infradead.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/actions,atc260x.yaml
 +F:    drivers/input/misc/atc260x-onkey.c
 +F:    drivers/mfd/atc260*
 +F:    drivers/power/reset/atc260x-poweroff.c
 +F:    drivers/regulator/atc260x-regulator.c
 +F:    include/linux/mfd/atc260x/*
 +
  ATHEROS 71XX/9XXX GPIO DRIVER
  M:    Alban Bedel <albeu@free.fr>
  S:    Maintained
@@@ -3034,11 -2986,9 +3034,11 @@@ L:    linux-audit@redhat.com (moderated fo
  S:    Supported
  W:    https://github.com/linux-audit
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pcmoore/audit.git
 +F:    include/asm-generic/audit_*.h
  F:    include/linux/audit.h
  F:    include/uapi/linux/audit.h
  F:    kernel/audit*
 +F:    lib/*audit.c
  
  AUXILIARY DISPLAY DRIVERS
  M:    Miguel Ojeda <ojeda@kernel.org>
@@@ -3208,22 -3158,6 +3208,22 @@@ F:    Documentation/filesystems/bfs.rs
  F:    fs/bfs/
  F:    include/uapi/linux/bfs_fs.h
  
 +BITMAP API
 +M:    Yury Norov <yury.norov@gmail.com>
 +R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 +R:    Rasmus Villemoes <linux@rasmusvillemoes.dk>
 +S:    Maintained
 +F:    include/asm-generic/bitops/find.h
 +F:    include/linux/bitmap.h
 +F:    lib/bitmap.c
 +F:    lib/find_bit.c
 +F:    lib/find_bit_benchmark.c
 +F:    lib/test_bitmap.c
 +F:    tools/include/asm-generic/bitops/find.h
 +F:    tools/include/linux/bitmap.h
 +F:    tools/lib/bitmap.c
 +F:    tools/lib/find_bit.c
 +
  BLINKM RGB LED DRIVER
  M:    Jan-Simon Moeller <jansimon.moeller@gmx.de>
  S:    Maintained
@@@ -3306,7 -3240,6 +3306,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git
  F:    Documentation/bpf/
  F:    Documentation/networking/filter.rst
 +F:    Documentation/userspace-api/ebpf/
  F:    arch/*/net/*
  F:    include/linux/bpf*
  F:    include/linux/filter.h
@@@ -3321,7 -3254,6 +3321,7 @@@ F:      net/core/filter.
  F:    net/sched/act_bpf.c
  F:    net/sched/cls_bpf.c
  F:    samples/bpf/
 +F:    scripts/bpf_doc.py
  F:    tools/bpf/
  F:    tools/lib/bpf/
  F:    tools/testing/selftests/bpf/
@@@ -3444,7 -3376,7 +3444,7 @@@ F:      include/linux/dsa/brcm.
  F:    include/linux/platform_data/b53.h
  
  BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE
 -M:    Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
 +M:    Nicolas Saenz Julienne <nsaenz@kernel.org>
  L:    bcm-kernel-feedback-list@broadcom.com
  L:    linux-rpi-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -3633,14 -3565,6 +3633,14 @@@ S:    Supporte
  F:    Documentation/devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml
  F:    drivers/i2c/busses/i2c-brcmstb.c
  
 +BROADCOM BRCMSTB UART DRIVER
 +M:    Al Cooper <alcooperx@gmail.com>
 +L:    linux-serial@vger.kernel.org
 +L:    bcm-kernel-feedback-list@broadcom.com
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/serial/brcm,bcm7271-uart.yaml
 +F:    drivers/tty/serial/8250/8250_bcm7271.c
 +
  BROADCOM BRCMSTB USB EHCI DRIVER
  M:    Al Cooper <alcooperx@gmail.com>
  L:    linux-usb@vger.kernel.org
@@@ -3772,7 -3696,7 +3772,7 @@@ BROADCOM SPI DRIVE
  M:    Kamal Dasu <kdasu.kdev@gmail.com>
  M:    bcm-kernel-feedback-list@broadcom.com
  S:    Maintained
 -F:    Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.txt
 +F:    Documentation/devicetree/bindings/spi/brcm,spi-bcm-qspi.yaml
  F:    drivers/spi/spi-bcm-qspi.*
  F:    drivers/spi/spi-brcmstb-qspi.c
  F:    drivers/spi/spi-iproc-qspi.c
@@@ -4264,20 -4188,13 +4264,20 @@@ X:   drivers/char/tpm
  CHECKPATCH
  M:    Andy Whitcroft <apw@canonical.com>
  M:    Joe Perches <joe@perches.com>
 +R:    Dwaipayan Ray <dwaipayanray1@gmail.com>
 +R:    Lukas Bulwahn <lukas.bulwahn@gmail.com>
  S:    Maintained
  F:    scripts/checkpatch.pl
  
 +CHECKPATCH DOCUMENTATION
 +M:    Dwaipayan Ray <dwaipayanray1@gmail.com>
 +M:    Lukas Bulwahn <lukas.bulwahn@gmail.com>
 +R:    Joe Perches <joe@perches.com>
 +S:    Maintained
 +F:    Documentation/dev-tools/checkpatch.rst
 +
  CHINESE DOCUMENTATION
 -M:    Harry Wei <harryxiyou@gmail.com>
 -M:    Alex Shi <alex.shi@linux.alibaba.com>
 -L:    xiyoulinuxkernelgroup@googlegroups.com (subscribers-only)
 +M:    Alex Shi <alexs@kernel.org>
  S:    Maintained
  F:    Documentation/translations/zh_CN/
  
@@@ -4510,12 -4427,6 +4510,12 @@@ S:    Supporte
  F:    Documentation/process/code-of-conduct-interpretation.rst
  F:    Documentation/process/code-of-conduct.rst
  
 +COMEDI DRIVERS
 +M:    Ian Abbott <abbotti@mev.co.uk>
 +M:    H Hartley Sweeten <hsweeten@visionengravers.com>
 +S:    Odd Fixes
 +F:    drivers/comedi/
 +
  COMMON CLK FRAMEWORK
  M:    Michael Turquette <mturquette@baylibre.com>
  M:    Stephen Boyd <sboyd@kernel.org>
@@@ -4681,11 -4592,6 +4681,11 @@@ F:    drivers/counter
  F:    include/linux/counter.h
  F:    include/linux/counter_enum.h
  
 +CP2615 I2C DRIVER
 +M:    Bence Csókás <bence98@sch.bme.hu>
 +S:    Maintained
 +F:    drivers/i2c/busses/i2c-cp2615.c
 +
  CPMAC ETHERNET DRIVER
  M:    Florian Fainelli <f.fainelli@gmail.com>
  L:    netdev@vger.kernel.org
@@@ -4977,8 -4883,16 +4977,8 @@@ S:     Maintaine
  W:    http://www.armlinux.org.uk/
  F:    drivers/video/fbdev/cyber2000fb.*
  
 -CYCLADES ASYNC MUX DRIVER
 -S:    Orphan
 -W:    http://www.cyclades.com/
 -F:    drivers/tty/cyclades.c
 -F:    include/linux/cyclades.h
 -F:    include/uapi/linux/cyclades.h
 -
  CYCLADES PC300 DRIVER
  S:    Orphan
 -W:    http://www.cyclades.com/
  F:    drivers/net/wan/pc300*
  
  CYPRESS_FIRMWARE MEDIA DRIVER
@@@ -5089,7 -5003,7 +5089,7 @@@ S:      Maintaine
  F:    drivers/net/fddi/defza.*
  
  DEINTERLACE DRIVERS FOR ALLWINNER H3
 -M:    Jernej Skrabec <jernej.skrabec@siol.net>
 +M:    Jernej Skrabec <jernej.skrabec@gmail.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -5127,19 -5041,19 +5127,19 @@@ F:   drivers/platform/x86/dell/dell_rbu.
  
  DELL SMBIOS DRIVER
  M:    Pali Rohár <pali@kernel.org>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios.*
  
  DELL SMBIOS SMM DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-smm.c
  
  DELL SMBIOS WMI DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-smbios-wmi.c
@@@ -5153,14 -5067,14 +5153,14 @@@ F:   Documentation/driver-api/dcdbas.rs
  F:    drivers/platform/x86/dell/dcdbas.*
  
  DELL WMI DESCRIPTOR DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/dell/dell-wmi-descriptor.c
  
  DELL WMI SYSMAN DRIVER
  M:    Divya Bharathi <divya.bharathi@dell.com>
 -M:    Mario Limonciello <mario.limonciello@dell.com>
  M:    Prasanth Ksr <prasanth.ksr@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-class-firmware-attributes
@@@ -5192,13 -5106,6 +5192,13 @@@ S:    Maintaine
  F:    drivers/dma/dw-edma/
  F:    include/linux/dma/edma.h
  
 +DESIGNWARE XDATA IP DRIVER
 +M:    Gustavo Pimentel <gustavo.pimentel@synopsys.com>
 +L:    linux-pci@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/misc-devices/dw-xdata-pcie.rst
 +F:    drivers/misc/dw-xdata-pcie.c
 +
  DESIGNWARE USB2 DRD IP DRIVER
  M:    Minas Harutyunyan <hminas@synopsys.com>
  L:    linux-usb@vger.kernel.org
@@@ -5237,7 -5144,7 +5237,7 @@@ DEVICE DIRECT ACCESS (DAX
  M:    Dan Williams <dan.j.williams@intel.com>
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Dave Jiang <dave.jiang@intel.com>
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  F:    drivers/dax/
  
@@@ -5269,12 -5176,6 +5269,12 @@@ M:    Torben Mathiasen <device@lanana.org
  S:    Maintained
  W:    http://lanana.org/docs/device-list/index.html
  
 +DEVICE RESOURCE MANAGEMENT HELPERS
 +M:    Hans de Goede <hdegoede@redhat.com>
 +R:    Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
 +S:    Maintained
 +F:    include/linux/devm-helpers.h
 +
  DEVICE-MAPPER  (LVM)
  M:    Alasdair Kergon <agk@redhat.com>
  M:    Mike Snitzer <snitzer@redhat.com>
@@@ -5484,7 -5385,7 +5484,7 @@@ F:      drivers/hwmon/dme1737.
  DMI/SMBIOS SUPPORT
  M:    Jean Delvare <jdelvare@suse.com>
  S:    Maintained
 -T:    quilt http://jdelvare.nerim.net/devel/linux/jdelvare-dmi/
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging.git dmi-for-next
  F:    Documentation/ABI/testing/sysfs-firmware-dmi-tables
  F:    drivers/firmware/dmi-id.c
  F:    drivers/firmware/dmi_scan.c
@@@ -5510,12 -5411,6 +5510,12 @@@ X:    Documentation/power
  X:    Documentation/spi/
  X:    Documentation/userspace-api/media/
  
 +DOCUMENTATION REPORTING ISSUES
 +M:    Thorsten Leemhuis <linux@leemhuis.info>
 +L:    linux-doc@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/admin-guide/reporting-issues.rst
 +
  DOCUMENTATION SCRIPTS
  M:    Mauro Carvalho Chehab <mchehab@kernel.org>
  L:    linux-doc@vger.kernel.org
@@@ -5583,11 -5478,11 +5583,11 @@@ F:   drivers/net/ethernet/freescale/dpaa2
  F:    drivers/net/ethernet/freescale/dpaa2/dpni*
  
  DPAA2 ETHERNET SWITCH DRIVER
 -M:    Ioana Radulescu <ruxandra.radulescu@nxp.com>
  M:    Ioana Ciornei <ioana.ciornei@nxp.com>
 -L:    linux-kernel@vger.kernel.org
 +L:    netdev@vger.kernel.org
  S:    Maintained
 -F:    drivers/staging/fsl-dpaa2/ethsw
 +F:    drivers/net/ethernet/freescale/dpaa2/dpaa2-switch*
 +F:    drivers/net/ethernet/freescale/dpaa2/dpsw*
  
  DPT_I2O SCSI RAID DRIVER
  M:    Adaptec OEM Raid Solutions <aacraid@microsemi.com>
@@@ -5632,14 -5527,14 +5632,14 @@@ F:   include/linux/power/smartreflex.
  DRM DRIVER FOR ALLWINNER DE2 AND DE3 ENGINE
  M:    Maxime Ripard <mripard@kernel.org>
  M:    Chen-Yu Tsai <wens@csie.org>
 -R:    Jernej Skrabec <jernej.skrabec@siol.net>
 +R:    Jernej Skrabec <jernej.skrabec@gmail.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    drivers/gpu/drm/sun4i/sun8i*
  
  DRM DRIVER FOR ARM PL111 CLCD
 -M:    Eric Anholt <eric@anholt.net>
 +M:    Emma Anholt <emma@anholt.net>
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    drivers/gpu/drm/pl111/
@@@ -5719,7 -5614,7 +5719,7 @@@ T:      git git://anongit.freedesktop.org/dr
  F:    drivers/gpu/drm/tiny/gm12u320.c
  
  DRM DRIVER FOR HX8357D PANELS
 -M:    Eric Anholt <eric@anholt.net>
 +M:    Emma Anholt <emma@anholt.net>
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    Documentation/devicetree/bindings/display/himax,hx8357d.txt
@@@ -5870,13 -5765,6 +5870,13 @@@ S:    Orphan / Obsolet
  F:    drivers/gpu/drm/savage/
  F:    include/uapi/drm/savage_drm.h
  
 +DRM DRIVER FOR SIMPLE FRAMEBUFFERS
 +M:    Thomas Zimmermann <tzimmermann@suse.de>
 +L:    dri-devel@lists.freedesktop.org
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    drivers/gpu/drm/tiny/simpledrm.c
 +
  DRM DRIVER FOR SIS VIDEO CARDS
  S:    Orphan / Obsolete
  F:    drivers/gpu/drm/sis/
@@@ -5912,7 -5800,7 +5912,7 @@@ DRM DRIVER FOR ST-ERICSSON MCD
  M:    Linus Walleij <linus.walleij@linaro.org>
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/display/ste,mcde.txt
 +F:    Documentation/devicetree/bindings/display/ste,mcde.yaml
  F:    drivers/gpu/drm/mcde/
  
  DRM DRIVER FOR TDFX VIDEO CARDS
@@@ -6030,7 -5918,7 +6030,7 @@@ M:      Neil Armstrong <narmstrong@baylibre.
  M:    Robert Foss <robert.foss@linaro.org>
  R:    Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
  R:    Jonas Karlman <jonas@kwiboo.se>
 -R:    Jernej Skrabec <jernej.skrabec@siol.net>
 +R:    Jernej Skrabec <jernej.skrabec@gmail.com>
  S:    Maintained
  T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    drivers/gpu/drm/bridge/
@@@ -6184,15 -6072,15 +6184,15 @@@ F:   Documentation/devicetree/bindings/di
  F:    drivers/gpu/drm/omapdrm/
  
  DRM DRIVERS FOR V3D
 -M:    Eric Anholt <eric@anholt.net>
 +M:    Emma Anholt <emma@anholt.net>
  S:    Supported
  T:    git git://anongit.freedesktop.org/drm/drm-misc
 -F:    Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.txt
 +F:    Documentation/devicetree/bindings/gpu/brcm,bcm-v3d.yaml
  F:    drivers/gpu/drm/v3d/
  F:    include/uapi/drm/v3d_drm.h
  
  DRM DRIVERS FOR VC4
 -M:    Eric Anholt <eric@anholt.net>
 +M:    Emma Anholt <emma@anholt.net>
  M:    Maxime Ripard <mripard@kernel.org>
  S:    Supported
  T:    git git://github.com/anholt/linux
@@@ -6246,7 -6134,7 +6246,7 @@@ M:      Christian Koenig <christian.koenig@a
  M:    Huang Rui <ray.huang@amd.com>
  L:    dri-devel@lists.freedesktop.org
  S:    Maintained
 -T:    git git://people.freedesktop.org/~agd5f/linux
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
  F:    drivers/gpu/drm/ttm/
  F:    include/drm/ttm/
  
@@@ -7013,7 -6901,7 +7013,7 @@@ M:      Dan Williams <dan.j.williams@intel.c
  R:    Matthew Wilcox <willy@infradead.org>
  R:    Jan Kara <jack@suse.cz>
  L:    linux-fsdevel@vger.kernel.org
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  F:    fs/dax.c
  F:    include/linux/dax.h
@@@ -7125,7 -7013,6 +7125,7 @@@ S:      Maintaine
  F:    Documentation/ABI/testing/sysfs-bus-dfl*
  F:    Documentation/fpga/dfl.rst
  F:    drivers/fpga/dfl*
 +F:    drivers/uio/uio_dfl.c
  F:    include/linux/dfl.h
  F:    include/uapi/linux/fpga-dfl.h
  
@@@ -7225,7 -7112,7 +7225,7 @@@ S:      Maintaine
  F:    drivers/i2c/busses/i2c-cpm.c
  
  FREESCALE IMX / MXC FEC DRIVER
 -M:    Fugang Duan <fugang.duan@nxp.com>
 +M:    Joakim Zhang <qiangqing.zhang@nxp.com>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/fsl-fec.txt
@@@ -7266,13 -7153,6 +7266,13 @@@ S:    Maintaine
  F:    Documentation/devicetree/bindings/i2c/i2c-imx-lpi2c.yaml
  F:    drivers/i2c/busses/i2c-imx-lpi2c.c
  
 +FREESCALE MPC I2C DRIVER
 +M:    Chris Packham <chris.packham@alliedtelesis.co.nz>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/i2c/i2c-mpc.yaml
 +F:    drivers/i2c/busses/i2c-mpc.c
 +
  FREESCALE QORIQ DPAA ETHERNET DRIVER
  M:    Madalin Bucur <madalin.bucur@nxp.com>
  L:    netdev@vger.kernel.org
@@@ -7302,7 -7182,6 +7302,7 @@@ FREESCALE QUAD SPI DRIVE
  M:    Han Xu <han.xu@nxp.com>
  L:    linux-spi@vger.kernel.org
  S:    Maintained
 +F:    Documentation/devicetree/bindings/spi/fsl,spi-fsl-qspi.yaml
  F:    drivers/spi/spi-fsl-qspi.c
  
  FREESCALE QUICC ENGINE LIBRARY
@@@ -7338,7 -7217,7 +7338,7 @@@ M:      Li Yang <leoyang.li@nxp.com
  L:    linuxppc-dev@lists.ozlabs.org
  L:    linux-arm-kernel@lists.infradead.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/misc/fsl,dpaa2-console.txt
 +F:    Documentation/devicetree/bindings/misc/fsl,dpaa2-console.yaml
  F:    Documentation/devicetree/bindings/soc/fsl/
  F:    drivers/soc/fsl/
  F:    include/linux/fsl/
@@@ -7470,13 -7349,6 +7470,13 @@@ F:    fs/verity
  F:    include/linux/fsverity.h
  F:    include/uapi/linux/fsverity.h
  
 +FT260 FTDI USB-HID TO I2C BRIDGE DRIVER
 +M:    Michael Zaidman <michael.zaidman@gmail.com>
 +L:    linux-i2c@vger.kernel.org
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/hid-ft260.c
 +
  FUJITSU LAPTOP EXTRAS
  M:    Jonathan Woithe <jwoithe@just42.net>
  L:    platform-driver-x86@vger.kernel.org
@@@ -7512,7 -7384,6 +7512,7 @@@ M:      Thomas Gleixner <tglx@linutronix.de
  M:    Ingo Molnar <mingo@redhat.com>
  R:    Peter Zijlstra <peterz@infradead.org>
  R:    Darren Hart <dvhart@infradead.org>
 +R:    Davidlohr Bueso <dave@stgolabs.net>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
@@@ -7535,6 -7406,14 +7535,6 @@@ F:     Documentation/hwmon/gsc-hwmon.rs
  F:    drivers/hwmon/gsc-hwmon.c
  F:    include/linux/platform_data/gsc_hwmon.h
  
 -GASKET DRIVER FRAMEWORK
 -M:    Rob Springer <rspringer@google.com>
 -M:    Todd Poynor <toddpoynor@google.com>
 -M:    Ben Chan <benchan@chromium.org>
 -M:    Richard Yeh <rcy@google.com>
 -S:    Maintained
 -F:    drivers/staging/gasket/
 -
  GCC PLUGINS
  M:    Kees Cook <keescook@chromium.org>
  L:    linux-hardening@vger.kernel.org
@@@ -7686,12 -7565,6 +7686,12 @@@ F:    Documentation/filesystems/gfs2
  F:    fs/gfs2/
  F:    include/uapi/linux/gfs2_ondisk.h
  
 +GIGABYTE WMI DRIVER
 +M:    Thomas Weißschuh <thomas@weissschuh.net>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/x86/gigabyte-wmi.c
 +
  GNSS SUBSYSTEM
  M:    Johan Hovold <johan@kernel.org>
  S:    Maintained
@@@ -8000,7 -7873,6 +8000,7 @@@ F:      Documentation/hwmon
  F:    drivers/hwmon/
  F:    include/linux/hwmon*.h
  F:    include/trace/events/hwmon*.h
 +K:    (devm_)?hwmon_device_(un)?register(|_with_groups|_with_info)
  
  HARDWARE RANDOM NUMBER GENERATOR CORE
  M:    Matt Mackall <mpm@selenic.com>
@@@ -8042,11 -7914,6 +8042,11 @@@ W:    https://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/usb/hdpvr/
  
 +HEWLETT PACKARD ENTERPRISE ILO CHIF DRIVER
 +M:    Matt Hsiao <matt.hsiao@hpe.com>
 +S:    Supported
 +F:    drivers/misc/hpilo.[ch]
 +
  HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER
  M:    Jerry Hoemann <jerry.hoemann@hpe.com>
  S:    Supported
@@@ -8195,13 -8062,6 +8195,13 @@@ F:    drivers/crypto/hisilicon/hpre/hpre.
  F:    drivers/crypto/hisilicon/hpre/hpre_crypto.c
  F:    drivers/crypto/hisilicon/hpre/hpre_main.c
  
 +HISILICON I2C CONTROLLER DRIVER
 +M:    Yicong Yang <yangyicong@hisilicon.com>
 +L:    linux-i2c@vger.kernel.org
 +S:    Maintained
 +W:    https://www.hisilicon.com
 +F:    drivers/i2c/busses/i2c-hisi.c
 +
  HISILICON LPC BUS DRIVER
  M:    john.garry@huawei.com
  S:    Maintained
@@@ -8252,6 -8112,7 +8252,6 @@@ F:      drivers/crypto/hisilicon/zip
  
  HISILICON ROCE DRIVER
  M:    Lijun Ou <oulijun@huawei.com>
 -M:    Wei Hu(Xavier) <huwei87@hisilicon.com>
  M:    Weihang Li <liweihang@huawei.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
@@@ -8275,13 -8136,6 +8275,13 @@@ F:    drivers/crypto/hisilicon/sec2/sec_cr
  F:    drivers/crypto/hisilicon/sec2/sec_crypto.h
  F:    drivers/crypto/hisilicon/sec2/sec_main.c
  
 +HISILICON SPI Controller DRIVER FOR KUNPENG SOCS
 +M:    Jay Fang <f.fangjian@huawei.com>
 +L:    linux-spi@vger.kernel.org
 +S:    Maintained
 +W:    http://www.hisilicon.com
 +F:    drivers/spi/spi-hisi-kunpeng.c
 +
  HISILICON STAGING DRIVERS FOR HIKEY 960/970
  M:    Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
  S:    Maintained
@@@ -8376,7 -8230,7 +8376,7 @@@ M:      Lorenzo Bianconi <lorenzo.bianconi83
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  W:    http://www.st.com/
 -F:    Documentation/devicetree/bindings/iio/humidity/hts221.txt
 +F:    Documentation/devicetree/bindings/iio/humidity/st,hts221.yaml
  F:    drivers/iio/humidity/hts221*
  
  HUAWEI ETHERNET DRIVER
@@@ -8412,13 -8266,6 +8412,13 @@@ S:    Maintaine
  F:    mm/hwpoison-inject.c
  F:    mm/memory-failure.c
  
 +HYCON HY46XX TOUCHSCREEN SUPPORT
 +M:    Giulio Benetti <giulio.benetti@benettiengineering.com>
 +L:    linux-input@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/input/touchscreen/hycon,hy46xx.yaml
 +F:    drivers/input/touchscreen/hycon-hy46xx.c
 +
  HYGON PROCESSOR SUPPORT
  M:    Pu Wen <puwen@hygon.cn>
  L:    linux-kernel@vger.kernel.org
@@@ -8432,12 -8279,11 +8432,12 @@@ S:   Maintaine
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/i2c/hi556.c
  
 -Hyper-V CORE AND DRIVERS
 +Hyper-V/Azure CORE AND DRIVERS
  M:    "K. Y. Srinivasan" <kys@microsoft.com>
  M:    Haiyang Zhang <haiyangz@microsoft.com>
  M:    Stephen Hemminger <sthemmin@microsoft.com>
  M:    Wei Liu <wei.liu@kernel.org>
 +M:    Dexuan Cui <decui@microsoft.com>
  L:    linux-hyperv@vger.kernel.org
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hyperv/linux.git
@@@ -8454,7 -8300,6 +8454,7 @@@ F:      drivers/hid/hid-hyperv.
  F:    drivers/hv/
  F:    drivers/input/serio/hyperv-keyboard.c
  F:    drivers/iommu/hyperv-iommu.c
 +F:    drivers/net/ethernet/microsoft/
  F:    drivers/net/hyperv/
  F:    drivers/pci/controller/pci-hyperv-intf.c
  F:    drivers/pci/controller/pci-hyperv.c
@@@ -8695,6 -8540,7 +8695,6 @@@ F:      drivers/pci/hotplug/rpaphp
  
  IBM Power SRIOV Virtual NIC Device Driver
  M:    Dany Madden <drt@linux.ibm.com>
 -M:    Lijun Pan <ljp@linux.ibm.com>
  M:    Sukadev Bhattiprolu <sukadev@linux.ibm.com>
  R:    Thomas Falcon <tlfalcon@linux.ibm.com>
  L:    netdev@vger.kernel.org
@@@ -8722,8 -8568,7 +8722,8 @@@ S:      Supporte
  F:    drivers/scsi/ibmvscsi/ibmvfc*
  
  IBM Power Virtual Management Channel Driver
 -M:    Steven Royer <seroyer@linux.ibm.com>
 +M:    Brad Warrum <bwarrum@linux.ibm.com>
 +M:    Ritu Agarwal <rituagar@linux.ibm.com>
  S:    Supported
  F:    drivers/misc/ibmvmc.*
  
@@@ -8781,8 -8626,9 +8781,8 @@@ F:      drivers/ide
  F:    include/linux/ide.h
  
  IDE/ATAPI DRIVERS
 -M:    Borislav Petkov <bp@alien8.de>
  L:    linux-ide@vger.kernel.org
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/cdrom/ide-cd.rst
  F:    drivers/ide/ide-cd*
  
@@@ -8850,7 -8696,7 +8850,7 @@@ M:      Peter Rosin <peda@axentia.se
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-dac-dpot-dac
 -F:    Documentation/devicetree/bindings/iio/dac/dpot-dac.txt
 +F:    Documentation/devicetree/bindings/iio/dac/dpot-dac.yaml
  F:    drivers/iio/dac/dpot-dac.c
  
  IIO ENVELOPE DETECTOR
@@@ -8858,7 -8704,7 +8858,7 @@@ M:      Peter Rosin <peda@axentia.se
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-iio-adc-envelope-detector
 -F:    Documentation/devicetree/bindings/iio/adc/envelope-detector.txt
 +F:    Documentation/devicetree/bindings/iio/adc/envelope-detector.yaml
  F:    drivers/iio/adc/envelope-detector.c
  
  IIO MULTIPLEXER
@@@ -8868,15 -8714,10 +8868,15 @@@ S:   Maintaine
  F:    Documentation/devicetree/bindings/iio/multiplexer/io-channel-mux.txt
  F:    drivers/iio/multiplexer/iio-mux.c
  
 +IIO SCMI BASED DRIVER
 +M:    Jyoti Bhayana <jbhayana@google.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    drivers/iio/common/scmi_sensors/scmi_iio.c
 +
  IIO SUBSYSTEM AND DRIVERS
  M:    Jonathan Cameron <jic23@kernel.org>
  R:    Lars-Peter Clausen <lars@metafoo.de>
 -R:    Peter Meerwald-Stadler <pmeerw@pmeerw.net>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jic23/iio.git
@@@ -8892,9 -8733,9 +8892,9 @@@ IIO UNIT CONVERTE
  M:    Peter Rosin <peda@axentia.se>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.txt
 -F:    Documentation/devicetree/bindings/iio/afe/current-sense-shunt.txt
 -F:    Documentation/devicetree/bindings/iio/afe/voltage-divider.txt
 +F:    Documentation/devicetree/bindings/iio/afe/current-sense-amplifier.yaml
 +F:    Documentation/devicetree/bindings/iio/afe/current-sense-shunt.yaml
 +F:    Documentation/devicetree/bindings/iio/afe/voltage-divider.yaml
  F:    drivers/iio/afe/iio-rescale.c
  
  IKANOS/ADI EAGLE ADSL USB DRIVER
@@@ -9296,26 -9137,6 +9296,26 @@@ F:    include/linux/mei_cl_bus.
  F:    include/uapi/linux/mei.h
  F:    samples/mei/*
  
 +INTEL MAX 10 BMC MFD DRIVER
 +M:    Xu Yilun <yilun.xu@intel.com>
 +R:    Tom Rix <trix@redhat.com>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 +F:    Documentation/hwmon/intel-m10-bmc-hwmon.rst
 +F:    drivers/hwmon/intel-m10-bmc-hwmon.c
 +F:    drivers/mfd/intel-m10-bmc.c
 +F:    include/linux/mfd/intel-m10-bmc.h
 +
 +INTEL MAX 10 BMC MFD DRIVER
 +M:    Xu Yilun <yilun.xu@intel.com>
 +R:    Tom Rix <trix@redhat.com>
 +S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-driver-intel-m10-bmc
 +F:    Documentation/hwmon/intel-m10-bmc-hwmon.rst
 +F:    drivers/hwmon/intel-m10-bmc-hwmon.c
 +F:    drivers/mfd/intel-m10-bmc.c
 +F:    include/linux/mfd/intel-m10-bmc.h
 +
  INTEL MENLOW THERMAL DRIVER
  M:    Sujith Thomas <sujith.thomas@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -9335,7 -9156,6 +9335,7 @@@ M:      Rajneesh Bhardwaj <irenic.rajneesh@g
  M:    David E Box <david.e.box@intel.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
 +F:    Documentation/ABI/testing/sysfs-platform-intel-pmc
  F:    drivers/platform/x86/intel_pmc_core*
  
  INTEL PMIC GPIO DRIVERS
@@@ -9446,7 -9266,7 +9446,7 @@@ W:      https://slimbootloader.github.io/sec
  F:    drivers/platform/x86/intel-wmi-sbl-fw-update.c
  
  INTEL WMI THUNDERBOLT FORCE POWER DRIVER
 -M:    Mario Limonciello <mario.limonciello@dell.com>
 +L:    Dell.Client.Kernel@dell.com
  S:    Maintained
  F:    drivers/platform/x86/intel-wmi-thunderbolt.c
  
@@@ -9476,7 -9296,6 +9476,7 @@@ Q:      https://patchwork.kernel.org/project
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/sgx
  F:    Documentation/x86/sgx.rst
  F:    arch/x86/entry/vdso/vsgx.S
 +F:    arch/x86/include/asm/sgx.h
  F:    arch/x86/include/uapi/asm/sgx.h
  F:    arch/x86/kernel/cpu/sgx/*
  F:    tools/testing/selftests/sgx/*
@@@ -9486,7 -9305,6 +9486,7 @@@ INTERCONNECT AP
  M:    Georgi Djakov <djakov@kernel.org>
  L:    linux-pm@vger.kernel.org
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/djakov/icc.git
  F:    Documentation/devicetree/bindings/interconnect/
  F:    Documentation/driver-api/interconnect.rst
  F:    drivers/interconnect/
@@@ -9494,13 -9312,6 +9494,13 @@@ F:    include/dt-bindings/interconnect
  F:    include/linux/interconnect-provider.h
  F:    include/linux/interconnect.h
  
 +INTERRUPT COUNTER DRIVER
 +M:    Oleksij Rempel <o.rempel@pengutronix.de>
 +R:    Pengutronix Kernel Team <kernel@pengutronix.de>
 +L:    linux-iio@vger.kernel.org
 +F:    Documentation/devicetree/bindings/counter/interrupt-counter.yaml
 +F:    drivers/counter/interrupt-cnt.c
 +
  INVENSENSE ICM-426xx IMU DRIVER
  M:    Jean-Baptiste Maneyrol <jmaneyrol@invensense.com>
  L:    linux-iio@vger.kernel.org
@@@ -9513,7 -9324,7 +9513,7 @@@ INVENSENSE MPU-3050 GYROSCOPE DRIVE
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.txt
 +F:    Documentation/devicetree/bindings/iio/gyroscope/invensense,mpu3050.yaml
  F:    drivers/iio/gyro/mpu3050*
  
  IOC3 ETHERNET DRIVER
@@@ -9560,7 -9371,6 +9560,7 @@@ F:      fs/io-wq.
  F:    fs/io_uring.c
  F:    include/linux/io_uring.h
  F:    include/uapi/linux/io_uring.h
 +F:    tools/io_uring/
  
  IPMI SUBSYSTEM
  M:    Corey Minyard <minyard@acm.org>
@@@ -9726,14 -9536,6 +9726,14 @@@ Q:    http://patchwork.linuxtv.org/project
  T:    git git://linuxtv.org/anttip/media_tree.git
  F:    drivers/media/tuners/it913x*
  
 +ITE IT66121 HDMI BRIDGE DRIVER
 +M:    Phong LE <ple@baylibre.com>
 +M:    Neil Armstrong <narmstrong@baylibre.com>
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    Documentation/devicetree/bindings/display/bridge/ite,it66121.yaml
 +F:    drivers/gpu/drm/bridge/ite-it66121.c
 +
  IVTV VIDEO4LINUX DRIVER
  M:    Andy Walls <awalls@md.metrocast.net>
  L:    linux-media@vger.kernel.org
@@@ -9911,7 -9713,6 +9911,7 @@@ F:      scripts/*vmlinux
  F:    scripts/Kbuild*
  F:    scripts/Makefile*
  F:    scripts/basic/
 +F:    scripts/dummy-tools/
  F:    scripts/mk*
  F:    scripts/mod/
  F:    scripts/package/
@@@ -9938,11 -9739,6 +9938,11 @@@ F:    include/uapi/linux/sunrpc
  F:    net/sunrpc/
  F:    Documentation/filesystems/nfs/
  
 +KERNEL REGRESSIONS
 +M:    Thorsten Leemhuis <linux@leemhuis.info>
 +L:    regressions@lists.linux.dev
 +S:    Supported
 +
  KERNEL SELFTEST FRAMEWORK
  M:    Shuah Khan <shuah@kernel.org>
  M:    Shuah Khan <skhan@linuxfoundation.org>
@@@ -9991,10 -9787,10 +9991,10 @@@ F:   virt/kvm/
  KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
  M:    Marc Zyngier <maz@kernel.org>
  R:    James Morse <james.morse@arm.com>
 -R:    Julien Thierry <julien.thierry.kdev@gmail.com>
 +R:    Alexandru Elisei <alexandru.elisei@arm.com>
  R:    Suzuki K Poulose <suzuki.poulose@arm.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -L:    kvmarm@lists.cs.columbia.edu
 +L:    kvmarm@lists.cs.columbia.edu (moderated for non-subscribers)
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git
  F:    arch/arm64/include/asm/kvm*
@@@ -10105,14 -9901,6 +10105,14 @@@ F:  include/keys/trusted-type.
  F:    include/keys/trusted_tpm.h
  F:    security/keys/trusted-keys/
  
 +KEYS-TRUSTED-TEE
 +M:    Sumit Garg <sumit.garg@linaro.org>
 +L:    linux-integrity@vger.kernel.org
 +L:    keyrings@vger.kernel.org
 +S:    Supported
 +F:    include/keys/trusted_tee.h
 +F:    security/keys/trusted-keys/trusted_tee.c
 +
  KEYS/KEYRINGS
  M:    David Howells <dhowells@redhat.com>
  M:    Jarkko Sakkinen <jarkko@kernel.org>
@@@ -10210,12 -9998,6 +10210,12 @@@ S:  Maintaine
  F:    Documentation/devicetree/bindings/leds/backlight/kinetic,ktd253.yaml
  F:    drivers/video/backlight/ktd253-backlight.c
  
 +KTEST
 +M:    Steven Rostedt <rostedt@goodmis.org>
 +M:    John Hawley <warthog9@eaglescrag.net>
 +S:    Maintained
 +F:    tools/testing/ktest
 +
  L3MDEV
  M:    David Ahern <dsahern@kernel.org>
  L:    netdev@vger.kernel.org
@@@ -10237,21 -10019,6 +10237,21 @@@ F: net/core/sock_map.
  F:    net/ipv4/tcp_bpf.c
  F:    net/ipv4/udp_bpf.c
  
 +LANDLOCK SECURITY MODULE
 +M:    Mickaël Salaün <mic@digikod.net>
 +L:    linux-security-module@vger.kernel.org
 +S:    Supported
 +W:    https://landlock.io
 +T:    git https://github.com/landlock-lsm/linux.git
 +F:    Documentation/security/landlock.rst
 +F:    Documentation/userspace-api/landlock.rst
 +F:    include/uapi/linux/landlock.h
 +F:    samples/landlock/
 +F:    security/landlock/
 +F:    tools/testing/selftests/landlock/
 +K:    landlock
 +K:    LANDLOCK
 +
  LANTIQ / INTEL Ethernet drivers
  M:    Hauke Mehrtens <hauke@hauke-m.de>
  L:    netdev@vger.kernel.org
@@@ -10301,7 -10068,7 +10301,7 @@@ F:   drivers/misc/eeprom/eeprom.
  LEGO MINDSTORMS EV3
  R:    David Lechner <david@lechnology.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/power/supply/lego_ev3_battery.txt
 +F:    Documentation/devicetree/bindings/power/supply/lego,ev3-battery.yaml
  F:    arch/arm/boot/dts/da850-lego-ev3.dts
  F:    drivers/power/supply/lego_ev3_battery.c
  
@@@ -10393,7 -10160,7 +10393,7 @@@ LIBNVDIMM BLK: MMIO-APERTURE DRIVE
  M:    Dan Williams <dan.j.williams@intel.com>
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Dave Jiang <dave.jiang@intel.com>
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  P:    Documentation/nvdimm/maintainer-entry-profile.rst
@@@ -10404,7 -10171,7 +10404,7 @@@ LIBNVDIMM BTT: BLOCK TRANSLATION TABL
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Dan Williams <dan.j.williams@intel.com>
  M:    Dave Jiang <dave.jiang@intel.com>
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  P:    Documentation/nvdimm/maintainer-entry-profile.rst
@@@ -10414,7 -10181,7 +10414,7 @@@ LIBNVDIMM PMEM: PERSISTENT MEMORY DRIVE
  M:    Dan Williams <dan.j.williams@intel.com>
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Dave Jiang <dave.jiang@intel.com>
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  P:    Documentation/nvdimm/maintainer-entry-profile.rst
@@@ -10422,7 -10189,7 +10422,7 @@@ F:   drivers/nvdimm/pmem
  
  LIBNVDIMM: DEVICETREE BINDINGS
  M:    Oliver O'Halloran <oohall@gmail.com>
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  F:    Documentation/devicetree/bindings/pmem/pmem-region.txt
@@@ -10433,7 -10200,7 +10433,7 @@@ M:   Dan Williams <dan.j.williams@intel.c
  M:    Vishal Verma <vishal.l.verma@intel.com>
  M:    Dave Jiang <dave.jiang@intel.com>
  M:    Ira Weiny <ira.weiny@intel.com>
 -L:    linux-nvdimm@lists.01.org
 +L:    nvdimm@lists.linux.dev
  S:    Supported
  Q:    https://patchwork.kernel.org/project/linux-nvdimm/list/
  P:    Documentation/nvdimm/maintainer-entry-profile.rst
@@@ -10866,7 -10633,6 +10866,7 @@@ S:   Maintaine
  F:    drivers/mailbox/
  F:    include/linux/mailbox_client.h
  F:    include/linux/mailbox_controller.h
 +F:    Documentation/devicetree/bindings/mailbox/
  
  MAILBOX ARM MHUv2
  M:    Viresh Kumar <viresh.kumar@linaro.org>
@@@ -10952,7 -10718,6 +10952,7 @@@ F:   include/linux/mv643xx.
  
  MARVELL MV88X3310 PHY DRIVER
  M:    Russell King <linux@armlinux.org.uk>
 +M:    Marek Behun <marek.behun@nic.cz>
  L:    netdev@vger.kernel.org
  S:    Maintained
  F:    drivers/net/phy/marvell10g.c
@@@ -11052,13 -10817,6 +11052,13 @@@ S: Orpha
  F:    drivers/video/fbdev/matrox/matroxfb_*
  F:    include/uapi/linux/matroxfb.h
  
 +MAX15301 DRIVER
 +M:    Daniel Nilsson <daniel.nilsson@flex.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/max15301.rst
 +F:    drivers/hwmon/pmbus/max15301.c
 +
  MAX16065 HARDWARE MONITOR DRIVER
  M:    Guenter Roeck <linux@roeck-us.net>
  L:    linux-hwmon@vger.kernel.org
@@@ -11138,7 -10896,7 +11138,7 @@@ F:   drivers/regulator/max77802-regulator
  F:    include/dt-bindings/*/*max77802.h
  
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
@@@ -11147,7 -10905,7 +11147,7 @@@ F:   drivers/power/supply/max77693_charge
  
  MAXIM PMIC AND MUIC DRIVERS FOR EXYNOS BASED BOARDS
  M:    Chanwoo Choi <cw00.choi@samsung.com>
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  S:    Supported
@@@ -11175,7 -10933,7 +11175,7 @@@ T:   git git://linuxtv.org/media_tree.gi
  F:    drivers/media/radio/radio-maxiradio*
  
  MCAN MMIO DEVICE DRIVER
 -M:    Pankaj Sharma <pankj.sharma@samsung.com>
 +M:    Chandrasekar Ramakrishnan <rcsekar@samsung.com>
  L:    linux-can@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/net/can/bosch,m_can.yaml
@@@ -11373,12 -11131,12 +11373,12 @@@ F:        drivers/media/platform/renesas-ceu.
  F:    include/media/drv-intf/renesas-ceu.h
  
  MEDIA DRIVERS FOR RENESAS - DRIF
 -M:    Ramesh Shanmugasundaram <rashanmu@gmail.com>
 +M:    Fabrizio Castro <fabrizio.castro.jz@renesas.com>
  L:    linux-media@vger.kernel.org
  L:    linux-renesas-soc@vger.kernel.org
  S:    Supported
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/renesas,drif.txt
 +F:    Documentation/devicetree/bindings/media/renesas,drif.yaml
  F:    drivers/media/platform/rcar_drif.c
  
  MEDIA DRIVERS FOR RENESAS - FCP
@@@ -11547,7 -11305,7 +11547,7 @@@ F:   drivers/media/platform/mtk-vpu
  MEDIATEK MMC/SD/SDIO DRIVER
  M:    Chaotian Jing <chaotian.jing@mediatek.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/mmc/mtk-sd.txt
 +F:    Documentation/devicetree/bindings/mmc/mtk-sd.yaml
  F:    drivers/mmc/host/mtk-sd.c
  
  MEDIATEK MT76 WIRELESS LAN DRIVER
@@@ -11564,12 -11322,6 +11564,12 @@@ L: linux-wireless@vger.kernel.or
  S:    Maintained
  F:    drivers/net/wireless/mediatek/mt7601u/
  
 +MEDIATEK MT7621 CLOCK DRIVER
 +M:    Sergio Paracuellos <sergio.paracuellos@gmail.com>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/clock/mediatek,mt7621-sysc.yaml
 +F:    drivers/clk/ralink/clk-mt7621.c
 +
  MEDIATEK MT7621/28/88 I2C DRIVER
  M:    Stefan Roese <sr@denx.de>
  L:    linux-i2c@vger.kernel.org
@@@ -11712,8 -11464,8 +11712,8 @@@ Q:   https://patchwork.kernel.org/project
  F:    drivers/net/ethernet/mellanox/mlxfw/
  
  MELLANOX HARDWARE PLATFORM SUPPORT
 -M:    Andy Shevchenko <andy@infradead.org>
 -M:    Darren Hart <dvhart@infradead.org>
 +M:    Hans de Goede <hdegoede@redhat.com>
 +M:    Mark Gross <mgross@linux.intel.com>
  M:    Vadim Pasternak <vadimp@nvidia.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Supported
@@@ -11804,7 -11556,7 +11804,7 @@@ F:   include/linux/memblock.
  F:    mm/memblock.c
  
  MEMORY CONTROLLER DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/krzk/linux-mem-ctrl.git
@@@ -11832,7 -11584,6 +11832,7 @@@ F:   include/linux/gfp.
  F:    include/linux/memory_hotplug.h
  F:    include/linux/mm.h
  F:    include/linux/mmzone.h
 +F:    include/linux/pagewalk.h
  F:    include/linux/vmalloc.h
  F:    mm/
  
@@@ -12073,7 -11824,7 +12073,7 @@@ MICROCHIP SAMA5D2-COMPATIBLE ADC DRIVE
  M:    Eugen Hristev <eugen.hristev@microchip.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/adc/at91-sama5d2_adc.txt
 +F:    Documentation/devicetree/bindings/iio/adc/atmel,sama5d2-adc.yaml
  F:    drivers/iio/adc/at91-sama5d2_adc.c
  F:    include/dt-bindings/iio/adc/at91-sama5d2_adc.h
  
@@@ -12137,22 -11888,6 +12137,22 @@@ F: drivers/scsi/smartpqi/smartpqi*.[ch
  F:    include/linux/cciss*.h
  F:    include/uapi/linux/cciss*.h
  
 +MICROSOFT SURFACE BATTERY AND AC DRIVERS
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    linux-pm@vger.kernel.org
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/power/supply/surface_battery.c
 +F:    drivers/power/supply/surface_charger.c
 +
 +MICROSOFT SURFACE DTX DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/driver-api/surface_aggregator/clients/dtx.rst
 +F:    drivers/platform/surface/surface_dtx.c
 +F:    include/uapi/linux/surface_aggregator/dtx.h
 +
  MICROSOFT SURFACE GPE LID SUPPORT DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12168,25 -11903,12 +12168,25 @@@ S:        Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
  F:    drivers/platform/surface/
  
 +MICROSOFT SURFACE HID TRANSPORT DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    linux-input@vger.kernel.org
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/hid/surface-hid/
 +
  MICROSOFT SURFACE HOT-PLUG DRIVER
  M:    Maximilian Luz <luzmaximilian@gmail.com>
  L:    platform-driver-x86@vger.kernel.org
  S:    Maintained
  F:    drivers/platform/surface/surface_hotplug.c
  
 +MICROSOFT SURFACE PLATFORM PROFILE DRIVER
 +M:    Maximilian Luz <luzmaximilian@gmail.com>
 +L:    platform-driver-x86@vger.kernel.org
 +S:    Maintained
 +F:    drivers/platform/surface/surface_platform_profile.c
 +
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
  M:    Chen Yu <yu.c.chen@intel.com>
  L:    platform-driver-x86@vger.kernel.org
@@@ -12202,7 -11924,6 +12202,7 @@@ F:   Documentation/driver-api/surface_agg
  F:    drivers/platform/surface/aggregator/
  F:    drivers/platform/surface/surface_acpi_notify.c
  F:    drivers/platform/surface/surface_aggregator_cdev.c
 +F:    drivers/platform/surface/surface_aggregator_registry.c
  F:    include/linux/surface_acpi_notify.h
  F:    include/linux/surface_aggregator/
  F:    include/uapi/linux/surface_aggregator/
@@@ -12394,7 -12115,8 +12394,7 @@@ F:   drivers/media/pci/meye
  F:    include/uapi/linux/meye.h
  
  MOXA SMARTIO/INDUSTIO/INTELLIO SERIAL CARD
 -M:    Jiri Slaby <jirislaby@kernel.org>
 -S:    Maintained
 +S:    Orphan
  F:    Documentation/driver-api/serial/moxa-smartio.rst
  F:    drivers/tty/mxser.*
  
@@@ -12538,6 -12260,11 +12538,6 @@@ F:  drivers/mux
  F:    include/dt-bindings/mux/
  F:    include/linux/mux/
  
 -MULTITECH MULTIPORT CARD (ISICOM)
 -S:    Orphan
 -F:    drivers/tty/isicom.c
 -F:    include/linux/isicom.h
 -
  MUSB MULTIPOINT HIGH SPEED DUAL-ROLE CONTROLLER
  M:    Bin Liu <b-liu@ti.com>
  L:    linux-usb@vger.kernel.org
@@@ -12685,15 -12412,6 +12685,15 @@@ F: include/net/netrom.
  F:    include/uapi/linux/netrom.h
  F:    net/netrom/
  
 +NETRONIX EMBEDDED CONTROLLER
 +M:    Jonathan Neuschäfer <j.neuschaefer@gmx.net>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mfd/netronix,ntxec.yaml
 +F:    drivers/mfd/ntxec.c
 +F:    drivers/pwm/pwm-ntxec.c
 +F:    drivers/rtc/rtc-ntxec.c
 +F:    include/linux/mfd/ntxec.h
 +
  NETRONOME ETHERNET DRIVERS
  M:    Simon Horman <simon.horman@netronome.com>
  R:    Jakub Kicinski <kuba@kernel.org>
@@@ -12852,7 -12570,6 +12852,7 @@@ W:   https://github.com/multipath-tcp/mpt
  B:    https://github.com/multipath-tcp/mptcp_net-next/issues
  F:    Documentation/networking/mptcp-sysctl.rst
  F:    include/net/mptcp.h
 +F:    include/trace/events/mptcp.h
  F:    include/uapi/linux/mptcp.h
  F:    net/mptcp/
  F:    tools/testing/selftests/net/mptcp/
@@@ -13137,12 -12854,6 +13137,12 @@@ F: drivers/nvmem
  F:    include/linux/nvmem-consumer.h
  F:    include/linux/nvmem-provider.h
  
 +NXP C45 TJA11XX PHY DRIVER
 +M:    Radu Pirea <radu-nicolae.pirea@oss.nxp.com>
 +L:    netdev@vger.kernel.org
 +S:    Maintained
 +F:    drivers/net/phy/nxp-c45-tja11xx.c
 +
  NXP FSPI DRIVER
  M:    Ashish Kumar <ashish.kumar@nxp.com>
  R:    Yogesh Gaur <yogeshgaur.83@gmail.com>
@@@ -13183,7 -12894,7 +13183,7 @@@ F:   Documentation/devicetree/bindings/re
  F:    drivers/regulator/pf8x00-regulator.c
  
  NXP PTN5150A CC LOGIC AND EXTCON DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/devicetree/bindings/extcon/extcon-ptn5150.yaml
@@@ -13226,21 -12937,6 +13226,21 @@@ L: linux-nfc@lists.01.org (moderated fo
  S:    Supported
  F:    drivers/nfc/nxp-nci
  
 +NXP i.MX 8QXP/8QM JPEG V4L2 DRIVER
 +M:    Mirela Rabulea <mirela.rabulea@nxp.com>
 +R:    NXP Linux Team <linux-imx@nxp.com>
 +L:    linux-media@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/media/imx8-jpeg.yaml
 +F:    drivers/media/platform/imx-jpeg
 +
 +NZXT-KRAKEN2 HARDWARE MONITORING DRIVER
 +M:    Jonas Malaco <jonas@protocubo.io>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/nzxt-kraken2.rst
 +F:    drivers/hwmon/nzxt-kraken2.c
 +
  OBJAGG
  M:    Jiri Pirko <jiri@nvidia.com>
  L:    netdev@vger.kernel.org
@@@ -13515,7 -13211,7 +13515,7 @@@ M:   Rui Miguel Silva <rmfrfs@gmail.com
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
 -F:    Documentation/devicetree/bindings/media/i2c/ov2680.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/ovti,ov2680.yaml
  F:    drivers/media/i2c/ov2680.c
  
  OMNIVISION OV2685 SENSOR DRIVER
@@@ -14023,14 -13719,6 +14023,14 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/pci/fsl,imx6q-pcie.txt
  F:    drivers/pci/controller/dwc/*imx6*
  
 +PCI DRIVER FOR FU740
 +M:    Paul Walmsley <paul.walmsley@sifive.com>
 +M:    Greentime Hu <greentime.hu@sifive.com>
 +L:    linux-pci@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/pci/sifive,fu740-pcie.yaml
 +F:    drivers/pci/controller/dwc/pcie-fu740.c
 +
  PCI DRIVER FOR INTEL VOLUME MANAGEMENT DEVICE (VMD)
  M:    Jonathan Derrick <jonathan.derrick@intel.com>
  L:    linux-pci@vger.kernel.org
@@@ -14115,6 -13803,13 +14115,6 @@@ F:  Documentation/devicetree/bindings/pc
  F:    drivers/pci/controller/cadence/pci-j721e.c
  F:    drivers/pci/controller/dwc/pci-dra7xx.c
  
 -PCI DRIVER FOR TI KEYSTONE
 -M:    Murali Karicheri <m-karicheri2@ti.com>
 -L:    linux-pci@vger.kernel.org
 -L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
 -S:    Maintained
 -F:    drivers/pci/controller/dwc/pci-keystone.c
 -
  PCI DRIVER FOR V3 SEMICONDUCTOR V360EPC
  M:    Linus Walleij <linus.walleij@linaro.org>
  L:    linux-pci@vger.kernel.org
@@@ -14231,6 -13926,7 +14231,6 @@@ PCIE DRIVER FOR HISILICO
  M:    Zhou Wang <wangzhou1@hisilicon.com>
  L:    linux-pci@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/pci/hisilicon-pcie.txt
  F:    drivers/pci/controller/dwc/pcie-hisi.c
  
  PCIE DRIVER FOR HISILICON KIRIN
@@@ -14250,7 -13946,6 +14250,7 @@@ F:   drivers/pci/controller/dwc/pcie-hist
  
  PCIE DRIVER FOR MEDIATEK
  M:    Ryder Lee <ryder.lee@mediatek.com>
 +M:    Jianjun Wang <jianjun.wang@mediatek.com>
  L:    linux-pci@vger.kernel.org
  L:    linux-mediatek@lists.infradead.org
  S:    Supported
@@@ -14352,10 -14047,8 +14352,10 @@@ R: Mark Rutland <mark.rutland@arm.com
  R:    Alexander Shishkin <alexander.shishkin@linux.intel.com>
  R:    Jiri Olsa <jolsa@redhat.com>
  R:    Namhyung Kim <namhyung@kernel.org>
 +L:    linux-perf-users@vger.kernel.org
  L:    linux-kernel@vger.kernel.org
  S:    Supported
 +W:    https://perf.wiki.kernel.org/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git perf/core
  F:    arch/*/events/*
  F:    arch/*/events/*/*
@@@ -14437,7 -14130,7 +14437,7 @@@ L:   linux-gpio@vger.kernel.or
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git
  F:    Documentation/devicetree/bindings/pinctrl/
 -F:    Documentation/driver-api/pinctl.rst
 +F:    Documentation/driver-api/pin-control.rst
  F:    drivers/pinctrl/
  F:    include/linux/pinctrl/
  
@@@ -14492,7 -14185,7 +14492,7 @@@ F:   drivers/pinctrl/renesas
  
  PIN CONTROLLER - SAMSUNG
  M:    Tomasz Figa <tomasz.figa@gmail.com>
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
  L:    linux-samsung-soc@vger.kernel.org
@@@ -14613,7 -14306,7 +14613,7 @@@ PNI RM3100 IIO DRIVE
  M:    Song Qiang <songqiang1304521@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.txt
 +F:    Documentation/devicetree/bindings/iio/magnetometer/pni,rm3100.yaml
  F:    drivers/iio/magnetometer/rm3100*
  
  PNP SUPPORT
@@@ -14648,15 -14341,6 +14648,15 @@@ F: include/linux/pm_
  F:    include/linux/powercap.h
  F:    kernel/configs/nopm.config
  
 +DYNAMIC THERMAL POWER MANAGEMENT (DTPM)
 +M:    Daniel Lezcano <daniel.lezcano@kernel.org>
 +L:    linux-pm@vger.kernel.org
 +S:    Supported
 +B:    https://bugzilla.kernel.org
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm
 +F:    drivers/powercap/dtpm*
 +F:    include/linux/dtpm.h
 +
  POWER STATE COORDINATION INTERFACE (PSCI)
  M:    Mark Rutland <mark.rutland@arm.com>
  M:    Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
@@@ -14734,7 -14418,7 +14734,7 @@@ F:   kernel/sched/psi.
  
  PRINTK
  M:    Petr Mladek <pmladek@suse.com>
 -M:    Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
 +M:    Sergey Senozhatsky <senozhatsky@chromium.org>
  R:    Steven Rostedt <rostedt@goodmis.org>
  R:    John Ogness <john.ogness@linutronix.de>
  S:    Maintained
@@@ -15126,7 -14810,7 +15126,7 @@@ M:   Todor Tomov <todor.too@gmail.com
  L:    linux-media@vger.kernel.org
  S:    Maintained
  F:    Documentation/admin-guide/media/qcom_camss.rst
 -F:    Documentation/devicetree/bindings/media/qcom,camss.txt
 +F:    Documentation/devicetree/bindings/media/*camss*
  F:    drivers/media/platform/qcom/camss/
  
  QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER
@@@ -15238,7 -14922,6 +15238,7 @@@ F:   include/linux/if_rmnet.
  
  QUALCOMM TSENS THERMAL DRIVER
  M:    Amit Kucheria <amitk@kernel.org>
 +M:    Thara Gopinath <thara.gopinath@linaro.org>
  L:    linux-pm@vger.kernel.org
  L:    linux-arm-msm@vger.kernel.org
  S:    Maintained
@@@ -15272,7 -14955,6 +15272,7 @@@ F:   drivers/net/wireless/quantenn
  RADEON and AMDGPU DRM DRIVERS
  M:    Alex Deucher <alexander.deucher@amd.com>
  M:    Christian König <christian.koenig@amd.com>
 +M:    Pan, Xinhui <Xinhui.Pan@amd.com>
  L:    amd-gfx@lists.freedesktop.org
  S:    Supported
  T:    git https://gitlab.freedesktop.org/agd5f/linux.git
@@@ -15427,7 -15109,7 +15427,7 @@@ M:   Laurent Pinchart <laurent.pinchart+r
  M:    Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
  L:    linux-media@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/media/i2c/rdacm2x-gmsl.yaml
 +F:    Documentation/devicetree/bindings/media/i2c/imi,rdacm2x-gmsl.yaml
  F:    drivers/media/i2c/max9271.c
  F:    drivers/media/i2c/max9271.h
  F:    drivers/media/i2c/rdacm21.c
@@@ -15606,7 -15288,7 +15606,7 @@@ RENESAS R-CAR GYROADC DRIVE
  M:    Marek Vasut <marek.vasut@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/adc/renesas,gyroadc.txt
 +F:    Documentation/devicetree/bindings/iio/adc/renesas,rcar-gyroadc.yaml
  F:    drivers/iio/adc/rcar-gyroadc.c
  
  RENESAS R-CAR I2C DRIVERS
@@@ -15710,8 -15392,8 +15710,8 @@@ N:   risc
  K:    riscv
  
  RNBD BLOCK DRIVERS
 -M:    Danil Kipnis <danil.kipnis@cloud.ionos.com>
 -M:    Jack Wang <jinpu.wang@cloud.ionos.com>
 +M:    Md. Haris Iqbal <haris.iqbal@ionos.com>
 +M:    Jack Wang <jinpu.wang@ionos.com>
  L:    linux-block@vger.kernel.org
  S:    Maintained
  F:    drivers/block/rnbd/
@@@ -15759,6 -15441,12 +15759,6 @@@ L:  netdev@vger.kernel.or
  S:    Supported
  F:    drivers/net/ethernet/rocker/
  
 -ROCKETPORT DRIVER
 -S:    Maintained
 -W:    http://www.comtrol.com
 -F:    Documentation/driver-api/serial/rocket.rst
 -F:    drivers/tty/rocket*
 -
  ROCKETPORT EXPRESS/INFINITY DRIVER
  M:    Kevin Cernekee <cernekee@gmail.com>
  L:    linux-serial@vger.kernel.org
@@@ -15797,27 -15485,20 +15797,27 @@@ F:        Documentation/devicetree/bindings/mf
  F:    Documentation/devicetree/bindings/regulator/rohm,bd70528-regulator.txt
  F:    drivers/clk/clk-bd718x7.c
  F:    drivers/gpio/gpio-bd70528.c
 +F:    drivers/gpio/gpio-bd71815.c
  F:    drivers/gpio/gpio-bd71828.c
  F:    drivers/mfd/rohm-bd70528.c
  F:    drivers/mfd/rohm-bd71828.c
  F:    drivers/mfd/rohm-bd718x7.c
 +F:    drivers/mfd/rohm-bd9576.c
  F:    drivers/power/supply/bd70528-charger.c
  F:    drivers/regulator/bd70528-regulator.c
 +F:    drivers/regulator/bd71815-regulator.c
  F:    drivers/regulator/bd71828-regulator.c
  F:    drivers/regulator/bd718x7-regulator.c
 +F:    drivers/regulator/bd9576-regulator.c
  F:    drivers/regulator/rohm-regulator.c
  F:    drivers/rtc/rtc-bd70528.c
  F:    drivers/watchdog/bd70528_wdt.c
 +F:    drivers/watchdog/bd9576_wdt.c
  F:    include/linux/mfd/rohm-bd70528.h
 +F:    include/linux/mfd/rohm-bd71815.h
  F:    include/linux/mfd/rohm-bd71828.h
  F:    include/linux/mfd/rohm-bd718x7.h
 +F:    include/linux/mfd/rohm-bd957x.h
  F:    include/linux/mfd/rohm-generic.h
  F:    include/linux/mfd/rohm-shared.h
  
@@@ -15831,7 -15512,7 +15831,7 @@@ F:   include/uapi/linux/rose.
  F:    net/rose/
  
  ROTATION DRIVER FOR ALLWINNER A83T
 -M:    Jernej Skrabec <jernej.skrabec@siol.net>
 +M:    Jernej Skrabec <jernej.skrabec@gmail.com>
  L:    linux-media@vger.kernel.org
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -15893,15 -15574,14 +15893,15 @@@ T:        git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/realtek/rtl8xxxu/
  
  RTRS TRANSPORT DRIVERS
 -M:    Danil Kipnis <danil.kipnis@cloud.ionos.com>
 -M:    Jack Wang <jinpu.wang@cloud.ionos.com>
 +M:    Md. Haris Iqbal <haris.iqbal@ionos.com>
 +M:    Jack Wang <jinpu.wang@ionos.com>
  L:    linux-rdma@vger.kernel.org
  S:    Maintained
  F:    drivers/infiniband/ulp/rtrs/
  
  RXRPC SOCKETS (AF_RXRPC)
  M:    David Howells <dhowells@redhat.com>
 +M:    Marc Dionne <marc.dionne@auristor.com>
  L:    linux-afs@lists.infradead.org
  S:    Supported
  W:    https://www.infradead.org/~dhowells/kafs/
@@@ -16033,13 -15713,6 +16033,13 @@@ S: Supporte
  W:    http://www.ibm.com/developerworks/linux/linux390/
  F:    drivers/s390/scsi/zfcp_*
  
 +S3C ADC BATTERY DRIVER
 +M:    Krzysztof Kozlowski <krzk@kernel.org>
 +L:    linux-samsung-soc@vger.kernel.org
 +S:    Odd Fixes
 +F:    drivers/power/supply/s3c_adc_battery.c
 +F:    include/linux/s3c_adc_battery.h
 +
  S3C24XX SD/MMC Driver
  M:    Ben Dooks <ben-linux@fluff.org>
  L:    linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
@@@ -16079,7 -15752,7 +16079,7 @@@ F:   Documentation/admin-guide/LSM/SafeSe
  F:    security/safesetid/
  
  SAMSUNG AUDIO (ASoC) DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Sylwester Nawrocki <s.nawrocki@samsung.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
  S:    Supported
@@@ -16087,7 -15760,7 +16087,7 @@@ F:   Documentation/devicetree/bindings/so
  F:    sound/soc/samsung/
  
  SAMSUNG EXYNOS PSEUDO RANDOM NUMBER GENERATOR (RNG) DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
  S:    Maintained
@@@ -16122,7 -15795,7 +16122,7 @@@ S:   Maintaine
  F:    drivers/platform/x86/samsung-laptop.c
  
  SAMSUNG MULTIFUNCTION PMIC DEVICE DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
  L:    linux-kernel@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16147,7 -15820,7 +16147,7 @@@ F:   drivers/media/platform/s3c-camif
  F:    include/media/drv-intf/s3c_camif.h
  
  SAMSUNG S3FWRN5 NFC DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Krzysztof Opasiak <k.opasiak@samsung.com>
  L:    linux-nfc@lists.01.org (moderated for non-subscribers)
  S:    Maintained
@@@ -16167,7 -15840,7 +16167,7 @@@ S:   Supporte
  F:    drivers/media/i2c/s5k5baf.c
  
  SAMSUNG S5P Security SubSystem (SSS) DRIVER
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Vladimir Zapolskiy <vz@mleia.com>
  L:    linux-crypto@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16199,7 -15872,7 +16199,7 @@@ F:   include/linux/clk/samsung.
  F:    include/linux/platform_data/clk-s3c2410.h
  
  SAMSUNG SPI DRIVERS
 -M:    Krzysztof Kozlowski <krzk@kernel.org>
 +M:    Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
  M:    Andi Shyti <andi@etezian.org>
  L:    linux-spi@vger.kernel.org
  L:    linux-samsung-soc@vger.kernel.org
@@@ -16962,13 -16635,6 +16962,13 @@@ F: drivers/firmware/arm_sdei.
  F:    include/linux/arm_sdei.h
  F:    include/uapi/linux/arm_sdei.h
  
 +SOFTWARE NODES
 +R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 +R:    Heikki Krogerus <heikki.krogerus@linux.intel.com>
 +L:    linux-acpi@vger.kernel.org
 +S:    Maintained
 +F:    drivers/base/swnode.c
 +
  SOFTWARE RAID (Multiple Disks) SUPPORT
  M:    Song Liu <song@kernel.org>
  L:    linux-raid@vger.kernel.org
@@@ -17231,8 -16897,6 +17231,8 @@@ F:   arch/arm/mach-spear
  
  SPI NOR SUBSYSTEM
  M:    Tudor Ambarus <tudor.ambarus@microchip.com>
 +R:    Michael Walle <michael@walle.cc>
 +R:    Pratyush Yadav <p.yadav@ti.com>
  L:    linux-mtd@lists.infradead.org
  S:    Maintained
  W:    http://www.linux-mtd.infradead.org/
@@@ -17302,7 -16966,7 +17302,7 @@@ M:   Lorenzo Bianconi <lorenzo.bianconi83
  L:    linux-iio@vger.kernel.org
  S:    Maintained
  W:    http://www.st.com/
 -F:    Documentation/devicetree/bindings/iio/imu/st_lsm6dsx.txt
 +F:    Documentation/devicetree/bindings/iio/imu/st,lsm6dsx.yaml
  F:    drivers/iio/imu/st_lsm6dsx/
  
  ST MIPID02 CSI-2 TO PARALLEL BRIDGE DRIVER
@@@ -17320,18 -16984,11 +17320,18 @@@ L:        linux-i2c@vger.kernel.or
  S:    Maintained
  F:    drivers/i2c/busses/i2c-stm32*
  
 +ST STPDDC60 DRIVER
 +M:    Daniel Nilsson <daniel.nilsson@flex.com>
 +L:    linux-hwmon@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/hwmon/stpddc60.rst
 +F:    drivers/hwmon/pmbus/stpddc60.c
 +
  ST VL53L0X ToF RANGER(I2C) IIO DRIVER
  M:    Song Qiang <songqiang1304521@gmail.com>
  L:    linux-iio@vger.kernel.org
  S:    Maintained
 -F:    Documentation/devicetree/bindings/iio/proximity/vl53l0x.txt
 +F:    Documentation/devicetree/bindings/iio/proximity/st,vl53l0x.yaml
  F:    drivers/iio/proximity/vl53l0x-i2c.c
  
  STABLE BRANCH
@@@ -17348,6 -17005,12 +17348,6 @@@ L:  linux-media@vger.kernel.or
  S:    Maintained
  F:    drivers/staging/media/atomisp/
  
 -STAGING - COMEDI
 -M:    Ian Abbott <abbotti@mev.co.uk>
 -M:    H Hartley Sweeten <hsweeten@visionengravers.com>
 -S:    Odd Fixes
 -F:    drivers/staging/comedi/
 -
  STAGING - FIELDBUS SUBSYSTEM
  M:    Sven Van Asbroeck <TheSven73@gmail.com>
  S:    Maintained
@@@ -17645,7 -17308,7 +17645,7 @@@ F:   drivers/spi/spi-dw
  SYNOPSYS DESIGNWARE AXI DMAC DRIVER
  M:    Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
  S:    Maintained
 -F:    Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.txt
 +F:    Documentation/devicetree/bindings/dma/snps,dw-axi-dmac.yaml
  F:    drivers/dma/dw-axi-dmac/
  
  SYNOPSYS DESIGNWARE DMAC DRIVER
@@@ -18061,7 -17724,7 +18061,7 @@@ TEXAS INSTRUMENTS' DAC7612 DAC DRIVE
  M:    Ricardo Ribalda <ribalda@kernel.org>
  L:    linux-iio@vger.kernel.org
  S:    Supported
 -F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.txt
 +F:    Documentation/devicetree/bindings/iio/dac/ti,dac7612.yaml
  F:    drivers/iio/dac/ti-dac7612.c
  
  TEXAS INSTRUMENTS DMA DRIVERS
@@@ -18145,7 -17808,7 +18145,7 @@@ THERMAL/CPU_COOLIN
  M:    Amit Daniel Kachhap <amit.kachhap@gmail.com>
  M:    Daniel Lezcano <daniel.lezcano@linaro.org>
  M:    Viresh Kumar <viresh.kumar@linaro.org>
 -M:    Javi Merino <javi.merino@kernel.org>
 +R:    Lukasz Luba <lukasz.luba@arm.com>
  L:    linux-pm@vger.kernel.org
  S:    Supported
  F:    Documentation/driver-api/thermal/cpu-cooling-api.rst
@@@ -18203,13 -17866,6 +18203,13 @@@ M: Robert Richter <rric@kernel.org
  S:    Odd Fixes
  F:    drivers/gpio/gpio-thunderx.c
  
 +TI ADS131E0X ADC SERIES DRIVER
 +M:    Tomislav Denis <tomislav.denis@avl.com>
 +L:    linux-iio@vger.kernel.org
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/adc/ti,ads131e08.yaml
 +F:    drivers/iio/adc/ti-ads131e08.c
 +
  TI AM437X VPFE DRIVER
  M:    "Lad, Prabhakar" <prabhakar.csengg@gmail.com>
  L:    linux-media@vger.kernel.org
@@@ -18318,6 -17974,36 +18318,6 @@@ S:  Maintaine
  F:    sound/soc/codecs/isabelle*
  F:    sound/soc/codecs/lm49453*
  
 -TI LP855x BACKLIGHT DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    Documentation/driver-api/backlight/lp855x-driver.rst
 -F:    drivers/video/backlight/lp855x_bl.c
 -F:    include/linux/platform_data/lp855x.h
 -
 -TI LP8727 CHARGER DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    drivers/power/supply/lp8727_charger.c
 -F:    include/linux/platform_data/lp8727.h
 -
 -TI LP8788 MFD DRIVER
 -M:    Milo Kim <milo.kim@ti.com>
 -S:    Maintained
 -F:    drivers/iio/adc/lp8788_adc.c
 -F:    drivers/leds/leds-lp8788.c
 -F:    drivers/mfd/lp8788*.c
 -F:    drivers/power/supply/lp8788-charger.c
 -F:    drivers/regulator/lp8788-*.c
 -F:    include/linux/mfd/lp8788*.h
 -
 -TI NETCP ETHERNET DRIVER
 -M:    Wingman Kwok <w-kwok2@ti.com>
 -M:    Murali Karicheri <m-karicheri2@ti.com>
 -L:    netdev@vger.kernel.org
 -S:    Maintained
 -F:    drivers/net/ethernet/ti/netcp*
 -
  TI PCM3060 ASoC CODEC DRIVER
  M:    Kirill Marinushkin <kmarinushkin@birdec.com>
  L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
@@@ -18331,6 -18017,12 +18331,6 @@@ L:  alsa-devel@alsa-project.org (moderat
  S:    Odd Fixes
  F:    sound/soc/codecs/tas571x*
  
 -TI TCAN4X5X DEVICE DRIVER
 -L:    linux-can@vger.kernel.org
 -S:    Maintained
 -F:    Documentation/devicetree/bindings/net/can/tcan4x5x.txt
 -F:    drivers/net/can/m_can/tcan4x5x*
 -
  TI TRF7970A NFC DRIVER
  M:    Mark Greer <mgreer@animalcreek.com>
  L:    linux-wireless@vger.kernel.org
@@@ -19430,15 -19122,6 +19430,15 @@@ W: https://virtio-mem.gitlab.io
  F:    drivers/virtio/virtio_mem.c
  F:    include/uapi/linux/virtio_mem.h
  
 +VIRTIO SOUND DRIVER
 +M:    Anton Yakovlev <anton.yakovlev@opensynergy.com>
 +M:    "Michael S. Tsirkin" <mst@redhat.com>
 +L:    virtualization@lists.linux-foundation.org
 +L:    alsa-devel@alsa-project.org (moderated for non-subscribers)
 +S:    Maintained
 +F:    include/uapi/linux/virtio_snd.h
 +F:    sound/virtio/*
 +
  VIRTUAL BOX GUEST DEVICE DRIVER
  M:    Hans de Goede <hdegoede@redhat.com>
  M:    Arnd Bergmann <arnd@arndb.de>
@@@ -19577,7 -19260,7 +19577,7 @@@ F:   drivers/net/vrf.
  VSPRINTF
  M:    Petr Mladek <pmladek@suse.com>
  M:    Steven Rostedt <rostedt@goodmis.org>
 -M:    Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
 +M:    Sergey Senozhatsky <senozhatsky@chromium.org>
  R:    Andy Shevchenko <andriy.shevchenko@linux.intel.com>
  R:    Rasmus Villemoes <linux@rasmusvillemoes.dk>
  S:    Maintained
@@@ -19731,6 -19414,7 +19731,6 @@@ F:   Documentation/devicetree/bindings/so
  F:    Documentation/hwmon/wm83??.rst
  F:    arch/arm/mach-s3c/mach-crag6410*
  F:    drivers/clk/clk-wm83*.c
 -F:    drivers/extcon/extcon-arizona.c
  F:    drivers/gpio/gpio-*wm*.c
  F:    drivers/gpio/gpio-arizona.c
  F:    drivers/hwmon/wm83??-hwmon.c
@@@ -19754,7 -19438,7 +19754,7 @@@ F:   include/linux/mfd/wm8400
  F:    include/linux/regulator/arizona*
  F:    include/linux/wm97xx.h
  F:    include/sound/wm????.h
 -F:    sound/soc/codecs/arizona.?
 +F:    sound/soc/codecs/arizona*
  F:    sound/soc/codecs/cs47l24*
  F:    sound/soc/codecs/wm*
  
@@@ -20227,7 -19911,7 +20227,7 @@@ F:   drivers/staging/media/zoran
  ZRAM COMPRESSED RAM BLOCK DEVICE DRVIER
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 -R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
 +R:    Sergey Senozhatsky <senozhatsky@chromium.org>
  L:    linux-kernel@vger.kernel.org
  S:    Maintained
  F:    Documentation/admin-guide/blockdev/zram.rst
@@@ -20241,7 -19925,7 +20241,7 @@@ F:   drivers/tty/serial/zs.
  ZSMALLOC COMPRESSED SLAB MEMORY ALLOCATOR
  M:    Minchan Kim <minchan@kernel.org>
  M:    Nitin Gupta <ngupta@vflare.org>
 -R:    Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
 +R:    Sergey Senozhatsky <senozhatsky@chromium.org>
  L:    linux-mm@kvack.org
  S:    Maintained
  F:    Documentation/vm/zsmalloc.rst
@@@ -56,10 -56,8 +56,10 @@@ amdgpu-y += amdgpu_device.o amdgpu_kms.
        amdgpu_gmc.o amdgpu_mmhub.o amdgpu_xgmi.o amdgpu_csa.o amdgpu_ras.o amdgpu_vm_cpu.o \
        amdgpu_vm_sdma.o amdgpu_discovery.o amdgpu_ras_eeprom.o amdgpu_nbio.o \
        amdgpu_umc.o smu_v11_0_i2c.o amdgpu_fru_eeprom.o amdgpu_rap.o \
-       amdgpu_fw_attestation.o amdgpu_securedisplay.o
+       amdgpu_fw_attestation.o amdgpu_securedisplay.o amdgpu_hdp.o
  
 +amdgpu-$(CONFIG_PROC_FS) += amdgpu_fdinfo.o
 +
  amdgpu-$(CONFIG_PERF_EVENTS) += amdgpu_pmu.o
  
  # add asic specific block
  #include "amdgpu_gfxhub.h"
  #include "amdgpu_df.h"
  #include "amdgpu_smuio.h"
 +#include "amdgpu_fdinfo.h"
  
  #define MAX_GPU_INSTANCE              16
  
@@@ -1075,7 -1074,8 +1075,8 @@@ struct amdgpu_device 
  
        atomic_t                        throttling_logging_enabled;
        struct ratelimit_state          throttling_logging_rs;
-       uint32_t                        ras_features;
+       uint32_t                        ras_hw_enabled;
+       uint32_t                        ras_enabled;
  
        bool                            in_pci_err_recovery;
        struct pci_saved_state          *pci_state;
@@@ -23,7 -23,6 +23,7 @@@
   */
  
  #include <drm/amdgpu_drm.h>
 +#include <drm/drm_aperture.h>
  #include <drm/drm_drv.h>
  #include <drm/drm_gem.h>
  #include <drm/drm_vblank.h>
@@@ -43,7 -42,7 +43,7 @@@
  #include "amdgpu_irq.h"
  #include "amdgpu_dma_buf.h"
  #include "amdgpu_sched.h"
 -
 +#include "amdgpu_fdinfo.h"
  #include "amdgpu_amdkfd.h"
  
  #include "amdgpu_ras.h"
@@@ -288,9 -287,9 +288,9 @@@ module_param_named(msi, amdgpu_msi, int
   *   for SDMA and Video.
   *
   * By default(with no lockup_timeout settings), the timeout for all non-compute(GFX, SDMA and Video)
-  * jobs is 10000. And there is no timeout enforced on compute jobs.
+  * jobs is 10000. The timeout for compute is 60000.
   */
- MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms (default: for bare metal 10000 for non-compute jobs and infinity timeout for compute jobs; "
+ MODULE_PARM_DESC(lockup_timeout, "GPU lockup timeout in ms (default: for bare metal 10000 for non-compute jobs and 60000 for compute jobs; "
                "for passthrough or sriov, 10000 for all jobs."
                " 0: keep default value. negative: infinity timeout), "
                "format: for bare metal [Non-Compute] or [GFX,Compute,SDMA,Video]; "
@@@ -641,7 -640,8 +641,8 @@@ module_param_named(mes, amdgpu_mes, int
  
  /**
   * DOC: noretry (int)
-  * Disable retry faults in the GPU memory controller.
+  * Disable XNACK retry in the SQ by default on GFXv9 hardware. On ASICs that
+  * do not support per-process XNACK this also disables retry page faults.
   * (0 = retry enabled, 1 = retry disabled, -1 auto (default))
   */
  MODULE_PARM_DESC(noretry,
@@@ -1186,6 -1186,7 +1187,7 @@@ static const struct pci_device_id pciid
        {0x1002, 0x7408, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT},
        {0x1002, 0x740C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT},
        {0x1002, 0x740F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT},
+       {0x1002, 0x7410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ALDEBARAN|AMD_EXP_HW_SUPPORT},
  
        {0, 0, 0}
  };
@@@ -1259,7 -1260,7 +1261,7 @@@ static int amdgpu_pci_probe(struct pci_
  #endif
  
        /* Get rid of things like offb */
 -      ret = drm_fb_helper_remove_conflicting_pci_framebuffers(pdev, "amdgpudrmfb");
 +      ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, "amdgpudrmfb");
        if (ret)
                return ret;
  
@@@ -1598,17 -1599,15 +1600,15 @@@ static int amdgpu_pmops_runtime_idle(st
        if (amdgpu_device_has_dc_support(adev)) {
                struct drm_crtc *crtc;
  
-               drm_modeset_lock_all(drm_dev);
                drm_for_each_crtc(crtc, drm_dev) {
-                       if (crtc->state->active) {
+                       drm_modeset_lock(&crtc->mutex, NULL);
+                       if (crtc->state->active)
                                ret = -EBUSY;
+                       drm_modeset_unlock(&crtc->mutex);
+                       if (ret < 0)
                                break;
-                       }
                }
  
-               drm_modeset_unlock_all(drm_dev);
        } else {
                struct drm_connector *list_connector;
                struct drm_connector_list_iter iter;
@@@ -1695,9 -1694,6 +1695,9 @@@ static const struct file_operations amd
  #ifdef CONFIG_COMPAT
        .compat_ioctl = amdgpu_kms_compat_ioctl,
  #endif
 +#ifdef CONFIG_PROC_FS
 +      .show_fdinfo = amdgpu_show_fdinfo
 +#endif
  };
  
  int amdgpu_file_to_fpriv(struct file *filp, struct amdgpu_fpriv **fpriv)
@@@ -24,7 -24,8 +24,8 @@@
  
  #include "amdgpu.h"
  
- static inline struct amdgpu_gtt_mgr *to_gtt_mgr(struct ttm_resource_manager *man)
+ static inline struct amdgpu_gtt_mgr *
+ to_gtt_mgr(struct ttm_resource_manager *man)
  {
        return container_of(man, struct amdgpu_gtt_mgr, manager);
  }
@@@ -43,12 -44,14 +44,14 @@@ struct amdgpu_gtt_node 
   * the GTT block, in bytes
   */
  static ssize_t amdgpu_mem_info_gtt_total_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
+                                             struct device_attribute *attr,
+                                             char *buf)
  {
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(ddev);
-       struct ttm_resource_manager *man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
+       struct ttm_resource_manager *man;
  
+       man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
        return sysfs_emit(buf, "%llu\n", man->size * PAGE_SIZE);
  }
  
   * size of the GTT block, in bytes
   */
  static ssize_t amdgpu_mem_info_gtt_used_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
+                                            struct device_attribute *attr,
+                                            char *buf)
  {
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(ddev);
-       struct ttm_resource_manager *man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
+       struct ttm_resource_manager *man;
  
+       man = ttm_manager_type(&adev->mman.bdev, TTM_PL_TT);
        return sysfs_emit(buf, "%llu\n", amdgpu_gtt_mgr_usage(man));
  }
  
@@@ -75,80 -80,6 +80,6 @@@ static DEVICE_ATTR(mem_info_gtt_total, 
  static DEVICE_ATTR(mem_info_gtt_used, S_IRUGO,
                   amdgpu_mem_info_gtt_used_show, NULL);
  
- static const struct ttm_resource_manager_func amdgpu_gtt_mgr_func;
- /**
-  * amdgpu_gtt_mgr_init - init GTT manager and DRM MM
-  *
-  * @adev: amdgpu_device pointer
-  * @gtt_size: maximum size of GTT
-  *
-  * Allocate and initialize the GTT manager.
-  */
- int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
- {
-       struct amdgpu_gtt_mgr *mgr = &adev->mman.gtt_mgr;
-       struct ttm_resource_manager *man = &mgr->manager;
-       uint64_t start, size;
-       int ret;
-       man->use_tt = true;
-       man->func = &amdgpu_gtt_mgr_func;
-       ttm_resource_manager_init(man, gtt_size >> PAGE_SHIFT);
-       start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
-       size = (adev->gmc.gart_size >> PAGE_SHIFT) - start;
-       drm_mm_init(&mgr->mm, start, size);
-       spin_lock_init(&mgr->lock);
-       atomic64_set(&mgr->available, gtt_size >> PAGE_SHIFT);
-       ret = device_create_file(adev->dev, &dev_attr_mem_info_gtt_total);
-       if (ret) {
-               DRM_ERROR("Failed to create device file mem_info_gtt_total\n");
-               return ret;
-       }
-       ret = device_create_file(adev->dev, &dev_attr_mem_info_gtt_used);
-       if (ret) {
-               DRM_ERROR("Failed to create device file mem_info_gtt_used\n");
-               return ret;
-       }
-       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_TT, &mgr->manager);
-       ttm_resource_manager_set_used(man, true);
-       return 0;
- }
- /**
-  * amdgpu_gtt_mgr_fini - free and destroy GTT manager
-  *
-  * @adev: amdgpu_device pointer
-  *
-  * Destroy and free the GTT manager, returns -EBUSY if ranges are still
-  * allocated inside it.
-  */
- void amdgpu_gtt_mgr_fini(struct amdgpu_device *adev)
- {
-       struct amdgpu_gtt_mgr *mgr = &adev->mman.gtt_mgr;
-       struct ttm_resource_manager *man = &mgr->manager;
-       int ret;
-       ttm_resource_manager_set_used(man, false);
-       ret = ttm_resource_manager_evict_all(&adev->mman.bdev, man);
-       if (ret)
-               return;
-       spin_lock(&mgr->lock);
-       drm_mm_takedown(&mgr->mm);
-       spin_unlock(&mgr->lock);
-       device_remove_file(adev->dev, &dev_attr_mem_info_gtt_total);
-       device_remove_file(adev->dev, &dev_attr_mem_info_gtt_used);
-       ttm_resource_manager_cleanup(man);
-       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_TT, NULL);
- }
  /**
   * amdgpu_gtt_mgr_has_gart_addr - Check if mem has address space
   *
@@@ -205,7 -136,7 +136,7 @@@ static int amdgpu_gtt_mgr_new(struct tt
  
        spin_lock(&mgr->lock);
        r = drm_mm_insert_node_in_range(&mgr->mm, &node->node, mem->num_pages,
 -                                      mem->page_alignment, 0, place->fpfn,
 +                                      tbo->page_alignment, 0, place->fpfn,
                                        place->lpfn, DRM_MM_INSERT_BEST);
        spin_unlock(&mgr->lock);
  
@@@ -265,6 -196,13 +196,13 @@@ uint64_t amdgpu_gtt_mgr_usage(struct tt
        return (result > 0 ? result : 0) * PAGE_SIZE;
  }
  
+ /**
+  * amdgpu_gtt_mgr_recover - re-init gart
+  *
+  * @man: TTM memory type manager
+  *
+  * Re-init the gart for each known BO in the GTT.
+  */
  int amdgpu_gtt_mgr_recover(struct ttm_resource_manager *man)
  {
        struct amdgpu_gtt_mgr *mgr = to_gtt_mgr(man);
@@@ -311,3 -249,76 +249,76 @@@ static const struct ttm_resource_manage
        .free = amdgpu_gtt_mgr_del,
        .debug = amdgpu_gtt_mgr_debug
  };
+ /**
+  * amdgpu_gtt_mgr_init - init GTT manager and DRM MM
+  *
+  * @adev: amdgpu_device pointer
+  * @gtt_size: maximum size of GTT
+  *
+  * Allocate and initialize the GTT manager.
+  */
+ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size)
+ {
+       struct amdgpu_gtt_mgr *mgr = &adev->mman.gtt_mgr;
+       struct ttm_resource_manager *man = &mgr->manager;
+       uint64_t start, size;
+       int ret;
+       man->use_tt = true;
+       man->func = &amdgpu_gtt_mgr_func;
+       ttm_resource_manager_init(man, gtt_size >> PAGE_SHIFT);
+       start = AMDGPU_GTT_MAX_TRANSFER_SIZE * AMDGPU_GTT_NUM_TRANSFER_WINDOWS;
+       size = (adev->gmc.gart_size >> PAGE_SHIFT) - start;
+       drm_mm_init(&mgr->mm, start, size);
+       spin_lock_init(&mgr->lock);
+       atomic64_set(&mgr->available, gtt_size >> PAGE_SHIFT);
+       ret = device_create_file(adev->dev, &dev_attr_mem_info_gtt_total);
+       if (ret) {
+               DRM_ERROR("Failed to create device file mem_info_gtt_total\n");
+               return ret;
+       }
+       ret = device_create_file(adev->dev, &dev_attr_mem_info_gtt_used);
+       if (ret) {
+               DRM_ERROR("Failed to create device file mem_info_gtt_used\n");
+               return ret;
+       }
+       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_TT, &mgr->manager);
+       ttm_resource_manager_set_used(man, true);
+       return 0;
+ }
+ /**
+  * amdgpu_gtt_mgr_fini - free and destroy GTT manager
+  *
+  * @adev: amdgpu_device pointer
+  *
+  * Destroy and free the GTT manager, returns -EBUSY if ranges are still
+  * allocated inside it.
+  */
+ void amdgpu_gtt_mgr_fini(struct amdgpu_device *adev)
+ {
+       struct amdgpu_gtt_mgr *mgr = &adev->mman.gtt_mgr;
+       struct ttm_resource_manager *man = &mgr->manager;
+       int ret;
+       ttm_resource_manager_set_used(man, false);
+       ret = ttm_resource_manager_evict_all(&adev->mman.bdev, man);
+       if (ret)
+               return;
+       spin_lock(&mgr->lock);
+       drm_mm_takedown(&mgr->mm);
+       spin_unlock(&mgr->lock);
+       device_remove_file(adev->dev, &dev_attr_mem_info_gtt_total);
+       device_remove_file(adev->dev, &dev_attr_mem_info_gtt_used);
+       ttm_resource_manager_cleanup(man);
+       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_TT, NULL);
+ }
   *
   */
  
 -/**
 - * amdgpu_bo_subtract_pin_size - Remove BO from pin_size accounting
 - *
 - * @bo: &amdgpu_bo buffer object
 - *
 - * This function is called when a BO stops being pinned, and updates the
 - * &amdgpu_device pin_size values accordingly.
 - */
 -static void amdgpu_bo_subtract_pin_size(struct amdgpu_bo *bo)
 -{
 -      struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
 -
 -      if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
 -              atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size);
 -              atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo),
 -                           &adev->visible_pin_size);
 -      } else if (bo->tbo.mem.mem_type == TTM_PL_TT) {
 -              atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size);
 -      }
 -}
 -
  static void amdgpu_bo_destroy(struct ttm_buffer_object *tbo)
  {
        struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev);
        struct amdgpu_bo *bo = ttm_to_amdgpu_bo(tbo);
        struct amdgpu_bo_user *ubo;
  
 -      if (bo->tbo.pin_count > 0)
 -              amdgpu_bo_subtract_pin_size(bo);
 -
        amdgpu_bo_kunmap(bo);
  
        if (bo->tbo.base.import_attach)
@@@ -491,7 -515,18 +491,18 @@@ bool amdgpu_bo_support_uswc(u64 bo_flag
  #endif
  }
  
- static int amdgpu_bo_do_create(struct amdgpu_device *adev,
+ /**
+  * amdgpu_bo_create - create an &amdgpu_bo buffer object
+  * @adev: amdgpu device object
+  * @bp: parameters to be used for the buffer object
+  * @bo_ptr: pointer to the buffer object pointer
+  *
+  * Creates an &amdgpu_bo buffer object.
+  *
+  * Returns:
+  * 0 for success or a negative error code on failure.
+  */
+ int amdgpu_bo_create(struct amdgpu_device *adev,
                               struct amdgpu_bo_param *bp,
                               struct amdgpu_bo **bo_ptr)
  {
@@@ -601,9 -636,9 +612,9 @@@ fail_unreserve
        return r;
  }
  
static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
-                                  unsigned long size,
-                                  struct amdgpu_bo *bo)
+ int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
+                           unsigned long size,
+                           struct amdgpu_bo *bo)
  {
        struct amdgpu_bo_param bp;
        int r;
        memset(&bp, 0, sizeof(bp));
        bp.size = size;
        bp.domain = AMDGPU_GEM_DOMAIN_GTT;
-       bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC |
-               AMDGPU_GEM_CREATE_SHADOW;
+       bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC;
        bp.type = ttm_bo_type_kernel;
        bp.resv = bo->tbo.base.resv;
        bp.bo_ptr_size = sizeof(struct amdgpu_bo);
  
-       r = amdgpu_bo_do_create(adev, &bp, &bo->shadow);
+       r = amdgpu_bo_create(adev, &bp, &bo->shadow);
        if (!r) {
                bo->shadow->parent = amdgpu_bo_ref(bo);
                mutex_lock(&adev->shadow_list_lock);
  }
  
  /**
-  * amdgpu_bo_create - create an &amdgpu_bo buffer object
-  * @adev: amdgpu device object
-  * @bp: parameters to be used for the buffer object
-  * @bo_ptr: pointer to the buffer object pointer
-  *
-  * Creates an &amdgpu_bo buffer object; and if requested, also creates a
-  * shadow object.
-  * Shadow object is used to backup the original buffer object, and is always
-  * in GTT.
-  *
-  * Returns:
-  * 0 for success or a negative error code on failure.
-  */
- int amdgpu_bo_create(struct amdgpu_device *adev,
-                    struct amdgpu_bo_param *bp,
-                    struct amdgpu_bo **bo_ptr)
- {
-       u64 flags = bp->flags;
-       int r;
-       bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW;
-       r = amdgpu_bo_do_create(adev, bp, bo_ptr);
-       if (r)
-               return r;
-       if ((flags & AMDGPU_GEM_CREATE_SHADOW) && !(adev->flags & AMD_IS_APU)) {
-               if (!bp->resv)
-                       WARN_ON(dma_resv_lock((*bo_ptr)->tbo.base.resv,
-                                                       NULL));
-               r = amdgpu_bo_create_shadow(adev, bp->size, *bo_ptr);
-               if (!bp->resv)
-                       dma_resv_unlock((*bo_ptr)->tbo.base.resv);
-               if (r)
-                       amdgpu_bo_unref(bo_ptr);
-       }
-       return r;
- }
- /**
   * amdgpu_bo_create_user - create an &amdgpu_bo_user buffer object
   * @adev: amdgpu device object
   * @bp: parameters to be used for the buffer object
@@@ -694,9 -684,8 +660,8 @@@ int amdgpu_bo_create_user(struct amdgpu
        struct amdgpu_bo *bo_ptr;
        int r;
  
-       bp->flags = bp->flags & ~AMDGPU_GEM_CREATE_SHADOW;
        bp->bo_ptr_size = sizeof(struct amdgpu_bo_user);
-       r = amdgpu_bo_do_create(adev, bp, &bo_ptr);
+       r = amdgpu_bo_create(adev, bp, &bo_ptr);
        if (r)
                return r;
  
@@@ -1013,22 -1002,14 +978,22 @@@ int amdgpu_bo_pin(struct amdgpu_bo *bo
   */
  void amdgpu_bo_unpin(struct amdgpu_bo *bo)
  {
 +      struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
 +
        ttm_bo_unpin(&bo->tbo);
        if (bo->tbo.pin_count)
                return;
  
 -      amdgpu_bo_subtract_pin_size(bo);
 -
        if (bo->tbo.base.import_attach)
                dma_buf_unpin(bo->tbo.base.import_attach);
 +
 +      if (bo->tbo.mem.mem_type == TTM_PL_VRAM) {
 +              atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size);
 +              atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo),
 +                           &adev->visible_pin_size);
 +      } else if (bo->tbo.mem.mem_type == TTM_PL_TT) {
 +              atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size);
 +      }
  }
  
  /**
@@@ -1288,26 -1269,6 +1253,26 @@@ void amdgpu_bo_move_notify(struct ttm_b
        trace_amdgpu_bo_move(abo, new_mem->mem_type, old_mem->mem_type);
  }
  
 +void amdgpu_bo_get_memory(struct amdgpu_bo *bo, uint64_t *vram_mem,
 +                              uint64_t *gtt_mem, uint64_t *cpu_mem)
 +{
 +      unsigned int domain;
 +
 +      domain = amdgpu_mem_type_to_domain(bo->tbo.mem.mem_type);
 +      switch (domain) {
 +      case AMDGPU_GEM_DOMAIN_VRAM:
 +              *vram_mem += amdgpu_bo_size(bo);
 +              break;
 +      case AMDGPU_GEM_DOMAIN_GTT:
 +              *gtt_mem += amdgpu_bo_size(bo);
 +              break;
 +      case AMDGPU_GEM_DOMAIN_CPU:
 +      default:
 +              *cpu_mem += amdgpu_bo_size(bo);
 +              break;
 +      }
 +}
 +
  /**
   * amdgpu_bo_release_notify - notification about a BO being released
   * @bo: pointer to a buffer object
@@@ -1366,7 -1327,7 +1331,7 @@@ vm_fault_t amdgpu_bo_fault_reserve_noti
        struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);
        struct ttm_operation_ctx ctx = { false, false };
        struct amdgpu_bo *abo = ttm_to_amdgpu_bo(bo);
 -      unsigned long offset, size;
 +      unsigned long offset;
        int r;
  
        /* Remember that this BO was accessed by the CPU */
        if (bo->mem.mem_type != TTM_PL_VRAM)
                return 0;
  
 -      size = bo->mem.num_pages << PAGE_SHIFT;
        offset = bo->mem.start << PAGE_SHIFT;
 -      if ((offset + size) <= adev->gmc.visible_vram_size)
 +      if ((offset + bo->base.size) <= adev->gmc.visible_vram_size)
                return 0;
  
        /* Can't move a pinned BO to visible VRAM */
        offset = bo->mem.start << PAGE_SHIFT;
        /* this should never happen */
        if (bo->mem.mem_type == TTM_PL_VRAM &&
 -          (offset + size) > adev->gmc.visible_vram_size)
 +          (offset + bo->base.size) > adev->gmc.visible_vram_size)
                return VM_FAULT_SIGBUS;
  
        ttm_bo_move_to_lru_tail_unlocked(bo);
@@@ -1595,7 -1557,6 +1560,6 @@@ u64 amdgpu_bo_print_info(int id, struc
        amdgpu_bo_print_flag(m, bo, NO_CPU_ACCESS);
        amdgpu_bo_print_flag(m, bo, CPU_GTT_USWC);
        amdgpu_bo_print_flag(m, bo, VRAM_CLEARED);
-       amdgpu_bo_print_flag(m, bo, SHADOW);
        amdgpu_bo_print_flag(m, bo, VRAM_CONTIGUOUS);
        amdgpu_bo_print_flag(m, bo, VM_ALWAYS_VALID);
        amdgpu_bo_print_flag(m, bo, EXPLICIT_SYNC);
  #define AMDGPU_BO_INVALID_OFFSET      LONG_MAX
  #define AMDGPU_BO_MAX_PLACEMENTS      3
  
+ /* BO flag to indicate a KFD userptr BO */
+ #define AMDGPU_AMDKFD_CREATE_USERPTR_BO       (1ULL << 63)
+ #define AMDGPU_AMDKFD_CREATE_SVM_BO   (1ULL << 62)
  #define to_amdgpu_bo_user(abo) container_of((abo), struct amdgpu_bo_user, bo)
  
  struct amdgpu_bo_param {
@@@ -191,7 -195,7 +195,7 @@@ static inline unsigned amdgpu_bo_ngpu_p
  
  static inline unsigned amdgpu_bo_gpu_page_alignment(struct amdgpu_bo *bo)
  {
 -      return (bo->tbo.mem.page_alignment << PAGE_SHIFT) / AMDGPU_GPU_PAGE_SIZE;
 +      return (bo->tbo.page_alignment << PAGE_SHIFT) / AMDGPU_GPU_PAGE_SIZE;
  }
  
  /**
@@@ -267,6 -271,9 +271,9 @@@ int amdgpu_bo_create_user(struct amdgpu
                          struct amdgpu_bo_user **ubo_ptr);
  void amdgpu_bo_free_kernel(struct amdgpu_bo **bo, u64 *gpu_addr,
                           void **cpu_addr);
+ int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
+                           unsigned long size,
+                           struct amdgpu_bo *bo);
  int amdgpu_bo_kmap(struct amdgpu_bo *bo, void **ptr);
  void *amdgpu_bo_kptr(struct amdgpu_bo *bo);
  void amdgpu_bo_kunmap(struct amdgpu_bo *bo);
@@@ -300,8 -307,6 +307,8 @@@ int amdgpu_bo_sync_wait(struct amdgpu_b
  u64 amdgpu_bo_gpu_offset(struct amdgpu_bo *bo);
  u64 amdgpu_bo_gpu_offset_no_check(struct amdgpu_bo *bo);
  int amdgpu_bo_validate(struct amdgpu_bo *bo);
 +void amdgpu_bo_get_memory(struct amdgpu_bo *bo, uint64_t *vram_mem,
 +                              uint64_t *gtt_mem, uint64_t *cpu_mem);
  int amdgpu_bo_restore_shadow(struct amdgpu_bo *shadow,
                             struct dma_fence **fence);
  uint32_t amdgpu_bo_get_preferred_pin_domain(struct amdgpu_device *adev,
@@@ -32,7 -32,6 +32,6 @@@
  
  #include <linux/dma-mapping.h>
  #include <linux/iommu.h>
- #include <linux/hmm.h>
  #include <linux/pagemap.h>
  #include <linux/sched/task.h>
  #include <linux/sched/mm.h>
@@@ -112,6 -111,20 +111,20 @@@ static void amdgpu_evict_flags(struct t
        }
  
        abo = ttm_to_amdgpu_bo(bo);
+       if (abo->flags & AMDGPU_AMDKFD_CREATE_SVM_BO) {
+               struct dma_fence *fence;
+               struct dma_resv *resv = &bo->base._resv;
+               rcu_read_lock();
+               fence = rcu_dereference(resv->fence_excl);
+               if (fence && !fence->ops->signaled)
+                       dma_fence_enable_sw_signaling(fence);
+               placement->num_placement = 0;
+               placement->num_busy_placement = 0;
+               rcu_read_unlock();
+               return;
+       }
        switch (bo->mem.mem_type) {
        case AMDGPU_PL_GDS:
        case AMDGPU_PL_GWS:
@@@ -165,13 -178,6 +178,6 @@@ static int amdgpu_verify_access(struct 
  {
        struct amdgpu_bo *abo = ttm_to_amdgpu_bo(bo);
  
-       /*
-        * Don't verify access for KFD BOs. They don't have a GEM
-        * object associated with them.
-        */
-       if (abo->kfd_bo)
-               return 0;
        if (amdgpu_ttm_tt_get_usermm(bo->ttm))
                return -EPERM;
        return drm_vma_node_verify_access(&abo->tbo.base.vma_node,
@@@ -288,7 -294,7 +294,7 @@@ error_free
  }
  
  /**
-  * amdgpu_copy_ttm_mem_to_mem - Helper function for copy
+  * amdgpu_ttm_copy_mem_to_mem - Helper function for copy
   * @adev: amdgpu device
   * @src: buffer/address where to read from
   * @dst: buffer/address where to write to
@@@ -670,10 -676,8 +676,8 @@@ int amdgpu_ttm_tt_get_user_pages(struc
        struct amdgpu_ttm_tt *gtt = (void *)ttm;
        unsigned long start = gtt->userptr;
        struct vm_area_struct *vma;
-       struct hmm_range *range;
-       unsigned long timeout;
        struct mm_struct *mm;
-       unsigned long i;
+       bool readonly;
        int r = 0;
  
        mm = bo->notifier.mm;
        if (!mmget_not_zero(mm)) /* Happens during process shutdown */
                return -ESRCH;
  
-       range = kzalloc(sizeof(*range), GFP_KERNEL);
-       if (unlikely(!range)) {
-               r = -ENOMEM;
-               goto out;
-       }
-       range->notifier = &bo->notifier;
-       range->start = bo->notifier.interval_tree.start;
-       range->end = bo->notifier.interval_tree.last + 1;
-       range->default_flags = HMM_PFN_REQ_FAULT;
-       if (!amdgpu_ttm_tt_is_readonly(ttm))
-               range->default_flags |= HMM_PFN_REQ_WRITE;
-       range->hmm_pfns = kvmalloc_array(ttm->num_pages,
-                                        sizeof(*range->hmm_pfns), GFP_KERNEL);
-       if (unlikely(!range->hmm_pfns)) {
-               r = -ENOMEM;
-               goto out_free_ranges;
-       }
        mmap_read_lock(mm);
        vma = find_vma(mm, start);
+       mmap_read_unlock(mm);
        if (unlikely(!vma || start < vma->vm_start)) {
                r = -EFAULT;
-               goto out_unlock;
+               goto out_putmm;
        }
        if (unlikely((gtt->userflags & AMDGPU_GEM_USERPTR_ANONONLY) &&
                vma->vm_file)) {
                r = -EPERM;
-               goto out_unlock;
+               goto out_putmm;
        }
-       mmap_read_unlock(mm);
-       timeout = jiffies + msecs_to_jiffies(HMM_RANGE_DEFAULT_TIMEOUT);
  
- retry:
-       range->notifier_seq = mmu_interval_read_begin(&bo->notifier);
-       mmap_read_lock(mm);
-       r = hmm_range_fault(range);
-       mmap_read_unlock(mm);
-       if (unlikely(r)) {
-               /*
-                * FIXME: This timeout should encompass the retry from
-                * mmu_interval_read_retry() as well.
-                */
-               if (r == -EBUSY && !time_after(jiffies, timeout))
-                       goto retry;
-               goto out_free_pfns;
-       }
-       /*
-        * Due to default_flags, all pages are HMM_PFN_VALID or
-        * hmm_range_fault() fails. FIXME: The pages cannot be touched outside
-        * the notifier_lock, and mmu_interval_read_retry() must be done first.
-        */
-       for (i = 0; i < ttm->num_pages; i++)
-               pages[i] = hmm_pfn_to_page(range->hmm_pfns[i]);
-       gtt->range = range;
+       readonly = amdgpu_ttm_tt_is_readonly(ttm);
+       r = amdgpu_hmm_range_get_pages(&bo->notifier, mm, pages, start,
+                                      ttm->num_pages, &gtt->range, readonly,
+                                      false);
+ out_putmm:
        mmput(mm);
  
-       return 0;
- out_unlock:
-       mmap_read_unlock(mm);
- out_free_pfns:
-       kvfree(range->hmm_pfns);
- out_free_ranges:
-       kfree(range);
- out:
-       mmput(mm);
        return r;
  }
  
@@@ -787,10 -741,7 +741,7 @@@ bool amdgpu_ttm_tt_get_user_pages_done(
                 * FIXME: Must always hold notifier_lock for this, and must
                 * not ignore the return code.
                 */
-               r = mmu_interval_read_retry(gtt->range->notifier,
-                                        gtt->range->notifier_seq);
-               kvfree(gtt->range->hmm_pfns);
-               kfree(gtt->range);
+               r = amdgpu_hmm_range_get_pages_done(gtt->range);
                gtt->range = NULL;
        }
  
@@@ -1018,6 -969,8 +969,6 @@@ int amdgpu_ttm_alloc_gart(struct ttm_bu
        } else {
  
                /* allocate GART space */
 -              tmp = bo->mem;
 -              tmp.mm_node = NULL;
                placement.num_placement = 1;
                placement.placement = &placements;
                placement.num_busy_placement = 1;
@@@ -25,7 -25,6 +25,7 @@@
   *          Alex Deucher
   *          Jerome Glisse
   */
 +
  #include <linux/dma-fence-array.h>
  #include <linux/interval_tree_generic.h>
  #include <linux/idr.h>
@@@ -38,6 -37,7 +38,7 @@@
  #include "amdgpu_gmc.h"
  #include "amdgpu_xgmi.h"
  #include "amdgpu_dma_buf.h"
+ #include "kfd_svm.h"
  
  /**
   * DOC: GPUVM
@@@ -850,35 -850,60 +851,60 @@@ static int amdgpu_vm_clear_bo(struct am
  }
  
  /**
-  * amdgpu_vm_bo_param - fill in parameters for PD/PT allocation
+  * amdgpu_vm_pt_create - create bo for PD/PT
   *
   * @adev: amdgpu_device pointer
   * @vm: requesting vm
   * @level: the page table level
   * @immediate: use a immediate update
-  * @bp: resulting BO allocation parameters
+  * @bo: pointer to the buffer object pointer
   */
- static void amdgpu_vm_bo_param(struct amdgpu_device *adev, struct amdgpu_vm *vm,
+ static int amdgpu_vm_pt_create(struct amdgpu_device *adev,
+                              struct amdgpu_vm *vm,
                               int level, bool immediate,
-                              struct amdgpu_bo_param *bp)
+                              struct amdgpu_bo **bo)
  {
-       memset(bp, 0, sizeof(*bp));
+       struct amdgpu_bo_param bp;
+       int r;
  
-       bp->size = amdgpu_vm_bo_size(adev, level);
-       bp->byte_align = AMDGPU_GPU_PAGE_SIZE;
-       bp->domain = AMDGPU_GEM_DOMAIN_VRAM;
-       bp->domain = amdgpu_bo_get_preferred_pin_domain(adev, bp->domain);
-       bp->flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
+       memset(&bp, 0, sizeof(bp));
+       bp.size = amdgpu_vm_bo_size(adev, level);
+       bp.byte_align = AMDGPU_GPU_PAGE_SIZE;
+       bp.domain = AMDGPU_GEM_DOMAIN_VRAM;
+       bp.domain = amdgpu_bo_get_preferred_pin_domain(adev, bp.domain);
+       bp.flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
                AMDGPU_GEM_CREATE_CPU_GTT_USWC;
-       bp->bo_ptr_size = sizeof(struct amdgpu_bo);
+       bp.bo_ptr_size = sizeof(struct amdgpu_bo);
        if (vm->use_cpu_for_update)
-               bp->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
-       else if (!vm->root.base.bo || vm->root.base.bo->shadow)
-               bp->flags |= AMDGPU_GEM_CREATE_SHADOW;
-       bp->type = ttm_bo_type_kernel;
-       bp->no_wait_gpu = immediate;
+               bp.flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
+       bp.type = ttm_bo_type_kernel;
+       bp.no_wait_gpu = immediate;
        if (vm->root.base.bo)
-               bp->resv = vm->root.base.bo->tbo.base.resv;
+               bp.resv = vm->root.base.bo->tbo.base.resv;
+       r = amdgpu_bo_create(adev, &bp, bo);
+       if (r)
+               return r;
+       if (vm->is_compute_context && (adev->flags & AMD_IS_APU))
+               return 0;
+       if (!bp.resv)
+               WARN_ON(dma_resv_lock((*bo)->tbo.base.resv,
+                                     NULL));
+       r = amdgpu_bo_create_shadow(adev, bp.size, *bo);
+       if (!bp.resv)
+               dma_resv_unlock((*bo)->tbo.base.resv);
+       if (r) {
+               amdgpu_bo_unref(bo);
+               return r;
+       }
+       return 0;
  }
  
  /**
@@@ -901,7 -926,6 +927,6 @@@ static int amdgpu_vm_alloc_pts(struct a
                               bool immediate)
  {
        struct amdgpu_vm_pt *entry = cursor->entry;
-       struct amdgpu_bo_param bp;
        struct amdgpu_bo *pt;
        int r;
  
        if (entry->base.bo)
                return 0;
  
-       amdgpu_vm_bo_param(adev, vm, cursor->level, immediate, &bp);
-       r = amdgpu_bo_create(adev, &bp, &pt);
+       r = amdgpu_vm_pt_create(adev, vm, cursor->level, immediate, &pt);
        if (r)
                return r;
  
@@@ -1593,15 -1615,15 +1616,15 @@@ static int amdgpu_vm_update_ptes(struc
   * Returns:
   * 0 for success, -EINVAL for failure.
   */
static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
-                                      struct amdgpu_device *bo_adev,
-                                      struct amdgpu_vm *vm, bool immediate,
-                                      bool unlocked, struct dma_resv *resv,
-                                      uint64_t start, uint64_t last,
-                                      uint64_t flags, uint64_t offset,
-                                      struct drm_mm_node *nodes,
-                                      dma_addr_t *pages_addr,
-                                      struct dma_fence **fence)
+ int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
+                               struct amdgpu_device *bo_adev,
+                               struct amdgpu_vm *vm, bool immediate,
+                               bool unlocked, struct dma_resv *resv,
+                               uint64_t start, uint64_t last,
+                               uint64_t flags, uint64_t offset,
+                               struct drm_mm_node *nodes,
+                               dma_addr_t *pages_addr,
+                               struct dma_fence **fence)
  {
        struct amdgpu_vm_update_params params;
        enum amdgpu_sync_mode sync_mode;
@@@ -1718,50 -1740,6 +1741,50 @@@ error_unlock
        return r;
  }
  
 +void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,
 +                              uint64_t *gtt_mem, uint64_t *cpu_mem)
 +{
 +      struct amdgpu_bo_va *bo_va, *tmp;
 +
 +      list_for_each_entry_safe(bo_va, tmp, &vm->idle, base.vm_status) {
 +              if (!bo_va->base.bo)
 +                      continue;
 +              amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
 +                              gtt_mem, cpu_mem);
 +      }
 +      list_for_each_entry_safe(bo_va, tmp, &vm->evicted, base.vm_status) {
 +              if (!bo_va->base.bo)
 +                      continue;
 +              amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
 +                              gtt_mem, cpu_mem);
 +      }
 +      list_for_each_entry_safe(bo_va, tmp, &vm->relocated, base.vm_status) {
 +              if (!bo_va->base.bo)
 +                      continue;
 +              amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
 +                              gtt_mem, cpu_mem);
 +      }
 +      list_for_each_entry_safe(bo_va, tmp, &vm->moved, base.vm_status) {
 +              if (!bo_va->base.bo)
 +                      continue;
 +              amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
 +                              gtt_mem, cpu_mem);
 +      }
 +      spin_lock(&vm->invalidated_lock);
 +      list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) {
 +              if (!bo_va->base.bo)
 +                      continue;
 +              amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
 +                              gtt_mem, cpu_mem);
 +      }
 +      list_for_each_entry_safe(bo_va, tmp, &vm->done, base.vm_status) {
 +              if (!bo_va->base.bo)
 +                      continue;
 +              amdgpu_bo_get_memory(bo_va->base.bo, vram_mem,
 +                              gtt_mem, cpu_mem);
 +      }
 +      spin_unlock(&vm->invalidated_lock);
 +}
  /**
   * amdgpu_vm_bo_update - update all BO mappings in the vm page table
   *
@@@ -2818,7 -2796,6 +2841,6 @@@ long amdgpu_vm_wait_idle(struct amdgpu_
   *
   * @adev: amdgpu_device pointer
   * @vm: requested vm
-  * @vm_context: Indicates if it GFX or Compute context
   * @pasid: Process address space identifier
   *
   * Init @vm fields.
   * Returns:
   * 0 for success, error for failure.
   */
- int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
-                  int vm_context, u32 pasid)
+ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, u32 pasid)
  {
-       struct amdgpu_bo_param bp;
        struct amdgpu_bo *root;
        int r, i;
  
        vm->pte_support_ats = false;
        vm->is_compute_context = false;
  
-       if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE) {
-               vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
-                                               AMDGPU_VM_USE_CPU_FOR_COMPUTE);
+       vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
+                                   AMDGPU_VM_USE_CPU_FOR_GFX);
  
-               if (adev->asic_type == CHIP_RAVEN)
-                       vm->pte_support_ats = true;
-       } else {
-               vm->use_cpu_for_update = !!(adev->vm_manager.vm_update_mode &
-                                               AMDGPU_VM_USE_CPU_FOR_GFX);
-       }
        DRM_DEBUG_DRIVER("VM update mode is %s\n",
                         vm->use_cpu_for_update ? "CPU" : "SDMA");
        WARN_ONCE((vm->use_cpu_for_update &&
        mutex_init(&vm->eviction_lock);
        vm->evicting = false;
  
-       amdgpu_vm_bo_param(adev, vm, adev->vm_manager.root_level, false, &bp);
-       if (vm_context == AMDGPU_VM_CONTEXT_COMPUTE)
-               bp.flags &= ~AMDGPU_GEM_CREATE_SHADOW;
-       r = amdgpu_bo_create(adev, &bp, &root);
+       r = amdgpu_vm_pt_create(adev, vm, adev->vm_manager.root_level,
+                               false, &root);
        if (r)
                goto error_free_delayed;
  
@@@ -3349,6 -3315,7 +3360,7 @@@ void amdgpu_vm_set_task_info(struct amd
  bool amdgpu_vm_handle_fault(struct amdgpu_device *adev, u32 pasid,
                            uint64_t addr)
  {
+       bool is_compute_context = false;
        struct amdgpu_bo *root;
        uint64_t value, flags;
        struct amdgpu_vm *vm;
  
        spin_lock(&adev->vm_manager.pasid_lock);
        vm = idr_find(&adev->vm_manager.pasid_idr, pasid);
-       if (vm)
+       if (vm) {
                root = amdgpu_bo_ref(vm->root.base.bo);
-       else
+               is_compute_context = vm->is_compute_context;
+       } else {
                root = NULL;
+       }
        spin_unlock(&adev->vm_manager.pasid_lock);
  
        if (!root)
                return false;
  
+       addr /= AMDGPU_GPU_PAGE_SIZE;
+       if (is_compute_context &&
+           !svm_range_restore_pages(adev, pasid, addr)) {
+               amdgpu_bo_unref(&root);
+               return true;
+       }
        r = amdgpu_bo_reserve(root, true);
        if (r)
                goto error_unref;
        if (!vm)
                goto error_unlock;
  
-       addr /= AMDGPU_GPU_PAGE_SIZE;
        flags = AMDGPU_PTE_VALID | AMDGPU_PTE_SNOOPED |
                AMDGPU_PTE_SYSTEM;
  
-       if (vm->is_compute_context) {
+       if (is_compute_context) {
                /* Intentionally setting invalid PTE flag
                 * combination to force a no-retry-fault
                 */
                flags = AMDGPU_PTE_EXECUTABLE | AMDGPU_PDE_PTE |
                        AMDGPU_PTE_TF;
                value = 0;
        } else if (amdgpu_vm_fault_stop == AMDGPU_VM_FAULT_STOP_NEVER) {
                /* Redirect the access to the dummy page */
                value = adev->dummy_page_addr;
@@@ -121,9 -121,6 +121,6 @@@ struct amdgpu_bo_list_entry
  /* max vmids dedicated for process */
  #define AMDGPU_VM_MAX_RESERVED_VMID   1
  
- #define AMDGPU_VM_CONTEXT_GFX 0
- #define AMDGPU_VM_CONTEXT_COMPUTE 1
  /* See vm_update_mode */
  #define AMDGPU_VM_USE_CPU_FOR_GFX (1 << 0)
  #define AMDGPU_VM_USE_CPU_FOR_COMPUTE (1 << 1)
@@@ -367,6 -364,8 +364,8 @@@ struct amdgpu_vm_manager 
        spinlock_t                              pasid_lock;
  };
  
+ struct amdgpu_bo_va_mapping;
  #define amdgpu_vm_copy_pte(adev, ib, pe, src, count) ((adev)->vm_manager.vm_pte_funcs->copy_pte((ib), (pe), (src), (count)))
  #define amdgpu_vm_write_pte(adev, ib, pe, value, count, incr) ((adev)->vm_manager.vm_pte_funcs->write_pte((ib), (pe), (value), (count), (incr)))
  #define amdgpu_vm_set_pte_pde(adev, ib, pe, addr, count, incr, flags) ((adev)->vm_manager.vm_pte_funcs->set_pte_pde((ib), (pe), (addr), (count), (incr), (flags)))
@@@ -378,8 -377,7 +377,7 @@@ void amdgpu_vm_manager_init(struct amdg
  void amdgpu_vm_manager_fini(struct amdgpu_device *adev);
  
  long amdgpu_vm_wait_idle(struct amdgpu_vm *vm, long timeout);
- int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm,
-                  int vm_context, u32 pasid);
+ int amdgpu_vm_init(struct amdgpu_device *adev, struct amdgpu_vm *vm, u32 pasid);
  int amdgpu_vm_make_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm, u32 pasid);
  void amdgpu_vm_release_compute(struct amdgpu_device *adev, struct amdgpu_vm *vm);
  void amdgpu_vm_fini(struct amdgpu_device *adev, struct amdgpu_vm *vm);
@@@ -398,6 -396,15 +396,15 @@@ int amdgpu_vm_clear_freed(struct amdgpu
                          struct dma_fence **fence);
  int amdgpu_vm_handle_moved(struct amdgpu_device *adev,
                           struct amdgpu_vm *vm);
+ int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
+                               struct amdgpu_device *bo_adev,
+                               struct amdgpu_vm *vm, bool immediate,
+                               bool unlocked, struct dma_resv *resv,
+                               uint64_t start, uint64_t last,
+                               uint64_t flags, uint64_t offset,
+                               struct drm_mm_node *nodes,
+                               dma_addr_t *pages_addr,
+                               struct dma_fence **fence);
  int amdgpu_vm_bo_update(struct amdgpu_device *adev,
                        struct amdgpu_bo_va *bo_va,
                        bool clear);
@@@ -447,8 -454,6 +454,8 @@@ void amdgpu_vm_set_task_info(struct amd
  void amdgpu_vm_move_to_lru_tail(struct amdgpu_device *adev,
                                struct amdgpu_vm *vm);
  void amdgpu_vm_del_from_lru_notify(struct ttm_buffer_object *bo);
 +void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,
 +                              uint64_t *gtt_mem, uint64_t *cpu_mem);
  
  #if defined(CONFIG_DEBUG_FS)
  void amdgpu_debugfs_vm_bo_info(struct amdgpu_vm *vm, struct seq_file *m);
  #include "amdgpu_atomfirmware.h"
  #include "atom.h"
  
- static inline struct amdgpu_vram_mgr *to_vram_mgr(struct ttm_resource_manager *man)
+ static inline struct amdgpu_vram_mgr *
+ to_vram_mgr(struct ttm_resource_manager *man)
  {
        return container_of(man, struct amdgpu_vram_mgr, manager);
  }
  
- static inline struct amdgpu_device *to_amdgpu_device(struct amdgpu_vram_mgr *mgr)
+ static inline struct amdgpu_device *
+ to_amdgpu_device(struct amdgpu_vram_mgr *mgr)
  {
        return container_of(mgr, struct amdgpu_device, mman.vram_mgr);
  }
@@@ -82,12 -84,14 +84,14 @@@ static ssize_t amdgpu_mem_info_vis_vram
   * amount of currently used VRAM in bytes
   */
  static ssize_t amdgpu_mem_info_vram_used_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
+                                             struct device_attribute *attr,
+                                             char *buf)
  {
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(ddev);
-       struct ttm_resource_manager *man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
+       struct ttm_resource_manager *man;
  
+       man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
        return sysfs_emit(buf, "%llu\n", amdgpu_vram_mgr_usage(man));
  }
  
   * amount of currently used visible VRAM in bytes
   */
  static ssize_t amdgpu_mem_info_vis_vram_used_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
+                                                 struct device_attribute *attr,
+                                                 char *buf)
  {
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(ddev);
-       struct ttm_resource_manager *man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
+       struct ttm_resource_manager *man;
  
+       man = ttm_manager_type(&adev->mman.bdev, TTM_PL_VRAM);
        return sysfs_emit(buf, "%llu\n", amdgpu_vram_mgr_vis_usage(man));
  }
  
+ /**
+  * DOC: mem_info_vram_vendor
+  *
+  * The amdgpu driver provides a sysfs API for reporting the vendor of the
+  * installed VRAM
+  * The file mem_info_vram_vendor is used for this and returns the name of the
+  * vendor.
+  */
  static ssize_t amdgpu_mem_info_vram_vendor(struct device *dev,
-                                                struct device_attribute *attr,
-                                                char *buf)
+                                          struct device_attribute *attr,
+                                          char *buf)
  {
        struct drm_device *ddev = dev_get_drvdata(dev);
        struct amdgpu_device *adev = drm_to_adev(ddev);
@@@ -162,78 -176,6 +176,6 @@@ static const struct attribute *amdgpu_v
        NULL
  };
  
- static const struct ttm_resource_manager_func amdgpu_vram_mgr_func;
- /**
-  * amdgpu_vram_mgr_init - init VRAM manager and DRM MM
-  *
-  * @adev: amdgpu_device pointer
-  *
-  * Allocate and initialize the VRAM manager.
-  */
- int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
- {
-       struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
-       struct ttm_resource_manager *man = &mgr->manager;
-       int ret;
-       ttm_resource_manager_init(man, adev->gmc.real_vram_size >> PAGE_SHIFT);
-       man->func = &amdgpu_vram_mgr_func;
-       drm_mm_init(&mgr->mm, 0, man->size);
-       spin_lock_init(&mgr->lock);
-       INIT_LIST_HEAD(&mgr->reservations_pending);
-       INIT_LIST_HEAD(&mgr->reserved_pages);
-       /* Add the two VRAM-related sysfs files */
-       ret = sysfs_create_files(&adev->dev->kobj, amdgpu_vram_mgr_attributes);
-       if (ret)
-               DRM_ERROR("Failed to register sysfs\n");
-       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, &mgr->manager);
-       ttm_resource_manager_set_used(man, true);
-       return 0;
- }
- /**
-  * amdgpu_vram_mgr_fini - free and destroy VRAM manager
-  *
-  * @adev: amdgpu_device pointer
-  *
-  * Destroy and free the VRAM manager, returns -EBUSY if ranges are still
-  * allocated inside it.
-  */
- void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
- {
-       struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
-       struct ttm_resource_manager *man = &mgr->manager;
-       int ret;
-       struct amdgpu_vram_reservation *rsv, *temp;
-       ttm_resource_manager_set_used(man, false);
-       ret = ttm_resource_manager_evict_all(&adev->mman.bdev, man);
-       if (ret)
-               return;
-       spin_lock(&mgr->lock);
-       list_for_each_entry_safe(rsv, temp, &mgr->reservations_pending, node)
-               kfree(rsv);
-       list_for_each_entry_safe(rsv, temp, &mgr->reserved_pages, node) {
-               drm_mm_remove_node(&rsv->mm_node);
-               kfree(rsv);
-       }
-       drm_mm_takedown(&mgr->mm);
-       spin_unlock(&mgr->lock);
-       sysfs_remove_files(&adev->dev->kobj, amdgpu_vram_mgr_attributes);
-       ttm_resource_manager_cleanup(man);
-       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, NULL);
- }
  /**
   * amdgpu_vram_mgr_vis_size - Calculate visible node size
   *
@@@ -283,6 -225,7 +225,7 @@@ u64 amdgpu_vram_mgr_bo_visible_size(str
        return usage;
  }
  
+ /* Commit the reservation of VRAM pages */
  static void amdgpu_vram_mgr_do_reserve(struct ttm_resource_manager *man)
  {
        struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
@@@ -415,13 -358,13 +358,13 @@@ static int amdgpu_vram_mgr_new(struct t
                               const struct ttm_place *place,
                               struct ttm_resource *mem)
  {
+       unsigned long lpfn, num_nodes, pages_per_node, pages_left, pages;
        struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
        struct amdgpu_device *adev = to_amdgpu_device(mgr);
+       uint64_t vis_usage = 0, mem_bytes, max_bytes;
        struct drm_mm *mm = &mgr->mm;
-       struct drm_mm_node *nodes;
        enum drm_mm_insert_mode mode;
-       unsigned long lpfn, num_nodes, pages_per_node, pages_left;
-       uint64_t vis_usage = 0, mem_bytes, max_bytes;
+       struct drm_mm_node *nodes;
        unsigned i;
        int r;
  
                pages_per_node = HPAGE_PMD_NR;
  #else
                /* default to 2MB */
-               pages_per_node = (2UL << (20UL - PAGE_SHIFT));
+               pages_per_node = 2UL << (20UL - PAGE_SHIFT);
  #endif
-               pages_per_node = max((uint32_t)pages_per_node,
-                                    tbo->page_alignment);
+               pages_per_node = max_t(uint32_t, pages_per_node,
 -                                     mem->page_alignment);
++                                     tbo->page_alignment);
                num_nodes = DIV_ROUND_UP(mem->num_pages, pages_per_node);
        }
  
        mem->start = 0;
        pages_left = mem->num_pages;
  
-       spin_lock(&mgr->lock);
-       for (i = 0; pages_left >= pages_per_node; ++i) {
-               unsigned long pages = rounddown_pow_of_two(pages_left);
+       /* Limit maximum size to 2GB due to SG table limitations */
+       pages = min(pages_left, 2UL << (30 - PAGE_SHIFT));
  
-               /* Limit maximum size to 2GB due to SG table limitations */
-               pages = min(pages, (2UL << (30 - PAGE_SHIFT)));
-               r = drm_mm_insert_node_in_range(mm, &nodes[i], pages,
-                                               pages_per_node, 0,
-                                               place->fpfn, lpfn,
-                                               mode);
-               if (unlikely(r))
-                       break;
-               vis_usage += amdgpu_vram_mgr_vis_size(adev, &nodes[i]);
-               amdgpu_vram_mgr_virt_start(mem, &nodes[i]);
-               pages_left -= pages;
-       }
-       for (; pages_left; ++i) {
-               unsigned long pages = min(pages_left, pages_per_node);
+       i = 0;
+       spin_lock(&mgr->lock);
+       while (pages_left) {
 -              uint32_t alignment = mem->page_alignment;
 +              uint32_t alignment = tbo->page_alignment;
  
-               if (pages == pages_per_node)
+               if (pages >= pages_per_node)
                        alignment = pages_per_node;
  
-               r = drm_mm_insert_node_in_range(mm, &nodes[i],
-                                               pages, alignment, 0,
-                                               place->fpfn, lpfn,
-                                               mode);
-               if (unlikely(r))
+               r = drm_mm_insert_node_in_range(mm, &nodes[i], pages, alignment,
+                                               0, place->fpfn, lpfn, mode);
+               if (unlikely(r)) {
+                       if (pages > pages_per_node) {
+                               if (is_power_of_2(pages))
+                                       pages = pages / 2;
+                               else
+                                       pages = rounddown_pow_of_two(pages);
+                               continue;
+                       }
                        goto error;
+               }
  
                vis_usage += amdgpu_vram_mgr_vis_size(adev, &nodes[i]);
                amdgpu_vram_mgr_virt_start(mem, &nodes[i]);
                pages_left -= pages;
+               ++i;
+               if (pages > pages_left)
+                       pages = pages_left;
        }
        spin_unlock(&mgr->lock);
  
@@@ -728,3 -666,73 +666,73 @@@ static const struct ttm_resource_manage
        .free   = amdgpu_vram_mgr_del,
        .debug  = amdgpu_vram_mgr_debug
  };
+ /**
+  * amdgpu_vram_mgr_init - init VRAM manager and DRM MM
+  *
+  * @adev: amdgpu_device pointer
+  *
+  * Allocate and initialize the VRAM manager.
+  */
+ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
+ {
+       struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
+       struct ttm_resource_manager *man = &mgr->manager;
+       int ret;
+       ttm_resource_manager_init(man, adev->gmc.real_vram_size >> PAGE_SHIFT);
+       man->func = &amdgpu_vram_mgr_func;
+       drm_mm_init(&mgr->mm, 0, man->size);
+       spin_lock_init(&mgr->lock);
+       INIT_LIST_HEAD(&mgr->reservations_pending);
+       INIT_LIST_HEAD(&mgr->reserved_pages);
+       /* Add the two VRAM-related sysfs files */
+       ret = sysfs_create_files(&adev->dev->kobj, amdgpu_vram_mgr_attributes);
+       if (ret)
+               DRM_ERROR("Failed to register sysfs\n");
+       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, &mgr->manager);
+       ttm_resource_manager_set_used(man, true);
+       return 0;
+ }
+ /**
+  * amdgpu_vram_mgr_fini - free and destroy VRAM manager
+  *
+  * @adev: amdgpu_device pointer
+  *
+  * Destroy and free the VRAM manager, returns -EBUSY if ranges are still
+  * allocated inside it.
+  */
+ void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
+ {
+       struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
+       struct ttm_resource_manager *man = &mgr->manager;
+       int ret;
+       struct amdgpu_vram_reservation *rsv, *temp;
+       ttm_resource_manager_set_used(man, false);
+       ret = ttm_resource_manager_evict_all(&adev->mman.bdev, man);
+       if (ret)
+               return;
+       spin_lock(&mgr->lock);
+       list_for_each_entry_safe(rsv, temp, &mgr->reservations_pending, node)
+               kfree(rsv);
+       list_for_each_entry_safe(rsv, temp, &mgr->reserved_pages, node) {
+               drm_mm_remove_node(&rsv->mm_node);
+               kfree(rsv);
+       }
+       drm_mm_takedown(&mgr->mm);
+       spin_unlock(&mgr->lock);
+       sysfs_remove_files(&adev->dev->kobj, amdgpu_vram_mgr_attributes);
+       ttm_resource_manager_cleanup(man);
+       ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, NULL);
+ }
@@@ -35,6 -35,7 +35,7 @@@
  #include "dc/inc/hw/abm.h"
  #include "dc/dc_dmub_srv.h"
  #include "dc/dc_edid_parser.h"
+ #include "dc/dc_stat.h"
  #include "amdgpu_dm_trace.h"
  
  #include "vid.h"
@@@ -59,6 -60,7 +60,7 @@@
  
  #include "ivsrcid/ivsrcid_vislands30.h"
  
+ #include "i2caux_interface.h"
  #include <linux/module.h>
  #include <linux/moduleparam.h>
  #include <linux/types.h>
@@@ -618,6 -620,58 +620,58 @@@ static void dm_dcn_vertical_interrupt0_
        amdgpu_dm_crtc_handle_crc_window_irq(&acrtc->base);
  }
  #endif
+ /**
+  * dm_dmub_outbox1_low_irq() - Handles Outbox interrupt
+  * @interrupt_params: used for determining the Outbox instance
+  *
+  * Handles the Outbox Interrupt
+  * event handler.
+  */
+ #define DMUB_TRACE_MAX_READ 64
+ static void dm_dmub_outbox1_low_irq(void *interrupt_params)
+ {
+       struct dmub_notification notify;
+       struct common_irq_params *irq_params = interrupt_params;
+       struct amdgpu_device *adev = irq_params->adev;
+       struct amdgpu_display_manager *dm = &adev->dm;
+       struct dmcub_trace_buf_entry entry = { 0 };
+       uint32_t count = 0;
+       if (dc_enable_dmub_notifications(adev->dm.dc)) {
+               if (irq_params->irq_src == DC_IRQ_SOURCE_DMCUB_OUTBOX) {
+                       do {
+                               dc_stat_get_dmub_notification(adev->dm.dc, &notify);
+                       } while (notify.pending_notification);
+                       if (adev->dm.dmub_notify)
+                               memcpy(adev->dm.dmub_notify, &notify, sizeof(struct dmub_notification));
+                       if (notify.type == DMUB_NOTIFICATION_AUX_REPLY)
+                               complete(&adev->dm.dmub_aux_transfer_done);
+                       // TODO : HPD Implementation
+               } else {
+                       DRM_ERROR("DM: Failed to receive correct outbox IRQ !");
+               }
+       }
+       do {
+               if (dc_dmub_srv_get_dmub_outbox0_msg(dm->dc, &entry)) {
+                       trace_amdgpu_dmub_trace_high_irq(entry.trace_code, entry.tick_count,
+                                                       entry.param0, entry.param1);
+                       DRM_DEBUG_DRIVER("trace_code:%u, tick_count:%u, param0:%u, param1:%u\n",
+                                entry.trace_code, entry.tick_count, entry.param0, entry.param1);
+               } else
+                       break;
+               count++;
+       } while (count <= DMUB_TRACE_MAX_READ);
+       ASSERT(count <= DMUB_TRACE_MAX_READ);
+ }
  #endif
  
  static int dm_set_clockgating_state(void *handle,
@@@ -938,32 -992,6 +992,6 @@@ static int dm_dmub_hw_init(struct amdgp
  }
  
  #if defined(CONFIG_DRM_AMD_DC_DCN)
- #define DMUB_TRACE_MAX_READ 64
- static void dm_dmub_trace_high_irq(void *interrupt_params)
- {
-       struct common_irq_params *irq_params = interrupt_params;
-       struct amdgpu_device *adev = irq_params->adev;
-       struct amdgpu_display_manager *dm = &adev->dm;
-       struct dmcub_trace_buf_entry entry = { 0 };
-       uint32_t count = 0;
-       do {
-               if (dc_dmub_srv_get_dmub_outbox0_msg(dm->dc, &entry)) {
-                       trace_amdgpu_dmub_trace_high_irq(entry.trace_code, entry.tick_count,
-                                                       entry.param0, entry.param1);
-                       DRM_DEBUG_DRIVER("trace_code:%u, tick_count:%u, param0:%u, param1:%u\n",
-                                entry.trace_code, entry.tick_count, entry.param0, entry.param1);
-               } else
-                       break;
-               count++;
-       } while (count <= DMUB_TRACE_MAX_READ);
-       ASSERT(count <= DMUB_TRACE_MAX_READ);
- }
  static void mmhub_read_system_context(struct amdgpu_device *adev, struct dc_phy_addr_space_config *pa_config)
  {
        uint64_t pt_base;
@@@ -1220,6 -1248,16 +1248,16 @@@ static int amdgpu_dm_init(struct amdgpu
  #if defined(CONFIG_DRM_AMD_SECURE_DISPLAY)
        adev->dm.crc_rd_wrk = amdgpu_dm_crtc_secure_display_create_work();
  #endif
+       if (dc_enable_dmub_notifications(adev->dm.dc)) {
+               init_completion(&adev->dm.dmub_aux_transfer_done);
+               adev->dm.dmub_notify = kzalloc(sizeof(struct dmub_notification), GFP_KERNEL);
+               if (!adev->dm.dmub_notify) {
+                       DRM_INFO("amdgpu: fail to allocate adev->dm.dmub_notify");
+                       goto error;
+               }
+               amdgpu_dm_outbox_init(adev);
+       }
        if (amdgpu_dm_initialize_drm_device(adev)) {
                DRM_ERROR(
                "amdgpu: failed to initialize sw for display support.\n");
@@@ -1293,6 -1331,11 +1331,11 @@@ static void amdgpu_dm_fini(struct amdgp
                adev->dm.dc->ctx->dmub_srv = NULL;
        }
  
+       if (dc_enable_dmub_notifications(adev->dm.dc)) {
+               kfree(adev->dm.dmub_notify);
+               adev->dm.dmub_notify = NULL;
+       }
        if (adev->dm.dmub_bo)
                amdgpu_bo_free_kernel(&adev->dm.dmub_bo,
                                      &adev->dm.dmub_bo_gpu_addr,
@@@ -2708,8 -2751,7 +2751,7 @@@ static void handle_hpd_rx_irq(void *par
         * conflict, after implement i2c helper, this mutex should be
         * retired.
         */
-       if (dc_link->type != dc_connection_mst_branch)
-               mutex_lock(&aconnector->hpd_lock);
+       mutex_lock(&aconnector->hpd_lock);
  
        read_hpd_rx_irq_data(dc_link, &hpd_irq_data);
  
                }
        }
  
-       mutex_lock(&adev->dm.dc_lock);
+       if (!amdgpu_in_reset(adev)) {
+               mutex_lock(&adev->dm.dc_lock);
  #ifdef CONFIG_DRM_AMD_DC_HDCP
        result = dc_link_handle_hpd_rx_irq(dc_link, &hpd_irq_data, NULL);
  #else
        result = dc_link_handle_hpd_rx_irq(dc_link, NULL, NULL);
  #endif
-       mutex_unlock(&adev->dm.dc_lock);
+               mutex_unlock(&adev->dm.dc_lock);
+       }
  
  out:
        if (result && !is_mst_root_connector) {
        }
  #endif
  
-       if (dc_link->type != dc_connection_mst_branch) {
+       if (dc_link->type != dc_connection_mst_branch)
                drm_dp_cec_irq(&aconnector->dm_dp_aux.aux);
-               mutex_unlock(&aconnector->hpd_lock);
-       }
+       mutex_unlock(&aconnector->hpd_lock);
  }
  
  static void register_hpd_handlers(struct amdgpu_device *adev)
@@@ -3151,38 -3195,51 +3195,51 @@@ static int dcn10_register_irq_handlers(
  
        }
  
-       if (dc->ctx->dmub_srv) {
-               i = DCN_1_0__SRCID__DMCUB_OUTBOX_HIGH_PRIORITY_READY_INT;
-               r = amdgpu_irq_add_id(adev, SOC15_IH_CLIENTID_DCE, i, &adev->dmub_trace_irq);
+       /* HPD */
+       r = amdgpu_irq_add_id(adev, SOC15_IH_CLIENTID_DCE, DCN_1_0__SRCID__DC_HPD1_INT,
+                       &adev->hpd_irq);
+       if (r) {
+               DRM_ERROR("Failed to add hpd irq id!\n");
+               return r;
+       }
  
-               if (r) {
-                       DRM_ERROR("Failed to add dmub trace irq id!\n");
-                       return r;
-               }
+       register_hpd_handlers(adev);
  
-               int_params.int_context = INTERRUPT_HIGH_IRQ_CONTEXT;
+       return 0;
+ }
+ /* Register Outbox IRQ sources and initialize IRQ callbacks */
+ static int register_outbox_irq_handlers(struct amdgpu_device *adev)
+ {
+       struct dc *dc = adev->dm.dc;
+       struct common_irq_params *c_irq_params;
+       struct dc_interrupt_params int_params = {0};
+       int r, i;
+       int_params.requested_polarity = INTERRUPT_POLARITY_DEFAULT;
+       int_params.current_polarity = INTERRUPT_POLARITY_DEFAULT;
+       r = amdgpu_irq_add_id(adev, SOC15_IH_CLIENTID_DCE, DCN_1_0__SRCID__DMCUB_OUTBOX_LOW_PRIORITY_READY_INT,
+                       &adev->dmub_outbox_irq);
+       if (r) {
+               DRM_ERROR("Failed to add outbox irq id!\n");
+               return r;
+       }
+       if (dc->ctx->dmub_srv) {
+               i = DCN_1_0__SRCID__DMCUB_OUTBOX_LOW_PRIORITY_READY_INT;
+               int_params.int_context = INTERRUPT_LOW_IRQ_CONTEXT;
                int_params.irq_source =
-                       dc_interrupt_to_irq_source(dc, i, 0);
+               dc_interrupt_to_irq_source(dc, i, 0);
  
-               c_irq_params = &adev->dm.dmub_trace_params[0];
+               c_irq_params = &adev->dm.dmub_outbox_params[0];
  
                c_irq_params->adev = adev;
                c_irq_params->irq_src = int_params.irq_source;
  
                amdgpu_dm_irq_register_interrupt(adev, &int_params,
-                               dm_dmub_trace_high_irq, c_irq_params);
-       }
-       /* HPD */
-       r = amdgpu_irq_add_id(adev, SOC15_IH_CLIENTID_DCE, DCN_1_0__SRCID__DC_HPD1_INT,
-                       &adev->hpd_irq);
-       if (r) {
-               DRM_ERROR("Failed to add hpd irq id!\n");
-               return r;
+                               dm_dmub_outbox1_low_irq, c_irq_params);
        }
  
-       register_hpd_handlers(adev);
        return 0;
  }
  #endif
@@@ -3414,22 -3471,37 +3471,37 @@@ static int amdgpu_dm_backlight_update_s
  {
        struct amdgpu_display_manager *dm = bl_get_data(bd);
        struct amdgpu_dm_backlight_caps caps;
-       struct dc_link *link = NULL;
+       struct dc_link *link[AMDGPU_DM_MAX_NUM_EDP];
        u32 brightness;
        bool rc;
+       int i;
  
        amdgpu_dm_update_backlight_caps(dm);
        caps = dm->backlight_caps;
  
-       link = (struct dc_link *)dm->backlight_link;
+       for (i = 0; i < dm->num_of_edps; i++)
+               link[i] = (struct dc_link *)dm->backlight_link[i];
  
        brightness = convert_brightness_from_user(&caps, bd->props.brightness);
        // Change brightness based on AUX property
-       if (caps.aux_support)
-               rc = dc_link_set_backlight_level_nits(link, true, brightness,
-                                                     AUX_BL_DEFAULT_TRANSITION_TIME_MS);
-       else
-               rc = dc_link_set_backlight_level(dm->backlight_link, brightness, 0);
+       if (caps.aux_support) {
+               for (i = 0; i < dm->num_of_edps; i++) {
+                       rc = dc_link_set_backlight_level_nits(link[i], true, brightness,
+                               AUX_BL_DEFAULT_TRANSITION_TIME_MS);
+                       if (!rc) {
+                               DRM_ERROR("DM: Failed to update backlight via AUX on eDP[%d]\n", i);
+                               break;
+                       }
+               }
+       } else {
+               for (i = 0; i < dm->num_of_edps; i++) {
+                       rc = dc_link_set_backlight_level(dm->backlight_link[i], brightness, 0);
+                       if (!rc) {
+                               DRM_ERROR("DM: Failed to update backlight on eDP[%d]\n", i);
+                               break;
+                       }
+               }
+       }
  
        return rc ? 0 : 1;
  }
@@@ -3443,7 -3515,7 +3515,7 @@@ static int amdgpu_dm_backlight_get_brig
        caps = dm->backlight_caps;
  
        if (caps.aux_support) {
-               struct dc_link *link = (struct dc_link *)dm->backlight_link;
+               struct dc_link *link = (struct dc_link *)dm->backlight_link[0];
                u32 avg, peak;
                bool rc;
  
                        return bd->props.brightness;
                return convert_brightness_to_user(&caps, avg);
        } else {
-               int ret = dc_link_get_backlight_level(dm->backlight_link);
+               int ret = dc_link_get_backlight_level(dm->backlight_link[0]);
  
                if (ret == DC_ERROR_UNEXPECTED)
                        return bd->props.brightness;
@@@ -3549,10 -3621,13 +3621,13 @@@ static void register_backlight_device(s
                 * DM initialization because not having a backlight control
                 * is better then a black screen.
                 */
-               amdgpu_dm_register_backlight_device(dm);
+               if (!dm->backlight_dev)
+                       amdgpu_dm_register_backlight_device(dm);
  
-               if (dm->backlight_dev)
-                       dm->backlight_link = link;
+               if (dm->backlight_dev) {
+                       dm->backlight_link[dm->num_of_edps] = link;
+                       dm->num_of_edps++;
+               }
        }
  #endif
  }
@@@ -3643,6 -3718,22 +3718,22 @@@ static int amdgpu_dm_initialize_drm_dev
                        goto fail;
                }
  
+ #if defined(CONFIG_DRM_AMD_DC_DCN)
+       /* Use Outbox interrupt */
+       switch (adev->asic_type) {
+       case CHIP_SIENNA_CICHLID:
+       case CHIP_NAVY_FLOUNDER:
+       case CHIP_RENOIR:
+               if (register_outbox_irq_handlers(dm->adev)) {
+                       DRM_ERROR("DM: Failed to initialize IRQ\n");
+                       goto fail;
+               }
+               break;
+       default:
+               DRM_DEBUG_KMS("Unsupported ASIC type for outbox: 0x%X\n", adev->asic_type);
+       }
+ #endif
        /* loops over all connectors on the board */
        for (i = 0; i < link_cnt; i++) {
                struct dc_link *link = NULL;
@@@ -6308,6 -6399,25 +6399,6 @@@ static int fill_hdr_info_packet(const s
        return 0;
  }
  
 -static bool
 -is_hdr_metadata_different(const struct drm_connector_state *old_state,
 -                        const struct drm_connector_state *new_state)
 -{
 -      struct drm_property_blob *old_blob = old_state->hdr_output_metadata;
 -      struct drm_property_blob *new_blob = new_state->hdr_output_metadata;
 -
 -      if (old_blob != new_blob) {
 -              if (old_blob && new_blob &&
 -                  old_blob->length == new_blob->length)
 -                      return memcmp(old_blob->data, new_blob->data,
 -                                    old_blob->length);
 -
 -              return true;
 -      }
 -
 -      return false;
 -}
 -
  static int
  amdgpu_dm_connector_atomic_check(struct drm_connector *conn,
                                 struct drm_atomic_state *state)
        if (!crtc)
                return 0;
  
 -      if (is_hdr_metadata_different(old_con_state, new_con_state)) {
 +      if (!drm_connector_atomic_hdr_metadata_equal(old_con_state, new_con_state)) {
                struct dc_info_packet hdr_infopacket;
  
                ret = fill_hdr_info_packet(new_con_state, &hdr_infopacket);
@@@ -6560,13 -6670,13 +6651,13 @@@ static int dm_update_mst_vcpi_slots_for
  {
        struct dc_stream_state *stream = NULL;
        struct drm_connector *connector;
-       struct drm_connector_state *new_con_state, *old_con_state;
+       struct drm_connector_state *new_con_state;
        struct amdgpu_dm_connector *aconnector;
        struct dm_connector_state *dm_conn_state;
        int i, j, clock, bpp;
        int vcpi, pbn_div, pbn = 0;
  
-       for_each_oldnew_connector_in_state(state, connector, old_con_state, new_con_state, i) {
+       for_each_new_connector_in_state(state, connector, new_con_state, i) {
  
                aconnector = to_amdgpu_dm_connector(connector);
  
@@@ -7512,7 -7622,9 +7603,7 @@@ void amdgpu_dm_connector_init_helper(st
        if (connector_type == DRM_MODE_CONNECTOR_HDMIA ||
            connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
            connector_type == DRM_MODE_CONNECTOR_eDP) {
 -              drm_object_attach_property(
 -                      &aconnector->base.base,
 -                      dm->ddev->mode_config.hdr_output_metadata_property, 0);
 +              drm_connector_attach_hdr_output_metadata_property(&aconnector->base);
  
                if (!aconnector->mst_port)
                        drm_connector_attach_vrr_capable_property(&aconnector->base);
@@@ -8164,15 -8276,14 +8255,14 @@@ static void amdgpu_dm_handle_vrr_transi
  static void amdgpu_dm_commit_cursors(struct drm_atomic_state *state)
  {
        struct drm_plane *plane;
-       struct drm_plane_state *old_plane_state, *new_plane_state;
+       struct drm_plane_state *old_plane_state;
        int i;
  
        /*
         * TODO: Make this per-stream so we don't issue redundant updates for
         * commits with multiple streams.
         */
-       for_each_oldnew_plane_in_state(state, plane, old_plane_state,
-                                      new_plane_state, i)
+       for_each_old_plane_in_state(state, plane, old_plane_state, i)
                if (plane->type == DRM_PLANE_TYPE_CURSOR)
                        handle_cursor_update(plane, old_plane_state);
  }
@@@ -8817,7 -8928,7 +8907,7 @@@ static void amdgpu_dm_atomic_commit_tai
                              dm_old_crtc_state->abm_level;
  
                hdr_changed =
 -                      is_hdr_metadata_different(old_con_state, new_con_state);
 +                      !drm_connector_atomic_hdr_metadata_equal(old_con_state, new_con_state);
  
                if (!scaling_changed && !abm_changed && !hdr_changed)
                        continue;
@@@ -10668,3 -10779,30 +10758,30 @@@ uint32_t dm_read_reg_func(const struct 
  
        return value;
  }
+ int amdgpu_dm_process_dmub_aux_transfer_sync(struct dc_context *ctx, unsigned int linkIndex,
+                               struct aux_payload *payload, enum aux_return_code_type *operation_result)
+ {
+       struct amdgpu_device *adev = ctx->driver_context;
+       int ret = 0;
+       dc_process_dmub_aux_transfer_async(ctx->dc, linkIndex, payload);
+       ret = wait_for_completion_interruptible_timeout(&adev->dm.dmub_aux_transfer_done, 10*HZ);
+       if (ret == 0) {
+               *operation_result = AUX_RET_ERROR_TIMEOUT;
+               return -1;
+       }
+       *operation_result = (enum aux_return_code_type)adev->dm.dmub_notify->result;
+       if (adev->dm.dmub_notify->result == AUX_RET_SUCCESS) {
+               (*payload->reply) = adev->dm.dmub_notify->aux_reply.command;
+               // For read case, Copy data to payload
+               if (!payload->write && adev->dm.dmub_notify->aux_reply.length &&
+               (*payload->reply == AUX_TRANSACTION_REPLY_AUX_ACK))
+                       memcpy(payload->data, adev->dm.dmub_notify->aux_reply.data,
+                       adev->dm.dmub_notify->aux_reply.length);
+       }
+       return adev->dm.dmub_notify->aux_reply.length;
+ }
@@@ -278,6 -278,9 +278,9 @@@ dm_dp_mst_detect(struct drm_connector *
        struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
        struct amdgpu_dm_connector *master = aconnector->mst_port;
  
+       if (drm_connector_is_unregistered(connector))
+               return connector_status_disconnected;
        return drm_dp_mst_detect_port(connector, ctx, &master->mst_mgr,
                                      aconnector->port);
  }
@@@ -434,13 -437,10 +437,13 @@@ void amdgpu_dm_initialize_dp_connector(
                                       struct amdgpu_dm_connector *aconnector,
                                       int link_index)
  {
 +      struct dc_link_settings max_link_enc_cap = {0};
 +
        aconnector->dm_dp_aux.aux.name =
                kasprintf(GFP_KERNEL, "AMDGPU DM aux hw bus %d",
                          link_index);
        aconnector->dm_dp_aux.aux.transfer = dm_dp_aux_transfer;
 +      aconnector->dm_dp_aux.aux.drm_dev = dm->ddev;
        aconnector->dm_dp_aux.ddc_service = aconnector->dc_link->ddc;
  
        drm_dp_aux_init(&aconnector->dm_dp_aux.aux);
        if (aconnector->base.connector_type == DRM_MODE_CONNECTOR_eDP)
                return;
  
 +      dc_link_dp_get_max_link_enc_cap(aconnector->dc_link, &max_link_enc_cap);
        aconnector->mst_mgr.cbs = &dm_mst_cbs;
        drm_dp_mst_topology_mgr_init(
                &aconnector->mst_mgr,
                &aconnector->dm_dp_aux.aux,
                16,
                4,
 +              (u8)max_link_enc_cap.lane_count,
 +              (u8)max_link_enc_cap.link_rate,
                aconnector->connector_id);
  
        drm_connector_attach_dp_subconnector_property(&aconnector->base);
@@@ -14,6 -14,7 +14,7 @@@
  #include "dpcd_defs.h"
  #include "dc_dmub_srv.h"
  #include "dce/dmub_hw_lock_mgr.h"
+ #include "inc/link_enc_cfg.h"
  
  /*Travis*/
  static const uint8_t DP_VGA_LVDS_CONVERTER_ID_2[] = "sivarT";
@@@ -107,10 -108,50 +108,50 @@@ static void wait_for_training_aux_rd_in
                wait_in_micro_secs);
  }
  
+ static enum dpcd_training_patterns
+       dc_dp_training_pattern_to_dpcd_training_pattern(
+       struct dc_link *link,
+       enum dc_dp_training_pattern pattern)
+ {
+       enum dpcd_training_patterns dpcd_tr_pattern =
+       DPCD_TRAINING_PATTERN_VIDEOIDLE;
+       switch (pattern) {
+       case DP_TRAINING_PATTERN_SEQUENCE_1:
+               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_1;
+               break;
+       case DP_TRAINING_PATTERN_SEQUENCE_2:
+               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_2;
+               break;
+       case DP_TRAINING_PATTERN_SEQUENCE_3:
+               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_3;
+               break;
+       case DP_TRAINING_PATTERN_SEQUENCE_4:
+               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_4;
+               break;
+       case DP_TRAINING_PATTERN_VIDEOIDLE:
+               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_VIDEOIDLE;
+               break;
+       default:
+               ASSERT(0);
+               DC_LOG_HW_LINK_TRAINING("%s: Invalid HW Training pattern: %d\n",
+                       __func__, pattern);
+               break;
+       }
+       return dpcd_tr_pattern;
+ }
  static void dpcd_set_training_pattern(
        struct dc_link *link,
-       union dpcd_training_pattern dpcd_pattern)
+       enum dc_dp_training_pattern training_pattern)
  {
+       union dpcd_training_pattern dpcd_pattern = { {0} };
+       dpcd_pattern.v1_4.TRAINING_PATTERN_SET =
+                       dc_dp_training_pattern_to_dpcd_training_pattern(
+                                       link, training_pattern);
        core_link_write_dpcd(
                link,
                DP_TRAINING_PATTERN_SET,
@@@ -132,10 -173,22 +173,22 @@@ static enum dc_dp_training_pattern deci
  static enum dc_dp_training_pattern decide_eq_training_pattern(struct dc_link *link,
                const struct dc_link_settings *link_settings)
  {
+       struct link_encoder *link_enc;
        enum dc_dp_training_pattern highest_tp = DP_TRAINING_PATTERN_SEQUENCE_2;
-       struct encoder_feature_support *features = &link->link_enc->features;
+       struct encoder_feature_support *features;
        struct dpcd_caps *dpcd_caps = &link->dpcd_caps;
  
+       /* Access link encoder capability based on whether it is statically
+        * or dynamically assigned to a link.
+        */
+       if (link->is_dig_mapping_flexible &&
+                       link->dc->res_pool->funcs->link_encs_assign)
+               link_enc = link_enc_cfg_get_link_enc_used_by_link(link->dc->current_state, link);
+       else
+               link_enc = link->link_enc;
+       ASSERT(link_enc);
+       features = &link_enc->features;
        if (features->flags.bits.IS_TPS3_CAPABLE)
                highest_tp = DP_TRAINING_PATTERN_SEQUENCE_3;
  
@@@ -227,37 -280,6 +280,6 @@@ static void dpcd_set_link_settings
        }
  }
  
- static enum dpcd_training_patterns
-       dc_dp_training_pattern_to_dpcd_training_pattern(
-       struct dc_link *link,
-       enum dc_dp_training_pattern pattern)
- {
-       enum dpcd_training_patterns dpcd_tr_pattern =
-       DPCD_TRAINING_PATTERN_VIDEOIDLE;
-       switch (pattern) {
-       case DP_TRAINING_PATTERN_SEQUENCE_1:
-               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_1;
-               break;
-       case DP_TRAINING_PATTERN_SEQUENCE_2:
-               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_2;
-               break;
-       case DP_TRAINING_PATTERN_SEQUENCE_3:
-               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_3;
-               break;
-       case DP_TRAINING_PATTERN_SEQUENCE_4:
-               dpcd_tr_pattern = DPCD_TRAINING_PATTERN_4;
-               break;
-       default:
-               ASSERT(0);
-               DC_LOG_HW_LINK_TRAINING("%s: Invalid HW Training pattern: %d\n",
-                       __func__, pattern);
-               break;
-       }
-       return dpcd_tr_pattern;
- }
  static uint8_t dc_dp_initialize_scrambling_data_symbols(
        struct dc_link *link,
        enum dc_dp_training_pattern pattern)
@@@ -420,20 -442,30 +442,30 @@@ static bool is_cr_done(enum dc_lane_cou
  }
  
  static bool is_ch_eq_done(enum dc_lane_count ln_count,
-       union lane_status *dpcd_lane_status,
-       union lane_align_status_updated *lane_status_updated)
+               union lane_status *dpcd_lane_status)
  {
+       bool done = true;
        uint32_t lane;
-       if (!lane_status_updated->bits.INTERLANE_ALIGN_DONE)
-               return false;
-       else {
-               for (lane = 0; lane < (uint32_t)(ln_count); lane++) {
-                       if (!dpcd_lane_status[lane].bits.SYMBOL_LOCKED_0 ||
-                               !dpcd_lane_status[lane].bits.CHANNEL_EQ_DONE_0)
-                               return false;
-               }
-       }
-       return true;
+       for (lane = 0; lane < (uint32_t)(ln_count); lane++)
+               if (!dpcd_lane_status[lane].bits.CHANNEL_EQ_DONE_0)
+                       done = false;
+       return done;
+ }
+ static bool is_symbol_locked(enum dc_lane_count ln_count,
+               union lane_status *dpcd_lane_status)
+ {
+       bool locked = true;
+       uint32_t lane;
+       for (lane = 0; lane < (uint32_t)(ln_count); lane++)
+               if (!dpcd_lane_status[lane].bits.SYMBOL_LOCKED_0)
+                       locked = false;
+       return locked;
+ }
+ static inline bool is_interlane_aligned(union lane_align_status_updated align_status)
+ {
+       return align_status.bits.INTERLANE_ALIGN_DONE == 1;
  }
  
  static void update_drive_settings(
@@@ -835,10 -867,9 +867,9 @@@ static bool perform_post_lt_adj_req_seq
                        if (!is_cr_done(lane_count, dpcd_lane_status))
                                return false;
  
-                       if (!is_ch_eq_done(
-                               lane_count,
-                               dpcd_lane_status,
-                               &dpcd_lane_status_updated))
+                       if (!is_ch_eq_done(lane_count, dpcd_lane_status) ||
+                                       !is_symbol_locked(lane_count, dpcd_lane_status) ||
+                                       !is_interlane_aligned(dpcd_lane_status_updated))
                                return false;
  
                        for (lane = 0; lane < (uint32_t)(lane_count); lane++) {
@@@ -992,9 -1023,9 +1023,9 @@@ static enum link_training_result perfor
                        return LINK_TRAINING_EQ_FAIL_CR;
  
                /* 6. check CHEQ done*/
-               if (is_ch_eq_done(lane_count,
-                       dpcd_lane_status,
-                       &dpcd_lane_status_updated))
+               if (is_ch_eq_done(lane_count, dpcd_lane_status) &&
+                               is_symbol_locked(lane_count, dpcd_lane_status) &&
+                               is_interlane_aligned(dpcd_lane_status_updated))
                        return LINK_TRAINING_SUCCESS;
  
                /* 7. update VS/PE/PC2 in lt_settings*/
@@@ -1162,7 -1193,7 +1193,7 @@@ static inline enum link_training_resul
        return status;
  }
  
static enum link_training_result check_link_loss_status(
enum link_training_result dp_check_link_loss_status(
        struct dc_link *link,
        const struct link_training_settings *link_training_setting)
  {
@@@ -1296,7 -1327,7 +1327,7 @@@ static void initialize_training_setting
                lt_settings->enhanced_framing = 1;
  }
  
static uint8_t convert_to_count(uint8_t lttpr_repeater_count)
uint8_t dp_convert_to_count(uint8_t lttpr_repeater_count)
  {
        switch (lttpr_repeater_count) {
        case 0x80: // 1 lttpr repeater
@@@ -1365,7 -1396,8 +1396,8 @@@ static void configure_lttpr_mode_non_tr
                        link->dpcd_caps.lttpr_caps.mode = repeater_mode;
                }
  
-               repeater_cnt = convert_to_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt);
+               repeater_cnt = dp_convert_to_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt);
                for (repeater_id = repeater_cnt; repeater_id > 0; repeater_id--) {
                        aux_interval_address = DP_TRAINING_AUX_RD_INTERVAL_PHY_REPEATER1 +
                                                ((DP_REPEATER_CONFIGURATION_AND_STATUS_SIZE) * (repeater_id - 1));
@@@ -1555,7 -1587,6 +1587,6 @@@ enum link_training_result dc_link_dp_pe
  {
        enum link_training_result status = LINK_TRAINING_SUCCESS;
        struct link_training_settings lt_settings;
-       union dpcd_training_pattern dpcd_pattern = { { 0 } };
  
        bool fec_enable;
        uint8_t repeater_cnt;
                /* 2. perform link training (set link training done
                 *  to false is done as well)
                 */
-               repeater_cnt = convert_to_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt);
+               repeater_cnt = dp_convert_to_count(link->dpcd_caps.lttpr_caps.phy_repeater_cnt);
  
                for (repeater_id = repeater_cnt; (repeater_id > 0 && status == LINK_TRAINING_SUCCESS);
                                repeater_id--) {
        }
  
        /* 3. set training not in progress*/
-       dpcd_pattern.v1_4.TRAINING_PATTERN_SET = DPCD_TRAINING_PATTERN_VIDEOIDLE;
-       dpcd_set_training_pattern(link, dpcd_pattern);
+       dpcd_set_training_pattern(link, DP_TRAINING_PATTERN_VIDEOIDLE);
        if ((status == LINK_TRAINING_SUCCESS) || !skip_video_pattern) {
                status = perform_link_training_int(link,
                                &lt_settings,
         */
        if (link->connector_signal != SIGNAL_TYPE_EDP && status == LINK_TRAINING_SUCCESS) {
                msleep(5);
-               status = check_link_loss_status(link, &lt_settings);
+               status = dp_check_link_loss_status(link, &lt_settings);
        }
  
        /* 6. print status message*/
@@@ -1687,18 -1717,31 +1717,31 @@@ bool perform_link_training_with_retries
        bool skip_video_pattern,
        int attempts,
        struct pipe_ctx *pipe_ctx,
-       enum signal_type signal)
+       enum signal_type signal,
+       bool do_fallback)
  {
        uint8_t j;
        uint8_t delay_between_attempts = LINK_TRAINING_RETRY_DELAY;
        struct dc_stream_state *stream = pipe_ctx->stream;
        struct dc_link *link = stream->link;
        enum dp_panel_mode panel_mode;
+       struct link_encoder *link_enc;
+       enum link_training_result status = LINK_TRAINING_CR_FAIL_LANE0;
+       struct dc_link_settings currnet_setting = *link_setting;
+       /* Dynamically assigned link encoders associated with stream rather than
+        * link.
+        */
+       if (link->dc->res_pool->funcs->link_encs_assign)
+               link_enc = stream->link_enc;
+       else
+               link_enc = link->link_enc;
+       ASSERT(link_enc);
  
        /* We need to do this before the link training to ensure the idle pattern in SST
         * mode will be sent right after the link training
         */
-       link->link_enc->funcs->connect_dig_be_to_fe(link->link_enc,
+       link_enc->funcs->connect_dig_be_to_fe(link_enc,
                                                        pipe_ctx->stream_res.stream_enc->id, true);
  
        for (j = 0; j < attempts; ++j) {
                        link,
                        signal,
                        pipe_ctx->clock_source->id,
-                       link_setting);
+                       &currnet_setting);
  
                if (stream->sink_patches.dppowerup_delay > 0) {
                        int delay_dp_power_up_in_ms = stream->sink_patches.dppowerup_delay;
                         panel_mode != DP_PANEL_MODE_DEFAULT);
  
                if (link->aux_access_disabled) {
-                       dc_link_dp_perform_link_training_skip_aux(link, link_setting);
+                       dc_link_dp_perform_link_training_skip_aux(link, &currnet_setting);
                        return true;
                } else {
-                       enum link_training_result status = LINK_TRAINING_CR_FAIL_LANE0;
                                status = dc_link_dp_perform_link_training(
                                                                                link,
-                                                                               link_setting,
+                                                                               &currnet_setting,
                                                                                skip_video_pattern);
                        if (status == LINK_TRAINING_SUCCESS)
                                return true;
  
                /* latest link training still fail, skip delay and keep PHY on
                 */
-               if (j == (attempts - 1))
+               if (j == (attempts - 1) && link->ep_type == DISPLAY_ENDPOINT_PHY)
                        break;
  
                DC_LOG_WARNING("%s: Link training attempt %u of %d failed\n",
  
                dp_disable_link_phy(link, signal);
  
+               /* Abort link training if failure due to sink being unplugged. */
+               if (status == LINK_TRAINING_ABORT)
+                       break;
+               else if (do_fallback) {
+                       decide_fallback_link_setting(*link_setting, &currnet_setting, status);
+                       /* Fail link training if reduced link bandwidth no longer meets
+                        * stream requirements.
+                        */
+                       if (dc_bandwidth_in_kbps_from_timing(&stream->timing) <
+                                       dc_link_bandwidth_kbps(link, &currnet_setting))
+                               break;
+               }
                msleep(delay_between_attempts);
  
                delay_between_attempts += LINK_TRAINING_RETRY_DELAY;
@@@ -1893,24 -1947,6 +1947,24 @@@ bool dc_link_dp_sync_lt_end(struct dc_l
        return true;
  }
  
 +bool dc_link_dp_get_max_link_enc_cap(const struct dc_link *link, struct dc_link_settings *max_link_enc_cap)
 +{
 +      if (!max_link_enc_cap) {
 +              DC_LOG_ERROR("%s: Could not return max link encoder caps", __func__);
 +              return false;
 +      }
 +
 +      if (link->link_enc->funcs->get_max_link_cap) {
 +              link->link_enc->funcs->get_max_link_cap(link->link_enc, max_link_enc_cap);
 +              return true;
 +      }
 +
 +      DC_LOG_ERROR("%s: Max link encoder caps unknown", __func__);
 +      max_link_enc_cap->lane_count = 1;
 +      max_link_enc_cap->link_rate = 6;
 +      return false;
 +}
 +
  static struct dc_link_settings get_max_link_cap(struct dc_link *link)
  {
        struct dc_link_settings max_link_cap = {0};
@@@ -2429,6 -2465,12 +2483,12 @@@ bool dp_validate_mode_timing
  
        const struct dc_link_settings *link_setting;
  
+       /* According to spec, VSC SDP should be used if pixel format is YCbCr420 */
+       if (timing->pixel_encoding == PIXEL_ENCODING_YCBCR420 &&
+                       !link->dpcd_caps.dprx_feature.bits.VSC_SDP_COLORIMETRY_SUPPORTED &&
+                       dal_graphics_object_id_get_connector_id(link->link_id) != CONNECTOR_ID_VIRTUAL)
+               return false;
        /*always DP fail safe mode*/
        if ((timing->pix_clk_100hz / 10) == (uint32_t) 25175 &&
                timing->h_addressable == (uint32_t) 640 &&
@@@ -2611,13 -2653,11 +2671,11 @@@ static bool allow_hpd_rx_irq(const stru
        /*
         * Don't handle RX IRQ unless one of following is met:
         * 1) The link is established (cur_link_settings != unknown)
-        * 2) We kicked off MST detection
-        * 3) We know we're dealing with an active dongle
+        * 2) We know we're dealing with a branch device, SST or MST
         */
  
        if ((link->cur_link_settings.lane_count != LANE_COUNT_UNKNOWN) ||
-               (link->type == dc_connection_mst_branch) ||
-               is_dp_active_dongle(link))
+               is_dp_branch_device(link))
                return true;
  
        return false;
@@@ -2917,6 -2957,22 +2975,22 @@@ static void dp_test_send_link_test_patt
                break;
        }
  
+       switch (dpcd_test_params.bits.CLR_FORMAT) {
+       case 0:
+               pipe_ctx->stream->timing.pixel_encoding = PIXEL_ENCODING_RGB;
+               break;
+       case 1:
+               pipe_ctx->stream->timing.pixel_encoding = PIXEL_ENCODING_YCBCR422;
+               break;
+       case 2:
+               pipe_ctx->stream->timing.pixel_encoding = PIXEL_ENCODING_YCBCR444;
+               break;
+       default:
+               pipe_ctx->stream->timing.pixel_encoding = PIXEL_ENCODING_RGB;
+               break;
+       }
        if (requestColorDepth != COLOR_DEPTH_UNDEFINED
                        && pipe_ctx->stream->timing.display_color_depth != requestColorDepth) {
                DC_LOG_DEBUG("%s: original bpc %d, changing to %d\n",
                                pipe_ctx->stream->timing.display_color_depth,
                                requestColorDepth);
                pipe_ctx->stream->timing.display_color_depth = requestColorDepth;
-               dp_update_dsc_config(pipe_ctx);
        }
  
+       dp_update_dsc_config(pipe_ctx);
        dc_link_dp_set_test_pattern(
                        link,
                        test_pattern,
@@@ -3182,7 -3239,7 +3257,7 @@@ bool dc_link_handle_hpd_rx_irq(struct d
                        *out_link_loss = true;
        }
  
-       if (link->type == dc_connection_active_dongle &&
+       if (link->type == dc_connection_sst_branch &&
                hpd_irq_dpcd_data.bytes.sink_cnt.bits.SINK_COUNT
                        != link->dpcd_sink_count)
                status = true;
@@@ -3233,6 -3290,12 +3308,12 @@@ bool is_mst_supported(struct dc_link *l
  
  bool is_dp_active_dongle(const struct dc_link *link)
  {
+       return (link->dpcd_caps.dongle_type >= DISPLAY_DONGLE_DP_VGA_CONVERTER) &&
+                               (link->dpcd_caps.dongle_type <= DISPLAY_DONGLE_DP_HDMI_CONVERTER);
+ }
+ bool is_dp_branch_device(const struct dc_link *link)
+ {
        return link->dpcd_caps.is_branch_dev;
  }
  
@@@ -3593,7 -3656,9 +3674,9 @@@ static bool retrieve_link_cap(struct dc
                                lttpr_dpcd_data[DP_PHY_REPEATER_EXTENDED_WAIT_TIMEOUT -
                                                                DP_LT_TUNABLE_PHY_REPEATER_FIELD_DATA_STRUCTURE_REV];
  
+               /* Attempt to train in LTTPR transparent mode if repeater count exceeds 8. */
                is_lttpr_present = (link->dpcd_caps.lttpr_caps.phy_repeater_cnt > 0 &&
+                               link->dpcd_caps.lttpr_caps.phy_repeater_cnt < 0xff &&
                                link->dpcd_caps.lttpr_caps.max_lane_count > 0 &&
                                link->dpcd_caps.lttpr_caps.max_lane_count <= 4 &&
                                link->dpcd_caps.lttpr_caps.revision.raw >= 0x14);
@@@ -36,12 -36,6 +36,6 @@@ enum dc_link_fec_state 
        dc_link_fec_enabled
  };
  
- enum lttpr_mode {
-       LTTPR_MODE_NON_LTTPR,
-       LTTPR_MODE_TRANSPARENT,
-       LTTPR_MODE_NON_TRANSPARENT,
- };
  struct dc_link_status {
        bool link_active;
        struct dpcd_caps *dpcd_caps;
@@@ -113,6 -107,7 +107,7 @@@ struct dc_link 
        /* TODO: Rename. Flag an endpoint as having a programmable mapping to a
         * DIG encoder. */
        bool is_dig_mapping_flexible;
+       bool hpd_status; /* HPD status of link without physical HPD pin. */
  
        bool edp_sink_present;
  
@@@ -345,8 -340,6 +340,8 @@@ bool dc_link_dp_set_test_pattern
        const unsigned char *p_custom_pattern,
        unsigned int cust_pattern_size);
  
 +bool dc_link_dp_get_max_link_enc_cap(const struct dc_link *link, struct dc_link_settings *max_link_enc_cap);
 +
  void dc_link_enable_hpd_filter(struct dc_link *link, bool enable);
  
  bool dc_link_is_dp_sink_present(struct dc_link *link);
@@@ -363,9 -356,6 +358,6 @@@ bool dc_link_is_hdcp22(struct dc_link *
  void dc_link_set_drive_settings(struct dc *dc,
                                struct link_training_settings *lt_settings,
                                const struct dc_link *link);
- void dc_link_perform_link_training(struct dc *dc,
-                                  struct dc_link_settings *link_setting,
-                                  bool skip_video_pattern);
  void dc_link_set_preferred_link_settings(struct dc *dc,
                                         struct dc_link_settings *link_setting,
                                         struct dc_link *link);