Skip to contentSkip to conversation

Linux 6.1.29

DISCUSSION Greg Kroah-Hartman 1 participant 2 messages May 17, 2023 Stable branch

lore
Share & tools
lore

Greg Kroah-Hartman

author maintainer
#0 lore raw

I'm announcing the release of the 6.1.29 kernel.

All users of the 6.1 kernel series must upgrade.

The updated 6.1.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.1.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary

thanks,

greg k-h

------------

 Makefile                                                              |    2 
 arch/arm/boot/dts/aspeed-bmc-asrock-e3c246d4i.dts                     |    2 
 arch/arm/boot/dts/aspeed-bmc-asrock-romed8hm3.dts                     |    4 
 arch/arm/boot/dts/exynos4412-itop-elite.dts                           |    2 
 arch/arm/boot/dts/s5pv210.dtsi                                        |    2 
 arch/riscv/errata/sifive/errata.c                                     |    3 
 arch/riscv/errata/thead/errata.c                                      |    8 
 arch/riscv/kernel/Makefile                                            |    1 
 arch/riscv/kernel/cpufeature.c                                        |    6 
 arch/riscv/mm/pageattr.c                                              |    8 
 arch/s390/kernel/uv.c                                                 |   32 
 arch/sh/Kconfig.debug                                                 |    2 
 arch/sh/kernel/head_32.S                                              |    6 
 arch/sh/kernel/nmi_debug.c                                            |    4 
 arch/sh/kernel/setup.c                                                |    4 
 arch/sh/math-emu/sfp-util.h                                           |    4 
 arch/x86/events/intel/lbr.c                                           |    6 
 arch/x86/include/asm/perf_event.h                                     |    6 
 arch/x86/kernel/amd_nb.c                                              |    2 
 arch/x86/kvm/kvm_cache_regs.h                                         |    2 
 arch/x86/kvm/mmu.h                                                    |   26 
 arch/x86/kvm/mmu/mmu.c                                                |   46 
 arch/x86/kvm/mmu/paging_tmpl.h                                        |    2 
 arch/x86/kvm/pmu.c                                                    |    4 
 arch/x86/kvm/svm/svm.c                                                |    2 
 arch/x86/kvm/vmx/capabilities.h                                       |   24 
 arch/x86/kvm/vmx/nested.c                                             |    4 
 arch/x86/kvm/vmx/pmu_intel.c                                          |    2 
 arch/x86/kvm/vmx/vmx.c                                                |   42 
 arch/x86/kvm/vmx/vmx.h                                                |   18 
 arch/x86/kvm/x86.c                                                    |   12 
 arch/x86/kvm/x86.h                                                    |    1 
 arch/x86/lib/clear_page_64.S                                          |    2 
 arch/x86/lib/retpoline.S                                              |    4 
 block/blk-cgroup.c                                                    |    3 
 crypto/algapi.c                                                       |    3 
 crypto/crypto_engine.c                                                |   10 
 drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c                   |    2 
 drivers/crypto/ccp/psp-dev.c                                          |    6 
 drivers/edac/qcom_edac.c                                              |   50 
 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c                            |    6 
 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c                               |   59 
 drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h                               |    3 
 drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c                             |    6 
 drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c                             |   36 
 drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h                             |    3 
 drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c                                 |    3 
 drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c                                |    1 
 drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c                                |    1 
 drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c                                 |    1 
 drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c                                |    1 
 drivers/gpu/drm/amd/amdgpu/mes_v10_1.c                                |  111 -
 drivers/gpu/drm/amd/amdgpu/mes_v11_0.c                                |  102 
 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c                                |    8 
 drivers/gpu/drm/amd/amdgpu/soc21.c                                    |    2 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c                     |   28 
 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c           |    1 
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c              |    4 
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_smu.c            |   12 
 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c          |    5 
 drivers/gpu/drm/amd/display/dc/core/dc_link.c                         |    2 
 drivers/gpu/drm/amd/display/dc/core/dc_resource.c                     |    3 
 drivers/gpu/drm/amd/display/dc/dc.h                                   |    5 
 drivers/gpu/drm/amd/display/dc/dc_link.h                              |   14 
 drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c             |   16 
 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c                    |    8 
 drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c                 |    5 
 drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c                 |   15 
 drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c               |   14 
 drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c               |   13 
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c                     |   13 
 drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c                 |    4 
 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c                   |   23 
 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c                  |   10 
 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.h                  |    2 
 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_init.c                   |    1 
 drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c               |    6 
 drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c               |    4 
 drivers/gpu/drm/amd/display/dc/dcn316/dcn316_resource.c               |    4 
 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c                    |    1 
 drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c                 |   12 
 drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c               |   10 
 drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c                  |   21 
 drivers/gpu/drm/amd/display/dc/dml/dcn30/dcn30_fpu.c                  |   20 
 drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c                |    4 
 drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c                  |   17 
 drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c        |    5 
 drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.h        |    1 
 drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c                |   24 
 drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h                          |   25 
 drivers/gpu/drm/amd/display/dc/inc/hw_sequencer_private.h             |    4 
 drivers/gpu/drm/amd/display/dmub/src/dmub_dcn32.c                     |    3 
 drivers/gpu/drm/amd/pm/amdgpu_dpm.c                                   |   25 
 drivers/gpu/drm/bridge/lontium-lt8912b.c                              |    1 
 drivers/gpu/drm/i915/display/icl_dsi.c                                |    2 
 drivers/gpu/drm/i915/display/intel_dsi_vbt.c                          |   11 
 drivers/gpu/drm/i915/display/intel_dsi_vbt.h                          |    1 
 drivers/gpu/drm/i915/display/skl_scaler.c                             |   57 
 drivers/gpu/drm/i915/display/vlv_dsi.c                                |   22 
 drivers/gpu/drm/i915/i915_pci.c                                       |    2 
 drivers/gpu/drm/i915/i915_reg.h                                       |    4 
 drivers/gpu/drm/msm/adreno/a4xx_gpu.c                                 |    3 
 drivers/gpu/drm/msm/adreno/a5xx_gpu.c                                 |   27 
 drivers/gpu/drm/msm/adreno/a5xx_preempt.c                             |    4 
 drivers/gpu/drm/msm/adreno/a6xx_gpu.c                                 |   58 
 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c                           |    3 
 drivers/gpu/drm/msm/adreno/adreno_device.c                            |   16 
 drivers/gpu/drm/msm/msm_drv.c                                         |   53 
 drivers/gpu/drm/msm/msm_drv.h                                         |    8 
 drivers/gpu/drm/msm/msm_gpu.c                                         |   31 
 drivers/gpu/drm/msm/msm_gpu.h                                         |   22 
 drivers/gpu/drm/msm/msm_ringbuffer.h                                  |   28 
 drivers/gpu/drm/panel/panel-orisetech-otm8009a.c                      |    2 
 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h                                   |    3 
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.c                                   |   96 
 drivers/gpu/drm/vmwgfx/vmwgfx_kms.h                                   |    5 
 drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c                                   |   53 
 drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c                                  |   31 
 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c                                  |   26 
 drivers/hid/wacom_wac.c                                               |   38 
 drivers/hid/wacom_wac.h                                               |    1 
 drivers/i2c/busses/i2c-tegra.c                                        |   40 
 drivers/irqchip/irq-loongarch-cpu.c                                   |   30 
 drivers/irqchip/irq-loongson-eiointc.c                                |   62 
 drivers/irqchip/irq-loongson-pch-pic.c                                |   18 
 drivers/mailbox/zynqmp-ipi-mailbox.c                                  |   13 
 drivers/mtd/spi-nor/core.c                                            |   12 
 drivers/mtd/spi-nor/core.h                                            |    6 
 drivers/mtd/spi-nor/debugfs.c                                         |    2 
 drivers/mtd/spi-nor/issi.c                                            |    1 
 drivers/mtd/spi-nor/spansion.c                                        |   35 
 drivers/net/dsa/mt7530.c                                              |  113 -
 drivers/net/dsa/mv88e6xxx/chip.c                                      |    1 
 drivers/net/ethernet/freescale/enetc/enetc_qos.c                      |    2 
 drivers/net/ethernet/intel/ice/ice_tc_lib.c                           |    3 
 drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c                          |    3 
 drivers/net/ethernet/intel/ixgbe/ixgbe_main.c                         |    6 
 drivers/net/ethernet/marvell/octeontx2/af/mbox.c                      |    5 
 drivers/net/ethernet/marvell/octeontx2/af/mbox.h                      |   33 
 drivers/net/ethernet/marvell/octeontx2/af/mcs.c                       |  110 -
 drivers/net/ethernet/marvell/octeontx2/af/mcs.h                       |   26 
 drivers/net/ethernet/marvell/octeontx2/af/mcs_cnf10kb.c               |   63 
 drivers/net/ethernet/marvell/octeontx2/af/mcs_reg.h                   |    6 
 drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c                |   37 
 drivers/net/ethernet/marvell/octeontx2/af/npc.h                       |    1 
 drivers/net/ethernet/marvell/octeontx2/af/rvu.c                       |   49 
 drivers/net/ethernet/marvell/octeontx2/af/rvu.h                       |    2 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c                   |    2 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c                 |   13 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c               |   11 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c                   |   22 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c                |  169 +
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.h                |    4 
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c              |  125 -
 drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.h              |   10 
 drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c             |   48 
 drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h              |    6 
 drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c               |   27 
 drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c                  |   14 
 drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c                  |    2 
 drivers/net/ethernet/pensando/ionic/ionic_devlink.c                   |    2 
 drivers/net/ethernet/pensando/ionic/ionic_ethtool.c                   |    2 
 drivers/net/ethernet/sfc/mcdi_port_common.c                           |   11 
 drivers/net/usb/r8152.c                                               |   84 
 drivers/net/virtio_net.c                                              |    2 
 drivers/net/wireless/realtek/rtw88/rtw8821c.c                         |    2 
 drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c |    6 
 drivers/platform/x86/thinkpad_acpi.c                                  |   24 
 drivers/platform/x86/touchscreen_dmi.c                                |   41 
 drivers/remoteproc/imx_dsp_rproc.c                                    |   12 
 drivers/remoteproc/imx_rproc.c                                        |    7 
 drivers/remoteproc/rcar_rproc.c                                       |    9 
 drivers/remoteproc/st_remoteproc.c                                    |    5 
 drivers/remoteproc/stm32_rproc.c                                      |    6 
 drivers/scsi/qedi/qedi_main.c                                         |    3 
 drivers/soc/qcom/llcc-qcom.c                                          |   15 
 drivers/spi/spi-fsl-cpm.c                                             |   23 
 drivers/spi/spi-fsl-spi.c                                             |   49 
 drivers/usb/dwc3/gadget.c                                             |   59 
 drivers/watchdog/dw_wdt.c                                             |    7 
 fs/btrfs/block-rsv.c                                                  |    3 
 fs/btrfs/ctree.c                                                      |   32 
 fs/btrfs/disk-io.c                                                    |   25 
 fs/btrfs/file-item.c                                                  |    5 
 fs/btrfs/free-space-cache.c                                           |    7 
 fs/btrfs/free-space-tree.c                                            |   50 
 fs/btrfs/free-space-tree.h                                            |    3 
 fs/btrfs/inode.c                                                      |    3 
 fs/btrfs/ioctl.c                                                      |    4 
 fs/btrfs/print-tree.c                                                 |    6 
 fs/btrfs/super.c                                                      |    6 
 fs/btrfs/zoned.c                                                      |   17 
 fs/cifs/cifsfs.c                                                      |   16 
 fs/cifs/connect.c                                                     |    7 
 fs/cifs/smb2ops.c                                                     |    2 
 fs/ext4/balloc.c                                                      |   25 
 fs/ext4/extents_status.c                                              |   30 
 fs/ext4/hash.c                                                        |    6 
 fs/ext4/inline.c                                                      |   17 
 fs/ext4/inode.c                                                       |    2 
 fs/ext4/mballoc.c                                                     |    6 
 fs/ext4/mmp.c                                                         |   30 
 fs/ext4/namei.c                                                       |   53 
 fs/ext4/super.c                                                       |   19 
 fs/ext4/xattr.c                                                       |    5 
 fs/f2fs/data.c                                                        |   20 
 fs/f2fs/debug.c                                                       |   65 
 fs/f2fs/extent_cache.c                                                |  579 +++--
 fs/f2fs/f2fs.h                                                        |  213 --
 fs/f2fs/file.c                                                        |    8 
 fs/f2fs/gc.c                                                          |  143 -
 fs/f2fs/gc.h                                                          |   14 
 fs/f2fs/inode.c                                                       |   44 
 fs/f2fs/namei.c                                                       |   20 
 fs/f2fs/node.c                                                        |   10 
 fs/f2fs/node.h                                                        |    2 
 fs/f2fs/segment.c                                                     |   11 
 fs/f2fs/shrinker.c                                                    |   19 
 fs/f2fs/super.c                                                       |   12 
 fs/fs-writeback.c                                                     |    2 
 fs/ksmbd/connection.c                                                 |   68 
 fs/ksmbd/connection.h                                                 |   58 
 fs/ksmbd/mgmt/tree_connect.c                                          |    3 
 fs/ksmbd/mgmt/user_session.c                                          |  138 -
 fs/ksmbd/mgmt/user_session.h                                          |    5 
 fs/ksmbd/server.c                                                     |    3 
 fs/ksmbd/smb2pdu.c                                                    |  122 -
 fs/ksmbd/smb2pdu.h                                                    |    2 
 fs/ksmbd/transport_tcp.c                                              |    2 
 fs/notify/inotify/inotify_fsnotify.c                                  |   11 
 fs/ntfs3/bitmap.c                                                     |    3 
 fs/ntfs3/namei.c                                                      |   10 
 fs/ntfs3/ntfs.h                                                       |    3 
 fs/proc/proc_sysctl.c                                                 |   42 
 include/crypto/algapi.h                                               |    7 
 include/drm/display/drm_dp.h                                          |   10 
 include/drm/display/drm_dp_helper.h                                   |    5 
 include/linux/crypto.h                                                |    6 
 include/linux/pci_ids.h                                               |    1 
 include/trace/events/f2fs.h                                           |   62 
 kernel/locking/rwsem.c                                                |    8 
 net/core/skbuff.c                                                     |   20 
 net/ethtool/ioctl.c                                                   |    2 
 net/ipv6/sit.c                                                        |    8 
 net/ipv6/tcp_ipv6.c                                                   |    2 
 net/ncsi/ncsi-aen.c                                                   |    1 
 net/packet/af_packet.c                                                |    2 
 net/rxrpc/sendmsg.c                                                   |    2 
 net/sched/act_mirred.c                                                |    2 
 net/sched/cls_api.c                                                   |    1 
 sound/soc/codecs/Kconfig                                              |    6 
 sound/soc/codecs/Makefile                                             |    2 
 sound/soc/codecs/rt1316-sdw.c                                         |    2 
 sound/soc/codecs/rt1318-sdw.c                                         |  884 ++++++++
 sound/soc/codecs/rt1318-sdw.h                                         |  101 
 sound/soc/codecs/rt711-sdca-sdw.c                                     |    2 
 sound/soc/codecs/rt715-sdca-sdw.c                                     |    2 
 sound/soc/codecs/wcd938x-sdw.c                                        | 1039 +++++++++-
 sound/soc/codecs/wcd938x.c                                            | 1003 ---------
 sound/soc/codecs/wcd938x.h                                            |    1 
 sound/soc/codecs/wsa881x.c                                            |    2 
 sound/soc/codecs/wsa883x.c                                            |    2 
 sound/soc/intel/common/soc-acpi-intel-byt-match.c                     |    2 
 sound/usb/caiaq/input.c                                               |    1 
 tools/perf/builtin-ftrace.c                                           |    6 
 tools/perf/builtin-record.c                                           |    2 
 tools/perf/builtin-stat.c                                             |    4 
 tools/perf/pmu-events/arch/powerpc/power9/other.json                  |    4 
 tools/perf/pmu-events/arch/powerpc/power9/pipeline.json               |    2 
 tools/perf/pmu-events/arch/s390/cf_z16/extended.json                  |   10 
 tools/perf/scripts/python/intel-pt-events.py                          |    2 
 tools/perf/tests/shell/record_offcpu.sh                               |    2 
 tools/perf/util/cs-etm.c                                              |   30 
 tools/perf/util/evsel.h                                               |    5 
 tools/perf/util/pmu.c                                                 |    2 
 tools/perf/util/sort.c                                                |    3 
 tools/perf/util/symbol-elf.c                                          |    2 
 tools/perf/util/tracepoint.c                                          |    1 
 tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh               |   10 
 tools/testing/selftests/netfilter/Makefile                            |    7 
 280 files changed, 5463 insertions(+), 3033 deletions(-)

Akhil R (1):
i2c: tegra: Fix PEC support for SMBUS block read

Alvin Lee (1):
drm/amd/display: Enforce 60us prefetch for 200Mhz DCFCLK modes

Anastasia Belova (1):
btrfs: print-tree: parent bytenr must be aligned to sector size

Andrea Mayer (1):
selftests: srv6: make srv6_end_dt46_l3vpn_test more robust

Andrey Avdeev (1):
platform/x86: touchscreen_dmi: Add info for the Dexp Ursus KX210i

Andy Moreton (1):
sfc: Fix module EEPROM reporting for QSFP modules

Angelo Dureghello (1):

      net: dsa: mv88e6xxx: add mv88e6321 rsvd2cpu

Animesh Manna (1):
drm/i915/mtl: update scaler source and destination limits for MTL

Antoine Tenart (1):
net: ipv6: fix skb hash for some RST packets

Arnaldo Carvalho de Melo (1):
perf pmu: zfree() expects a pointer to a pointer to zero it after freeing its contents

Arınç ÜNAL (2):
net: dsa: mt7530: fix corrupt frames using trgmii on 40 MHz XTAL MT7621
net: dsa: mt7530: fix network connectivity with multiple CPU ports

Aurabindo Pillai (4):
drm/amd/display: Fixes for dcn32_clk_mgr implementation drm/amd/display: Do not clear GPINT register when releasing DMUB from reset drm/amd/display: Update bounding box values for DCN321 drm/amd/display: Fix hang when skipping modeset

Baokun Li (1):
ext4: check iomap type only if ext4_iomap_begin() does not fail

Boris Burkov (1):
btrfs: fix encoded write i_size corruption with no-holes

Borislav Petkov (AMD) (1):
x86/retbleed: Fix return thunk alignment

Chaitanya Kumar Borah (1):
drm/i915/color: Fix typo for Plane CSC indexes

Chao Yu (2):
f2fs: fix to do sanity check on extent cache correctly
f2fs: inode: fix to do sanity check on extent cache correctly

Chia-I Wu (1):
drm/amdgpu: add a missing lock for AMDGPU_SCHED

Christoph Hellwig (1):
btrfs: zero the buffer before marking it dirty in btrfs_redirty_list_add

Christophe JAILLET (3):
mailbox: zynq: Switch to flexible array to simplify code
watchdog: dw_wdt: Fix the error handling path of dw_wdt_drv_probe()
crypto: sun8i-ss - Fix a test in sun8i_ss_setup_ivs()

Christophe Leroy (2):
spi: fsl-spi: Re-organise transfer bits_per_word adaptation
spi: fsl-cpm: Use 16 bit mode for large transfers with even size

Claudio Imbrenda (1):
KVM: s390: fix race in gmap_make_secure()

Cong Wang (1):

      sit: update dev->needed_headroom in ipip6_tunnel_bind_dev()

Conor Dooley (2):
RISC-V: take text_mutex during alternative patching
RISC-V: fix taking the text_mutex twice during sifive errata patching

Cosmo Chou (1):
net/ncsi: clear Tx enable mode when handling a Config required AEN

Cruise Hung (1):
drm/amd/display: Reset OUTBOX0 r/w pointer on DMUB reset

Daniel Golle (1):
net: dsa: mt7530: split-off common parts from mt7531_setup

David Howells (1):
rxrpc: Fix hard call timeout units

Dawei Li (1):

      ksmbd: Implements sess->ksmbd_chann_list as xarray

Dmitrii Dolgov (1):
perf stat: Separate bperf from bpf_profiler

Eric Dumazet (1):
tcp: fix skb_copy_ubufs() vs BIG TCP

Filipe Manana (2):
btrfs: fix btrfs_prev_leaf() to not return the same key twice
btrfs: fix space cache inconsistency after error loading it from disk

Francesco Dolcini (1):
drm/bridge: lt8912b: Fix DSI Video Mode

Geetha sowjanya (4):
octeonxt2-af: mcs: Fix per port bypass config
octeontx2-af: mcs: Config parser to skip 8B header
octeontx2-af: mcs: Fix MCS block interrupt
octeontx2-af: Secure APR table update with the lock

Graham Sider (1):
drm/amdgpu: remove deprecated MES version vars

Greg Kroah-Hartman (1):

      Linux 6.1.29

Guchun Chen (4):
drm/amdgpu/gfx: disable gfx9 cp_ecc_error_irq only when enabling legacy gfx ras drm/amd/pm: parse pp_handle under appropriate conditions drm/amdgpu: disable sdma ecc irq only when sdma RAS is enabled in suspend drm/amd/pm: avoid potential UBSAN issue on legacy asics

Guo Ren (1):
riscv: compat_syscall_table: Fixup compile warning

