Linux 6.17.11
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.17.11 kernel.
All users of the 6.17 kernel series must upgrade.
The updated 6.17.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.17.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Makefile | 2 arch/arm/boot/dts/nxp/imx/imx6ul.dtsi | 2 arch/arm64/boot/dts/freescale/imx8dxl-ss-conn.dtsi | 4 arch/arm64/boot/dts/freescale/imx8dxl-ss-hsio.dtsi | 5 arch/arm64/boot/dts/freescale/imx8qm-mek.dts | 4 arch/arm64/kernel/acpi.c | 10 arch/mips/mm/tlb-r4k.c | 116 ++++--- arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi | 2 arch/x86/events/core.c | 10 drivers/atm/fore200e.c | 2 drivers/bluetooth/btusb.c | 39 ++ drivers/counter/microchip-tcb-capture.c | 2 drivers/firmware/stratix10-svc.c | 7 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 2 drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 2 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 15 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c | 8 drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 11 drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c | 1 drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c | 2 drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c | 2 drivers/gpu/drm/amd/display/dc/link/link_dpms.c | 3 drivers/gpu/drm/amd/display/dc/virtual/virtual_stream_encoder.c | 7 drivers/gpu/drm/bridge/sii902x.c | 20 - drivers/gpu/drm/drm_fb_helper.c | 14 drivers/gpu/drm/i915/display/intel_display.c | 8 drivers/gpu/drm/i915/display/intel_psr.c | 6 drivers/gpu/drm/sti/sti_vtg.c | 7 drivers/gpu/drm/xe/xe_gt_clock.c | 7 drivers/gpu/drm/xe/xe_guc_ct.c | 3 drivers/iio/accel/adxl355_core.c | 44 ++ drivers/iio/accel/bmc150-accel-core.c | 5 drivers/iio/accel/bmc150-accel.h | 1 drivers/iio/adc/ad4030.c | 2 drivers/iio/adc/ad7124.c | 12 drivers/iio/adc/ad7280a.c | 2 drivers/iio/adc/ad7380.c | 8 drivers/iio/adc/rtq6056.c | 2 drivers/iio/adc/stm32-dfsdm-adc.c | 5 drivers/iio/buffer/industrialio-buffer-dma.c | 6 drivers/iio/buffer/industrialio-buffer-dmaengine.c | 2 drivers/iio/common/ssp_sensors/ssp_dev.c | 4 drivers/iio/humidity/hdc3020.c | 73 ++-- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h | 40 +- drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c | 19 - drivers/iio/industrialio-buffer.c | 21 + drivers/iio/pressure/bmp280-core.c | 15 drivers/iommu/iommufd/driver.c | 2 drivers/mailbox/mailbox-test.c | 2 drivers/mailbox/mtk-cmdq-mailbox.c | 45 +- drivers/mailbox/pcc.c | 8 drivers/md/dm-verity-fec.c | 6 drivers/mmc/host/sdhci-of-dwcmshc.c | 29 + drivers/most/most_usb.c | 14 drivers/net/can/rcar/rcar_canfd.c | 53 +-- drivers/net/can/sja1000/sja1000.c | 4 drivers/net/can/sun4i_can.c | 4 drivers/net/can/usb/gs_usb.c | 100 +++++- drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 4 drivers/net/dsa/microchip/ksz_common.c | 31 - drivers/net/dsa/microchip/ksz_ptp.c | 22 - drivers/net/dsa/sja1105/sja1105_main.c | 7 drivers/net/ethernet/aquantia/atlantic/aq_hw_utils.c | 22 + drivers/net/ethernet/aquantia/atlantic/aq_hw_utils.h | 1 drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 5 drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c | 19 - drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c | 2 drivers/net/ethernet/freescale/fec.h | 1 drivers/net/ethernet/freescale/fec_ptp.c | 64 +++- drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c | 2 drivers/net/ethernet/meta/fbnic/fbnic_fw.c | 2 drivers/net/ethernet/microchip/lan966x/lan966x_ptp.c | 5 drivers/net/ethernet/realtek/r8169_main.c | 19 - drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c | 4 drivers/net/phy/mxl-gpy.c | 20 - drivers/net/team/team_core.c | 23 - drivers/net/tun_vnet.h | 2 drivers/net/veth.c | 7 drivers/net/virtio_net.c | 3 drivers/net/wwan/mhi_wwan_mbim.c | 2 drivers/nvmem/layouts.c | 2 drivers/platform/x86/intel/punit_ipc.c | 2 drivers/pmdomain/tegra/powergate-bpmp.c | 1 drivers/regulator/rtq2208-regulator.c | 6 drivers/slimbus/qcom-ngd-ctrl.c | 1 drivers/spi/Kconfig | 4 drivers/spi/spi-amlogic-spifc-a1.c | 4 drivers/spi/spi-bcm63xx.c | 14 drivers/spi/spi-cadence-quadspi.c | 18 - drivers/spi/spi-nxp-fspi.c | 28 + drivers/thunderbolt/nhi.c | 2 drivers/thunderbolt/nhi.h | 1 drivers/tty/serial/8250/8250.h | 4 drivers/tty/serial/8250/8250_platform.c | 2 drivers/tty/serial/8250/8250_rsa.c | 26 + drivers/tty/serial/8250/Makefile | 2 drivers/tty/serial/amba-pl011.c | 2 drivers/usb/cdns3/cdns3-pci-wrap.c | 5 drivers/usb/dwc3/core.c | 3 drivers/usb/dwc3/dwc3-pci.c | 80 ++--- drivers/usb/dwc3/ep0.c | 1 drivers/usb/dwc3/gadget.c | 7 drivers/usb/gadget/function/f_eem.c | 7 drivers/usb/gadget/udc/core.c | 18 + drivers/usb/gadget/udc/renesas_usbf.c | 4 drivers/usb/gadget/udc/trace.h | 5 drivers/usb/host/xhci-dbgcap.h | 1 drivers/usb/host/xhci-dbgtty.c | 23 + drivers/usb/host/xhci-ring.c | 15 drivers/usb/host/xhci.c | 1 drivers/usb/renesas_usbhs/common.c | 14 drivers/usb/serial/ftdi_sio.c | 1 drivers/usb/serial/ftdi_sio_ids.h | 1 drivers/usb/serial/option.c | 10 drivers/usb/storage/sddr55.c | 6 drivers/usb/storage/transport.c | 16 + drivers/usb/storage/uas.c | 5 drivers/usb/storage/unusual_devs.h | 2 drivers/usb/typec/ucsi/psy.c | 5 drivers/vhost/net.c | 53 ++- drivers/vhost/vhost.c | 76 +++- drivers/vhost/vhost.h | 10 drivers/video/fbdev/core/fbcon.c | 9 fs/afs/cell.c | 43 -- fs/afs/internal.h | 1 fs/afs/security.c | 49 ++- fs/namespace.c | 7 fs/overlayfs/util.c | 4 fs/smb/client/connect.c | 1 include/linux/iio/buffer-dma.h | 1 include/linux/iio/buffer_impl.h | 2 include/linux/mailbox/mtk-cmdq-mailbox.h | 10 include/linux/usb/gadget.h | 5 include/linux/virtio_net.h | 7 include/net/bluetooth/hci_core.h | 21 - io_uring/net.c | 6 kernel/dma/direct.c | 1 kernel/time/timekeeping.c | 4 kernel/trace/trace.c | 10 mm/huge_memory.c | 22 - mm/memfd.c | 27 + mm/swapfile.c | 4 net/bluetooth/hci_core.c | 89 ++--- net/bluetooth/hci_sock.c | 2 net/bluetooth/iso.c | 30 + net/bluetooth/l2cap_core.c | 23 + net/bluetooth/sco.c | 35 +- net/bluetooth/smp.c | 31 - net/ceph/auth_x.c | 2 net/ceph/ceph_common.c | 53 ++- net/ceph/debugfs.c | 14 net/ceph/messenger_v2.c | 11 net/ceph/osdmap.c | 18 - net/mctp/route.c | 1 net/mptcp/protocol.c | 19 + net/xdp/xsk.c | 160 ++++++---- sound/hda/codecs/cirrus/cs420x.c | 1 sound/usb/quirks.c | 3 159 files changed, 1533 insertions(+), 802 deletions(-)
Achim Gratz (1):
iio: pressure: bmp280: correct meas_time_us calculation
Alan Borzeszkowski (1):
thunderbolt: Add support for Intel Wildcat Lake
Alan Stern (1):
USB: storage: Remove subclass and protocol overrides from Novatek quirk
Alex Deucher (2):
drm/amdgpu: fix cyan_skillfish2 gpu info fw handling Revert "drm/amd/display: Move setup_stream_attribute"
Alex Hung (1):
drm/amd/display: Check NULL before accessing
Alexey Kodanev (1):
net: sxgbe: fix potential NULL dereference in sxgbe_rx()
Andrei Vagin (1):
fs/namespace: fix reference leak in grab_requested_mnt_ns
Andy Shevchenko (1):
spi: nxp-fspi: Propagate fwnode in ACPI case as well
Anurag Dutta (2):
spi: spi-cadence-quadspi: Remove duplicate pm_runtime_put_autosuspend() call
spi: spi-cadence-quadspi: Enable pm runtime earlier to avoid imbalance
Bastien Curutchet (Schneider Electric) (5):
net: dsa: microchip: common: Fix checks on irq_find_mapping()
net: dsa: microchip: ptp: Fix checks on irq_find_mapping()
net: dsa: microchip: Don't free uninitialized ksz_irq
net: dsa: microchip: Free previously initialized ports on init failures
net: dsa: microchip: Fix symetry in ksz_ptp_msg_irq_{setup/free}()
Biju Das (1):
can: rcar_canfd: Fix CAN-FD mode as default
ChiYuan Huang (3):
iio: adc: rtq6056: Correct the sign bit index
regulator: rtq2208: Correct buck group2 phase mapping logic
regulator: rtq2208: Correct LDO2 logic judgment bits
Chris Lu (1):
Bluetooth: btusb: mediatek: Fix kernel crash when releasing mtk iso interface
Christophe JAILLET (1):
iio:common:ssp_sensors: Fix an error handling path ssp_probe()
Claudiu Beznea (1):
usb: renesas_usbhs: Fix synchronous external abort on unbind
Dan Carpenter (2):
platform/x86: intel: punit_ipc: fix memory corruption
timekeeping: Fix error code in tk_aux_sysfs_init()
Daniel Golle (2):
net: phy: mxl-gpy: fix bogus error on USXGMII and integrated PHY
net: phy: mxl-gpy: fix link properties on USXGMII and internal PHYs
Danielle Costantino (1):
net/mlx5e: Fix validation logic in rate limiting
David Howells (2):
afs: Fix delayed allocation of a cell's anonymous key
afs: Fix uninit var in afs_alloc_anon_key()
David Lechner (3):
iio: adc: ad7124: fix temperature channel
iio: adc: ad7280a: fix ad7280_store_balance_timer()
iio: adc: ad7380: fix SPI offload trigger rate
Deepanshu Kartikey (2):
tracing: Fix WARN_ON in tracing_buffers_mmap_close for split VMAs mm/memfd: fix information leak in hugetlb folios
Desnes Nunes (1):
usb: storage: Fix memory leak in USB bulk transport
Devarsh Thakkar (1):
drm/bridge: sii902x: Fix HDMI detection with DRM_BRIDGE_ATTACH_NO_CONNECTOR
Dharma Balasubiramani (1):
counter: microchip-tcb-capture: Allow shared IRQ for multi-channel TCBs
Dimitri Fedrau (2):
iio: humditiy: hdc3020: fix units for temperature and humidity measurement
iio: humditiy: hdc3020: fix units for thresholds and hysteresis
Douglas Anderson (1):
Bluetooth: btusb: mediatek: Avoid btusb_mtk_claim_iso_intf() NULL deref
Edward Adam Davis (1):
Bluetooth: hci_sock: Prevent race in socket write iter and sock bind
Fernando Fernandez Mancera (1):
xsk: avoid data corruption on cq descriptor number
Francesco Lavra (2):
spi: tegra114: remove Kconfig dependency on TEGRA20_APB_DMA
iio: imu: st_lsm6dsx: fix array size for st_lsm6dsx_settings fields
Frank Li (2):
arm64: dts: imx8dxl-ss-conn: swap interrupts number of eqos
arm64: dts: imx8dxl: Correct pcie-ep interrupt number
Greg Kroah-Hartman (1):
Linux 6.17.11
Gui-Dong Han (1):
atm/fore200e: Fix possible data race in fore200e_open()
Gustavo A. R. Silva (1):
iommufd/driver: Fix counter initialization for counted_by annotation
Haibo Chen (1):
spi: spi-nxp-fspi: Add OCT-DTR mode support
Hang Zhou (1):
spi: bcm63xx: fix premature CS deassertion on RX-only transactions
Haotian Zhang (3):
usb: gadget: renesas_usbf: Handle devm_pm_runtime_enable() errors
mailbox: mailbox-test: Fix debugfs_create_dir error checking
spi: amlogic-spifc-a1: Handle devm_pm_runtime_enable() errors
Harish Chegondi (1):
drm/xe: Fix conversion from clock ticks to milliseconds
Heikki Krogerus (2):
usb: dwc3: pci: add support for the Intel Nova Lake -S
usb: dwc3: pci: Sort out the Intel device IDs
Heiner Kallweit (1):
r8169: fix RTL8127 hang on suspend/shutdown
Horatiu Vultur (1):
net: lan966x: Fix the initialization of taprio
Ilpo Järvinen (1):
serial: 8250: Fix 8250_rsa symbol loop
Ilya Dryomov (1):
libceph: fix potential use-after-free in have_mon_and_osd_map()
Ivan Zhaldak (1):
ALSA: usb-audio: Add DSD quirk for LEAK Stereo 230
Jameson Thies (1):
usb: typec: ucsi: psy: Set max current to zero when disconnected
Jamie Iles (2):
mailbox: pcc: don't zero error register
drivers/usb/dwc3: fix PCI parent check
Jason Wang (1):
vhost: rewind next_avail_head while discarding descriptors
Jason-JH Lin (1):
mailbox: mtk-cmdq: Refine DMA address handling for the command buffer
Jens Axboe (1):
io_uring/net: ensure vectored buffer node import is tied to notification
Jeremy Kerr (1):
net: mctp: unconditionally set skb->dev on dst output
Jesper Dangaard Brouer (1):
veth: reduce XDP no_direct return section to fix race
Jiefeng Zhang (1):
net: atlantic: fix fragment overflow handling in RX path
Jimmy Hu (1):
usb: gadget: udc: fix use-after-free in usb_gadget_state_work
Jiri Olsa (1):
Revert "perf/x86: Always store regs->ip in perf_callchain_kernel()"
Jisheng Zhang (1):
mmc: sdhci-of-dwcmshc: Promote the th1520 reset handling to ip level
Johan Hovold (2):
most: usb: fix double free on late probe failure
drm: sti: fix device leaks at component probe
Jon Hunter (1):
pmdomain: tegra: Add GENPD_FLAG_NO_STAY_ON flag
Jon Kohler (1):
virtio-net: avoid unnecessary checksum calculation on guest RX
Kai-Heng Feng (1):
net: aquantia: Add missing descriptor cache invalidation on ATL2
Khairul Anuar Romli (1):
firmware: stratix10-svc: fix bug in saving controller data
Kuen-Han Tsai (2):
usb: gadget: f_eem: Fix memory leak in eem_unwrap
usb: udc: Add trace event for usb_gadget_set_state
Kuniyuki Iwashima (1):
mptcp: Initialise rcv_mss before calling tcp_send_active_reset() in mptcp_do_fastclose().
Linus Walleij (1):
iio: accel: bmc150: Fix irq assumption regression
Lucas De Marchi (1):
drm/xe/guc: Fix stack_depot usage
Luiz Augusto von Dentz (2):
Bluetooth: hci_core: Fix triggering cmd_timer for HCI_OP_NOP
Bluetooth: SMP: Fix not generating mackey and ltk when repairing
Maarten Zanders (1):
ARM: dts: nxp: imx6ul: correct SAI3 interrupt line
Maciej Fijalkowski (1):
xsk: avoid overwriting skb fields for multi-buffer traffic
Maciej W. Rozycki (1):
MIPS: mm: Prevent a TLB shutdown on initial uniquification
Manish Nagar (1):
usb: dwc3: Fix race condition between concurrent dwc3_remove_requests() call paths
Marc Kleine-Budde (4):
can: gs_usb: gs_usb_xmit_callback(): fix handling of failed transmitted URBs
can: gs_usb: gs_usb_receive_bulk_callback(): check actual_length before accessing header
can: gs_usb: gs_usb_receive_bulk_callback(): check actual_length before accessing data
can: sun4i_can: sun4i_can_interrupt(): fix max irq loop handling
Marcelo Schmitt (1):
iio: adc: ad4030: Fix _scale value for common-mode channels
Mario Limonciello (AMD) (2):
drm/amd/display: Don't change brightness for disabled connectors drm/amd/display: Increase EDID read retries
Mario Tesi (1):
iio: st_lsm6dsx: Fixed calibrated timestamp calculation
Mathias Nyman (2):
xhci: fix stale flag preventig URBs after link state error is cleared
xhci: dbgtty: Fix data corruption when transmitting data form DbC to host
Miaoqian Lin (3):
slimbus: ngd: Fix reference count leak in qcom_slim_ngd_notify_slaves
serial: amba-pl011: prefer dma_mapping_error() over explicit address checking
usb: cdns3: Fix double resource release in cdns3_pci_probe
Michael Chen (1):
drm/amd/amdgpu: reserve vm invalidation engine for uni_mes
Mikulas Patocka (1):
dm-verity: fix unreliable memory allocation
Mohsin Bashir (1):
eth: fbnic: Fix counter roll-over issue
NeilBrown (1):
ovl: fail ovl_lock_rename_workdir() if either target is unhashed
Nikola Z. Ivanov (1):
team: Move team device type change at the end of team_port_add
Nuno Sá (3):
iio: buffer-dma: support getting the DMA channel
iio: buffer-dmaengine: enable .get_dma_dev()
iio: buffer: support getting dma channel from the buffer
Oleksandr Suvorov (1):
USB: serial: ftdi_sio: add support for u-blox EVK-M101
Olivier Moysan (1):
iio: adc: stm32-dfsdm: fix st,adc-alt-channel property handling
Owen Gu (1):
usb: uas: fix urb unmapping issue when the uas device is remove during ongoing data transfer
Paolo Abeni (1):
mptcp: clear scheduled subflows on retransmit
Pauli Virtanen (1):
Bluetooth: hci_core: lookup hci_conn on RX path on protocol side
Paulo Alcantara (1):
smb: client: fix memory leak in cifs_construct_tcon()
Pranjal Shrivastava (1):
dma-direct: Fix missing sg_dma_len assignment in P2PDMA bus mappings
Prike Liang (1):
drm/amdgpu: attach tlb fence to the PTs update
Punit Agrawal (1):
Revert "ACPI: Suppress misleading SPCR console message when SPCR table is absent"
René Rebe (1):
ALSA: hda/cirrus fix cs420x MacPro 6,1 inverted jack detection
Sergey Matyukevich (1):
riscv: dts: allwinner: d1: fix vlenb property
Seungjin Bae (1):
can: kvaser_usb: leaf: Fix potential infinite loop in command parsers
Siddharth Vadapalli (1):
spi: cadence-quadspi: Fix cqspi_probe() error handling for runtime pm
Slark Xiao (1):
net: wwan: mhi: Keep modem name match with Foxconn T99W640
Thomas Bogendoerfer (1):
MIPS: mm: kmalloc tlb_vpn array to avoid stack overflow
Thomas Mühlbacher (1):
can: sja1000: fix max irq loop handling
Thomas Zimmermann (1):
drm, fbcon, vga_switcheroo: Avoid race condition in fbcon setup
Tianchu Chen (1):
usb: storage: sddr55: Reject out-of-bound new_pba
Valek Andrej (1):
iio: accel: fix ADXL355 startup race condition
Vanillan Wang (1):
USB: serial: option: add support for Rolling RW101R-GL
Viacheslav Dubeyko (1):
ceph: fix crash in process_v2_sparse_read() for encrypted directories
Ville Syrjälä (1):
drm/i915/psr: Reject async flips when selective fetch is enabled
Vladimir Oltean (1):
net: dsa: sja1105: fix SGMII linking at 10M or 100M but not passing traffic
Wei Fang (4):
net: fec: cancel perout_timer when PEROUT is disabled
net: fec: do not update PEROUT if it is enabled
net: fec: do not allow enabling PPS and PEROUT simultaneously
net: fec: do not register PPS event for PEROUT
Wei Yang (1):
mm/huge_memory: fix NULL pointer deference when splitting folio
Wentao Guan (1):
nvmem: layouts: fix nvmem_layout_bus_uevent
Xu Yang (1):
arm64: dts: imx8qm-mek: fix mux-controller select/enable-gpios polarity
Youngjun Park (1):
mm: swap: remove duplicate nr_swap_pages decrement in get_swap_page_of_type()
ziming zhang (2):
libceph: prevent potential out-of-bounds writes in handle_auth_session_key()
libceph: replace BUG_ON with bounds check for map->max_osd
Łukasz Bartosik (1):
xhci: dbgtty: fix device unregister
Greg Kroah-Hartman
maintainerMakefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 17 -SUBLEVEL = 10 +SUBLEVEL = 11 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm/boot/dts/nxp/imx/imx6ul.dtsi +1 -1
@@ -339,7 +339,7 @@ sai3: sai@2030000 { #sound-dai-cells = <0>; compatible = "fsl,imx6ul-sai", "fsl,imx6sx-sai"; reg = <0x02030000 0x4000>; - interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>; clocks = <&clks IMX6UL_CLK_SAI3_IPG>, <&clks IMX6UL_CLK_SAI3>, <&clks IMX6UL_CLK_DUMMY>, <&clks IMX6UL_CLK_DUMMY>;
arch/arm64/boot/dts/freescale/imx8dxl-ss-conn.dtsi +2 -2
@@ -27,8 +27,8 @@ eqos: ethernet@5b050000 { compatible = "nxp,imx8dxl-dwmac-eqos", "snps,dwmac-5.10a"; reg = <0x5b050000 0x10000>; interrupt-parent = <&gic>; - interrupts = <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>, - <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 162 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 163 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "macirq", "eth_wake_irq"; clocks = <&eqos_lpcg IMX_LPCG_CLK_4>, <&eqos_lpcg IMX_LPCG_CLK_6>,
arch/arm64/boot/dts/freescale/imx8dxl-ss-hsio.dtsi +5 -0
@@ -54,3 +54,8 @@ pcie0_ep: pcie-ep@5f010000 { interrupt-names = "dma"; }; }; + +&pcieb_ep { + interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; + interrupt-names = "dma"; +};
arch/arm64/boot/dts/freescale/imx8qm-mek.dts +2 -2
@@ -217,8 +217,8 @@ mux-controller { compatible = "nxp,cbdtu02043", "gpio-sbu-mux"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_typec_mux>; - select-gpios = <&lsio_gpio4 6 GPIO_ACTIVE_LOW>; - enable-gpios = <&lsio_gpio4 19 GPIO_ACTIVE_HIGH>; + select-gpios = <&lsio_gpio4 6 GPIO_ACTIVE_HIGH>; + enable-gpios = <&lsio_gpio4 19 GPIO_ACTIVE_LOW>; orientation-switch; port {
arch/arm64/kernel/acpi.c +3 -7
@@ -197,8 +197,6 @@ static int __init acpi_fadt_sanity_check(void)*/ void __init acpi_boot_table_init (void ) { -int ret; -/* * Enable ACPI instead of device tree unless * - ACPI has been disabled explicitly (acpi=off), or
@@ -252,12 +250,10 @@ void __init acpi_boot_table_init(void)* behaviour, use acpi=nospcr to disable console in ACPI SPCR * table as default serial console. */ - ret =acpi_parse_spcr (earlycon_acpi_spcr_enable, +acpi_parse_spcr (earlycon_acpi_spcr_enable, !param_acpi_nospcr); -if (!ret || param_acpi_nospcr || !IS_ENABLED (CONFIG_ACPI_SPCR_TABLE )) -pr_info ("Use ACPI SPCR as default console: No\n" ); -else -pr_info ("Use ACPI SPCR as default console: Yes\n" ); +pr_info ("Use ACPI SPCR as default console: %s\n" , + param_acpi_nospcr ?"No" :"Yes" );if (IS_ENABLED (CONFIG_ACPI_BGRT ))acpi_table_parse (ACPI_SIG_BGRT , acpi_parse_bgrt);
arch/mips/mm/tlb-r4k.c +78 -38
151 lines not on this page · raw message
arch/riscv/boot/dts/allwinner/sun20i-d1s.dtsi +1 -1
@@ -28,7 +28,7 @@ cpu0: cpu@0 { riscv,isa-base = "rv64i"; riscv,isa-extensions = "i", "m", "a", "f", "d", "c", "zicntr", "zicsr", "zifencei", "zihpm", "xtheadvector"; - thead,vlenb = <128>; + thead,vlenb = <16>; #cooling-cells = <2>; cpu0_intc: interrupt-controller {
arch/x86/events/core.c +5 -5
@@ -2787,13 +2787,13 @@ perf_callchain_kernel(struct perf_callchain_entry_ctx *entry, struct pt_regs *rereturn ; } -if (perf_callchain_store (entry, regs->ip)) -return ; - -if (perf_hw_regs (regs)) +if (perf_hw_regs (regs)) { +if (perf_callchain_store (entry, regs->ip)) +return ;unwind_start (&state, current, regs,NULL ); -else + }else {unwind_start (&state, current,NULL , (void *)regs->sp); + }for (; !unwind_done (&state);unwind_next_frame (&state)) { addr =unwind_get_return_address (&state);
drivers/atm/fore200e.c +2 -0
@@ -1374,7 +1374,9 @@ fore200e_open(struct atm_vcc *vcc) vcc->dev_data =NULL ; +mutex_lock (&fore200e->rate_mtx); fore200e->available_cell_rate += vcc->qos.txtp.max_pcr; +mutex_unlock (&fore200e->rate_mtx);kfree (fore200e_vcc);return -EINVAL ;
drivers/bluetooth/btusb.c +32 -7
@@ -2711,9 +2711,21 @@ static int btusb_recv_event_realtek(struct hci_dev *hdev, struct sk_buff *skb)static void btusb_mtk_claim_iso_intf (struct btusb_data *data) { -struct btmtk_data *btmtk_data =hci_get_priv (data->hdev); +struct btmtk_data *btmtk_data;int err; +if (!data->hdev) +return ; + + btmtk_data =hci_get_priv (data->hdev); +if (!btmtk_data) +return ; + +if (!btmtk_data->isopkt_intf) { +bt_dev_err (data->hdev,"Can't claim NULL iso interface" ); +return ; + } +/* * The function usb_driver_claim_interface() is documented to need * locks held if it's not called from a probe routine. The code here
@@ -2735,17 +2747,30 @@ static void btusb_mtk_claim_iso_intf(struct btusb_data *data)static void btusb_mtk_release_iso_intf (struct hci_dev *hdev) { -struct btmtk_data *btmtk_data =hci_get_priv (hdev); +struct btmtk_data *btmtk_data; + +if (!hdev) +return ; + + btmtk_data =hci_get_priv (hdev); +if (!btmtk_data) +return ;if (test_bit (BTMTK_ISOPKT_OVER_INTR , &btmtk_data->flags)) {usb_kill_anchored_urbs (&btmtk_data->isopkt_anchor);clear_bit (BTMTK_ISOPKT_RUNNING , &btmtk_data->flags); -dev_kfree_skb_irq (btmtk_data->isopkt_skb); - btmtk_data->isopkt_skb =NULL ; -usb_set_intfdata (btmtk_data->isopkt_intf,NULL ); -usb_driver_release_interface (&btusb_driver, - btmtk_data->isopkt_intf); +if (btmtk_data->isopkt_skb) { +dev_kfree_skb_irq (btmtk_data->isopkt_skb); + btmtk_data->isopkt_skb =NULL ; + } + +if (btmtk_data->isopkt_intf) { +usb_set_intfdata (btmtk_data->isopkt_intf,NULL ); +usb_driver_release_interface (&btusb_driver, + btmtk_data->isopkt_intf); + btmtk_data->isopkt_intf =NULL ; + } }clear_bit (BTMTK_ISOPKT_OVER_INTR , &btmtk_data->flags);
drivers/counter/microchip-tcb-capture.c +1 -1
@@ -451,7 +451,7 @@ static void mchp_tc_irq_remove(void *ptr)static int mchp_tc_irq_enable (struct counter_device *const counter,int irq) {struct mchp_tc_data *const priv =counter_priv (counter); -int ret =devm_request_irq (counter->parent, irq, mchp_tc_isr,0 , +int ret =devm_request_irq (counter->parent, irq, mchp_tc_isr,IRQF_SHARED ,dev_name (counter->parent), counter);if (ret <0 )
drivers/firmware/stratix10-svc.c +4 -3
@@ -134,6 +134,7 @@ struct stratix10_svc_data {* @complete_status: state for completion * @svc_fifo_lock: protect access to service message data queue * @invoke_fn: function to issue secure monitor call or hypervisor call +* @svc: manages the list of client svc drivers * * This struct is used to create communication channels for service clients, to * handle secure monitor or hypervisor call.
@@ -150,6 +151,7 @@ struct stratix10_svc_controller {struct completion complete_status;spinlock_t svc_fifo_lock;svc_invoke_fn *invoke_fn; +struct stratix10_svc *svc; };/**
@@ -1206,6 +1208,7 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev) ret = -ENOMEM ; goto err_free_kfifo; } + controller->svc = svc; svc->stratix10_svc_rsu =platform_device_alloc (STRATIX10_RSU ,0 );if (!svc->stratix10_svc_rsu) {
@@ -1237,8 +1240,6 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)if (ret) goto err_unregister_fcs_dev; -dev_set_drvdata (dev, svc); -pr_info ("Intel Service Layer Driver Initialized\n" );return 0 ;
@@ -1256,8 +1257,8 @@ static int stratix10_svc_drv_probe(struct platform_device *pdev)static void stratix10_svc_drv_remove (struct platform_device *pdev) { -struct stratix10_svc *svc =dev_get_drvdata (&pdev->dev);struct stratix10_svc_controller *ctrl =platform_get_drvdata (pdev); +struct stratix10_svc *svc = ctrl->svc;of_platform_depopulate (ctrl->dev);
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +2 -0
@@ -2604,6 +2604,8 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev) chip_name ="navi12" ;break ;case CHIP_CYAN_SKILLFISH : +if (adev->mman.discovery_bin) +return 0 ; chip_name ="cyan_skillfish" ;break ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_gmc.c +3 -0
@@ -597,6 +597,9 @@ int amdgpu_gmc_allocate_vm_inv_eng(struct amdgpu_device *adev)/* reserve engine 5 for firmware */ if (adev->enable_mes) vm_inv_engs[i] &= ~(1 <<5 ); +/* reserve engine 6 for uni mes */ +if (adev->enable_uni_mes) + vm_inv_engs[i] &= ~(1 <<6 );/* reserve mmhub engine 3 for firmware */ if (adev->enable_umsch_mm) vm_inv_engs[i] &= ~(1 <<3 );
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +1 -1
@@ -1056,7 +1056,7 @@ amdgpu_vm_tlb_flush(struct amdgpu_vm_update_params *params, }/* Prepare a TLB flush fence to be attached to PTs */ -if (!params->unlocked && vm->is_compute_context) { +if (!params->unlocked) {amdgpu_vm_tlb_fence_create (params->adev, vm, fence);/* Makes sure no PD/PT is freed before the flush */
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c +15 -0
@@ -4898,6 +4898,21 @@ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,struct dc_link *link;u32 brightness;bool rc, reallow_idle = false; +struct drm_connector *connector; + +list_for_each_entry (connector, &dm->ddev->mode_config.connector_list, head) { +struct amdgpu_dm_connector *aconnector =to_amdgpu_dm_connector (connector); + +if (aconnector->bl_idx != bl_idx) +continue ; + +/* if connector is off, save the brightness for next time it's on */ +if (!aconnector->base.encoder) { + dm->brightness[bl_idx] = user_brightness; + dm->actual_brightness[bl_idx] =0 ; +return ; + } + }amdgpu_dm_update_backlight_caps (dm, bl_idx); caps = &dm->backlight_caps[bl_idx];
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +4 -4
@@ -996,8 +996,8 @@ enum dc_edid_status dm_helpers_read_local_edid(struct amdgpu_dm_connector *aconnector = link->priv;struct drm_connector *connector = &aconnector->base;struct i2c_adapter *ddc; -int retry =3 ; -enum dc_edid_status edid_status; +int retry =25 ; +enum dc_edid_status edid_status =EDID_NO_RESPONSE ;const struct drm_edid *drm_edid;const struct edid *edid;
@@ -1027,7 +1027,7 @@ enum dc_edid_status dm_helpers_read_local_edid( }if (!drm_edid) -return EDID_NO_RESPONSE ; +continue ; edid =drm_edid_raw (drm_edid);// FIXME: Get rid of drm_edid_raw() if (!edid ||
@@ -1045,7 +1045,7 @@ enum dc_edid_status dm_helpers_read_local_edid( &sink->dc_edid, &sink->edid_caps); - }while (edid_status ==EDID_BAD_CHECKSUM && --retry >0 ); + }while ((edid_status ==EDID_BAD_CHECKSUM || edid_status ==EDID_NO_RESPONSE ) && --retry >0 );if (edid_status !=EDID_OK ) DRM_ERROR("EDID err: %d, on connector: %s",
drivers/gpu/drm/amd/display/dc/core/dc_stream.c +8 -3
@@ -705,9 +705,14 @@ bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream, {uint8_t i;bool ret = false; -struct dc *dc = stream->ctx->dc; -struct resource_context *res_ctx = - &dc->current_state->res_ctx; +struct dc *dc; +struct resource_context *res_ctx; + +if (!stream->ctx) +return false; + + dc = stream->ctx->dc; + res_ctx = &dc->current_state->res_ctx;dc_exit_ips_for_hw_access (dc);
drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c +0 -1
@@ -671,7 +671,6 @@ void dce110_enable_stream(struct pipe_ctx *pipe_ctx)uint32_t early_control =0 ;struct timing_generator *tg = pipe_ctx->stream_res.tg; - link_hwss->setup_stream_attribute (pipe_ctx); link_hwss->setup_stream_encoder (pipe_ctx); dc->hwss.update_info_frame (pipe_ctx);
drivers/gpu/drm/amd/display/dc/hwss/dcn20/dcn20_hwseq.c +0 -2
@@ -3060,8 +3060,6 @@ void dcn20_enable_stream(struct pipe_ctx *pipe_ctx) link_enc->transmitter - TRANSMITTER_UNIPHY_A); } - link_hwss->setup_stream_attribute (pipe_ctx); -if (dc->res_pool->dccg->funcs->set_pixel_rate_div) dc->res_pool->dccg->funcs->set_pixel_rate_div( dc->res_pool->dccg,
drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c +0 -2
@@ -968,8 +968,6 @@ void dcn401_enable_stream(struct pipe_ctx *pipe_ctx) } } - link_hwss->setup_stream_attribute (pipe_ctx); -if (dc->res_pool->dccg->funcs->set_pixel_rate_div) { dc->res_pool->dccg->funcs->set_pixel_rate_div( dc->res_pool->dccg,
drivers/gpu/drm/amd/display/dc/link/link_dpms.c +3 -0
@@ -2458,6 +2458,7 @@ void link_set_dpms_on(struct link_encoder *link_enc = pipe_ctx->link_res.dio_link_enc;enum otg_out_mux_dest otg_out_dest =OUT_MUX_DIO ;struct vpg *vpg = pipe_ctx->stream_res.stream_enc->vpg; +const struct link_hwss *link_hwss =get_link_hwss (link, &pipe_ctx->link_res);bool apply_edp_fast_boot_optimization = pipe_ctx->stream->apply_edp_fast_boot_optimization;
@@ -2501,6 +2502,8 @@ void link_set_dpms_on( pipe_ctx->stream_res.tg->funcs->set_out_mux (pipe_ctx->stream_res.tg, otg_out_dest); } + link_hwss->setup_stream_attribute (pipe_ctx); + pipe_ctx->stream->apply_edp_fast_boot_optimization = false;// Enable VPG before building infoframe
drivers/gpu/drm/amd/display/dc/virtual/virtual_stream_encoder.c +0 -7
@@ -44,11 +44,6 @@ static void virtual_stream_encoder_dvi_set_stream_attribute( struct dc_crtc_timing *crtc_timing, bool is_dual_link) {} -static void virtual_stream_encoder_lvds_set_stream_attribute ( -struct stream_encoder *enc, -struct dc_crtc_timing *crtc_timing) -{} -static void virtual_stream_encoder_set_throttled_vcp_size (struct stream_encoder *enc,struct fixed31_32 avg_time_slots_per_mtp)
@@ -120,8 +115,6 @@ static const struct stream_encoder_funcs virtual_str_enc_funcs = { virtual_stream_encoder_hdmi_set_stream_attribute, .dvi_set_stream_attribute = virtual_stream_encoder_dvi_set_stream_attribute, - .lvds_set_stream_attribute = - virtual_stream_encoder_lvds_set_stream_attribute, .set_throttled_vcp_size = virtual_stream_encoder_set_throttled_vcp_size, .update_hdmi_info_packets =
drivers/gpu/drm/bridge/sii902x.c +8 -12
@@ -179,7 +179,6 @@ struct sii902x {struct drm_connector connector;struct gpio_desc *reset_gpio;struct i2c_mux_core *i2cmux; -bool sink_is_hdmi;u32 bus_width;/*
@@ -315,8 +314,6 @@ static int sii902x_get_modes(struct drm_connector *connector)drm_edid_free (drm_edid); } - sii902x->sink_is_hdmi = connector->display_info.is_hdmi; -return num; }
@@ -342,9 +339,17 @@ static void sii902x_bridge_atomic_enable(struct drm_bridge *bridge, struct drm_atomic_state *state) {struct sii902x *sii902x =bridge_to_sii902x (bridge); +struct drm_connector *connector; +u8 output_mode =SII902X_SYS_CTRL_OUTPUT_DVI ; + + connector =drm_atomic_get_new_connector_for_encoder (state, bridge->encoder); +if (connector && connector->display_info.is_hdmi) + output_mode =SII902X_SYS_CTRL_OUTPUT_HDMI ;mutex_lock (&sii902x->mutex); +regmap_update_bits (sii902x->regmap,SII902X_SYS_CTRL_DATA , +SII902X_SYS_CTRL_OUTPUT_MODE , output_mode);regmap_update_bits (sii902x->regmap,SII902X_PWR_STATE_CTRL ,SII902X_AVI_POWER_STATE_MSK ,SII902X_AVI_POWER_STATE_D (0 ));
@@ -359,16 +364,12 @@ static void sii902x_bridge_mode_set(struct drm_bridge *bridge, const struct drm_display_mode *adj) {struct sii902x *sii902x =bridge_to_sii902x (bridge); -u8 output_mode =SII902X_SYS_CTRL_OUTPUT_DVI ;struct regmap *regmap = sii902x->regmap;u8 buf[HDMI_INFOFRAME_SIZE (AVI )];struct hdmi_avi_infoframe frame;u16 pixel_clock_10kHz = adj->clock /10 ;int ret; -if (sii902x->sink_is_hdmi) - output_mode =SII902X_SYS_CTRL_OUTPUT_HDMI ; - buf[0 ] = pixel_clock_10kHz &0xff ; buf[1 ] = pixel_clock_10kHz >>8 ; buf[2 ] =drm_mode_vrefresh (adj);
@@ -384,11 +385,6 @@ static void sii902x_bridge_mode_set(struct drm_bridge *bridge,mutex_lock (&sii902x->mutex); - ret =regmap_update_bits (sii902x->regmap,SII902X_SYS_CTRL_DATA , -SII902X_SYS_CTRL_OUTPUT_MODE , output_mode); -if (ret) - goto out; - ret =regmap_bulk_write (regmap,SII902X_TPI_VIDEO_DATA , buf,10 );if (ret) goto out;
drivers/gpu/drm/drm_fb_helper.c +0 -14
@@ -31,9 +31,7 @@#include <linux/console.h> #include <linux/export.h> -#include <linux/pci.h> #include <linux/sysrq.h> -#include <linux/vga_switcheroo.h> #include <drm/drm_atomic.h> #include <drm/drm_drv.h>
@@ -566,11 +564,6 @@ EXPORT_SYMBOL(drm_fb_helper_release_info);*/ void drm_fb_helper_unregister_info (struct drm_fb_helper *fb_helper) { -struct fb_info *info = fb_helper->info; -struct device *dev = info->device; - -if (dev_is_pci (dev)) -vga_switcheroo_client_fb_set (to_pci_dev (dev),NULL );unregister_framebuffer (fb_helper->info); }EXPORT_SYMBOL (drm_fb_helper_unregister_info);
@@ -1632,7 +1625,6 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper)struct drm_client_dev *client = &fb_helper->client;struct drm_device *dev = fb_helper->dev;struct drm_fb_helper_surface_size sizes; -struct fb_info *info;int ret;if (drm_WARN_ON (dev, !dev->driver->fbdev_probe))
@@ -1653,12 +1645,6 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper)strcpy (fb_helper->fb->comm,"[fbcon]" ); - info = fb_helper->info; - -/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */ -if (dev_is_pci (info->device)) -vga_switcheroo_client_fb_set (to_pci_dev (info->device), info); -return 0 ; }
drivers/gpu/drm/i915/display/intel_display.c +8 -0
@@ -5958,6 +5958,14 @@ static int intel_async_flip_check_uapi(struct intel_atomic_state *state,return -EINVAL ; } +/* FIXME: selective fetch should be disabled for async flips */ +if (new_crtc_state->enable_psr2_sel_fetch) { +drm_dbg_kms (display->drm, +"[CRTC:%d:%s] async flip disallowed with PSR2 selective fetch\n" , + crtc->base.base.id, crtc->base.name); +return -EINVAL ; + } +for_each_oldnew_intel_plane_in_state (state, plane, old_plane_state, new_plane_state, i) {if (plane->pipe != crtc->pipe)
drivers/gpu/drm/i915/display/intel_psr.c +0 -6
@@ -1274,12 +1274,6 @@ static bool intel_psr2_sel_fetch_config_valid(struct intel_dp *intel_dp,return false; } -if (crtc_state->uapi.async_flip) { -drm_dbg_kms (display->drm, -"PSR2 sel fetch not enabled, async flip enabled\n" ); -return false; - } -return crtc_state->enable_psr2_sel_fetch = true; }
drivers/gpu/drm/sti/sti_vtg.c +6 -1
@@ -143,12 +143,17 @@ struct sti_vtg {struct sti_vtg *of_vtg_find (struct device_node *np) {struct platform_device *pdev; +struct sti_vtg *vtg; pdev =of_find_device_by_node (np);if (!pdev)return NULL ; -return (struct sti_vtg *)platform_get_drvdata (pdev); + vtg =platform_get_drvdata (pdev); + +put_device (&pdev->dev); + +return vtg; }static void vtg_reset (struct sti_vtg *vtg)
drivers/gpu/drm/xe/xe_gt_clock.c +1 -6
@@ -93,11 +93,6 @@ int xe_gt_clock_init(struct xe_gt *gt)return 0 ; } -static u64 div_u64_roundup (u64 n,u32 d) -{ -return div_u64 (n + d -1 , d); -} -/** * xe_gt_clock_interval_to_ms - Convert sampled GT clock ticks to msec *
@@ -108,5 +103,5 @@ static u64 div_u64_roundup(u64 n, u32 d)*/ u64 xe_gt_clock_interval_to_ms (struct xe_gt *gt,u64 count) { -return div_u64_roundup (count *MSEC_PER_SEC , gt->info.reference_clock); +return mul_u64_u32_div (count,MSEC_PER_SEC , gt->info.reference_clock); }
drivers/gpu/drm/xe/xe_guc_ct.c +3 -0
@@ -237,6 +237,9 @@ int xe_guc_ct_init_noalloc(struct xe_guc_ct *ct)#if IS_ENABLED (CONFIG_DRM_XE_DEBUG )spin_lock_init (&ct->dead.lock);INIT_WORK (&ct->dead.worker, ct_dead_worker_func); +#if IS_ENABLED (CONFIG_DRM_XE_DEBUG_GUC ) +stack_depot_init (); +#endif #endif init_waitqueue_head (&ct->wq);init_waitqueue_head (&ct->g2h_fence_wq);
drivers/iio/accel/adxl355_core.c +39 -5
66 lines not on this page · raw message
drivers/iio/accel/bmc150-accel-core.c +5 -0
@@ -526,6 +526,10 @@ static int bmc150_accel_set_interrupt(struct bmc150_accel_data *data, int i,const struct bmc150_accel_interrupt_info *info = intr->info;int ret; +/* We do not always have an IRQ */ +if (data->irq <=0 ) +return 0 ; +if (state) {if (atomic_inc_return (&intr->users) >1 )return 0 ;
@@ -1699,6 +1703,7 @@ int bmc150_accel_core_probe(struct device *dev, struct regmap *regmap, int irq, }if (irq >0 ) { + data->irq = irq; ret = devm_request_threaded_irq(dev, irq, bmc150_accel_irq_handler, bmc150_accel_irq_thread_handler,
drivers/iio/accel/bmc150-accel.h +1 -0
@@ -58,6 +58,7 @@ enum bmc150_accel_trigger_id {struct bmc150_accel_data {struct regmap *regmap; +int irq;struct regulator_bulk_data regulators[2 ];struct bmc150_accel_interrupt interrupts[BMC150_ACCEL_INTERRUPTS ];struct bmc150_accel_trigger triggers[BMC150_ACCEL_TRIGGERS ];
drivers/iio/adc/ad4030.c +1 -1
@@ -385,7 +385,7 @@ static int ad4030_get_chan_scale(struct iio_dev *indio_dev,struct ad4030_state *st =iio_priv (indio_dev);const struct iio_scan_type *scan_type; - scan_type =iio_get_current_scan_type (indio_dev, st->chip->channels); + scan_type =iio_get_current_scan_type (indio_dev, chan);if (IS_ERR (scan_type))return PTR_ERR (scan_type);
drivers/iio/adc/ad7124.c +8 -4
@@ -1196,10 +1196,6 @@ static int __ad7124_calibrate_all(struct ad7124_state *st, struct iio_dev *indioint ret, i;for (i =0 ; i < st->num_channels; i++) { - -if (indio_dev->channels[i].type !=IIO_VOLTAGE ) -continue ; -/* * For calibration the OFFSET register should hold its reset default * value. For the GAIN register there is no such requirement but
@@ -1209,6 +1205,14 @@ static int __ad7124_calibrate_all(struct ad7124_state *st, struct iio_dev *indio st->channels[i].cfg.calibration_offset =0x800000 ; st->channels[i].cfg.calibration_gain = st->gain_default; +/* +* Only the main voltage input channels are important enough +* to be automatically calibrated here. For everything else, +* just use the default values set above. +*/ +if (indio_dev->channels[i].type !=IIO_VOLTAGE ) +continue ; +/* * Full-scale calibration isn't supported at gain 1, so skip in * that case. Note that untypically full-scale calibration has
drivers/iio/adc/ad7280a.c +1 -1
@@ -541,7 +541,7 @@ static ssize_t ad7280_store_balance_timer(struct iio_dev *indio_dev,int val, val2;int ret; - ret =iio_str_to_fixpoint (buf,1000 , &val, &val2); + ret =iio_str_to_fixpoint (buf,100 , &val, &val2);if (ret)return ret;
drivers/iio/adc/ad7380.c +8 -0
@@ -1227,6 +1227,14 @@ static int ad7380_offload_buffer_postenable(struct iio_dev *indio_dev)if (ret)return ret; +/* +* When the sequencer is required to read all channels, we need to +* trigger twice per sample period in order to read one complete set +* of samples. +*/ +if (st->seq) + config.periodic.frequency_hz *=2 ; + ret =spi_offload_trigger_enable (st->offload, st->offload_trigger, &config);if (ret)spi_unoptimize_message (&st->offload_msg);
drivers/iio/adc/rtq6056.c +1 -1
@@ -300,7 +300,7 @@ static int rtq6056_adc_read_channel(struct rtq6056_priv *priv,return IIO_VAL_INT ;case RTQ6056_REG_SHUNTVOLT :case RTQ6056_REG_CURRENT : - *val =sign_extend32 (regval,16 ); + *val =sign_extend32 (regval,15 );return IIO_VAL_INT ;default :return -EINVAL ;
drivers/iio/adc/stm32-dfsdm-adc.c +2 -3
@@ -725,9 +725,8 @@ static int stm32_dfsdm_generic_channel_parse_of(struct stm32_dfsdm *dfsdm, } df_ch->src = val; - ret =fwnode_property_read_u32 (node,"st,adc-alt-channel" , &df_ch->alt_si); -if (ret != -EINVAL ) - df_ch->alt_si =0 ; +if (fwnode_property_present (node,"st,adc-alt-channel" )) + df_ch->alt_si =1 ;if (adc->dev_data->type ==DFSDM_IIO ) { backend =devm_iio_backend_fwnode_get (&indio_dev->dev,NULL , node);
drivers/iio/buffer/industrialio-buffer-dma.c +6 -0
@@ -786,6 +786,12 @@ int iio_dma_buffer_enqueue_dmabuf(struct iio_buffer *buffer, }EXPORT_SYMBOL_NS_GPL (iio_dma_buffer_enqueue_dmabuf,"IIO_DMA_BUFFER" ); +struct device *iio_dma_buffer_get_dma_dev (struct iio_buffer *buffer) +{ +return iio_buffer_to_queue (buffer)->dev; +} +EXPORT_SYMBOL_NS_GPL (iio_dma_buffer_get_dma_dev,"IIO_DMA_BUFFER" ); +void iio_dma_buffer_lock_queue (struct iio_buffer *buffer) {struct iio_dma_buffer_queue *queue =iio_buffer_to_queue (buffer);
drivers/iio/buffer/industrialio-buffer-dmaengine.c +2 -0
@@ -177,6 +177,8 @@ static const struct iio_buffer_access_funcs iio_dmaengine_buffer_ops = { .lock_queue = iio_dma_buffer_lock_queue, .unlock_queue = iio_dma_buffer_unlock_queue, + .get_dma_dev = iio_dma_buffer_get_dma_dev, + .modes = INDIO_BUFFER_HARDWARE, .flags = INDIO_BUFFER_FLAG_FIXED_WATERMARK, };
drivers/iio/common/ssp_sensors/ssp_dev.c +3 -1
@@ -503,7 +503,7 @@ static int ssp_probe(struct spi_device *spi) ret =spi_setup (spi);if (ret <0 ) {dev_err (&spi->dev,"Failed to setup spi\n" ); -return ret; + goto err_setup_spi; } data->fw_dl_state =SSP_FW_DL_STATE_NONE ;
@@ -568,6 +568,8 @@ static int ssp_probe(struct spi_device *spi) err_setup_irq:mutex_destroy (&data->pending_lock);mutex_destroy (&data->comm_lock); +err_setup_spi: +mfd_remove_devices (&spi->dev);dev_err (&spi->dev,"Probe failed!\n" );
drivers/iio/humidity/hdc3020.c +43 -30
183 lines not on this page · raw message
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx.h +29 -11
@@ -192,6 +192,22 @@ struct st_lsm6dsx_fifo_ops {* @fifo_en: Hw timer FIFO enable register info (addr + mask). * @decimator: Hw timer FIFO decimator register info (addr + mask). * @freq_fine: Difference in % of ODR with respect to the typical. +* @ts_sensitivity: Nominal timestamp sensitivity. +* @ts_trim_coeff: Coefficient for calculating the calibrated timestamp gain. +* This coefficient comes into play when linearizing the formula +* used to calculate the calibrated timestamp (please see the +* relevant formula in the AN for the specific IMU). +* For example, in the case of LSM6DSO we have: +* +* 1 / (1 + x) ~= 1 - x (Taylor’s Series) +* ttrim[s] = 1 / (40000 * (1 + 0.0015 * val)) (from AN5192) +* ttrim[ns] ~= 25000 - 37.5 * val +* ttrim[ns] ~= 25000 - (37500 * val) / 1000 +* +* so, replacing ts_sensitivity = 25000 and +* ts_trim_coeff = 37500 +* +* ttrim[ns] ~= ts_sensitivity - (ts_trim_coeff * val) / 1000 */ struct st_lsm6dsx_hw_ts_settings {struct st_lsm6dsx_reg timer_en;
@@ -199,6 +215,8 @@ struct st_lsm6dsx_hw_ts_settings {struct st_lsm6dsx_reg fifo_en;struct st_lsm6dsx_reg decimator;u8 freq_fine; +u16 ts_sensitivity; +u16 ts_trim_coeff; };/**
@@ -252,6 +270,15 @@ struct st_lsm6dsx_event_settings {u8 wakeup_src_x_mask; }; +enum st_lsm6dsx_sensor_id { +ST_LSM6DSX_ID_GYRO , +ST_LSM6DSX_ID_ACC , +ST_LSM6DSX_ID_EXT0 , +ST_LSM6DSX_ID_EXT1 , +ST_LSM6DSX_ID_EXT2 , +ST_LSM6DSX_ID_MAX +}; +enum st_lsm6dsx_ext_sensor_id {ST_LSM6DSX_ID_MAGN , };
@@ -337,23 +364,14 @@ struct st_lsm6dsx_settings {struct st_lsm6dsx_odr_table_entry odr_table[2 ];struct st_lsm6dsx_samples_to_discard samples_to_discard[2 ];struct st_lsm6dsx_fs_table_entry fs_table[2 ]; -struct st_lsm6dsx_reg decimator[ST_LSM6DSX_MAX_ID ]; -struct st_lsm6dsx_reg batch[ST_LSM6DSX_MAX_ID ]; +struct st_lsm6dsx_reg decimator[ST_LSM6DSX_ID_MAX ]; +struct st_lsm6dsx_reg batch[2 ];struct st_lsm6dsx_fifo_ops fifo_ops;struct st_lsm6dsx_hw_ts_settings ts_settings;struct st_lsm6dsx_shub_settings shub_settings;struct st_lsm6dsx_event_settings event_settings; }; -enum st_lsm6dsx_sensor_id { -ST_LSM6DSX_ID_GYRO , -ST_LSM6DSX_ID_ACC , -ST_LSM6DSX_ID_EXT0 , -ST_LSM6DSX_ID_EXT1 , -ST_LSM6DSX_ID_EXT2 , -ST_LSM6DSX_ID_MAX , -}; -enum st_lsm6dsx_fifo_mode {ST_LSM6DSX_FIFO_BYPASS =0x0 ,ST_LSM6DSX_FIFO_CONT =0x6 ,
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c +8 -11
@@ -94,8 +94,6 @@#define ST_LSM6DSX_REG_WHOAMI_ADDR 0x0f -#define ST_LSM6DSX_TS_SENSITIVITY 25000UL/* 25us */ -static const struct iio_chan_spec st_lsm6dsx_acc_channels[] = {ST_LSM6DSX_CHANNEL_ACC (IIO_ACCEL ,0x28 ,IIO_MOD_X ,0 ),ST_LSM6DSX_CHANNEL_ACC (IIO_ACCEL ,0x2a ,IIO_MOD_Y ,1 ),
@@ -983,6 +981,8 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { .mask = GENMASK(7, 6), }, .freq_fine = 0x63, + .ts_sensitivity = 25000, + .ts_trim_coeff = 37500, }, .shub_settings = { .page_mux = {
@@ -1196,6 +1196,8 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { .mask = GENMASK(7, 6), }, .freq_fine = 0x63, + .ts_sensitivity = 25000, + .ts_trim_coeff = 37500, }, .event_settings = { .enable_reg = {
@@ -1371,6 +1373,8 @@ static const struct st_lsm6dsx_settings st_lsm6dsx_sensor_settings[] = { .mask = GENMASK(7, 6), }, .freq_fine = 0x4f, + .ts_sensitivity = 21701, + .ts_trim_coeff = 28212, }, .shub_settings = { .page_mux = {
@@ -2248,20 +2252,13 @@ static int st_lsm6dsx_init_hw_timer(struct st_lsm6dsx_hw *hw) }/* calibrate timestamp sensitivity */ - hw->ts_gain =ST_LSM6DSX_TS_SENSITIVITY ; + hw->ts_gain = ts_settings->ts_sensitivity;if (ts_settings->freq_fine) { err =regmap_read (hw->regmap, ts_settings->freq_fine, &val);if (err <0 )return err; -/* -* linearize the AN5192 formula: -* 1 / (1 + x) ~= 1 - x (Taylor’s Series) -* ttrim[s] = 1 / (40000 * (1 + 0.0015 * val)) -* ttrim[ns] ~= 25000 - 37.5 * val -* ttrim[ns] ~= 25000 - (37500 * val) / 1000 -*/ - hw->ts_gain -= ((s8 )val *37500 ) /1000 ; + hw->ts_gain -= ((s8 )val * ts_settings->ts_trim_coeff) /1000 ; }return 0 ;
drivers/iio/industrialio-buffer.c +16 -5
@@ -1623,19 +1623,28 @@ static int iio_dma_resv_lock(struct dma_buf *dmabuf, bool nonblock)return 0 ; } +static struct device *iio_buffer_get_dma_dev (const struct iio_dev *indio_dev, +struct iio_buffer *buffer) +{ +if (buffer->access->get_dma_dev) +return buffer->access->get_dma_dev (buffer); + +return indio_dev->dev.parent; +} +static struct dma_buf_attachment *iio_buffer_find_attachment (struct iio_dev_buffer_pair *ib,struct dma_buf *dmabuf,bool nonblock) { -struct device *dev = ib->indio_dev->dev.parent;struct iio_buffer *buffer = ib->buffer; +struct device *dma_dev =iio_buffer_get_dma_dev (ib->indio_dev, buffer);struct dma_buf_attachment *attach =NULL ;struct iio_dmabuf_priv *priv;guard (mutex)(&buffer->dmabufs_mutex);list_for_each_entry (priv, &buffer->dmabufs, entry) { -if (priv->attach->dev == dev +if (priv->attach->dev == dma_dev && priv->attach->dmabuf == dmabuf) { attach = priv->attach;break ;
@@ -1653,6 +1662,7 @@ static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib, {struct iio_dev *indio_dev = ib->indio_dev;struct iio_buffer *buffer = ib->buffer; +struct device *dma_dev =iio_buffer_get_dma_dev (indio_dev, buffer);struct dma_buf_attachment *attach;struct iio_dmabuf_priv *priv, *each;struct dma_buf *dmabuf;
@@ -1679,7 +1689,7 @@ static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib, goto err_free_priv; } - attach =dma_buf_attach (dmabuf, indio_dev->dev.parent); + attach =dma_buf_attach (dmabuf, dma_dev);if (IS_ERR (attach)) { err =PTR_ERR (attach); goto err_dmabuf_put;
@@ -1719,7 +1729,7 @@ static int iio_buffer_attach_dmabuf(struct iio_dev_buffer_pair *ib,* combo. If we do, refuse to attach. */ list_for_each_entry (each, &buffer->dmabufs, entry) { -if (each->attach->dev == indio_dev->dev.parent +if (each->attach->dev == dma_dev && each->attach->dmabuf == dmabuf) {/* * We unlocked the reservation object, so going through
@@ -1758,6 +1768,7 @@ static int iio_buffer_detach_dmabuf(struct iio_dev_buffer_pair *ib, {struct iio_buffer *buffer = ib->buffer;struct iio_dev *indio_dev = ib->indio_dev; +struct device *dma_dev =iio_buffer_get_dma_dev (indio_dev, buffer);struct iio_dmabuf_priv *priv;struct dma_buf *dmabuf;int dmabuf_fd, ret = -EPERM ;
@@ -1772,7 +1783,7 @@ static int iio_buffer_detach_dmabuf(struct iio_dev_buffer_pair *ib,guard (mutex)(&buffer->dmabufs_mutex);list_for_each_entry (priv, &buffer->dmabufs, entry) { -if (priv->attach->dev == indio_dev->dev.parent +if (priv->attach->dev == dma_dev && priv->attach->dmabuf == dmabuf) {list_del (&priv->entry);
drivers/iio/pressure/bmp280-core.c +9 -6
@@ -1042,13 +1042,16 @@ static int bmp280_wait_conv(struct bmp280_data *data)unsigned int reg, meas_time_us;int ret; -/* Check if we are using a BME280 device */ -if (data->oversampling_humid) - meas_time_us =BMP280_PRESS_HUMID_MEAS_OFFSET + -BIT (data->oversampling_humid) *BMP280_MEAS_DUR ; +/* Constant part of the measurement time */ + meas_time_us =BMP280_MEAS_OFFSET ; -else - meas_time_us =0 ; +/* +* Check if we are using a BME280 device, +* Humidity measurement time +*/ +if (data->chip_info->oversampling_humid_avail) + meas_time_us +=BMP280_PRESS_HUMID_MEAS_OFFSET + +BIT (data->oversampling_humid) *BMP280_MEAS_DUR ;/* Pressure measurement time */ meas_time_us += BMP280_PRESS_HUMID_MEAS_OFFSET +
drivers/iommu/iommufd/driver.c +1 -1
@@ -161,8 +161,8 @@ int iommufd_viommu_report_event(struct iommufd_viommu *viommu, vevent = &veventq->lost_events_header; goto out_set_header; } -memcpy (vevent->event_data, event_data, data_len); vevent->data_len = data_len; +memcpy (vevent->event_data, event_data, data_len); veventq->num_events++; out_set_header:
drivers/mailbox/mailbox-test.c +1 -1
@@ -268,7 +268,7 @@ static int mbox_test_add_debugfs(struct platform_device *pdev,return 0 ; tdev->root_debugfs_dir =debugfs_create_dir (dev_name (&pdev->dev),NULL ); -if (!tdev->root_debugfs_dir) { +if (IS_ERR (tdev->root_debugfs_dir)) {dev_err (&pdev->dev,"Failed to create Mailbox debugfs\n" );return -EINVAL ; }
drivers/mailbox/mtk-cmdq-mailbox.c +31 -14
97 lines not on this page · raw message
drivers/mailbox/pcc.c +4 -4
@@ -276,9 +276,8 @@ static int pcc_mbox_error_check_and_clear(struct pcc_chan_info *pchan)if (ret)return ret; - val &= pchan->error.status_mask; -if (val) { - val &= ~pchan->error.status_mask; +if (val & pchan->error.status_mask) { + val &= pchan->error.preserve_mask;pcc_chan_reg_write (&pchan->error, val);return -EIO ; }
@@ -745,7 +744,8 @@ static int pcc_parse_subspace_db_reg(struct pcc_chan_info *pchan, ret =pcc_chan_reg_init (&pchan->error, &pcct_ext->error_status_register, -0 ,0 , pcct_ext->error_status_mask, + ~pcct_ext->error_status_mask,0 , + pcct_ext->error_status_mask,"Error Status" ); }return ret;
drivers/md/dm-verity-fec.c +1 -5
@@ -320,11 +320,7 @@ static int fec_alloc_bufs(struct dm_verity *v, struct dm_verity_fec_io *fio)if (fio->bufs[n])continue ; - fio->bufs[n] =mempool_alloc (&v->fec->prealloc_pool,GFP_NOWAIT ); -if (unlikely (!fio->bufs[n])) { -DMERR ("failed to allocate FEC buffer" ); -return -ENOMEM ; - } + fio->bufs[n] =mempool_alloc (&v->fec->prealloc_pool,GFP_NOIO ); }/* try to allocate the maximum number of buffers */
drivers/mmc/host/sdhci-of-dwcmshc.c +17 -12
@@ -289,6 +289,19 @@ static void dwcmshc_adma_write_desc(struct sdhci_host *host, void **desc,sdhci_adma_write_desc (host, desc, addr, len, cmd); } +static void dwcmshc_reset (struct sdhci_host *host,u8 mask) +{ +sdhci_reset (host, mask); + +/* The dwcmshc does not comply with the SDHCI specification +* regarding the "Software Reset for CMD line should clear 'Command +* Complete' in the Normal Interrupt Status Register." Clear the bit +* here to compensate for this quirk. +*/ +if (mask &SDHCI_RESET_CMD ) +sdhci_writel (host,SDHCI_INT_RESPONSE ,SDHCI_INT_STATUS ); +} +static unsigned int dwcmshc_get_max_clock (struct sdhci_host *host) {struct sdhci_pltfm_host *pltfm_host =sdhci_priv (host);
@@ -832,15 +845,7 @@ static void th1520_sdhci_reset(struct sdhci_host *host, u8 mask)struct dwcmshc_priv *priv =sdhci_pltfm_priv (pltfm_host);u16 ctrl_2; -sdhci_reset (host, mask); - -/* The T-Head 1520 SoC does not comply with the SDHCI specification -* regarding the "Software Reset for CMD line should clear 'Command -* Complete' in the Normal Interrupt Status Register." Clear the bit -* here to compensate for this quirk. -*/ -if (mask &SDHCI_RESET_CMD ) -sdhci_writel (host,SDHCI_INT_RESPONSE ,SDHCI_INT_STATUS ); +dwcmshc_reset (host, mask);if (priv->flags &FLAG_IO_FIXED_1V8 ) { ctrl_2 =sdhci_readw (host,SDHCI_HOST_CONTROL2 );
@@ -886,7 +891,7 @@ static void cv18xx_sdhci_reset(struct sdhci_host *host, u8 mask)struct dwcmshc_priv *priv =sdhci_pltfm_priv (pltfm_host);u32 val, emmc_caps =MMC_CAP2_NO_SD |MMC_CAP2_NO_SDIO ; -sdhci_reset (host, mask); +dwcmshc_reset (host, mask);if ((host->mmc->caps2 & emmc_caps) == emmc_caps) { val =sdhci_readl (host, priv->vendor_specific_area1 +CV18XX_SDHCI_MSHC_CTRL );
@@ -958,7 +963,7 @@ static void cv18xx_sdhci_post_tuning(struct sdhci_host *host) val |=SDHCI_INT_DATA_AVAIL ;sdhci_writel (host, val,SDHCI_INT_STATUS ); -sdhci_reset (host,SDHCI_RESET_CMD |SDHCI_RESET_DATA ); +dwcmshc_reset (host,SDHCI_RESET_CMD |SDHCI_RESET_DATA ); }static int cv18xx_sdhci_execute_tuning (struct sdhci_host *host,u32 opcode)
@@ -1100,7 +1105,7 @@ static const struct sdhci_ops sdhci_dwcmshc_ops = { .set_bus_width = sdhci_set_bus_width, .set_uhs_signaling = dwcmshc_set_uhs_signaling, .get_max_clock = dwcmshc_get_max_clock, - .reset = sdhci_reset, + .reset = dwcmshc_reset, .adma_write_desc = dwcmshc_adma_write_desc, .irq = dwcmshc_cqe_irq_handler, };
drivers/most/most_usb.c +5 -9
@@ -1058,7 +1058,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id) ret =most_register_interface (&mdev->iface);if (ret) - goto err_free_busy_urbs; +return ret;mutex_lock (&mdev->io_mutex); if (le16_to_cpu(usb_dev->descriptor.idProduct) == USB_DEV_ID_OS81118 ||
@@ -1068,8 +1068,7 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id)if (!mdev->dci) {mutex_unlock (&mdev->io_mutex);most_deregister_interface (&mdev->iface); - ret = -ENOMEM ; - goto err_free_busy_urbs; +return -ENOMEM ; } mdev->dci->dev.init_name ="dci" ;
@@ -1078,18 +1077,15 @@ hdm_probe(struct usb_interface *interface, const struct usb_device_id *id) mdev->dci->dev.release = release_dci;if (device_register (&mdev->dci->dev)) {mutex_unlock (&mdev->io_mutex); +put_device (&mdev->dci->dev);most_deregister_interface (&mdev->iface); - ret = -ENOMEM ; - goto err_free_dci; +return -ENOMEM ; } mdev->dci->usb_device = mdev->usb_device; }mutex_unlock (&mdev->io_mutex);return 0 ; -err_free_dci: -put_device (&mdev->dci->dev); -err_free_busy_urbs: -kfree (mdev->busy_urbs); + err_free_ep_address:kfree (mdev->ep_address); err_free_cap:
drivers/net/can/rcar/rcar_canfd.c +31 -22
78 lines not on this page · raw message
drivers/net/can/sja1000/sja1000.c +2 -2
@@ -548,8 +548,8 @@ irqreturn_t sja1000_interrupt(int irq, void *dev_id)if (priv->read_reg (priv,SJA1000_IER ) ==IRQ_OFF ) goto out; -while ((isrc = priv->read_reg (priv,SJA1000_IR )) && - (n <SJA1000_MAX_IRQ )) { +while ((n <SJA1000_MAX_IRQ ) && + (isrc = priv->read_reg (priv,SJA1000_IR ))) { status = priv->read_reg (priv,SJA1000_SR );/* check for absent controller due to hw unplug */
drivers/net/can/sun4i_can.c +2 -2
@@ -657,8 +657,8 @@ static irqreturn_t sun4i_can_interrupt(int irq, void *dev_id)u8 isrc, status;int n =0 ; -while ((isrc =readl (priv->base +SUN4I_REG_INT_ADDR )) && - (n <SUN4I_CAN_MAX_IRQ )) { +while ((n <SUN4I_CAN_MAX_IRQ ) && + (isrc =readl (priv->base +SUN4I_REG_INT_ADDR ))) { n++; status =readl (priv->base +SUN4I_REG_STA_ADDR );
drivers/net/can/usb/gs_usb.c +87 -13
161 lines not on this page · raw message
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +2 -2
@@ -685,7 +685,7 @@ static int kvaser_usb_leaf_wait_cmd(const struct kvaser_usb *dev, u8 id,* for further details. */ if (tmp->len ==0 ) { - pos =round_up (pos, + pos =round_up (pos +1 ,le16_to_cpu (dev->bulk_in->wMaxPacketSize));continue ;
@@ -1732,7 +1732,7 @@ static void kvaser_usb_leaf_read_bulk_callback(struct kvaser_usb *dev,* number of events in case of a heavy rx load on the bus. */ if (cmd->len ==0 ) { - pos =round_up (pos,le16_to_cpu + pos =round_up (pos +1 ,le16_to_cpu (dev->bulk_in->wMaxPacketSize));continue ; }
drivers/net/dsa/microchip/ksz_common.c +15 -16
@@ -2587,8 +2587,8 @@ static int ksz_irq_phy_setup(struct ksz_device *dev) irq =irq_find_mapping (dev->ports[port].pirq.domain,PORT_SRC_PHY_INT ); -if (irq <0 ) { - ret = irq; +if (!irq) { + ret = -EINVAL ; goto out; } ds->user_mii_bus->irq[phy] = irq;
@@ -2952,8 +2952,8 @@ static int ksz_pirq_setup(struct ksz_device *dev, u8 p)snprintf (pirq->name,sizeof (pirq->name),"port_irq-%d" , p); pirq->irq_num =irq_find_mapping (dev->girq.domain, p); -if (pirq->irq_num <0 ) -return pirq->irq_num; +if (!pirq->irq_num) +return -EINVAL ;return ksz_irq_common_setup (dev, pirq); }
@@ -3038,12 +3038,12 @@ static int ksz_setup(struct dsa_switch *ds)dsa_switch_for_each_user_port (dp, dev->ds) { ret =ksz_pirq_setup (dev, dp->index);if (ret) - goto out_girq; + goto port_release;if (dev->info->ptp_capable) { ret =ksz_ptp_irq_setup (ds, dp->index);if (ret) - goto out_pirq; + goto pirq_release; } } }
@@ -3053,7 +3053,7 @@ static int ksz_setup(struct dsa_switch *ds)if (ret) {dev_err (dev->dev,"Failed to register PTP clock: %d\n" , ret); - goto out_ptpirq; + goto port_release; } }
@@ -3076,17 +3076,16 @@ static int ksz_setup(struct dsa_switch *ds) out_ptp_clock_unregister:if (dev->info->ptp_capable)ksz_ptp_clock_unregister (ds); -out_ptpirq: -if (dev->irq >0 && dev->info->ptp_capable) -dsa_switch_for_each_user_port (dp, dev->ds) -ksz_ptp_irq_free (ds, dp->index); -out_pirq: -if (dev->irq >0 ) -dsa_switch_for_each_user_port (dp, dev->ds) +port_release: +if (dev->irq >0 ) { +dsa_switch_for_each_user_port_continue_reverse (dp, dev->ds) { +if (dev->info->ptp_capable) +ksz_ptp_irq_free (ds, dp->index); +pirq_release:ksz_irq_free (&dev->ports[dp->index].pirq); -out_girq: -if (dev->irq >0 ) + }ksz_irq_free (&dev->girq); + }return ret; }
drivers/net/dsa/microchip/ksz_ptp.c +9 -13
@@ -1093,19 +1093,19 @@ static int ksz_ptp_msg_irq_setup(struct ksz_port *port, u8 n)static const char *const name[] = {"pdresp-msg" ,"xdreq-msg" ,"sync-msg" };const struct ksz_dev_ops *ops = port->ksz_dev->dev_ops; +struct ksz_irq *ptpirq = &port->ptpirq;struct ksz_ptp_irq *ptpmsg_irq; ptpmsg_irq = &port->ptpmsg_irq[n]; + ptpmsg_irq->num =irq_create_mapping (ptpirq->domain, n); +if (!ptpmsg_irq->num) +return -EINVAL ; ptpmsg_irq->port = port; ptpmsg_irq->ts_reg = ops->get_port_addr (port->num, ts_reg[n]);strscpy (ptpmsg_irq->name, name[n]); - ptpmsg_irq->num =irq_find_mapping (port->ptpirq.domain, n); -if (ptpmsg_irq->num <0 ) -return ptpmsg_irq->num; -return request_threaded_irq (ptpmsg_irq->num,NULL , ksz_ptp_msg_thread_fn,IRQF_ONESHOT , ptpmsg_irq->name, ptpmsg_irq);
@@ -1135,12 +1135,9 @@ int ksz_ptp_irq_setup(struct dsa_switch *ds, u8 p)if (!ptpirq->domain)return -ENOMEM ; -for (irq =0 ; irq < ptpirq->nirqs; irq++) -irq_create_mapping (ptpirq->domain, irq); - ptpirq->irq_num =irq_find_mapping (port->pirq.domain,PORT_SRC_PTP_INT ); -if (ptpirq->irq_num <0 ) { - ret = ptpirq->irq_num; +if (!ptpirq->irq_num) { + ret = -EINVAL ; goto out; }
@@ -1159,12 +1156,11 @@ int ksz_ptp_irq_setup(struct dsa_switch *ds, u8 p) out_ptp_msg:free_irq (ptpirq->irq_num, ptpirq); -while (irq--) +while (irq--) {free_irq (port->ptpmsg_irq[irq].num, &port->ptpmsg_irq[irq]); -out: -for (irq =0 ; irq < ptpirq->nirqs; irq++)irq_dispose_mapping (port->ptpmsg_irq[irq].num); - + } +out:irq_domain_remove (ptpirq->domain);return ret;
drivers/net/dsa/sja1105/sja1105_main.c +0 -7
@@ -1302,14 +1302,7 @@ static int sja1105_set_port_speed(struct sja1105_private *priv, int port,* table, since this will be used for the clocking setup, and we no * longer need to store it in the static config (already told hardware * we want auto during upload phase). -* Actually for the SGMII port, the MAC is fixed at 1 Gbps and -* we need to configure the PCS only (if even that). */ -if (priv->phy_mode[port] ==PHY_INTERFACE_MODE_SGMII ) - speed = priv->info->port_speed[SJA1105_SPEED_1000MBPS ]; -else if (priv->phy_mode[port] ==PHY_INTERFACE_MODE_2500BASEX ) - speed = priv->info->port_speed[SJA1105_SPEED_2500MBPS ]; - mac[port].speed = speed;return 0 ;
drivers/net/ethernet/aquantia/atlantic/aq_hw_utils.c +22 -0
@@ -15,6 +15,7 @@#include "aq_hw.h" #include "aq_nic.h" +#include "hw_atl/hw_atl_llh.h" void aq_hw_write_reg_bit (struct aq_hw_s *aq_hw,u32 addr,u32 msk,u32 shift,u32 val)
@@ -81,6 +82,27 @@ void aq_hw_write_reg64(struct aq_hw_s *hw, u32 reg, u64 value)lo_hi_writeq (value, hw->mmio + reg); } +int aq_hw_invalidate_descriptor_cache (struct aq_hw_s *hw) +{ +int err; +u32 val; + +/* Invalidate Descriptor Cache to prevent writing to the cached +* descriptors and to the data pointer of those descriptors +*/ +hw_atl_rdm_rx_dma_desc_cache_init_tgl (hw); + + err =aq_hw_err_from_flags (hw); +if (err) + goto err_exit; + +readx_poll_timeout_atomic (hw_atl_rdm_rx_dma_desc_cache_init_done_get, + hw, val, val ==1 ,1000U ,10000U ); + +err_exit: +return err; +} +int aq_hw_err_from_flags (struct aq_hw_s *hw) {int err =0 ;
drivers/net/ethernet/aquantia/atlantic/aq_hw_utils.h +1 -0
@@ -35,6 +35,7 @@ u32 aq_hw_read_reg(struct aq_hw_s *hw, u32 reg);void aq_hw_write_reg (struct aq_hw_s *hw,u32 reg,u32 value);u64 aq_hw_read_reg64 (struct aq_hw_s *hw,u32 reg);void aq_hw_write_reg64 (struct aq_hw_s *hw,u32 reg,u64 value); +int aq_hw_invalidate_descriptor_cache (struct aq_hw_s *hw);int aq_hw_err_from_flags (struct aq_hw_s *hw);int aq_hw_num_tcs (struct aq_hw_s *hw);int aq_hw_q_per_tc (struct aq_hw_s *hw);
drivers/net/ethernet/aquantia/atlantic/aq_ring.c +5 -0
@@ -547,6 +547,11 @@ static int __aq_ring_rx_clean(struct aq_ring_s *self, struct napi_struct *napi,if (!buff->is_eop) {unsigned int frag_cnt =0U ; + +/* There will be an extra fragment */ +if (buff->len >AQ_CFG_RX_HDR_SIZE ) + frag_cnt++; + buff_ = buff; do { bool is_rsc_completed = true;
drivers/net/ethernet/aquantia/atlantic/hw_atl/hw_atl_b0.c +1 -18
@@ -1198,26 +1198,9 @@ static int hw_atl_b0_hw_interrupt_moderation_set(struct aq_hw_s *self)static int hw_atl_b0_hw_stop (struct aq_hw_s *self) { -int err; -u32 val; -hw_atl_b0_hw_irq_disable (self,HW_ATL_B0_INT_MASK ); -/* Invalidate Descriptor Cache to prevent writing to the cached -* descriptors and to the data pointer of those descriptors -*/ -hw_atl_rdm_rx_dma_desc_cache_init_tgl (self); - - err =aq_hw_err_from_flags (self); - -if (err) - goto err_exit; - -readx_poll_timeout_atomic (hw_atl_rdm_rx_dma_desc_cache_init_done_get, - self, val, val ==1 ,1000U ,10000U ); - -err_exit: -return err; +return aq_hw_invalidate_descriptor_cache (self); }int hw_atl_b0_hw_ring_tx_stop (struct aq_hw_s *self,struct aq_ring_s *ring)
drivers/net/ethernet/aquantia/atlantic/hw_atl2/hw_atl2.c +1 -1
@@ -759,7 +759,7 @@ static int hw_atl2_hw_stop(struct aq_hw_s *self) {hw_atl_b0_hw_irq_disable (self,HW_ATL2_INT_MASK ); -return 0 ; +return aq_hw_invalidate_descriptor_cache (self); }static struct aq_stats_s *hw_atl2_utils_get_hw_stats (struct aq_hw_s *self)
drivers/net/ethernet/freescale/fec.h +1 -0
@@ -680,6 +680,7 @@ struct fec_enet_private {unsigned int reload_period;int pps_enable;unsigned int next_counter; +bool perout_enable;struct hrtimer perout_timer;u64 perout_stime;
drivers/net/ethernet/freescale/fec_ptp.c +52 -12
115 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c +1 -1
@@ -627,7 +627,7 @@ static int mlx5e_dcbnl_ieee_setmaxrate(struct net_device *netdev, MLX5E_100MB); max_bw_value[i] = max_bw_value[i] ? max_bw_value[i] :1 ; max_bw_unit[i] =MLX5_100_MBPS_UNIT ; - }else if (max_bw_value[i] <= upper_limit_gbps) { + }else if (maxrate->tc_maxrate[i] <= upper_limit_gbps) { max_bw_value[i] =div_u64 (maxrate->tc_maxrate[i],MLX5E_1GB ); max_bw_unit[i] =MLX5_GBPS_UNIT ;
drivers/net/ethernet/meta/fbnic/fbnic_fw.c +1 -1
@@ -201,7 +201,7 @@ static int fbnic_mbx_alloc_rx_msgs(struct fbnic_dev *fbd)return -ENODEV ;/* Fill all but 1 unused descriptors in the Rx queue. */ - count = (head - tail -1 ) %FBNIC_IPC_MBX_DESC_LEN ; + count = (head - tail -1 ) & (FBNIC_IPC_MBX_DESC_LEN -1 );while (!err && count--) {struct fbnic_tlv_msg *msg;
drivers/net/ethernet/microchip/lan966x/lan966x_ptp.c +4 -1
@@ -1,11 +1,14 @@// SPDX-License-Identifier: GPL-2.0+ #include <linux/ptp_classify.h> +#include <linux/units.h> #include "lan966x_main.h" #include "vcap_api.h" #include "vcap_api_client.h" +#define LAN9X66_CLOCK_RATE 165617754 +#define LAN966X_MAX_PTP_ID 512/* Represents 1ppm adjustment in 2^59 format with 6.037735849ns as reference
@@ -1126,5 +1129,5 @@ void lan966x_ptp_rxtstamp(struct lan966x *lan966x, struct sk_buff *skb,u32 lan966x_ptp_get_period_ps (void ) {/* This represents the system clock period in picoseconds */ -return 15125 ; +return PICO /LAN9X66_CLOCK_RATE ; }
drivers/net/ethernet/realtek/r8169_main.c +14 -5
@@ -1514,11 +1514,20 @@ static enum rtl_dash_type rtl_get_dash_type(struct rtl8169_private *tp)static void rtl_set_d3_pll_down (struct rtl8169_private *tp,bool enable) { -if (tp->mac_version >=RTL_GIGA_MAC_VER_25 && - tp->mac_version !=RTL_GIGA_MAC_VER_28 && - tp->mac_version !=RTL_GIGA_MAC_VER_31 && - tp->mac_version !=RTL_GIGA_MAC_VER_38 ) -r8169_mod_reg8_cond (tp,PMCH ,D3_NO_PLL_DOWN , !enable); +switch (tp->mac_version) { + case RTL_GIGA_MAC_VER_02 ... RTL_GIGA_MAC_VER_24: +case RTL_GIGA_MAC_VER_28 : +case RTL_GIGA_MAC_VER_31 : +case RTL_GIGA_MAC_VER_38 : +break ; +case RTL_GIGA_MAC_VER_80 : +r8169_mod_reg8_cond (tp,PMCH ,D3_NO_PLL_DOWN , true); +break ; +default : +r8169_mod_reg8_cond (tp,PMCH ,D3HOT_NO_PLL_DOWN , true); +r8169_mod_reg8_cond (tp,PMCH ,D3COLD_NO_PLL_DOWN , !enable); +break ; + } }static void rtl_reset_packet_filter (struct rtl8169_private *tp)
drivers/net/ethernet/samsung/sxgbe/sxgbe_main.c +3 -1
@@ -1521,8 +1521,10 @@ static int sxgbe_rx(struct sxgbe_priv_data *priv, int limit) skb = priv->rxq[qnum]->rx_skbuff[entry]; -if (unlikely (!skb)) +if (unlikely (!skb)) {netdev_err (priv->dev,"rx descriptor is not consistent\n" ); +break ; + }prefetch (skb->data -NET_IP_ALIGN ); priv->rxq[qnum]->rx_skbuff[entry] =NULL ;
drivers/net/phy/mxl-gpy.c +12 -8
@@ -540,7 +540,7 @@ static int gpy_update_interface(struct phy_device *phydev)/* Interface mode is fixed for USXGMII and integrated PHY */ if (phydev->interface ==PHY_INTERFACE_MODE_USXGMII || phydev->interface ==PHY_INTERFACE_MODE_INTERNAL ) -return -EINVAL ; +return 0 ;/* Automatically switch SERDES interface between SGMII and 2500-BaseX * according to speed. Disable ANEG in 2500-BaseX mode.
@@ -578,13 +578,7 @@ static int gpy_update_interface(struct phy_device *phydev)break ; } -if (phydev->speed ==SPEED_2500 || phydev->speed ==SPEED_1000 ) { - ret =genphy_read_master_slave (phydev); -if (ret <0 ) -return ret; - } - -return gpy_update_mdix (phydev); +return 0 ; }static int gpy_read_status (struct phy_device *phydev)
@@ -639,6 +633,16 @@ static int gpy_read_status(struct phy_device *phydev) ret =gpy_update_interface (phydev);if (ret <0 )return ret; + +if (phydev->speed ==SPEED_2500 || phydev->speed ==SPEED_1000 ) { + ret =genphy_read_master_slave (phydev); +if (ret <0 ) +return ret; + } + + ret =gpy_update_mdix (phydev); +if (ret <0 ) +return ret; }return 0 ;
drivers/net/team/team_core.c +15 -8
@@ -1191,10 +1191,6 @@ static int team_port_add(struct team *team, struct net_device *port_dev,return -EPERM ; } - err =team_dev_type_check_change (dev, port_dev); -if (err) -return err; -if (port_dev->flags &IFF_UP ) {NL_SET_ERR_MSG (extack,"Device is up. Set it down before adding it as a team port" ); netdev_err(dev, "Device %s is up. Set it down before adding it as a team port\n",
@@ -1212,10 +1208,16 @@ static int team_port_add(struct team *team, struct net_device *port_dev,INIT_LIST_HEAD (&port->qom_list); port->orig.mtu = port_dev->mtu; - err =dev_set_mtu (port_dev, dev->mtu); -if (err) { -netdev_dbg (dev,"Error %d calling dev_set_mtu\n" , err); - goto err_set_mtu; +/* +* MTU assignment will be handled in team_dev_type_check_change +* if dev and port_dev are of different types +*/ +if (dev->type == port_dev->type) { + err =dev_set_mtu (port_dev, dev->mtu); +if (err) { +netdev_dbg (dev,"Error %d calling dev_set_mtu\n" , err); + goto err_set_mtu; + } }memcpy (port->orig.dev_addr, port_dev->dev_addr, port_dev->addr_len);
@@ -1290,6 +1292,10 @@ static int team_port_add(struct team *team, struct net_device *port_dev, } } + err =team_dev_type_check_change (dev, port_dev); +if (err) + goto err_set_dev_type; +if (dev->flags &IFF_UP ) {netif_addr_lock_bh (dev);dev_uc_sync_multiple (port_dev, dev);
@@ -1308,6 +1314,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev,return 0 ; +err_set_dev_type: err_set_slave_promisc:__team_option_inst_del_port (team, port);
drivers/net/tun_vnet.h +1 -1
@@ -244,7 +244,7 @@ tun_vnet_hdr_tnl_from_skb(unsigned int flags,if (virtio_net_hdr_tnl_from_skb (skb, tnl_hdr, has_tnl_offload,tun_vnet_is_little_endian (flags), - vlan_hlen)) { + vlan_hlen, true)) {struct virtio_net_hdr_v1 *hdr = &tnl_hdr->hash_hdr.hdr;struct skb_shared_info *sinfo =skb_shinfo (skb);
drivers/net/veth.c +3 -4
@@ -975,6 +975,9 @@ static int veth_poll(struct napi_struct *napi, int budget)if (stats.xdp_redirect >0 )xdp_do_flush (); +if (stats.xdp_tx >0 ) +veth_xdp_flush (rq, &bq); +xdp_clear_return_frame_no_direct ();if (done < budget &&napi_complete_done (napi, done)) {/* Write rx_notify_masked before reading ptr_ring */
@@ -987,10 +990,6 @@ static int veth_poll(struct napi_struct *napi, int budget) } } -if (stats.xdp_tx >0 ) -veth_xdp_flush (rq, &bq); -xdp_clear_return_frame_no_direct (); -/* Release backpressure per NAPI poll */ smp_rmb ();/* Paired with netif_tx_stop_queue set_bit */ if (peer_txq &&netif_tx_queue_stopped (peer_txq)) {
drivers/net/virtio_net.c +2 -1
@@ -3340,7 +3340,8 @@ static int xmit_skb(struct send_queue *sq, struct sk_buff *skb, bool orphan) hdr = &skb_vnet_common_hdr (skb)->tnl_hdr;if (virtio_net_hdr_tnl_from_skb (skb, hdr, vi->tx_tnl, -virtio_is_little_endian (vi->vdev),0 )) +virtio_is_little_endian (vi->vdev),0 , + false))return -EPROTO ;if (vi->mergeable_rx_bufs)
drivers/net/wwan/mhi_wwan_mbim.c +1 -1
@@ -98,7 +98,7 @@ static struct mhi_mbim_link *mhi_mbim_get_link_rcu(struct mhi_mbim_context *mbimstatic int mhi_mbim_get_link_mux_id (struct mhi_controller *cntrl) {if (strcmp (cntrl->name,"foxconn-dw5934e" ) ==0 || -strcmp (cntrl->name,"foxconn-t99w515" ) ==0 ) +strcmp (cntrl->name,"foxconn-t99w640" ) ==0 )return WDS_BIND_MUX_DATA_PORT_MUX_ID ;return 0 ;
drivers/nvmem/layouts.c +1 -1
@@ -51,7 +51,7 @@ static int nvmem_layout_bus_uevent(const struct device *dev,int ret; ret =of_device_uevent_modalias (dev, env); -if (ret !=ENODEV ) +if (ret != -ENODEV )return ret;return 0 ;
drivers/platform/x86/intel/punit_ipc.c +1 -1
@@ -250,7 +250,7 @@ static int intel_punit_ipc_probe(struct platform_device *pdev) }else { ret =devm_request_irq (&pdev->dev, irq, intel_punit_ioc,IRQF_NO_SUSPEND ,"intel_punit_ipc" , - &punit_ipcdev); + punit_ipcdev);if (ret) {dev_err (&pdev->dev,"Failed to request irq: %d\n" , irq);return ret;
drivers/pmdomain/tegra/powergate-bpmp.c +1 -0
@@ -184,6 +184,7 @@ tegra_powergate_add(struct tegra_bpmp *bpmp, powergate->genpd.name =kstrdup (info->name,GFP_KERNEL ); powergate->genpd.power_on = tegra_powergate_power_on; powergate->genpd.power_off = tegra_powergate_power_off; + powergate->genpd.flags =GENPD_FLAG_NO_STAY_ON ; err =pm_genpd_init (&powergate->genpd,NULL , off);if (err <0 ) {
drivers/regulator/rtq2208-regulator.c +3 -3
@@ -53,7 +53,7 @@#define RTQ2208_MASK_BUCKPH_GROUP1 GENMASK(6, 4)#define RTQ2208_MASK_BUCKPH_GROUP2 GENMASK(2, 0)#define RTQ2208_MASK_LDO2_OPT0 BIT(7) -#define RTQ2208_MASK_LDO2_OPT1 BIT(6) +#define RTQ2208_MASK_LDO2_OPT1 BIT(7)#define RTQ2208_MASK_LDO1_FIXED BIT(6)/* Size */
@@ -543,14 +543,14 @@ static int rtq2208_regulator_check(struct device *dev, int *num, int *regulator_switch (FIELD_GET (RTQ2208_MASK_BUCKPH_GROUP2 , buck_phase)) {case 2 : - rtq2208_used_table[RTQ2208_BUCK_F ] = true; + rtq2208_used_table[RTQ2208_BUCK_H ] = true; fallthrough;case 1 : rtq2208_used_table[RTQ2208_BUCK_E ] = true; fallthrough;case 0 :case 3 : - rtq2208_used_table[RTQ2208_BUCK_H ] = true; + rtq2208_used_table[RTQ2208_BUCK_F ] = true; fallthrough;default : rtq2208_used_table[RTQ2208_BUCK_G ] = true;
drivers/slimbus/qcom-ngd-ctrl.c +1 -0
@@ -1241,6 +1241,7 @@ static void qcom_slim_ngd_notify_slaves(struct qcom_slim_ngd_ctrl *ctrl)if (slim_get_logical_addr (sbdev))dev_err (ctrl->dev,"Failed to get logical address\n" ); +put_device (&sbdev->dev); } }
drivers/spi/Kconfig +2 -2
@@ -1170,10 +1170,10 @@ config SPI_TEGRA210_QUAD config SPI_TEGRA114 tristate "NVIDIA Tegra114 SPI Controller" - depends on (ARCH_TEGRA && TEGRA20_APB_DMA) || COMPILE_TEST + depends on ARCH_TEGRA || COMPILE_TEST depends on RESET_CONTROLLER help - SPI driver for NVIDIA Tegra114 SPI Controller interface. This controller + SPI controller driver for NVIDIA Tegra114 and later SoCs. This controller is different than the older SoCs SPI controller and also register interface get changed with this controller.
drivers/spi/spi-amlogic-spifc-a1.c +3 -1
@@ -353,7 +353,9 @@ static int amlogic_spifc_a1_probe(struct platform_device *pdev)pm_runtime_set_autosuspend_delay (spifc->dev,500 );pm_runtime_use_autosuspend (spifc->dev); -devm_pm_runtime_enable (spifc->dev); + ret =devm_pm_runtime_enable (spifc->dev); +if (ret) +return ret; ctrl->num_chipselect =1 ; ctrl->dev.of_node = pdev->dev.of_node;
drivers/spi/spi-bcm63xx.c +14 -0
@@ -247,6 +247,20 @@ static int bcm63xx_txrx_bufs(struct spi_device *spi, struct spi_transfer *first,if (t->rx_buf) { do_rx = true; + +/* +* In certain hardware implementations, there appears to be a +* hidden accumulator that tracks the number of bytes written into +* the hardware FIFO, and this accumulator overrides the length in +* the SPI_MSG_CTL register. +* +* Therefore, for read-only transfers, we need to write some dummy +* value into the FIFO to keep the accumulator tracking the correct +* length. +*/ +if (!t->tx_buf) +memset_io (bs->tx_io + len,0xFF , t->len); +/* prepend is half-duplex write only */ if (t == first) prepend_len =0 ;
drivers/spi/spi-cadence-quadspi.c +8 -10
@@ -1981,6 +1981,13 @@ static int cqspi_probe(struct platform_device *pdev) cqspi->current_cs =-1 ; cqspi->sclk =0 ; +if (!(ddata && (ddata->quirks &CQSPI_DISABLE_RUNTIME_PM ))) { +pm_runtime_enable (dev); +pm_runtime_set_autosuspend_delay (dev,CQSPI_AUTOSUSPEND_TIMEOUT ); +pm_runtime_use_autosuspend (dev); +pm_runtime_get_noresume (dev); + } + ret =cqspi_setup_flash (cqspi);if (ret) {dev_err (dev,"failed to setup flash parameters %d\n" , ret);
@@ -1995,14 +2002,7 @@ static int cqspi_probe(struct platform_device *pdev)if (cqspi->use_direct_mode) { ret =cqspi_request_mmap_dma (cqspi);if (ret == -EPROBE_DEFER ) - goto probe_dma_failed; - } - -if (!(ddata && (ddata->quirks &CQSPI_DISABLE_RUNTIME_PM ))) { -pm_runtime_enable (dev); -pm_runtime_set_autosuspend_delay (dev,CQSPI_AUTOSUSPEND_TIMEOUT ); -pm_runtime_use_autosuspend (dev); -pm_runtime_get_noresume (dev); + goto probe_setup_failed; } ret =spi_register_controller (host);
@@ -2012,7 +2012,6 @@ static int cqspi_probe(struct platform_device *pdev) }if (!(ddata && (ddata->quirks &CQSPI_DISABLE_RUNTIME_PM ))) { -pm_runtime_put_autosuspend (dev);pm_runtime_mark_last_busy (dev);pm_runtime_put_autosuspend (dev); }
@@ -2021,7 +2020,6 @@ static int cqspi_probe(struct platform_device *pdev) probe_setup_failed:if (!(ddata && (ddata->quirks &CQSPI_DISABLE_RUNTIME_PM )))pm_runtime_disable (dev); -probe_dma_failed:cqspi_controller_enable (cqspi,0 ); probe_reset_failed:if (cqspi->is_jh7110)
drivers/spi/spi-nxp-fspi.c +21 -7
@@ -330,6 +330,8 @@/* Access flash memory using IP bus only */ #define FSPI_QUIRK_USE_IP_ONLY BIT(0) +/* Disable DTR */ +#define FSPI_QUIRK_DISABLE_DTR BIT(1)struct nxp_fspi_devtype_data {unsigned int rxfifo;
@@ -344,7 +346,7 @@ static struct nxp_fspi_devtype_data lx2160a_data = { .rxfifo = SZ_512, /* (64 * 64 bits) */ .txfifo = SZ_1K, /* (128 * 64 bits) */ .ahb_buf_size = SZ_2K, /* (256 * 64 bits) */ - .quirks = 0, + .quirks = FSPI_QUIRK_DISABLE_DTR, .lut_num = 32, .little_endian = true, /* little-endian */ };
@@ -1236,6 +1238,13 @@ static const struct spi_controller_mem_ops nxp_fspi_mem_ops = { };static const struct spi_controller_mem_caps nxp_fspi_mem_caps = { + .dtr = true, + .swap16 = false, + .per_op_freq = true, +}; + +static const struct spi_controller_mem_caps nxp_fspi_mem_caps_disable_dtr = { + .dtr = false, .per_op_freq = true, };
@@ -1261,7 +1270,7 @@ static int nxp_fspi_probe(struct platform_device *pdev) {struct spi_controller *ctlr;struct device *dev = &pdev->dev; -struct device_node *np = dev->of_node; +struct fwnode_handle *fwnode =dev_fwnode (dev);struct resource *res;struct nxp_fspi *f;int ret, irq;
@@ -1283,7 +1292,7 @@ static int nxp_fspi_probe(struct platform_device *pdev)platform_set_drvdata (pdev, f);/* find the resources - configuration register address space */ -if (is_acpi_node (dev_fwnode (f->dev))) +if (is_acpi_node (fwnode)) f->iobase =devm_platform_ioremap_resource (pdev,0 );else f->iobase =devm_platform_ioremap_resource_byname (pdev,"fspi_base" );
@@ -1291,7 +1300,7 @@ static int nxp_fspi_probe(struct platform_device *pdev)return PTR_ERR (f->iobase);/* find the resources - controller memory mapped space */ -if (is_acpi_node (dev_fwnode (f->dev))) +if (is_acpi_node (fwnode)) res =platform_get_resource (pdev,IORESOURCE_MEM ,1 );else res = platform_get_resource_byname(pdev,
@@ -1304,7 +1313,7 @@ static int nxp_fspi_probe(struct platform_device *pdev) f->memmap_phy_size =resource_size (res);/* find the clocks */ -if (dev_of_node (&pdev->dev)) { +if (is_of_node (fwnode)) { f->clk_en =devm_clk_get (dev,"fspi_en" );if (IS_ERR (f->clk_en))return PTR_ERR (f->clk_en);
@@ -1351,8 +1360,13 @@ static int nxp_fspi_probe(struct platform_device *pdev) ctlr->bus_num =-1 ; ctlr->num_chipselect =NXP_FSPI_MAX_CHIPSELECT ; ctlr->mem_ops = &nxp_fspi_mem_ops; - ctlr->mem_caps = &nxp_fspi_mem_caps; - ctlr->dev.of_node = np; + +if (f->devtype_data->quirks &FSPI_QUIRK_DISABLE_DTR ) + ctlr->mem_caps = &nxp_fspi_mem_caps_disable_dtr; +else + ctlr->mem_caps = &nxp_fspi_mem_caps; + +device_set_node (&ctlr->dev, fwnode); ret =devm_add_action_or_reset (dev, nxp_fspi_cleanup, f);if (ret)
drivers/thunderbolt/nhi.c +2 -0
@@ -1528,6 +1528,8 @@ static struct pci_device_id nhi_ids[] = { .driver_data = (kernel_ulong_t)&icl_nhi_ops }, { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_PTL_P_NHI1), .driver_data = (kernel_ulong_t)&icl_nhi_ops }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_WCL_NHI0), + .driver_data = (kernel_ulong_t)&icl_nhi_ops }, { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HOST_80G_NHI) }, { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HOST_40G_NHI) },
drivers/thunderbolt/nhi.h +1 -0
@@ -75,6 +75,7 @@ extern const struct tb_nhi_ops icl_nhi_ops;#define PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_BRIDGE 0x15ef#define PCI_DEVICE_ID_INTEL_ADL_NHI0 0x463e#define PCI_DEVICE_ID_INTEL_ADL_NHI1 0x466d +#define PCI_DEVICE_ID_INTEL_WCL_NHI0 0x4d33#define PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HOST_80G_NHI 0x5781#define PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HOST_40G_NHI 0x5784#define PCI_DEVICE_ID_INTEL_BARLOW_RIDGE_HUB_80G_BRIDGE 0x5786
drivers/tty/serial/8250/8250.h +2 -2
@@ -317,13 +317,13 @@ static inline void serial8250_pnp_exit(void) { }#endif #ifdef CONFIG_SERIAL_8250_RSA -void univ8250_rsa_support (struct uart_ops *ops); +void univ8250_rsa_support (struct uart_ops *ops,const struct uart_ops *core_ops);void rsa_enable (struct uart_8250_port *up);void rsa_disable (struct uart_8250_port *up);void rsa_autoconfig (struct uart_8250_port *up);void rsa_reset (struct uart_8250_port *up);#else -static inline void univ8250_rsa_support (struct uart_ops *ops) { } +static inline void univ8250_rsa_support (struct uart_ops *ops,const struct uart_ops *core_ops) { }static inline void rsa_enable (struct uart_8250_port *up) {}static inline void rsa_disable (struct uart_8250_port *up) {}static inline void rsa_autoconfig (struct uart_8250_port *up) {}
drivers/tty/serial/8250/8250_platform.c +1 -1
@@ -74,7 +74,7 @@ static void __init __serial8250_isa_init_ports(void)/* chain base port ops to support Remote Supervisor Adapter */ univ8250_port_ops = *univ8250_port_base_ops; -univ8250_rsa_support (&univ8250_port_ops); +univ8250_rsa_support (&univ8250_port_ops, univ8250_port_base_ops);if (share_irqs) irqflag =IRQF_SHARED ;
drivers/tty/serial/8250/8250_rsa.c +17 -9
@@ -14,6 +14,8 @@static unsigned long probe_rsa[PORT_RSA_MAX ];static unsigned int probe_rsa_count; +static const struct uart_ops *core_port_base_ops; +static int rsa8250_request_resource (struct uart_8250_port *up) {struct uart_port *port = &up->port;
@@ -67,7 +69,7 @@ static void univ8250_config_port(struct uart_port *port, int flags) } } - univ8250_port_base_ops->config_port (port, flags); + core_port_base_ops->config_port (port, flags);if (port->type !=PORT_RSA && up->probe &UART_PROBE_RSA )rsa8250_release_resource (up);
@@ -78,11 +80,11 @@ static int univ8250_request_port(struct uart_port *port)struct uart_8250_port *up =up_to_u8250p (port);int ret; - ret = univ8250_port_base_ops->request_port (port); + ret = core_port_base_ops->request_port (port);if (ret ==0 && port->type ==PORT_RSA ) { ret =rsa8250_request_resource (up);if (ret <0 ) - univ8250_port_base_ops->release_port (port); + core_port_base_ops->release_port (port); }return ret;
@@ -94,15 +96,25 @@ static void univ8250_release_port(struct uart_port *port)if (port->type ==PORT_RSA )rsa8250_release_resource (up); - univ8250_port_base_ops->release_port (port); + core_port_base_ops->release_port (port); } -void univ8250_rsa_support (struct uart_ops *ops) +/* +* It is not allowed to directly reference any symbols from 8250.ko here as +* that would result in a dependency loop between the 8250.ko and +* 8250_base.ko modules. This function is called from 8250.ko and is used to +* break the symbolic dependency cycle. Anything that is needed from 8250.ko +* has to be passed as pointers to this function which then can adjust those +* variables on 8250.ko side or store them locally as needed. +*/ +void univ8250_rsa_support (struct uart_ops *ops,const struct uart_ops *core_ops) { + core_port_base_ops = core_ops; ops->config_port = univ8250_config_port; ops->request_port = univ8250_request_port; ops->release_port = univ8250_release_port; } +EXPORT_SYMBOL_FOR_MODULES (univ8250_rsa_support,"8250" );module_param_hw_array (probe_rsa, ulong, ioport, &probe_rsa_count,0444 );MODULE_PARM_DESC (probe_rsa,"Probe I/O ports for RSA" );
@@ -147,7 +159,6 @@ void rsa_enable(struct uart_8250_port *up)if (up->port.uartclk ==SERIAL_RSA_BAUD_BASE *16 )serial_out (up,UART_RSA_FRR ,0 ); } -EXPORT_SYMBOL_FOR_MODULES (rsa_enable,"8250_base" );/* * Attempts to turn off the RSA FIFO and resets the RSA board back to 115kbps compat mode. It is
@@ -179,7 +190,6 @@ void rsa_disable(struct uart_8250_port *up) up->port.uartclk =SERIAL_RSA_BAUD_BASE_LO *16 ;uart_port_unlock_irq (&up->port); } -EXPORT_SYMBOL_FOR_MODULES (rsa_disable,"8250_base" );void rsa_autoconfig (struct uart_8250_port *up) {
@@ -192,7 +202,6 @@ void rsa_autoconfig(struct uart_8250_port *up)if (__rsa_enable (up)) up->port.type =PORT_RSA ; } -EXPORT_SYMBOL_FOR_MODULES (rsa_autoconfig,"8250_base" );void rsa_reset (struct uart_8250_port *up) {
@@ -201,7 +210,6 @@ void rsa_reset(struct uart_8250_port *up)serial_out (up,UART_RSA_FRR ,0 ); } -EXPORT_SYMBOL_FOR_MODULES (rsa_reset,"8250_base" );#ifdef CONFIG_SERIAL_8250_DEPRECATED_OPTIONS #ifndef MODULE
drivers/tty/serial/8250/Makefile +1 -1
@@ -7,7 +7,6 @@ obj-$(CONFIG_SERIAL_8250) += 8250.o 8250-y := 8250_core.o 8250-y += 8250_platform.o 8250-$(CONFIG_SERIAL_8250_PNP) += 8250_pnp.o -8250-$(CONFIG_SERIAL_8250_RSA) += 8250_rsa.o obj-$(CONFIG_SERIAL_8250) += 8250_base.o 8250_base-y := 8250_port.o
@@ -15,6 +14,7 @@ obj-$(CONFIG_SERIAL_8250) += 8250_base.o 8250_base-$(CONFIG_SERIAL_8250_DWLIB) += 8250_dwlib.o 8250_base-$(CONFIG_SERIAL_8250_FINTEK) += 8250_fintek.o 8250_base-$(CONFIG_SERIAL_8250_PCILIB) += 8250_pcilib.o +8250_base-$(CONFIG_SERIAL_8250_RSA) += 8250_rsa.o obj-$(CONFIG_SERIAL_8250_CONSOLE) += 8250_early.o
drivers/tty/serial/amba-pl011.c +1 -1
@@ -628,7 +628,7 @@ static int pl011_dma_tx_refill(struct uart_amba_port *uap) dmatx->len = count; dmatx->dma =dma_map_single (dma_dev->dev, dmatx->buf, count,DMA_TO_DEVICE ); -if (dmatx->dma ==DMA_MAPPING_ERROR ) { +if (dma_mapping_error (dma_dev->dev, dmatx->dma)) { uap->dmatx.queued = false;dev_dbg (uap->port.dev,"unable to map TX DMA\n" );return -EBUSY ;
drivers/usb/cdns3/cdns3-pci-wrap.c +1 -4
@@ -98,10 +98,8 @@ static int cdns3_pci_probe(struct pci_dev *pdev, wrap =pci_get_drvdata (func); }else { wrap =kzalloc (sizeof (*wrap),GFP_KERNEL ); -if (!wrap) { -pci_disable_device (pdev); +if (!wrap)return -ENOMEM ; - } } res = wrap->dev_res;
@@ -160,7 +158,6 @@ static int cdns3_pci_probe(struct pci_dev *pdev,/* register platform device */ wrap->plat_dev =platform_device_register_full (&plat_info);if (IS_ERR (wrap->plat_dev)) { -pci_disable_device (pdev); err =PTR_ERR (wrap->plat_dev);kfree (wrap);return err;
drivers/usb/dwc3/core.c +2 -1
@@ -25,6 +25,7 @@#include <linux/of.h> #include <linux/of_graph.h> #include <linux/acpi.h> +#include <linux/pci.h> #include <linux/pinctrl/consumer.h> #include <linux/pinctrl/devinfo.h> #include <linux/reset.h>
@@ -2240,7 +2241,7 @@ int dwc3_core_probe(const struct dwc3_probe_data *data)dev_set_drvdata (dev, dwc);dwc3_cache_hwparams (dwc); -if (!dwc->sysdev_is_parent && +if (!dev_is_pci (dwc->sysdev) &&DWC3_GHWPARAMS0_AWIDTH (dwc->hwparams.hwparams0) ==64 ) { ret =dma_set_mask_and_coherent (dwc->sysdev,DMA_BIT_MASK (64 ));if (ret)
drivers/usb/dwc3/dwc3-pci.c +41 -39
121 lines not on this page · raw message
drivers/usb/dwc3/ep0.c +1 -0
@@ -94,6 +94,7 @@ static int __dwc3_gadget_ep0_queue(struct dwc3_ep *dep, req->request.actual =0 ; req->request.status = -EINPROGRESS ; req->epnum = dep->number; + req->status =DWC3_REQUEST_STATUS_QUEUED ;list_add_tail (&req->list, &dep->pending_list);
drivers/usb/dwc3/gadget.c +7 -0
@@ -228,6 +228,13 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req, {struct dwc3 *dwc = dep->dwc; +/* +* The request might have been processed and completed while the +* spinlock was released. Skip processing if already completed. +*/ +if (req->status ==DWC3_REQUEST_STATUS_COMPLETED ) +return ; +dwc3_gadget_del_and_unmap_request (dep, req, status); req->status =DWC3_REQUEST_STATUS_COMPLETED ;
drivers/usb/gadget/function/f_eem.c +6 -1
@@ -477,8 +477,13 @@ static int eem_unwrap(struct gether *port, req->complete = eem_cmd_complete; req->zero =1 ; req->context = ctx; -if (usb_ep_queue (port->in_ep, req,GFP_ATOMIC )) +if (usb_ep_queue (port->in_ep, req,GFP_ATOMIC )) {DBG (cdev,"echo response queue fail\n" ); +kfree (ctx); +kfree (req->buf); +usb_ep_free_request (ep, req); +dev_kfree_skb_any (skb2); + }break ;case 1 :/* echo response */
drivers/usb/gadget/udc/core.c +17 -1
@@ -1126,8 +1126,14 @@ static void usb_gadget_state_work(struct work_struct *work)void usb_gadget_set_state (struct usb_gadget *gadget,enum usb_device_state state) { +unsigned long flags; + +spin_lock_irqsave (&gadget->state_lock, flags); gadget->state = state; -schedule_work (&gadget->work); +if (!gadget->teardown) +schedule_work (&gadget->work); +spin_unlock_irqrestore (&gadget->state_lock, flags); +trace_usb_gadget_set_state (gadget,0 ); }EXPORT_SYMBOL_GPL (usb_gadget_set_state);
@@ -1360,6 +1366,8 @@ static void usb_udc_nop_release(struct device *dev)void usb_initialize_gadget (struct device *parent,struct usb_gadget *gadget,void (*release)(struct device *dev)) { +spin_lock_init (&gadget->state_lock); + gadget->teardown = false;INIT_WORK (&gadget->work, usb_gadget_state_work); gadget->dev.parent = parent;
@@ -1534,6 +1542,7 @@ EXPORT_SYMBOL_GPL(usb_add_gadget_udc);void usb_del_gadget (struct usb_gadget *gadget) {struct usb_udc *udc = gadget->udc; +unsigned long flags;if (!udc)return ;
@@ -1547,6 +1556,13 @@ void usb_del_gadget(struct usb_gadget *gadget)kobject_uevent (&udc->dev.kobj,KOBJ_REMOVE );sysfs_remove_link (&udc->dev.kobj,"gadget" );device_del (&gadget->dev); +/* +* Set the teardown flag before flushing the work to prevent new work +* from being scheduled while we are cleaning up. +*/ +spin_lock_irqsave (&gadget->state_lock, flags); + gadget->teardown = true; +spin_unlock_irqrestore (&gadget->state_lock, flags);flush_work (&gadget->work);ida_free (&gadget_id_numbers, gadget->id_number);cancel_work_sync (&udc->vbus_work);
drivers/usb/gadget/udc/renesas_usbf.c +3 -1
@@ -3262,7 +3262,9 @@ static int usbf_probe(struct platform_device *pdev)if (IS_ERR (udc->regs))return PTR_ERR (udc->regs); -devm_pm_runtime_enable (&pdev->dev); + ret =devm_pm_runtime_enable (&pdev->dev); +if (ret) +return ret; ret =pm_runtime_resume_and_get (&pdev->dev);if (ret <0 )return ret;
drivers/usb/gadget/udc/trace.h +5 -0
@@ -81,6 +81,11 @@ DECLARE_EVENT_CLASS(udc_log_gadget, __entry->ret) ); +DEFINE_EVENT (udc_log_gadget, usb_gadget_set_state, + TP_PROTO(struct usb_gadget *g, int ret), +TP_ARGS (g, ret) +); +DEFINE_EVENT (udc_log_gadget, usb_gadget_frame_number, TP_PROTO(struct usb_gadget *g, int ret), TP_ARGS(g, ret)
drivers/usb/host/xhci-dbgcap.h +1 -0
@@ -114,6 +114,7 @@ struct dbc_port {unsigned int tx_boundary;bool registered; +bool tx_running; };struct dbc_driver {
drivers/usb/host/xhci-dbgtty.c +22 -1
@@ -47,7 +47,7 @@ dbc_kfifo_to_req(struct dbc_port *port, char *packet)return len; } -static int dbc_start_tx (struct dbc_port *port) +static int dbc_do_start_tx (struct dbc_port *port) __releases(&port->port_lock) __acquires(&port->port_lock) {
@@ -57,6 +57,8 @@ static int dbc_start_tx(struct dbc_port *port)bool do_tty_wake = false;struct list_head *pool = &port->write_pool; + port->tx_running = true; +while (!list_empty (pool)) { req = list_entry(pool->next, struct dbc_request, list_pool); len =dbc_kfifo_to_req (port, req->buf);
@@ -77,12 +79,25 @@ static int dbc_start_tx(struct dbc_port *port) } } + port->tx_running = false; +if (do_tty_wake && port->port.tty)tty_wakeup (port->port.tty);return status; } +/* must be called with port->port_lock held */ +static int dbc_start_tx (struct dbc_port *port) +{ +lockdep_assert_held (&port->port_lock); + +if (port->tx_running) +return -EBUSY ; + +return dbc_do_start_tx (port); +} + static void dbc_start_rx(struct dbc_port *port) __releases(&port->port_lock) __acquires(&port->port_lock)
@@ -535,6 +550,12 @@ static void xhci_dbc_tty_unregister_device(struct xhci_dbc *dbc)if (!port->registered)return ; +/* +* Hang up the TTY. This wakes up any blocked +* writers and causes subsequent writes to fail. +*/ +tty_vhangup (port->port.tty); +tty_unregister_device (dbc_tty_driver, port->minor);xhci_dbc_tty_exit_port (port); port->registered = false;
drivers/usb/host/xhci-ring.c +10 -5
@@ -1984,6 +1984,7 @@ static void xhci_cavium_reset_phy_quirk(struct xhci_hcd *xhci)static void handle_port_status (struct xhci_hcd *xhci,union xhci_trb *event)
Lines of this file are not shown. View the raw message.
drivers/vhost/net.c +32 -21
53 lines not on this page · raw message
drivers/vhost/vhost.c +62 -14
76 lines not on this page · raw message
fs/afs/cell.c +8 -35
43 lines not on this page · raw message
fs/afs/security.c +41 -8
49 lines not on this page · raw message
include/linux/mailbox/mtk-cmdq-mailbox.h +10 -0
Lines of this file are not shown. View the raw message.
net/bluetooth/hci_core.c +37 -52
89 lines not on this page · raw message
net/ceph/ceph_common.c +32 -21
53 lines not on this page · raw message
net/xdp/xsk.c +97 -63
160 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.