Linux 6.10.8
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.10.8 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/devicetree/bindings/usb/microchip,usb2514.yaml | 9 Makefile | 2 arch/arm/boot/dts/nxp/imx/imx6dl-yapp43-common.dtsi | 12 arch/arm/boot/dts/ti/omap/omap3-n900.dts | 2 arch/arm64/boot/dts/freescale/imx8mp-beacon-kit.dts | 12 arch/arm64/boot/dts/freescale/imx93-tqma9352-mba93xxla.dts | 2 arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi | 2 arch/arm64/boot/dts/freescale/imx93.dtsi | 2 arch/arm64/boot/dts/qcom/ipq5332.dtsi | 4 arch/arm64/boot/dts/qcom/x1e80100-crd.dts | 2 arch/arm64/boot/dts/qcom/x1e80100-qcp.dts | 2 arch/arm64/boot/dts/qcom/x1e80100.dtsi | 6 arch/loongarch/include/asm/dma-direct.h | 11 arch/loongarch/kernel/fpu.S | 4 arch/loongarch/kvm/switch.S | 4 drivers/bluetooth/btnxpuart.c | 65 +++- drivers/char/tpm/tpm_ibmvtpm.c | 4 drivers/cpufreq/amd-pstate-ut.c | 13 drivers/cpufreq/amd-pstate.c | 2 drivers/dma/dw-edma/dw-hdma-v0-core.c | 26 - drivers/dma/dw/core.c | 89 +++++- drivers/dma/ti/omap-dma.c | 6 drivers/firmware/microchip/mpfs-auto-update.c | 2 drivers/firmware/qcom/qcom_scm-smc.c | 2 drivers/firmware/sysfb.c | 19 - drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c | 26 - drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 2 drivers/gpu/drm/amd/amdgpu/mes_v11_0.c | 18 - drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 9 drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c | 21 - drivers/gpu/drm/i915/display/intel_dp.c | 12 drivers/gpu/drm/i915/display/intel_dp_mst.c | 40 ++ drivers/gpu/drm/i915/display/intel_dp_mst.h | 1 drivers/gpu/drm/i915/display/vlv_dsi.c | 1 drivers/gpu/drm/v3d/v3d_sched.c | 6 drivers/gpu/drm/vmwgfx/vmwgfx_blit.c | 114 +++++++ drivers/gpu/drm/vmwgfx/vmwgfx_bo.c | 13 drivers/gpu/drm/vmwgfx/vmwgfx_bo.h | 3 drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 4 drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 12 drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 6 drivers/gpu/drm/xe/display/xe_display.c | 33 ++ drivers/gpu/drm/xe/display/xe_display.h | 8 drivers/gpu/drm/xe/xe_exec_queue.c | 5 drivers/gpu/drm/xe/xe_exec_queue_types.h | 14 drivers/gpu/drm/xe/xe_hwmon.c | 2 drivers/gpu/drm/xe/xe_pm.c | 20 + drivers/gpu/drm/xe/xe_preempt_fence.c | 3 drivers/gpu/drm/xe/xe_preempt_fence_types.h | 2 drivers/gpu/drm/xe/xe_vm.c | 60 ++-- drivers/hwmon/pt5161l.c | 4 drivers/iommu/io-pgtable-arm-v7s.c | 3 drivers/iommu/io-pgtable-arm.c | 3 drivers/iommu/io-pgtable-dart.c | 3 drivers/iommu/iommufd/ioas.c | 8 drivers/net/bonding/bond_main.c | 159 +++++++---- drivers/net/ethernet/microsoft/mana/hw_channel.c | 62 ++-- drivers/net/gtp.c | 2 drivers/net/wireless/intel/iwlwifi/fw/acpi.c | 13 drivers/net/wireless/intel/iwlwifi/mvm/ops.c | 2 drivers/net/wireless/intel/iwlwifi/mvm/scan.c | 11 drivers/net/wireless/marvell/mwifiex/cfg80211.c | 32 +- drivers/net/wireless/silabs/wfx/sta.c | 5 drivers/nfc/pn533/pn533.c | 5 drivers/of/platform.c | 2 drivers/phy/freescale/phy-fsl-imx8mq-usb.c | 2 drivers/phy/qualcomm/phy-qcom-qmp-pcie.c | 23 + drivers/phy/xilinx/phy-zynqmp.c | 56 +++ drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c | 55 ++- drivers/pinctrl/pinctrl-rockchip.c | 2 drivers/pinctrl/pinctrl-single.c | 2 drivers/pinctrl/qcom/pinctrl-x1e80100.c | 35 +- drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c | 4 drivers/power/supply/qcom_battmgr.c | 16 - drivers/scsi/aacraid/comminit.c | 2 drivers/scsi/sd.c | 12 drivers/soc/qcom/cmd-db.c | 2 drivers/soc/qcom/pmic_glink.c | 40 +- drivers/soc/qcom/pmic_glink_altmode.c | 17 - drivers/soundwire/stream.c | 8 drivers/usb/cdns3/cdnsp-gadget.h | 3 drivers/usb/cdns3/cdnsp-ring.c | 30 ++ drivers/usb/class/cdc-acm.c | 3 drivers/usb/core/sysfs.c | 1 drivers/usb/dwc3/core.c | 8 drivers/usb/dwc3/dwc3-omap.c | 4 drivers/usb/dwc3/dwc3-st.c | 16 - drivers/usb/dwc3/dwc3-xilinx.c | 7 drivers/usb/dwc3/ep0.c | 3 drivers/usb/gadget/function/uvc_video.c | 1 drivers/usb/serial/option.c | 5 drivers/usb/typec/mux/fsa4480.c | 2 drivers/usb/typec/ucsi/ucsi_glink.c | 43 ++ drivers/video/aperture.c | 11 fs/afs/inode.c | 11 fs/attr.c | 14 fs/backing-file.c | 5 fs/binfmt_elf_fdpic.c | 3 fs/btrfs/bio.c | 26 + fs/btrfs/qgroup.c | 2 fs/ceph/inode.c | 1 fs/erofs/zutil.c | 3 fs/netfs/io.c | 1 fs/netfs/misc.c | 60 +++- fs/netfs/write_collect.c | 7 fs/nfsd/nfs4state.c | 62 ++-- fs/nfsd/nfs4xdr.c | 6 fs/nfsd/state.h | 2 fs/smb/client/cifsglob.h | 1 fs/smb/client/cifssmb.c | 1 fs/smb/client/smb2ops.c | 24 + fs/smb/client/smb2pdu.c | 4 include/linux/fs.h | 1 include/linux/soc/qcom/pmic_glink.h | 11 include/linux/sysfb.h | 4 include/net/bonding.h | 2 include/net/busy_poll.h | 2 include/net/netfilter/nf_tables_ipv4.h | 10 include/net/netfilter/nf_tables_ipv6.h | 5 io_uring/kbuf.c | 2 mm/truncate.c | 4 net/bluetooth/hci_core.c | 10 net/core/net-sysfs.c | 2 net/core/pktgen.c | 4 net/ethtool/ioctl.c | 3 net/ipv4/tcp.c | 18 - net/mptcp/fastopen.c | 4 net/mptcp/options.c | 50 +-- net/mptcp/pm.c | 32 +- net/mptcp/pm_netlink.c | 107 +++++-- net/mptcp/protocol.c | 65 ++-- net/mptcp/protocol.h | 9 net/mptcp/sched.c | 4 net/mptcp/sockopt.c | 4 net/mptcp/subflow.c | 56 ++- net/sched/sch_fq.c | 4 net/sctp/sm_statefuns.c | 22 + security/apparmor/policy_unpack_test.c | 6 security/selinux/hooks.c | 4 security/smack/smack_lsm.c | 4 sound/core/seq/seq_clientmgr.c | 3 sound/pci/hda/cs35l56_hda.c | 2 sound/pci/hda/patch_realtek.c | 2 sound/soc/amd/acp/acp-legacy-mach.c | 2 sound/soc/codecs/cs-amp-lib-test.c | 9 sound/soc/codecs/cs-amp-lib.c | 7 sound/soc/sof/amd/acp-dsp-offset.h | 6 sound/soc/sof/amd/acp.c | 52 ++- sound/soc/sof/amd/acp.h | 9 sound/soc/sof/amd/pci-acp63.c | 2 sound/soc/sof/amd/pci-rmb.c | 2 sound/soc/sof/amd/pci-rn.c | 2 tools/testing/selftests/iommu/iommufd.c | 6 tools/testing/selftests/net/forwarding/local_termination.sh | 4 tools/testing/selftests/net/forwarding/no_forwarding.sh | 3 tools/testing/selftests/net/mptcp/mptcp_join.sh | 57 ++- 156 files changed, 1609 insertions(+), 707 deletions(-)
Abel Vesa (1):
phy: qcom: qmp-pcie: Fix X1E80100 PCIe Gen4 PHY initialisation
Adam Ford (1):
arm64: dts: imx8mp-beacon-kit: Fix Stereo Audio on WM8962
Aleksandr Mishin (1):
nfc: pn533: Add poll mod list filling check
Alex Deucher (4):
drm/amdgpu: align pp_power_profile_mode with kernel docs drm/amdgpu/swsmu: always force a state reprogram on init video/aperture: optionally match the device in sysfb_disable() drm/amdgpu: fix eGPU hotplug regression
Alexander Stein (1):
dt-bindings: usb: microchip,usb2514: Fix reference USB device schema
Alexander Sverdlin (1):
wifi: wfx: repair open network AP mode
Anjaneyulu (1):
wifi: iwlwifi: fw: fix wgds rev 3 exact size
Avraham Stern (1):
wifi: iwlwifi: mvm: allow 6 GHz channels in MLO scan
Ben Hutchings (1):
scsi: aacraid: Fix double-free on probe failure
Bjorn Andersson (3):
soc: qcom: pmic_glink: Actually communicate when remote goes down
soc: qcom: pmic_glink: Fix race during initialization
usb: typec: ucsi: Move unregister out of atomic section
Cong Wang (1):
gtp: fix a potential NULL pointer dereference
Cosmo Chou (1):
hwmon: (pt5161l) Fix invalid temperature reading
David Howells (8):
netfs, ceph: Partially revert "netfs: Replace PG_fscache by setting folio->private and marking dirty"
mm: Fix missing folio invalidation calls during truncation
afs: Fix post-setattr file edit to do truncation correctly
netfs: Fix netfs_release_folio() to say no if folio dirty
netfs: Fix trimming of streaming-write folios in netfs_inval_folio()
netfs: Fix missing iterator reset on retry of short read
netfs: Fix interaction of streaming writes with zero-point tracker
cifs: Fix FALLOC_FL_PUNCH_HOLE support
Ed Tsai (1):
backing-file: convert to using fops->splice_write
Emmanuel Grumbach (1):
wifi: iwlwifi: mvm: take the mutex before running link selection
Eric Dumazet (3):
pktgen: use cpus_read_lock() in pg_net_init()
net_sched: sch_fq: fix incorrect behavior for small weights
net: busy-poll: use ktime_get_ns() instead of local_clock()
Francois Dugast (1):
drm/xe/exec_queue: Rename xe_exec_queue::compute to xe_exec_queue::lr
Gao Xiang (1):
erofs: fix out-of-bound access when z_erofs_gbuf_growsize() partially fails
Gautham R. Shenoy (1):
cpufreq/amd-pstate: Use topology_logical_package_id() instead of logical_die_id()
Greg Kroah-Hartman (1):
Linux 6.10.8
Guenter Roeck (1):
apparmor: fix policy_unpack_test on big endian systems
Haiyang Zhang (1):
net: mana: Fix race of mana_hwc_post_rx_wqe and new hwc response
Hal Feng (1):
pinctrl: starfive: jh7110: Correct the level trigger configuration of iev register
Hans de Goede (1):
drm/i915/dsi: Make Lenovo Yoga Tab 3 X90F DMI match less strict
Hendrik Borghorst (1):
ALSA: hda/realtek: support HP Pavilion Aero 13-bg0xxx Mute LED
Huang-Huang Bao (1):
pinctrl: rockchip: correct RK3328 iomux width flag for GPIO2-B pins
Ian Ray (1):
cdc-acm: Add DISABLE_ECHO quirk for GE HealthCare UI Controller
Imre Deak (1):
drm/i915/dp_mst: Fix MST state after a sink reset
Jack Xiao (1):
drm/amdgpu/mes: fix mes ring buffer overflow
Jamie Bainbridge (1):
ethtool: check device is present when getting link settings
Jason Gunthorpe (2):
iommufd: Do not allow creating areas without READ or WRITE
iommu: Do not return 0 from map_pages if it doesn't do anything
Jeff Layton (4):
nfsd: ensure that nfsd4_fattr_args.context is zeroed out
nfsd: hold reference to delegation when updating it for cb_getattr
nfsd: fix potential UAF in nfsd4_cb_getattr_release fs/nfsd: fix update of inode attrs in CB_GETATTR
Jens Axboe (1):
io_uring/kbuf: return correct iovec count from classic buffer peek
Jianbo Liu (3):
bonding: implement xdo_dev_state_free and call it after deletion
bonding: extract the use of real_device into local variable
bonding: change ipsec_lock from spin lock to mutex
Johan Hovold (4):
arm64: dts: qcom: x1e80100-crd: fix PCIe4 PHY supply
arm64: dts: qcom: x1e80100-qcp: fix PCIe4 PHY supply
arm64: dts: qcom: x1e80100: add missing PCIe minimum OPP
arm64: dts: qcom: x1e80100: fix PCIe domain numbers
John Sweeney (1):
ALSA: hda/realtek: Enable mute/micmute LEDs on HP Laptop 14-ey0xxx
Josef Bacik (1):
btrfs: run delayed iputs when flushing delalloc
Karthik Poosa (1):
drm/xe/hwmon: Fix WRITE_I1 param from u32 to u16
Kees Cook (1):
dmaengine: ti: omap-dma: Initialize sglen after allocation
Konrad Dybcio (2):
pinctrl: qcom: x1e80100: Update PDC hwirq map
pinctrl: qcom: x1e80100: Fix special pin offsets
Krzysztof Kozlowski (5):
soundwire: stream: fix programming slave ports for non-continous port maps
usb: dwc3: xilinx: add missing depopulate in probe error path
usb: dwc3: omap: add missing depopulate in probe error path
usb: dwc3: st: fix probed platform device ref count on probe error path
usb: dwc3: st: add missing depopulate in probe error path
Luca Weiss (1):
usb: typec: fsa4480: Relax CHIP_ID check
Luiz Augusto von Dentz (1):
Bluetooth: hci_core: Fix not handling hibernation actions
Ma Ke (2):
pinctrl: single: fix potential NULL dereference in pcs_get_function() drm/amd/display: avoid using null object of framebuffer
Maarten Lankhorst (1):
drm/xe/display: Make display suspend/resume work on discrete
Mario Limonciello (1):
cpufreq/amd-pstate-ut: Don't check for highest perf matching on prefcore
Markus Niebel (2):
arm64: dts: freescale: imx93-tqma9352: fix CMA alloc-ranges
arm64: dts: freescale: imx93-tqma9352-mba93xxla: fix typo
Matthew Auld (1):
drm/xe: prevent UAF around preempt fence
Matthieu Baerts (NGI0) (16):
mptcp: close subflow when receiving TCP+FIN
mptcp: sched: check both backup in retrans
mptcp: pr_debug: add missing \n at the end
mptcp: pm: reuse ID 0 after delete and re-add
mptcp: pm: skip connecting to already established sf
mptcp: pm: reset MPC endp ID when re-added
mptcp: pm: send ACK on an active subflow
mptcp: pm: fix RM_ADDR ID for the initial subflow
mptcp: pm: do not remove already closed subflows
mptcp: pm: fix ID 0 endp usage after multiple re-creations
mptcp: avoid duplicated SUB_CLOSED events
mptcp: pm: ADD_ADDR 0 is not a new address
selftests: mptcp: join: cannot rm sf if closed
selftests: mptcp: join: check removing ID 0 endpoint
selftests: mptcp: join: no extra msg if no counter
selftests: mptcp: join: check re-re-adding ID 0 endp
Max Filippov (1):
binfmt_elf_fdpic: fix AUXV size calculation when ELF_HWCAP2 is defined
Miao Wang (1):
LoongArch: Remove the unused dma-direct.h
Michael Grzeschik (1):
usb: dwc3: ep0: Don't reset resource alloc flag (including ep0)
Michal Vokáč (1):
ARM: dts: imx6dl-yapp43: Increase LED current to match the yapp4 HW design
Mrinmay Sarkar (2):
dmaengine: dw-edma: Fix unmasking STOP and ABORT interrupts for HDMA
dmaengine: dw-edma: Do not enable watermark interrupts for HDMA
Murali Nalajala (1):
firmware: qcom: scm: Mark get_wq_ctx() as atomic call
Neeraj Sanjay Kale (2):
Bluetooth: btnxpuart: Handle FW Download Abort scenario
Bluetooth: btnxpuart: Fix random crash seen while removing driver
NeilBrown (1):
nfsd: fix nfsd4_deleg_getattr_conflict in presence of third party lease
Nícolas F. R. A. Prado (1):
pinctrl: mediatek: common-v2: Fix broken bias-disable for PULL_PU_PD_RSEL_TYPE
Olga Kornievskaia (1):
nfsd: prevent panic for nfsv4.0 closed files in nfs4_show_open
Ondrej Mosnacek (1):
sctp: fix association labeling in the duplicate COOKIE-ECHO case
Pablo Neira Ayuso (2):
netfilter: nf_tables: restore IP sanity checks for netdev/egress
netfilter: nf_tables_ipv6: consider network offset in netdev/egress validation
Pawel Laszczak (2):
usb: cdnsp: fix incorrect index in cdnsp_get_hw_deq function
usb: cdnsp: fix for Link TRB with TC
Petr Machata (2):
selftests: forwarding: no_forwarding: Down ports on cleanup
selftests: forwarding: local_termination: Down ports on cleanup
Piyush Mehta (1):
phy: xilinx: phy-zynqmp: Fix SGMII linkup failure on resume
Qu Wenruo (1):
btrfs: fix a use-after-free when hitting errors inside btrfs_submit_chunk()
Richard Fitzgerald (2):
ASoC: cs-amp-lib-test: Force test calibration blob entries to be valid
ASoC: cs-amp-lib: Ignore empty UEFI calibration entries
Rodrigo Vivi (1):
drm/xe: Prepare display for D3Cold
Sascha Hauer (1):
wifi: mwifiex: duplicate static structs used in driver instances
Scott Mayhew (1):
selinux,smack: don't bypass permissions check in inode_setsecctx hook
Selvarasu Ganesan (1):
usb: dwc3: core: Prevent USB core invalid event buffer address access
Serge Semin (2):
dmaengine: dw: Add peripheral bus width verification
dmaengine: dw: Add memory bus width verification
Shenwei Wang (1):
arm64: dts: imx93: update default value for snps,clk-csr
Sicelo A. Mhlongo (1):
ARM: dts: omap3-n900: correct the accelerometer orientation
Simon Trimmer (1):
ALSA: hda: cs35l56: Don't use the device index as a calibration index
Stefan Berger (1):
tpm: ibmvtpm: Call tpm2_sessions_init() to initialize session support
Stefan Metzmacher (2):
smb/client: avoid dereferencing rdata=NULL in smb2_new_read_req() smb/client: remove unused rq_iter_size from struct smb_rqst
Steve Wilkins (1):
firmware: microchip: fix incorrect error report of programming:timeout on success
Takashi Iwai (1):
ALSA: seq: Skip event type filtering for UMP events
Thorsten Blum (1):
drm/xe/vm: Simplify if condition
Tiezhu Yang (1):
LoongArch: Add ifdefs to fix LSX and LASX related warnings
Tvrtko Ursulin (1):
drm/v3d: Disable preemption while updating GPU stats
Varadarajan Narayanan (1):
arm64: dts: qcom: ipq5332: Fix interrupt trigger type for usb
Victor Lu (1):
drm/amdgpu: Do not wait for MP0_C2PMSG_33 IFWI init in SRIOV
Vijendar Mukunda (3):
ASoC: SOF: amd: move iram-dram fence register programming sequence
ASoC: SOF: amd: Fix for incorrect acp error register offsets
ASoC: SOF: amd: Fix for acp init sequence
Volodymyr Babchuk (1):
soc: qcom: cmd-db: Map shared memory as WC, not WB
Xu Yang (2):
phy: fsl-imx8mq-usb: fix tuning parameter name
usb: gadget: uvc: queue pump work in uvcg_video_enable()
Xueming Feng (1):
tcp: fix forever orphan socket caused by tcp_abort
Yihang Li (1):
scsi: sd: Ignore command SYNCHRONIZE CACHE error if format in progress
Yuntao Liu (1):
ASoC: amd: acp: fix module autoloading
ZHANG Yuntian (1):
USB: serial: option: add MeiG Smart SRM825L
Zack Rusin (3):
drm/vmwgfx: Prevent unmapping active read buffers drm/vmwgfx: Fix prime with external buffers drm/vmwgfx: Disable coherent dumb buffers without 3d
Zijun Hu (1):
usb: core: sysfs: Unmerge @usb3_hardware_lpm_attr_group in remove_power_attributes()
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/usb/microchip,usb2514.yaml +8 -1
@@ -10,7 +10,7 @@ maintainers: - Fabio Estevam <[email protected]> allOf: - - $ref: usb-hcd.yaml# + - $ref: usb-device.yaml# properties: compatible:
@@ -35,6 +35,13 @@ required: - compatible - reg +patternProperties: + "^.*@[0-9a-f]{1,2}$": + description: The hard wired USB devices + type: object + $ref: /schemas/usb/usb-device.yaml + additionalProperties: true + unevaluatedProperties: false examples:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 10 -SUBLEVEL = 7 +SUBLEVEL = 8 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm/boot/dts/nxp/imx/imx6dl-yapp43-common.dtsi +6 -6
@@ -274,24 +274,24 @@ leds: led-controller@30 { led@0 { chan-name = "R"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; + led-cur = /bits/ 8 <0x6e>; + max-cur = /bits/ 8 <0xc8>; reg = <0>; color = <LED_COLOR_ID_RED>; }; led@1 { chan-name = "G"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; + led-cur = /bits/ 8 <0xbe>; + max-cur = /bits/ 8 <0xc8>; reg = <1>; color = <LED_COLOR_ID_GREEN>; }; led@2 { chan-name = "B"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; + led-cur = /bits/ 8 <0xbe>; + max-cur = /bits/ 8 <0xc8>; reg = <2>; color = <LED_COLOR_ID_BLUE>; };
arch/arm/boot/dts/ti/omap/omap3-n900.dts +1 -1
@@ -781,7 +781,7 @@ accelerometer@1d { mount-matrix = "-1", "0", "0", "0", "1", "0", - "0", "0", "1"; + "0", "0", "-1"; }; cam1: camera@3e {
arch/arm64/boot/dts/freescale/imx8mp-beacon-kit.dts +5 -7
@@ -211,13 +211,12 @@ sound-wm8962 { simple-audio-card,cpu { sound-dai = <&sai3>; + frame-master; + bitclock-master; }; simple-audio-card,codec { sound-dai = <&wm8962>; - clocks = <&clk IMX8MP_CLK_IPP_DO_CLKO1>; - frame-master; - bitclock-master; }; }; };
@@ -499,10 +498,9 @@ &pcie_phy { &sai3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sai3>; - assigned-clocks = <&clk IMX8MP_CLK_SAI3>, - <&clk IMX8MP_AUDIO_PLL2> ; - assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL2_OUT>; - assigned-clock-rates = <12288000>, <361267200>; + assigned-clocks = <&clk IMX8MP_CLK_SAI3>; + assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>; + assigned-clock-rates = <12288000>; fsl,sai-mclk-direction-output; status = "okay"; };
arch/arm64/boot/dts/freescale/imx93-tqma9352-mba93xxla.dts +1 -1
@@ -438,7 +438,7 @@ &usdhc2 { pinctrl-0 = <&pinctrl_usdhc2_hs>, <&pinctrl_usdhc2_gpio>; pinctrl-1 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; pinctrl-2 = <&pinctrl_usdhc2_uhs>, <&pinctrl_usdhc2_gpio>; - cd-gpios = <&gpio3 00 GPIO_ACTIVE_LOW>; + cd-gpios = <&gpio3 0 GPIO_ACTIVE_LOW>; vmmc-supply = <®_usdhc2_vmmc>; bus-width = <4>; no-sdio;
arch/arm64/boot/dts/freescale/imx93-tqma9352.dtsi +1 -1
@@ -19,7 +19,7 @@ reserved-memory { linux,cma { compatible = "shared-dma-pool"; reusable; - alloc-ranges = <0 0x60000000 0 0x40000000>; + alloc-ranges = <0 0x80000000 0 0x40000000>; size = <0 0x10000000>; linux,cma-default; };
arch/arm64/boot/dts/freescale/imx93.dtsi +1 -1
@@ -1105,7 +1105,7 @@ eqos: ethernet@428a0000 { <&clk IMX93_CLK_SYS_PLL_PFD0_DIV2>; assigned-clock-rates = <100000000>, <250000000>; intf_mode = <&wakeupmix_gpr 0x28>; - snps,clk-csr = <0>; + snps,clk-csr = <6>; nvmem-cells = <ð_mac2>; nvmem-cell-names = "mac-address"; status = "disabled";
arch/arm64/boot/dts/qcom/ipq5332.dtsi +2 -2
@@ -321,8 +321,8 @@ usb: usb@8af8800 { reg = <0x08af8800 0x400>; interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 53 IRQ_TYPE_EDGE_BOTH>, - <GIC_SPI 52 IRQ_TYPE_EDGE_BOTH>; + <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 52 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "pwr_event", "dp_hs_phy_irq", "dm_hs_phy_irq";
arch/arm64/boot/dts/qcom/x1e80100-crd.dts +1 -1
@@ -648,7 +648,7 @@ &pcie4 { }; &pcie4_phy { - vdda-phy-supply = <&vreg_l3j_0p8>; + vdda-phy-supply = <&vreg_l3i_0p8>; vdda-pll-supply = <&vreg_l3e_1p2>; status = "okay";
arch/arm64/boot/dts/qcom/x1e80100-qcp.dts +1 -1
@@ -459,7 +459,7 @@ &pcie4 { }; &pcie4_phy { - vdda-phy-supply = <&vreg_l3j_0p8>; + vdda-phy-supply = <&vreg_l3i_0p8>; vdda-pll-supply = <&vreg_l3e_1p2>; status = "okay";
arch/arm64/boot/dts/qcom/x1e80100.dtsi +4 -2
@@ -2756,7 +2756,7 @@ pcie6a: pci@1bf8000 { dma-coherent; - linux,pci-domain = <7>; + linux,pci-domain = <6>; num-lanes = <2>; interrupts = <GIC_SPI 773 IRQ_TYPE_LEVEL_HIGH>,
@@ -2814,6 +2814,7 @@ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, "link_down"; power-domains = <&gcc GCC_PCIE_6A_GDSC>; + required-opps = <&rpmhpd_opp_nom>; phys = <&pcie6a_phy>; phy-names = "pciephy";
@@ -2877,7 +2878,7 @@ pcie4: pci@1c08000 { dma-coherent; - linux,pci-domain = <5>; + linux,pci-domain = <4>; num-lanes = <2>; interrupts = <GIC_SPI 141 IRQ_TYPE_LEVEL_HIGH>,
@@ -2935,6 +2936,7 @@ &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>, "link_down"; power-domains = <&gcc GCC_PCIE_4_GDSC>; + required-opps = <&rpmhpd_opp_nom>; phys = <&pcie4_phy>; phy-names = "pciephy";
arch/loongarch/include/asm/dma-direct.h deleted +0 -11
@@ -1,11 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* -* Copyright (C) 2020-2022 Loongson Technology Corporation Limited -*/ -#ifndef _LOONGARCH_DMA_DIRECT_H -#define _LOONGARCH_DMA_DIRECT_H - -dma_addr_t phys_to_dma (struct device *dev,phys_addr_t paddr); -phys_addr_t dma_to_phys (struct device *dev,dma_addr_t daddr); - -#endif /* _LOONGARCH_DMA_DIRECT_H */
arch/loongarch/kernel/fpu.S +4 -0
@@ -530,6 +530,10 @@ SYM_FUNC_END(_restore_lasx_context) #ifdef CONFIG_CPU_HAS_LBT STACK_FRAME_NON_STANDARD _restore_fp +#ifdef CONFIG_CPU_HAS_LSX STACK_FRAME_NON_STANDARD _restore_lsx +#endif +#ifdef CONFIG_CPU_HAS_LASX STACK_FRAME_NON_STANDARD _restore_lasx #endif +#endif
arch/loongarch/kvm/switch.S +4 -0
@@ -277,6 +277,10 @@ SYM_DATA(kvm_enter_guest_size, .quad kvm_enter_guest_end - kvm_enter_guest) #ifdef CONFIG_CPU_HAS_LBT STACK_FRAME_NON_STANDARD kvm_restore_fpu +#ifdef CONFIG_CPU_HAS_LSX STACK_FRAME_NON_STANDARD kvm_restore_lsx +#endif +#ifdef CONFIG_CPU_HAS_LASX STACK_FRAME_NON_STANDARD kvm_restore_lasx #endif +#endif
drivers/bluetooth/btnxpuart.c +50 -15
119 lines not on this page · raw message
drivers/char/tpm/tpm_ibmvtpm.c +4 -0
@@ -698,6 +698,10 @@ static int tpm_ibmvtpm_probe(struct vio_dev *vio_dev, rc =tpm2_get_cc_attrs_tbl (chip);if (rc) goto init_irq_cleanup; + + rc =tpm2_sessions_init (chip); +if (rc) + goto init_irq_cleanup; }return tpm_chip_register (chip);
drivers/cpufreq/amd-pstate-ut.c +8 -5
@@ -160,14 +160,17 @@ static void amd_pstate_ut_check_perf(u32 index) lowest_perf =AMD_CPPC_LOWEST_PERF (cap1); } -if ((highest_perf !=READ_ONCE (cpudata->highest_perf)) || - (nominal_perf !=READ_ONCE (cpudata->nominal_perf)) || +if (highest_perf !=READ_ONCE (cpudata->highest_perf) && !cpudata->hw_prefcore) { +pr_err ("%s cpu%d highest=%d %d highest perf doesn't match\n" , + __func__, cpu, highest_perf, cpudata->highest_perf); + goto skip_test; + } +if ((nominal_perf !=READ_ONCE (cpudata->nominal_perf)) || (lowest_nonlinear_perf !=READ_ONCE (cpudata->lowest_nonlinear_perf)) || (lowest_perf !=READ_ONCE (cpudata->lowest_perf))) { amd_pstate_ut_cases[index].result =AMD_PSTATE_UT_RESULT_FAIL ; -pr_err ("%s cpu%d highest=%d %d nominal=%d %d lowest_nonlinear=%d %d lowest=%d %d, they should be equal!\n" , - __func__, cpu, highest_perf, cpudata->highest_perf, - nominal_perf, cpudata->nominal_perf, +pr_err ("%s cpu%d nominal=%d %d lowest_nonlinear=%d %d lowest=%d %d, they should be equal!\n" , + __func__, cpu, nominal_perf, cpudata->nominal_perf, lowest_nonlinear_perf, cpudata->lowest_nonlinear_perf, lowest_perf, cpudata->lowest_perf); goto skip_test;
drivers/cpufreq/amd-pstate.c +1 -1
@@ -329,7 +329,7 @@ static inline int pstate_enable(bool enable)return 0 ;for_each_present_cpu (cpu) { -unsigned long logical_id =topology_logical_die_id (cpu); +unsigned long logical_id =topology_logical_package_id (cpu);if (test_bit (logical_id, &logical_proc_id_mask))continue ;
drivers/dma/dw-edma/dw-hdma-v0-core.c +8 -18
@@ -17,8 +17,8 @@ enum dw_hdma_control {DW_HDMA_V0_CB =BIT (0 ),DW_HDMA_V0_TCB =BIT (1 ),DW_HDMA_V0_LLP =BIT (2 ), -DW_HDMA_V0_LIE =BIT (3 ), -DW_HDMA_V0_RIE =BIT (4 ), +DW_HDMA_V0_LWIE =BIT (3 ), +DW_HDMA_V0_RWIE =BIT (4 ),DW_HDMA_V0_CCS =BIT (8 ), DW_HDMA_V0_LLE = BIT(9), };
@@ -195,25 +195,14 @@ static void dw_hdma_v0_write_ll_link(struct dw_edma_chunk *chunk,static void dw_hdma_v0_core_write_chunk (struct dw_edma_chunk *chunk) {struct dw_edma_burst *child; -struct dw_edma_chan *chan = chunk->chan;u32 control =0 , i =0 ; -int j;if (chunk->cb) control =DW_HDMA_V0_CB ; - j = chunk->bursts_alloc; -list_for_each_entry (child, &chunk->burst->list, list) { - j--; -if (!j) { - control |=DW_HDMA_V0_LIE ; -if (!(chan->dw->chip->flags &DW_EDMA_CHIP_LOCAL )) - control |=DW_HDMA_V0_RIE ; - } - +list_for_each_entry (child, &chunk->burst->list, list)dw_hdma_v0_write_ll_data (chunk, i++, control, child->sz, child->sar, child->dar); - } control =DW_HDMA_V0_LLP |DW_HDMA_V0_TCB ;if (!chunk->cb)
@@ -247,10 +236,11 @@ static void dw_hdma_v0_core_start(struct dw_edma_chunk *chunk, bool first)if (first) {/* Enable engine */ SET_CH_32 (dw, chan->dir, chan->id, ch_en,BIT (0 )); -/* Interrupt enable&unmask - done, abort */ - tmp =GET_CH_32 (dw, chan->dir, chan->id, int_setup) | -HDMA_V0_STOP_INT_MASK |HDMA_V0_ABORT_INT_MASK | -HDMA_V0_LOCAL_STOP_INT_EN |HDMA_V0_LOCAL_ABORT_INT_EN ; +/* Interrupt unmask - stop, abort */ + tmp =GET_CH_32 (dw, chan->dir, chan->id, int_setup); + tmp &= ~(HDMA_V0_STOP_INT_MASK |HDMA_V0_ABORT_INT_MASK ); +/* Interrupt enable - stop, abort */ + tmp |=HDMA_V0_LOCAL_STOP_INT_EN |HDMA_V0_LOCAL_ABORT_INT_EN ;if (!(dw->chip->flags &DW_EDMA_CHIP_LOCAL )) tmp |=HDMA_V0_REMOTE_STOP_INT_EN |HDMA_V0_REMOTE_ABORT_INT_EN ;SET_CH_32 (dw, chan->dir, chan->id, int_setup, tmp);
drivers/dma/dw/core.c +82 -7
131 lines not on this page · raw message
drivers/dma/ti/omap-dma.c +3 -3
@@ -1186,10 +1186,10 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_cyclic( d->dev_addr = dev_addr; d->fi = burst; d->es = es; + d->sglen =1 ; d->sg[0 ].addr = buf_addr; d->sg[0 ].en = period_len / es_bytes[es]; d->sg[0 ].fn = buf_len / period_len; - d->sglen =1 ; d->ccr = c->ccr;if (dir ==DMA_DEV_TO_MEM )
@@ -1258,10 +1258,10 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_memcpy( d->dev_addr = src; d->fi =0 ; d->es = data_type; + d->sglen =1 ; d->sg[0 ].en = len /BIT (data_type); d->sg[0 ].fn =1 ; d->sg[0 ].addr = dest; - d->sglen =1 ; d->ccr = c->ccr; d->ccr |=CCR_DST_AMODE_POSTINC |CCR_SRC_AMODE_POSTINC ;
@@ -1309,6 +1309,7 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_interleaved(if (data_type >CSDP_DATA_TYPE_32 ) data_type =CSDP_DATA_TYPE_32 ; + d->sglen =1 ; sg = &d->sg[0 ]; d->dir =DMA_MEM_TO_MEM ; d->dev_addr = xt->src_start;
@@ -1316,7 +1317,6 @@ static struct dma_async_tx_descriptor *omap_dma_prep_dma_interleaved( sg->en = xt->sgl[0 ].size /BIT (data_type); sg->fn = xt->numf; sg->addr = xt->dst_start; - d->sglen =1 ; d->ccr = c->ccr; src_icg =dmaengine_get_src_icg (xt, &xt->sgl[0 ]);
drivers/firmware/microchip/mpfs-auto-update.c +1 -1
@@ -153,7 +153,7 @@ static enum fw_upload_err mpfs_auto_update_poll_complete(struct fw_upload *fw_up*/ ret =wait_for_completion_timeout (&priv->programming_complete,msecs_to_jiffies (AUTO_UPDATE_TIMEOUT_MS )); -if (ret) +if (!ret)return FW_UPLOAD_ERR_TIMEOUT ;return FW_UPLOAD_ERR_NONE ;
drivers/firmware/qcom/qcom_scm-smc.c +1 -1
@@ -71,7 +71,7 @@ int scm_get_wq_ctx(u32 *wq_ctx, u32 *flags, u32 *more_pending)struct arm_smccc_res get_wq_res;struct arm_smccc_args get_wq_ctx = {0 }; - get_wq_ctx.args[0 ] =ARM_SMCCC_CALL_VAL (ARM_SMCCC_STD_CALL , + get_wq_ctx.args[0 ] =ARM_SMCCC_CALL_VAL (ARM_SMCCC_FAST_CALL ,ARM_SMCCC_SMC_64 ,ARM_SMCCC_OWNER_SIP ,SCM_SMC_FNID (QCOM_SCM_SVC_WAITQ ,QCOM_SCM_WAITQ_GET_WQ_CTX ));
drivers/firmware/sysfb.c +13 -6
@@ -39,6 +39,8 @@ static struct platform_device *pd;static DEFINE_MUTEX (disable_lock);static bool disabled; +static struct device *sysfb_parent_dev (const struct screen_info *si); +static bool sysfb_unregister (void ) {if (IS_ERR_OR_NULL (pd))
@@ -52,6 +54,7 @@ static bool sysfb_unregister(void)/** * sysfb_disable() - disable the Generic System Framebuffers support +* @dev: the device to check if non-NULL * * This disables the registration of system framebuffer devices that match the * generic drivers that make use of the system framebuffer set up by firmware.
@@ -61,17 +64,21 @@ static bool sysfb_unregister(void)* Context: The function can sleep. A @disable_lock mutex is acquired to serialize * against sysfb_init(), that registers a system framebuffer device. */ -void sysfb_disable (void ) +void sysfb_disable (struct device *dev) { +struct screen_info *si = &screen_info; +mutex_lock (&disable_lock); -sysfb_unregister (); - disabled = true; +if (!dev || dev ==sysfb_parent_dev (si)) { +sysfb_unregister (); + disabled = true; + }mutex_unlock (&disable_lock); }EXPORT_SYMBOL_GPL (sysfb_disable);#if defined(CONFIG_PCI ) -static __init bool sysfb_pci_dev_is_enabled (struct pci_dev *pdev) +static bool sysfb_pci_dev_is_enabled (struct pci_dev *pdev) {/* * TODO: Try to integrate this code into the PCI subsystem
@@ -87,13 +94,13 @@ static __init bool sysfb_pci_dev_is_enabled(struct pci_dev *pdev) return true; }#else -static __init bool sysfb_pci_dev_is_enabled (struct pci_dev *pdev) +static bool sysfb_pci_dev_is_enabled (struct pci_dev *pdev) {return false; }#endif -static __init struct device *sysfb_parent_dev (const struct screen_info *si) +static struct device *sysfb_parent_dev (const struct screen_info *si) {struct pci_dev *pdev;
drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c +14 -12
@@ -256,19 +256,21 @@ static int amdgpu_discovery_read_binary_from_mem(struct amdgpu_device *adev,u32 msg;int i, ret =0 ; -/* It can take up to a second for IFWI init to complete on some dGPUs, -* but generally it should be in the 60-100ms range. Normally this starts -* as soon as the device gets power so by the time the OS loads this has long -* completed. However, when a card is hotplugged via e.g., USB4, we need to -* wait for this to complete. Once the C2PMSG is updated, we can -* continue. -*/ +if (!amdgpu_sriov_vf (adev)) { +/* It can take up to a second for IFWI init to complete on some dGPUs, +* but generally it should be in the 60-100ms range. Normally this starts +* as soon as the device gets power so by the time the OS loads this has long +* completed. However, when a card is hotplugged via e.g., USB4, we need to +* wait for this to complete. Once the C2PMSG is updated, we can +* continue. +*/ -for (i =0 ; i <1000 ; i++) { - msg =RREG32 (mmMP0_SMN_C2PMSG_33); -if (msg &0x80000000 ) -break ; -usleep_range (1000 ,1100 ); +for (i =0 ; i <1000 ; i++) { + msg =RREG32 (mmMP0_SMN_C2PMSG_33); +if (msg &0x80000000 ) +break ; +msleep (1 ); + } } vram_size = (uint64_t )RREG32 (mmRCC_CONFIG_MEMSIZE) <<20 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c +2 -0
@@ -212,6 +212,8 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,*/ if (ring->funcs->type ==AMDGPU_RING_TYPE_KIQ ) sched_hw_submission =max (sched_hw_submission,256 ); +if (ring->funcs->type ==AMDGPU_RING_TYPE_MES ) + sched_hw_submission =8 ;else if (ring == &adev->sdma.instance[0 ].page) sched_hw_submission =256 ;
drivers/gpu/drm/amd/amdgpu/mes_v11_0.c +14 -4
@@ -163,7 +163,7 @@ static int mes_v11_0_submit_pkt_and_poll_completion(struct amdgpu_mes *mes,const char *op_str, *misc_op_str;unsigned long flags;u64 status_gpu_addr; -u32 status_offset; +u32 seq, status_offset;u64 *status_ptr;signed long r;int ret;
@@ -191,6 +191,13 @@ static int mes_v11_0_submit_pkt_and_poll_completion(struct amdgpu_mes *mes,if (r) goto error_unlock_free; + seq = ++ring->fence_drv.sync_seq; + r =amdgpu_fence_wait_polling (ring, + seq - ring->fence_drv.num_fences_mask, + timeout); +if (r <1 ) + goto error_undo; + api_status = (struct MES_API_STATUS *)((char *)pkt + api_status_off); api_status->api_completion_fence_addr = status_gpu_addr; api_status->api_completion_fence_value =1 ;
@@ -203,8 +210,7 @@ static int mes_v11_0_submit_pkt_and_poll_completion(struct amdgpu_mes *mes, mes_status_pkt.header.dwsize =API_FRAME_SIZE_IN_DWORDS ; mes_status_pkt.api_status.api_completion_fence_addr = ring->fence_drv.gpu_addr; - mes_status_pkt.api_status.api_completion_fence_value = - ++ring->fence_drv.sync_seq; + mes_status_pkt.api_status.api_completion_fence_value = seq;amdgpu_ring_write_multiple (ring, &mes_status_pkt,sizeof (mes_status_pkt) /4 );
@@ -224,7 +230,7 @@ static int mes_v11_0_submit_pkt_and_poll_completion(struct amdgpu_mes *mes,dev_dbg (adev->dev,"MES msg=%d was emitted\n" , x_pkt->header.opcode); - r =amdgpu_fence_wait_polling (ring, ring->fence_drv.sync_seq, timeout); + r =amdgpu_fence_wait_polling (ring, seq, timeout);if (r <1 || !*status_ptr) {if (misc_op_str)
@@ -247,6 +253,10 @@ static int mes_v11_0_submit_pkt_and_poll_completion(struct amdgpu_mes *mes,amdgpu_device_wb_free (adev, status_offset);return 0 ; +error_undo: +dev_err (adev->dev,"MES ring buffer is full.\n" ); +amdgpu_ring_undo (ring); + error_unlock_free:spin_unlock_irqrestore (&mes->ring_lock, flags);
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c +7 -2
@@ -28,6 +28,7 @@#include <drm/drm_blend.h> #include <drm/drm_gem_atomic_helper.h> #include <drm/drm_plane_helper.h> +#include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_fourcc.h> #include "amdgpu.h"
@@ -854,10 +855,14 @@ static int amdgpu_dm_plane_helper_prepare_fb(struct drm_plane *plane, } afb =to_amdgpu_framebuffer (new_state->fb); - obj = new_state->fb->obj[0 ]; + obj =drm_gem_fb_get_obj (new_state->fb,0 ); +if (!obj) { +DRM_ERROR ("Failed to get obj from framebuffer\n" ); +return -EINVAL ; + } + rbo =gem_to_amdgpu_bo (obj); adev =amdgpu_ttm_adev (rbo->tbo.bdev); - r =amdgpu_bo_reserve (rbo, true);if (r) {dev_err (adev->dev,"fail to reserve bo (%d)\n" , r);
drivers/gpu/drm/amd/pm/swsmu/amdgpu_smu.c +11 -10
@@ -2215,8 +2215,9 @@ static int smu_bump_power_profile_mode(struct smu_context *smu, }static int smu_adjust_power_state_dynamic (struct smu_context *smu, -enum amd_dpm_forced_level level, -bool skip_display_settings) +enum amd_dpm_forced_level level, +bool skip_display_settings, +bool force_update) {int ret =0 ;int index =0 ;
@@ -2245,7 +2246,7 @@ static int smu_adjust_power_state_dynamic(struct smu_context *smu, } } -if (smu_dpm_ctx->dpm_level != level) { +if (force_update || smu_dpm_ctx->dpm_level != level) { ret =smu_asic_set_performance_level (smu, level);if (ret) {dev_err (smu->adev->dev,"Failed to set performance level!" );
@@ -2256,13 +2257,12 @@ static int smu_adjust_power_state_dynamic(struct smu_context *smu, smu_dpm_ctx->dpm_level = level; } -if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_MANUAL && - smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM ) { +if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM ) { index =fls (smu->workload_mask); index = index >0 && index <=WORKLOAD_POLICY_MAX ? index -1 :0 ; workload[0 ] = smu->workload_setting[index]; -if (smu->power_profile_mode != workload[0 ]) +if (force_update || smu->power_profile_mode != workload[0 ])smu_bump_power_profile_mode (smu, workload,0 ); }
@@ -2283,11 +2283,13 @@ static int smu_handle_task(struct smu_context *smu, ret =smu_pre_display_config_changed (smu);if (ret)return ret; - ret =smu_adjust_power_state_dynamic (smu, level, false); + ret =smu_adjust_power_state_dynamic (smu, level, false, false);break ;case AMD_PP_TASK_COMPLETE_INIT : + ret =smu_adjust_power_state_dynamic (smu, level, true, true); +break ;case AMD_PP_TASK_READJUST_POWER_STATE : - ret =smu_adjust_power_state_dynamic (smu, level, true); + ret =smu_adjust_power_state_dynamic (smu, level, true, false);break ;default :break ;
@@ -2334,8 +2336,7 @@ static int smu_switch_power_profile(void *handle, workload[0 ] = smu->workload_setting[index]; } -if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_MANUAL && - smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM ) +if (smu_dpm_ctx->dpm_level !=AMD_DPM_FORCED_LEVEL_PERF_DETERMINISM )smu_bump_power_profile_mode (smu, workload,0 );return 0 ;
drivers/gpu/drm/i915/display/intel_dp.c +12 -0
@@ -5860,6 +5860,18 @@ intel_dp_detect(struct drm_connector *connector,else status = connector_status_disconnected; +if (status != connector_status_disconnected && + !intel_dp_mst_verify_dpcd_state (intel_dp)) +/* +* This requires retrying detection for instance to re-enable +* the MST mode that got reset via a long HPD pulse. The retry +* will happen either via the hotplug handler's retry logic, +* ensured by setting the connector here to SST/disconnected, +* or via a userspace connector probing in response to the +* hotplug uevent sent when removing the MST connectors. +*/ + status = connector_status_disconnected; +if (status == connector_status_disconnected) {memset (&intel_dp->compliance,0 ,sizeof (intel_dp->compliance));memset (intel_connector->dp.dsc_dpcd,0 ,sizeof (intel_connector->dp.dsc_dpcd));
drivers/gpu/drm/i915/display/intel_dp_mst.c +40 -0
@@ -1986,3 +1986,43 @@ bool intel_dp_mst_crtc_needs_modeset(struct intel_atomic_state *state,return false; } + +/* +* intel_dp_mst_verify_dpcd_state - verify the MST SW enabled state wrt. the DPCD +* @intel_dp: DP port object +* +* Verify if @intel_dp's MST enabled SW state matches the corresponding DPCD +* state. A long HPD pulse - not long enough to be detected as a disconnected +* state - could've reset the DPCD state, which requires tearing +* down/recreating the MST topology. +* +* Returns %true if the SW MST enabled and DPCD states match, %false +* otherwise. +*/ +bool intel_dp_mst_verify_dpcd_state (struct intel_dp *intel_dp) +{ +struct intel_display *display =to_intel_display (intel_dp); +struct intel_connector *connector = intel_dp->attached_connector; +struct intel_digital_port *dig_port =dp_to_dig_port (intel_dp); +struct intel_encoder *encoder = &dig_port->base; +int ret; +u8 val; + +if (!intel_dp->is_mst) +return true; + + ret =drm_dp_dpcd_readb (intel_dp->mst_mgr.aux,DP_MSTM_CTRL , &val); + +/* Adjust the expected register value for SST + SideBand. */ +if (ret <0 || val != (DP_MST_EN |DP_UP_REQ_EN |DP_UPSTREAM_IS_SRC )) { +drm_dbg_kms (display->drm, +"[CONNECTOR:%d:%s][ENCODER:%d:%s] MST mode got reset, removing topology (ret=%d, ctrl=0x%02x)\n" , + connector->base.base.id, connector->base.name, + encoder->base.base.id, encoder->base.name, + ret, val); + +return false; + } + +return true; +}
drivers/gpu/drm/i915/display/intel_dp_mst.h +1 -0
@@ -27,5 +27,6 @@ int intel_dp_mst_atomic_check_link(struct intel_atomic_state *state, struct intel_link_bw_limits *limits);bool intel_dp_mst_crtc_needs_modeset (struct intel_atomic_state *state,struct intel_crtc *crtc); +bool intel_dp_mst_verify_dpcd_state (struct intel_dp *intel_dp);#endif /* __INTEL_DP_MST_H__ */
drivers/gpu/drm/i915/display/vlv_dsi.c +0 -1
@@ -1869,7 +1869,6 @@ static const struct dmi_system_id vlv_dsi_dmi_quirk_table[] = {/* Lenovo Yoga Tab 3 Pro YT3-X90F */ .matches = {DMI_MATCH (DMI_SYS_VENDOR ,"Intel Corporation" ), -DMI_MATCH (DMI_PRODUCT_NAME ,"CHERRYVIEW D1 PLATFORM" ), DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"), }, .driver_data = (void *)vlv_dsi_lenovo_yoga_tab3_backlight_fixup,
drivers/gpu/drm/v3d/v3d_sched.c +6 -0
@@ -134,6 +134,8 @@ v3d_job_start_stats(struct v3d_job *job, enum v3d_queue queue)struct v3d_stats *local_stats = &file->stats[queue];u64 now =local_clock (); +preempt_disable (); +write_seqcount_begin (&local_stats->lock); local_stats->start_ns = now;write_seqcount_end (&local_stats->lock);
@@ -141,6 +143,8 @@ v3d_job_start_stats(struct v3d_job *job, enum v3d_queue queue)write_seqcount_begin (&global_stats->lock); global_stats->start_ns = now;write_seqcount_end (&global_stats->lock); + +preempt_enable (); } static void
@@ -162,8 +166,10 @@ v3d_job_update_stats(struct v3d_job *job, enum v3d_queue queue)struct v3d_stats *local_stats = &file->stats[queue];u64 now =local_clock (); +preempt_disable ();v3d_stats_update (local_stats, now);v3d_stats_update (global_stats, now); +preempt_enable (); }static struct dma_fence *v3d_bin_job_run (struct drm_sched_job *sched_job)
drivers/gpu/drm/vmwgfx/vmwgfx_blit.c +110 -4
154 lines not on this page · raw message
drivers/gpu/drm/vmwgfx/vmwgfx_bo.c +11 -2
@@ -360,6 +360,8 @@ void *vmw_bo_map_and_cache_size(struct vmw_bo *vbo, size_t size)void *virtual;int ret; +atomic_inc (&vbo->map_count); + virtual =ttm_kmap_obj_virtual (&vbo->map, ¬_used);if (virtual)return virtual;
@@ -383,11 +385,17 @@ void *vmw_bo_map_and_cache_size(struct vmw_bo *vbo, size_t size)*/ void vmw_bo_unmap (struct vmw_bo *vbo) { +int map_count; +if (vbo->map.bo ==NULL )return ; -ttm_bo_kunmap (&vbo->map); - vbo->map.bo =NULL ; + map_count =atomic_dec_return (&vbo->map_count); + +if (!map_count) { +ttm_bo_kunmap (&vbo->map); + vbo->map.bo =NULL ; + } }
@@ -421,6 +429,7 @@ static int vmw_bo_init(struct vmw_private *dev_priv, vmw_bo->tbo.priority =3 ; vmw_bo->res_tree =RB_ROOT ;xa_init (&vmw_bo->detached_resources); +atomic_set (&vmw_bo->map_count,0 ); params->size =ALIGN (params->size,PAGE_SIZE );drm_gem_private_object_init (vdev, &vmw_bo->tbo.base, params->size);
drivers/gpu/drm/vmwgfx/vmwgfx_bo.h +3 -0
@@ -71,6 +71,8 @@ struct vmw_bo_params {* @map: Kmap object for semi-persistent mappings * @res_tree: RB tree of resources using this buffer object as a backing MOB * @res_prios: Eviction priority counts for attached resources +* @map_count: The number of currently active maps. Will differ from the +* cpu_writers because it includes kernel maps. * @cpu_writers: Number of synccpu write grabs. Protected by reservation when * increased. May be decreased without reservation. * @dx_query_ctx: DX context if this buffer object is used as a DX query MOB
@@ -90,6 +92,7 @@ struct vmw_bo {u32 res_prios[TTM_MAX_BO_PRIORITY ];struct xarray detached_resources; +atomic_t map_count;atomic_t cpu_writers;/* Not ref-counted. Protected by binding_mutex */ struct vmw_resource *dx_query_ctx;
drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +2 -2
@@ -1353,9 +1353,9 @@ void vmw_diff_memcpy(struct vmw_diff_cpy *diff, u8 *dest, const u8 *src,void vmw_memcpy (struct vmw_diff_cpy *diff,u8 *dest,const u8 *src,size_t n); -int vmw_bo_cpu_blit (struct ttm_buffer_object *dst, +int vmw_bo_cpu_blit (struct vmw_bo *dst,u32 dst_offset,u32 dst_stride, -struct ttm_buffer_object *src, +struct vmw_bo *src,u32 src_offset,u32 src_stride,u32 w,u32 h,struct vmw_diff_cpy *diff);
drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c +6 -6
@@ -502,7 +502,7 @@ static void vmw_stdu_bo_cpu_commit(struct vmw_kms_dirty *dirty)container_of (dirty->unit,typeof (*stdu), base);s32 width, height;s32 src_pitch, dst_pitch; -struct ttm_buffer_object *src_bo, *dst_bo; +struct vmw_bo *src_bo, *dst_bo;u32 src_offset, dst_offset;struct vmw_diff_cpy diff =VMW_CPU_BLIT_DIFF_INITIALIZER (stdu->cpp);
@@ -517,11 +517,11 @@ static void vmw_stdu_bo_cpu_commit(struct vmw_kms_dirty *dirty)/* Assume we are blitting from Guest (bo) to Host (display_srf) */ src_pitch = stdu->display_srf->metadata.base_size.width * stdu->cpp; - src_bo = &stdu->display_srf->res.guest_memory_bo->tbo; + src_bo = stdu->display_srf->res.guest_memory_bo; src_offset = ddirty->top * src_pitch + ddirty->left * stdu->cpp; dst_pitch = ddirty->pitch; - dst_bo = &ddirty->buf->tbo; + dst_bo = ddirty->buf; dst_offset = ddirty->fb_top * dst_pitch + ddirty->fb_left * stdu->cpp; (void) vmw_bo_cpu_blit(dst_bo, dst_offset, dst_pitch,
@@ -1170,7 +1170,7 @@ vmw_stdu_bo_populate_update_cpu(struct vmw_du_update_plane *update, void *cmd,struct vmw_diff_cpy diff =VMW_CPU_BLIT_DIFF_INITIALIZER (0 );struct vmw_stdu_update_gb_image *cmd_img = cmd;struct vmw_stdu_update *cmd_update; -struct ttm_buffer_object *src_bo, *dst_bo; +struct vmw_bo *src_bo, *dst_bo;u32 src_offset, dst_offset;s32 src_pitch, dst_pitch;s32 width, height;
@@ -1184,11 +1184,11 @@ vmw_stdu_bo_populate_update_cpu(struct vmw_du_update_plane *update, void *cmd, diff.cpp = stdu->cpp; - dst_bo = &stdu->display_srf->res.guest_memory_bo->tbo; + dst_bo = stdu->display_srf->res.guest_memory_bo; dst_pitch = stdu->display_srf->metadata.base_size.width * stdu->cpp; dst_offset = bb->y1 * dst_pitch + bb->x1 * stdu->cpp; - src_bo = &vfbbo->buffer->tbo; + src_bo = vfbbo->buffer; src_pitch = update->vfb->base.pitches[0 ]; src_offset = bo_update->fb_top * src_pitch + bo_update->fb_left * stdu->cpp;
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c +4 -2
@@ -2283,9 +2283,11 @@ int vmw_dumb_create(struct drm_file *file_priv,/* * Without mob support we're just going to use raw memory buffer * because we wouldn't be able to support full surface coherency -* without mobs +* without mobs. There also no reason to support surface coherency +* without 3d (i.e. gpu usage on the host) because then all the +* contents is going to be rendered guest side. */ -if (!dev_priv->has_mob) { +if (!dev_priv->has_mob || !vmw_supports_3d (dev_priv)) {int cpp =DIV_ROUND_UP (args->bpp,8 );switch (cpp) {
drivers/gpu/drm/xe/display/xe_display.c +29 -4
@@ -302,7 +302,28 @@ static bool suspend_to_idle(void)return false; } -void xe_display_pm_suspend (struct xe_device *xe) +static void xe_display_flush_cleanup_work (struct xe_device *xe) +{ +struct intel_crtc *crtc; + +for_each_intel_crtc (&xe->drm, crtc) { +struct drm_crtc_commit *commit; + +spin_lock (&crtc->base.commit_lock); + commit =list_first_entry_or_null (&crtc->base.commit_list, + struct drm_crtc_commit, commit_entry); +if (commit) +drm_crtc_commit_get (commit); +spin_unlock (&crtc->base.commit_lock); + +if (commit) { +wait_for_completion (&commit->cleanup_done); +drm_crtc_commit_put (commit); + } + } +} + +void xe_display_pm_suspend (struct xe_device *xe,bool runtime) {bool s2idle =suspend_to_idle ();if (!xe->info.enable_display)
@@ -316,7 +337,10 @@ void xe_display_pm_suspend(struct xe_device *xe)if (has_display (xe))drm_kms_helper_poll_disable (&xe->drm); -intel_display_driver_suspend (xe); +if (!runtime) +intel_display_driver_suspend (xe); + +xe_display_flush_cleanup_work (xe);intel_dp_mst_suspend (xe);
@@ -352,7 +376,7 @@ void xe_display_pm_resume_early(struct xe_device *xe)intel_power_domains_resume (xe); } -void xe_display_pm_resume (struct xe_device *xe) +void xe_display_pm_resume (struct xe_device *xe,bool runtime) {if (!xe->info.enable_display)return ;
@@ -367,7 +391,8 @@ void xe_display_pm_resume(struct xe_device *xe)/* MST sideband requires HPD interrupts enabled */ intel_dp_mst_resume (xe); -intel_display_driver_resume (xe); +if (!runtime) +intel_display_driver_resume (xe);intel_hpd_poll_disable (xe);if (has_display (xe))
drivers/gpu/drm/xe/display/xe_display.h +4 -4
@@ -34,10 +34,10 @@ void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir);void xe_display_irq_reset (struct xe_device *xe);void xe_display_irq_postinstall (struct xe_device *xe,struct xe_gt *gt); -void xe_display_pm_suspend (struct xe_device *xe); +void xe_display_pm_suspend (struct xe_device *xe,bool runtime);void xe_display_pm_suspend_late (struct xe_device *xe);void xe_display_pm_resume_early (struct xe_device *xe); -void xe_display_pm_resume (struct xe_device *xe); +void xe_display_pm_resume (struct xe_device *xe,bool runtime);#else
@@ -63,10 +63,10 @@ static inline void xe_display_irq_enable(struct xe_device *xe, u32 gu_misc_iir)static inline void xe_display_irq_reset (struct xe_device *xe) {}static inline void xe_display_irq_postinstall (struct xe_device *xe,struct xe_gt *gt) {} -static inline void xe_display_pm_suspend (struct xe_device *xe) {} +static inline void xe_display_pm_suspend (struct xe_device *xe,bool runtime) {}static inline void xe_display_pm_suspend_late (struct xe_device *xe) {}static inline void xe_display_pm_resume_early (struct xe_device *xe) {} -static inline void xe_display_pm_resume (struct xe_device *xe) {} +static inline void xe_display_pm_resume (struct xe_device *xe,bool runtime) {}#endif /* CONFIG_DRM_XE_DISPLAY */ #endif /* _XE_DISPLAY_H_ */
drivers/gpu/drm/xe/xe_exec_queue.c +2 -3
@@ -67,7 +67,7 @@ static struct xe_exec_queue *__xe_exec_queue_alloc(struct xe_device *xe, q->fence_irq = >->fence_irq[hwe->class]; q->ring_ops = gt->ring_ops[hwe->class]; q->ops = gt->exec_queue_ops; -INIT_LIST_HEAD (&q->compute.link); +INIT_LIST_HEAD (&q->lr.link);INIT_LIST_HEAD (&q->multi_gt_link); q->sched_props.timeslice_us = hwe->eclass->sched_props.timeslice_us;
@@ -631,8 +631,7 @@ int xe_exec_queue_create_ioctl(struct drm_device *dev, void *data,return PTR_ERR (q);if (xe_vm_in_preempt_fence_mode (vm)) { - q->compute.context =dma_fence_context_alloc (1 ); -spin_lock_init (&q->compute.lock); + q->lr.context =dma_fence_context_alloc (1 ); err =xe_vm_add_compute_exec_queue (vm, q);if (XE_IOCTL_DBG (xe, err))
drivers/gpu/drm/xe/xe_exec_queue_types.h +6 -8
@@ -115,19 +115,17 @@ struct xe_exec_queue {enum xe_exec_queue_priority priority; } sched_props; -/** @compute: compute exec queue state */ +/** @lr: long-running exec queue state */ struct { -/** @compute.pfence: preemption fence */ +/** @lr.pfence: preemption fence */ struct dma_fence *pfence; -/** @compute.context: preemption fence context */ +/** @lr.context: preemption fence context */ u64 context; -/** @compute.seqno: preemption fence seqno */ +/** @lr.seqno: preemption fence seqno */ u32 seqno; -/** @compute.link: link into VM's list of exec queues */ +/** @lr.link: link into VM's list of exec queues */ struct list_head link; -/** @compute.lock: preemption fences lock */ -spinlock_t lock; - } compute; + } lr;/** @ops: submission backend exec queue operations */ const struct xe_exec_queue_ops *ops;
drivers/gpu/drm/xe/xe_hwmon.c +1 -1
@@ -443,7 +443,7 @@ static int xe_hwmon_pcode_write_i1(struct xe_gt *gt, u32 uval) {return xe_pcode_write (gt,PCODE_MBOX (PCODE_POWER_SETUP ,POWER_SETUP_SUBCOMMAND_WRITE_I1 ,0 ), - uval); + (uval &POWER_SETUP_I1_DATA_MASK )); } static int xe_hwmon_power_curr_crit_read(struct xe_hwmon *hwmon, int channel,
drivers/gpu/drm/xe/xe_pm.c +15 -5
@@ -91,17 +91,17 @@ int xe_pm_suspend(struct xe_device *xe)for_each_gt (gt, xe, id)xe_gt_suspend_prepare (gt); +xe_display_pm_suspend (xe, false); +/* FIXME: Super racey... */ err =xe_bo_evict_all (xe);if (err) goto err; -xe_display_pm_suspend (xe); -for_each_gt (gt, xe, id) { err =xe_gt_suspend (gt);if (err) { -xe_display_pm_resume (xe); +xe_display_pm_resume (xe, false); goto err; } }
@@ -151,11 +151,11 @@ int xe_pm_resume(struct xe_device *xe)xe_irq_resume (xe); -xe_display_pm_resume (xe); -for_each_gt (gt, xe, id)xe_gt_resume (gt); +xe_display_pm_resume (xe, false); + err =xe_bo_restore_user (xe);if (err) goto err;
@@ -363,6 +363,8 @@ int xe_pm_runtime_suspend(struct xe_device *xe)mutex_unlock (&xe->mem_access.vram_userfault.lock);if (xe->d3cold.allowed) { +xe_display_pm_suspend (xe, true); + err =xe_bo_evict_all (xe);if (err) goto out;
@@ -375,7 +377,12 @@ int xe_pm_runtime_suspend(struct xe_device *xe) }xe_irq_suspend (xe); + +if (xe->d3cold.allowed) +xe_display_pm_suspend_late (xe); out: +if (err) +xe_display_pm_resume (xe, true);lock_map_release (&xe_pm_runtime_lockdep_map);xe_pm_write_callback_task (xe,NULL );return err;
@@ -411,6 +418,8 @@ int xe_pm_runtime_resume(struct xe_device *xe)if (err) goto out; +xe_display_pm_resume_early (xe); +/* * This only restores pinned memory which is the memory * required for the GT(s) to resume.
@@ -426,6 +435,7 @@ int xe_pm_runtime_resume(struct xe_device *xe)xe_gt_resume (gt);if (xe->d3cold.allowed && xe->d3cold.power_lost) { +xe_display_pm_resume (xe, true); err =xe_bo_restore_user (xe);if (err) goto out;
drivers/gpu/drm/xe/xe_preempt_fence.c +2 -1
@@ -128,8 +128,9 @@ xe_preempt_fence_arm(struct xe_preempt_fence *pfence, struct xe_exec_queue *q, {list_del_init (&pfence->link); pfence->q =xe_exec_queue_get (q); +spin_lock_init (&pfence->lock);dma_fence_init (&pfence->base, &preempt_fence_ops, - &q->compute.lock, context, seqno); + &pfence->lock, context, seqno);return &pfence->base; }
drivers/gpu/drm/xe/xe_preempt_fence_types.h +2 -0
@@ -25,6 +25,8 @@ struct xe_preempt_fence {struct xe_exec_queue *q;/** @preempt_work: work struct which issues preemption */ struct work_struct preempt_work; +/** @lock: dma-fence fence lock */ +spinlock_t lock;/** @error: preempt fence is in error state */ int error; };
drivers/gpu/drm/xe/xe_vm.c +30 -30
133 lines not on this page · raw message
drivers/hwmon/pt5161l.c +2 -2
@@ -427,7 +427,7 @@ static int pt5161l_read(struct device *dev, enum hwmon_sensor_types type,struct pt5161l_data *data =dev_get_drvdata (dev);int ret;u8 buf[8 ]; -long adc_code; +u32 adc_code;switch (attr) {case hwmon_temp_input:
@@ -449,7 +449,7 @@ static int pt5161l_read(struct device *dev, enum hwmon_sensor_types type, adc_code = buf[3 ] <<24 | buf[2 ] <<16 | buf[1 ] <<8 | buf[0 ];if (adc_code ==0 || adc_code >=0x3ff ) { -dev_dbg (dev,"Invalid adc_code %lx\n" , adc_code); +dev_dbg (dev,"Invalid adc_code %x\n" , adc_code);return -EIO ; }
drivers/iommu/io-pgtable-arm-v7s.c +1 -2
@@ -552,9 +552,8 @@ static int arm_v7s_map_pages(struct io_pgtable_ops *ops, unsigned long iova, paddr >= (1ULL << data->iop.cfg.oas)))return -ERANGE ; -/* If no access, then nothing to do */ if (!(prot & (IOMMU_READ |IOMMU_WRITE ))) -return 0 ; +return -EINVAL ;while (pgcount--) { ret = __arm_v7s_map(data, iova, paddr, pgsize, prot, 1, data->pgd,
drivers/iommu/io-pgtable-arm.c +1 -2
@@ -495,9 +495,8 @@ static int arm_lpae_map_pages(struct io_pgtable_ops *ops, unsigned long iova,if (WARN_ON (iaext || paddr >> cfg->oas))return -ERANGE ; -/* If no access, then nothing to do */ if (!(iommu_prot & (IOMMU_READ |IOMMU_WRITE ))) -return 0 ; +return -EINVAL ; prot =arm_lpae_prot_to_pte (data, iommu_prot); ret = __arm_lpae_map(data, iova, paddr, pgsize, pgcount, prot, lvl,
drivers/iommu/io-pgtable-dart.c +1 -2
@@ -245,9 +245,8 @@ static int dart_map_pages(struct io_pgtable_ops *ops, unsigned long iova,if (WARN_ON (paddr >> cfg->oas))return -ERANGE ; -/* If no access, then nothing to do */ if (!(iommu_prot & (IOMMU_READ |IOMMU_WRITE ))) -return 0 ; +return -EINVAL ; tbl =dart_get_table (data, iova);
drivers/iommu/iommufd/ioas.c +8 -0
@@ -213,6 +213,10 @@ int iommufd_ioas_map(struct iommufd_ucmd *ucmd)if (cmd->iova >=ULONG_MAX || cmd->length >=ULONG_MAX )return -EOVERFLOW ; +if (!(cmd->flags & + (IOMMU_IOAS_MAP_WRITEABLE |IOMMU_IOAS_MAP_READABLE ))) +return -EINVAL ; + ioas =iommufd_get_ioas (ucmd->ictx, cmd->ioas_id);if (IS_ERR (ioas))return PTR_ERR (ioas);
@@ -253,6 +257,10 @@ int iommufd_ioas_copy(struct iommufd_ucmd *ucmd) cmd->dst_iova >= ULONG_MAX)return -EOVERFLOW ; +if (!(cmd->flags & + (IOMMU_IOAS_MAP_WRITEABLE |IOMMU_IOAS_MAP_READABLE ))) +return -EINVAL ; + src_ioas =iommufd_get_ioas (ucmd->ictx, cmd->src_ioas_id);if (IS_ERR (src_ioas))return PTR_ERR (src_ioas);
drivers/net/bonding/bond_main.c +105 -54
274 lines not on this page · raw message
drivers/net/ethernet/microsoft/mana/hw_channel.c +34 -28
93 lines not on this page · raw message
drivers/net/gtp.c +1 -1
@@ -1653,7 +1653,7 @@ static struct sock *gtp_encap_enable_socket(int fd, int type, sock =sockfd_lookup (fd, &err);if (!sock) {pr_debug ("gtp socket fd=%d not found\n" , fd); -return NULL ; +return ERR_PTR (err); } sk = sock->sk;
drivers/net/wireless/intel/iwlwifi/fw/acpi.c +8 -5
@@ -724,22 +724,25 @@ int iwl_acpi_get_wgds_table(struct iwl_fw_runtime *fwrt) entry = &wifi_pkg->package.elements[entry_idx]; entry_idx++;if (entry->type !=ACPI_TYPE_INTEGER || - entry->integer.value > num_profiles) { + entry->integer.value > num_profiles || + entry->integer.value < + rev_data[idx].min_profiles) { ret = -EINVAL ; goto out_free; } - num_profiles = entry->integer.value;/* -* this also validates >= min_profiles since we -* otherwise wouldn't have gotten the data when -* looking up in ACPI +* Check to see if we received package count +* same as max # of profiles */ if (wifi_pkg->package.count != hdr_size + profile_size * num_profiles) { ret = -EINVAL ; goto out_free; } + +/* Number of valid profiles */ + num_profiles = entry->integer.value; } goto read_table; }
drivers/net/wireless/intel/iwlwifi/mvm/ops.c +2 -0
@@ -1190,10 +1190,12 @@ static void iwl_mvm_trig_link_selection(struct wiphy *wiphy,struct iwl_mvm *mvm = container_of(wk, struct iwl_mvm, trig_link_selection_wk); +mutex_lock (&mvm->mutex);ieee80211_iterate_active_interfaces (mvm->hw,IEEE80211_IFACE_ITER_NORMAL , iwl_mvm_find_link_selection_vif,NULL ); +mutex_unlock (&mvm->mutex); } static struct iwl_op_mode *
drivers/net/wireless/intel/iwlwifi/mvm/scan.c +11 -0
@@ -1659,6 +1659,17 @@ iwl_mvm_umac_scan_cfg_channels_v7(struct iwl_mvm *mvm, cfg->v2.channel_num = channels[i]->hw_value;if (cfg80211_channel_is_psc (channels[i])) cfg->flags =0 ; + +if (band ==NL80211_BAND_6GHZ ) { +/* 6 GHz channels should only appear in a scan request +* that has scan_6ghz set. The only exception is MLO +* scan, which has to be passive. +*/ +WARN_ON_ONCE (cfg->flags !=0 ); + cfg->flags = +cpu_to_le32 (IWL_UHB_CHAN_CFG_FLAG_FORCE_PASSIVE ); + } + cfg->v2.iter_count =1 ; cfg->v2.iter_interval =0 ;if (version <17 )
drivers/net/wireless/marvell/mwifiex/cfg80211.c +26 -6
@@ -4363,11 +4363,27 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)if (ISSUPP_ADHOC_ENABLED (adapter->fw_cap_info)) wiphy->interface_modes |=BIT (NL80211_IFTYPE_ADHOC ); - wiphy->bands[NL80211_BAND_2GHZ ] = &mwifiex_band_2ghz; -if (adapter->config_bands &BAND_A ) - wiphy->bands[NL80211_BAND_5GHZ ] = &mwifiex_band_5ghz; -else + wiphy->bands[NL80211_BAND_2GHZ ] =devm_kmemdup (adapter->dev, + &mwifiex_band_2ghz, +sizeof (mwifiex_band_2ghz), +GFP_KERNEL ); +if (!wiphy->bands[NL80211_BAND_2GHZ ]) { + ret = -ENOMEM ; + goto err; + } + +if (adapter->config_bands &BAND_A ) { + wiphy->bands[NL80211_BAND_5GHZ ] =devm_kmemdup (adapter->dev, + &mwifiex_band_5ghz, +sizeof (mwifiex_band_5ghz), +GFP_KERNEL ); +if (!wiphy->bands[NL80211_BAND_5GHZ ]) { + ret = -ENOMEM ; + goto err; + } + }else { wiphy->bands[NL80211_BAND_5GHZ ] =NULL ; + }if (adapter->drcs_enabled &&ISSUPP_DRCS_ENABLED (adapter->fw_cap_info)) wiphy->iface_combinations = &mwifiex_iface_comb_ap_sta_drcs;
@@ -4461,8 +4477,7 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)if (ret <0 ) {mwifiex_dbg (adapter,ERROR ,"%s: wiphy_register failed: %d\n" , __func__, ret); -wiphy_free (wiphy); -return ret; + goto err; }if (!adapter->regd) {
@@ -4504,4 +4519,9 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter) adapter->wiphy = wiphy;return ret; + +err: +wiphy_free (wiphy); + +return ret; }
drivers/net/wireless/silabs/wfx/sta.c +4 -1
@@ -352,8 +352,11 @@ static int wfx_set_mfp_ap(struct wfx_vif *wvif) ptr = (u16 *)cfg80211_find_ie (WLAN_EID_RSN , skb->data + ieoffset, skb->len - ieoffset); -if (unlikely (!ptr)) +if (!ptr) { +/* No RSN IE is fine in open networks */ + ret =0 ; goto free_skb; + } ptr += pairwise_cipher_suite_count_offset;if (WARN_ON (ptr > (u16 *)skb_tail_pointer (skb)))
drivers/nfc/pn533/pn533.c +5 -0
@@ -1723,6 +1723,11 @@ static int pn533_start_poll(struct nfc_dev *nfc_dev, }pn533_poll_create_mod_list (dev, im_protocols, tm_protocols); +if (!dev->poll_mod_count) { +nfc_err (dev->dev, +"Poll mod list is empty\n" ); +return -EINVAL ; + }/* Do not always start polling from the same modulation */ get_random_bytes (&rand_mod,sizeof (rand_mod));
drivers/of/platform.c +1 -1
@@ -592,7 +592,7 @@ static int __init of_platform_default_populate_init(void)* This can happen for example on DT systems that do EFI * booting and may provide a GOP handle to the EFI stub. */ -sysfb_disable (); +sysfb_disable (NULL );of_platform_device_create (node,NULL ,NULL );of_node_put (node); }
drivers/phy/freescale/phy-fsl-imx8mq-usb.c +1 -1
@@ -176,7 +176,7 @@ static void imx8m_get_phy_tuning_data(struct imx8mq_usb_phy *imx_phy) imx_phy->comp_dis_tune =phy_comp_dis_tune_from_property (imx_phy->comp_dis_tune); -if (device_property_read_u32 (dev,"fsl,pcs-tx-deemph-3p5db-attenuation-db" , +if (device_property_read_u32 (dev,"fsl,phy-pcs-tx-deemph-3p5db-attenuation-db" , &imx_phy->pcs_tx_deemph_3p5db)) imx_phy->pcs_tx_deemph_3p5db =PHY_TUNE_DEFAULT ;else
drivers/phy/qualcomm/phy-qcom-qmp-pcie.c +16 -7
@@ -1008,8 +1008,8 @@ static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_serdes_tbl[] = {static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_ln_shrd_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RXCLK_DIV2_CTRL ,0x01 ),QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_DFE_DAC_ENABLE1 ,0x88 ), -QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH1 ,0x00 ), -QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH2 ,0x1f ), +QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH1 ,0x02 ), +QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_TX_ADAPT_POST_THRESH2 ,0x0d ),QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B0 ,0xd4 ),QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B1 ,0x12 ),QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RX_MODE_RATE_0_1_B2 ,0xdb ),
@@ -1026,6 +1026,7 @@ static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_ln_shrd_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH4_RATE3 ,0x1f ),QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH5_RATE3 ,0x1f ),QMP_PHY_INIT_CFG (QSERDES_V6_LN_SHRD_RX_MARG_COARSE_THRESH6_RATE3 ,0x1f ), + QMP_PHY_INIT_CFG(QSERDES_V6_LN_SHRD_RX_SUMMER_CAL_SPD_MODE, 0x5b), }; static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_tx_tbl[] = {
@@ -1049,12 +1050,15 @@ static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_rx_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_DFE_1 ,0x01 ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_DFE_2 ,0x01 ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_DFE_3 ,0x45 ), -QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_VGA_CAL_MAN_VAL ,0x0b ), +QMP_PHY_INIT_CFG_LANE (QSERDES_V6_20_RX_VGA_CAL_MAN_VAL ,0x0a ,1 ), +QMP_PHY_INIT_CFG_LANE (QSERDES_V6_20_RX_VGA_CAL_MAN_VAL ,0x0b ,2 ), +QMP_PHY_INIT_CFG (QSERDES_V6_20_VGA_CAL_CNTRL1 ,0x00 ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_GM_CAL ,0x0d ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_EQU_ADAPTOR_CNTRL4 ,0x0b ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_SIGDET_ENABLES ,0x1c ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_PHPRE_CTRL ,0x20 ), -QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET ,0x38 ), +QMP_PHY_INIT_CFG_LANE (QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET ,0x3a ,1 ), +QMP_PHY_INIT_CFG_LANE (QSERDES_V6_20_RX_DFE_CTLE_POST_CAL_OFFSET ,0x38 ,2 ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_Q_PI_INTRINSIC_BIAS_RATE32 ,0x39 ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_MODE_RATE2_B0 ,0x14 ), QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_MODE_RATE2_B1, 0xb3),
@@ -1070,6 +1074,7 @@ static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_rx_tbl[] = {QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_MODE_RATE3_B4 ,0x4b ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_MODE_RATE3_B5 ,0x76 ),QMP_PHY_INIT_CFG (QSERDES_V6_20_RX_MODE_RATE3_B6 ,0xff ), + QMP_PHY_INIT_CFG(QSERDES_V6_20_RX_TX_ADPT_CTRL, 0x10), }; static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_pcs_tbl[] = {
@@ -1077,6 +1082,8 @@ static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_pcs_tbl[] = {QMP_PHY_INIT_CFG (QPHY_V6_20_PCS_RX_SIGDET_LVL ,0xcc ),QMP_PHY_INIT_CFG (QPHY_V6_20_PCS_EQ_CONFIG4 ,0x00 ),QMP_PHY_INIT_CFG (QPHY_V6_20_PCS_EQ_CONFIG5 ,0x22 ), +QMP_PHY_INIT_CFG (QPHY_V6_20_PCS_TX_RX_CONFIG1 ,0x04 ), + QMP_PHY_INIT_CFG(QPHY_V6_20_PCS_TX_RX_CONFIG2, 0x02), }; static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_pcs_misc_tbl[] = {
@@ -1087,11 +1094,13 @@ static const struct qmp_phy_init_tbl x1e80100_qmp_gen4x2_pcie_pcs_misc_tbl[] = {QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_G4_PRE_GAIN ,0x2e ),QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG1 ,0x03 ),QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG3 ,0x28 ), +QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_G3_RXEQEVAL_TIME ,0x27 ), +QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_G4_RXEQEVAL_TIME ,0x27 ),QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_TX_RX_CONFIG ,0xc0 ),QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_POWER_STATE_CONFIG2 ,0x1d ), -QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG5 ,0x0f ), -QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_G3_FOM_EQ_CONFIG5 ,0xf2 ), - QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_FOM_EQ_CONFIG5, 0xf2), +QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_RX_MARGINING_CONFIG5 ,0x18 ), +QMP_PHY_INIT_CFG (QPHY_PCIE_V6_20_PCS_G3_FOM_EQ_CONFIG5 ,0x7a ), + QMP_PHY_INIT_CFG(QPHY_PCIE_V6_20_PCS_G4_FOM_EQ_CONFIG5, 0x8a), }; static const struct qmp_phy_init_tbl sm8250_qmp_pcie_serdes_tbl[] = {
drivers/phy/xilinx/phy-zynqmp.c +56 -0
98 lines not on this page · raw message
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c +29 -26
114 lines not on this page · raw message
drivers/pinctrl/pinctrl-rockchip.c +1 -1
@@ -3800,7 +3800,7 @@ static struct rockchip_pin_bank rk3328_pin_banks[] = {PIN_BANK_IOMUX_FLAGS (0 ,32 ,"gpio0" ,0 ,0 ,0 ,0 ),PIN_BANK_IOMUX_FLAGS (1 ,32 ,"gpio1" ,0 ,0 ,0 ,0 ),PIN_BANK_IOMUX_FLAGS (2 ,32 ,"gpio2" ,0 , -0 , +IOMUX_WIDTH_2BIT ,IOMUX_WIDTH_3BIT ,0 ), PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3",
drivers/pinctrl/pinctrl-single.c +2 -0
@@ -345,6 +345,8 @@ static int pcs_get_function(struct pinctrl_dev *pctldev, unsigned pin,return -ENOTSUPP ; fselector = setting->func; function =pinmux_generic_get_function (pctldev, fselector); +if (!function) +return -EINVAL ; *func = function->data;if (!(*func)) { dev_err(pcs->dev, "%s could not find function%i\n",
drivers/pinctrl/qcom/pinctrl-x1e80100.c +19 -16
@@ -1805,26 +1805,29 @@ static const struct msm_pingroup x1e80100_groups[] = { [235] = PINGROUP(235, aon_cci, qdss_gpio, _, _, _, _, _, _, _), [236] = PINGROUP(236, aon_cci, qdss_gpio, _, _, _, _, _, _, _), [237] = PINGROUP(237, _, _, _, _, _, _, _, _, _), - [238] = UFS_RESET(ufs_reset, 0x1f9000), - [239] = SDC_QDSD_PINGROUP(sdc2_clk, 0x1f2000, 14, 6), - [240] = SDC_QDSD_PINGROUP(sdc2_cmd, 0x1f2000, 11, 3), - [241] = SDC_QDSD_PINGROUP(sdc2_data, 0x1f2000, 9, 0), + [238] = UFS_RESET(ufs_reset, 0xf9000), + [239] = SDC_QDSD_PINGROUP(sdc2_clk, 0xf2000, 14, 6), + [240] = SDC_QDSD_PINGROUP(sdc2_cmd, 0xf2000, 11, 3), + [241] = SDC_QDSD_PINGROUP(sdc2_data, 0xf2000, 9, 0), };static const struct msm_gpio_wakeirq_map x1e80100_pdc_map[] = { {0 ,72 }, {2 ,70 }, {3 ,71 }, {6 ,123 }, {7 ,67 }, {11 ,85 }, - {15 ,68 }, {18 ,122 }, {19 ,69 }, {21 ,158 }, {23 ,143 }, {26 ,129 }, - {27 ,144 }, {28 ,77 }, {29 ,78 }, {30 ,92 }, {32 ,145 }, {33 ,115 }, - {34 ,130 }, {35 ,146 }, {36 ,147 }, {39 ,80 }, {43 ,148 }, {47 ,149 }, - {51 ,79 }, {53 ,89 }, {59 ,87 }, {64 ,90 }, {65 ,106 }, {66 ,142 }, - {67 ,88 }, {71 ,91 }, {75 ,152 }, {79 ,153 }, {80 ,125 }, {81 ,128 }, - {84 ,137 }, {85 ,155 }, {87 ,156 }, {91 ,157 }, {92 ,138 }, {94 ,140 }, - {95 ,141 }, {113 ,84 }, {121 ,73 }, {123 ,74 }, {129 ,76 }, {131 ,82 }, - {134 ,83 }, {141 ,93 }, {144 ,94 }, {147 ,96 }, {148 ,97 }, {150 ,102 }, - {151 ,103 }, {153 ,104 }, {156 ,105 }, {157 ,107 }, {163 ,98 }, {166 ,112 }, - {172 ,99 }, {181 ,101 }, {184 ,116 }, {193 ,40 }, {193 ,117 }, {196 ,108 }, - {203 ,133 }, {212 ,120 }, {213 ,150 }, {214 ,121 }, {215 ,118 }, {217 ,109 }, - {220 ,110 }, {221 ,111 }, {222 ,124 }, {224 ,131 }, {225 ,132 }, + {13 ,86 }, {15 ,68 }, {18 ,122 }, {19 ,69 }, {21 ,158 }, {23 ,143 }, + {24 ,126 }, {26 ,129 }, {27 ,144 }, {28 ,77 }, {29 ,78 }, {30 ,92 }, + {31 ,159 }, {32 ,145 }, {33 ,115 }, {34 ,130 }, {35 ,146 }, {36 ,147 }, + {38 ,113 }, {39 ,80 }, {43 ,148 }, {47 ,149 }, {51 ,79 }, {53 ,89 }, + {55 ,81 }, {59 ,87 }, {64 ,90 }, {65 ,106 }, {66 ,142 }, {67 ,88 }, + {68 ,151 }, {71 ,91 }, {75 ,152 }, {79 ,153 }, {80 ,125 }, {81 ,128 }, + {83 ,154 }, {84 ,137 }, {85 ,155 }, {87 ,156 }, {91 ,157 }, {92 ,138 }, + {93 ,139 }, {94 ,140 }, {95 ,141 }, {113 ,84 }, {121 ,73 }, {123 ,74 }, + {125 ,75 }, {129 ,76 }, {131 ,82 }, {134 ,83 }, {141 ,93 }, {144 ,94 }, + {145 ,95 }, {147 ,96 }, {148 ,97 }, {150 ,102 }, {151 ,103 }, {153 ,104 }, + {154 ,100 }, {156 ,105 }, {157 ,107 }, {163 ,98 }, {166 ,112 }, {172 ,99 }, + {175 ,114 }, {181 ,101 }, {184 ,116 }, {193 ,117 }, {196 ,108 }, {203 ,133 }, + {208 ,134 }, {212 ,120 }, {213 ,150 }, {214 ,121 }, {215 ,118 }, {217 ,109 }, + {219 ,119 }, {220 ,110 }, {221 ,111 }, {222 ,124 }, {224 ,131 }, {225 ,132 }, + {228 ,135 }, {230 ,136 }, {232 ,162 }, };static const struct msm_pinctrl_soc_data x1e80100_pinctrl = {
drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c +2 -2
@@ -795,12 +795,12 @@ static int jh7110_irq_set_type(struct irq_data *d, unsigned int trigger)case IRQ_TYPE_LEVEL_HIGH : irq_type =0 ;/* 0: level triggered */ edge_both =0 ;/* 0: ignored */ - polarity = mask;/* 1: high level */ + polarity =0 ;/* 0: high level */ break ;case IRQ_TYPE_LEVEL_LOW : irq_type =0 ;/* 0: level triggered */ edge_both =0 ;/* 0: ignored */ - polarity =0 ;/* 0: low level */ + polarity = mask;/* 1: low level */ break ;default :return -EINVAL ;
drivers/power/supply/qcom_battmgr.c +10 -6
@@ -1384,12 +1384,16 @@ static int qcom_battmgr_probe(struct auxiliary_device *adev, "failed to register wireless charing power supply\n"); } - battmgr->client =devm_pmic_glink_register_client (dev, -PMIC_GLINK_OWNER_BATTMGR , - qcom_battmgr_callback, - qcom_battmgr_pdr_notify, - battmgr); -return PTR_ERR_OR_ZERO (battmgr->client); + battmgr->client =devm_pmic_glink_client_alloc (dev,PMIC_GLINK_OWNER_BATTMGR , + qcom_battmgr_callback, + qcom_battmgr_pdr_notify, + battmgr); +if (IS_ERR (battmgr->client)) +return PTR_ERR (battmgr->client); + +pmic_glink_client_register (battmgr->client); + +return 0 ; }static const struct auxiliary_device_id qcom_battmgr_id_table[] = {
drivers/scsi/aacraid/comminit.c +2 -0
@@ -642,6 +642,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)if (aac_comm_init (dev)<0 ){kfree (dev->queues); + dev->queues =NULL ;return NULL ; }/*
@@ -649,6 +650,7 @@ struct aac_dev *aac_init_adapter(struct aac_dev *dev)*/ if (aac_fib_setup (dev) <0 ) {kfree (dev->queues); + dev->queues =NULL ;return NULL ; }
drivers/scsi/sd.c +7 -5
@@ -1711,13 +1711,15 @@ static int sd_sync_cache(struct scsi_disk *sdkp) (sshdr.asc == 0x74 && sshdr.ascq == 0x71)) /* drive is password locked *//* this is no error here */ return 0 ; +/* -* This drive doesn't support sync and there's not much -* we can do because this is called during shutdown -* or suspend so just return success so those operations -* can proceed. +* If a format is in progress or if the drive does not +* support sync, there is not much we can do because +* this is called during shutdown or suspend so just +* return success so those operations can proceed. */ -if (sshdr.sense_key ==ILLEGAL_REQUEST ) +if ((sshdr.asc ==0x04 && sshdr.ascq ==0x04 ) || + sshdr.sense_key ==ILLEGAL_REQUEST )return 0 ; }
drivers/soc/qcom/cmd-db.c +1 -1
@@ -349,7 +349,7 @@ static int cmd_db_dev_probe(struct platform_device *pdev)return -EINVAL ; } - cmd_db_header =memremap (rmem->base, rmem->size,MEMREMAP_WB ); + cmd_db_header =memremap (rmem->base, rmem->size,MEMREMAP_WC );if (!cmd_db_header) { ret = -ENOMEM ; cmd_db_header =NULL ;
drivers/soc/qcom/pmic_glink.c +28 -12
@@ -66,15 +66,14 @@ static void _devm_pmic_glink_release_client(struct device *dev, void *res)spin_unlock_irqrestore (&pg->client_lock, flags); } -struct pmic_glink_client *devm_pmic_glink_register_client (struct device *dev, -unsigned int id, -void (*cb)(const void *,size_t ,void *), -void (*pdr)(void *,int ), -void *priv) +struct pmic_glink_client *devm_pmic_glink_client_alloc (struct device *dev, +unsigned int id, +void (*cb)(const void *,size_t ,void *), +void (*pdr)(void *,int ), +void *priv) {struct pmic_glink_client *client;struct pmic_glink *pg =dev_get_drvdata (dev->parent); -unsigned long flags; client =devres_alloc (_devm_pmic_glink_release_client,sizeof (*client),GFP_KERNEL );if (!client)
@@ -85,6 +84,18 @@ struct pmic_glink_client *devm_pmic_glink_register_client(struct device *dev, client->cb = cb; client->pdr_notify = pdr; client->priv = priv; +INIT_LIST_HEAD (&client->node); + +devres_add (dev, client); + +return client; +} +EXPORT_SYMBOL_GPL (devm_pmic_glink_client_alloc); + +void pmic_glink_client_register (struct pmic_glink_client *client) +{ +struct pmic_glink *pg = client->pg; +unsigned long flags;mutex_lock (&pg->state_lock);spin_lock_irqsave (&pg->client_lock, flags);
@@ -95,17 +106,22 @@ struct pmic_glink_client *devm_pmic_glink_register_client(struct device *dev,spin_unlock_irqrestore (&pg->client_lock, flags);mutex_unlock (&pg->state_lock); -devres_add (dev, client); - -return client; } -EXPORT_SYMBOL_GPL (devm_pmic_glink_register_client); +EXPORT_SYMBOL_GPL (pmic_glink_client_register);int pmic_glink_send (struct pmic_glink_client *client,void *data,size_t len) {struct pmic_glink *pg = client->pg; +int ret; -return rpmsg_send (pg->ept, data, len); +mutex_lock (&pg->state_lock); +if (!pg->ept) + ret = -ECONNRESET ; +else + ret =rpmsg_send (pg->ept, data, len); +mutex_unlock (&pg->state_lock); + +return ret; }EXPORT_SYMBOL_GPL (pmic_glink_send);
@@ -175,7 +191,7 @@ static void pmic_glink_state_notify_clients(struct pmic_glink *pg)if (pg->pdr_state ==SERVREG_SERVICE_STATE_UP && pg->ept) new_state =SERVREG_SERVICE_STATE_UP ; }else { -if (pg->pdr_state ==SERVREG_SERVICE_STATE_UP && pg->ept) +if (pg->pdr_state ==SERVREG_SERVICE_STATE_DOWN || !pg->ept) new_state =SERVREG_SERVICE_STATE_DOWN ; }
drivers/soc/qcom/pmic_glink_altmode.c +11 -6
@@ -520,12 +520,17 @@ static int pmic_glink_altmode_probe(struct auxiliary_device *adev,return ret; } - altmode->client =devm_pmic_glink_register_client (dev, - altmode->owner_id, - pmic_glink_altmode_callback, - pmic_glink_altmode_pdr_notify, - altmode); -return PTR_ERR_OR_ZERO (altmode->client); + altmode->client =devm_pmic_glink_client_alloc (dev, + altmode->owner_id, + pmic_glink_altmode_callback, + pmic_glink_altmode_pdr_notify, + altmode); +if (IS_ERR (altmode->client)) +return PTR_ERR (altmode->client); + +pmic_glink_client_register (altmode->client); + +return 0 ; }static const struct auxiliary_device_id pmic_glink_altmode_id_table[] = {
drivers/soundwire/stream.c +4 -4
@@ -1286,18 +1286,18 @@ struct sdw_dpn_prop *sdw_get_slave_dpn_prop(struct sdw_slave *slave, unsigned int port_num) {struct sdw_dpn_prop *dpn_prop; -u8 num_ports; +unsigned long mask;int i;if (direction ==SDW_DATA_DIR_TX ) { - num_ports =hweight32 (slave->prop.source_ports); + mask = slave->prop.source_ports; dpn_prop = slave->prop.src_dpn_prop; }else { - num_ports =hweight32 (slave->prop.sink_ports); + mask = slave->prop.sink_ports; dpn_prop = slave->prop.sink_dpn_prop; } -for (i =0 ; i < num_ports; i++) { +for_each_set_bit (i, &mask,32 ) {if (dpn_prop[i].num == port_num)return &dpn_prop[i]; }
drivers/usb/cdns3/cdnsp-gadget.h +3 -0
@@ -811,6 +811,7 @@ struct cdnsp_stream_info {* generate Missed Service Error Event. * Set skip flag when receive a Missed Service Error Event and * process the missed tds on the endpoint ring. +* @wa1_nop_trb: hold pointer to NOP trb. */ struct cdnsp_ep {struct usb_ep endpoint;
@@ -838,6 +839,8 @@ struct cdnsp_ep {#define EP_UNCONFIGURED BIT(7)bool skip; +union cdnsp_trb *wa1_nop_trb; + };/**
drivers/usb/cdns3/cdnsp-ring.c +29 -1
@@ -402,7 +402,7 @@ static u64 cdnsp_get_hw_deq(struct cdnsp_device *pdev,struct cdnsp_stream_ctx *st_ctx;struct cdnsp_ep *pep; - pep = &pdev->eps[stream_id]; + pep = &pdev->eps[ep_index];if (pep->ep_state &EP_HAS_STREAMS ) { st_ctx = &pep->stream_info.stream_ctx_array[stream_id];
@@ -1904,6 +1904,23 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq)if (ret)return ret; +/* +* workaround 1: STOP EP command on LINK TRB with TC bit set to 1 +* causes that internal cycle bit can have incorrect state after +* command complete. In consequence empty transfer ring can be +* incorrectly detected when EP is resumed. +* NOP TRB before LINK TRB avoid such scenario. STOP EP command is +* then on NOP TRB and internal cycle bit is not changed and have +* correct value. +*/ +if (pep->wa1_nop_trb) { + field =le32_to_cpu (pep->wa1_nop_trb->trans_event.flags); + field ^=TRB_CYCLE ; + + pep->wa1_nop_trb->trans_event.flags =cpu_to_le32 (field); + pep->wa1_nop_trb =NULL ; + } +/* * Don't give the first TRB to the hardware (by toggling the cycle bit) * until we've finished creating all the other TRBs. The ring's cycle
@@ -1999,6 +2016,17 @@ int cdnsp_queue_bulk_tx(struct cdnsp_device *pdev, struct cdnsp_request *preq) send_addr = addr; } +if (cdnsp_trb_is_link (ring->enqueue +1 )) { + field =TRB_TYPE (TRB_TR_NOOP ) |TRB_IOC ; +if (!ring->cycle_state) + field |=TRB_CYCLE ; + + pep->wa1_nop_trb = ring->enqueue; + +cdnsp_queue_trb (pdev, ring,0 ,0x0 ,0x0 , +TRB_INTR_TARGET (0 ), field); + } +cdnsp_check_trb_math (preq, enqd_len); ret =cdnsp_giveback_first_trb (pdev, pep, preq->request.stream_id, start_cycle, start_trb);
drivers/usb/class/cdc-acm.c +3 -0
@@ -1761,6 +1761,9 @@ static const struct usb_device_id acm_ids[] = { { USB_DEVICE(0x11ca, 0x0201), /* VeriFone Mx870 Gadget Serial */ .driver_info =SINGLE_RX_URB , }, + { USB_DEVICE(0x1901, 0x0006), /* GE Healthcare Patient Monitor UI Controller */ + .driver_info = DISABLE_ECHO, /* DISABLE ECHO in termios flag */ + }, { USB_DEVICE(0x1965, 0x0018), /* Uniden UBC125XLT */ .driver_info = NO_UNION_NORMAL, /* has no union descriptor */ },
drivers/usb/core/sysfs.c +1 -0
@@ -670,6 +670,7 @@ static int add_power_attributes(struct device *dev)static void remove_power_attributes (struct device *dev) { +sysfs_unmerge_group (&dev->kobj, &usb3_hardware_lpm_attr_group);sysfs_unmerge_group (&dev->kobj, &usb2_hardware_lpm_attr_group);sysfs_unmerge_group (&dev->kobj, &power_attr_group); }
drivers/usb/dwc3/core.c +8 -0
@@ -559,9 +559,17 @@ int dwc3_event_buffers_setup(struct dwc3 *dwc)void dwc3_event_buffers_cleanup (struct dwc3 *dwc) {struct dwc3_event_buffer *evt; +u32 reg;if (!dwc->ev_buf)return ; +/* +* Exynos platforms may not be able to access event buffer if the +* controller failed to halt on dwc3_core_exit(). +*/ + reg =dwc3_readl (dwc->regs,DWC3_DSTS ); +if (!(reg &DWC3_DSTS_DEVCTRLHLT )) +return ; evt = dwc->ev_buf;
drivers/usb/dwc3/dwc3-omap.c +3 -1
@@ -522,11 +522,13 @@ static int dwc3_omap_probe(struct platform_device *pdev)if (ret) {dev_err (dev,"failed to request IRQ #%d --> %d\n" , omap->irq, ret); - goto err1; + goto err2; }dwc3_omap_enable_irqs (omap);return 0 ; +err2: +of_platform_depopulate (dev); err1:pm_runtime_put_sync (dev);pm_runtime_disable (dev);
drivers/usb/dwc3/dwc3-st.c +7 -9
@@ -219,10 +219,8 @@ static int st_dwc3_probe(struct platform_device *pdev) dwc3_data->regmap = regmap; res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"syscfg-reg" ); -if (!res) { - ret = -ENXIO ; - goto undo_platform_dev_alloc; - } +if (!res) +return -ENXIO ; dwc3_data->syscfg_reg_off = res->start;
@@ -233,8 +231,7 @@ static int st_dwc3_probe(struct platform_device *pdev)devm_reset_control_get_exclusive (dev,"powerdown" );if (IS_ERR (dwc3_data->rstc_pwrdn)) {dev_err (&pdev->dev,"could not get power controller\n" ); - ret =PTR_ERR (dwc3_data->rstc_pwrdn); - goto undo_platform_dev_alloc; +return PTR_ERR (dwc3_data->rstc_pwrdn); }/* Manage PowerDown */
@@ -269,7 +266,7 @@ static int st_dwc3_probe(struct platform_device *pdev)if (!child_pdev) {dev_err (dev,"failed to find dwc3 core device\n" ); ret = -ENODEV ; - goto err_node_put; + goto depopulate; } dwc3_data->dr_mode =usb_get_dr_mode (&child_pdev->dev);
@@ -285,6 +282,7 @@ static int st_dwc3_probe(struct platform_device *pdev) ret =st_dwc3_drd_init (dwc3_data);if (ret) {dev_err (dev,"drd initialisation failed\n" ); +of_platform_depopulate (dev); goto undo_softreset; }
@@ -294,14 +292,14 @@ static int st_dwc3_probe(struct platform_device *pdev)platform_set_drvdata (pdev, dwc3_data);return 0 ; +depopulate: +of_platform_depopulate (dev); err_node_put:of_node_put (child); undo_softreset:reset_control_assert (dwc3_data->rstc_rst); undo_powerdown:reset_control_assert (dwc3_data->rstc_pwrdn); -undo_platform_dev_alloc: -platform_device_put (pdev);return ret; }
drivers/usb/dwc3/dwc3-xilinx.c +6 -1
@@ -298,9 +298,14 @@ static int dwc3_xlnx_probe(struct platform_device *pdev) goto err_pm_set_suspended;pm_suspend_ignore_children (dev, false); -return pm_runtime_resume_and_get (dev); + ret =pm_runtime_resume_and_get (dev); +if (ret <0 ) + goto err_pm_set_suspended; + +return 0 ; err_pm_set_suspended: +of_platform_depopulate (dev);pm_runtime_set_suspended (dev); err_clk_put:
drivers/usb/dwc3/ep0.c +2 -1
@@ -232,7 +232,8 @@ void dwc3_ep0_stall_and_restart(struct dwc3 *dwc)/* stall is always issued on EP0 */ dep = dwc->eps[0 ];__dwc3_gadget_ep_set_halt (dep,1 , false); - dep->flags =DWC3_EP_ENABLED ; + dep->flags &=DWC3_EP_RESOURCE_ALLOCATED ; + dep->flags |=DWC3_EP_ENABLED ; dwc->delayed_status = false;if (!list_empty (&dep->pending_list)) {
drivers/usb/gadget/function/uvc_video.c +1 -0
@@ -753,6 +753,7 @@ int uvcg_video_enable(struct uvc_video *video) video->req_int_count =0 ;uvc_video_ep_queue_initial_requests (video); +queue_work (video->async_wq, &video->pump);return ret; }
drivers/usb/serial/option.c +5 -0
@@ -619,6 +619,8 @@ static void option_instat_callback(struct urb *urb);/* MeiG Smart Technology products */ #define MEIGSMART_VENDOR_ID 0x2dee +/* MeiG Smart SRM825L based on Qualcomm 315 */ +#define MEIGSMART_PRODUCT_SRM825L 0x4d22/* MeiG Smart SLM320 based on UNISOC UIS8910 */ #define MEIGSMART_PRODUCT_SLM320 0x4d41
@@ -2366,6 +2368,9 @@ static const struct usb_device_id option_ids[] = { { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, TOZED_PRODUCT_LT70C, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(UNISOC_VENDOR_ID, LUAT_PRODUCT_AIR720U, 0xff, 0, 0) }, { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SLM320, 0xff, 0, 0) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x30) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x40) }, + { USB_DEVICE_AND_INTERFACE_INFO(MEIGSMART_VENDOR_ID, MEIGSMART_PRODUCT_SRM825L, 0xff, 0xff, 0x60) }, { } /* Terminating entry */ };MODULE_DEVICE_TABLE (usb, option_ids);
drivers/usb/typec/mux/fsa4480.c +1 -1
@@ -274,7 +274,7 @@ static int fsa4480_probe(struct i2c_client *client)return dev_err_probe (dev,PTR_ERR (fsa->regmap),"failed to initialize regmap\n" ); ret =regmap_read (fsa->regmap,FSA4480_DEVICE_ID , &val); -if (ret || !val) +if (ret)return dev_err_probe (dev, -ENODEV ,"FSA4480 not found\n" ); dev_dbg(dev, "Found FSA4480 v%lu.%lu (Vendor ID = %lu)\n",
drivers/usb/typec/ucsi/ucsi_glink.c +32 -11
75 lines not on this page · raw message
drivers/video/aperture.c +3 -8
@@ -293,7 +293,7 @@ int aperture_remove_conflicting_devices(resource_size_t base, resource_size_t si* ask for this, so let's assume that a real driver for the display * was already probed and prevent sysfb to register devices later. */ -sysfb_disable (); +sysfb_disable (NULL );aperture_detach_devices (base, size);
@@ -346,15 +346,10 @@ EXPORT_SYMBOL(__aperture_remove_legacy_vga_devices);*/ int aperture_remove_conflicting_pci_devices (struct pci_dev *pdev,const char *name) { -bool primary = false;resource_size_t base, size;int bar, ret =0 ; -if (pdev ==vga_default_device ()) - primary = true; - -if (primary) -sysfb_disable (); +sysfb_disable (&pdev->dev);for (bar =0 ; bar <PCI_STD_NUM_BARS ; ++bar) {if (!(pci_resource_flags (pdev, bar) &IORESOURCE_MEM ))
@@ -370,7 +365,7 @@ int aperture_remove_conflicting_pci_devices(struct pci_dev *pdev, const char *na* that consumes the VGA framebuffer I/O range. Remove this * device as well. */ -if (primary) +if (pdev ==vga_default_device ()) ret =__aperture_remove_legacy_vga_devices (pdev);return ret;
fs/afs/inode.c +8 -3
@@ -695,13 +695,18 @@ static void afs_setattr_edit_file(struct afs_operation *op) {struct afs_vnode_param *vp = &op->file[0 ];struct afs_vnode *vnode = vp->vnode; +struct inode *inode = &vnode->netfs.inode;if (op->setattr.attr->ia_valid &ATTR_SIZE ) {loff_t size = op->setattr.attr->ia_size; -loff_t i_size = op->setattr.old_i_size; +loff_t old = op->setattr.old_i_size; +
Lines of this file are not shown. View the raw message.
fs/netfs/misc.c +45 -15
60 lines not on this page · raw message
fs/nfsd/nfs4state.c +42 -20
62 lines not on this page · raw message
net/mptcp/options.c +25 -25
50 lines not on this page · raw message
net/mptcp/pm_netlink.c +74 -33
107 lines not on this page · raw message
net/mptcp/protocol.c +37 -28
65 lines not on this page · raw message
net/mptcp/subflow.c +30 -26
56 lines not on this page · raw message
sound/soc/sof/amd/acp.c +35 -17
52 lines not on this page · raw message
tools/testing/selftests/iommu/iommufd.c +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/local_termination.sh +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/forwarding/no_forwarding.sh +3 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/net/mptcp/mptcp_join.sh +34 -23
57 lines not on this page · 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.