Hamza Mahfooz (2):
drm/amd/display: fix flickering caused by S/G mode drm/amdgpu: fix an amdgpu_irq_put() issue in gmc_v9_0_hw_fini()

Hans de Goede (3):
ASoC: Intel: soc-acpi-byt: Fix "WM510205" match no longer working platform/x86: touchscreen_dmi: Add upside-down quirk for GDIX1002 ts on the Juno Tablet drm/i915/dsi: Use unconditional msleep() instead of intel_dsi_msleep()

Hayes Wang (3):
r8152: fix flow control issue of RTL8156A
r8152: fix the poor throughput for 2.5G devices
r8152: move setting r8153b_rx_agg_chg_indicate()

Herbert Xu (2):
crypto: api - Add scaffolding to change completion function signature
crypto: engine - Use crypto_request_complete

Hersen Wu (1):
drm/amd/display: Return error code on DSC atomic check failure

Horatio Zhang (2):
drm/amdgpu: fix amdgpu_irq_put call trace in gmc_v10_0_hw_fini drm/amdgpu: fix amdgpu_irq_put call trace in gmc_v11_0_hw_fini

Huacai Chen (1):
irqchip/loongarch: Adjust acpi_cascade_irqdomain_init() and sub-routines

Ian Chen (1):
drm/amd/display: Refactor eDP PSR codes

Ido Schimmel (1):
ethtool: Fix uninitialized number of lanes

Jaegeuk Kim (8):
f2fs: fix null pointer panic in tracepoint in __replace_atomic_write_block
f2fs: fix potential corruption when moving a directory
f2fs: specify extent cache for read explicitly
f2fs: move internal functions into extent_cache.c
f2fs: remove unnecessary __init_extent_tree
f2fs: refactor extent_cache to support for read and more
f2fs: allocate the extent_cache by default
f2fs: factor out victim_entry usage from general rb_tree use

James Clark (1):
perf cs-etm: Fix timeless decode mode detection

James Cowgill (1):
drm/panel: otm8009a: Set backlight parent to panel device

Jan Kara (3):
inotify: Avoid reporting event with invalid wd
ext4: fix data races when using cached status extents
ext4: fix lockdep warning when enabling MMP

Jani Nikula (2):
drm/dsc: fix drm_edp_dsc_sink_output_bpp() DPCD high byte usage drm/dsc: fix DP_DSC_MAX_BPP_DELTA_* macro values

Jeremi Piotrowski (1):
crypto: ccp - Clear PSP interrupt status register before calling handler

Jeremy Sowden (1):
selftests: netfilter: fix libmnl pkg-config usage

Jianmin Lv (4):
irqchip/loongson-pch-pic: Fix pch_pic_acpi_init calling irqchip/loongson-eiointc: Fix returned value on parsing MADT irqchip/loongson-eiointc: Fix incorrect use of acpi_get_vec_parent irqchip/loongson-eiointc: Fix registration of syscore_ops

Johan Hovold (8):
USB: dwc3: gadget: drop dead hibernation code drm/msm/adreno: fix runtime PM imbalance at gpu load drm/msm: fix NULL-deref on snapshot tear down drm/msm: fix NULL-deref on irq uninstall drm/msm: fix drm device leak on bind errors drm/msm: fix vram leak on bind errors drm/msm: fix workqueue leak on bind errors drm/msm: fix missing wq allocation error handling

John Hickey (1):
ixgbe: Fix panic during XDP_TX with > 64 CPUs

John Stultz (1):
locking/rwsem: Add __always_inline annotation to __down_read_common() and inlined callers

Josef Bacik (1):
btrfs: don't free qgroup space unless specified

Kajol Jain (1):
perf vendor events power9: Remove UTF-8 characters from JSON files

Kan Liang (1):
perf record: Fix "read LOST count failed" msg with sample read

Konrad Dybcio (1):
drm/msm/adreno: adreno_gpu: Use suspend() instead of idle() on load error

Konstantin Komarov (1):
fs/ntfs3: Refactoring of various minor issues

Krzysztof Kozlowski (4):
ARM: dts: exynos: fix WM8960 clock name in Itop Elite
ARM: dts: s5pv210: correct MIPI CSIS clock name
ASoC: codecs: constify static sdw_slave_ops struct
ASoC: codecs: wcd938x: fix accessing regmap on unattached devices

Kuniyuki Iwashima (1):
af_packet: Don't send zero-byte data in packet_sendmsg_spkt().

Leo Chen (2):
drm/amd/display: Lowering min Z8 residency time drm/amd/display: Change default Z8 watermark values

Lin.Cao (1):
drm/amdgpu: Fix vram recover doesn't work after whole GPU reset (v2)

Linus Torvalds (1):
x86: fix clear_user_rep_good() exception handling annotation

Luis Chamberlain (3):
proc_sysctl: update docs for __register_sysctl_table()
proc_sysctl: enhance documentation
sysctl: clarify register_sysctl_init() base directory order

Manivannan Sadhasivam (2):
qcom: llcc/edac: Support polling mode for ECC handling
soc: qcom: llcc: Do not create EDAC platform device on SDM845

Mario Limonciello (4):
drm/amd: Load MES microcode during early_init drm/amd: Add a new helper for loading/validating microcode drm/amd: Use amdgpu_ucode_* helpers for MES x86/amd_nb: Add PCI ID for family 19h model 78h

Mark Pearson (2):
platform/x86: thinkpad_acpi: Fix platform profiles on T490 platform/x86: thinkpad_acpi: Add profile force ability

Markus Elfring (1):
perf map: Delete two variable initialisations before null pointer checks in sort__sym_from_cmp()

Martin Krastev (1):
drm/vmwgfx: Fix Legacy Display Unit atomic drm support

Mathias Krause (3):
KVM: x86: Do not unload MMU roots when only toggling CR0.WP with TDP enabled
KVM: x86: Make use of kvm_read_cr*_bits() when testing bits
KVM: VMX: Make CR0.WP a guest owned bit

Mathieu Poirier (5):
remoteproc: stm32: Call of_node_put() on iteration error
remoteproc: st: Call of_node_put() on iteration error
remoteproc: imx_dsp_rproc: Call of_node_put() on iteration error
remoteproc: imx_rproc: Call of_node_put() on iteration error
remoteproc: rcar_rproc: Call of_node_put() on iteration error

Maxim Korotkov (1):
writeback: fix call of incorrect macro

Michal Swiatkowski (1):
ice: block LAN in case of VF to VF offload

Miquel Raynal (1):
mtd: spi-nor: Add a RWW flag

Namjae Jeon (4):
ksmbd: fix racy issue from session setup and logoff
ksmbd: destroy expired sessions
ksmbd: block asynchronous requests when making a delay on session setup
ksmbd: fix racy issue from smb2 close and logoff with multichannel

Naohiro Aota (3):
btrfs: zoned: fix wrong use of bitops API in btrfs_ensure_empty_zones
btrfs: zoned: zone finish data relocation BG with last IO
btrfs: zoned: fix full zone super block reading on ZNS

Nicholas Kazlauskas (9):
drm/amd/display: Add NULL plane_state check for cursor disable logic drm/amd/display: Fix 4to1 MPC black screen with DPP RCO drm/amd/display: Add Z8 allow states to z-state support list drm/amd/display: Add debug option to skip PSR CRTC disable drm/amd/display: Fix Z8 support configurations drm/amd/display: Add minimum Z8 residency debug option drm/amd/display: Update minimum stutter residency for DCN314 Z8 drm/amd/display: Update Z8 watermarks for DCN314 drm/amd/display: Update Z8 SR exit/enter latencies

Olivier Bacon (1):
crypto: engine - fix crypto_queue backlog handling

Paolo Bonzini (1):
KVM: x86/mmu: Avoid indirect call for get_cr3

Patrice Duroux (1):
perf tests record_offcpu.sh: Fix redirection of stderr to stdin

Pawel Witek (1):
cifs: fix pcchunk length type in smb2_copychunk_range

Ping Cheng (2):
HID: wacom: Set a default resolution for older tablets
HID: wacom: insert timestamp to packed Bluetooth (BT) events

Qu Wenruo (2):
btrfs: properly reject clear_cache and v1 cache for block-group-tree
btrfs: make clear_cache mount option to rebuild FST without disabling it

Radhakrishna Sripada (1):
drm/i915/mtl: Add the missing CPU transcoder mask in intel_device_info

Randy Dunlap (4):
sh: math-emu: fix macro redefined warning
sh: mcount.S: fix build error when PRINTK is not enabled
sh: init: use OF_EARLY_FLATTREE for early init
sh: nmi_debug: fix return value of __setup handler

Ratheesh Kannoth (6):
octeontx2-af: Fix start and end bit for scan config
octeontx2-af: Fix depth of cam and mem table.
octeontx2-pf: Increase the size of dmac filter flows
octeontx2-af: Update/Fix NPC field hash extract feature
octeontx2-af: Fix issues with NPC field hash extract
octeontx2-af: Skip PFs if not enabled

Rob Clark (2):
drm/msm/adreno: Simplify read64/write64 helpers drm/msm: Hangcheck progress detection

Rodrigo Siqueira (2):
drm/amd/display: Remove FPU guards from the DML folder drm/amd/display: Add missing WA and MCLK validation

Roman Lozko (1):
perf scripts intel-pt-events.py: Fix IPC output for Python 2

Ruliang Lin (1):
ALSA: caiaq: input: Add error handling for unsupported input methods in snd_usb_caiaq_input_init

Ryan Lin (1):
drm/amd/display: Ext displays with dock can't recognized after resume

Saleemkhan Jamadar (1):
drm/amdgpu/jpeg: Remove harvest checking for JPEG3

Samson Tam (1):
drm/amd/display: filter out invalid bits in pipe_fuses

Sascha Hauer (1):
wifi: rtw88: rtw8821c: Fix rfe_option field width

Sean Christopherson (4):
perf/x86/core: Zero @lbr instead of returning -1 in x86_perf_get_lbr() stub
KVM: x86: Track supported PERF_CAPABILITIES in kvm_caps
KVM: x86/pmu: Disallow legacy LBRs if architectural LBRs are available
KVM: x86/mmu: Refresh CR0.WP prior to checking for emulated permission faults

Shannon Nelson (2):
ionic: remove noise from ethtool rxnfc error msg
ionic: catch failure from devlink_alloc

Shuming Fan (1):
ASoC: rt1318: Add RT1318 SDCA vendor-specific driver

Sia Jee Heng (1):
RISC-V: mm: Enable huge page support to kernel_page_present() function

Srinivas Pandruvada (1):
platform/x86/intel-uncore-freq: Return error on write frequency

Stanislav Lisovskiy (1):
drm: Add missing DP DSC extended capability definitions.

Steve French (3):
cifs: release leases for deferred close handles when freezing
smb3: fix problem remounting a share after shutdown
SMB3: force unmount was failing to close deferred close files

Subbaraya Sundeep (8):
octeontx2-af: mcs: Write TCAM_DATA and TCAM_MASK registers at once
octeontx2-pf: mcs: Fix NULL pointer dereferences
octeontx2-pf: mcs: Match macsec ethertype along with DMAC
octeontx2-pf: mcs: Clear stats before freeing resource
octeontx2-pf: mcs: Fix shared counters logic
octeontx2-pf: mcs: Do not reset PN while updating secy
octeontx2-pf: Disable packet I/O for graceful exit
octeontx2-vf: Detach LF resources on probe cleanup

Sudip Mukherjee (1):
mtd: spi-nor: add SFDP fixups for Quad Page Program

Suman Ghosh (2):
octeontx2-af: Allow mkex profile without DMAC and add L2M/L2B header extraction support
octeontx2-pf: Add additional checks while configuring ucast/bcast/mcast rules

Takahiro Kuwano (3):
mtd: spi-nor: spansion: Remove NO_SFDP_FLAGS from s28hs512t info
mtd: spi-nor: spansion: Enable JFFS2 write buffer for Infineon s28hx SEMPER flash
mtd: spi-nor: spansion: Enable JFFS2 write buffer for Infineon s25hx SEMPER flash

Tanmay Shah (1):
mailbox: zynqmp: Fix counts of child nodes

Tao Su (1):
block: Skip destroyed blkg when restart in blkg_destroy_all()

Theodore Ts'o (7):
ext4: improve error recovery code paths in __ext4_remount()
ext4: improve error handling from ext4_dirhash()
ext4: fix deadlock when converting an inline directory in nojournal mode
ext4: add bounds checking in get_max_inline_xattr_value_size()
ext4: bail out of ext4_xattr_ibody_get() fails for any reason
ext4: remove a BUG_ON in ext4_mb_release_group_pa()
ext4: fix invalid free tracking in ext4_xattr_move_to_block()

Thomas Richter (1):
perf vendor events s390: Remove UTF-8 characters from JSON file

Tudor Ambarus (1):
ext4: avoid a potential slab-out-of-bounds in ext4_group_desc_csum

Victor Nogueira (1):
net/sched: act_mirred: Add carrier check

Ville Syrjälä (1):
drm/i915: Check pipe source size when using skl+ scalers

Vlad Buslov (1):
net/sched: cls_api: remove block_cb from driver_list before freeing

Wei Fang (1):
net: enetc: check the index of the SFI rather than the handle

Wenliang Wang (1):
virtio_net: suppress cpu stall when free_unused_bufs

Wesley Cheng (1):
usb: dwc3: gadget: Execute gadget stop after halting the controller

Yang Jihong (3):
perf ftrace: Make system wide the default target for latency subcommand perf symbols: Fix return incorrect build_id size in elf_read_build_id() perf tracepoint: Fix memory leak in is_valid_tracepoint()

Ye Bin (1):
ext4: fix WARNING in mb_find_extent

Yifan Zhang (1):
drm/amdgpu: change gfx 11.0.4 external_id range

Zack Rusin (1):
drm/vmwgfx: Remove explicit and broken vblank handling

Zev Weiss (2):
ARM: dts: aspeed: asrock: Correct firmware flash SPI clocks
ARM: dts: aspeed: romed8hm3: Fix GPIO polarity of system-fault LED

ZhangPeng (1):

      fs/ntfs3: Fix null-ptr-deref on inode->i_op in ntfs_lookup()

Zheng Wang (1):
scsi: qedi: Fix use after free bug in qedi_remove()

xiaoshoukui (1):
btrfs: fix assertion of exclop condition when starting balance

author maintainer
#1 lore raw
Makefile +1 -1
index 2d221b879c48..f02f6e1ac574 100644
@@ -1,7 +1,7 @@
 # SPDX-License-Identifier: GPL-2.0
 VERSION = 6
 PATCHLEVEL = 1
-SUBLEVEL = 28
+SUBLEVEL = 29
 EXTRAVERSION =
 NAME = Curry Ramen
 
arch/arm/boot/dts/aspeed-bmc-asrock-e3c246d4i.dts +1 -1
index 9b4cf5ebe6d5..c62aff908ab4 100644
@@ -63,7 +63,7 @@ flash@0 {
 		status = "okay";
 		m25p,fast-read;
 		label = "bmc";
-		spi-max-frequency = <100000000>; /* 100 MHz */
+		spi-max-frequency = <50000000>; /* 50 MHz */
 #include "openbmc-flash-layout.dtsi"
 	};
 };
arch/arm/boot/dts/aspeed-bmc-asrock-romed8hm3.dts +2 -2
index ff4c07c69af1..4554abf0c7cd 100644
@@ -31,7 +31,7 @@ heartbeat {
 		};
 
 		system-fault {
-			gpios = <&gpio ASPEED_GPIO(Z, 2) GPIO_ACTIVE_LOW>;
+			gpios = <&gpio ASPEED_GPIO(Z, 2) GPIO_ACTIVE_HIGH>;
 			panic-indicator;
 		};
 	};
@@ -51,7 +51,7 @@ flash@0 {
 		status = "okay";
 		m25p,fast-read;
 		label = "bmc";
-		spi-max-frequency = <100000000>; /* 100 MHz */
+		spi-max-frequency = <50000000>; /* 50 MHz */
 #include "openbmc-flash-layout-64.dtsi"
 	};
 };
arch/arm/boot/dts/exynos4412-itop-elite.dts +1 -1
index 202ab0fee3b7..bfc79490e2e2 100644
@@ -182,7 +182,7 @@ codec: audio-codec@1a {
 		compatible = "wlf,wm8960";
 		reg = <0x1a>;
 		clocks = <&pmu_system_controller 0>;
-		clock-names = "MCLK1";
+		clock-names = "mclk";
 		wlf,shared-lrclk;
 		#sound-dai-cells = <0>;
 	};
arch/arm/boot/dts/s5pv210.dtsi +1 -1
index 12e90a1cc6a1..1a9e4a96b2ff 100644
@@ -566,7 +566,7 @@ csis0: csis@fa600000 {
 				interrupts = <29>;
 				clocks = <&clocks CLK_CSIS>,
 						<&clocks SCLK_CSIS>;
-				clock-names = "clk_csis",
+				clock-names = "csis",
 						"sclk_csis";
 				bus-width = <4>;
 				status = "disabled";
arch/riscv/errata/sifive/errata.c +3 -0
index 1031038423e7..c24a349dd026 100644
@@ -4,6 +4,7 @@
  */
 
 #include <linux/kernel.h>
+#include <linux/memory.h>
 #include <linux/module.h>
 #include <linux/string.h>
 #include <linux/bug.h>
@@ -107,7 +108,9 @@ void __init_or_module sifive_errata_patch_func(struct alt_entry *begin,
 
 		tmp = (1U << alt->errata_id);
 		if (cpu_req_errata & tmp) {
+			mutex_lock(&text_mutex);
 			patch_text_nosync(alt->old_ptr, alt->alt_ptr, alt->alt_len);
+			mutex_unlock(&text_mutex);
 			cpu_apply_errata |= tmp;
 		}
 	}
arch/riscv/errata/thead/errata.c +6 -2
index 21546937db39..32a34ed73509 100644
@@ -5,6 +5,7 @@
 
 #include <linux/bug.h>
 #include <linux/kernel.h>
+#include <linux/memory.h>
 #include <linux/module.h>
 #include <linux/string.h>
 #include <linux/uaccess.h>
@@ -78,11 +79,14 @@ void __init_or_module thead_errata_patch_func(struct alt_entry *begin, struct al
 		tmp = (1U << alt->errata_id);
 		if (cpu_req_errata & tmp) {
 			/* On vm-alternatives, the mmu isn't running yet */
-			if (stage == RISCV_ALTERNATIVES_EARLY_BOOT)
+			if (stage == RISCV_ALTERNATIVES_EARLY_BOOT) {
 				memcpy((void *)__pa_symbol(alt->old_ptr),
 				       (void *)__pa_symbol(alt->alt_ptr), alt->alt_len);
-			else
+			} else {
+				mutex_lock(&text_mutex);
 				patch_text_nosync(alt->old_ptr, alt->alt_ptr, alt->alt_len);
+				mutex_unlock(&text_mutex);
+			}
 		}
 	}
 
arch/riscv/kernel/Makefile +1 -0
index db6e4b1294ba..ab333cb792fd 100644
@@ -9,6 +9,7 @@ CFLAGS_REMOVE_patch.o	= $(CC_FLAGS_FTRACE)
 CFLAGS_REMOVE_sbi.o	= $(CC_FLAGS_FTRACE)
 endif
 CFLAGS_syscall_table.o	+= $(call cc-option,-Wno-override-init,)
+CFLAGS_compat_syscall_table.o += $(call cc-option,-Wno-override-init,)
 
 ifdef CONFIG_KEXEC
 AFLAGS_kexec_relocate.o := -mcmodel=medany $(call cc-option,-mno-relax)
arch/riscv/kernel/cpufeature.c +5 -1
index 694267d1fe81..fd1238df6149 100644
@@ -9,6 +9,7 @@
 #include <linux/bitmap.h>
 #include <linux/ctype.h>
 #include <linux/libfdt.h>
+#include <linux/memory.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <asm/alternative.h>
@@ -316,8 +317,11 @@ void __init_or_module riscv_cpufeature_patch_func(struct alt_entry *begin,
 		}
 
 		tmp = (1U << alt->errata_id);
-		if (cpu_req_feature & tmp)
+		if (cpu_req_feature & tmp) {
+			mutex_lock(&text_mutex);
 			patch_text_nosync(alt->old_ptr, alt->alt_ptr, alt->alt_len);
+			mutex_unlock(&text_mutex);
+		}
 	}
 }
 #endif
arch/riscv/mm/pageattr.c +8 -0
index 86c56616e5de..ea3d61de065b 100644
@@ -217,18 +217,26 @@ bool kernel_page_present(struct page *page)
 	pgd = pgd_offset_k(addr);
 	if (!pgd_present(*pgd))
 		return false;
+	if (pgd_leaf(*pgd))
+		return true;
 
 	p4d = p4d_offset(pgd, addr);
 	if (!p4d_present(*p4d))
 		return false;
+	if (p4d_leaf(*p4d))
+		return true;
 
 	pud = pud_offset(p4d, addr);
 	if (!pud_present(*pud))
 		return false;
+	if (pud_leaf(*pud))
+		return true;
 
 	pmd = pmd_offset(pud, addr);
 	if (!pmd_present(*pmd))
 		return false;
+	if (pmd_leaf(*pmd))
+		return true;
 
 	pte = pte_offset_kernel(pmd, addr);
 	return pte_present(*pte);
arch/s390/kernel/uv.c +11 -21
index f9810d2a267c..5caa0ed2b594 100644
@@ -192,21 +192,10 @@ static int expected_page_refs(struct page *page)
 	return res;
 }
 
