Linux 6.1.29
Greg Kroah-Hartman
maintainerI'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
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -67,7 +67,3 @@ } while (0)#define abort () return 0 - -#define __BYTE_ORDER __LITTLE_ENDIAN - -
arch/x86/events/intel/lbr.c +1 -5
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -349,8 +349,6 @@ void dcn314_smu_set_zstate_support(struct clk_mgr_internal *clk_mgr, enum dcn_zsif (!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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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_paramDC_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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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, strucelse 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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.0struct display_mode_lib ;
drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c +12 -12
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 3struct 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
@@ -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
@@ -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),
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_ldu.c +37 -16
53 lines not on this page · 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
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/ethernet/freescale/enetc/enetc_qos.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ice/ice_tc_lib.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ixgbe/ixgbe_lib.c +0 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +4 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/mbox.c +4 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/mbox.h +27 -6
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
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
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/mcs_rvu_if.c +37 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/npc.h +1 -0
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
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_cgx.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_cn10k.c +8 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_debugfs.c +9 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/af/rvu_npc.c +22 -0
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
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
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
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_flows.c +25 -2
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c +11 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/marvell/octeontx2/nic/otx2_vf.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_devlink.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_ethtool.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/sfc/mcdi_port_common.c +7 -4
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/wireless/realtek/rtw88/rtw8821c.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/platform/x86/intel/uncore-frequency/uncore-frequency-common.c +5 -1
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/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
fs/btrfs/free-space-tree.c +49 -1
50 lines not on this page · raw message
fs/ext4/namei.c +37 -16
53 lines not on this page · 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/gc.c +87 -56
143 lines not on this page · raw message
fs/f2fs/inode.c +18 -26
44 lines not on this page · 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/user_session.c +78 -60
138 lines not on this page · raw message
fs/ksmbd/smb2pdu.c +61 -61
122 lines not on this page · raw message
fs/proc/proc_sysctl.c +31 -11
42 lines not on this page · raw message
include/trace/events/f2fs.h +36 -26
62 lines not on this page · 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/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/intel/common/soc-acpi-intel-byt-match.c +1 -1
Lines of this file are not shown. View the raw message.
tools/perf/pmu-events/arch/powerpc/power9/other.json +2 -2
Lines of this file are not shown. View the raw message.
tools/perf/pmu-events/arch/powerpc/power9/pipeline.json +1 -1
Lines of this file are not shown. View the raw message.
tools/perf/pmu-events/arch/s390/cf_z16/extended.json +5 -5
Lines of this file are not shown. View the raw message.
tools/perf/scripts/python/intel-pt-events.py +1 -1
Lines of this file are not shown. View the raw message.
tools/perf/tests/shell/record_offcpu.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/srv6_end_dt46_l3vpn_test.sh +5 -5
Lines of this file are not shown. View the raw message.
tools/testing/selftests/netfilter/Makefile +5 -2
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.