Linux 6.10.9
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.10.9 kernel.
All users of the 6.10 kernel series must upgrade.
The updated 6.10.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.10.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
------------
Documentation/locking/hwspinlock.rst | 11 Makefile | 2 arch/arm64/boot/dts/qcom/x1e80100-crd.dts | 81 +++++ arch/arm64/boot/dts/qcom/x1e80100-qcp.dts | 81 +++++ arch/x86/kernel/cpu/amd.c | 2 block/blk-integrity.c | 2 crypto/ecc.c | 2 drivers/base/regmap/regmap-spi.c | 3 drivers/cpufreq/scmi-cpufreq.c | 4 drivers/crypto/stm32/stm32-cryp.c | 6 drivers/dma/altera-msgdma.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c | 1 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 9 drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.h | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 11 drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 19 + drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h | 13 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.c | 4 drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 15 drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 12 drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c | 3 drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c | 6 drivers/gpu/drm/amd/amdgpu/df_v1_7.c | 2 drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c | 2 drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c | 2 drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c | 2 drivers/gpu/drm/amd/amdgpu/mmhub_v3_3.c | 2 drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c | 2 drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c | 3 drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c | 19 - drivers/gpu/drm/amd/amdkfd/kfd_crat.h | 2 drivers/gpu/drm/amd/amdkfd/kfd_debug.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c | 9 drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 3 drivers/gpu/drm/amd/amdkfd/kfd_topology.h | 5 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 49 +-- drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h | 2 drivers/gpu/drm/amd/display/dc/bios/bios_parser.c | 18 + drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c | 7 drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c | 3 drivers/gpu/drm/amd/display/dc/core/dc.c | 1 drivers/gpu/drm/amd/display/dc/core/dc_link_exports.c | 3 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 8 drivers/gpu/drm/amd/display/dc/core/dc_state.c | 10 drivers/gpu/drm/amd/display/dc/dce/dmub_abm_lcd.c | 2 drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c | 3 drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dwb_scl.c | 3 drivers/gpu/drm/amd/display/dc/dcn35/dcn35_dccg.c | 2 drivers/gpu/drm/amd/display/dc/dml/calcs/dcn_calcs.c | 7 drivers/gpu/drm/amd/display/dc/dml/dcn302/dcn302_fpu.c | 10 drivers/gpu/drm/amd/display/dc/dml/dcn303/dcn303_fpu.c | 10 drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c | 10 drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c | 10 drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c | 7 drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c | 17 - drivers/gpu/drm/amd/display/dc/hdcp/hdcp_msg.c | 17 - drivers/gpu/drm/amd/display/dc/hwss/dcn201/dcn201_hwseq.c | 3 drivers/gpu/drm/amd/display/dc/hwss/dcn21/dcn21_hwseq.c | 2 drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c | 3 drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c | 26 - drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c | 4 drivers/gpu/drm/amd/display/dc/link/protocols/link_dpcd.c | 1 drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c | 1 drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c | 1 drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c | 4 drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c | 2 drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c | 1 drivers/gpu/drm/amd/display/dmub/src/dmub_dcn35.c | 5 drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c | 28 + drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c | 2 drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c | 13 drivers/gpu/drm/amd/pm/powerplay/hwmgr/ppatomctrl.c | 5 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c | 29 + drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c | 2 drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c | 15 drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c | 60 ++- drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c | 20 - drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c | 31 + drivers/gpu/drm/amd/pm/powerplay/smumgr/vega10_smumgr.c | 6 drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h | 4 drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c | 31 + drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c | 14 drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c | 3 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c | 55 ++- drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c | 5 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c | 28 - drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c | 28 - drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c | 2 drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c | 4 drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c | 28 - drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 5 drivers/gpu/drm/bridge/tc358767.c | 2 drivers/gpu/drm/drm_bridge.c | 5 drivers/gpu/drm/drm_fb_helper.c | 11 drivers/gpu/drm/drm_panel_orientation_quirks.c | 6 drivers/gpu/drm/meson/meson_plane.c | 17 - drivers/gpu/drm/xe/xe_force_wake.h | 13 drivers/gpu/drm/xe/xe_gt_ccs_mode.c | 4 drivers/gpu/drm/xe/xe_gt_topology.c | 4 drivers/gpu/drm/xe/xe_guc_relay.c | 9 drivers/gpu/drm/xe/xe_guc_submit.c | 5 drivers/gpu/drm/xe/xe_hwmon.c | 9 drivers/gpu/drm/xe/xe_migrate.c | 55 ++- drivers/gpu/drm/xe/xe_pcode.c | 6 drivers/hwmon/k10temp.c | 36 +- drivers/hwspinlock/hwspinlock_core.c | 28 + drivers/hwspinlock/hwspinlock_internal.h | 3 drivers/iio/industrialio-core.c | 7 drivers/iio/industrialio-event.c | 9 drivers/iio/inkern.c | 32 +- drivers/infiniband/hw/efa/efa_com.c | 30 + drivers/media/usb/uvc/uvc_driver.c | 18 - drivers/media/v4l2-core/v4l2-cci.c | 9 drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 3 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c | 2 drivers/net/ethernet/pensando/ionic/ionic_lif.c | 2 drivers/net/usb/qmi_wwan.c | 1 drivers/net/virtio_net.c | 6 drivers/net/wireless/ath/ath11k/qmi.c | 2 drivers/net/wireless/ath/ath12k/dp_rx.c | 2 drivers/net/wireless/ath/ath12k/qmi.c | 2 drivers/net/wireless/intel/iwlwifi/fw/debugfs.c | 3 drivers/net/wireless/intel/iwlwifi/fw/runtime.h | 1 drivers/net/wireless/intel/iwlwifi/mvm/link.c | 14 drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 6 drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c | 1 drivers/net/wireless/realtek/rtw89/ser.c | 8 drivers/pci/controller/dwc/pcie-al.c | 16 - drivers/pinctrl/core.c | 1 drivers/pinctrl/renesas/pinctrl-rzg2l.c | 12 drivers/platform/chrome/cros_ec_lpc_mec.c | 76 ++++ drivers/platform/chrome/cros_ec_lpc_mec.h | 11 drivers/platform/x86/amd/pmf/core.c | 3 drivers/platform/x86/amd/pmf/pmf-quirks.c | 9 drivers/ras/amd/atl/dehash.c | 43 -- drivers/ras/amd/atl/map.c | 77 ++++ drivers/remoteproc/mtk_scp.c | 2 drivers/remoteproc/qcom_q6v5_pas.c | 11 drivers/soc/qcom/smem.c | 26 + drivers/spi/spi-hisi-kunpeng.c | 1 drivers/thermal/thermal_sysfs.c | 6 drivers/thermal/thermal_trip.c | 2 drivers/ufs/core/ufshcd.c | 19 + drivers/usb/typec/ucsi/ucsi.h | 2 drivers/usb/usbip/stub_rx.c | 77 +++- fs/btrfs/inode.c | 3 fs/btrfs/scrub.c | 25 + fs/btrfs/tree-checker.c | 47 ++ fs/f2fs/f2fs.h | 2 fs/f2fs/inline.c | 20 + fs/f2fs/inode.c | 2 fs/gfs2/quota.c | 19 - fs/gfs2/util.c | 6 fs/notify/fsnotify.c | 31 + fs/notify/fsnotify.h | 2 fs/notify/mark.c | 32 +- fs/smb/client/smb2inode.c | 6 include/clocksource/timer-xilinx.h | 2 include/linux/fsnotify_backend.h | 8 include/linux/hwspinlock.h | 6 include/linux/i2c.h | 2 include/linux/soc/qcom/smem.h | 2 include/net/inet_timewait_sock.h | 6 include/net/ip.h | 3 include/net/tcp.h | 2 include/sound/ump_convert.h | 1 include/ufs/ufshcd.h | 1 include/ufs/ufshci.h | 1 kernel/dma/debug.c | 5 kernel/rcu/tree.h | 1 kernel/rcu/tree_nocb.h | 32 -- mm/filemap.c | 2 net/dccp/minisocks.c | 3 net/ipv4/fib_semantics.c | 5 net/ipv4/inet_timewait_sock.c | 52 ++- net/ipv4/metrics.c | 8 net/ipv4/tcp_cong.c | 11 net/ipv4/tcp_ipv4.c | 14 net/ipv4/tcp_minisocks.c | 25 - net/ipv6/route.c | 2 net/ipv6/tcp_ipv6.c | 6 net/mac80211/main.c | 3 net/wireless/ibss.c | 5 net/wireless/mesh.c | 5 net/wireless/nl80211.c | 21 - net/wireless/scan.c | 46 ++ security/apparmor/apparmorfs.c | 4 security/smack/smack_lsm.c | 2 sound/core/seq/seq_ports.h | 14 sound/core/seq/seq_ump_convert.c | 95 +++-- sound/core/ump_convert.c | 60 ++- sound/pci/hda/hda_generic.c | 63 +++ sound/pci/hda/hda_generic.h | 1 sound/pci/hda/patch_conexant.c | 2 sound/soc/amd/yc/acp6x-mach.c | 14 sound/soc/codecs/es8326.c | 2 tools/testing/selftests/net/mptcp/mptcp_join.sh | 160 +++++++++- tools/testing/selftests/net/mptcp/mptcp_lib.sh | 4 210 files changed, 2042 insertions(+), 693 deletions(-)
Abel Vesa (1):
arm64: dts: qcom: x1e80100: Describe the PCIe 6a resources
Abhishek Pandit-Subedi (1):
usb: typec: ucsi: Fix null pointer dereference in trace
Aleksandr Mishin (1):
PCI: al: Check IORESOURCE_BUS existence during probe
Alex Hung (12):
drm/amd/display: Ensure array index tg_inst won't be -1 drm/amd/display: Check gpio_id before used as array index drm/amd/display: Fix incorrect size calculation for loop drm/amd/display: Check index for aux_rd_interval before using drm/amd/display: Check num_valid_sets before accessing reader_wm_sets[] drm/amd/display: Check msg_id before processing transcation drm/amd/display: Check link_index before accessing dc->links[] drm/amd/display: Spinlock before reading event drm/amd/display: Ensure index calculation will not overflow drm/amd/display: Avoid overflow from uint32_t to uint8_t drm/amd/display: Check BIOS images before it is used drm/amd/display: Skip wbscl_set_scaler_filter if filter is null
Alvin Lee (1):
drm/amd/display: Assign linear_pitch_alignment even for VM
Amir Goldstein (1):
fsnotify: clear PARENT_WATCHED flags lazily
Andreas Gruenbacher (1):
gfs2: Revert "Add quota_change type"
Andy Shevchenko (1):
regmap: spi: Fix potential off-by-one when calculating reserved size
AngeloGioacchino Del Regno (1):
remoteproc: mediatek: Zero out only remaining bytes of IPI buffer
Asad Kamal (1):
drm/amd/amdgpu: Check tbo resource pointer
Ben Walsh (1):
platform/chrome: cros_ec_lpc: MEC access can use an AML mutex
Bob Zhou (1):
drm/amdgpu: fix overflowed constant warning in mmhub_set_clockgating()
Boris Burkov (1):
btrfs: fix qgroup reserve leaks in cow_file_range
Bruno Ancona (1):
ASoC: amd: yc: Support mic on HP 14-em0002la
Casey Schaufler (1):
smack: tcp: ipv4, fix incorrect labeling
Chao Yu (1):
f2fs: fix to do sanity check on blocks for inline_data inode
Chris Lew (1):
soc: qcom: smem: Add qcom_smem_bust_hwspin_lock_by_host()
Christoph Hellwig (1):
block: remove the blk_flush_integrity call in blk_integrity_unregister
David (Ming Qiang) Wu (1):
drm/amdgpu/vcn: remove irq disabling in vcn 5 suspend
David Howells (1):
mm: Fix filemap_invalidate_inode() to use invalidate_inode_pages2_range()
Devyn Liu (1):
spi: hisi-kunpeng: Add validation for the minimum value of speed_hz
Dragos Tatulea (1):
net/mlx5e: SHAMPO, Fix incorrect page release
Eric Dumazet (1):
tcp: annotate data-races around tw->tw_ts_recent and tw->tw_ts_recent_stamp
Francois Dugast (1):
drm/xe/gt: Fix assert in L3 bank mask generation
Frederic Weisbecker (1):
rcu/nocb: Remove buggy bypass lock contention mitigation
Greg Kroah-Hartman (1):
Linux 6.10.9
Haoran Liu (1):
drm/meson: plane: Add error handling
Heng Qi (1):
virtio-net: check feature before configuring the vq coalescing command
Hersen Wu (13):
drm/amd/display: Stop amdgpu_dm initialize when stream nums greater than 6 drm/amd/display: Stop amdgpu_dm initialize when link nums greater than max_links drm/amd/display: Add missing NULL pointer check within dpcd_extend_address_range drm/amd/display: Add array index check for hdcp ddc access
drm/amd/display: Release state memory if amdgpu_dm_create_color_properties fail drm/amd/display: Add otg_master NULL check within resource_log_pipe_topology_update drm/amd/display: Fix Coverity INTERGER_OVERFLOW within construct_integrated_info drm/amd/display: Fix Coverity INTEGER_OVERFLOW within dal_gpio_service_create drm/amd/display: Release clck_src memory if clk_src_construct fails drm/amd/display: Fix Coverity INTEGER_OVERFLOW within decide_fallback_link_setting_max_bw_policy drm/amd/display: Skip inactive planes within ModeSupportAndSystemConfiguration drm/amd/display: Fix writeback job lock evasion within dm_crtc_high_irq drm/amd/display: Fix index may exceed array range within fpu_update_bw_bounding_box
Himal Prasad Ghimiray (3):
drm/xe: Fix the warning conditions
drm/xe: Ensure caller uses sole domain for xe_force_wake_assert_held drm/xe: Check valid domain is passed in xe_force_wake_ref
Jagadeesh Kona (1):
cpufreq: scmi: Avoid overflow of target_freq in fast switch
Jason Xing (1):
net: remove NULL-pointer net parameter in ip_metrics_convert
Jeff Johnson (3):
wifi: ath12k: initialize 'ret' in ath12k_qmi_load_file_target_mem()
wifi: ath11k: initialize 'ret' in ath11k_qmi_load_file_target_mem()
wifi: ath12k: initialize 'ret' in ath12k_dp_rxdma_ring_sel_config_wcn7850()
Jesse Zhang (13):
drm/amd/pm: fix uninitialized variable warning
drm/amd/pm: fix warning using uninitialized value of max_vid_step drm/amd/pm: Fix negative array index read
drm/amd/pm: fix the Out-of-bounds read warning
drm/amdgpu: Fix the warning division or modulo by zero drm/amdgpu: fix dereference after null check
drm/amdgpu: fix the waring dereferencing hive
drm/amd/pm: check specific index for aldebaran
drm/amd/pm: check specific index for smu13
drm/amdgpu: the warning dereferencing obj for nbio_v7_4 drm/amdgpu: fix the warning bad bit shift operation for aca_error_type type drm/amd/pm: check negtive return for table entries
drm/amdgu: fix Unintentional integer overflow for mall size
Johan Hovold (4):
arm64: dts: qcom: x1e80100-crd: fix up PCIe6a pinctrl node
arm64: dts: qcom: x1e80100-crd: fix missing PCIe4 gpios
arm64: dts: qcom: x1e80100-qcp: fix up PCIe6a pinctrl node
arm64: dts: qcom: x1e80100-qcp: fix missing PCIe4 gpios
Johannes Berg (4):
wifi: cfg80211: restrict operation during radar detection
wifi: iwlwifi: mvm: use only beacon BSS load for active links
wifi: mac80211: check ieee80211_bss_info_change_notify() against MLD
wifi: cfg80211: make hash table duplicates more survivable
John Allen (1):
RAS/AMD/ATL: Validate address map when information is gathered
Joshua Aberback (1):
Revert "drm/amd/display: Fix incorrect pointer assignment"
Julien Stephan (1):
driver: iio: add missing checks on iio_info's callback access
Karthik Poosa (1):
drm/xe/hwmon: Remove unwanted write permission for currN_label
Ken Sloat (1):
pwm: xilinx: Fix u32 overflow issue in 32-bit width PWM mode.
Krzysztof Stępniak (1):
ASoC: amd: yc: Support mic on Lenovo Thinkpad E14 Gen 6
Kyoungrul Kim (1):
scsi: ufs: core: Check LSDBS cap when !mcq
Lad Prabhakar (1):
pinctrl: renesas: rzg2l: Validate power registers for SD and ETH
Leesoo Ahn (1):
apparmor: fix possible NULL pointer dereference
Lin.Cao (1):
drm/amdkfd: Check debug trap enable before write dbg_ev_file
Luke D. Jones (1):
platform/x86/amd: pmf: Add quirk for ROG Ally X
Léo DUBOIN (1):
pinctrl: core: reset gpio_device in loop in pinctrl_pins_show()
Ma Jun (10):
drm/amdgpu: Fix uninitialized variable warning in amdgpu_afmt_acr drm/amdgpu/pm: Check the return value of smum_send_msg_to_smc drm/amdgpu/pm: Fix uninitialized variable warning for smu10 drm/amdgpu/pm: Fix uninitialized variable agc_btc_response drm/amdgpu: Fix the uninitialized variable warning
drm/amdgpu: Fix out-of-bounds write warning
drm/amdgpu: Fix out-of-bounds read of df_v1_7_channel_number drm/amdgpu: Fix uninitialized variable warning in amdgpu_info_ioctl drm/amdgpu/pm: Check input value for CUSTOM profile mode setting on legacy SOCs drm/amdgpu/pm: Check input value for power profile setting on smu11, smu13 and smu14
Marek Vasut (1):
drm/bridge: tc358767: Check if fully initialized before signalling HPD event via IRQ
Matthew Brost (2):
drm/xe: Don't overmap identity VRAM mapping drm/xe: Add GuC state asserts to deregister_exec_queue
Matthieu Baerts (NGI0) (5):
selftests: mptcp: join: check re-using ID of unused ADD_ADDR
selftests: mptcp: join: check re-adding init endp with != id
selftests: mptcp: join: validate event numbers
selftests: mptcp: join: check re-re-adding ID 0 signal
selftests: mptcp: join: test for flush/re-add endpoints
Maxime Méré (1):
crypto: stm32/cryp - call finalize with bh disabled
Michael Chen (1):
drm/amdkfd: Reconcile the definition and use of oem_id in struct kfd_topology_device
Michael Margolin (1):
RDMA/efa: Properly handle unexpected AQ completions
Nicholas Kazlauskas (3):
drm/amd/display: Don't use fsleep for PSR exit waits on dmub replay drm/amd/display: Remove register from DCN35 DMCUB diagnostic collection drm/amd/display: Disable DMCUB timeout for DCN35
Nicholas Susanto (1):
drm/amd/display: Fix pipe addition logic in calc_blocks_to_ungate DCN35
Nirmoy Das (1):
drm/xe: Use missing lock in relay_needs_worker
Olivier Dautricourt (2):
dmaengine: altera-msgdma: use irq variant of spin_lock/unlock while invoking callbacks
dmaengine: altera-msgdma: properly free descriptor in msgdma_free_descriptor
Paolo Abeni (1):
selftests: mptcp: add explicit test case for remove/readd
Paulo Alcantara (1):
smb: client: fix FSCTL_GET_REPARSE_POINT against NetApp
Perry Yuan (1):
x86/CPU/AMD: Add models 0x60-0x6f to the Zen5 range
Peter Wang (1):
scsi: ufs: core: Bypass quick recovery if force reset is needed
Philip Mueller (1):
drm: panel-orientation-quirks: Add quirk for OrangePi Neo
Philip Yang (1):
drm/amdgpu: Handle sg size limit for contiguous allocation
Qiuxu Zhuo (1):
drm/fb-helper: Don't schedule_work() to flush frame buffer during panic()
Qu Wenruo (3):
btrfs: tree-checker: validate dref root and objectid
btrfs: factor out stripe length calculation into a helper
btrfs: scrub: update last_physical after scrubbing one stripe
Rafael J. Wysocki (1):
thermal: trip: Use READ_ONCE() for lockless access to trip properties
Ricardo Ribalda (1):
media: uvcvideo: Enforce alignment of frame and interval
Richard Fitzgerald (2):
i2c: Fix conditional for substituting empty ACPI functions
i2c: Use IS_REACHABLE() for substituting empty ACPI functions
Richard Maina (2):
hwspinlock: Introduce hwspin_lock_bust()
remoteproc: qcom_q6v5_pas: Add hwspinlock bust on stop
Rik van Riel (1):
dma-debug: avoid deadlock between dma debug vs printk and netconsole
Rodrigo Siqueira (1):
drm/amd/display: Handle the case which quad_part is equal 0
Rodrigo Vivi (1):
drm/xe: Demote CCS_MODE info to debug only
Sakari Ailus (1):
media: v4l2-cci: Always assign *val
Shahar S Matityahu (1):
wifi: iwlwifi: remove fw_running op
Shannon Nelson (1):
ionic: fix potential irq name truncation
Shyam Sundar S K (1):
platform/x86/amd/pmf: Add new ACPI ID AMDI0107
Simon Holesch (1):
usbip: Don't submit special requests twice
Stefan Berger (1):
crypto: ecc - Fix off-by-one missing to clear most significant digit
Sui Jingfeng (1):
drm/drm-bridge: Drop conditionals around of_node pointers
Takashi Iwai (7):
ALSA: hda/generic: Add a helper to mute speakers at suspend/shutdown
ALSA: hda/conexant: Mute speakers at suspend / shutdown
ALSA: ump: Transmit RPN/NRPN message at each MSB/LSB data reception
ALSA: ump: Explicitly reset RPN with Null RPN
ALSA: seq: ump: Use the common RPN/bank conversion context
ALSA: seq: ump: Transmit RPN/NRPN message at each MSB/LSB data reception
ALSA: seq: ump: Explicitly reset RPN with Null RPN
Tao Zhou (3):
drm/amdgpu: update type of buf size to u32 for eeprom functions drm/amdgpu: set RAS fed status for more cases drm/amdkfd: use mode1 reset for RAS poison consumption
Tim Huang (10):
drm/amdgpu: fix overflowed array index read warning drm/amd/pm: fix uninitialized variable warning for smu8_hwmgr drm/amd/pm: fix uninitialized variable warning for smu_v13 drm/amdgpu: fix uninitialized scalar variable warning drm/amd/pm: fix uninitialized variable warnings for vega10_hwmgr drm/amd/pm: fix uninitialized variable warnings for vangogh_ppt drm/amdgpu: fix uninitialized variable warning for amdgpu_xgmi drm/amdgpu: fix uninitialized variable warning for jpeg_v4 drm/amdgpu: fix ucode out-of-bounds read warning drm/amdgpu: fix mc_data out-of-bounds read warning
Valentin Schneider (1):
net: tcp/dccp: prepare for tw_timer un-pinning
Victor Skvortsov (1):
drm/amdgpu: Queue KFD reset workitem in VF FED
Wayne Lin (1):
drm/amd/display: Correct the defined value for AMDGPU_DMUB_NOTIFICATION_MAX
Wenjing Liu (1):
drm/amd/display: use preferred link settings for dp signal only
Xiaogang Chen (1):
drm/kfd: Correct pinned buffer handling at kfd restore and validate process
Yang Wang (2):
drm/amdgpu: fix compiler 'side-effect' check issue for RAS_EVENT_LOG() drm/amdgpu: remove redundant semicolons in RAS_EVENT_LOG
Yazen Ghannam (1):
hwmon: (k10temp) Check return value of amd_smn_read()
Yevgeny Kliteynik (1):
net/mlx5: DR, Fix 'stack guard page was hit' error in dr_rule
Yunxiang Li (3):
drm/amdgpu: add skip_hw_access checks for sriov drm/amdgpu: add lock in amdgpu_gart_invalidate_tlb drm/amdgpu: add lock in kfd_process_dequeue_from_device
ZHANG Yuntian (1):
net: usb: qmi_wwan: add MeiG Smart SRM825L
Zhang Yi (1):
ASoC: codecs: ES8326: button detect issue
Zhigang Luo (1):
drm/amdgpu: avoid reading vf2pf info size from FB
Zong-Zhe Yang (1):
wifi: rtw89: ser: avoid multiple deinit on same CAM
winstang (1):
drm/amd/display: added NULL check at start of dc_validate_stream
Greg Kroah-Hartman
maintainerDocumentation/locking/hwspinlock.rst +11 -0
@@ -85,6 +85,17 @@ is already free). Should be called from a process context (might sleep). +:: + + int hwspin_lock_bust(struct hwspinlock *hwlock, unsigned int id); + +After verifying the owner of the hwspinlock, release a previously acquired +hwspinlock; returns 0 on success, or an appropriate error code on failure +(e.g. -EOPNOTSUPP if the bust operation is not defined for the specific +hwspinlock). + +Should be called from a process context (might sleep). + :: int hwspin_lock_timeout(struct hwspinlock *hwlock, unsigned int timeout);
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 10 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/boot/dts/qcom/x1e80100-crd.dts +81 -0
105 lines not on this page · raw message
arch/arm64/boot/dts/qcom/x1e80100-qcp.dts +81 -0
105 lines not on this page · raw message
arch/x86/kernel/cpu/amd.c +1 -1
@@ -462,7 +462,7 @@ static void bsp_init_amd(struct cpuinfo_x86 *c)switch (c->x86_model) { case 0x00 ... 0x2f: case 0x40 ... 0x4f: - case 0x70 ... 0x7f: + case 0x60 ... 0x7f:setup_force_cpu_cap (X86_FEATURE_ZEN5 );break ;default :
block/blk-integrity.c +0 -2
@@ -397,8 +397,6 @@ void blk_integrity_unregister(struct gendisk *disk)if (!bi->profile)return ; -/* ensure all bios are off the integrity workqueue */ -blk_flush_integrity ();blk_queue_flag_clear (QUEUE_FLAG_STABLE_WRITES , disk->queue);memset (bi,0 ,sizeof (*bi)); }
crypto/ecc.c +1 -1
@@ -78,7 +78,7 @@ void ecc_digits_from_bytes(const u8 *in, unsigned int nbytes,/* diff > 0: not enough input bytes: set most significant digits to 0 */ if (diff >0 ) { ndigits -= diff; -memset (&out[ndigits -1 ],0 , diff *sizeof (u64)); +memset (&out[ndigits],0 , diff *sizeof (u64)); }if (o) {
drivers/base/regmap/regmap-spi.c +1 -2
@@ -122,8 +122,7 @@ static const struct regmap_bus *regmap_get_spi_bus(struct spi_device *spi,return ERR_PTR (-ENOMEM ); max_msg_size =spi_max_message_size (spi); - reg_reserve_size = config->reg_bits /BITS_PER_BYTE - + config->pad_bits /BITS_PER_BYTE ; + reg_reserve_size = (config->reg_bits + config->pad_bits) /BITS_PER_BYTE ;if (max_size + reg_reserve_size > max_msg_size) max_size -= reg_reserve_size;
drivers/cpufreq/scmi-cpufreq.c +2 -2
@@ -63,9 +63,9 @@ static unsigned int scmi_cpufreq_fast_switch(struct cpufreq_policy *policy, unsigned int target_freq) {struct scmi_data *priv = policy->driver_data; +unsigned long freq = target_freq; -if (!perf_ops->freq_set (ph, priv->domain_id, - target_freq *1000 , true)) +if (!perf_ops->freq_set (ph, priv->domain_id, freq *1000 , true))return target_freq;return 0 ;
drivers/crypto/stm32/stm32-cryp.c +5 -1
@@ -11,6 +11,7 @@#include <crypto/internal/des.h> #include <crypto/internal/skcipher.h> #include <crypto/scatterwalk.h> +#include <linux/bottom_half.h> #include <linux/clk.h> #include <linux/delay.h> #include <linux/err.h>
@@ -1665,8 +1666,11 @@ static irqreturn_t stm32_cryp_irq_thread(int irq, void *arg) it_mask &= ~IMSCR_OUT ;stm32_cryp_write (cryp, cryp->caps->imsc, it_mask); -if (!cryp->payload_in && !cryp->header_in && !cryp->payload_out) +if (!cryp->payload_in && !cryp->header_in && !cryp->payload_out) { +local_bh_disable ();stm32_cryp_finish_req (cryp,0 ); +local_bh_enable (); + }return IRQ_HANDLED ; }
drivers/dma/altera-msgdma.c +4 -5
@@ -233,7 +233,7 @@ static void msgdma_free_descriptor(struct msgdma_device *mdev,struct msgdma_sw_desc *child, *next; mdev->desc_free_cnt++; -list_add_tail (&desc->node, &mdev->free_list); +list_move_tail (&desc->node, &mdev->free_list);list_for_each_entry_safe (child, next, &desc->tx_list, node) { mdev->desc_free_cnt++;list_move_tail (&child->node, &mdev->free_list);
@@ -583,17 +583,16 @@ static void msgdma_issue_pending(struct dma_chan *chan)static void msgdma_chan_desc_cleanup (struct msgdma_device *mdev) {struct msgdma_sw_desc *desc, *next; +unsigned long irqflags;list_for_each_entry_safe (desc, next, &mdev->done_list, node) {struct dmaengine_desc_callback cb; -list_del (&desc->node); -dmaengine_desc_get_callback (&desc->async_tx, &cb);if (dmaengine_desc_callback_valid (&cb)) { -spin_unlock (&mdev->lock); +spin_unlock_irqrestore (&mdev->lock, irqflags);dmaengine_desc_callback_invoke (&cb,NULL ); -spin_lock (&mdev->lock); +spin_lock_irqsave (&mdev->lock, irqflags); }/* Run any dependencies, then free the descriptor */
drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c +1 -1
@@ -534,7 +534,7 @@ int amdgpu_aca_get_error_data(struct amdgpu_device *adev, struct aca_handle *hanif (aca_handle_is_valid (handle))return -EOPNOTSUPP ; -if (!(BIT (type) & handle->mask)) +if ((type <0 ) || (!(BIT (type) & handle->mask)))return 0 ;return __aca_get_error_data (adev, handle, type, err_data, qctx);
drivers/gpu/drm/amd/amdgpu/amdgpu_afmt.c +1 -0
@@ -100,6 +100,7 @@ struct amdgpu_afmt_acr amdgpu_afmt_acr(uint32_t clock)amdgpu_afmt_calc_cts (clock, &res.cts_32khz, &res.n_32khz,32000 );amdgpu_afmt_calc_cts (clock, &res.cts_44_1khz, &res.n_44_1khz,44100 );amdgpu_afmt_calc_cts (clock, &res.cts_48khz, &res.n_48khz,48000 ); + res.clock = clock;return res; }
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +5 -4
@@ -415,6 +415,10 @@ static int amdgpu_amdkfd_bo_validate(struct amdgpu_bo *bo, uint32_t domain, "Called with userptr BO"))return -EINVAL ; +/* bo has been pinned, not need validate it */ +if (bo->tbo.pin_count) +return 0 ; +amdgpu_bo_placement_from_domain (bo, domain); ret =ttm_bo_validate (&bo->tbo, &bo->placement, &ctx);
@@ -2712,7 +2716,7 @@ static int confirm_valid_user_pages_locked(struct amdkfd_process_info *process_i/* keep mem without hmm range at userptr_inval_list */ if (!mem->range) -continue ; +continue ;/* Only check mem with hmm range associated */ valid = amdgpu_ttm_tt_get_user_pages_done(
@@ -2957,9 +2961,6 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence __rcu *if (!attachment->is_mapped)continue ; -if (attachment->bo_va->base.bo->tbo.pin_count) -continue ; -kfd_mem_dmaunmap_attachment (mem, attachment); ret =update_gpuvm_pte (mem, attachment, &sync_obj);if (ret) {
drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c +2 -0
@@ -1484,6 +1484,8 @@ int amdgpu_atombios_init_mc_reg_table(struct amdgpu_device *adev, (u32 )le32_to_cpu (*((u32 *)reg_data + j)); j++; }else if ((reg_table->mc_reg_address[i].pre_reg_data &LOW_NIBBLE_MASK ) ==DATA_EQU_PREV ) { +if (i ==0 ) +continue ; reg_table->mc_reg_table_entry[num_ranges].mc_data[i] = reg_table->mc_reg_table_entry[num_ranges].mc_data[i -1 ]; }
drivers/gpu/drm/amd/amdgpu/amdgpu_cgs.c +3 -0
@@ -213,6 +213,9 @@ static int amdgpu_cgs_get_firmware_info(struct cgs_device *cgs_device,struct amdgpu_firmware_info *ucode; id =fw_type_convert (cgs_device, type); +if (id >=AMDGPU_UCODE_ID_MAXIMUM ) +return -EINVAL ; + ucode = &adev->firmware.ucode[id];if (ucode->fw ==NULL )return -EINVAL ;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +3 -2
@@ -5012,7 +5012,8 @@ static int amdgpu_device_recover_vram(struct amdgpu_device *adev) shadow = vmbo->shadow;/* No need to recover an evicted BO */ -if (shadow->tbo.resource->mem_type !=TTM_PL_TT || +if (!shadow->tbo.resource || + shadow->tbo.resource->mem_type !=TTM_PL_TT || shadow->tbo.resource->start ==AMDGPU_BO_INVALID_OFFSET || shadow->parent->tbo.resource->mem_type !=TTM_PL_VRAM )continue ;
@@ -5726,7 +5727,7 @@ int amdgpu_device_gpu_recover(struct amdgpu_device *adev,* to put adev in the 1st position. */ INIT_LIST_HEAD (&device_list); -if (!amdgpu_sriov_vf (adev) && (adev->gmc.xgmi.num_physical_nodes >1 )) { +if (!amdgpu_sriov_vf (adev) && (adev->gmc.xgmi.num_physical_nodes >1 ) && hive) {list_for_each_entry (tmp_adev, &hive->device_list, gmc.xgmi.head) {list_add_tail (&tmp_adev->reset_list, &device_list);if (adev->shutdown)
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +1 -1
@@ -1597,7 +1597,7 @@ static int amdgpu_discovery_get_mall_info(struct amdgpu_device *adev)break ;case 2 : mall_size_per_umc =le32_to_cpu (mall_info->v2.mall_size_per_umc); - adev->gmc.mall_size = mall_size_per_umc * adev->gmc.num_umc; + adev->gmc.mall_size = (uint64_t )mall_size_per_umc * adev->gmc.num_umc;break ;default : dev_err(adev->dev,
drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.c +3 -3
@@ -179,7 +179,7 @@ static int __amdgpu_eeprom_xfer(struct i2c_adapter *i2c_adap, u32 eeprom_addr,* Returns the number of bytes read/written; -errno on error. */ static int amdgpu_eeprom_xfer (struct i2c_adapter *i2c_adap,u32 eeprom_addr, -u8 *eeprom_buf,u16 buf_size,bool read) +u8 *eeprom_buf,u32 buf_size,bool read) {const struct i2c_adapter_quirks *quirks = i2c_adap->quirks;u16 limit;
@@ -225,7 +225,7 @@ static int amdgpu_eeprom_xfer(struct i2c_adapter *i2c_adap, u32 eeprom_addr,int amdgpu_eeprom_read (struct i2c_adapter *i2c_adap,u32 eeprom_addr,u8 *eeprom_buf, -u16 bytes) +u32 bytes) {return amdgpu_eeprom_xfer (i2c_adap, eeprom_addr, eeprom_buf, bytes, true);
@@ -233,7 +233,7 @@ int amdgpu_eeprom_read(struct i2c_adapter *i2c_adap,int amdgpu_eeprom_write (struct i2c_adapter *i2c_adap,u32 eeprom_addr,u8 *eeprom_buf, -u16 bytes) +u32 bytes) {return amdgpu_eeprom_xfer (i2c_adap, eeprom_addr, eeprom_buf, bytes, false);
drivers/gpu/drm/amd/amdgpu/amdgpu_eeprom.h +2 -2
@@ -28,10 +28,10 @@int amdgpu_eeprom_read (struct i2c_adapter *i2c_adap,u32 eeprom_addr,u8 *eeprom_buf, -u16 bytes); +u32 bytes);int amdgpu_eeprom_write (struct i2c_adapter *i2c_adap,u32 eeprom_addr,u8 *eeprom_buf, -u16 bytes); +u32 bytes);#endif
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +5 -1
@@ -34,6 +34,7 @@#include <asm/set_memory.h> #endif #include "amdgpu.h" +#include "amdgpu_reset.h" #include <drm/drm_drv.h> #include <drm/ttm/ttm_tt.h>
@@ -408,7 +409,10 @@ void amdgpu_gart_invalidate_tlb(struct amdgpu_device *adev)return ;mb (); -amdgpu_device_flush_hdp (adev,NULL ); +if (down_read_trylock (&adev->reset_domain->sem)) { +amdgpu_device_flush_hdp (adev,NULL ); +up_read (&adev->reset_domain->sem); + }for_each_set_bit (i, adev->vmhubs_mask,AMDGPU_MAX_VMHUBS )amdgpu_gmc_flush_gpu_tlb (adev,0 , i,0 ); }
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +9 -2
@@ -623,25 +623,32 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)switch (type) {case AMD_IP_BLOCK_TYPE_GFX : ret =amdgpu_xcp_get_inst_details (xcp,AMDGPU_XCP_GFX , &inst_mask); +if (ret) +return ret; count =hweight32 (inst_mask);break ;case AMD_IP_BLOCK_TYPE_SDMA : ret =amdgpu_xcp_get_inst_details (xcp,AMDGPU_XCP_SDMA , &inst_mask); +if (ret) +return ret; count =hweight32 (inst_mask);break ;case AMD_IP_BLOCK_TYPE_JPEG : ret =amdgpu_xcp_get_inst_details (xcp,AMDGPU_XCP_VCN , &inst_mask); +if (ret) +return ret; count =hweight32 (inst_mask) * adev->jpeg.num_jpeg_rings;break ;case AMD_IP_BLOCK_TYPE_VCN : ret =amdgpu_xcp_get_inst_details (xcp,AMDGPU_XCP_VCN , &inst_mask); +if (ret) +return ret; count =hweight32 (inst_mask);break ;default :return -EINVAL ; } -if (ret) -return ret; +return copy_to_user (out, &count,min (size,4u )) ? -EFAULT :0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.c +3 -0
@@ -1375,6 +1375,9 @@ static void psp_xgmi_reflect_topology_info(struct psp_context *psp,uint8_t dst_num_links = node_info.num_links; hive =amdgpu_get_xgmi_hive (psp->adev); +if (WARN_ON (!hive)) +return ; +list_for_each_entry (mirror_adev, &hive->device_list, gmc.xgmi.head) {struct psp_xgmi_topology_info *mirror_top_info;int j;
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c +19 -0
@@ -2112,6 +2112,7 @@ static void amdgpu_ras_interrupt_umc_handler(struct ras_manager *obj,/* Let IP handle its data, maybe we need get the output * from the callback to update the error type/count, etc */ +amdgpu_ras_set_fed (obj->adev, true); ret = data->cb (obj->adev, &err_data, entry);/* ue will trigger an interrupt, and in that case * we need do a reset to recovery the whole system.
@@ -4504,3 +4505,21 @@ int amdgpu_ras_reserve_page(struct amdgpu_device *adev, uint64_t pfn)return ret; } + +void amdgpu_ras_event_log_print (struct amdgpu_device *adev,u64 event_id, +const char *fmt, ...) +{ +struct va_format vaf; +va_list args; + +va_start (args, fmt); + vaf.fmt = fmt; + vaf.va = &args; + +if (amdgpu_ras_event_id_is_valid (adev, event_id)) +dev_printk (KERN_INFO , adev->dev,"{%llu}%pV" , event_id, &vaf); +else +dev_printk (KERN_INFO , adev->dev,"%pV" , &vaf); + +va_end (args); +}
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.h +6 -7
@@ -67,13 +67,8 @@ struct amdgpu_iv_entry;/* The high three bits indicates socketid */ #define AMDGPU_RAS_GET_FEATURES (val) ((val) & ~AMDGPU_RAS_FEATURES_SOCKETID_MASK) -#define RAS_EVENT_LOG (_adev, _id, _fmt, ...) \ -do { \ - if (amdgpu_ras_event_id_is_valid((_adev), (_id))) \ - dev_info((_adev)->dev, "{%llu}" _fmt, (_id), ##__VA_ARGS__); \ - else \ - dev_info((_adev)->dev, _fmt, ##__VA_ARGS__); \ -} while (0) +#define RAS_EVENT_LOG (adev, id, fmt, ...) \ + amdgpu_ras_event_log_print((adev), (id), (fmt), ##__VA_ARGS__)enum amdgpu_ras_block {AMDGPU_RAS_BLOCK__UMC =0 ,
@@ -956,4 +951,8 @@ int amdgpu_ras_put_poison_req(struct amdgpu_device *adev, enum amdgpu_ras_block block, uint16_t pasid, pasid_notify pasid_fn, void *data, uint32_t reset); +__printf(3, 4) +void amdgpu_ras_event_log_print (struct amdgpu_device *adev,u64 event_id, +const char *fmt, ...); +#endif
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +3 -2
@@ -354,7 +354,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring, ring->max_dw = max_dw; ring->hw_prio = hw_prio; -if (!ring->no_scheduler) { +if (!ring->no_scheduler && ring->funcs->type <AMDGPU_HW_IP_NUM ) { hw_ip = ring->funcs->type; num_sched = &adev->gpu_sched[hw_ip][hw_prio].num_scheds; adev->gpu_sched[hw_ip][hw_prio].sched[(*num_sched)++] =
@@ -475,8 +475,9 @@ static ssize_t amdgpu_debugfs_ring_read(struct file *f, char __user *buf, size_t size, loff_t *pos) { struct amdgpu_ring *ring = file_inode(f)->i_private; -int r, i;uint32_t value, result, early[3 ]; +loff_t i; +int r;if (*pos &3 || size &3 )return -EINVAL ;
drivers/gpu/drm/amd/amdgpu/amdgpu_securedisplay.c +4 -0
@@ -135,6 +135,10 @@ static ssize_t amdgpu_securedisplay_debugfs_write(struct file *f, const char __umutex_unlock (&psp->securedisplay_context.mutex);break ;case 2 : +if (size <3 || phy_id >=TA_SECUREDISPLAY_MAX_PHY ) { +dev_err (adev->dev,"Invalid input: %s\n" , str); +return -EINVAL ; + }mutex_lock (&psp->securedisplay_context.mutex);psp_prep_securedisplay_cmd_buf (psp, &securedisplay_cmd,TA_SECUREDISPLAY_COMMAND__SEND_ROI_CRC );
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c +13 -2
@@ -395,6 +395,8 @@ static void amdgpu_virt_add_bad_page(struct amdgpu_device *adev,else vram_usage_va = adev->mman.drv_vram_usage_va; +memset (&bp,0 ,sizeof (bp)); +if (bp_block_size) { bp_cnt = bp_block_size /sizeof (uint64_t );for (bp_idx =0 ; bp_idx < bp_cnt; bp_idx++) {
@@ -583,7 +585,7 @@ static int amdgpu_virt_write_vf2pf_data(struct amdgpu_device *adev) } vf2pf_info->checksum =amd_sriov_msg_checksum ( - vf2pf_info, vf2pf_info->header.size,0 ,0 ); + vf2pf_info,sizeof (*vf2pf_info),0 ,0 );return 0 ; }
@@ -600,7 +602,7 @@ static void amdgpu_virt_update_vf2pf_work_item(struct work_struct *work) amdgpu_sriov_runtime(adev) && !amdgpu_in_reset(adev)) {amdgpu_ras_set_fed (adev, true);if (amdgpu_reset_domain_schedule (adev->reset_domain, - &adev->virt.flr_work)) + &adev->kfd.reset_work))return ;else dev_err (adev->dev,"Failed to queue work! at %s" , __func__);
@@ -975,6 +977,9 @@ u32 amdgpu_virt_rlcg_reg_rw(struct amdgpu_device *adev, u32 offset, u32 v, u32 freturn 0 ; } +if (amdgpu_device_skip_hw_access (adev)) +return 0 ; + reg_access_ctrl = &adev->gfx.rlc.reg_access_ctrl[xcc_id]; scratch_reg0 = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->scratch_reg0; scratch_reg1 = (void __iomem *)adev->rmmio +4 * reg_access_ctrl->scratch_reg1;
@@ -1051,6 +1056,9 @@ void amdgpu_sriov_wreg(struct amdgpu_device *adev, {u32 rlcg_flag; +if (amdgpu_device_skip_hw_access (adev)) +return ; +if (!amdgpu_sriov_runtime (adev) &&amdgpu_virt_get_rlcg_reg_access_flag (adev, acc_flags, hwip, true, &rlcg_flag)) {amdgpu_virt_rlcg_reg_rw (adev, offset, value, rlcg_flag, xcc_id);
@@ -1068,6 +1076,9 @@ u32 amdgpu_sriov_rreg(struct amdgpu_device *adev, {u32 rlcg_flag; +if (amdgpu_device_skip_hw_access (adev)) +return 0 ; +if (!amdgpu_sriov_runtime (adev) &&amdgpu_virt_get_rlcg_reg_access_flag (adev, acc_flags, hwip, false, &rlcg_flag))return amdgpu_virt_rlcg_reg_rw (adev, offset,0 , rlcg_flag, xcc_id);
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c +6 -6
@@ -31,6 +31,8 @@#include "amdgpu_atomfirmware.h" #include "atom.h" +#define AMDGPU_MAX_SG_SEGMENT_SIZE (2UL << 30) +struct amdgpu_vram_reservation {u64 start;u64 size;
@@ -518,9 +520,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,else min_block_size = mgr->default_page_size; -/* Limit maximum size to 2GiB due to SG table limitations */ - size =min (remaining_size,2ULL <<30 ); - + size = remaining_size;if ((size >= (u64 )pages_per_block <<PAGE_SHIFT ) && !(size & (((u64 )pages_per_block <<PAGE_SHIFT ) -1 ))) min_block_size = (u64 )pages_per_block <<PAGE_SHIFT ;
@@ -660,7 +660,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,amdgpu_res_first (res, offset, length, &cursor);while (cursor.remaining) { num_entries++; -amdgpu_res_next (&cursor, cursor.size); +amdgpu_res_next (&cursor,min (cursor.size,AMDGPU_MAX_SG_SEGMENT_SIZE )); } r =sg_alloc_table (*sgt, num_entries,GFP_KERNEL );
@@ -680,7 +680,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,amdgpu_res_first (res, offset, length, &cursor);for_each_sgtable_sg ((*sgt), sg, i) {phys_addr_t phys = cursor.start + adev->gmc.aper_base; -size_t size = cursor.size; +unsigned long size =min (cursor.size,AMDGPU_MAX_SG_SEGMENT_SIZE );dma_addr_t addr; addr = dma_map_resource(dev, phys, size, dir,
@@ -693,7 +693,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,sg_dma_address (sg) = addr;sg_dma_len (sg) = size; -amdgpu_res_next (&cursor, cursor.size); +amdgpu_res_next (&cursor, size); }return 0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c +3 -0
@@ -434,6 +434,9 @@ static ssize_t amdgpu_xgmi_show_connected_port_num(struct device *dev, } } +if (i == top->num_nodes) +return -EINVAL ; +for (i =0 ; i < top->num_nodes; i++) {for (j =0 ; j < top->nodes[i].num_links; j++)/* node id in sysfs starts from 1 rather than 0 so +1 here */
drivers/gpu/drm/amd/amdgpu/aqua_vanjaram.c +6 -0
@@ -501,6 +501,12 @@ static int aqua_vanjaram_switch_partition_mode(struct amdgpu_xcp_mgr *xcp_mgr,if (mode ==AMDGPU_AUTO_COMPUTE_PARTITION_MODE ) { mode =__aqua_vanjaram_get_auto_mode (xcp_mgr); +if (mode ==AMDGPU_UNKNOWN_COMPUTE_PARTITION_MODE ) { +dev_err (adev->dev, +"Invalid config, no compatible compute partition mode found, available memory partitions: %d" , + adev->gmc.num_mem_partitions); +return -EINVAL ; + } }else if (!__aqua_vanjaram_is_valid_mode (xcp_mgr, mode)) { dev_err(adev->dev, "Invalid compute partition mode requested, requested: %s, available memory partitions: %d",
drivers/gpu/drm/amd/amdgpu/df_v1_7.c +2 -0
@@ -70,6 +70,8 @@ static u32 df_v1_7_get_hbm_channel_number(struct amdgpu_device *adev)int fb_channel_number; fb_channel_number = adev->df.funcs->get_fb_channel_number (adev); +if (fb_channel_number >=ARRAY_SIZE (df_v1_7_channel_number)) + fb_channel_number =0 ;return df_v1_7_channel_number[fb_channel_number]; }
drivers/gpu/drm/amd/amdgpu/jpeg_v4_0_5.c +1 -1
@@ -187,7 +187,7 @@ static int jpeg_v4_0_5_hw_init(void *handle) {struct amdgpu_device *adev = (struct amdgpu_device *)handle;struct amdgpu_ring *ring; -int r, i; +int i, r =0 ;// TODO: Enable ring test with DPG support if (adev->pg_flags &AMD_PG_SUPPORT_JPEG_DPG ) {
drivers/gpu/drm/amd/amdgpu/mmhub_v1_7.c +1 -1
@@ -544,7 +544,7 @@ static int mmhub_v1_7_set_clockgating(struct amdgpu_device *adev,static void mmhub_v1_7_get_clockgating (struct amdgpu_device *adev,u64 *flags) { -int data, data1; +u32 data, data1;if (amdgpu_sriov_vf (adev)) *flags =0 ;
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c +1 -1
@@ -671,7 +671,7 @@ static int mmhub_v2_0_set_clockgating(struct amdgpu_device *adev,static void mmhub_v2_0_get_clockgating (struct amdgpu_device *adev,u64 *flags) { -int data, data1; +u32 data, data1;if (amdgpu_sriov_vf (adev)) *flags =0 ;
drivers/gpu/drm/amd/amdgpu/mmhub_v3_3.c +1 -1
@@ -560,7 +560,7 @@ static int mmhub_v3_3_set_clockgating(struct amdgpu_device *adev,static void mmhub_v3_3_get_clockgating (struct amdgpu_device *adev,u64 *flags) { -int data; +u32 data;if (amdgpu_sriov_vf (adev)) *flags =0 ;
drivers/gpu/drm/amd/amdgpu/mmhub_v9_4.c +1 -1
@@ -657,7 +657,7 @@ static int mmhub_v9_4_set_clockgating(struct amdgpu_device *adev,static void mmhub_v9_4_get_clockgating (struct amdgpu_device *adev,u64 *flags) { -int data, data1; +u32 data, data1;if (amdgpu_sriov_vf (adev)) *flags =0 ;
drivers/gpu/drm/amd/amdgpu/nbio_v7_4.c +2 -1
@@ -387,7 +387,7 @@ static void nbio_v7_4_handle_ras_controller_intr_no_bifring(struct amdgpu_deviceelse WREG32_SOC15 (NBIO ,0 , mmBIF_DOORBELL_INT_CNTL, bif_doorbell_intr_cntl); -if (!ras->disable_ras_err_cnt_harvest) { +if (ras && !ras->disable_ras_err_cnt_harvest && obj) {/* * clear error status after ras_controller_intr * according to hw team and count ue number
@@ -418,6 +418,7 @@ static void nbio_v7_4_handle_ras_controller_intr_no_bifring(struct amdgpu_device/* ras_controller_int is dedicated for nbif ras error, * not the global interrupt for sync flood */ +amdgpu_ras_set_fed (adev, true);amdgpu_ras_reset_gpu (adev); }
drivers/gpu/drm/amd/amdgpu/vcn_v5_0_0.c +0 -19
@@ -229,8 +229,6 @@ static int vcn_v5_0_0_hw_fini(void *handle)for (i =0 ; i < adev->vcn.num_vcn_inst; ++i) {if (adev->vcn.harvest_config & (1 << i))continue ; - -amdgpu_irq_put (adev, &adev->vcn.inst[i].irq,0 ); }return 0 ;
@@ -1232,22 +1230,6 @@ static int vcn_v5_0_0_set_powergating_state(void *handle, enum amd_powergating_sreturn ret; } -/** -* vcn_v5_0_0_set_interrupt_state - set VCN block interrupt state -* -* @adev: amdgpu_device pointer -* @source: interrupt sources -* @type: interrupt types -* @state: interrupt states -* -* Set VCN block interrupt state -*/ -static int vcn_v5_0_0_set_interrupt_state (struct amdgpu_device *adev,struct amdgpu_irq_src *source, -unsigned type,enum amdgpu_interrupt_state state) -{ -return 0 ; -} -/** * vcn_v5_0_0_process_interrupt - process VCN block interrupt *
@@ -1293,7 +1275,6 @@ static int vcn_v5_0_0_process_interrupt(struct amdgpu_device *adev, struct amdgp }static const struct amdgpu_irq_src_funcs vcn_v5_0_0_irq_funcs = { - .set = vcn_v5_0_0_set_interrupt_state, .process = vcn_v5_0_0_process_interrupt, };
drivers/gpu/drm/amd/amdkfd/kfd_crat.h +0 -2
@@ -42,8 +42,6 @@#define CRAT_OEMTABLEID_LENGTH 8#define CRAT_RESERVED_LENGTH 6 -#define CRAT_OEMID_64BIT_MASK ((1ULL << (CRAT_OEMID_LENGTH * 8)) - 1) -/* Compute Unit flags */ #define COMPUTE_UNIT_CPU (1 << 0)/* Create Virtual CRAT for CPU */ #define COMPUTE_UNIT_GPU (1 << 1)/* Create Virtual CRAT for GPU */
drivers/gpu/drm/amd/amdkfd/kfd_debug.c +3 -1
@@ -103,7 +103,8 @@ void debug_event_write_work_handler(struct work_struct *work) struct kfd_process, debug_event_workarea); -kernel_write (process->dbg_ev_file, &write_data,1 , &pos); +if (process->debug_trap_enabled && process->dbg_ev_file) +kernel_write (process->dbg_ev_file, &write_data,1 , &pos); }/* update process/device/queue exception status, write to descriptor
@@ -645,6 +646,7 @@ int kfd_dbg_trap_disable(struct kfd_process *target)else if (target->runtime_info.runtime_state !=DEBUG_RUNTIME_STATE_DISABLED ) target->runtime_info.runtime_state =DEBUG_RUNTIME_STATE_ENABLED ; +cancel_work_sync (&target->debug_event_workarea);fput (target->dbg_ev_file); target->dbg_ev_file =NULL ;
drivers/gpu/drm/amd/amdkfd/kfd_int_process_v9.c +2 -2
@@ -164,7 +164,7 @@ static void event_interrupt_poison_consumption_v9(struct kfd_node *dev,case SOC15_IH_CLIENTID_SE3SH :case SOC15_IH_CLIENTID_UTCL2 : block =AMDGPU_RAS_BLOCK__GFX ; - reset =AMDGPU_RAS_GPU_RESET_MODE2_RESET ; + reset =AMDGPU_RAS_GPU_RESET_MODE1_RESET ;break ;case SOC15_IH_CLIENTID_VMC :case SOC15_IH_CLIENTID_VMC1 :
@@ -177,7 +177,7 @@ static void event_interrupt_poison_consumption_v9(struct kfd_node *dev,case SOC15_IH_CLIENTID_SDMA3 :case SOC15_IH_CLIENTID_SDMA4 : block =AMDGPU_RAS_BLOCK__SDMA ; - reset =AMDGPU_RAS_GPU_RESET_MODE2_RESET ; + reset =AMDGPU_RAS_GPU_RESET_MODE1_RESET ;break ;default : dev_warn(dev->adev->dev,
drivers/gpu/drm/amd/amdkfd/kfd_process_queue_manager.c +7 -2
@@ -28,6 +28,7 @@#include "kfd_priv.h" #include "kfd_kernel_queue.h" #include "amdgpu_amdkfd.h" +#include "amdgpu_reset.h" static inline struct process_queue_node *get_queue_by_qid (struct process_queue_manager *pqm,unsigned int qid)
@@ -87,8 +88,12 @@ void kfd_process_dequeue_from_device(struct kfd_process_device *pdd)return ; dev->dqm->ops.process_termination (dev->dqm, &pdd->qpd); -if (dev->kfd->shared_resources.enable_mes) -amdgpu_mes_flush_shader_debugger (dev->adev, pdd->proc_ctx_gpu_addr); +if (dev->kfd->shared_resources.enable_mes && +down_read_trylock (&dev->adev->reset_domain->sem)) { +amdgpu_mes_flush_shader_debugger (dev->adev, + pdd->proc_ctx_gpu_addr); +up_read (&dev->adev->reset_domain->sem); + } pdd->already_dequeued = true; }
drivers/gpu/drm/amd/amdkfd/kfd_topology.c +1 -2
@@ -958,8 +958,7 @@ static void kfd_update_system_properties(void) dev =list_last_entry (&topology_device_list, struct kfd_topology_device, list);if (dev) { - sys_props.platform_id = - (*((uint64_t *)dev->oem_id)) &CRAT_OEMID_64BIT_MASK ; + sys_props.platform_id = dev->oem_id64; sys_props.platform_oem = *((uint64_t *)dev->oem_table_id); sys_props.platform_rev = dev->oem_revision; }
drivers/gpu/drm/amd/amdkfd/kfd_topology.h +4 -1
@@ -154,7 +154,10 @@ struct kfd_topology_device {struct attribute attr_gpuid;struct attribute attr_name;struct attribute attr_props; -uint8_t oem_id[CRAT_OEMID_LENGTH ]; +union { +uint8_t oem_id[CRAT_OEMID_LENGTH ]; +uint64_t oem_id64; + };uint8_t oem_table_id[CRAT_OEMTABLEID_LENGTH ];uint32_t oem_revision; };
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +27 -22
94 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h +1 -1
@@ -50,7 +50,7 @@#define AMDGPU_DM_MAX_NUM_EDP 2 -#define AMDGPU_DMUB_NOTIFICATION_MAX 5 +#define AMDGPU_DMUB_NOTIFICATION_MAX 6#define HDMI_AMD_VENDOR_SPECIFIC_DATA_BLOCK_IEEE_REGISTRATION_ID 0x00001A#define AMD_VSDB_VERSION_3_FEATURECAP_REPLAYMODE 0x40
drivers/gpu/drm/amd/display/dc/bios/bios_parser.c +16 -2
@@ -665,6 +665,9 @@ static enum bp_result get_ss_info_v3_1( ss_table_header_include = ((ATOM_ASIC_INTERNAL_SS_INFO_V3 *)bios_get_image (&bp->base,DATA_TABLES (ASIC_InternalSS_Info),struct_size (ss_table_header_include, asSpreadSpectrum,1 ))); +if (!ss_table_header_include) +return BP_RESULT_UNSUPPORTED ; + table_size = (le16_to_cpu (ss_table_header_include->sHeader.usStructureSize) -sizeof (ATOM_COMMON_TABLE_HEADER ))
@@ -1034,6 +1037,8 @@ static enum bp_result get_ss_info_from_internal_ss_info_tbl_V2_1( &bp->base,DATA_TABLES (ASIC_InternalSS_Info), struct_size(header, asSpreadSpectrum, 1))); +if (!header) +return result;memset (info,0 ,sizeof (struct spread_spectrum_info ));
@@ -1107,6 +1112,8 @@ static enum bp_result get_ss_info_from_ss_info_table(get_atom_data_table_revision (header, &revision); tbl =GET_IMAGE (ATOM_SPREAD_SPECTRUM_INFO ,DATA_TABLES (SS_Info)); +if (!tbl) +return result;if (1 != revision.major ||2 > revision.minor)return result;
@@ -1634,6 +1641,8 @@ static uint32_t get_ss_entry_number_from_ss_info_tbl( tbl =GET_IMAGE (ATOM_SPREAD_SPECTRUM_INFO ,DATA_TABLES (SS_Info)); +if (!tbl) +return number;if (1 != revision.major ||2 > revision.minor)return number;
@@ -1716,6 +1725,8 @@ static uint32_t get_ss_entry_number_from_internal_ss_info_tbl_v2_1( &bp->base,DATA_TABLES (ASIC_InternalSS_Info), struct_size(header_include, asSpreadSpectrum, 1))); +if (!header_include) +return 0 ; size = (le16_to_cpu (header_include->sHeader.usStructureSize) -sizeof (ATOM_COMMON_TABLE_HEADER ))
@@ -1755,6 +1766,9 @@ static uint32_t get_ss_entry_number_from_internal_ss_info_tbl_V3_1( header_include = ((ATOM_ASIC_INTERNAL_SS_INFO_V3 *)bios_get_image (&bp->base,DATA_TABLES (ASIC_InternalSS_Info),struct_size (header_include, asSpreadSpectrum,1 ))); +if (!header_include) +return number; + size = (le16_to_cpu (header_include->sHeader.usStructureSize) -sizeof (ATOM_COMMON_TABLE_HEADER )) /sizeof (ATOM_ASIC_SS_ASSIGNMENT_V3 );
@@ -2551,8 +2565,8 @@ static enum bp_result construct_integrated_info(/* Sort voltage table from low to high*/ if (result ==BP_RESULT_OK ) { -uint32_t i; -uint32_t j; +int32_t i; +int32_t j;for (i =1 ; i <NUMBER_OF_DISP_CLK_VOLTAGE ; ++i) {for (j = i; j >0 ; --j) {
drivers/gpu/drm/amd/display/dc/bios/bios_parser2.c +5 -2
@@ -2920,8 +2920,11 @@ static enum bp_result construct_integrated_info(struct atom_common_table_header *header;struct atom_data_revision revision; -uint32_t i; -uint32_t j; +int32_t i; +int32_t j; + +if (!info) +return result;if (info &&DATA_TABLES (integratedsysteminfo)) { header = GET_IMAGE(struct atom_common_table_header,
drivers/gpu/drm/amd/display/dc/clk_mgr/dcn21/rn_clk_mgr.c +2 -1
@@ -484,7 +484,8 @@ static void build_watermark_ranges(struct clk_bw_params *bw_params, struct pp_sm ranges->reader_wm_sets[num_valid_sets].max_fill_clk_mhz =PP_SMU_WM_SET_RANGE_CLK_UNCONSTRAINED_MAX ;/* Modify previous watermark range to cover up to max */ - ranges->reader_wm_sets[num_valid_sets -1 ].max_fill_clk_mhz =PP_SMU_WM_SET_RANGE_CLK_UNCONSTRAINED_MAX ; +if (num_valid_sets >0 ) + ranges->reader_wm_sets[num_valid_sets -1 ].max_fill_clk_mhz =PP_SMU_WM_SET_RANGE_CLK_UNCONSTRAINED_MAX ; } num_valid_sets++; }
drivers/gpu/drm/amd/display/dc/core/dc.c +1 -0
@@ -1421,6 +1421,7 @@ struct dc *dc_create(const struct dc_init_data *init_params)return NULL ;if (init_params->dce_environment ==DCE_ENV_VIRTUAL_HW ) { + dc->caps.linear_pitch_alignment =64 ;if (!dc_construct_ctx (dc, init_params)) goto destruct_dc; }else {
drivers/gpu/drm/amd/display/dc/core/dc_link_exports.c +3 -0
@@ -37,6 +37,9 @@#include "dce/dce_i2c.h" struct dc_link *dc_get_link_at_index (struct dc *dc,uint32_t link_index) { +if (link_index >=MAX_LINKS ) +return NULL ; +return dc->links[link_index]; }
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +7 -1
@@ -2283,6 +2283,9 @@ void resource_log_pipe_topology_update(struct dc *dc, struct dc_state *state) state->stream_status[stream_idx].mall_stream_config.paired_stream); otg_master =resource_get_otg_master_for_stream ( &state->res_ctx, state->streams[phantom_stream_idx]); +if (!otg_master) +continue ; +resource_log_pipe_for_stream (dc, state, otg_master, stream_idx); } }
@@ -3508,7 +3511,7 @@ static bool acquire_otg_master_pipe_for_stream(if (pool->dpps[pipe_idx]) pipe_ctx->plane_res.mpcc_inst = pool->dpps[pipe_idx]->inst; -if (pipe_idx >= pool->timing_generator_count) { +if (pipe_idx >= pool->timing_generator_count && pool->timing_generator_count !=0 ) {int tg_inst = pool->timing_generator_count -1 ; pipe_ctx->stream_res.tg = pool->timing_generators[tg_inst];
@@ -4669,6 +4672,9 @@ void resource_build_bit_depth_reduction_params(struct dc_stream_state *stream,enum dc_status dc_validate_stream (struct dc *dc,struct dc_stream_state *stream) { +if (dc ==NULL || stream ==NULL ) +return DC_ERROR_UNEXPECTED ; +struct dc_link *link = stream->link;struct timing_generator *tg = dc->res_pool->timing_generators[0 ];enum dc_status res =DC_OK ;
drivers/gpu/drm/amd/display/dc/core/dc_state.c +5 -5
@@ -191,7 +191,7 @@ static void init_state(struct dc *dc, struct dc_state *state)struct dc_state *dc_state_create (struct dc *dc,struct dc_state_create_params *params) {#ifdef CONFIG_DRM_AMD_DC_FP -struct dml2_configuration_options *dml2_opt = &dc->dml2_options; +struct dml2_configuration_options dml2_opt = dc->dml2_options;#endif struct dc_state *state =kvzalloc (sizeof (struct dc_state ),GFP_KERNEL );
@@ -205,11 +205,11 @@ struct dc_state *dc_state_create(struct dc *dc, struct dc_state_create_params *p#ifdef CONFIG_DRM_AMD_DC_FP if (dc->debug.using_dml2) { - dml2_opt->use_clock_dc_limits = false; -dml2_create (dc, dml2_opt, &state->bw_ctx.dml2); + dml2_opt.use_clock_dc_limits = false; +dml2_create (dc, &dml2_opt, &state->bw_ctx.dml2); - dml2_opt->use_clock_dc_limits = true; -dml2_create (dc, dml2_opt, &state->bw_ctx.dml2_dc_power_source); + dml2_opt.use_clock_dc_limits = true; +dml2_create (dc, &dml2_opt, &state->bw_ctx.dml2_dc_power_source); }#endif
drivers/gpu/drm/amd/display/dc/dce/dmub_abm_lcd.c +1 -1
@@ -258,7 +258,7 @@ bool dmub_abm_set_pipe(struct abm *abm, {union dmub_rb_cmd cmd;struct dc_context *dc = abm->ctx; -uint32_t ramping_boundary =0xFFFF ; +uint8_t ramping_boundary =0xFF ;memset (&cmd,0 ,sizeof (cmd)); cmd.abm_set_pipe.header.type =DMUB_CMD__ABM ;
drivers/gpu/drm/amd/display/dc/dce/dmub_replay.c +2 -1
@@ -102,7 +102,8 @@ static void dmub_replay_enable(struct dmub_replay *dmub, bool enable, bool wait,break ; } -fsleep (500 ); +/* must *not* be fsleep - this can be called from high irq levels */ +udelay (500 ); }/* assert if max retry hit */
drivers/gpu/drm/amd/display/dc/dcn20/dcn20_dwb_scl.c +3 -0
@@ -690,6 +690,9 @@ static void wbscl_set_scaler_filter(int pair;uint16_t odd_coef, even_coef; +if (!filter) +return ; +for (phase =0 ; phase < (NUM_PHASES /2 +1 ); phase++) {for (pair =0 ; pair < tap_pairs; pair++) { even_coef = filter[phase * taps +2 * pair];
drivers/gpu/drm/amd/display/dc/dcn35/dcn35_dccg.c +1 -1
@@ -940,7 +940,7 @@ static uint8_t dccg35_get_other_enabled_symclk_fe(struct dccg *dccg, uint32_t st/* for DPMST, this backend could be used by multiple front end. only disable the backend if this stream_enc_ins is the last active stream enc connected to this back_end*/ uint8_t i; -for (i =0 ; i != link_enc_inst && i <sizeof (fe_clk_en); i++) { +for (i =0 ; i != link_enc_inst && i <ARRAY_SIZE (fe_clk_en); i++) {if (fe_clk_en[i] && be_clk_sel[i] == link_enc_inst) num_enabled_symclk_fe++; }
drivers/gpu/drm/amd/display/dc/dml/calcs/dcn_calcs.c +3 -4
@@ -1453,10 +1453,9 @@ void dcn_bw_update_from_pplib_fclks(ASSERT (fclks->num_levels); vmin0p65_idx =0 ; - vmid0p72_idx = fclks->num_levels - - (fclks->num_levels >2 ?3 : (fclks->num_levels >1 ?2 :1 )); - vnom0p8_idx = fclks->num_levels - (fclks->num_levels >1 ?2 :1 ); - vmax0p9_idx = fclks->num_levels -1 ; + vmid0p72_idx = fclks->num_levels >2 ? fclks->num_levels -3 :0 ; + vnom0p8_idx = fclks->num_levels >1 ? fclks->num_levels -2 :0 ; + vmax0p9_idx = fclks->num_levels >0 ? fclks->num_levels -1 :0 ; dc->dcn_soc->fabric_and_dram_bandwidth_vmin0p65 =32 * (fclks->data[vmin0p65_idx].clocks_in_khz /1000.0 ) /1000.0 ;
drivers/gpu/drm/amd/display/dc/dml/dcn302/dcn302_fpu.c +10 -0
@@ -304,6 +304,16 @@ void dcn302_fpu_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_p dram_speed_mts[num_states++] = bw_params->clk_table.entries[j++].memclk_mhz *16 ; } +/* bw_params->clk_table.entries[MAX_NUM_DPM_LVL]. +* MAX_NUM_DPM_LVL is 8. +* dcn3_02_soc.clock_limits[DC__VOLTAGE_STATES]. +* DC__VOLTAGE_STATES is 40. +*/ +if (num_states >MAX_NUM_DPM_LVL ) { +ASSERT (0 ); +return ; + } + dcn3_02_soc.num_states = num_states;for (i =0 ; i < dcn3_02_soc.num_states; i++) { dcn3_02_soc.clock_limits[i].state = i;
drivers/gpu/drm/amd/display/dc/dml/dcn303/dcn303_fpu.c +10 -0
@@ -310,6 +310,16 @@ void dcn303_fpu_update_bw_bounding_box(struct dc *dc, struct clk_bw_params *bw_p dram_speed_mts[num_states++] = bw_params->clk_table.entries[j++].memclk_mhz *16 ; } +/* bw_params->clk_table.entries[MAX_NUM_DPM_LVL]. +* MAX_NUM_DPM_LVL is 8. +* dcn3_02_soc.clock_limits[DC__VOLTAGE_STATES]. +* DC__VOLTAGE_STATES is 40. +*/ +if (num_states >MAX_NUM_DPM_LVL ) { +ASSERT (0 ); +return ; + } + dcn3_03_soc.num_states = num_states;for (i =0 ; i < dcn3_03_soc.num_states; i++) { dcn3_03_soc.clock_limits[i].state = i;
drivers/gpu/drm/amd/display/dc/dml/dcn32/dcn32_fpu.c +10 -0
@@ -3232,6 +3232,16 @@ void dcn32_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_pa dram_speed_mts[num_states++] = bw_params->clk_table.entries[j++].memclk_mhz *16 ; } +/* bw_params->clk_table.entries[MAX_NUM_DPM_LVL]. +* MAX_NUM_DPM_LVL is 8. +* dcn3_02_soc.clock_limits[DC__VOLTAGE_STATES]. +* DC__VOLTAGE_STATES is 40. +*/ +if (num_states >MAX_NUM_DPM_LVL ) { +ASSERT (0 ); +return ; + } + dcn3_2_soc.num_states = num_states;for (i =0 ; i < dcn3_2_soc.num_states; i++) { dcn3_2_soc.clock_limits[i].state = i;
drivers/gpu/drm/amd/display/dc/dml/dcn321/dcn321_fpu.c +10 -0
@@ -803,6 +803,16 @@ void dcn321_update_bw_bounding_box_fpu(struct dc *dc, struct clk_bw_params *bw_p dram_speed_mts[num_states++] = bw_params->clk_table.entries[j++].memclk_mhz *16 ; } +/* bw_params->clk_table.entries[MAX_NUM_DPM_LVL]. +* MAX_NUM_DPM_LVL is 8. +* dcn3_02_soc.clock_limits[DC__VOLTAGE_STATES]. +* DC__VOLTAGE_STATES is 40. +*/ +if (num_states >MAX_NUM_DPM_LVL ) { +ASSERT (0 ); +return ; + } + dcn3_21_soc.num_states = num_states;for (i =0 ; i < dcn3_21_soc.num_states; i++) { dcn3_21_soc.clock_limits[i].state = i;
drivers/gpu/drm/amd/display/dc/dml/display_mode_vba.c +6 -1
@@ -1099,8 +1099,13 @@ void ModeSupportAndSystemConfiguration(struct display_mode_lib *mode_lib)// Total Available Pipes Support Check for (k =0 ; k < mode_lib->vba.NumberOfActivePlanes; ++k) { - total_pipes += mode_lib->vba.DPPPerPlane[k]; pipe_idx =get_pipe_idx (mode_lib, k); +if (pipe_idx ==-1 ) { +ASSERT (0 ); +continue ;// skip inactive planes + } + total_pipes += mode_lib->vba.DPPPerPlane[k]; +if (mode_lib->vba.cache_pipes[pipe_idx].clks_cfg.dppclk_mhz >0.0 ) mode_lib->vba.DPPCLK[k] = mode_lib->vba.cache_pipes[pipe_idx].clks_cfg.dppclk_mhz;else
drivers/gpu/drm/amd/display/dc/gpio/gpio_service.c +13 -4
@@ -56,7 +56,7 @@ struct gpio_service *dal_gpio_service_create( struct dc_context *ctx) {struct gpio_service *service; -uint32_t index_of_id; +int32_t index_of_id; service =kzalloc (sizeof (struct gpio_service ),GFP_KERNEL );
@@ -112,7 +112,7 @@ struct gpio_service *dal_gpio_service_create(return service; failure_2: -while (index_of_id) { +while (index_of_id >0 ) { --index_of_id;kfree (service->busyness[index_of_id]); }
@@ -239,6 +239,9 @@ static bool is_pin_busy( enum gpio_id id, uint32_t en) { +if (id ==GPIO_ID_UNKNOWN ) +return false; +return service->busyness[id][en]; }
@@ -247,6 +250,9 @@ static void set_pin_busy( enum gpio_id id, uint32_t en) { +if (id ==GPIO_ID_UNKNOWN ) +return ; + service->busyness[id][en] = true; }
@@ -255,6 +261,9 @@ static void set_pin_free( enum gpio_id id, uint32_t en) { +if (id ==GPIO_ID_UNKNOWN ) +return ; + service->busyness[id][en] = false; }
@@ -263,7 +272,7 @@ enum gpio_result dal_gpio_service_lock( enum gpio_id id, uint32_t en) { -if (!service->busyness[id]) { +if (id !=GPIO_ID_UNKNOWN && !service->busyness[id]) {ASSERT_CRITICAL (false);return GPIO_RESULT_OPEN_FAILED ; }
@@ -277,7 +286,7 @@ enum gpio_result dal_gpio_service_unlock( enum gpio_id id, uint32_t en) { -if (!service->busyness[id]) { +if (id !=GPIO_ID_UNKNOWN && !service->busyness[id]) {ASSERT_CRITICAL (false);return GPIO_RESULT_OPEN_FAILED ; }
drivers/gpu/drm/amd/display/dc/hdcp/hdcp_msg.c +15 -2
@@ -128,13 +128,21 @@ static bool hdmi_14_process_transaction(const uint8_t hdcp_i2c_addr_link_primary =0x3a ;/* 0x74 >> 1*/ const uint8_t hdcp_i2c_addr_link_secondary =0x3b ;/* 0x76 >> 1*/ struct i2c_command i2c_command; -uint8_t offset = hdcp_i2c_offsets[message_info->msg_id]; +uint8_t offset;struct i2c_payload i2c_payloads[] = { - { true,0 ,1 , &offset }, + { true,0 ,1 ,0 },/* actual hdcp payload, will be filled later, zeroed for now*/ {0 } }; +if (message_info->msg_id ==HDCP_MESSAGE_ID_INVALID ) { +DC_LOG_ERROR ("%s: Invalid message_info msg_id - %d\n" , __func__, message_info->msg_id); +return false; + } + + offset = hdcp_i2c_offsets[message_info->msg_id]; + i2c_payloads[0 ].data = &offset; +switch (message_info->link) {case HDCP_LINK_SECONDARY : i2c_payloads[0 ].address = hdcp_i2c_addr_link_secondary;
@@ -308,6 +316,11 @@ static bool dp_11_process_transaction( struct dc_link *link, struct hdcp_protection_message *message_info) { +if (message_info->msg_id ==HDCP_MESSAGE_ID_INVALID ) { +DC_LOG_ERROR ("%s: Invalid message_info msg_id - %d\n" , __func__, message_info->msg_id); +return false; + } + return dpcd_access_helper( link, message_info->length,
drivers/gpu/drm/amd/display/dc/hwss/dcn201/dcn201_hwseq.c +3 -0
@@ -95,8 +95,11 @@ static bool gpu_addr_to_uma(struct dce_hwseq *hwseq, }else if (hwseq->fb_offset.quad_part <= addr->quad_part && addr->quad_part <= hwseq->uma_top.quad_part) { is_in_uma = true; + }else if (addr->quad_part ==0 ) { + is_in_uma = false; }else { is_in_uma = false; +BREAK_TO_DEBUGGER (); }return is_in_uma; }
drivers/gpu/drm/amd/display/dc/hwss/dcn21/dcn21_hwseq.c +1 -1
@@ -142,7 +142,7 @@ static bool dmub_abm_set_pipe(struct abm *abm, uint32_t otg_inst, {union dmub_rb_cmd cmd;struct dc_context *dc = abm->ctx; -uint32_t ramping_boundary =0xFFFF ; +uint8_t ramping_boundary =0xFF ;memset (&cmd,0 ,sizeof (cmd)); cmd.abm_set_pipe.header.type =DMUB_CMD__ABM ;
drivers/gpu/drm/amd/display/dc/hwss/dcn35/dcn35_hwseq.c +2 -1
@@ -1077,7 +1077,8 @@ void dcn35_calc_blocks_to_ungate(struct dc *dc, struct dc_state *context,continue ;if ((!cur_pipe->plane_state && new_pipe->plane_state) || - (!cur_pipe->stream && new_pipe->stream)) { + (!cur_pipe->stream && new_pipe->stream) || + (cur_pipe->stream != new_pipe->stream && new_pipe->stream)) {// New pipe addition for (j =0 ; j <PG_HW_PIPE_RESOURCES_NUM_ELEMENT ; j++) {if (j ==PG_HUBP && new_pipe->plane_res.hubp)
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_capability.c +11 -15
@@ -534,7 +534,7 @@ static bool decide_fallback_link_setting_max_bw_policy(struct dc_link_settings *cur, enum link_training_result training_result) { - uint8_t cur_idx = 0, next_idx; + uint32_t cur_idx = 0, next_idx;bool found = false;if (training_result ==LINK_TRAINING_ABORT )
@@ -914,21 +914,17 @@ bool link_decide_link_settings(struct dc_stream_state *stream,memset (link_setting,0 ,sizeof (*link_setting)); -/* if preferred is specified through AMDDP, use it, if it's enough -* to drive the mode -*/ -if (link->preferred_link_setting.lane_count != -LANE_COUNT_UNKNOWN && - link->preferred_link_setting.link_rate != -LINK_RATE_UNKNOWN ) { +if (dc_is_dp_signal (stream->signal) && + link->preferred_link_setting.lane_count !=LANE_COUNT_UNKNOWN && + link->preferred_link_setting.link_rate !=LINK_RATE_UNKNOWN ) { +/* if preferred is specified through AMDDP, use it, if it's enough +* to drive the mode +*/ *link_setting = link->preferred_link_setting; -return true; - } - -/* MST doesn't perform link training for now -* TODO: add MST specific link training routine -*/ -if (stream->signal ==SIGNAL_TYPE_DISPLAY_PORT_MST ) { + }else if (stream->signal ==SIGNAL_TYPE_DISPLAY_PORT_MST ) { +/* MST doesn't perform link training for now +* TODO: add MST specific link training routine +*/ decide_mst_link_settings (link, link_setting); }else if (link->connector_signal ==SIGNAL_TYPE_EDP ) {/* enable edp link optimization for DSC eDP case */
drivers/gpu/drm/amd/display/dc/link/protocols/link_dp_training.c +2 -2
@@ -914,10 +914,10 @@ static enum dc_status configure_lttpr_mode_non_transparent(/* Driver does not need to train the first hop. Skip DPCD read and clear * AUX_RD_INTERVAL for DPTX-to-DPIA hop. */ -if (link->ep_type ==DISPLAY_ENDPOINT_USB4_DPIA ) +if (link->ep_type ==DISPLAY_ENDPOINT_USB4_DPIA && repeater_cnt >0 && repeater_cnt <MAX_REPEATER_CNT ) link->dpcd_caps.lttpr_caps.aux_rd_interval[--repeater_cnt] =0 ; -for (repeater_id = repeater_cnt; repeater_id >0 ; repeater_id--) { +for (repeater_id = repeater_cnt; repeater_id >0 && repeater_id <MAX_REPEATER_CNT ; repeater_id--) { aux_interval_address =DP_TRAINING_AUX_RD_INTERVAL_PHY_REPEATER1 + ((DP_REPEATER_CONFIGURATION_AND_STATUS_SIZE ) * (repeater_id -1 )); core_link_read_dpcd(
drivers/gpu/drm/amd/display/dc/link/protocols/link_dpcd.c +1 -0
@@ -165,6 +165,7 @@ static void dpcd_extend_address_range( *out_address = new_addr_range.start; *out_size =ADDRESS_RANGE_SIZE (new_addr_range.start, new_addr_range.end); *out_data =kcalloc (*out_size,sizeof (**out_data),GFP_KERNEL ); +ASSERT (*out_data); } }
drivers/gpu/drm/amd/display/dc/resource/dce80/dce80_resource.c +1 -0
@@ -1538,6 +1538,7 @@ struct resource_pool *dce83_create_resource_pool(if (dce83_construct (num_virtual_links, dc, pool))return &pool->base; +kfree (pool);BREAK_TO_DEBUGGER ();return NULL ; }
drivers/gpu/drm/amd/display/dc/resource/dcn31/dcn31_resource.c +1 -0
@@ -1864,6 +1864,7 @@ static struct clock_source *dcn30_clock_source_create(return &clk_src->base; } +kfree (clk_src);BREAK_TO_DEBUGGER ();return NULL ; }
drivers/gpu/drm/amd/display/dc/resource/dcn314/dcn314_resource.c +2 -2
@@ -1660,8 +1660,8 @@ static struct clock_source *dcn31_clock_source_create(return &clk_src->base; } -BREAK_TO_DEBUGGER ();kfree (clk_src); +BREAK_TO_DEBUGGER ();return NULL ; }
@@ -1821,8 +1821,8 @@ static struct clock_source *dcn30_clock_source_create(return &clk_src->base; } -BREAK_TO_DEBUGGER ();kfree (clk_src); +BREAK_TO_DEBUGGER ();return NULL ; }
drivers/gpu/drm/amd/display/dc/resource/dcn35/dcn35_resource.c +2 -0
@@ -785,6 +785,7 @@ static const struct dc_debug_options debug_defaults_drv = { .ips2_entry_delay_us = 800, .disable_dmub_reallow_idle = false, .static_screen_wait_frames = 2, + .disable_timeout = true, };static const struct dc_panel_config panel_config_defaults = {
@@ -1716,6 +1717,7 @@ static struct clock_source *dcn35_clock_source_create(return &clk_src->base; } +kfree (clk_src);BREAK_TO_DEBUGGER ();return NULL ; }
drivers/gpu/drm/amd/display/dc/resource/dcn351/dcn351_resource.c +1 -0
@@ -1696,6 +1696,7 @@ static struct clock_source *dcn35_clock_source_create(return &clk_src->base; } +kfree (clk_src);BREAK_TO_DEBUGGER ();return NULL ; }
drivers/gpu/drm/amd/display/dmub/src/dmub_dcn35.c +1 -4
@@ -459,7 +459,7 @@ uint32_t dmub_dcn35_get_current_time(struct dmub_srv *dmub)void dmub_dcn35_get_diagnostic_data (struct dmub_srv *dmub,struct dmub_diagnostic_data *diag_data) {uint32_t is_dmub_enabled, is_soft_reset, is_sec_reset; -uint32_t is_traceport_enabled, is_cw0_enabled, is_cw6_enabled; +uint32_t is_traceport_enabled, is_cw6_enabled;if (!dmub || !diag_data)return ;
@@ -510,9 +510,6 @@ void dmub_dcn35_get_diagnostic_data(struct dmub_srv *dmub, struct dmub_diagnostiREG_GET (DMCUB_CNTL ,DMCUB_TRACEPORT_EN , &is_traceport_enabled); diag_data->is_traceport_en = is_traceport_enabled; -REG_GET (DMCUB_REGION3_CW0_TOP_ADDRESS ,DMCUB_REGION3_CW0_ENABLE , &is_cw0_enabled); - diag_data->is_cw0_enabled = is_cw0_enabled; -REG_GET (DMCUB_REGION3_CW6_TOP_ADDRESS ,DMCUB_REGION3_CW6_ENABLE , &is_cw6_enabled); diag_data->is_cw6_enabled = is_cw6_enabled;
drivers/gpu/drm/amd/display/modules/hdcp/hdcp_ddc.c +24 -4
@@ -156,11 +156,16 @@ static enum mod_hdcp_status read(struct mod_hdcp *hdcp,uint32_t cur_size =0 ;uint32_t data_offset =0 ; -if (msg_id ==MOD_HDCP_MESSAGE_ID_INVALID ) { +if (msg_id ==MOD_HDCP_MESSAGE_ID_INVALID || + msg_id >=MOD_HDCP_MESSAGE_ID_MAX )return MOD_HDCP_STATUS_DDC_FAILURE ; - }if (is_dp_hdcp (hdcp)) { +int num_dpcd_addrs =sizeof (hdcp_dpcd_addrs) / +sizeof (hdcp_dpcd_addrs[0 ]); +if (msg_id >= num_dpcd_addrs) +return MOD_HDCP_STATUS_DDC_FAILURE ; +while (buf_len >0 ) { cur_size =MIN (buf_len,HDCP_MAX_AUX_TRANSACTION_SIZE ); success = hdcp->config.ddc.funcs.read_dpcd(hdcp->config.ddc.handle,
@@ -175,6 +180,11 @@ static enum mod_hdcp_status read(struct mod_hdcp *hdcp, data_offset += cur_size; } }else { +int num_i2c_offsets =sizeof (hdcp_i2c_offsets) / +sizeof (hdcp_i2c_offsets[0 ]); +if (msg_id >= num_i2c_offsets) +return MOD_HDCP_STATUS_DDC_FAILURE ; + success = hdcp->config.ddc.funcs.read_i2c( hdcp->config.ddc.handle, HDCP_I2C_ADDR,
@@ -219,11 +229,16 @@ static enum mod_hdcp_status write(struct mod_hdcp *hdcp,uint32_t cur_size =0 ;uint32_t data_offset =0 ; -if (msg_id ==MOD_HDCP_MESSAGE_ID_INVALID ) { +if (msg_id ==MOD_HDCP_MESSAGE_ID_INVALID || + msg_id >=MOD_HDCP_MESSAGE_ID_MAX )return MOD_HDCP_STATUS_DDC_FAILURE ; - }if (is_dp_hdcp (hdcp)) { +int num_dpcd_addrs =sizeof (hdcp_dpcd_addrs) / +sizeof (hdcp_dpcd_addrs[0 ]); +if (msg_id >= num_dpcd_addrs) +return MOD_HDCP_STATUS_DDC_FAILURE ; +while (buf_len >0 ) { cur_size =MIN (buf_len,HDCP_MAX_AUX_TRANSACTION_SIZE ); success = hdcp->config.ddc.funcs.write_dpcd(
@@ -239,6 +254,11 @@ static enum mod_hdcp_status write(struct mod_hdcp *hdcp, data_offset += cur_size; } }else { +int num_i2c_offsets =sizeof (hdcp_i2c_offsets) / +sizeof (hdcp_i2c_offsets[0 ]); +if (msg_id >= num_i2c_offsets) +return MOD_HDCP_STATUS_DDC_FAILURE ; + hdcp->buf[0 ] = hdcp_i2c_offsets[msg_id];memmove (&hdcp->buf[1 ], buf, buf_len); success = hdcp->config.ddc.funcs.write_i2c(
drivers/gpu/drm/amd/pm/powerplay/amd_powerplay.c +1 -1
@@ -99,7 +99,7 @@ static void pp_swctf_delayed_work_handler(struct work_struct *work)struct amdgpu_device *adev = hwmgr->adev;struct amdgpu_dpm_thermal *range = &adev->pm.dpm.thermal; -uint32_t gpu_temperature, size; +uint32_t gpu_temperature, size =sizeof (gpu_temperature);int ret;/*
drivers/gpu/drm/amd/pm/powerplay/hwmgr/pp_psm.c +8 -5
@@ -30,9 +30,8 @@ int psm_init_power_state_table(struct pp_hwmgr *hwmgr) {int result;unsigned int i; -unsigned int table_entries;struct pp_power_state *state; -int size; +int size, table_entries;if (hwmgr->hwmgr_func->get_num_of_pp_table_entries ==NULL )return 0 ;
@@ -40,15 +39,19 @@ int psm_init_power_state_table(struct pp_hwmgr *hwmgr)if (hwmgr->hwmgr_func->get_power_state_size ==NULL )return 0 ; - hwmgr->num_ps = table_entries = hwmgr->hwmgr_func->get_num_of_pp_table_entries (hwmgr); + table_entries = hwmgr->hwmgr_func->get_num_of_pp_table_entries (hwmgr); - hwmgr->ps_size = size = hwmgr->hwmgr_func->get_power_state_size (hwmgr) + + size = hwmgr->hwmgr_func->get_power_state_size (hwmgr) +sizeof (struct pp_power_state ); -if (table_entries ==0 || size ==0 ) { +if (table_entries <=0 || size ==0 ) {pr_warn ("Please check whether power state management is supported on this asic\n" ); + hwmgr->num_ps =0 ; + hwmgr->ps_size =0 ;return 0 ; } + hwmgr->num_ps = table_entries; + hwmgr->ps_size = size; hwmgr->ps =kcalloc (table_entries, size,GFP_KERNEL );if (hwmgr->ps ==NULL )
drivers/gpu/drm/amd/pm/powerplay/hwmgr/ppatomctrl.c +3 -2
@@ -73,8 +73,9 @@ static int atomctrl_retrieve_ac_timing( j++; }else if ((table->mc_reg_address[i].uc_pre_reg_data &LOW_NIBBLE_MASK ) ==DATA_EQU_PREV ) { - table->mc_reg_table_entry[num_ranges].mc_data[i] = - table->mc_reg_table_entry[num_ranges].mc_data[i-1 ]; +if (i) + table->mc_reg_table_entry[num_ranges].mc_data[i] = + table->mc_reg_table_entry[num_ranges].mc_data[i-1 ]; } } num_ranges++;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu10_hwmgr.c +22 -7
@@ -1036,7 +1036,9 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr,switch (type) {case PP_SCLK : -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetGfxclkFrequency, &now); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetGfxclkFrequency, &now); +if (ret) +return ret;/* driver only know min/max gfx_clk, Add level 1 for all other gfx clks */ if (now == data->gfx_max_freq_limit/100 )
@@ -1057,7 +1059,9 @@ static int smu10_print_clock_levels(struct pp_hwmgr *hwmgr, i == 2 ? "*" : "");break ;case PP_MCLK : -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetFclkFrequency, &now); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetFclkFrequency, &now); +if (ret) +return ret;for (i =0 ; i < mclk_table->count; i++) size += sprintf(buf + size, "%d: %uMhz %s\n",
@@ -1550,7 +1554,10 @@ static int smu10_set_fine_grain_clk_vol(struct pp_hwmgr *hwmgr, }if (input[0 ] ==0 ) { -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMinGfxclkFrequency, &min_freq); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMinGfxclkFrequency, &min_freq); +if (ret) +return ret; +if (input[1 ] < min_freq) {pr_err ("Fine grain setting minimum sclk (%ld) MHz is less than the minimum allowed (%d) MHz\n" , input[1 ], min_freq);
@@ -1558,7 +1565,10 @@ static int smu10_set_fine_grain_clk_vol(struct pp_hwmgr *hwmgr, } smu10_data->gfx_actual_soft_min_freq = input[1 ]; }else if (input[0 ] ==1 ) { -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxGfxclkFrequency, &max_freq); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxGfxclkFrequency, &max_freq); +if (ret) +return ret; +if (input[1 ] > max_freq) {pr_err ("Fine grain setting maximum sclk (%ld) MHz is greater than the maximum allowed (%d) MHz\n" , input[1 ], max_freq);
@@ -1573,10 +1583,15 @@ static int smu10_set_fine_grain_clk_vol(struct pp_hwmgr *hwmgr,pr_err ("Input parameter number not correct\n" );return -EINVAL ; } -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMinGfxclkFrequency, &min_freq); -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxGfxclkFrequency, &max_freq); - + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMinGfxclkFrequency, &min_freq); +if (ret) +return ret; smu10_data->gfx_actual_soft_min_freq = min_freq; + + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxGfxclkFrequency, &max_freq); +if (ret) +return ret; + smu10_data->gfx_actual_soft_max_freq = max_freq; }else if (type ==PP_OD_COMMIT_DPM_TABLE ) {if (size !=0 ) {
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu7_hwmgr.c +1 -1
@@ -5641,7 +5641,7 @@ static int smu7_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uint mode = input[size];switch (mode) {case PP_SMC_POWER_PROFILE_CUSTOM : -if (size <8 && size !=0 ) +if (size !=8 && size !=0 )return -EINVAL ;/* If only CUSTOM is passed in, use the saved values. Check * that we actually have a CUSTOM profile by ensuring that
drivers/gpu/drm/amd/pm/powerplay/hwmgr/smu8_hwmgr.c +12 -3
@@ -584,6 +584,7 @@ static int smu8_init_uvd_limit(struct pp_hwmgr *hwmgr) hwmgr->dyn_state.uvd_clock_voltage_dependency_table;unsigned long clock =0 ;uint32_t level; +int ret;if (NULL == table || table->count <=0 )return -EINVAL ;
@@ -591,7 +592,9 @@ static int smu8_init_uvd_limit(struct pp_hwmgr *hwmgr) data->uvd_dpm.soft_min_clk =0 ; data->uvd_dpm.hard_min_clk =0 ; -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxUvdLevel, &level); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxUvdLevel, &level); +if (ret) +return ret;if (level < table->count) clock = table->entries[level].vclk;
@@ -611,6 +614,7 @@ static int smu8_init_vce_limit(struct pp_hwmgr *hwmgr) hwmgr->dyn_state.vce_clock_voltage_dependency_table;unsigned long clock =0 ;uint32_t level; +int ret;if (NULL == table || table->count <=0 )return -EINVAL ;
@@ -618,7 +622,9 @@ static int smu8_init_vce_limit(struct pp_hwmgr *hwmgr) data->vce_dpm.soft_min_clk =0 ; data->vce_dpm.hard_min_clk =0 ; -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxEclkLevel, &level); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxEclkLevel, &level); +if (ret) +return ret;if (level < table->count) clock = table->entries[level].ecclk;
@@ -638,6 +644,7 @@ static int smu8_init_acp_limit(struct pp_hwmgr *hwmgr) hwmgr->dyn_state.acp_clock_voltage_dependency_table;unsigned long clock =0 ;uint32_t level; +int ret;if (NULL == table || table->count <=0 )return -EINVAL ;
@@ -645,7 +652,9 @@ static int smu8_init_acp_limit(struct pp_hwmgr *hwmgr) data->acp_dpm.soft_min_clk =0 ; data->acp_dpm.hard_min_clk =0 ; -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxAclkLevel, &level); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetMaxAclkLevel, &level); +if (ret) +return ret;if (level < table->count) clock = table->entries[level].acpclk;
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega10_hwmgr.c +45 -15
154 lines not on this page · raw message
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega12_hwmgr.c +15 -5
@@ -293,12 +293,12 @@ static int vega12_set_features_platform_caps(struct pp_hwmgr *hwmgr)return 0 ; } -static void vega12_init_dpm_defaults (struct pp_hwmgr *hwmgr) +static int vega12_init_dpm_defaults (struct pp_hwmgr *hwmgr) {struct vega12_hwmgr *data = (struct vega12_hwmgr *)(hwmgr->backend);struct amdgpu_device *adev = hwmgr->adev;uint32_t top32, bottom32; -int i; +int i, ret; data->smu_features[GNLD_DPM_PREFETCHER ].smu_feature_id =FEATURE_DPM_PREFETCHER_BIT ;
@@ -364,10 +364,16 @@ static void vega12_init_dpm_defaults(struct pp_hwmgr *hwmgr) }/* Get the SN to turn into a Unique ID */ -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumTop32, &top32); -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumBottom32, &bottom32); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumTop32, &top32); +if (ret) +return ret; + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumBottom32, &bottom32); +if (ret) +return ret; adev->unique_id = ((uint64_t )bottom32 <<32 ) | top32; + +return 0 ; }static int vega12_set_private_data_based_on_pptable (struct pp_hwmgr *hwmgr)
@@ -410,7 +416,11 @@ static int vega12_hwmgr_backend_init(struct pp_hwmgr *hwmgr)vega12_set_features_platform_caps (hwmgr); -vega12_init_dpm_defaults (hwmgr); + result =vega12_init_dpm_defaults (hwmgr); +if (result) { +pr_err ("%s failed\n" , __func__); +return result; + }/* Parse pptable data read from VBIOS */ vega12_set_private_data_based_on_pptable (hwmgr);
drivers/gpu/drm/amd/pm/powerplay/hwmgr/vega20_hwmgr.c +23 -8
@@ -328,12 +328,12 @@ static int vega20_set_features_platform_caps(struct pp_hwmgr *hwmgr)return 0 ; } -static void vega20_init_dpm_defaults (struct pp_hwmgr *hwmgr) +static int vega20_init_dpm_defaults (struct pp_hwmgr *hwmgr) {struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend);struct amdgpu_device *adev = hwmgr->adev;uint32_t top32, bottom32; -int i; +int i, ret; data->smu_features[GNLD_DPM_PREFETCHER ].smu_feature_id =FEATURE_DPM_PREFETCHER_BIT ;
@@ -404,10 +404,17 @@ static void vega20_init_dpm_defaults(struct pp_hwmgr *hwmgr) }/* Get the SN to turn into a Unique ID */ -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumTop32, &top32); -smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumBottom32, &bottom32); + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumTop32, &top32); +if (ret) +return ret; + + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_ReadSerialNumBottom32, &bottom32); +if (ret) +return ret; adev->unique_id = ((uint64_t )bottom32 <<32 ) | top32; + +return 0 ; }static int vega20_set_private_data_based_on_pptable (struct pp_hwmgr *hwmgr)
@@ -427,6 +434,7 @@ static int vega20_hwmgr_backend_init(struct pp_hwmgr *hwmgr) {struct vega20_hwmgr *data;struct amdgpu_device *adev = hwmgr->adev; +int result; data =kzalloc (sizeof (struct vega20_hwmgr ),GFP_KERNEL );if (data ==NULL )
@@ -452,8 +460,11 @@ static int vega20_hwmgr_backend_init(struct pp_hwmgr *hwmgr)vega20_set_features_platform_caps (hwmgr); -vega20_init_dpm_defaults (hwmgr); - + result =vega20_init_dpm_defaults (hwmgr); +if (result) { +pr_err ("%s failed\n" , __func__); +return result; + }/* Parse pptable data read from VBIOS */ vega20_set_private_data_based_on_pptable (hwmgr);
@@ -4091,9 +4102,11 @@ static int vega20_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, uiif (power_profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) {struct vega20_hwmgr *data = (struct vega20_hwmgr *)(hwmgr->backend); -if (size ==0 && !data->is_custom_profile_set) + +if (size !=10 && size !=0 )return -EINVAL ; -if (size <10 && size !=0 ) + +if (size ==0 && !data->is_custom_profile_set)return -EINVAL ; result = vega20_get_activity_monitor_coeff(hwmgr,
@@ -4155,6 +4168,8 @@ static int vega20_set_power_profile_mode(struct pp_hwmgr *hwmgr, long *input, ui activity_monitor.Fclk_PD_Data_error_coeff = input[8 ]; activity_monitor.Fclk_PD_Data_error_rate_coeff = input[9 ];break ; +default : +return -EINVAL ; } result = vega20_set_activity_monitor_coeff(hwmgr,
drivers/gpu/drm/amd/pm/powerplay/smumgr/vega10_smumgr.c +5 -1
@@ -130,13 +130,17 @@ int vega10_get_enabled_smc_features(struct pp_hwmgr *hwmgr, uint64_t *features_enabled) {uint32_t enabled_features; +int ret;if (features_enabled ==NULL )return -EINVAL ; -smum_send_msg_to_smc (hwmgr, + ret =smum_send_msg_to_smc (hwmgr, PPSMC_MSG_GetEnabledSmuFeatures, &enabled_features); +if (ret) +return ret; + *features_enabled = enabled_features;return 0 ;
drivers/gpu/drm/amd/pm/swsmu/inc/smu_v13_0.h +4 -0
@@ -298,5 +298,9 @@ int smu_v13_0_enable_uclk_shadow(struct smu_context *smu, bool enable);int smu_v13_0_set_wbrf_exclusion_ranges (struct smu_context *smu,struct freq_band_range *exclusion_ranges); + +int smu_v13_0_get_boot_freq_by_index (struct smu_context *smu, +enum smu_clk_type clk_type, +uint32_t *value);#endif #endif
drivers/gpu/drm/amd/pm/swsmu/smu11/arcturus_ppt.c +5 -0
@@ -1416,6 +1416,9 @@ static int arcturus_set_power_profile_mode(struct smu_context *smu,if ((profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) && (smu->smc_fw_version >=0x360d00 )) { +if (size !=10 ) +return -EINVAL ; + ret = smu_cmn_update_table(smu, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
@@ -1449,6 +1452,8 @@ static int arcturus_set_power_profile_mode(struct smu_context *smu, activity_monitor.Mem_PD_Data_error_coeff = input[8 ]; activity_monitor.Mem_PD_Data_error_rate_coeff = input[9 ];break ; +default : +return -EINVAL ; } ret = smu_cmn_update_table(smu,
drivers/gpu/drm/amd/pm/swsmu/smu11/navi10_ppt.c +25 -6
@@ -1219,19 +1219,22 @@ static int navi10_get_current_clk_freq_by_table(struct smu_context *smu, value); } -static bool navi10_is_support_fine_grained_dpm (struct smu_context *smu,enum smu_clk_type clk_type) +static int navi10_is_support_fine_grained_dpm (struct smu_context *smu,enum smu_clk_type clk_type) {PPTable_t *pptable = smu->smu_table.driver_pptable;DpmDescriptor_t *dpm_desc =NULL ; -uint32_t clk_index =0 ; +int clk_index =0 ; clk_index =smu_cmn_to_asic_specific_index (smu,CMN2ASIC_MAPPING_CLK , clk_type); +if (clk_index <0 ) +return clk_index; + dpm_desc = &pptable->DpmDescriptor[clk_index];/* 0 - Fine grained DPM, 1 - Discrete DPM */ -return dpm_desc->SnapToDiscrete ==0 ; +return dpm_desc->SnapToDiscrete ==0 ?1 :0 ; }static inline bool navi10_od_feature_is_supported (struct smu_11_0_overdrive_table *od_table,enum SMU_11_0_ODFEATURE_CAP cap)
@@ -1287,7 +1290,11 @@ static int navi10_emit_clk_levels(struct smu_context *smu,if (ret)return ret; -if (!navi10_is_support_fine_grained_dpm (smu, clk_type)) { + ret =navi10_is_support_fine_grained_dpm (smu, clk_type); +if (ret <0 ) +return ret; + +if (!ret) {for (i =0 ; i < count; i++) { ret =smu_v11_0_get_dpm_freq_by_index (smu, clk_type, i, &value);
@@ -1496,7 +1503,11 @@ static int navi10_print_clk_levels(struct smu_context *smu,if (ret)return size; -if (!navi10_is_support_fine_grained_dpm (smu, clk_type)) { + ret =navi10_is_support_fine_grained_dpm (smu, clk_type); +if (ret <0 ) +return ret; + +if (!ret) {for (i =0 ; i < count; i++) { ret =smu_v11_0_get_dpm_freq_by_index (smu, clk_type, i, &value);if (ret)
@@ -1665,7 +1676,11 @@ static int navi10_force_clk_levels(struct smu_context *smu,case SMU_UCLK :case SMU_FCLK :/* There is only 2 levels for fine grained DPM */ -if (navi10_is_support_fine_grained_dpm (smu, clk_type)) { + ret =navi10_is_support_fine_grained_dpm (smu, clk_type); +if (ret <0 ) +return ret; + +if (ret) { soft_max_level = (soft_max_level >=1 ?1 :0 ); soft_min_level = (soft_min_level >=1 ?1 :0 ); }
@@ -2006,6 +2021,8 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u }if (smu->power_profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) { +if (size !=10 ) +return -EINVAL ; ret = smu_cmn_update_table(smu, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
@@ -2049,6 +2066,8 @@ static int navi10_set_power_profile_mode(struct smu_context *smu, long *input, u activity_monitor.Mem_PD_Data_error_coeff = input[8 ]; activity_monitor.Mem_PD_Data_error_rate_coeff = input[9 ];break ; +default : +return -EINVAL ; } ret = smu_cmn_update_table(smu,
drivers/gpu/drm/amd/pm/swsmu/smu11/sienna_cichlid_ppt.c +4 -0
@@ -1722,6 +1722,8 @@ static int sienna_cichlid_set_power_profile_mode(struct smu_context *smu, long * }if (smu->power_profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) { +if (size !=10 ) +return -EINVAL ; ret = smu_cmn_update_table(smu, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
@@ -1765,6 +1767,8 @@ static int sienna_cichlid_set_power_profile_mode(struct smu_context *smu, long * activity_monitor->Mem_PD_Data_error_coeff = input[8 ]; activity_monitor->Mem_PD_Data_error_rate_coeff = input[9 ];break ; +default : +return -EINVAL ; } ret = smu_cmn_update_table(smu,
drivers/gpu/drm/amd/pm/swsmu/smu11/vangogh_ppt.c +14 -0
@@ -976,6 +976,18 @@ static int vangogh_get_dpm_ultimate_freq(struct smu_context *smu, } }if (min) { + ret =vangogh_get_profiling_clk_mask (smu, +AMD_DPM_FORCED_LEVEL_PROFILE_MIN_MCLK , +NULL , +NULL , + &mclk_mask, + &fclk_mask, + &soc_mask); +if (ret) + goto failed; + + vclk_mask = dclk_mask =0 ; +switch (clk_type) {case SMU_UCLK :case SMU_MCLK :
@@ -2450,6 +2462,8 @@ static u32 vangogh_set_gfxoff_residency(struct smu_context *smu, bool start) ret =smu_cmn_send_smc_msg_with_param (smu, SMU_MSG_LogGfxOffResidency, start, &residency); +if (ret) +return ret;if (!start) adev->gfx.gfx_off_residency = residency;
drivers/gpu/drm/amd/pm/swsmu/smu13/aldebaran_ppt.c +2 -1
@@ -1886,7 +1886,8 @@ static int aldebaran_mode2_reset(struct smu_context *smu) index =smu_cmn_to_asic_specific_index (smu,CMN2ASIC_MAPPING_MSG , SMU_MSG_GfxDeviceDriverReset); - +if (index <0 ) +return -EINVAL ;mutex_lock (&smu->message_lock);if (smu->smc_fw_version >=0x00441400 ) { ret =smu_cmn_send_msg_without_waiting (smu, (uint16_t )index,SMU_RESET_MODE_2 );
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0.c +38 -17
73 lines not on this page · raw message
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_0_ppt.c +5 -0
@@ -2495,6 +2495,9 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu, }if (smu->power_profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) { +if (size !=9 ) +return -EINVAL ; + ret = smu_cmn_update_table(smu, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
@@ -2526,6 +2529,8 @@ static int smu_v13_0_0_set_power_profile_mode(struct smu_context *smu, activity_monitor->Fclk_PD_Data_error_coeff = input[7 ]; activity_monitor->Fclk_PD_Data_error_rate_coeff = input[8 ];break ; +default : +return -EINVAL ; } ret = smu_cmn_update_table(smu,
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_4_ppt.c +3 -25
@@ -758,31 +758,9 @@ static int smu_v13_0_4_get_dpm_ultimate_freq(struct smu_context *smu,int ret =0 ;if (!smu_v13_0_4_clk_dpm_is_enabled (smu, clk_type)) { -switch (clk_type) { -case SMU_MCLK : -case SMU_UCLK : - clock_limit = smu->smu_table.boot_values.uclk; -break ; -case SMU_FCLK : - clock_limit = smu->smu_table.boot_values.fclk; -break ; -case SMU_GFXCLK : -case SMU_SCLK : - clock_limit = smu->smu_table.boot_values.gfxclk; -break ; -case SMU_SOCCLK : - clock_limit = smu->smu_table.boot_values.socclk; -break ; -case SMU_VCLK : - clock_limit = smu->smu_table.boot_values.vclk; -break ; -case SMU_DCLK : - clock_limit = smu->smu_table.boot_values.dclk; -break ; -default : - clock_limit =0 ; -break ; - } + ret =smu_v13_0_get_boot_freq_by_index (smu, clk_type, &clock_limit); +if (ret) +return ret;/* clock in Mhz unit */ if (min)
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_5_ppt.c +3 -25
@@ -733,31 +733,9 @@ static int smu_v13_0_5_get_dpm_ultimate_freq(struct smu_context *smu,int ret =0 ;if (!smu_v13_0_5_clk_dpm_is_enabled (smu, clk_type)) { -switch (clk_type) { -case SMU_MCLK : -case SMU_UCLK : - clock_limit = smu->smu_table.boot_values.uclk; -break ; -case SMU_FCLK : - clock_limit = smu->smu_table.boot_values.fclk; -break ; -case SMU_GFXCLK : -case SMU_SCLK : - clock_limit = smu->smu_table.boot_values.gfxclk; -break ; -case SMU_SOCCLK : - clock_limit = smu->smu_table.boot_values.socclk; -break ; -case SMU_VCLK : - clock_limit = smu->smu_table.boot_values.vclk; -break ; -case SMU_DCLK : - clock_limit = smu->smu_table.boot_values.dclk; -break ; -default : - clock_limit =0 ; -break ; - } + ret =smu_v13_0_get_boot_freq_by_index (smu, clk_type, &clock_limit); +if (ret) +return ret;/* clock in Mhz unit */ if (min)
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_6_ppt.c +2 -0
@@ -2333,6 +2333,8 @@ static int smu_v13_0_6_mode2_reset(struct smu_context *smu) index =smu_cmn_to_asic_specific_index (smu,CMN2ASIC_MAPPING_MSG , SMU_MSG_GfxDeviceDriverReset); +if (index <0 ) +return index;mutex_lock (&smu->message_lock);
drivers/gpu/drm/amd/pm/swsmu/smu13/smu_v13_0_7_ppt.c +4 -0
@@ -2450,6 +2450,8 @@ static int smu_v13_0_7_set_power_profile_mode(struct smu_context *smu, long *inp }if (smu->power_profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) { +if (size !=8 ) +return -EINVAL ; ret = smu_cmn_update_table(smu, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
@@ -2478,6 +2480,8 @@ static int smu_v13_0_7_set_power_profile_mode(struct smu_context *smu, long *inp activity_monitor->Fclk_MinActiveFreq = input[6 ]; activity_monitor->Fclk_BoosterFreq = input[7 ];break ; +default : +return -EINVAL ; } ret = smu_cmn_update_table(smu,
drivers/gpu/drm/amd/pm/swsmu/smu13/yellow_carp_ppt.c +3 -25
@@ -867,31 +867,9 @@ static int yellow_carp_get_dpm_ultimate_freq(struct smu_context *smu,int ret =0 ;if (!yellow_carp_clk_dpm_is_enabled (smu, clk_type)) { -switch (clk_type) { -case SMU_MCLK : -case SMU_UCLK : - clock_limit = smu->smu_table.boot_values.uclk; -break ; -case SMU_FCLK : - clock_limit = smu->smu_table.boot_values.fclk; -break ; -case SMU_GFXCLK : -case SMU_SCLK : - clock_limit = smu->smu_table.boot_values.gfxclk; -break ; -case SMU_SOCCLK : - clock_limit = smu->smu_table.boot_values.socclk; -break ; -case SMU_VCLK : - clock_limit = smu->smu_table.boot_values.vclk; -break ; -case SMU_DCLK : - clock_limit = smu->smu_table.boot_values.dclk; -break ; -default : - clock_limit =0 ; -break ; - } + ret =smu_v13_0_get_boot_freq_by_index (smu, clk_type, &clock_limit); +if (ret) +return ret;/* clock in Mhz unit */ if (min)
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +5 -0
@@ -1364,6 +1364,9 @@ static int smu_v14_0_2_set_power_profile_mode(struct smu_context *smu, }if (smu->power_profile_mode ==PP_SMC_POWER_PROFILE_CUSTOM ) { +if (size !=9 ) +return -EINVAL ; + ret = smu_cmn_update_table(smu, SMU_TABLE_ACTIVITY_MONITOR_COEFF, WORKLOAD_PPLIB_CUSTOM_BIT,
@@ -1395,6 +1398,8 @@ static int smu_v14_0_2_set_power_profile_mode(struct smu_context *smu, activity_monitor->Fclk_PD_Data_error_coeff = input[7 ]; activity_monitor->Fclk_PD_Data_error_rate_coeff = input[8 ];break ; +default : +return -EINVAL ; } ret = smu_cmn_update_table(smu,
drivers/gpu/drm/bridge/tc358767.c +1 -1
@@ -2135,7 +2135,7 @@ static irqreturn_t tc_irq_handler(int irq, void *arg)dev_err (tc->dev,"syserr %x\n" , stat); } -if (tc->hpd_pin >=0 && tc->bridge.dev) { +if (tc->hpd_pin >=0 && tc->bridge.dev && tc->aux.drm_dev) {/* * H is triggered when the GPIO goes high. *
drivers/gpu/drm/drm_bridge.c +0 -5
@@ -353,13 +353,8 @@ int drm_bridge_attach(struct drm_encoder *encoder, struct drm_bridge *bridge, bridge->encoder =NULL ;list_del (&bridge->chain_node); -#ifdef CONFIG_OF DRM_ERROR ("failed to attach bridge %pOF to encoder %s: %d\n" , bridge->of_node, encoder->name, ret); -#else -DRM_ERROR ("failed to attach bridge to encoder %s: %d\n" , - encoder->name, ret); -#endif return ret; }
drivers/gpu/drm/drm_fb_helper.c +11 -0
@@ -631,6 +631,17 @@ static void drm_fb_helper_add_damage_clip(struct drm_fb_helper *helper, u32 x, ustatic void drm_fb_helper_damage (struct drm_fb_helper *helper,u32 x,u32 y,u32 width,u32 height) { +/* +* This function may be invoked by panic() to flush the frame +* buffer, where all CPUs except the panic CPU are stopped. +* During the following schedule_work(), the panic CPU needs +* the worker_pool lock, which might be held by a stopped CPU, +* causing schedule_work() and panic() to block. Return early on +* oops_in_progress to prevent this blocking. +*/ +if (oops_in_progress) +return ; +drm_fb_helper_add_damage_clip (helper, x, y, width, height);schedule_work (&helper->damage_work);
drivers/gpu/drm/drm_panel_orientation_quirks.c +6 -0
@@ -414,6 +414,12 @@ static const struct dmi_system_id orientation_data[] = { DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONE XPLAYER"), }, .driver_data = (void *)&lcd1600x2560_leftside_up, + }, { /* OrangePi Neo */ + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"OrangePi" ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "NEO-01"), + }, + .driver_data = (void *)&lcd1200x1920_rightside_up, }, { /* Samsung GalaxyBook 10.6 */ .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
drivers/gpu/drm/meson/meson_plane.c +11 -6
@@ -534,6 +534,7 @@ int meson_plane_create(struct meson_drm *priv)struct meson_plane *meson_plane;struct drm_plane *plane;const uint64_t *format_modifiers = format_modifiers_default; +int ret; meson_plane =devm_kzalloc (priv->drm->dev,sizeof (*meson_plane),GFP_KERNEL );
@@ -548,12 +549,16 @@ int meson_plane_create(struct meson_drm *priv)else if (meson_vpu_is_compatible (priv,VPU_COMPATIBLE_G12A )) format_modifiers = format_modifiers_afbc_g12a; -drm_universal_plane_init (priv->drm, plane,0xFF , - &meson_plane_funcs, - supported_drm_formats, -ARRAY_SIZE (supported_drm_formats), - format_modifiers, -DRM_PLANE_TYPE_PRIMARY ,"meson_primary_plane" ); + ret =drm_universal_plane_init (priv->drm, plane,0xFF , + &meson_plane_funcs, + supported_drm_formats, +ARRAY_SIZE (supported_drm_formats), + format_modifiers, +DRM_PLANE_TYPE_PRIMARY ,"meson_primary_plane" ); +if (ret) { +devm_kfree (priv->drm->dev, meson_plane); +return ret; + }drm_plane_helper_add (plane, &meson_plane_helper_funcs);
drivers/gpu/drm/xe/xe_force_wake.h +12 -1
@@ -24,14 +24,25 @@ static inline int xe_force_wake_ref(struct xe_force_wake *fw, enum xe_force_wake_domains domain) { - xe_gt_assert(fw->gt, domain); + xe_gt_assert(fw->gt, domain != XE_FORCEWAKE_ALL);return fw->domains[ffs (domain) -1 ].ref; } +/** +* xe_force_wake_assert_held - asserts domain is awake +* @fw : xe_force_wake structure +* @domain: xe_force_wake_domains apart from XE_FORCEWAKE_ALL +* +* xe_force_wake_assert_held() is designed to confirm a particular +* forcewake domain's wakefulness; it doesn't verify the wakefulness of +* multiple domains. Make sure the caller doesn't input multiple +* domains(XE_FORCEWAKE_ALL) as a parameter. +*/ static inline void xe_force_wake_assert_held (struct xe_force_wake *fw,enum xe_force_wake_domains domain) { +xe_gt_assert (fw->gt, domain !=XE_FORCEWAKE_ALL );xe_gt_assert (fw->gt, fw->awake_domains & domain); }
drivers/gpu/drm/xe/xe_gt_ccs_mode.c +2 -2
@@ -68,8 +68,8 @@ static void __xe_gt_apply_ccs_mode(struct xe_gt *gt, u32 num_engines)xe_mmio_write32 (gt,CCS_MODE , mode); -xe_gt_info (gt,"CCS_MODE=%x config:%08x, num_engines:%d, num_slices:%d\n" , - mode, config, num_engines, num_slices); +xe_gt_dbg (gt,"CCS_MODE=%x config:%08x, num_engines:%d, num_slices:%d\n" , + mode, config, num_engines, num_slices); }void xe_gt_apply_ccs_mode (struct xe_gt *gt)
drivers/gpu/drm/xe/xe_gt_topology.c +3 -1
@@ -108,7 +108,9 @@ gen_l3_mask_from_pattern(struct xe_device *xe, xe_l3_bank_mask_t dst, {unsigned long bit; -xe_assert (xe,fls (mask) <= patternbits); +xe_assert (xe,find_last_bit (pattern,XE_MAX_L3_BANK_MASK_BITS ) < patternbits || +bitmap_empty (pattern,XE_MAX_L3_BANK_MASK_BITS )); +xe_assert (xe, !mask || patternbits * (__fls (mask) +1 ) <=XE_MAX_L3_BANK_MASK_BITS );for_each_set_bit (bit, &mask,32 ) {xe_l3_bank_mask_t shifted_pattern = {};
drivers/gpu/drm/xe/xe_guc_relay.c +8 -1
@@ -757,7 +757,14 @@ static void relay_process_incoming_action(struct xe_guc_relay *relay)static bool relay_needs_worker (struct xe_guc_relay *relay) { -return !list_empty (&relay->incoming_actions); +bool is_empty; + +spin_lock (&relay->lock); + is_empty =list_empty (&relay->incoming_actions); +spin_unlock (&relay->lock); + +return !is_empty; + }static void relay_kick_worker (struct xe_guc_relay *relay)
drivers/gpu/drm/xe/xe_guc_submit.c +5 -0
@@ -1551,6 +1551,11 @@ static void deregister_exec_queue(struct xe_guc *guc, struct xe_exec_queue *q) q->guc->id, }; +xe_gt_assert (guc_to_gt (guc),exec_queue_destroyed (q)); +xe_gt_assert (guc_to_gt (guc),exec_queue_registered (q)); +xe_gt_assert (guc_to_gt (guc), !exec_queue_pending_disable (q)); +xe_gt_assert (guc_to_gt (guc), !exec_queue_pending_enable (q)); +trace_xe_exec_queue_deregister (q);xe_guc_ct_send_g2h_handler (&guc->ct, action,ARRAY_SIZE (action));
drivers/gpu/drm/xe/xe_hwmon.c +7 -2
@@ -551,12 +551,17 @@ xe_hwmon_curr_is_visible(const struct xe_hwmon *hwmon, u32 attr, int channel) {u32 uval; +/* hwmon sysfs attribute of current available only for package */ +if (channel !=CHANNEL_PKG ) +return 0 ; +switch (attr) {case hwmon_curr_crit: -case hwmon_curr_label: -if (channel ==CHANNEL_PKG )return (xe_hwmon_pcode_read_i1 (hwmon->gt, &uval) || (uval &POWER_SETUP_I1_WATTS )) ?0 :0644 ; +case hwmon_curr_label: +return (xe_hwmon_pcode_read_i1 (hwmon->gt, &uval) || + (uval &POWER_SETUP_I1_WATTS )) ?0 :0444 ;break ;default :return 0 ;
drivers/gpu/drm/xe/xe_migrate.c +42 -13
104 lines not on this page · raw message
drivers/gpu/drm/xe/xe_pcode.c +5 -1
@@ -10,6 +10,7 @@#include <drm/drm_managed.h> +#include "xe_assert.h" #include "xe_device.h" #include "xe_gt.h" #include "xe_mmio.h"
@@ -124,6 +125,8 @@ static int pcode_try_request(struct xe_gt *gt, u32 mbox, {int slept, wait =10 ; +xe_gt_assert (gt, timeout_us >0 ); +for (slept =0 ; slept < timeout_us; slept += wait) {if (locked) *status = pcode_mailbox_rw(gt, mbox, &request, NULL, 1, true,
@@ -169,6 +172,8 @@ int xe_pcode_request(struct xe_gt *gt, u32 mbox, u32 request,u32 status;int ret; +xe_gt_assert (gt, timeout_base_ms <=3 ); +mutex_lock (>->pcode.lock); ret = pcode_try_request(gt, mbox, request, reply_mask, reply, &status,
@@ -188,7 +193,6 @@ int xe_pcode_request(struct xe_gt *gt, u32 mbox, u32 request,*/ drm_err (>_to_xe (gt)->drm,"PCODE timeout, retrying with preemption disabled\n" ); -drm_WARN_ON_ONCE (>_to_xe (gt)->drm, timeout_base_ms >1 );preempt_disable (); ret =pcode_try_request (gt, mbox, request, reply_mask, reply, &status, true,50 *1000 , true);
drivers/hwmon/k10temp.c +27 -9
@@ -153,8 +153,9 @@ static void read_tempreg_nb_f15(struct pci_dev *pdev, u32 *regval)static void read_tempreg_nb_zen (struct pci_dev *pdev,u32 *regval) { -amd_smn_read (amd_pci_dev_to_node_id (pdev), -ZEN_REPORTED_TEMP_CTRL_BASE , regval); +if (amd_smn_read (amd_pci_dev_to_node_id (pdev), +ZEN_REPORTED_TEMP_CTRL_BASE , regval)) + *regval =0 ; }static long get_raw_temp (struct k10temp_data *data)
@@ -205,6 +206,7 @@ static int k10temp_read_temp(struct device *dev, u32 attr, int channel, long *val) {struct k10temp_data *data =dev_get_drvdata (dev); +int ret = -EOPNOTSUPP ;u32 regval;switch (attr) {
@@ -221,13 +223,17 @@ static int k10temp_read_temp(struct device *dev, u32 attr, int channel, *val =0 ;break ; case 2 ... 13: /* Tccd{1-12} */ -amd_smn_read (amd_pci_dev_to_node_id (data->pdev), -ZEN_CCD_TEMP (data->ccd_offset, channel -2 ), - ®val); + ret =amd_smn_read (amd_pci_dev_to_node_id (data->pdev), +ZEN_CCD_TEMP (data->ccd_offset, channel -2 ), + ®val); + +if (ret) +return ret; + *val = (regval &ZEN_CCD_TEMP_MASK ) *125 -49000 ;break ;default : -return -EOPNOTSUPP ; +return ret; }break ;case hwmon_temp_max:
@@ -243,7 +249,7 @@ static int k10temp_read_temp(struct device *dev, u32 attr, int channel, - ((regval >> 24) & 0xf)) * 500 + 52000;break ;default : -return -EOPNOTSUPP ; +return ret; }return 0 ; }
@@ -381,8 +387,20 @@ static void k10temp_get_ccd_support(struct pci_dev *pdev,int i;for (i =0 ; i < limit; i++) { -amd_smn_read (amd_pci_dev_to_node_id (pdev), -ZEN_CCD_TEMP (data->ccd_offset, i), ®val); +/* +* Ignore inaccessible CCDs. +* +* Some systems will return a register value of 0, and the TEMP_VALID +* bit check below will naturally fail. +* +* Other systems will return a PCI_ERROR_RESPONSE (0xFFFFFFFF) for +* the register value. And this will incorrectly pass the TEMP_VALID +* bit check. +*/ +if (amd_smn_read (amd_pci_dev_to_node_id (pdev), +ZEN_CCD_TEMP (data->ccd_offset, i), ®val)) +continue ; +if (regval &ZEN_CCD_TEMP_VALID ) data->show_temp |=BIT (TCCD_BIT (i)); }
drivers/hwspinlock/hwspinlock_core.c +28 -0
@@ -305,6 +305,34 @@ void __hwspin_unlock(struct hwspinlock *hwlock, int mode, unsigned long *flags) }EXPORT_SYMBOL_GPL (__hwspin_unlock); +/** +* hwspin_lock_bust() - bust a specific hwspinlock +* @hwlock: a previously-acquired hwspinlock which we want to bust +* @id: identifier of the remote lock holder, if applicable +* +* This function will bust a hwspinlock that was previously acquired as +* long as the current owner of the lock matches the id given by the caller. +* +* Context: Process context. +* +* Returns: 0 on success, or -EINVAL if the hwspinlock does not exist, or +* the bust operation fails, and -EOPNOTSUPP if the bust operation is not +* defined for the hwspinlock. +*/ +int hwspin_lock_bust (struct hwspinlock *hwlock,unsigned int id) +{ +if (WARN_ON (!hwlock)) +return -EINVAL ; + +if (!hwlock->bank->ops->bust) { +pr_err ("bust operation not defined\n" ); +return -EOPNOTSUPP ; + } + +return hwlock->bank->ops->bust (hwlock, id); +} +EXPORT_SYMBOL_GPL (hwspin_lock_bust); +/** * of_hwspin_lock_simple_xlate - translate hwlock_spec to return a lock id * @hwlock_spec: hwlock specifier as found in the device tree
drivers/hwspinlock/hwspinlock_internal.h +3 -0
@@ -21,6 +21,8 @@ struct hwspinlock_device;* @trylock: make a single attempt to take the lock. returns 0 on * failure and true on success. may _not_ sleep. * @unlock: release the lock. always succeed. may _not_ sleep. +* @bust: optional, platform-specific bust handler, called by hwspinlock +* core to bust a specific lock. * @relax: optional, platform-specific relax handler, called by hwspinlock * core while spinning on a lock, between two successive * invocations of @trylock. may _not_ sleep.
@@ -28,6 +30,7 @@ struct hwspinlock_device;struct hwspinlock_ops {int (*trylock)(struct hwspinlock *lock);void (*unlock)(struct hwspinlock *lock); +int (*bust)(struct hwspinlock *lock,unsigned int id);void (*relax)(struct hwspinlock *lock); };
drivers/iio/industrialio-core.c +6 -1
@@ -758,9 +758,11 @@ static ssize_t iio_read_channel_info(struct device *dev,INDIO_MAX_RAW_ELEMENTS , vals, &val_len, this_attr->address); - else + else if (indio_dev->info->read_raw) ret = indio_dev->info->read_raw (indio_dev, this_attr->c, &vals[0 ], &vals[1 ], this_attr->address); + else + return -EINVAL;if (ret <0 )return ret;
@@ -842,6 +844,9 @@ static ssize_t iio_read_channel_info_avail(struct device *dev,int length;int type; +if (!indio_dev->info->read_avail) +return -EINVAL ; + ret = indio_dev->info->read_avail (indio_dev, this_attr->c, &vals, &type, &length, this_attr->address);
drivers/iio/industrialio-event.c +9 -0
@@ -285,6 +285,9 @@ static ssize_t iio_ev_state_store(struct device *dev,if (ret <0 )return ret; +if (!indio_dev->info->write_event_config) +return -EINVAL ; + ret = indio_dev->info->write_event_config (indio_dev, this_attr->c,iio_ev_attr_type (this_attr),iio_ev_attr_dir (this_attr), val);
@@ -300,6 +303,9 @@ static ssize_t iio_ev_state_show(struct device *dev,struct iio_dev_attr *this_attr =to_iio_dev_attr (attr);int val; +if (!indio_dev->info->read_event_config) +return -EINVAL ; + val = indio_dev->info->read_event_config (indio_dev, this_attr->c,iio_ev_attr_type (this_attr),iio_ev_attr_dir (this_attr));
@@ -318,6 +324,9 @@ static ssize_t iio_ev_value_show(struct device *dev,int val, val2, val_arr[2 ];int ret; +if (!indio_dev->info->read_event_value) +return -EINVAL ; + ret = indio_dev->info->read_event_value(indio_dev, this_attr->c, iio_ev_attr_type(this_attr), iio_ev_attr_dir(this_attr), iio_ev_attr_info(this_attr),
drivers/iio/inkern.c +22 -10
@@ -543,6 +543,7 @@ EXPORT_SYMBOL_GPL(devm_iio_channel_get_all);static int iio_channel_read (struct iio_channel *chan,int *val,int *val2,enum iio_chan_info_enum info) { +const struct iio_info *iio_info = chan->indio_dev->info;int unused;int vals[INDIO_MAX_RAW_ELEMENTS ];int ret;
@@ -554,15 +555,18 @@ static int iio_channel_read(struct iio_channel *chan, int *val, int *val2,if (!iio_channel_has_info (chan->channel, info))return -EINVAL ; -if (chan->indio_dev->info->read_raw_multi) { - ret = chan->indio_dev->info->read_raw_multi (chan->indio_dev, - chan->channel,INDIO_MAX_RAW_ELEMENTS , - vals, &val_len, info); +if (iio_info->read_raw_multi) { + ret = iio_info->read_raw_multi (chan->indio_dev, + chan->channel, +INDIO_MAX_RAW_ELEMENTS , + vals, &val_len, info); *val = vals[0 ]; *val2 = vals[1 ]; + }else if (iio_info->read_raw) { + ret = iio_info->read_raw (chan->indio_dev, + chan->channel, val, val2, info); }else { - ret = chan->indio_dev->info->read_raw (chan->indio_dev, - chan->channel, val, val2, info); +return -EINVAL ; }return ret;
@@ -750,11 +754,15 @@ static int iio_channel_read_avail(struct iio_channel *chan, const int **vals, int *type, int *length, enum iio_chan_info_enum info) { + const struct iio_info *iio_info = chan->indio_dev->info; +if (!iio_channel_has_available (chan->channel, info))return -EINVAL ; -return chan->indio_dev->info->read_avail (chan->indio_dev, chan->channel, - vals, type, length, info); +if (iio_info->read_avail) +return iio_info->read_avail (chan->indio_dev, chan->channel, + vals, type, length, info); +return -EINVAL ; } int iio_read_avail_channel_attribute(struct iio_channel *chan,
@@ -917,8 +925,12 @@ EXPORT_SYMBOL_GPL(iio_get_channel_type);static int iio_channel_write (struct iio_channel *chan,int val,int val2,enum iio_chan_info_enum info) { -return chan->indio_dev->info->write_raw (chan->indio_dev, - chan->channel, val, val2, info); +const struct iio_info *iio_info = chan->indio_dev->info; + +if (iio_info->write_raw) +return iio_info->write_raw (chan->indio_dev, + chan->channel, val, val2, info); +return -EINVAL ; } int iio_write_channel_attribute(struct iio_channel *chan, int val, int val2,
drivers/infiniband/hw/efa/efa_com.c +17 -13
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause /* -* Copyright 2018-2021 Amazon.com, Inc. or its affiliates. All rights reserved. +* Copyright 2018-2024 Amazon.com, Inc. or its affiliates. All rights reserved. */ #include "efa_com.h"
@@ -406,8 +406,8 @@ static struct efa_comp_ctx *efa_com_submit_admin_cmd(struct efa_com_admin_queuereturn comp_ctx; } -static void efa_com_handle_single_admin_completion (struct efa_com_admin_queue *aq, -struct efa_admin_acq_entry *cqe) +static int efa_com_handle_single_admin_completion (struct efa_com_admin_queue *aq, +struct efa_admin_acq_entry *cqe) {struct efa_comp_ctx *comp_ctx;u16 cmd_id;
@@ -416,11 +416,11 @@ static void efa_com_handle_single_admin_completion(struct efa_com_admin_queue *a EFA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID); comp_ctx =efa_com_get_comp_ctx (aq, cmd_id, false); -if (!comp_ctx) { +if (comp_ctx->status !=EFA_CMD_SUBMITTED ) {ibdev_err (aq->efa_dev, -"comp_ctx is NULL. Changing the admin queue running state\n" ); -clear_bit (EFA_AQ_STATE_RUNNING_BIT , &aq->state); -return ; +"Received completion with unexpected command id[%d], sq producer: %d, sq consumer: %d, cq consumer: %d\n" , + cmd_id, aq->sq.pc, aq->sq.cc, aq->cq.cc); +return -EINVAL ; } comp_ctx->status =EFA_CMD_COMPLETED ;
@@ -428,14 +428,17 @@ static void efa_com_handle_single_admin_completion(struct efa_com_admin_queue *aif (!test_bit (EFA_AQ_STATE_POLLING_BIT , &aq->state))complete (&comp_ctx->wait_event); + +return 0 ; }static void efa_com_handle_admin_completion (struct efa_com_admin_queue *aq) {struct efa_admin_acq_entry *cqe;u16 queue_size_mask; -u16 comp_num =0 ; +u16 comp_cmds =0 ;u8 phase; +int err;u16 ci; queue_size_mask = aq->depth -1 ;
@@ -453,10 +456,12 @@ static void efa_com_handle_admin_completion(struct efa_com_admin_queue *aq)* phase bit was validated */ dma_rmb (); -efa_com_handle_single_admin_completion (aq, cqe); + err =efa_com_handle_single_admin_completion (aq, cqe); +if (!err) + comp_cmds++; + aq->cq.cc++;
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/pensando/ionic/ionic_lif.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/ath/ath12k/dp_rx.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/fw/debugfs.c +1 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/fw/runtime.h +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/link.c +12 -2
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +0 -6
Lines of this file are not shown. View the raw message.
drivers/net/wireless/intel/iwlwifi/mvm/tests/links.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/wireless/realtek/rtw89/ser.c +6 -2
Lines of this file are not shown. View the raw message.
drivers/pinctrl/renesas/pinctrl-rzg2l.c +8 -4
Lines of this file are not shown. View the raw message.
drivers/platform/chrome/cros_ec_lpc_mec.c +74 -2
76 lines not on this page · raw message
drivers/platform/chrome/cros_ec_lpc_mec.h +11 -0
Lines of this file are not shown. View the raw message.
drivers/platform/x86/amd/pmf/pmf-quirks.c +8 -1
Lines of this file are not shown. View the raw message.
drivers/ras/amd/atl/dehash.c +0 -43
43 lines not on this page · raw message
drivers/ras/amd/atl/map.c +77 -0
77 lines not on this page · raw message
drivers/usb/usbip/stub_rx.c +50 -27
77 lines not on this page · raw message
fs/btrfs/tree-checker.c +47 -0
47 lines not on this page · raw message
net/ipv4/inet_timewait_sock.c +45 -7
52 lines not on this page · raw message
net/wireless/scan.c +34 -12
46 lines not on this page · raw message
sound/core/seq/seq_ump_convert.c +60 -35
95 lines not on this page · raw message
sound/core/ump_convert.c +42 -18
60 lines not on this page · raw message
sound/pci/hda/hda_generic.c +63 -0
63 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_join.sh +158 -2
160 lines not on this page · raw message
tools/testing/selftests/net/mptcp/mptcp_lib.sh +4 -0
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.