-static int make_secure_pte(pte_t *ptep, unsigned long addr,
-			   struct page *exp_page, struct uv_cb_header *uvcb)
+static int make_page_secure(struct page *page, struct uv_cb_header *uvcb)
 {
-	pte_t entry = READ_ONCE(*ptep);
-	struct page *page;
 	int expected, cc = 0;
 
-	if (!pte_present(entry))
-		return -ENXIO;
-	if (pte_val(entry) & _PAGE_INVALID)
-		return -ENXIO;
-
-	page = pte_page(entry);
-	if (page != exp_page)
-		return -ENXIO;
 	if (PageWriteback(page))
 		return -EAGAIN;
 	expected = expected_page_refs(page);
@@ -297,17 +286,18 @@ int gmap_make_secure(struct gmap *gmap, unsigned long gaddr, void *uvcb)
 		goto out;
 
 	rc = -ENXIO;
-	page = follow_page(vma, uaddr, FOLL_WRITE);
-	if (IS_ERR_OR_NULL(page))
-		goto out;
-
-	lock_page(page);
 	ptep = get_locked_pte(gmap->mm, uaddr, &ptelock);
-	if (should_export_before_import(uvcb, gmap->mm))
-		uv_convert_from_secure(page_to_phys(page));
-	rc = make_secure_pte(ptep, uaddr, page, uvcb);
+	if (pte_present(*ptep) && !(pte_val(*ptep) & _PAGE_INVALID) && pte_write(*ptep)) {
+		page = pte_page(*ptep);
+		rc = -EAGAIN;
+		if (trylock_page(page)) {
+			if (should_export_before_import(uvcb, gmap->mm))
+				uv_convert_from_secure(page_to_phys(page));
+			rc = make_page_secure(page, uvcb);
+			unlock_page(page);
+		}
+	}
 	pte_unmap_unlock(ptep, ptelock);
-	unlock_page(page);
 out:
 	mmap_read_unlock(gmap->mm);
 
arch/sh/Kconfig.debug +1 -1
index 10290e5c1f43..c449e7c1b20f 100644
@@ -15,7 +15,7 @@ config SH_STANDARD_BIOS
 
 config STACK_DEBUG
 	bool "Check for stack overflows"
-	depends on DEBUG_KERNEL
+	depends on DEBUG_KERNEL && PRINTK
 	help
 	  This option will cause messages to be printed if free stack space
 	  drops below a certain limit. Saying Y here will add overhead to
arch/sh/kernel/head_32.S +3 -3
index 4adbd4ade319..b603b7968b38 100644
@@ -64,7 +64,7 @@ ENTRY(_stext)
 	ldc	r0, r6_bank
 #endif
 
-#ifdef CONFIG_OF_FLATTREE
+#ifdef CONFIG_OF_EARLY_FLATTREE
 	mov	r4, r12		! Store device tree blob pointer in r12
 #endif
 	
@@ -315,7 +315,7 @@ ENTRY(_stext)
 10:		
 #endif
 
-#ifdef CONFIG_OF_FLATTREE
+#ifdef CONFIG_OF_EARLY_FLATTREE
 	mov.l	8f, r0		! Make flat device tree available early.
 	jsr	@r0
 	 mov	r12, r4
@@ -346,7 +346,7 @@ ENTRY(stack_start)
 5:	.long	start_kernel
 6:	.long	cpu_init
 7:	.long	init_thread_union
-#if defined(CONFIG_OF_FLATTREE)
+#if defined(CONFIG_OF_EARLY_FLATTREE)
 8:	.long	sh_fdt_init
 #endif
 
arch/sh/kernel/nmi_debug.c +2 -2
index 11777867c6f5..a212b645b4cf 100644
@@ -49,7 +49,7 @@ static int __init nmi_debug_setup(char *str)
 	register_die_notifier(&nmi_debug_nb);
 
 	if (*str != '=')
-		return 0;
+		return 1;
 
 	for (p = str + 1; *p; p = sep + 1) {
 		sep = strchr(p, ',');
@@ -70,6 +70,6 @@ static int __init nmi_debug_setup(char *str)
 			break;
 	}
 
-	return 0;
+	return 1;
 }
 __setup("nmi_debug", nmi_debug_setup);
arch/sh/kernel/setup.c +2 -2
index 1fcb6659822a..af977ec4ca5e 100644
@@ -244,7 +244,7 @@ void __init __weak plat_early_device_setup(void)
 {
 }
 
-#ifdef CONFIG_OF_FLATTREE
+#ifdef CONFIG_OF_EARLY_FLATTREE
 void __ref sh_fdt_init(phys_addr_t dt_phys)
 {
 	static int done = 0;
@@ -326,7 +326,7 @@ void __init setup_arch(char **cmdline_p)
 	/* Let earlyprintk output early console messages */
 	sh_early_platform_driver_probe("earlyprintk", 1, 1);
 
-#ifdef CONFIG_OF_FLATTREE
+#ifdef CONFIG_OF_EARLY_FLATTREE
 #ifdef CONFIG_USE_BUILTIN_DTB
 	unflatten_and_copy_device_tree();
 #else
arch/sh/math-emu/sfp-util.h +0 -4
index 784f541344f3..bda50762b3d3 100644
@@ -67,7 +67,3 @@
   } while (0)
 
 #define abort()	return 0
-
-#define __BYTE_ORDER __LITTLE_ENDIAN
-
-
arch/x86/events/intel/lbr.c +1 -5
index 8259d725054d..4dbde69c423b 100644
@@ -1603,10 +1603,8 @@ void __init intel_pmu_arch_lbr_init(void)
  * x86_perf_get_lbr - get the LBR records information
  *
  * @lbr: the caller's memory to store the LBR records information
- *
- * Returns: 0 indicates the LBR info has been successfully obtained
  */
-int x86_perf_get_lbr(struct x86_pmu_lbr *lbr)
+void x86_perf_get_lbr(struct x86_pmu_lbr *lbr)
 {
 	int lbr_fmt = x86_pmu.intel_cap.lbr_format;
 
@@ -1614,8 +1612,6 @@ int x86_perf_get_lbr(struct x86_pmu_lbr *lbr)
 	lbr->from = x86_pmu.lbr_from;
 	lbr->to = x86_pmu.lbr_to;
 	lbr->info = (lbr_fmt == LBR_FORMAT_INFO) ? x86_pmu.lbr_info : 0;
-
-	return 0;
 }
 EXPORT_SYMBOL_GPL(x86_perf_get_lbr);
 
arch/x86/include/asm/perf_event.h +3 -3
index 9ac46dbe57d4..5d0f6891ae61 100644
@@ -543,12 +543,12 @@ static inline void perf_check_microcode(void) { }
 
 #if defined(CONFIG_PERF_EVENTS) && defined(CONFIG_CPU_SUP_INTEL)
 extern struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr, void *data);
-extern int x86_perf_get_lbr(struct x86_pmu_lbr *lbr);
+extern void x86_perf_get_lbr(struct x86_pmu_lbr *lbr);
 #else
 struct perf_guest_switch_msr *perf_guest_get_msrs(int *nr, void *data);
-static inline int x86_perf_get_lbr(struct x86_pmu_lbr *lbr)
+static inline void x86_perf_get_lbr(struct x86_pmu_lbr *lbr)
 {
-	return -1;
+	memset(lbr, 0, sizeof(*lbr));
 }
 #endif
 
arch/x86/kernel/amd_nb.c +2 -0
index 4266b64631a4..7e331e8f3692 100644
@@ -36,6 +36,7 @@
 #define PCI_DEVICE_ID_AMD_19H_M50H_DF_F4 0x166e
 #define PCI_DEVICE_ID_AMD_19H_M60H_DF_F4 0x14e4
 #define PCI_DEVICE_ID_AMD_19H_M70H_DF_F4 0x14f4
+#define PCI_DEVICE_ID_AMD_19H_M78H_DF_F4 0x12fc
 
 /* Protect the PCI config register pairs used for SMN. */
 static DEFINE_MUTEX(smn_mutex);
@@ -79,6 +80,7 @@ static const struct pci_device_id amd_nb_misc_ids[] = {
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M50H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M60H_DF_F3) },
 	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M70H_DF_F3) },
+	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_19H_M78H_DF_F3) },
 	{}
 };
 
arch/x86/kvm/kvm_cache_regs.h +1 -1
index 3febc342360c..896cc7394944 100644
@@ -4,7 +4,7 @@
 
 #include <linux/kvm_host.h>
 
-#define KVM_POSSIBLE_CR0_GUEST_BITS X86_CR0_TS
+#define KVM_POSSIBLE_CR0_GUEST_BITS	(X86_CR0_TS | X86_CR0_WP)
 #define KVM_POSSIBLE_CR4_GUEST_BITS				  \
 	(X86_CR4_PVI | X86_CR4_DE | X86_CR4_PCE | X86_CR4_OSFXSR  \
 	 | X86_CR4_OSXMMEXCPT | X86_CR4_PGE | X86_CR4_TSD | X86_CR4_FSGSBASE)
arch/x86/kvm/mmu.h +25 -1
index 6bdaacb6faa0..59804be91b5b 100644
@@ -113,6 +113,8 @@ void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly,
 bool kvm_can_do_async_pf(struct kvm_vcpu *vcpu);
 int kvm_handle_page_fault(struct kvm_vcpu *vcpu, u64 error_code,
 				u64 fault_address, char *insn, int insn_len);
+void __kvm_mmu_refresh_passthrough_bits(struct kvm_vcpu *vcpu,
+					struct kvm_mmu *mmu);
 
 int kvm_mmu_load(struct kvm_vcpu *vcpu);
 void kvm_mmu_unload(struct kvm_vcpu *vcpu);
@@ -153,6 +155,24 @@ static inline void kvm_mmu_load_pgd(struct kvm_vcpu *vcpu)
 					  vcpu->arch.mmu->root_role.level);
 }
 
+static inline void kvm_mmu_refresh_passthrough_bits(struct kvm_vcpu *vcpu,
+						    struct kvm_mmu *mmu)
+{
+	/*
+	 * When EPT is enabled, KVM may passthrough CR0.WP to the guest, i.e.
+	 * @mmu's snapshot of CR0.WP and thus all related paging metadata may
+	 * be stale.  Refresh CR0.WP and the metadata on-demand when checking
+	 * for permission faults.  Exempt nested MMUs, i.e. MMUs for shadowing
+	 * nEPT and nNPT, as CR0.WP is ignored in both cases.  Note, KVM does
+	 * need to refresh nested_mmu, a.k.a. the walker used to translate L2
+	 * GVAs to GPAs, as that "MMU" needs to honor L2's CR0.WP.
+	 */
+	if (!tdp_enabled || mmu == &vcpu->arch.guest_mmu)
+		return;
+
+	__kvm_mmu_refresh_passthrough_bits(vcpu, mmu);
+}
+
 /*
  * Check if a given access (described through the I/D, W/R and U/S bits of a
  * page fault error code pfec) causes a permission fault with the given PTE
@@ -184,8 +204,12 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu,
 	u64 implicit_access = access & PFERR_IMPLICIT_ACCESS;
 	bool not_smap = ((rflags & X86_EFLAGS_AC) | implicit_access) == X86_EFLAGS_AC;
 	int index = (pfec + (not_smap << PFERR_RSVD_BIT)) >> 1;
-	bool fault = (mmu->permissions[index] >> pte_access) & 1;
 	u32 errcode = PFERR_PRESENT_MASK;
+	bool fault;
+
+	kvm_mmu_refresh_passthrough_bits(vcpu, mmu);
+
+	fault = (mmu->permissions[index] >> pte_access) & 1;
 
 	WARN_ON(pfec & (PFERR_PK_MASK | PFERR_RSVD_MASK));
 	if (unlikely(mmu->pkru_mask)) {
arch/x86/kvm/mmu/mmu.c +35 -11

100 lines not on this page · raw message

arch/x86/kvm/mmu/paging_tmpl.h +1 -1
index 5ab5f94dcb6f..1f4f5e703f13 100644
@@ -324,7 +324,7 @@ static int FNAME(walk_addr_generic)(struct guest_walker *walker,
 	trace_kvm_mmu_pagetable_walk(addr, access);
 retry_walk:
 	walker->level = mmu->cpu_role.base.level;
-	pte           = mmu->get_guest_pgd(vcpu);
+	pte           = kvm_mmu_get_guest_pgd(vcpu, mmu);
 	have_ad       = PT_HAVE_ACCESSED_DIRTY(mmu);
 
 #if PTTYPE == 64
arch/x86/kvm/pmu.c +2 -2
index de1fd7369736..20cd746cf467 100644
@@ -418,9 +418,9 @@ int kvm_pmu_rdpmc(struct kvm_vcpu *vcpu, unsigned idx, u64 *data)
 	if (!pmc)
 		return 1;
 
-	if (!(kvm_read_cr4(vcpu) & X86_CR4_PCE) &&
+	if (!(kvm_read_cr4_bits(vcpu, X86_CR4_PCE)) &&
 	    (static_call(kvm_x86_get_cpl)(vcpu) != 0) &&
-	    (kvm_read_cr0(vcpu) & X86_CR0_PE))
+	    (kvm_read_cr0_bits(vcpu, X86_CR0_PE)))
 		return 1;
 
 	*data = pmc_read_counter(pmc) & mask;
arch/x86/kvm/svm/svm.c +2 -0
index 9599931c7d57..fc1649b5931a 100644
@@ -2709,6 +2709,7 @@ static int svm_get_msr_feature(struct kvm_msr_entry *msr)
 			msr->data |= MSR_AMD64_DE_CFG_LFENCE_SERIALIZE;
 		break;
 	case MSR_IA32_PERF_CAPABILITIES:
+		msr->data = kvm_caps.supported_perf_cap;
 		return 0;
 	default:
 		return KVM_MSR_RET_INVALID;
@@ -4888,6 +4889,7 @@ static __init void svm_set_cpu_caps(void)
 {
 	kvm_set_cpu_caps();
 
+	kvm_caps.supported_perf_cap = 0;
 	kvm_caps.supported_xss = 0;
 
 	/* CPUID 0x80000001 and 0x8000000A (SVM features) */
arch/x86/kvm/vmx/capabilities.h +0 -24
index 07254314f3dd..cd2ac9536c99 100644
@@ -395,30 +395,6 @@ static inline bool vmx_pebs_supported(void)
 	return boot_cpu_has(X86_FEATURE_PEBS) && kvm_pmu_cap.pebs_ept;
 }
 
-static inline u64 vmx_get_perf_capabilities(void)
-{
-	u64 perf_cap = PMU_CAP_FW_WRITES;
-	struct x86_pmu_lbr lbr;
-	u64 host_perf_cap = 0;
-
-	if (!enable_pmu)
-		return 0;
-
-	if (boot_cpu_has(X86_FEATURE_PDCM))
-		rdmsrl(MSR_IA32_PERF_CAPABILITIES, host_perf_cap);
-
-	if (x86_perf_get_lbr(&lbr) >= 0 && lbr.nr)
-		perf_cap |= host_perf_cap & PMU_CAP_LBR_FMT;
-
-	if (vmx_pebs_supported()) {
-		perf_cap |= host_perf_cap & PERF_CAP_PEBS_MASK;
-		if ((perf_cap & PERF_CAP_PEBS_FORMAT) < 4)
-			perf_cap &= ~PERF_CAP_PEBS_BASELINE;
-	}
-
-	return perf_cap;
-}
-
 static inline bool cpu_has_notify_vmexit(void)
 {
 	return vmcs_config.cpu_based_2nd_exec_ctrl &
arch/x86/kvm/vmx/nested.c +2 -2
index 8e56ec6e72e9..9d683b6067c7 100644
@@ -4460,7 +4460,7 @@ static void load_vmcs12_host_state(struct kvm_vcpu *vcpu,
 	 * CR0_GUEST_HOST_MASK is already set in the original vmcs01
 	 * (KVM doesn't change it);
 	 */
-	vcpu->arch.cr0_guest_owned_bits = KVM_POSSIBLE_CR0_GUEST_BITS;
+	vcpu->arch.cr0_guest_owned_bits = vmx_l1_guest_owned_cr0_bits();
 	vmx_set_cr0(vcpu, vmcs12->host_cr0);
 
 	/* Same as above - no reason to call set_cr4_guest_host_mask().  */
@@ -4611,7 +4611,7 @@ static void nested_vmx_restore_host_state(struct kvm_vcpu *vcpu)
 	 */
 	vmx_set_efer(vcpu, nested_vmx_get_vmcs01_guest_efer(vmx));
 
-	vcpu->arch.cr0_guest_owned_bits = KVM_POSSIBLE_CR0_GUEST_BITS;
+	vcpu->arch.cr0_guest_owned_bits = vmx_l1_guest_owned_cr0_bits();
 	vmx_set_cr0(vcpu, vmcs_readl(CR0_READ_SHADOW));
 
 	vcpu->arch.cr4_guest_owned_bits = ~vmcs_readl(CR4_GUEST_HOST_MASK);
arch/x86/kvm/vmx/pmu_intel.c +1 -1
index 10b33da9bd05..9fabfe71fd87 100644
@@ -631,7 +631,7 @@ static void intel_pmu_init(struct kvm_vcpu *vcpu)
 		pmu->fixed_counters[i].current_config = 0;
 	}
 
-	vcpu->arch.perf_capabilities = vmx_get_perf_capabilities();
+	vcpu->arch.perf_capabilities = kvm_caps.supported_perf_cap;
 	lbr_desc->records.nr = 0;
 	lbr_desc->event = NULL;
 	lbr_desc->msr_passthrough = false;
arch/x86/kvm/vmx/vmx.c +35 -7

96 lines not on this page · raw message

arch/x86/kvm/vmx/vmx.h +18 -0
index a3da84f4ea45..e2b04f4c0fef 100644
@@ -640,6 +640,24 @@ BUILD_CONTROLS_SHADOW(tertiary_exec, TERTIARY_VM_EXEC_CONTROL, 64)
 				(1 << VCPU_EXREG_EXIT_INFO_1) | \
 				(1 << VCPU_EXREG_EXIT_INFO_2))
 
+static inline unsigned long vmx_l1_guest_owned_cr0_bits(void)
+{
+	unsigned long bits = KVM_POSSIBLE_CR0_GUEST_BITS;
+
+	/*
+	 * CR0.WP needs to be intercepted when KVM is shadowing legacy paging
+	 * in order to construct shadow PTEs with the correct protections.
+	 * Note!  CR0.WP technically can be passed through to the guest if
+	 * paging is disabled, but checking CR0.PG would generate a cyclical
+	 * dependency of sorts due to forcing the caller to ensure CR0 holds
+	 * the correct value prior to determining which CR0 bits can be owned
+	 * by L1.  Keep it simple and limit the optimization to EPT.
+	 */
+	if (!enable_ept)
+		bits &= ~X86_CR0_WP;
+	return bits;
+}
+
 static inline struct kvm_vmx *to_kvm_vmx(struct kvm *kvm)
 {
 	return container_of(kvm, struct kvm_vmx, kvm);
arch/x86/kvm/x86.c +12 -0
index 3463ef7f3019..d7af225b63d8 100644
@@ -910,6 +910,18 @@ EXPORT_SYMBOL_GPL(load_pdptrs);
 
 void kvm_post_set_cr0(struct kvm_vcpu *vcpu, unsigned long old_cr0, unsigned long cr0)
 {
+	/*
+	 * CR0.WP is incorporated into the MMU role, but only for non-nested,
+	 * indirect shadow MMUs.  If TDP is enabled, the MMU's metadata needs
+	 * to be updated, e.g. so that emulating guest translations does the
+	 * right thing, but there's no need to unload the root as CR0.WP
+	 * doesn't affect SPTEs.
+	 */
+	if (tdp_enabled && (cr0 ^ old_cr0) == X86_CR0_WP) {
+		kvm_init_mmu(vcpu);
+		return;
+	}
+
 	if ((cr0 ^ old_cr0) & X86_CR0_PG) {
 		kvm_clear_async_pf_completion_queue(vcpu);
 		kvm_async_pf_hash_reset(vcpu);
arch/x86/kvm/x86.h +1 -0
index 829d3134c1eb..9de72586f406 100644
@@ -27,6 +27,7 @@ struct kvm_caps {
 	u64 supported_mce_cap;
 	u64 supported_xcr0;
 	u64 supported_xss;
+	u64 supported_perf_cap;
 };
 
 void kvm_spurious_fault(void);
arch/x86/lib/clear_page_64.S +1 -1
index ecbfb4dd3b01..faa4cdc747a3 100644
@@ -142,8 +142,8 @@ SYM_FUNC_START(clear_user_rep_good)
 	and $7, %edx
 	jz .Lrep_good_exit
 
-.Lrep_good_bytes:
 	mov %edx, %ecx
+.Lrep_good_bytes:
 	rep stosb
 
 .Lrep_good_exit:
arch/x86/lib/retpoline.S +2 -2
index 073289a55f84..841955dc2573 100644
@@ -87,8 +87,8 @@ SYM_CODE_END(__x86_indirect_thunk_array)
  */
 	.align 64
 	.skip 63, 0xcc
-SYM_FUNC_START_NOALIGN(zen_untrain_ret);
-
+SYM_START(zen_untrain_ret, SYM_L_GLOBAL, SYM_A_NONE)
+	ANNOTATE_NOENDBR
 	/*
 	 * As executed from zen_untrain_ret, this is:
 	 *
block/blk-cgroup.c +3 -0
index 7c91d9195da8..60f366f98fa2 100644
@@ -468,6 +468,9 @@ static void blkg_destroy_all(struct gendisk *disk)
 	list_for_each_entry_safe(blkg, n, &q->blkg_list, q_node) {
 		struct blkcg *blkcg = blkg->blkcg;
 
+		if (hlist_unhashed(&blkg->blkcg_node))
+			continue;
+
 		spin_lock(&blkcg->lock);
 		blkg_destroy(blkg);
 		spin_unlock(&blkcg->lock);
crypto/algapi.c +3 -0
index c72622f20f52..8c3a869cc43a 100644
@@ -944,6 +944,9 @@ EXPORT_SYMBOL_GPL(crypto_enqueue_request);
 void crypto_enqueue_request_head(struct crypto_queue *queue,
 				 struct crypto_async_request *request)
 {
+	if (unlikely(queue->qlen >= queue->max_qlen))
+		queue->backlog = queue->backlog->prev;
+
 	queue->qlen++;
 	list_add(&request->list, &queue->list);
 }
crypto/crypto_engine.c +5 -5
index bb8e77077f02..50bac2ab55f1 100644
@@ -54,7 +54,7 @@ static void crypto_finalize_request(struct crypto_engine *engine,
 		}
 	}
 	lockdep_assert_in_softirq();
-	req->complete(req, err);
+	crypto_request_complete(req, err);
 
 	kthread_queue_work(engine->kworker, &engine->pump_requests);
 }
@@ -129,9 +129,6 @@ static void crypto_pump_requests(struct crypto_engine *engine,
 	if (!engine->retry_support)
 		engine->cur_req = async_req;
 
-	if (backlog)
-		backlog->complete(backlog, -EINPROGRESS);
-
 	if (engine->busy)
 		was_busy = true;
 	else
@@ -214,9 +211,12 @@ static void crypto_pump_requests(struct crypto_engine *engine,
 	}
 
 req_err_2:
-	async_req->complete(async_req, ret);
+	crypto_request_complete(async_req, ret);
 
 retry:
+	if (backlog)
+		crypto_request_complete(backlog, -EINPROGRESS);
+
 	/* If retry mechanism is supported, send new requests to engine */
 	if (engine->retry_support) {
 		spin_lock_irqsave(&engine->queue_lock, flags);
drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c +1 -1
index 902f6be057ec..e97fb203690a 100644
@@ -151,7 +151,7 @@ static int sun8i_ss_setup_ivs(struct skcipher_request *areq)
 		}
 		rctx->p_iv[i] = a;
 		/* we need to setup all others IVs only in the decrypt way */
-		if (rctx->op_dir & SS_ENCRYPTION)
+		if (rctx->op_dir == SS_ENCRYPTION)
 			return 0;
 		todo = min(len, sg_dma_len(sg));
 		len -= todo;
drivers/crypto/ccp/psp-dev.c +3 -3
index c9c741ac8442..949a3fa0b94a 100644
@@ -42,6 +42,9 @@ static irqreturn_t psp_irq_handler(int irq, void *data)
 	/* Read the interrupt status: */
 	status = ioread32(psp->io_regs + psp->vdata->intsts_reg);
 
+	/* Clear the interrupt status by writing the same value we read. */
+	iowrite32(status, psp->io_regs + psp->vdata->intsts_reg);
+
 	/* invoke subdevice interrupt handlers */
 	if (status) {
 		if (psp->sev_irq_handler)
@@ -51,9 +54,6 @@ static irqreturn_t psp_irq_handler(int irq, void *data)
 			psp->tee_irq_handler(irq, psp->tee_irq_data, status);
 	}
 
-	/* Clear the interrupt status by writing the same value we read. */
-	iowrite32(status, psp->io_regs + psp->vdata->intsts_reg);
-
 	return IRQ_HANDLED;
 }
 
drivers/edac/qcom_edac.c +29 -21

78 lines not on this page · raw message

drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +5 -1
index 9776e0b488cf..011e4fbe27f1 100644
@@ -4483,7 +4483,11 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev)
 	dev_info(adev->dev, "recover vram bo from shadow start\n");
 	mutex_lock(&adev->shadow_list_lock);
 	list_for_each_entry(vmbo, &adev->shadow_list, shadow_list) {
-		shadow = &vmbo->bo;
+		/* If vm is compute context or adev is APU, shadow will be NULL */
+		if (!vmbo->shadow)
+			continue;
+		shadow = vmbo->shadow;
+
 		/* No need to recover an evicted BO */
 		if (shadow->tbo.resource->mem_type != TTM_PL_TT ||
 		    shadow->tbo.resource->start == AMDGPU_BO_INVALID_OFFSET ||
drivers/gpu/drm/amd/amdgpu/amdgpu_mes.c +59 -0

68 lines not on this page · raw message

drivers/gpu/drm/amd/amdgpu/amdgpu_mes.h +1 -2
index ad980f4b66e1..547ec35691fa 100644
@@ -91,14 +91,12 @@ struct amdgpu_mes {
 	struct amdgpu_bo		*ucode_fw_obj[AMDGPU_MAX_MES_PIPES];
 	uint64_t			ucode_fw_gpu_addr[AMDGPU_MAX_MES_PIPES];
 	uint32_t			*ucode_fw_ptr[AMDGPU_MAX_MES_PIPES];
-	uint32_t                        ucode_fw_version[AMDGPU_MAX_MES_PIPES];
 	uint64_t                        uc_start_addr[AMDGPU_MAX_MES_PIPES];
 
 	/* mes ucode data */
 	struct amdgpu_bo		*data_fw_obj[AMDGPU_MAX_MES_PIPES];
 	uint64_t			data_fw_gpu_addr[AMDGPU_MAX_MES_PIPES];
 	uint32_t			*data_fw_ptr[AMDGPU_MAX_MES_PIPES];
-	uint32_t                        data_fw_version[AMDGPU_MAX_MES_PIPES];
 	uint64_t                        data_start_addr[AMDGPU_MAX_MES_PIPES];
 
 	/* eop gpu obj */
@@ -308,6 +306,7 @@ struct amdgpu_mes_funcs {
 
 int amdgpu_mes_ctx_get_offs(struct amdgpu_ring *ring, unsigned int id_offs);
 
+int amdgpu_mes_init_microcode(struct amdgpu_device *adev, int pipe);
 int amdgpu_mes_init(struct amdgpu_device *adev);
 void amdgpu_mes_fini(struct amdgpu_device *adev);
 
drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c +5 -1
index e9b45089a28a..863b2a34b2d6 100644
@@ -38,6 +38,7 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev,
 {
 	struct fd f = fdget(fd);
 	struct amdgpu_fpriv *fpriv;
+	struct amdgpu_ctx_mgr *mgr;
 	struct amdgpu_ctx *ctx;
 	uint32_t id;
 	int r;
@@ -51,8 +52,11 @@ static int amdgpu_sched_process_priority_override(struct amdgpu_device *adev,
 		return r;
 	}
 
-	idr_for_each_entry(&fpriv->ctx_mgr.ctx_handles, ctx, id)
+	mgr = &fpriv->ctx_mgr;
+	mutex_lock(&mgr->lock);
+	idr_for_each_entry(&mgr->ctx_handles, ctx, id)
 		amdgpu_ctx_priority_override(ctx, priority);
+	mutex_unlock(&mgr->lock);
 
 	fdput(f);
 	return 0;
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.c +36 -0
index 5cb62e6249c2..6e7058a2d1c8 100644
@@ -1091,3 +1091,39 @@ void amdgpu_ucode_ip_version_decode(struct amdgpu_device *adev, int block_type,
 
 	snprintf(ucode_prefix, len, "%s_%d_%d_%d", ip_name, maj, min, rev);
 }
+
+/*
+ * amdgpu_ucode_request - Fetch and validate amdgpu microcode
+ *
+ * @adev: amdgpu device
+ * @fw: pointer to load firmware to
+ * @fw_name: firmware to load
+ *
+ * This is a helper that will use request_firmware and amdgpu_ucode_validate
+ * to load and run basic validation on firmware. If the load fails, remap
+ * the error code to -ENODEV, so that early_init functions will fail to load.
+ */
+int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
+			 const char *fw_name)
+{
+	int err = request_firmware(fw, fw_name, adev->dev);
+
+	if (err)
+		return -ENODEV;
+	err = amdgpu_ucode_validate(*fw);
+	if (err)
+		dev_dbg(adev->dev, "\"%s\" failed to validate\n", fw_name);
+
+	return err;
+}
+
+/*
+ * amdgpu_ucode_release - Release firmware microcode
+ *
+ * @fw: pointer to firmware to release
+ */
+void amdgpu_ucode_release(const struct firmware **fw)
+{
+	release_firmware(*fw);
+	*fw = NULL;
+}
drivers/gpu/drm/amd/amdgpu/amdgpu_ucode.h +3 -0
index 1c36235b4539..4c20eb410960 100644
@@ -543,6 +543,9 @@ void amdgpu_ucode_print_sdma_hdr(const struct common_firmware_header *hdr);
 void amdgpu_ucode_print_psp_hdr(const struct common_firmware_header *hdr);
 void amdgpu_ucode_print_gpu_info_hdr(const struct common_firmware_header *hdr);
 int amdgpu_ucode_validate(const struct firmware *fw);
+int amdgpu_ucode_request(struct amdgpu_device *adev, const struct firmware **fw,
+			 const char *fw_name);
+void amdgpu_ucode_release(const struct firmware **fw);
 bool amdgpu_ucode_hdr_version(union amdgpu_firmware_header *hdr,
 				uint16_t hdr_major, uint16_t hdr_minor);
 
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +2 -1
index 0320be4a5fc6..1f3fdf6cb903 100644
@@ -3797,7 +3797,8 @@ static int gfx_v9_0_hw_fini(void *handle)
 {
 	struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-	amdgpu_irq_put(adev, &adev->gfx.cp_ecc_error_irq, 0);
+	if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__GFX))
+		amdgpu_irq_put(adev, &adev->gfx.cp_ecc_error_irq, 0);
 	amdgpu_irq_put(adev, &adev->gfx.priv_reg_irq, 0);
 	amdgpu_irq_put(adev, &adev->gfx.priv_inst_irq, 0);
 
drivers/gpu/drm/amd/amdgpu/gmc_v10_0.c +0 -1
index f513e2c2e964..d96ee48e1706 100644
@@ -1142,7 +1142,6 @@ static int gmc_v10_0_hw_fini(void *handle)
 		return 0;
 	}
 
-	amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 	amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 
 	return 0;
drivers/gpu/drm/amd/amdgpu/gmc_v11_0.c +0 -1
index 96e0bb5bee78..2d11e8e7e123 100644
@@ -931,7 +931,6 @@ static int gmc_v11_0_hw_fini(void *handle)
 		return 0;
 	}
 
-	amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 	amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 	gmc_v11_0_gart_disable(adev);
 
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c +0 -1
index 67ca16a8027c..0d9e9d9dd4a1 100644
@@ -1898,7 +1898,6 @@ static int gmc_v9_0_hw_fini(void *handle)
 	if (adev->mmhub.funcs->update_power_gating)
 		adev->mmhub.funcs->update_power_gating(adev, false);
 
-	amdgpu_irq_put(adev, &adev->gmc.ecc_irq, 0);
 	amdgpu_irq_put(adev, &adev->gmc.vm_fault, 0);
 
 	return 0;
drivers/gpu/drm/amd/amdgpu/jpeg_v3_0.c +1 -0
index a1b751d9ac06..323d68b2124f 100644
@@ -54,6 +54,7 @@ static int jpeg_v3_0_early_init(void *handle)
 
 	switch (adev->ip_versions[UVD_HWIP][0]) {
 	case IP_VERSION(3, 1, 1):
+	case IP_VERSION(3, 1, 2):
 		break;
 	default:
 		harvest = RREG32_SOC15(JPEG, 0, mmCC_UVD_HARVESTING);
drivers/gpu/drm/amd/amdgpu/mes_v10_1.c +18 -93

141 lines not on this page · raw message

drivers/gpu/drm/amd/amdgpu/mes_v11_0.c +18 -84

132 lines not on this page · raw message

drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +5 -3
index 4d780e4430e7..77d5a6f30409 100644
@@ -1941,9 +1941,11 @@ static int sdma_v4_0_hw_fini(void *handle)
 		return 0;
 	}
 
-	for (i = 0; i < adev->sdma.num_instances; i++) {
-		amdgpu_irq_put(adev, &adev->sdma.ecc_irq,
-			       AMDGPU_SDMA_IRQ_INSTANCE0 + i);
+	if (amdgpu_ras_is_supported(adev, AMDGPU_RAS_BLOCK__SDMA)) {
+		for (i = 0; i < adev->sdma.num_instances; i++) {
+			amdgpu_irq_put(adev, &adev->sdma.ecc_irq,
+				       AMDGPU_SDMA_IRQ_INSTANCE0 + i);
+		}
 	}
 
 	sdma_v4_0_ctx_switch_enable(adev, false);
drivers/gpu/drm/amd/amdgpu/soc21.c +1 -1
index 9c52af500525..d150a90daa40 100644
@@ -715,7 +715,7 @@ static int soc21_common_early_init(void *handle)
 			AMD_PG_SUPPORT_VCN_DPG |
 			AMD_PG_SUPPORT_GFX_PG |
 			AMD_PG_SUPPORT_JPEG;
-		adev->external_rev_id = adev->rev_id + 0x1;
+		adev->external_rev_id = adev->rev_id + 0x80;
 		break;
 
 	default:
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +25 -3
index 99b99f0b42c0..b46732cefe37 100644
@@ -39,6 +39,7 @@
 #include "dc/dc_edid_parser.h"
 #include "dc/dc_stat.h"
 #include "amdgpu_dm_trace.h"
+#include "dc/inc/dc_link_ddc.h"
 
 #include "vid.h"
 #include "amdgpu.h"
@@ -2254,6 +2255,14 @@ static void s3_handle_mst(struct drm_device *dev, bool suspend)
 		if (suspend) {
 			drm_dp_mst_topology_mgr_suspend(mgr);
 		} else {
+			/* if extended timeout is supported in hardware,
+			 * default to LTTPR timeout (3.2ms) first as a W/A for DP link layer
+			 * CTS 4.2.1.1 regression introduced by CTS specs requirement update.
+			 */
+			dc_link_aux_try_to_configure_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_LTTPR_TIMEOUT_PERIOD);
+			if (!dp_is_lttpr_present(aconnector->dc_link))
+				dc_link_aux_try_to_configure_timeout(aconnector->dc_link->ddc, LINK_AUX_DEFAULT_TIMEOUT_PERIOD);
+
 			ret = drm_dp_mst_topology_mgr_resume(mgr, true);
 			if (ret < 0) {
 				dm_helpers_dp_mst_stop_top_mgr(aconnector->dc_link->ctx,
@@ -7584,6 +7593,13 @@ static void amdgpu_dm_commit_cursors(struct drm_atomic_state *state)
 			handle_cursor_update(plane, old_plane_state);
 }
 
+static inline uint32_t get_mem_type(struct drm_framebuffer *fb)
+{
+	struct amdgpu_bo *abo = gem_to_amdgpu_bo(fb->obj[0]);
+
+	return abo->tbo.resource ? abo->tbo.resource->mem_type : 0;
+}
+
 static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
 				    struct dc_state *dc_state,
 				    struct drm_device *dev,
@@ -7657,6 +7673,8 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
 			continue;
 
 		dc_plane = dm_new_plane_state->dc_state;
+		if (!dc_plane)
+			continue;
 
 		bundle->surface_updates[planes_count].surface = dc_plane;
 		if (new_pcrtc_state->color_mgmt_changed) {
@@ -7701,11 +7719,13 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
 
 		/*
 		 * Only allow immediate flips for fast updates that don't
-		 * change FB pitch, DCC state, rotation or mirroing.
+		 * change memory domain, FB pitch, DCC state, rotation or
+		 * mirroring.
 		 */
 		bundle->flip_addrs[planes_count].flip_immediate =
 			crtc->state->async_flip &&
-			acrtc_state->update_type == UPDATE_TYPE_FAST;
+			acrtc_state->update_type == UPDATE_TYPE_FAST &&
+			get_mem_type(old_plane_state->fb) == get_mem_type(fb);
 
 		timestamp_ns = ktime_get_ns();
 		bundle->flip_addrs[planes_count].flip_timestamp_in_us = div_u64(timestamp_ns, 1000);
@@ -9199,8 +9219,9 @@ static int dm_update_plane_state(struct dc *dc,
 			return -EINVAL;
 		}
 
+		if (dm_old_plane_state->dc_state)
+			dc_plane_state_release(dm_old_plane_state->dc_state);
 
-		dc_plane_state_release(dm_old_plane_state->dc_state);
 		dm_new_plane_state->dc_state = NULL;
 
 		*lock_and_validation_needed = true;
@@ -9737,6 +9758,7 @@ static int amdgpu_dm_atomic_check(struct drm_device *dev,
 		ret = compute_mst_dsc_configs_for_state(state, dm_state->context, vars);
 		if (ret) {
 			DRM_DEBUG_DRIVER("compute_mst_dsc_configs_for_state() failed\n");
+			ret = -EINVAL;
 			goto fail;
 		}
 
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c +1 -0
index df74bc88e460..e2f9141d6d93 100644
@@ -1368,6 +1368,7 @@ int pre_validate_dsc(struct drm_atomic_state *state,
 	ret = pre_compute_mst_dsc_configs_for_state(state, local_dc_state, vars);
 	if (ret != 0) {
 		DRM_INFO_ONCE("pre_compute_mst_dsc_configs_for_state() failed\n");
+		ret = -EINVAL;
 		goto clean_exit;
 	}
 
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn31/dcn31_smu.c +2 -2
index 090b2c02aee1..0827c7df2855 100644
@@ -333,8 +333,8 @@ void dcn31_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zst
 			(support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY))
 		support = DCN_ZSTATE_SUPPORT_DISALLOW;
 
-
-	if (support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY)
+	if (support == DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY ||
+	    support == DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY)
 		param = 1;
 	else
 		param = 0;
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn314/dcn314_smu.c +10 -2
index aa264c600408..0765334f0825 100644
@@ -349,8 +349,6 @@ void dcn314_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zs
 	if (!clk_mgr->smu_present)
 		return;
 
-	// Arg[15:0] = 8/9/0 for Z8/Z9/disallow -> existing bits
-	// Arg[16] = Disallow Z9 -> new bit
 	switch (support) {
 
 	case DCN_ZSTATE_SUPPORT_ALLOW:
@@ -369,6 +367,16 @@ void dcn314_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zs
 		param = (1 << 10);
 		break;
 
+	case DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY:
+		msg_id = VBIOSSMC_MSG_AllowZstatesEntry;
+		param = (1 << 10) | (1 << 8);
+		break;
+
+	case DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY:
+		msg_id = VBIOSSMC_MSG_AllowZstatesEntry;
+		param = (1 << 8);
+		break;
+
 	default: //DCN_ZSTATE_SUPPORT_UNKNOWN
 		msg_id = VBIOSSMC_MSG_AllowZstatesEntry;
 		param = 0;
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn32/dcn32_clk_mgr.c +5 -0
index 9eb9fe5b8d2c..1d84a04acb3f 100644
@@ -756,6 +756,8 @@ void dcn32_clk_mgr_construct(
 		struct pp_smu_funcs *pp_smu,
 		struct dccg *dccg)
 {
+	struct clk_log_info log_info = {0};
+
 	clk_mgr->base.ctx = ctx;
 	clk_mgr->base.funcs = &dcn32_funcs;
 	if (ASICREV_IS_GC_11_0_2(clk_mgr->base.ctx->asic_id.hw_internal_rev)) {
@@ -789,6 +791,7 @@ void dcn32_clk_mgr_construct(
 			clk_mgr->base.clks.ref_dtbclk_khz = 268750;
 	}
 
+
 	/* integer part is now VCO frequency in kHz */
 	clk_mgr->base.dentist_vco_freq_khz = dcn32_get_vco_frequency_from_reg(clk_mgr);
 
@@ -796,6 +799,8 @@ void dcn32_clk_mgr_construct(
 	if (clk_mgr->base.dentist_vco_freq_khz == 0)
 		clk_mgr->base.dentist_vco_freq_khz = 4300000; /* Updated as per HW docs */
 
+	dcn32_dump_clk_registers(&clk_mgr->base.boot_snapshot, &clk_mgr->base, &log_info);
+
 	if (ctx->dc->debug.disable_dtb_ref_clk_switch &&
 			clk_mgr->base.clks.ref_dtbclk_khz != clk_mgr->base.boot_snapshot.dtbclk) {
 		clk_mgr->base.clks.ref_dtbclk_khz = clk_mgr->base.boot_snapshot.dtbclk;
drivers/gpu/drm/amd/display/dc/core/dc_link.c +1 -1
index bf7fcd268cb4..6299130663a3 100644
@@ -3381,7 +3381,7 @@ bool dc_link_setup_psr(struct dc_link *link,
 		case FAMILY_YELLOW_CARP:
 		case AMDGPU_FAMILY_GC_10_3_6:
 		case AMDGPU_FAMILY_GC_11_0_1:
-			if (dc->debug.disable_z10)
+			if (dc->debug.disable_z10 || dc->debug.psr_skip_crtc_disable)
 				psr_context->psr_level.bits.SKIP_CRTC_DISABLE = true;
 			break;
 		default:
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +3 -0
index fd8db482e56f..f0d05829288b 100644
@@ -1707,6 +1707,9 @@ bool dc_remove_plane_from_context(
 	struct dc_stream_status *stream_status = NULL;
 	struct resource_pool *pool = dc->res_pool;
 
+	if (!plane_state)
+		return true;
+
 	for (i = 0; i < context->stream_count; i++)
 		if (context->streams[i] == stream) {
 			stream_status = &context->stream_status[i];
drivers/gpu/drm/amd/display/dc/dc.h +4 -1
index 0598465fd1a1..3f277009075f 100644
@@ -491,6 +491,8 @@ enum dcn_pwr_state {
 enum dcn_zstate_support_state {
 	DCN_ZSTATE_SUPPORT_UNKNOWN,
 	DCN_ZSTATE_SUPPORT_ALLOW,
+	DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY,
+	DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY,
 	DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY,
 	DCN_ZSTATE_SUPPORT_DISALLOW,
 };
@@ -764,7 +766,6 @@ struct dc_debug_options {
 	bool disable_mem_low_power;
 	bool pstate_enabled;
 	bool disable_dmcu;
-	bool disable_psr;
 	bool force_abm_enable;
 	bool disable_stereo_support;
 	bool vsr_support;
@@ -780,6 +781,7 @@ struct dc_debug_options {
 	unsigned int force_odm_combine; //bit vector based on otg inst
 	unsigned int seamless_boot_odm_combine;
 	unsigned int force_odm_combine_4to1; //bit vector based on otg inst
+	int minimum_z8_residency_time;
 	bool disable_z9_mpc;
 	unsigned int force_fclk_khz;
 	bool enable_tri_buf;
@@ -828,6 +830,7 @@ struct dc_debug_options {
 	int crb_alloc_policy_min_disp_count;
 	bool disable_z10;
 	bool enable_z9_disable_interface;
+	bool psr_skip_crtc_disable;
 	union dpia_debug_options dpia_debug;
 	bool disable_fixed_vs_aux_timeout_wa;
 	bool force_disable_subvp;
drivers/gpu/drm/amd/display/dc/dc_link.h +11 -3
index caf0c7af2d0b..17f080f8af6c 100644
@@ -117,7 +117,7 @@ struct psr_settings {
  * Add a struct dc_panel_config under dc_link
  */
 struct dc_panel_config {
-	// extra panel power sequence parameters
+	/* extra panel power sequence parameters */
 	struct pps {
 		unsigned int extra_t3_ms;
 		unsigned int extra_t7_ms;
@@ -127,13 +127,21 @@ struct dc_panel_config {
 		unsigned int extra_t12_ms;
 		unsigned int extra_post_OUI_ms;
 	} pps;
-	// ABM
+	/* PSR */
+	struct psr {
+		bool disable_psr;
+		bool disallow_psrsu;
+		bool rc_disable;
+		bool rc_allow_static_screen;
+		bool rc_allow_fullscreen_VPB;
+	} psr;
+	/* ABM */
 	struct varib {
 		unsigned int varibright_feature_enable;
 		unsigned int def_varibright_level;
 		unsigned int abm_config_setting;
 	} varib;
-	// edp DSC
+	/* edp DSC */
 	struct dsc {
 		bool disable_dsc_edp;
 		unsigned int force_dsc_edp_policy;
drivers/gpu/drm/amd/display/dc/dcn10/dcn10_hw_sequencer.c +13 -3
index 55d63d860ef1..0dcd9fea122d 100644
@@ -726,11 +726,15 @@ void dcn10_hubp_pg_control(
 	}
 }
 
-static void power_on_plane(
+static void power_on_plane_resources(
 	struct dce_hwseq *hws,
 	int plane_id)
 {
 	DC_LOGGER_INIT(hws->ctx->logger);
+
+	if (hws->funcs.dpp_root_clock_control)
+		hws->funcs.dpp_root_clock_control(hws, plane_id, true);
+
 	if (REG(DC_IP_REQUEST_CNTL)) {
 		REG_SET(DC_IP_REQUEST_CNTL, 0,
 				IP_REQUEST_EN, 1);
@@ -1237,11 +1241,15 @@ void dcn10_plane_atomic_power_down(struct dc *dc,
 			hws->funcs.hubp_pg_control(hws, hubp->inst, false);
 
 		dpp->funcs->dpp_reset(dpp);
+
 		REG_SET(DC_IP_REQUEST_CNTL, 0,
 				IP_REQUEST_EN, 0);
 		DC_LOG_DEBUG(
 				"Power gated front end %d\n", hubp->inst);
 	}
+
+	if (hws->funcs.dpp_root_clock_control)
+		hws->funcs.dpp_root_clock_control(hws, dpp->inst, false);
 }
 
 /* disable HW used by plane.
@@ -2450,7 +2458,7 @@ static void dcn10_enable_plane(
 
 	undo_DEGVIDCN10_253_wa(dc);
 
-	power_on_plane(dc->hwseq,
+	power_on_plane_resources(dc->hwseq,
 		pipe_ctx->plane_res.hubp->inst);
 
 	/* enable DCFCLK current DCHUB */
@@ -3369,7 +3377,9 @@ static bool dcn10_can_pipe_disable_cursor(struct pipe_ctx *pipe_ctx)
 	for (test_pipe = pipe_ctx->top_pipe; test_pipe;
 	     test_pipe = test_pipe->top_pipe) {
 		// Skip invisible layer and pipe-split plane on same layer
-		if (!test_pipe->plane_state->visible || test_pipe->plane_state->layer_index == cur_layer)
+		if (!test_pipe->plane_state ||
+		    !test_pipe->plane_state->visible ||
+		    test_pipe->plane_state->layer_index == cur_layer)
 			continue;
 
 		r2 = test_pipe->plane_res.scl_data.recout;
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_hwseq.c +6 -2
index f348bc15a925..2d49e99a152c 100644
@@ -1087,11 +1087,15 @@ void dcn20_blank_pixel_data(
 }
 
 
-static void dcn20_power_on_plane(
+static void dcn20_power_on_plane_resources(
 	struct dce_hwseq *hws,
 	struct pipe_ctx *pipe_ctx)
 {
 	DC_LOGGER_INIT(hws->ctx->logger);
+
+	if (hws->funcs.dpp_root_clock_control)
+		hws->funcs.dpp_root_clock_control(hws, pipe_ctx->plane_res.dpp->inst, true);
+
 	if (REG(DC_IP_REQUEST_CNTL)) {
 		REG_SET(DC_IP_REQUEST_CNTL, 0,
 				IP_REQUEST_EN, 1);
@@ -1115,7 +1119,7 @@ static void dcn20_enable_plane(struct dc *dc, struct pipe_ctx *pipe_ctx,
 	//if (dc->debug.sanity_checks) {
 	//	dcn10_verify_allow_pstate_change_high(dc);
 	//}
-	dcn20_power_on_plane(dc->hwseq, pipe_ctx);
+	dcn20_power_on_plane_resources(dc->hwseq, pipe_ctx);
 
 	/* enable DCFCLK current DCHUB */
 	pipe_ctx->plane_res.hubp->funcs->hubp_clk_cntl(pipe_ctx->plane_res.hubp, true);
drivers/gpu/drm/amd/display/dc/dcn21/dcn21_resource.c +4 -1
index 887081472c0d..ce6c70e25703 100644
@@ -671,12 +671,15 @@ static const struct dc_debug_options debug_defaults_diags = {
 		.disable_pplib_wm_range = true,
 		.disable_stutter = true,
 		.disable_48mhz_pwrdwn = true,
-		.disable_psr = true,
 		.enable_tri_buf = true,
 		.use_max_lb = true
 };
 
 static const struct dc_panel_config panel_config_defaults = {
+		.psr = {
+			.disable_psr = false,
+			.disallow_psrsu = false,
+		},
 		.ilr = {
 			.optimize_edp_link_rate = true,
 		},
drivers/gpu/drm/amd/display/dc/dcn30/dcn30_resource.c +13 -2
index e958f838c804..5a8d1a051314 100644
@@ -723,7 +723,6 @@ static const struct dc_debug_options debug_defaults_drv = {
 	.underflow_assert_delay_us = 0xFFFFFFFF,
 	.dwb_fi_phase = -1, // -1 = disable,
 	.dmub_command_table = true,
-	.disable_psr = false,
 	.use_max_lb = true,
 	.exit_idle_opt_for_cursor_updates = true
 };
@@ -742,11 +741,17 @@ static const struct dc_debug_options debug_defaults_diags = {
 	.scl_reset_length10 = true,
 	.dwb_fi_phase = -1, // -1 = disable
 	.dmub_command_table = true,
-	.disable_psr = true,
 	.enable_tri_buf = true,
 	.use_max_lb = true
 };
 
+static const struct dc_panel_config panel_config_defaults = {
+	.psr = {
+		.disable_psr = false,
+		.disallow_psrsu = false,
+	},
+};
+
 static void dcn30_dpp_destroy(struct dpp **dpp)
 {
 	kfree(TO_DCN20_DPP(*dpp));
@@ -2214,6 +2219,11 @@ void dcn30_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params
 	}
 }
 
+static void dcn30_get_panel_config_defaults(struct dc_panel_config *panel_config)
+{
+	*panel_config = panel_config_defaults;
+}
+
 static const struct resource_funcs dcn30_res_pool_funcs = {
 	.destroy = dcn30_destroy_resource_pool,
 	.link_enc_create = dcn30_link_encoder_create,
@@ -2233,6 +2243,7 @@ static const struct resource_funcs dcn30_res_pool_funcs = {
 	.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
 	.update_bw_bounding_box = dcn30_update_bw_bounding_box,
 	.patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
+	.get_panel_config_defaults = dcn30_get_panel_config_defaults,
 };
 
 #define CTX ctx
drivers/gpu/drm/amd/display/dc/dcn302/dcn302_resource.c +13 -1
index b925b6ddde5a..d3945876aced 100644
@@ -112,10 +112,16 @@ static const struct dc_debug_options debug_defaults_diags = {
 		.dwb_fi_phase = -1, // -1 = disable
 		.dmub_command_table = true,
 		.enable_tri_buf = true,
-		.disable_psr = true,
 		.use_max_lb = true
 };
 
+static const struct dc_panel_config panel_config_defaults = {
+		.psr = {
+			.disable_psr = false,
+			.disallow_psrsu = false,
+		},
+};
+
 enum dcn302_clk_src_array_id {
 	DCN302_CLK_SRC_PLL0,
 	DCN302_CLK_SRC_PLL1,
@@ -1132,6 +1138,11 @@ void dcn302_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_param
 	DC_FP_END();
 }
 
+static void dcn302_get_panel_config_defaults(struct dc_panel_config *panel_config)
+{
+	*panel_config = panel_config_defaults;
+}
+
 static struct resource_funcs dcn302_res_pool_funcs = {
 		.destroy = dcn302_destroy_resource_pool,
 		.link_enc_create = dcn302_link_encoder_create,
@@ -1151,6 +1162,7 @@ static struct resource_funcs dcn302_res_pool_funcs = {
 		.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
 		.update_bw_bounding_box = dcn302_update_bw_bounding_box,
 		.patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
+		.get_panel_config_defaults = dcn302_get_panel_config_defaults,
 };
 
 static struct dc_cap_funcs cap_funcs = {
drivers/gpu/drm/amd/display/dc/dcn303/dcn303_resource.c +12 -1
index 527d5c902878..7e7f18bef098 100644
@@ -96,7 +96,13 @@ static const struct dc_debug_options debug_defaults_diags = {
 		.dwb_fi_phase = -1, // -1 = disable
 		.dmub_command_table = true,
 		.enable_tri_buf = true,
-		.disable_psr = true,
+};
+
+static const struct dc_panel_config panel_config_defaults = {
+		.psr = {
+			.disable_psr = false,
+			.disallow_psrsu = false,
+		},
 };
 
 enum dcn303_clk_src_array_id {
@@ -1055,6 +1061,10 @@ static void dcn303_destroy_resource_pool(struct resource_pool **pool)
 	*pool = NULL;
 }
 
+static void dcn303_get_panel_config_defaults(struct dc_panel_config *panel_config)
+{
+	*panel_config = panel_config_defaults;
+}
 
 void dcn303_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_params)
 {
@@ -1082,6 +1092,7 @@ static struct resource_funcs dcn303_res_pool_funcs = {
 		.release_post_bldn_3dlut = dcn30_release_post_bldn_3dlut,
 		.update_bw_bounding_box = dcn303_update_bw_bounding_box,
 		.patch_unknown_plane_state = dcn20_patch_unknown_plane_state,
+		.get_panel_config_defaults = dcn303_get_panel_config_defaults,
 };
 
 static struct dc_cap_funcs cap_funcs = {
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_dccg.c +2 -11
index 7f34418e6308..7d2b982506fd 100644
@@ -66,17 +66,8 @@ void dccg31_update_dpp_dto(struct dccg *dccg, int dpp_inst, int req_dppclk)
 		REG_UPDATE(DPPCLK_DTO_CTRL,
 				DPPCLK_DTO_ENABLE[dpp_inst], 1);
 	} else {
-		//DTO must be enabled to generate a 0Hz clock output
-		if (dccg->ctx->dc->debug.root_clock_optimization.bits.dpp) {
-			REG_UPDATE(DPPCLK_DTO_CTRL,
-					DPPCLK_DTO_ENABLE[dpp_inst], 1);
-			REG_SET_2(DPPCLK_DTO_PARAM[dpp_inst], 0,
-					DPPCLK0_DTO_PHASE, 0,
-					DPPCLK0_DTO_MODULO, 1);
-		} else {
-			REG_UPDATE(DPPCLK_DTO_CTRL,
-					DPPCLK_DTO_ENABLE[dpp_inst], 0);
-		}
+		REG_UPDATE(DPPCLK_DTO_CTRL,
+				DPPCLK_DTO_ENABLE[dpp_inst], 0);
 	}
 	dccg->pipe_dppclk_khz[dpp_inst] = req_dppclk;
 }
drivers/gpu/drm/amd/display/dc/dcn31/dcn31_resource.c +4 -0
index d825f11b4fea..d3f76512841b 100644
@@ -911,6 +911,10 @@ static const struct dc_debug_options debug_defaults_diags = {
 };
 
 static const struct dc_panel_config panel_config_defaults = {
+	.psr = {
+		.disable_psr = false,
+		.disallow_psrsu = false,
+	},
 	.ilr = {
 		.optimize_edp_link_rate = true,
 	},
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_dccg.c +23 -0
index 389a8938ee45..85ea3334355c 100644
@@ -289,8 +289,31 @@ static void dccg314_set_valid_pixel_rate(
 	dccg314_set_dtbclk_dto(dccg, &dto_params);
 }
 
+static void dccg314_dpp_root_clock_control(
+		struct dccg *dccg,
+		unsigned int dpp_inst,
+		bool clock_on)
+{
+	struct dcn_dccg *dccg_dcn = TO_DCN_DCCG(dccg);
+
+	if (clock_on) {
+		/* turn off the DTO and leave phase/modulo at max */
+		REG_UPDATE(DPPCLK_DTO_CTRL, DPPCLK_DTO_ENABLE[dpp_inst], 0);
+		REG_SET_2(DPPCLK_DTO_PARAM[dpp_inst], 0,
+			  DPPCLK0_DTO_PHASE, 0xFF,
+			  DPPCLK0_DTO_MODULO, 0xFF);
+	} else {
+		/* turn on the DTO to generate a 0hz clock */
+		REG_UPDATE(DPPCLK_DTO_CTRL, DPPCLK_DTO_ENABLE[dpp_inst], 1);
+		REG_SET_2(DPPCLK_DTO_PARAM[dpp_inst], 0,
+			  DPPCLK0_DTO_PHASE, 0,
+			  DPPCLK0_DTO_MODULO, 1);
+	}
+}
+
 static const struct dccg_funcs dccg314_funcs = {
 	.update_dpp_dto = dccg31_update_dpp_dto,
+	.dpp_root_clock_control = dccg314_dpp_root_clock_control,
 	.get_dccg_ref_freq = dccg31_get_dccg_ref_freq,
 	.dccg_init = dccg31_init,
 	.set_dpstreamclk = dccg314_set_dpstreamclk,
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.c +10 -0
index 8e824dc81ded..414d7358a075 100644
@@ -392,6 +392,16 @@ void dcn314_set_pixels_per_cycle(struct pipe_ctx *pipe_ctx)
 				pix_per_cycle);
 }
 
+void dcn314_dpp_root_clock_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool clock_on)
+{
+	if (!hws->ctx->dc->debug.root_clock_optimization.bits.dpp)
+		return;
+
+	if (hws->ctx->dc->res_pool->dccg->funcs->dpp_root_clock_control)
+		hws->ctx->dc->res_pool->dccg->funcs->dpp_root_clock_control(
+			hws->ctx->dc->res_pool->dccg, dpp_inst, clock_on);
+}
+
 void dcn314_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on)
 {
 	struct dc_context *ctx = hws->ctx;
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_hwseq.h +2 -0
index c419d3dbdfee..c786d5e6a428 100644
@@ -43,4 +43,6 @@ void dcn314_set_pixels_per_cycle(struct pipe_ctx *pipe_ctx);
 
 void dcn314_hubp_pg_control(struct dce_hwseq *hws, unsigned int hubp_inst, bool power_on);
 
+void dcn314_dpp_root_clock_control(struct dce_hwseq *hws, unsigned int dpp_inst, bool clock_on);
+
 #endif /* __DC_HWSS_DCN314_H__ */
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_init.c +1 -0
index 343f4d9dd5e3..5267e901a35c 100644
@@ -137,6 +137,7 @@ static const struct hwseq_private_funcs dcn314_private_funcs = {
 	.plane_atomic_disable = dcn20_plane_atomic_disable,
 	.plane_atomic_power_down = dcn10_plane_atomic_power_down,
 	.enable_power_gating_plane = dcn314_enable_power_gating_plane,
+	.dpp_root_clock_control = dcn314_dpp_root_clock_control,
 	.hubp_pg_control = dcn314_hubp_pg_control,
 	.program_all_writeback_pipes_in_tree = dcn30_program_all_writeback_pipes_in_tree,
 	.update_odm = dcn314_update_odm,
drivers/gpu/drm/amd/display/dc/dcn314/dcn314_resource.c +6 -0
index ffaa4e5b3fca..b7782433ce6b 100644
@@ -884,6 +884,8 @@ static const struct dc_plane_cap plane_cap = {
 static const struct dc_debug_options debug_defaults_drv = {
 	.disable_z10 = false,
 	.enable_z9_disable_interface = true,
+	.minimum_z8_residency_time = 2000,
+	.psr_skip_crtc_disable = true,
 	.disable_dmcu = true,
 	.force_abm_enable = false,
 	.timing_trace = false,
@@ -940,6 +942,10 @@ static const struct dc_debug_options debug_defaults_diags = {
 };
 
 static const struct dc_panel_config panel_config_defaults = {
+	.psr = {
+		.disable_psr = false,
+		.disallow_psrsu = false,
+	},
 	.ilr = {
 		.optimize_edp_link_rate = true,
 	},
drivers/gpu/drm/amd/display/dc/dcn315/dcn315_resource.c +4 -0
index 58746c437554..31cbc5762eab 100644
@@ -907,6 +907,10 @@ static const struct dc_debug_options debug_defaults_diags = {
 };
 
 static const struct dc_panel_config panel_config_defaults = {
+	.psr = {
+		.disable_psr = false,
+		.disallow_psrsu = false,
+	},
 	.ilr = {
 		.optimize_edp_link_rate = true,
 	},
drivers/gpu/drm/amd/display/dc/dcn316/dcn316_resource.c +4 -0
index 6b40a11ac83a..af3eddc0cf32 100644
@@ -906,6 +906,10 @@ static const struct dc_debug_options debug_defaults_diags = {
 };
 
 static const struct dc_panel_config panel_config_defaults = {
+	.psr = {
+		.disable_psr = false,
+		.disallow_psrsu = false,
+	},
 	.ilr = {
 		.optimize_edp_link_rate = true,
 	},
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_hwseq.c +1 -0
index 1a85509c12f2..e9188bce62e0 100644
@@ -984,6 +984,7 @@ void dcn32_init_hw(struct dc *dc)
 	if (dc->ctx->dmub_srv) {
 		dc_dmub_srv_query_caps_cmd(dc->ctx->dmub_srv->dmub);
 		dc->caps.dmub_caps.psr = dc->ctx->dmub_srv->dmub->feature_caps.psr;
+		dc->caps.dmub_caps.mclk_sw = dc->ctx->dmub_srv->dmub->feature_caps.fw_assisted_mclk_switch;
 	}
 
 	/* Enable support for ODM and windowed MPO if policy flag is set */
drivers/gpu/drm/amd/display/dc/dcn32/dcn32_resource.c +10 -2
index a942e2812183..814620e6638f 100644
@@ -1984,7 +1984,7 @@ int dcn32_populate_dml_pipes_from_context(
 	// In general cases we want to keep the dram clock change requirement
 	// (prefer configs that support MCLK switch). Only override to false
 	// for SubVP
-	if (subvp_in_use)
+	if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching || subvp_in_use)
 		context->bw_ctx.dml.soc.dram_clock_change_requirement_final = false;
 	else
 		context->bw_ctx.dml.soc.dram_clock_change_requirement_final = true;
@@ -2037,6 +2037,14 @@ static struct resource_funcs dcn32_res_pool_funcs = {
 	.remove_phantom_pipes = dcn32_remove_phantom_pipes,
 };
 
+static uint32_t read_pipe_fuses(struct dc_context *ctx)
+{
+	uint32_t value = REG_READ(CC_DC_PIPE_DIS);
+	/* DCN32 support max 4 pipes */
+	value = value & 0xf;
+	return value;
+}
+
 
 static bool dcn32_resource_construct(
 	uint8_t num_virtual_links,
@@ -2079,7 +2087,7 @@ static bool dcn32_resource_construct(
 	pool->base.res_cap = &res_cap_dcn32;
 	/* max number of pipes for ASIC before checking for pipe fuses */
 	num_pipes  = pool->base.res_cap->num_timing_generator;
-	pipe_fuses = REG_READ(CC_DC_PIPE_DIS);
+	pipe_fuses = read_pipe_fuses(ctx);
 
 	for (i = 0; i < pool->base.res_cap->num_timing_generator; i++)
 		if (pipe_fuses & 1 << i)
drivers/gpu/drm/amd/display/dc/dcn321/dcn321_resource.c +9 -1
index d320e21680da..213ff3672bd5 100644
@@ -1621,6 +1621,14 @@ static struct resource_funcs dcn321_res_pool_funcs = {
 	.remove_phantom_pipes = dcn32_remove_phantom_pipes,
 };
 
+static uint32_t read_pipe_fuses(struct dc_context *ctx)
+{
+	uint32_t value = REG_READ(CC_DC_PIPE_DIS);
+	/* DCN321 support max 4 pipes */
+	value = value & 0xf;
+	return value;
+}
+
 
 static bool dcn321_resource_construct(
 	uint8_t num_virtual_links,
@@ -1663,7 +1671,7 @@ static bool dcn321_resource_construct(
 	pool->base.res_cap = &res_cap_dcn321;
 	/* max number of pipes for ASIC before checking for pipe fuses */
 	num_pipes  = pool->base.res_cap->num_timing_generator;
-	pipe_fuses = REG_READ(CC_DC_PIPE_DIS);
+	pipe_fuses = read_pipe_fuses(ctx);
 
 	for (i = 0; i < pool->base.res_cap->num_timing_generator; i++)
 		if (pipe_fuses & 1 << i)
drivers/gpu/drm/amd/display/dc/dml/dcn20/dcn20_fpu.c +14 -7
index 45db40c41882..186538e3e3c0 100644
@@ -963,6 +963,8 @@ static enum dcn_zstate_support_state  decide_zstate_support(struct dc *dc, struc
 	 * 	2. single eDP, on link 0, 1 plane and stutter period > 5ms
 	 * Z10 only cases:
 	 * 	1. single eDP, on link 0, 1 plane and stutter period >= 5ms
+	 * Z8 cases:
+	 * 	1. stutter period sufficient
 	 * Zstate not allowed cases:
 	 * 	1. Everything else
 	 */
@@ -971,6 +973,9 @@ static enum dcn_zstate_support_state  decide_zstate_support(struct dc *dc, struc
 	else if (context->stream_count == 1 &&  context->streams[0]->signal == SIGNAL_TYPE_EDP) {
 		struct dc_link *link = context->streams[0]->sink->link;
 		struct dc_stream_status *stream_status = &context->stream_status[0];
+		int minmum_z8_residency = dc->debug.minimum_z8_residency_time > 0 ? dc->debug.minimum_z8_residency_time : 1000;
+		bool allow_z8 = context->bw_ctx.dml.vba.StutterPeriod > (double)minmum_z8_residency;
+		bool is_pwrseq0 = link->link_index == 0;
 
 		if (dc_extended_blank_supported(dc)) {
 			for (i = 0; i < dc->res_pool->pipe_count; i++) {
@@ -983,18 +988,20 @@ static enum dcn_zstate_support_state  decide_zstate_support(struct dc *dc, struc
 				}
 			}
 		}
-		/* zstate only supported on PWRSEQ0  and when there's <2 planes*/
-		if (link->link_index != 0 || stream_status->plane_count > 1)
+
+		/* Don't support multi-plane configurations */
+		if (stream_status->plane_count > 1)
 			return DCN_ZSTATE_SUPPORT_DISALLOW;
 
-		if (context->bw_ctx.dml.vba.StutterPeriod > 5000.0 || optimized_min_dst_y_next_start_us > 5000)
+		if (is_pwrseq0 && (context->bw_ctx.dml.vba.StutterPeriod > 5000.0 || optimized_min_dst_y_next_start_us > 5000))
 			return DCN_ZSTATE_SUPPORT_ALLOW;
-		else if (link->psr_settings.psr_version == DC_PSR_VERSION_1 && !dc->debug.disable_psr)
-			return DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY;
+		else if (is_pwrseq0 && link->psr_settings.psr_version == DC_PSR_VERSION_1 && !link->panel_config.psr.disable_psr)
+			return allow_z8 ? DCN_ZSTATE_SUPPORT_ALLOW_Z8_Z10_ONLY : DCN_ZSTATE_SUPPORT_ALLOW_Z10_ONLY;
 		else
-			return DCN_ZSTATE_SUPPORT_DISALLOW;
-	} else
+			return allow_z8 ? DCN_ZSTATE_SUPPORT_ALLOW_Z8_ONLY : DCN_ZSTATE_SUPPORT_DISALLOW;
+	} else {
 		return DCN_ZSTATE_SUPPORT_DISALLOW;
+	}
 }
 
 void dcn20_calculate_dlg_params(
drivers/gpu/drm/amd/display/dc/dml/dcn30/dcn30_fpu.c +17 -3
index 990dbd736e2c..fdfb19337ea6 100644
@@ -368,7 +368,9 @@ void dcn30_fpu_update_soc_for_wm_a(struct dc *dc, struct dc_state *context)
 	dc_assert_fp_enabled();
 
 	if (dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].valid) {
-		context->bw_ctx.dml.soc.dram_clock_change_latency_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us;
+		if (!context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching ||
+				context->bw_ctx.dml.soc.dram_clock_change_latency_us == 0)
+			context->bw_ctx.dml.soc.dram_clock_change_latency_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.pstate_latency_us;
 		context->bw_ctx.dml.soc.sr_enter_plus_exit_time_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.sr_enter_plus_exit_time_us;
 		context->bw_ctx.dml.soc.sr_exit_time_us = dc->clk_mgr->bw_params->wm_table.nv_entries[WM_A].dml_input.sr_exit_time_us;
 	}
@@ -520,9 +522,21 @@ void dcn30_fpu_calculate_wm_and_dlg(
 		pipe_idx++;
 	}
 
-	DC_FP_START();
+	// WA: restrict FPO to use first non-strobe mode (NV24 BW issue)
+	if (context->bw_ctx.bw.dcn.clk.fw_based_mclk_switching &&
+			dc->dml.soc.num_chans <= 4 &&
+			context->bw_ctx.dml.vba.DRAMSpeed <= 1700 &&
+			context->bw_ctx.dml.vba.DRAMSpeed >= 1500) {
+
+		for (i = 0; i < dc->dml.soc.num_states; i++) {
+			if (dc->dml.soc.clock_limits[i].dram_speed_mts > 1700) {
+				context->bw_ctx.dml.vba.DRAMSpeed = dc->dml.soc.clock_limits[i].dram_speed_mts;
+				break;
+			}
+		}
+	}
+
 	dcn20_calculate_dlg_params(dc, context, pipes, pipe_cnt, vlevel);
-	DC_FP_END();
 
 	if (!pstate_en)
 		/* Restore full p-state latency */
drivers/gpu/drm/amd/display/dc/dml/dcn314/dcn314_fpu.c +2 -2
index 34b6c763a455..4f91e6475423 100644
@@ -148,8 +148,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_14_soc = {
 	.num_states = 5,
 	.sr_exit_time_us = 16.5,
 	.sr_enter_plus_exit_time_us = 18.5,
-	.sr_exit_z8_time_us = 442.0,
-	.sr_enter_plus_exit_z8_time_us = 560.0,
+	.sr_exit_z8_time_us = 268.0,
+	.sr_enter_plus_exit_z8_time_us = 393.0,
 	.writeback_latency_us = 12.0,
 	.dram_channel_width_bytes = 4,
 	.round_trip_ping_latency_dcfclk_cycles = 106,
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c +1 -16
index e22b4b3880af..d2b184fdd7e0 100644
@@ -1200,9 +1200,7 @@ static void dcn32_full_validate_bw_helper(struct dc *dc,
 			}
 		} else {
 			// Most populate phantom DLG params before programming hardware / timing for phantom pipe
-			DC_FP_START();
 			dcn32_helper_populate_phantom_dlg_params(dc, context, pipes, *pipe_cnt);
-			DC_FP_END();
 
 			/* Call validate_apply_pipe_split flags after calling DML getters for
 			 * phantom dlg params, or some of the VBA params indicating pipe split
@@ -1503,11 +1501,8 @@ bool dcn32_internal_validate_bw(struct dc *dc,
 
 	dml_log_pipe_params(&context->bw_ctx.dml, pipes, pipe_cnt);
 
-	if (!fast_validate) {
-		DC_FP_START();
+	if (!fast_validate)
 		dcn32_full_validate_bw_helper(dc, context, pipes, &vlevel, split, merge, &pipe_cnt);
-		DC_FP_END();
-	}
 
 	if (fast_validate ||
 			(dc->debug.dml_disallow_alternate_prefetch_modes &&
@@ -2172,9 +2167,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
 		entry.fabricclk_mhz = 0;
 		entry.dram_speed_mts = 0;
 
-		DC_FP_START();
 		insert_entry_into_table_sorted(table, num_entries, &entry);
-		DC_FP_END();
 	}
 
 	// Insert the max DCFCLK
@@ -2182,9 +2175,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
 	entry.fabricclk_mhz = 0;
 	entry.dram_speed_mts = 0;
 
-	DC_FP_START();
 	insert_entry_into_table_sorted(table, num_entries, &entry);
-	DC_FP_END();
 
 	// Insert the UCLK DPMS
 	for (i = 0; i < num_uclk_dpms; i++) {
@@ -2192,9 +2183,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
 		entry.fabricclk_mhz = 0;
 		entry.dram_speed_mts = bw_params->clk_table.entries[i].memclk_mhz * 16;
 
-		DC_FP_START();
 		insert_entry_into_table_sorted(table, num_entries, &entry);
-		DC_FP_END();
 	}
 
 	// If FCLK is coarse grained, insert individual DPMs.
@@ -2204,9 +2193,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
 			entry.fabricclk_mhz = bw_params->clk_table.entries[i].fclk_mhz;
 			entry.dram_speed_mts = 0;
 
-			DC_FP_START();
 			insert_entry_into_table_sorted(table, num_entries, &entry);
-			DC_FP_END();
 		}
 	}
 	// If FCLK fine grained, only insert max
@@ -2215,9 +2202,7 @@ static int build_synthetic_soc_states(struct clk_bw_params *bw_params,
 		entry.fabricclk_mhz = max_fclk_mhz;
 		entry.dram_speed_mts = 0;
 
-		DC_FP_START();
 		insert_entry_into_table_sorted(table, num_entries, &entry);
-		DC_FP_END();
 	}
 
 	// At this point, the table contains all "points of interest" based on
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.c +3 -2
index 820042f6aaca..e02e9d4b04a9 100644
@@ -807,7 +807,8 @@ static void DISPCLKDPPCLKDCFCLKDeepSleepPrefetchParametersWatermarksAndPerforman
 					v->SwathHeightY[k],
 					v->SwathHeightC[k],
 					TWait,
-					v->DRAMSpeedPerState[mode_lib->vba.VoltageLevel] <= MEM_STROBE_FREQ_MHZ ?
+					(v->DRAMSpeedPerState[mode_lib->vba.VoltageLevel] <= MEM_STROBE_FREQ_MHZ ||
+						v->DCFCLKPerState[mode_lib->vba.VoltageLevel] <= MIN_DCFCLK_FREQ_MHZ) ?
 							mode_lib->vba.ip.min_prefetch_in_strobe_us : 0,
 					/* Output */
 					&v->DSTXAfterScaler[k],
@@ -3288,7 +3289,7 @@ void dml32_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
 							v->swath_width_chroma_ub_this_state[k],
 							v->SwathHeightYThisState[k],
 							v->SwathHeightCThisState[k], v->TWait,
-							v->DRAMSpeedPerState[i] <= MEM_STROBE_FREQ_MHZ ?
+							(v->DRAMSpeedPerState[i] <= MEM_STROBE_FREQ_MHZ || v->DCFCLKState[i][j] <= MIN_DCFCLK_FREQ_MHZ) ?
 									mode_lib->vba.ip.min_prefetch_in_strobe_us : 0,
 
 							/* Output */
drivers/gpu/drm/amd/display/dc/dml/dcn32/display_mode_vba_32.h +1 -0
index c8b28c83ddf4..e92eee2c664d 100644
@@ -52,6 +52,7 @@
 #define BPP_BLENDED_PIPE 0xffffffff
 
 #define MEM_STROBE_FREQ_MHZ 1600
+#define MIN_DCFCLK_FREQ_MHZ 200
 #define MEM_STROBE_MAX_DELIVERY_TIME_US 60.0
 
 struct display_mode_lib;
drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c +12 -12
index b80cef70fa60..383a409a3f54 100644
@@ -106,16 +106,16 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = {
 	.clock_limits = {
 		{
 			.state = 0,
-			.dcfclk_mhz = 1564.0,
-			.fabricclk_mhz = 400.0,
-			.dispclk_mhz = 2150.0,
-			.dppclk_mhz = 2150.0,
+			.dcfclk_mhz = 1434.0,
+			.fabricclk_mhz = 2250.0,
+			.dispclk_mhz = 1720.0,
+			.dppclk_mhz = 1720.0,
 			.phyclk_mhz = 810.0,
 			.phyclk_d18_mhz = 667.0,
-			.phyclk_d32_mhz = 625.0,
+			.phyclk_d32_mhz = 313.0,
 			.socclk_mhz = 1200.0,
-			.dscclk_mhz = 716.667,
-			.dram_speed_mts = 1600.0,
+			.dscclk_mhz = 573.333,
+			.dram_speed_mts = 16000.0,
 			.dtbclk_mhz = 1564.0,
 		},
 	},
@@ -125,14 +125,14 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_21_soc = {
 	.sr_exit_z8_time_us = 285.0,
 	.sr_enter_plus_exit_z8_time_us = 320,
 	.writeback_latency_us = 12.0,
-	.round_trip_ping_latency_dcfclk_cycles = 263,
+	.round_trip_ping_latency_dcfclk_cycles = 207,
 	.urgent_latency_pixel_data_only_us = 4,
 	.urgent_latency_pixel_mixed_with_vm_data_us = 4,
 	.urgent_latency_vm_data_only_us = 4,
-	.fclk_change_latency_us = 20,
-	.usr_retraining_latency_us = 2,
-	.smn_latency_us = 2,
-	.mall_allocated_for_dcn_mbytes = 64,
+	.fclk_change_latency_us = 7,
+	.usr_retraining_latency_us = 0,
+	.smn_latency_us = 0,
+	.mall_allocated_for_dcn_mbytes = 32,
 	.urgent_out_of_order_return_per_channel_pixel_only_bytes = 4096,
 	.urgent_out_of_order_return_per_channel_pixel_and_vm_bytes = 4096,
 	.urgent_out_of_order_return_per_channel_vm_only_bytes = 4096,
drivers/gpu/drm/amd/display/dc/inc/hw/dccg.h +14 -11
index ce006762f257..ad6acd1b34e1 100644
@@ -148,18 +148,21 @@ struct dccg_funcs {
 		struct dccg *dccg,
 		int inst);
 
-void (*set_pixel_rate_div)(
-        struct dccg *dccg,
-        uint32_t otg_inst,
-        enum pixel_rate_div k1,
-        enum pixel_rate_div k2);
-
-void (*set_valid_pixel_rate)(
-        struct dccg *dccg,
-	int ref_dtbclk_khz,
-        int otg_inst,
-        int pixclk_khz);
+	void (*set_pixel_rate_div)(struct dccg *dccg,
+			uint32_t otg_inst,
+			enum pixel_rate_div k1,
+			enum pixel_rate_div k2);
 
+	void (*set_valid_pixel_rate)(
+			struct dccg *dccg,
+			int ref_dtbclk_khz,
+			int otg_inst,
+			int pixclk_khz);
+
+	void (*dpp_root_clock_control)(
+			struct dccg *dccg,
+			unsigned int dpp_inst,
+			bool clock_on);
 };
 
 #endif //__DAL_DCCG_H__
drivers/gpu/drm/amd/display/dc/inc/hw_sequencer_private.h +4 -0
index a4d61bb724b6..39bd53b79020 100644
@@ -115,6 +115,10 @@ struct hwseq_private_funcs {
 	void (*plane_atomic_disable)(struct dc *dc, struct pipe_ctx *pipe_ctx);
 	void (*enable_power_gating_plane)(struct dce_hwseq *hws,
 		bool enable);
+	void (*dpp_root_clock_control)(
+			struct dce_hwseq *hws,
+			unsigned int dpp_inst,
+			bool clock_on);
 	void (*dpp_pg_control)(struct dce_hwseq *hws,
 			unsigned int dpp_inst,
 			bool power_on);
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn32.c +2 -1
index a76da0131add..9c20516be066 100644
@@ -130,12 +130,13 @@ void dmub_dcn32_reset(struct dmub_srv *dmub)
 	REG_WRITE(DMCUB_INBOX1_WPTR, 0);
 	REG_WRITE(DMCUB_OUTBOX1_RPTR, 0);
 	REG_WRITE(DMCUB_OUTBOX1_WPTR, 0);
+	REG_WRITE(DMCUB_OUTBOX0_RPTR, 0);
+	REG_WRITE(DMCUB_OUTBOX0_WPTR, 0);
 	REG_WRITE(DMCUB_SCRATCH0, 0);
 }
 
 void dmub_dcn32_reset_release(struct dmub_srv *dmub)
 {
-	REG_WRITE(DMCUB_GPINT_DATAIN1, 0);
 	REG_UPDATE(MMHUBBUB_SOFT_RESET, DMUIF_SOFT_RESET, 0);
 	REG_WRITE(DMCUB_SCRATCH15, dmub->psp_version & 0x001100FF);
 	REG_UPDATE_2(DMCUB_CNTL, DMCUB_ENABLE, 1, DMCUB_TRACEPORT_EN, 1);
drivers/gpu/drm/amd/pm/amdgpu_dpm.c +18 -7
index 1b300c569faf..69b51612c39a 100644
@@ -36,6 +36,8 @@
 #define amdgpu_dpm_enable_bapm(adev, e) \
 		((adev)->powerplay.pp_funcs->enable_bapm((adev)->powerplay.pp_handle, (e)))
 
+#define amdgpu_dpm_is_legacy_dpm(adev) ((adev)->powerplay.pp_handle == (adev))
+
 int amdgpu_dpm_get_sclk(struct amdgpu_device *adev, bool low)
 {
 	const struct amd_pm_funcs *pp_funcs = adev->powerplay.pp_funcs;
@@ -1414,15 +1416,24 @@ int amdgpu_dpm_get_smu_prv_buf_details(struct amdgpu_device *adev,
 
 int amdgpu_dpm_is_overdrive_supported(struct amdgpu_device *adev)
 {
-	struct pp_hwmgr *hwmgr = adev->powerplay.pp_handle;
-	struct smu_context *smu = adev->powerplay.pp_handle;
+	if (is_support_sw_smu(adev)) {
+		struct smu_context *smu = adev->powerplay.pp_handle;
 
-	if ((is_support_sw_smu(adev) && smu->od_enabled) ||
-	    (is_support_sw_smu(adev) && smu->is_apu) ||
-		(!is_support_sw_smu(adev) && hwmgr->od_enabled))
-		return true;
+		return (smu->od_enabled || smu->is_apu);
+	} else {
+		struct pp_hwmgr *hwmgr;
 
-	return false;
+		/*
+		 * dpm on some legacy asics don't carry od_enabled member
+		 * as its pp_handle is casted directly from adev.
+		 */
+		if (amdgpu_dpm_is_legacy_dpm(adev))
+			return false;
+
+		hwmgr = (struct pp_hwmgr *)adev->powerplay.pp_handle;
+
+		return hwmgr->od_enabled;
+	}
 }
 
 int amdgpu_dpm_set_pp_table(struct amdgpu_device *adev,
drivers/gpu/drm/bridge/lontium-lt8912b.c +0 -1
index 1b74a913f1b8..5e419934d2a3 100644
@@ -504,7 +504,6 @@ static int lt8912_attach_dsi(struct lt8912 *lt)
 	dsi->format = MIPI_DSI_FMT_RGB888;
 
 	dsi->mode_flags = MIPI_DSI_MODE_VIDEO |
-			  MIPI_DSI_MODE_VIDEO_BURST |
 			  MIPI_DSI_MODE_LPM |
 			  MIPI_DSI_MODE_NO_EOT_PACKET;
 
drivers/gpu/drm/i915/display/icl_dsi.c +1 -1
index dd64b93c78e5..8219310025de 100644
@@ -1210,7 +1210,7 @@ static void gen11_dsi_powerup_panel(struct intel_encoder *encoder)
 
 	/* panel power on related mipi dsi vbt sequences */
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
-	intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
+	msleep(intel_dsi->panel_on_delay);
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_INIT_OTP);
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
drivers/gpu/drm/i915/display/intel_dsi_vbt.c +0 -11
index 2cbc1292ab38..f102c13cb959 100644
@@ -762,17 +762,6 @@ void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
 		gpiod_set_value_cansleep(intel_dsi->gpio_backlight, 0);
 }
 
-void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec)
-{
-	struct intel_connector *connector = intel_dsi->attached_connector;
-
-	/* For v3 VBTs in vid-mode the delays are part of the VBT sequences */
-	if (is_vid_mode(intel_dsi) && connector->panel.vbt.dsi.seq_version >= 3)
-		return;
-
-	msleep(msec);
-}
-
 void intel_dsi_log_params(struct intel_dsi *intel_dsi)
 {
 	struct drm_i915_private *i915 = to_i915(intel_dsi->base.base.dev);
drivers/gpu/drm/i915/display/intel_dsi_vbt.h +0 -1
index dc642c1fe7ef..468d873fab1a 100644
@@ -16,7 +16,6 @@ void intel_dsi_vbt_gpio_init(struct intel_dsi *intel_dsi, bool panel_is_on);
 void intel_dsi_vbt_gpio_cleanup(struct intel_dsi *intel_dsi);
 void intel_dsi_vbt_exec_sequence(struct intel_dsi *intel_dsi,
 				 enum mipi_seq seq_id);
-void intel_dsi_msleep(struct intel_dsi *intel_dsi, int msec);
 void intel_dsi_log_params(struct intel_dsi *intel_dsi);
 
 #endif /* __INTEL_DSI_VBT_H__ */
drivers/gpu/drm/i915/display/skl_scaler.c +49 -8

82 lines not on this page · raw message

drivers/gpu/drm/i915/display/vlv_dsi.c +5 -17
index 90e3e41095b3..00c80f29ad99 100644
@@ -782,7 +782,6 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
 {
 	struct intel_dsi *intel_dsi = enc_to_intel_dsi(encoder);
 	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);
-	struct intel_connector *connector = to_intel_connector(conn_state->connector);
 	struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
 	enum pipe pipe = crtc->pipe;
 	enum port port;
@@ -830,21 +829,10 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
 	if (!IS_GEMINILAKE(dev_priv))
 		intel_dsi_prepare(encoder, pipe_config);
 
+	/* Give the panel time to power-on and then deassert its reset */
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_ON);
-
-	/*
-	 * Give the panel time to power-on and then deassert its reset.
-	 * Depending on the VBT MIPI sequences version the deassert-seq
-	 * may contain the necessary delay, intel_dsi_msleep() will skip
-	 * the delay in that case. If there is no deassert-seq, then an
-	 * unconditional msleep is used to give the panel time to power-on.
-	 */
-	if (connector->panel.vbt.dsi.sequence[MIPI_SEQ_DEASSERT_RESET]) {
-		intel_dsi_msleep(intel_dsi, intel_dsi->panel_on_delay);
-		intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
-	} else {
-		msleep(intel_dsi->panel_on_delay);
-	}
+	msleep(intel_dsi->panel_on_delay);
+	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DEASSERT_RESET);
 
 	if (IS_GEMINILAKE(dev_priv)) {
 		glk_cold_boot = glk_dsi_enable_io(encoder);
@@ -878,7 +866,7 @@ static void intel_dsi_pre_enable(struct intel_atomic_state *state,
 		msleep(20); /* XXX */
 		for_each_dsi_port(port, intel_dsi->ports)
 			dpi_send_cmd(intel_dsi, TURN_ON, false, port);
-		intel_dsi_msleep(intel_dsi, 100);
+		msleep(100);
 
 		intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_DISPLAY_ON);
 
@@ -1006,7 +994,7 @@ static void intel_dsi_post_disable(struct intel_atomic_state *state,
 	/* Assert reset */
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_ASSERT_RESET);
 
-	intel_dsi_msleep(intel_dsi, intel_dsi->panel_off_delay);
+	msleep(intel_dsi->panel_off_delay);
 	intel_dsi_vbt_exec_sequence(intel_dsi, MIPI_SEQ_POWER_OFF);
 
 	intel_dsi->panel_power_off_time = ktime_get_boottime();
drivers/gpu/drm/i915/i915_pci.c +2 -0
index fe4f279aaeb3..a2efc0b9d50c 100644
@@ -1133,6 +1133,8 @@ static const struct intel_gt_definition xelpmp_extra_gt[] = {
 static const struct intel_device_info mtl_info = {
 	XE_HP_FEATURES,
 	XE_LPDP_FEATURES,
+	.__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |
+			       BIT(TRANSCODER_C) | BIT(TRANSCODER_D),
 	/*
 	 * Real graphics IP version will be obtained from hardware GMD_ID
 	 * register.  Value provided here is just for sanity checking.
drivers/gpu/drm/i915/i915_reg.h +2 -2
index 2372bfa04aa8..25015996f627 100644
@@ -7840,8 +7840,8 @@ enum skl_power_gate {
 
 #define _PLANE_CSC_RY_GY_1(pipe)	_PIPE(pipe, _PLANE_CSC_RY_GY_1_A, \
 					      _PLANE_CSC_RY_GY_1_B)
-#define _PLANE_CSC_RY_GY_2(pipe)	_PIPE(pipe, _PLANE_INPUT_CSC_RY_GY_2_A, \
-					      _PLANE_INPUT_CSC_RY_GY_2_B)
+#define _PLANE_CSC_RY_GY_2(pipe)	_PIPE(pipe, _PLANE_CSC_RY_GY_2_A, \
+					      _PLANE_CSC_RY_GY_2_B)
 #define PLANE_CSC_COEFF(pipe, plane, index)	_MMIO_PLANE(plane, \
 							    _PLANE_CSC_RY_GY_1(pipe) +  (index) * 4, \
 							    _PLANE_CSC_RY_GY_2(pipe) + (index) * 4)
drivers/gpu/drm/msm/adreno/a4xx_gpu.c +1 -2
index 7cb8d9849c07..a10feb8a4194 100644
@@ -606,8 +606,7 @@ static int a4xx_pm_suspend(struct msm_gpu *gpu) {
 
 static int a4xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value)
 {
-	*value = gpu_read64(gpu, REG_A4XX_RBBM_PERFCTR_CP_0_LO,
-		REG_A4XX_RBBM_PERFCTR_CP_0_HI);
+	*value = gpu_read64(gpu, REG_A4XX_RBBM_PERFCTR_CP_0_LO);
 
 	return 0;
 }
drivers/gpu/drm/msm/adreno/a5xx_gpu.c +10 -17
index 02ff306f96f4..24feae285ccd 100644
@@ -605,11 +605,9 @@ static int a5xx_ucode_init(struct msm_gpu *gpu)
 		a5xx_ucode_check_version(a5xx_gpu, a5xx_gpu->pfp_bo);
 	}
 
-	gpu_write64(gpu, REG_A5XX_CP_ME_INSTR_BASE_LO,
-		REG_A5XX_CP_ME_INSTR_BASE_HI, a5xx_gpu->pm4_iova);
+	gpu_write64(gpu, REG_A5XX_CP_ME_INSTR_BASE_LO, a5xx_gpu->pm4_iova);
 
-	gpu_write64(gpu, REG_A5XX_CP_PFP_INSTR_BASE_LO,
-		REG_A5XX_CP_PFP_INSTR_BASE_HI, a5xx_gpu->pfp_iova);
+	gpu_write64(gpu, REG_A5XX_CP_PFP_INSTR_BASE_LO, a5xx_gpu->pfp_iova);
 
 	return 0;
 }
@@ -868,8 +866,7 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
 	 * memory rendering at this point in time and we don't want to block off
 	 * part of the virtual memory space.
 	 */
-	gpu_write64(gpu, REG_A5XX_RBBM_SECVID_TSB_TRUSTED_BASE_LO,
-		REG_A5XX_RBBM_SECVID_TSB_TRUSTED_BASE_HI, 0x00000000);
+	gpu_write64(gpu, REG_A5XX_RBBM_SECVID_TSB_TRUSTED_BASE_LO, 0x00000000);
 	gpu_write(gpu, REG_A5XX_RBBM_SECVID_TSB_TRUSTED_SIZE, 0x00000000);
 
 	/* Put the GPU into 64 bit by default */
@@ -908,8 +905,7 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
 		return ret;
 
 	/* Set the ringbuffer address */
-	gpu_write64(gpu, REG_A5XX_CP_RB_BASE, REG_A5XX_CP_RB_BASE_HI,
-		gpu->rb[0]->iova);
+	gpu_write64(gpu, REG_A5XX_CP_RB_BASE, gpu->rb[0]->iova);
 
 	/*
 	 * If the microcode supports the WHERE_AM_I opcode then we can use that
@@ -936,7 +932,7 @@ static int a5xx_hw_init(struct msm_gpu *gpu)
 		}
 
 		gpu_write64(gpu, REG_A5XX_CP_RB_RPTR_ADDR,
-			REG_A5XX_CP_RB_RPTR_ADDR_HI, shadowptr(a5xx_gpu, gpu->rb[0]));
+			    shadowptr(a5xx_gpu, gpu->rb[0]));
 	} else if (gpu->nr_rings > 1) {
 		/* Disable preemption if WHERE_AM_I isn't available */
 		a5xx_preempt_fini(gpu);
@@ -1239,9 +1235,9 @@ static void a5xx_fault_detect_irq(struct msm_gpu *gpu)
 		gpu_read(gpu, REG_A5XX_RBBM_STATUS),
 		gpu_read(gpu, REG_A5XX_CP_RB_RPTR),
 		gpu_read(gpu, REG_A5XX_CP_RB_WPTR),
-		gpu_read64(gpu, REG_A5XX_CP_IB1_BASE, REG_A5XX_CP_IB1_BASE_HI),
+		gpu_read64(gpu, REG_A5XX_CP_IB1_BASE),
 		gpu_read(gpu, REG_A5XX_CP_IB1_BUFSZ),
-		gpu_read64(gpu, REG_A5XX_CP_IB2_BASE, REG_A5XX_CP_IB2_BASE_HI),
+		gpu_read64(gpu, REG_A5XX_CP_IB2_BASE),
 		gpu_read(gpu, REG_A5XX_CP_IB2_BUFSZ));
 
 	/* Turn off the hangcheck timer to keep it from bothering us */
@@ -1427,8 +1423,7 @@ static int a5xx_pm_suspend(struct msm_gpu *gpu)
 
 static int a5xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value)
 {
-	*value = gpu_read64(gpu, REG_A5XX_RBBM_ALWAYSON_COUNTER_LO,
-		REG_A5XX_RBBM_ALWAYSON_COUNTER_HI);
+	*value = gpu_read64(gpu, REG_A5XX_RBBM_ALWAYSON_COUNTER_LO);
 
 	return 0;
 }
@@ -1465,8 +1460,7 @@ static int a5xx_crashdumper_run(struct msm_gpu *gpu,
 	if (IS_ERR_OR_NULL(dumper->ptr))
 		return -EINVAL;
 
-	gpu_write64(gpu, REG_A5XX_CP_CRASH_SCRIPT_BASE_LO,
-		REG_A5XX_CP_CRASH_SCRIPT_BASE_HI, dumper->iova);
+	gpu_write64(gpu, REG_A5XX_CP_CRASH_SCRIPT_BASE_LO, dumper->iova);
 
 	gpu_write(gpu, REG_A5XX_CP_CRASH_DUMP_CNTL, 1);
 
@@ -1666,8 +1660,7 @@ static u64 a5xx_gpu_busy(struct msm_gpu *gpu, unsigned long *out_sample_rate)
 {
 	u64 busy_cycles;
 
-	busy_cycles = gpu_read64(gpu, REG_A5XX_RBBM_PERFCTR_RBBM_0_LO,
-			REG_A5XX_RBBM_PERFCTR_RBBM_0_HI);
+	busy_cycles = gpu_read64(gpu, REG_A5XX_RBBM_PERFCTR_RBBM_0_LO);
 	*out_sample_rate = clk_get_rate(gpu->core_clk);
 
 	return busy_cycles;
drivers/gpu/drm/msm/adreno/a5xx_preempt.c +1 -3
index e0eef47dae63..f58dd564d122 100644
@@ -137,7 +137,6 @@ void a5xx_preempt_trigger(struct msm_gpu *gpu)
 
 	/* Set the address of the incoming preemption record */
 	gpu_write64(gpu, REG_A5XX_CP_CONTEXT_SWITCH_RESTORE_ADDR_LO,
-		REG_A5XX_CP_CONTEXT_SWITCH_RESTORE_ADDR_HI,
 		a5xx_gpu->preempt_iova[ring->id]);
 
 	a5xx_gpu->next_ring = ring;
@@ -212,8 +211,7 @@ void a5xx_preempt_hw_init(struct msm_gpu *gpu)
 	}
 
 	/* Write a 0 to signal that we aren't switching pagetables */
-	gpu_write64(gpu, REG_A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_LO,
-		REG_A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_HI, 0);
+	gpu_write64(gpu, REG_A5XX_CP_CONTEXT_SWITCH_SMMU_INFO_LO, 0);
 
 	/* Reset the preemption state */
 	set_preempt_state(a5xx_gpu, PREEMPT_NONE);
drivers/gpu/drm/msm/adreno/a6xx_gpu.c +42 -16

121 lines not on this page · raw message

drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c +1 -2
index a5c3d1ed255a..a023d5f962dc 100644
@@ -147,8 +147,7 @@ static int a6xx_crashdumper_run(struct msm_gpu *gpu,
 	/* Make sure all pending memory writes are posted */
 	wmb();
 
-	gpu_write64(gpu, REG_A6XX_CP_CRASH_SCRIPT_BASE_LO,
-		REG_A6XX_CP_CRASH_SCRIPT_BASE_HI, dumper->iova);
+	gpu_write64(gpu, REG_A6XX_CP_CRASH_SCRIPT_BASE_LO, dumper->iova);
 
 	gpu_write(gpu, REG_A6XX_CP_CRASH_DUMP_CNTL, 1);
 
drivers/gpu/drm/msm/adreno/adreno_device.c +12 -4
index cd009d56d35d..ed1e0c650bb1 100644
@@ -440,20 +440,21 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev)
 
 	ret = pm_runtime_get_sync(&pdev->dev);
 	if (ret < 0) {
-		pm_runtime_put_sync(&pdev->dev);
+		pm_runtime_put_noidle(&pdev->dev);
 		DRM_DEV_ERROR(dev->dev, "Couldn't power up the GPU: %d\n", ret);
-		return NULL;
+		goto err_disable_rpm;
 	}
 
 	mutex_lock(&gpu->lock);
 	ret = msm_gpu_hw_init(gpu);
 	mutex_unlock(&gpu->lock);
-	pm_runtime_put_autosuspend(&pdev->dev);
 	if (ret) {
 		DRM_DEV_ERROR(dev->dev, "gpu hw init failed: %d\n", ret);
-		return NULL;
+		goto err_put_rpm;
 	}
 
+	pm_runtime_put_autosuspend(&pdev->dev);
+
 #ifdef CONFIG_DEBUG_FS
 	if (gpu->funcs->debugfs_init) {
 		gpu->funcs->debugfs_init(gpu, dev->primary);
@@ -462,6 +463,13 @@ struct msm_gpu *adreno_load_gpu(struct drm_device *dev)
 #endif
 
 	return gpu;
+
+err_put_rpm:
+	pm_runtime_put_sync_suspend(&pdev->dev);
+err_disable_rpm:
+	pm_runtime_disable(&pdev->dev);
+
+	return NULL;
 }
 
 static int find_chipid(struct device *dev, struct adreno_rev *rev)
drivers/gpu/drm/msm/msm_drv.c +40 -13

103 lines not on this page · raw message

drivers/gpu/drm/msm/msm_drv.h +7 -1
index b2ea262296a4..d4e0ef608950 100644
@@ -224,7 +224,13 @@ struct msm_drm_private {
 
 	struct drm_atomic_state *pm_state;
 
-	/* For hang detection, in ms */
+	/**
+	 * hangcheck_period: For hang detection, in ms
+	 *
+	 * Note that in practice, a submit/job will get at least two hangcheck
+	 * periods, due to checking for progress being implemented as simply
+	 * "have the CP position registers changed since last time?"
+	 */
 	unsigned int hangcheck_period;
 
 	/**
drivers/gpu/drm/msm/msm_gpu.c +30 -1
index 4f495eecc34b..380249500325 100644
@@ -494,6 +494,21 @@ static void hangcheck_timer_reset(struct msm_gpu *gpu)
 			round_jiffies_up(jiffies + msecs_to_jiffies(priv->hangcheck_period)));
 }
 
+static bool made_progress(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
+{
+	if (ring->hangcheck_progress_retries >= DRM_MSM_HANGCHECK_PROGRESS_RETRIES)
+		return false;
+
+	if (!gpu->funcs->progress)
+		return false;
+
+	if (!gpu->funcs->progress(gpu, ring))
+		return false;
+
+	ring->hangcheck_progress_retries++;
+	return true;
+}
+
 static void hangcheck_handler(struct timer_list *t)
 {
 	struct msm_gpu *gpu = from_timer(gpu, t, hangcheck_timer);
@@ -504,9 +519,12 @@ static void hangcheck_handler(struct timer_list *t)
 	if (fence != ring->hangcheck_fence) {
 		/* some progress has been made.. ya! */
 		ring->hangcheck_fence = fence;
-	} else if (fence_before(fence, ring->fctx->last_fence)) {
+		ring->hangcheck_progress_retries = 0;
+	} else if (fence_before(fence, ring->fctx->last_fence) &&
+			!made_progress(gpu, ring)) {
 		/* no progress and not done.. hung! */
 		ring->hangcheck_fence = fence;
+		ring->hangcheck_progress_retries = 0;
 		DRM_DEV_ERROR(dev->dev, "%s: hangcheck detected gpu lockup rb %d!\n",
 				gpu->name, ring->id);
 		DRM_DEV_ERROR(dev->dev, "%s:     completed fence: %u\n",
@@ -832,6 +850,7 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
 		struct msm_gpu *gpu, const struct msm_gpu_funcs *funcs,
 		const char *name, struct msm_gpu_config *config)
 {
+	struct msm_drm_private *priv = drm->dev_private;
 	int i, ret, nr_rings = config->nr_rings;
 	void *memptrs;
 	uint64_t memptrs_iova;
@@ -859,6 +878,16 @@ int msm_gpu_init(struct drm_device *drm, struct platform_device *pdev,
 	kthread_init_work(&gpu->recover_work, recover_worker);
 	kthread_init_work(&gpu->fault_work, fault_worker);
 
+	priv->hangcheck_period = DRM_MSM_HANGCHECK_DEFAULT_PERIOD;
+
+	/*
+	 * If progress detection is supported, halve the hangcheck timer
+	 * duration, as it takes two iterations of the hangcheck handler
+	 * to detect a hang.
+	 */
+	if (funcs->progress)
+		priv->hangcheck_period /= 2;
+
 	timer_setup(&gpu->hangcheck_timer, hangcheck_handler, 0);
 
 	spin_lock_init(&gpu->perf_lock);
drivers/gpu/drm/msm/msm_gpu.h +16 -6
index a89bfdc3d7f9..732295e25683 100644
@@ -78,6 +78,15 @@ struct msm_gpu_funcs {
 	struct msm_gem_address_space *(*create_private_address_space)
 		(struct msm_gpu *gpu);
 	uint32_t (*get_rptr)(struct msm_gpu *gpu, struct msm_ringbuffer *ring);
+
+	/**
+	 * progress: Has the GPU made progress?
+	 *
+	 * Return true if GPU position in cmdstream has advanced (or changed)
+	 * since the last call.  To avoid false negatives, this should account
+	 * for cmdstream that is buffered in this FIFO upstream of the CP fw.
+	 */
+	bool (*progress)(struct msm_gpu *gpu, struct msm_ringbuffer *ring);
 };
 
 /* Additional state for iommu faults: */
@@ -237,6 +246,7 @@ struct msm_gpu {
 #define DRM_MSM_INACTIVE_PERIOD   66 /* in ms (roughly four frames) */
 
 #define DRM_MSM_HANGCHECK_DEFAULT_PERIOD 500 /* in ms */
+#define DRM_MSM_HANGCHECK_PROGRESS_RETRIES 3
 	struct timer_list hangcheck_timer;
 
 	/* Fault info for most recent iova fault: */
@@ -548,7 +558,7 @@ static inline void gpu_rmw(struct msm_gpu *gpu, u32 reg, u32 mask, u32 or)
 	msm_rmw(gpu->mmio + (reg << 2), mask, or);
 }
 
-static inline u64 gpu_read64(struct msm_gpu *gpu, u32 lo, u32 hi)
+static inline u64 gpu_read64(struct msm_gpu *gpu, u32 reg)
 {
 	u64 val;
 
@@ -566,17 +576,17 @@ static inline u64 gpu_read64(struct msm_gpu *gpu, u32 lo, u32 hi)
 	 * when the lo is read, so make sure to read the lo first to trigger
 	 * that
 	 */
-	val = (u64) msm_readl(gpu->mmio + (lo << 2));
-	val |= ((u64) msm_readl(gpu->mmio + (hi << 2)) << 32);
+	val = (u64) msm_readl(gpu->mmio + (reg << 2));
+	val |= ((u64) msm_readl(gpu->mmio + ((reg + 1) << 2)) << 32);
 
 	return val;
 }
 
-static inline void gpu_write64(struct msm_gpu *gpu, u32 lo, u32 hi, u64 val)
+static inline void gpu_write64(struct msm_gpu *gpu, u32 reg, u64 val)
 {
 	/* Why not a writeq here? Read the screed above */
-	msm_writel(lower_32_bits(val), gpu->mmio + (lo << 2));
-	msm_writel(upper_32_bits(val), gpu->mmio + (hi << 2));
+	msm_writel(lower_32_bits(val), gpu->mmio + (reg << 2));
+	msm_writel(upper_32_bits(val), gpu->mmio + ((reg + 1) << 2));
 }
 
 int msm_gpu_pm_suspend(struct msm_gpu *gpu);
drivers/gpu/drm/msm/msm_ringbuffer.h +28 -0
index 2a5045abe46e..698b333abccd 100644
@@ -35,6 +35,11 @@ struct msm_rbmemptrs {
 	volatile u64 ttbr0;
 };
 
+struct msm_cp_state {
+	uint64_t ib1_base, ib2_base;
+	uint32_t ib1_rem, ib2_rem;
+};
+
 struct msm_ringbuffer {
 	struct msm_gpu *gpu;
 	int id;
@@ -64,6 +69,29 @@ struct msm_ringbuffer {
 	uint64_t memptrs_iova;
 	struct msm_fence_context *fctx;
 
+	/**
+	 * hangcheck_progress_retries:
+	 *
+	 * The number of extra hangcheck duration cycles that we have given
+	 * due to it appearing that the GPU is making forward progress.
+	 *
+	 * For GPU generations which support progress detection (see.
+	 * msm_gpu_funcs::progress()), if the GPU appears to be making progress
+	 * (ie. the CP has advanced in the command stream, we'll allow up to
+	 * DRM_MSM_HANGCHECK_PROGRESS_RETRIES expirations of the hangcheck timer
+	 * before killing the job.  But to detect progress we need two sample
+	 * points, so the duration of the hangcheck timer is halved.  In other
+	 * words we'll let the submit run for up to:
+	 *
+	 * (DRM_MSM_HANGCHECK_DEFAULT_PERIOD / 2) * (DRM_MSM_HANGCHECK_PROGRESS_RETRIES + 1)
+	 */
+	int hangcheck_progress_retries;
+
+	/**
+	 * last_cp_state: The state of the CP at the last call to gpu->progress()
+	 */
+	struct msm_cp_state last_cp_state;
+
 	/*
 	 * preempt_lock protects preemption and serializes wptr updates against
 	 * preemption.  Can be aquired from irq context.
drivers/gpu/drm/panel/panel-orisetech-otm8009a.c +1 -1
index b4729a94c34a..898b892f1143 100644
@@ -471,7 +471,7 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi)
 		       DRM_MODE_CONNECTOR_DSI);
 
 	ctx->bl_dev = devm_backlight_device_register(dev, dev_name(dev),
[… more lines in the raw message]

Lines of this file are not shown. View the raw message.

drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +0 -3
index 0bc1ebc43002..1ec9c53a7bf4 100644

Lines of this file are not shown. View the raw message.

drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +1 -95

96 lines not on this page · raw message

drivers/gpu/drm/vmwgfx/vmwgfx_kms.h +0 -5
index 85f86faa3243..b02d2793659f 100644

Lines of this file are not shown. View the raw message.

drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +37 -16

53 lines not on this page · raw message

drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c +1 -30
index 9c79873f62f0..e1f36a09c59c 100644

Lines of this file are not shown. View the raw message.

drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +0 -26
index 8650c3aea8f0..0090abe89254 100644

Lines of this file are not shown. View the raw message.

drivers/hid/wacom_wac.c +36 -2
index 9312d611db8e..0c6a82c665c1 100644

Lines of this file are not shown. View the raw message.

drivers/hid/wacom_wac.h +1 -0
index 16f221388563..1a40bb8c5810 100644

Lines of this file are not shown. View the raw message.

drivers/i2c/busses/i2c-tegra.c +27 -13
index 3869c258a529..2bc40f957e50 100644

Lines of this file are not shown. View the raw message.

drivers/irqchip/irq-loongarch-cpu.c +18 -12
index 741612ba6a52..fdec3e9cfacf 100644

Lines of this file are not shown. View the raw message.

drivers/irqchip/irq-loongson-eiointc.c +39 -23

62 lines not on this page · raw message

drivers/irqchip/irq-loongson-pch-pic.c +12 -6
index 03493cda65a3..679e2b68e6e9 100644

Lines of this file are not shown. View the raw message.

drivers/mailbox/zynqmp-ipi-mailbox.c +8 -5
index e02a4a18e8c2..d097f45b0e5f 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/spi-nor/core.c +12 -0
index 9a7bea365acb..dc4d86ceee44 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/spi-nor/core.h +6 -0
index 00bf0d0e955a..290613fd63ae 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/spi-nor/debugfs.c +2 -0
index 5f56b23205d8..6d6bd559db8f 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/spi-nor/issi.c +1 -0
index 89a66a19d754..7c8eee808dda 100644

Lines of this file are not shown. View the raw message.

drivers/mtd/spi-nor/spansion.c +21 -14
index 7ac2ad1a8d57..7e7c68fc7776 100644

Lines of this file are not shown. View the raw message.

drivers/net/dsa/mt7530.c +64 -49

113 lines not on this page · raw message

drivers/net/dsa/mv88e6xxx/chip.c +1 -0
index f1d9ee2a78b0..12175195d396 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/freescale/enetc/enetc_qos.c +1 -1
index fcebb54224c0..a8539a8554a1 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/ice/ice_tc_lib.c +2 -1
index 71cb15fcf63b..652ef09eeb30 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c +0 -3
index f8156fe4b1dc..0ee943db3dc9 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -2
index faf3a094ac54..9b8848daeb43 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/mbox.c +4 -1
index 2898931d5260..9690ac01f02c 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/mbox.h +27 -6
index 8d5d5a0f68c4..11eeb36cf9a5 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/mcs.c +54 -56

110 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/af/mcs.h +12 -14
index 64dc2b80e15d..0f89dcb76465 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/mcs_cnf10kb.c +63 -0

63 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/af/mcs_reg.h +5 -1
index c95a8b8f5eaf..f3ab01fc363c 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c +37 -0
index eb25e458266c..dfd23580e3b8 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/npc.h +1 -0
index f187293e3e08..d027c23b8ef8 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu.c +40 -9

49 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/af/rvu.h +2 -0
index b07c6f51b461..d493b533cf76 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +2 -0
index addc69f4b65c..9eca38547b78 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c +8 -5
index 7dbbc115cde4..f9faa5b23bb9 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +9 -2
index abef0fd4259a..aadc352c2ffb 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +22 -0
index 1e348fd0d930..16cfc802e348 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.c +135 -34

169 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_fs.h +4 -0
index bdd65ce56a32..3f5c9042d10e 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.c +71 -54

125 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/af/rvu_npc_hash.h +8 -2
index 3efeb09c58de..a1c3d987b804 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/nic/cn10k_macsec.c +35 -13

48 lines not on this page · raw message

drivers/net/ethernet/marvell/octeontx2/nic/otx2_common.h +3 -3
index 712715a49d20..241016ca64d0 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c +25 -2
index 0f7345a96965..d0554f6d2673 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +11 -3
index 303930499a4c..ed911d994627 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c +1 -1
index ab126f8706c7..53366dbfbf27 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/pensando/ionic/ionic_devlink.c +2 -0
index 4297ed9024c0..2696dac21b09 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +1 -1
index 01c22701482d..d7370fb60a16 100644

Lines of this file are not shown. View the raw message.

drivers/net/ethernet/sfc/mcdi_port_common.c +7 -4
index 899cc1671004..0ab14f3d01d4 100644

Lines of this file are not shown. View the raw message.

drivers/net/usb/r8152.c +58 -26

84 lines not on this page · raw message

drivers/net/virtio_net.c +2 -0
index 3f1883814ce2..9a612b13b4e4 100644

Lines of this file are not shown. View the raw message.

drivers/net/wireless/realtek/rtw88/rtw8821c.c +1 -1
index 9afdc5ce86b4..609a2b86330d 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c +5 -1
index cb24de9e97dc..fa8f14c925ec 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/thinkpad_acpi.c +19 -5
index d1ec31086e9b..5b2c8dd2861b 100644

Lines of this file are not shown. View the raw message.

drivers/platform/x86/touchscreen_dmi.c +41 -0

41 lines not on this page · raw message

drivers/remoteproc/imx_dsp_rproc.c +9 -3
index 95da1cbefacf..506ec9565716 100644

Lines of this file are not shown. View the raw message.

drivers/remoteproc/imx_rproc.c +5 -2
index 596e1440cca5..8a2a7112678c 100644

Lines of this file are not shown. View the raw message.

drivers/remoteproc/rcar_rproc.c +7 -2
index aa86154109c7..1ff2a73ade90 100644

Lines of this file are not shown. View the raw message.

drivers/remoteproc/st_remoteproc.c +4 -1
index a3268d95a50e..e6bd3c7a950a 100644

Lines of this file are not shown. View the raw message.

drivers/remoteproc/stm32_rproc.c +5 -1
index 7d782ed9e589..23c1690b8d73 100644

Lines of this file are not shown. View the raw message.

drivers/scsi/qedi/qedi_main.c +3 -0
index df2fe7bd26d1..f530bb036493 100644

Lines of this file are not shown. View the raw message.

drivers/soc/qcom/llcc-qcom.c +12 -3
index 9c6cf2f5d77c..d4cba3b3c56c 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-fsl-cpm.c +23 -0
index ee905880769e..7832ce330b29 100644

Lines of this file are not shown. View the raw message.

drivers/spi/spi-fsl-spi.c +24 -25

49 lines not on this page · raw message

drivers/usb/dwc3/gadget.c +18 -41

59 lines not on this page · raw message

drivers/watchdog/dw_wdt.c +5 -2
index 52962e8d11a6..61af5d1332ac 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/block-rsv.c +2 -1
index ec96285357e0..2044f1e18629 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/ctree.c +31 -1
index dcb510f38dda..dbbae92ac23d 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/disk-io.c +18 -7
index 5b1b5e1a63c8..acae82a5f8ee 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/file-item.c +3 -2
index 6bb9fa961a6a..4fab7da63259 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/free-space-cache.c +4 -3
index 6a8f2bd350f4..4cd8e44cba4c 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/free-space-tree.c +49 -1

50 lines not on this page · raw message

fs/btrfs/free-space-tree.h +2 -1
index dc2463e4cfe3..6d5551d0ced8 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/inode.c +3 -0
index 0e516aefbf51..56e9efbffd58 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/ioctl.c +3 -1
index 0cebc203c4cc..9de647e48e7e 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/print-tree.c +3 -3
index dd8777872143..228eeb04d03d 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/super.c +5 -1
index e43b16199e22..6438300fa246 100644

Lines of this file are not shown. View the raw message.

fs/btrfs/zoned.c +8 -9
index e97c5a1ac95d..836babd23db5 100644

Lines of this file are not shown. View the raw message.

fs/cifs/cifsfs.c +16 -0
index 03e3e95cf25b..078df1e2dd18 100644

Lines of this file are not shown. View the raw message.

fs/cifs/connect.c +7 -0
index 21b31d1640e5..935fe198a4ba 100644

Lines of this file are not shown. View the raw message.

fs/cifs/smb2ops.c +1 -1
index ccf311750927..7468f8baf499 100644

Lines of this file are not shown. View the raw message.

fs/ext4/balloc.c +25 -0
index 8ff4b9192a9f..f2c415f31b75 100644

Lines of this file are not shown. View the raw message.

fs/ext4/extents_status.c +13 -17
index 7ada374ff27d..44e83521bfde 100644

Lines of this file are not shown. View the raw message.

fs/ext4/hash.c +5 -1
index 147b5241dd94..46c3423ddfa1 100644

Lines of this file are not shown. View the raw message.

fs/ext4/inline.c +14 -3
index c4475a74c762..3a91be1d9bbe 100644

Lines of this file are not shown. View the raw message.

fs/ext4/inode.c +1 -1
index 42003b5c4cad..ffc810436ef2 100644

Lines of this file are not shown. View the raw message.

fs/ext4/mballoc.c +5 -1
index 9dad93059945..912c4a1093fe 100644

Lines of this file are not shown. View the raw message.

fs/ext4/mmp.c +21 -9
index 588cb09c5291..23930ed3cbda 100644

Lines of this file are not shown. View the raw message.

fs/ext4/namei.c +37 -16

53 lines not on this page · raw message

fs/ext4/super.c +12 -7
index 2528e8216c33..d542f068ca99 100644

Lines of this file are not shown. View the raw message.

fs/ext4/xattr.c +3 -2
index b17c1b90e122..b1b8fe86ccdb 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/data.c +10 -10
index 770a606eb3f6..de6b056f090b 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/debug.c +44 -21

65 lines not on this page · raw message

fs/f2fs/extent_cache.c +359 -220

579 lines not on this page · raw message

fs/f2fs/f2fs.h +88 -125

213 lines not on this page · raw message

fs/f2fs/file.c +4 -4
index bf37983304a3..dbad2db68f1b 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/gc.c +87 -56

143 lines not on this page · raw message

fs/f2fs/gc.h +2 -12
index 19b956c2d697..ca84024b9c9e 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/inode.c +18 -26

44 lines not on this page · raw message

fs/f2fs/namei.c +17 -3
index b6c14c9c33a0..d879a295b688 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/node.c +6 -4
index b9ee5a1176a0..07419c3e42a5 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/node.h +1 -1
index 3c09cae058b0..0aa48704c77a 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/segment.c +6 -5
index b0fbdee16a96..cbbf95b99541 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/shrinker.c +11 -8
index dd3c3c7a90ec..33c490e69ae3 100644

Lines of this file are not shown. View the raw message.

fs/f2fs/super.c +6 -6
index 5af05411818a..c46533d65372 100644

Lines of this file are not shown. View the raw message.

fs/fs-writeback.c +1 -1
index aa33c39be182..d387708977a5 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/connection.c +48 -20

68 lines not on this page · raw message

fs/ksmbd/connection.h +39 -19

58 lines not on this page · raw message

fs/ksmbd/mgmt/tree_connect.c +3 -0
index f19de20c2960..f07a05f37651 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/mgmt/user_session.c +78 -60

138 lines not on this page · raw message

fs/ksmbd/mgmt/user_session.h +2 -3
index 8934b8ee275b..51f38e5b61ab 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/server.c +2 -1
index 8c2bc513445c..8a0ad399f245 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/smb2pdu.c +61 -61

122 lines not on this page · raw message

fs/ksmbd/smb2pdu.h +2 -0
index f4baa9800f6e..dd10f8031606 100644

Lines of this file are not shown. View the raw message.

fs/ksmbd/transport_tcp.c +1 -1
index 20e85e2701f2..eff7a1d793f0 100644

Lines of this file are not shown. View the raw message.

fs/notify/inotify/inotify_fsnotify.c +9 -2
index 49cfe2ae6d23..993375f0db67 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/bitmap.c +2 -1
index 45f95c1cb258..e0cdc91d88a8 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/namei.c +10 -0
index bc22cc321a74..a9549e73081f 100644

Lines of this file are not shown. View the raw message.

fs/ntfs3/ntfs.h +0 -3
index 9cc396b117bf..0f38d558169a 100644

Lines of this file are not shown. View the raw message.

fs/proc/proc_sysctl.c +31 -11

42 lines not on this page · raw message

include/crypto/algapi.h +7 -0
index f50c5d1725da..224b86064708 100644

Lines of this file are not shown. View the raw message.

include/drm/display/drm_dp.h +8 -2
index e934aab357be..05f2cc03d03d 100644

Lines of this file are not shown. View the raw message.

include/drm/display/drm_dp_helper.h +2 -3
index ab55453f2d2c..ade9df59e156 100644

Lines of this file are not shown. View the raw message.

include/linux/crypto.h +6 -0
index 2324ab6f1846..e3c4be29aacc 100644

Lines of this file are not shown. View the raw message.

include/linux/pci_ids.h +1 -0
index 45c3d62e616d..95f33dadb2be 100644

Lines of this file are not shown. View the raw message.

include/trace/events/f2fs.h +36 -26

62 lines not on this page · raw message

kernel/locking/rwsem.c +4 -4
index 84d5b649b95f..92d8e2c4edda 100644

Lines of this file are not shown. View the raw message.

net/core/skbuff.c +14 -6
index 597c1f17d388..ccfd9053754a 100644

Lines of this file are not shown. View the raw message.

net/ethtool/ioctl.c +1 -1
index 038398d41a93..940c0e27be73 100644

Lines of this file are not shown. View the raw message.

net/ipv6/sit.c +5 -3
index 70d81bba5093..3ffb6a5b1f82 100644

Lines of this file are not shown. View the raw message.

net/ipv6/tcp_ipv6.c +1 -1
index c563a84d67b4..8d61efeab9c9 100644

Lines of this file are not shown. View the raw message.

net/ncsi/ncsi-aen.c +1 -0
index b635c194f0a8..62fb1031763d 100644

Lines of this file are not shown. View the raw message.

net/packet/af_packet.c +1 -1
index ac9335d76fb7..2af2ab924d64 100644

Lines of this file are not shown. View the raw message.

net/rxrpc/sendmsg.c +1 -1
index d4e4e94f4f98..71e40f91dd39 100644

Lines of this file are not shown. View the raw message.

net/sched/act_mirred.c +1 -1
index baeae5e5c8f0..36395e5db3b4 100644

Lines of this file are not shown. View the raw message.

net/sched/cls_api.c +1 -0
index 50566db45949..7b2aa04a7cdf 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/Kconfig +6 -0
index 3f16ad1c3758..965ae55fa160 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/Makefile +2 -0
index 9170ee1447dd..71d3ce5867e4 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/rt1316-sdw.c +1 -1
index ed0a11436362..154b6179b6dc 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/rt1318-sdw.c new file +884 -0

884 lines not on this page · raw message

sound/soc/codecs/rt1318-sdw.h new file +101 -0

101 lines not on this page · raw message

sound/soc/codecs/rt711-sdca-sdw.c +1 -1
index 88a8392a58ed..e23cec4c457d 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/rt715-sdca-sdw.c +1 -1
index c54ecf3e6987..38a82e4e2f95 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/wcd938x-sdw.c +1026 -13

1,039 lines not on this page · raw message

sound/soc/codecs/wcd938x.c +4 -999

1,003 lines not on this page · raw message

sound/soc/codecs/wcd938x.h +1 -0
index ea82039e7843..74b1498fec38 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/wsa881x.c +1 -1
index 6c8b1db649b8..046843b57b03 100644

Lines of this file are not shown. View the raw message.

sound/soc/codecs/wsa883x.c +1 -1
index 2533d0973529..6e9a64c5948e 100644

Lines of this file are not shown. View the raw message.

sound/soc/intel/common/soc-acpi-intel-byt-match.c +1 -1
index db5a92b9875a..87c44f284971 100644

Lines of this file are not shown. View the raw message.

sound/usb/caiaq/input.c +1 -0
index 1e2cf2f08eec..84f26dce7f5d 100644

Lines of this file are not shown. View the raw message.

tools/perf/builtin-ftrace.c +4 -2
index 7de07bb16d23..4bc5b7cf3e04 100644

Lines of this file are not shown. View the raw message.

tools/perf/builtin-record.c +1 -1
index 48c3461b496c..7314183cdcb6 100644

Lines of this file are not shown. View the raw message.

tools/perf/builtin-stat.c +2 -2
index f6427e3a4742..a2c74a34e4a4 100644

Lines of this file are not shown. View the raw message.

tools/perf/pmu-events/arch/powerpc/power9/other.json +2 -2
index 3f69422c21f9..f10bd554521a 100644

Lines of this file are not shown. View the raw message.

tools/perf/pmu-events/arch/powerpc/power9/pipeline.json +1 -1
index d0265f255de2..723bffa41c44 100644

Lines of this file are not shown. View the raw message.

tools/perf/pmu-events/arch/s390/cf_z16/extended.json +5 -5
index c306190fc06f..c2b10ec1c6e0 100644

Lines of this file are not shown. View the raw message.

tools/perf/scripts/python/intel-pt-events.py +1 -1
index 6be7fd8fd615..8058b2fc2b68 100644

Lines of this file are not shown. View the raw message.

tools/perf/tests/shell/record_offcpu.sh +1 -1
index d2eba583a2ac..054272750aa9 100755

Lines of this file are not shown. View the raw message.

tools/perf/util/cs-etm.c +18 -12
index 16db965ac995..09e240e4477d 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/evsel.h +5 -0
index 989865e16aad..8ce30329a077 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/pmu.c +1 -1
index 03284059175f..9a762c0cc53c 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/sort.c +1 -2
index 2e7330867e2e..6882b1714499 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/symbol-elf.c +1 -1
index 80345695b136..29c9348c30f0 100644

Lines of this file are not shown. View the raw message.

tools/perf/util/tracepoint.c +1 -0
index 89ef56c43311..92dd8b455b90 100644

Lines of this file are not shown. View the raw message.

tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh +5 -5
index aebaab8ce44c..441eededa031 100755

Lines of this file are not shown. View the raw message.

tools/testing/selftests/netfilter/Makefile +5 -2
index 4504ee07be08..3686bfa6c58d 100644

Lines of this file are not shown. View the raw message.

The rest of this diff is not shown. View the raw message.

Part of the diff is not shown here. View the raw message.