Linux 6.0.7
Greg Kroah-Hartman
maintainerI'm announcing the release of the 6.0.7 kernel.
All users of the 6.0 kernel series must upgrade.
The updated 6.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-6.0.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/pinctrl/xlnx,zynqmp-pinctrl.yaml | 4 Makefile | 2 arch/arc/include/asm/io.h | 2 arch/arc/include/asm/pgtable-levels.h | 2 arch/arc/mm/ioremap.c | 2 arch/arm64/include/asm/cputype.h | 4 arch/arm64/kernel/proton-pack.c | 6 arch/powerpc/kernel/interrupt_64.S | 13 arch/riscv/Kconfig | 17 arch/riscv/Makefile | 6 arch/riscv/include/asm/cacheflush.h | 8 arch/riscv/include/asm/jump_label.h | 8 arch/riscv/include/asm/kvm_vcpu_timer.h | 1 arch/riscv/include/asm/vdso/processor.h | 2 arch/riscv/include/uapi/asm/kvm.h | 1 arch/riscv/kvm/vcpu.c | 11 arch/riscv/kvm/vcpu_timer.c | 17 arch/riscv/mm/cacheflush.c | 38 arch/riscv/mm/dma-noncoherent.c | 39 arch/riscv/mm/kasan_init.c | 7 arch/s390/boot/vmlinux.lds.S | 13 arch/s390/include/asm/futex.h | 3 arch/s390/lib/uaccess.c | 6 arch/s390/pci/pci_mmio.c | 8 arch/x86/crypto/polyval-clmulni_glue.c | 19 arch/x86/events/intel/lbr.c | 2 arch/x86/kernel/fpu/init.c | 8 arch/x86/kernel/fpu/xstate.c | 42 arch/x86/kernel/unwind_orc.c | 2 drivers/acpi/acpi_pcc.c | 2 drivers/base/power/domain.c | 4 drivers/char/random.c | 4 drivers/counter/104-quad-8.c | 64 drivers/counter/microchip-tcb-capture.c | 18 drivers/cpufreq/intel_pstate.c | 133 - drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c | 5 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 16 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 20 drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c | 28 drivers/gpu/drm/amd/amdkfd/kfd_crat.c | 106 drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c | 50 drivers/gpu/drm/bridge/parade-ps8640.c | 25 drivers/gpu/drm/i915/display/intel_dp.c | 2 drivers/gpu/drm/i915/gt/intel_workarounds.c | 4 drivers/gpu/drm/i915/intel_runtime_pm.c | 11 drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c | 7 drivers/gpu/drm/msm/adreno/adreno_gpu.c | 7 drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c | 5 drivers/gpu/drm/msm/dp/dp_ctrl.c | 13 drivers/gpu/drm/msm/dp/dp_display.c | 23 drivers/gpu/drm/msm/dp/dp_drm.c | 34 drivers/gpu/drm/msm/dp/dp_parser.c | 6 drivers/gpu/drm/msm/dp/dp_parser.h | 5 drivers/gpu/drm/msm/dsi/dsi.c | 6 drivers/gpu/drm/msm/hdmi/hdmi.c | 7 drivers/gpu/drm/msm/msm_drv.c | 1 drivers/hwtracing/coresight/coresight-cti-core.c | 5 drivers/iio/accel/adxl367.c | 23 drivers/iio/accel/adxl372.c | 23 drivers/iio/light/tsl2583.c | 2 drivers/iio/temperature/ltc2983.c | 13 drivers/media/i2c/ar0521.c | 8 drivers/media/i2c/ov8865.c | 10 drivers/media/platform/amphion/vpu_v4l2.c | 11 drivers/media/platform/sunxi/sun4i-csi/Kconfig | 2 drivers/media/platform/sunxi/sun6i-csi/Kconfig | 2 drivers/media/platform/sunxi/sun6i-mipi-csi2/Kconfig | 4 drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c | 20 drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/Kconfig | 2 drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c | 23 drivers/media/platform/sunxi/sun8i-di/Kconfig | 2 drivers/media/platform/sunxi/sun8i-rotate/Kconfig | 2 drivers/media/test-drivers/vivid/vivid-core.c | 38 drivers/media/test-drivers/vivid/vivid-core.h | 2 drivers/media/test-drivers/vivid/vivid-vid-cap.c | 27 drivers/media/v4l2-core/v4l2-dv-timings.c | 14 drivers/mmc/core/block.c | 44 drivers/mmc/core/queue.c | 8 drivers/mmc/core/sdio_bus.c | 3 drivers/mmc/host/Kconfig | 3 drivers/mmc/host/sdhci-esdhc-imx.c | 14 drivers/mmc/host/sdhci-pci-core.c | 14 drivers/mtd/mtdcore.c | 2 drivers/mtd/nand/raw/intel-nand-controller.c | 35 drivers/mtd/nand/raw/marvell_nand.c | 2 drivers/mtd/nand/raw/tegra_nand.c | 4 drivers/mtd/parsers/bcm47xxpart.c | 4 drivers/mtd/spi-nor/core.c | 4 drivers/net/can/mscan/mpc5xxx_can.c | 8 drivers/net/can/rcar/rcar_canfd.c | 24 drivers/net/can/spi/mcp251x.c | 5 drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c | 4 drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c | 4 drivers/net/ethernet/amd/xgbe/xgbe-pci.c | 5 drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c | 19 drivers/net/ethernet/amd/xgbe/xgbe.h | 1 drivers/net/ethernet/aquantia/atlantic/aq_macsec.c | 96 drivers/net/ethernet/aquantia/atlantic/aq_nic.h | 2 drivers/net/ethernet/broadcom/bcm4908_enet.c | 12 drivers/net/ethernet/broadcom/bcmsysport.c | 3 drivers/net/ethernet/cadence/macb_main.c | 1 drivers/net/ethernet/freescale/enetc/enetc.c | 5 drivers/net/ethernet/freescale/fec_main.c | 46 drivers/net/ethernet/huawei/hinic/hinic_debugfs.c | 18 drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c | 2 drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c | 2 drivers/net/ethernet/huawei/hinic/hinic_sriov.c | 1 drivers/net/ethernet/ibm/ehea/ehea_main.c | 1 drivers/net/ethernet/intel/i40e/i40e_ethtool.c | 100 drivers/net/ethernet/intel/i40e/i40e_type.h | 4 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c | 43 drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h | 1 drivers/net/ethernet/lantiq_etop.c | 1 drivers/net/ethernet/mellanox/mlx5/core/cmd.c | 10 drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h | 9 drivers/net/ethernet/mellanox/mlx5/core/en/tc_priv.h | 2 drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h | 6 drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c | 3 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 74 drivers/net/ethernet/mellanox/mlx5/core/en_tx.c | 6 drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c | 17 drivers/net/ethernet/mellanox/mlx5/core/lib/aso.c | 7 drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c | 6 drivers/net/ethernet/mellanox/mlx5/core/main.c | 4 drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c | 3 drivers/net/ethernet/micrel/ksz884x.c | 2 drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c | 10 drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c | 24 drivers/net/ethernet/socionext/netsec.c | 2 drivers/net/ethernet/socionext/sni_ave.c | 6 drivers/net/netdevsim/bus.c | 9 drivers/net/netdevsim/dev.c | 31 drivers/nfc/virtual_ncidev.c | 3 drivers/pinctrl/pinctrl-ingenic.c | 4 drivers/pinctrl/pinctrl-ocelot.c | 17 drivers/pinctrl/pinctrl-zynqmp.c | 9 drivers/pinctrl/qcom/pinctrl-msm.c | 21 drivers/platform/x86/amd/pmc.c | 12 drivers/s390/cio/css.c | 8 drivers/scsi/qla2xxx/qla_attr.c | 28 drivers/spi/spi-aspeed-smc.c | 2 drivers/spi/spi-qup.c | 2 drivers/staging/media/atomisp/pci/sh_css_params.c | 4 drivers/staging/media/sunxi/cedrus/Kconfig | 1 drivers/usb/core/quirks.c | 9 drivers/usb/dwc3/core.c | 49 drivers/usb/dwc3/drd.c | 50 drivers/usb/dwc3/dwc3-st.c | 2 drivers/usb/dwc3/gadget.c | 21 drivers/usb/gadget/function/uvc_queue.c | 8 drivers/usb/gadget/function/uvc_video.c | 25 drivers/usb/gadget/udc/aspeed-vhub/dev.c | 1 drivers/usb/gadget/udc/bdc/bdc_udc.c | 1 drivers/usb/host/xhci-mem.c | 20 drivers/usb/host/xhci-pci.c | 44 drivers/usb/host/xhci.c | 10 drivers/usb/host/xhci.h | 1 drivers/usb/typec/ucsi/ucsi.c | 42 drivers/usb/typec/ucsi/ucsi_acpi.c | 10 drivers/video/aperture.c | 5 drivers/video/fbdev/smscufx.c | 55 drivers/video/fbdev/stifb.c | 3 fs/binfmt_elf.c | 3 fs/erofs/zdata.c | 6 fs/erofs/zmap.c | 17 fs/exec.c | 4 fs/kernfs/dir.c | 5 fs/squashfs/file.c | 23 fs/squashfs/page_actor.c | 3 fs/squashfs/page_actor.h | 6 include/linux/mlx5/driver.h | 2 include/linux/perf_event.h | 19 include/linux/userfaultfd_k.h | 6 include/media/v4l2-common.h | 3 include/net/sock.h | 2 include/sound/control.h | 1 include/sound/soc-acpi-intel-match.h | 2 include/uapi/linux/videodev2.h | 3 kernel/bpf/btf.c | 5 kernel/events/core.c | 151 + kernel/events/ring_buffer.c | 2 kernel/power/hibernate.c | 2 kernel/rcu/tree.c | 10 kernel/sched/sched.h | 18 mm/huge_memory.c | 11 mm/kmemleak.c | 61 mm/madvise.c | 12 mm/migrate.c | 7 mm/page_alloc.c | 1 net/can/j1939/transport.c | 4 net/core/net_namespace.c | 7 net/core/skbuff.c | 2 net/ethtool/eeprom.c | 2 net/ieee802154/socket.c | 4 net/ipv4/nexthop.c | 2 net/ipv4/tcp_input.c | 3 net/ipv4/tcp_ipv4.c | 4 net/ipv6/ip6_gre.c | 12 net/ipv6/ip6_tunnel.c | 11 net/ipv6/ipv6_sockglue.c | 7 net/ipv6/sit.c | 8 net/kcm/kcmsock.c | 25 net/mac802154/rx.c | 5 net/mptcp/protocol.c | 3 net/mptcp/protocol.h | 1 net/mptcp/subflow.c | 7 net/openvswitch/datapath.c | 3 net/tipc/topsrv.c | 16 sound/aoa/soundbus/i2sbus/core.c | 7 sound/core/control.c | 23 sound/pci/ac97/ac97_codec.c | 33 sound/pci/au88x0/au88x0.h | 6 sound/pci/au88x0/au88x0_core.c | 2 sound/pci/ca0106/ca0106_mixer.c | 2 sound/pci/emu10k1/emumixer.c | 2 sound/pci/hda/patch_realtek.c | 5 sound/pci/rme9652/hdsp.c | 26 sound/pci/rme9652/rme9652.c | 22 sound/soc/codecs/Kconfig | 1 sound/soc/codecs/tlv320adc3xxx.c | 2 sound/soc/intel/common/Makefile | 2 sound/soc/intel/common/soc-acpi-intel-rpl-match.c | 51 sound/soc/qcom/lpass-cpu.c | 10 sound/soc/sof/intel/pci-mtl.c | 2 sound/soc/sof/intel/pci-tgl.c | 92 sound/synth/emux/emux.c | 7 sound/usb/implicit.c | 2 sound/usb/mixer.c | 2 tools/iio/iio_utils.c | 4 tools/perf/pmu-events/arch/arm64/hisilicon/hip08/metrics.json | 6 tools/perf/pmu-events/arch/powerpc/power10/nest_metrics.json | 72 tools/perf/pmu-events/arch/s390/cf_z16/pai.json | 1101 ---------- tools/perf/pmu-events/arch/s390/cf_z16/pai_crypto.json | 1101 ++++++++++ tools/perf/util/auxtrace.c | 10 tools/testing/selftests/drivers/net/bonding/Makefile | 4 tools/testing/selftests/drivers/net/bonding/dev_addr_lists.sh | 2 tools/testing/selftests/drivers/net/bonding/net_forwarding_lib.sh | 1 tools/testing/selftests/drivers/net/dsa/test_bridge_fdb_stress.sh | 4 tools/testing/selftests/drivers/net/team/Makefile | 4 tools/testing/selftests/drivers/net/team/dev_addr_lists.sh | 6 tools/testing/selftests/drivers/net/team/lag_lib.sh | 1 tools/testing/selftests/drivers/net/team/net_forwarding_lib.sh | 1 tools/testing/selftests/ftrace/test.d/dynevent/test_duplicates.tc | 2 tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-eprobe.tc | 2 tools/testing/selftests/kvm/memslot_modification_stress_test.c | 2 tools/testing/selftests/lib.mk | 4 247 files changed, 3360 insertions(+), 2158 deletions(-)
Aaron Conole (1):
openvswitch: switch from WARN to pr_warn
Adrian Hunter (1):
perf auxtrace: Fix address filter symbol name match for modules
Akhil P Oommen (1):
drm/msm/a6xx: Replace kcalloc() with kvzalloc()
Alexander Stein (1):
media: v4l2: Fix v4l2_i2c_subdev_set_name function documentation
Andrew Jones (2):
RISC-V: KVM: Provide UAPI for Zicbom block size
RISC-V: Fix compilation without RISCV_ISA_ZICBOM
Andrey Smirnov (1):
usb: dwc3: Don't switch OTG -> peripheral if extcon is present
Ankit Nautiyal (1):
drm/i915/dp: Reset frl trained flag before restarting FRL training
Anshuman Gupta (1):
drm/i915/dgfx: Keep PCI autosuspend control 'on' by default on all dGPU
Anssi Hannula (1):
can: kvaser_usb: Fix possible completions during init_completion
Anup Patel (1):
RISC-V: KVM: Fix kvm_riscv_vcpu_timer_pending() for Sstc
Ariel Levkovich (1):
net/mlx5e: TC, Reject forwarding from internal port to internal port
Arunpravin Paneer Selvam (2):
drm/amdgpu: Fix VRAM BO swap issue
drm/amdgpu: Fix for BO move issue
Aya Levin (1):
net/mlx5e: Extend SKB room check to include PTP-SQ
Baolin Wang (1):
mm: migrate: fix return value if all subpages of THPs are migrated successfully
Benjamin Poirier (2):
selftests: net: Fix cross-tree inclusion of scripts
selftests: net: Fix netdev name mismatch in cleanup
Bernd Edlinger (1):
exec: Copy oldsighand->action under spin-lock
Biju Das (2):
can: rcar_canfd: rcar_canfd_handle_global_receive(): fix IRQ storm on global FIFO receive
can: rcar_canfd: fix channel specific IRQ handling for RZ/G2L
Brian Norris (1):
mmc: sdhci_am654: 'select', not 'depends' REGMAP_MMIO
Chang S. Bae (4):
x86/fpu: Configure init_fpstate attributes orderly x86/fpu: Fix the init_fpstate size check with the actual size x86/fpu: Exclude dynamic states from init_fpstate x86/fpu: Fix copy_xstate_to_uabi() to copy init states correctly
Chen Zhongjin (1):
x86/unwind/orc: Fix unreliable stack dump with gcov
Chengming Gui (1):
drm/amdgpu: fix pstate setting issue
Christian A. Ehrhardt (1):
kernfs: fix use-after-free in __kernfs_remove
Christian Löhle (2):
mmc: block: Remove error check of hw_reset on reset
mmc: queue: Cancel recovery work on cleanup
Christophe JAILLET (3):
media: ov8865: Fix an error handling path in ov8865_probe()
media: sunxi: Fix some error handling path of sun8i_a83t_mipi_csi2_probe()
media: sunxi: Fix some error handling path of sun6i_mipi_csi2_probe()
Conor Dooley (2):
riscv: fix detection of toolchain Zicbom support
riscv: fix detection of toolchain Zihintpause support
Cosmin Tanislav (1):
iio: temperature: ltc2983: allocate iio channels once
Cédric Le Goater (1):
spi: aspeed: Fix window offset of CE1
D Scott Phillips (1):
arm64: Add AMPERE1 to the Spectre-BHB affected list
Dan Carpenter (1):
media: atomisp: prevent integer overflow in sh_css_set_black_frame()
Dan Vacura (2):
usb: gadget: uvc: fix dropped frame after missed isoc
usb: gadget: uvc: fix sg handling in error case
Dongliang Mu (2):
can: mscan: mpc5xxx: mpc5xxx_can_probe(): add missing put_clock() in error path
can: mcp251x: mcp251x_can_probe(): add missing unregister_candev() in error path
Douglas Anderson (2):
pinctrl: qcom: Avoid glitching lines when we first mux to output drm/bridge: ps8640: Add back the 50 ms mystery delay after HPD
Eric Dumazet (5):
kcm: annotate data-races around kcm->rx_psock
kcm: annotate data-races around kcm->rx_wait
ipv6: ensure sane device mtu in tunnels
net: do not sense pfmemalloc status in skb_append_pagefrags()
kcm: do not sense pfmemalloc status in kcm_sendpage()
Florian Fainelli (1):
net: bcmsysport: Indicate MAC is in charge of PHY PM
Gao Xiang (1):
erofs: fix up inplace decompression success rate
Gavin Shan (1):
KVM: selftests: Fix number of pages for memory slot in memslot_modification_stress_test
Geert Uytterhoeven (1):
ASoC: codecs: tlv320adc3xxx: Wrap adc3xxx_i2c_remove() in __exit_p()
Greg Kroah-Hartman (2):
Revert "usb: gadget: uvc: limit isoc_sg to super speed gadgets" Linux 6.0.7
Hannu Hartikainen (1):
USB: add RESET_RESUME quirk for NVIDIA Jetson devices in RCM
Hans Verkuil (5):
media: vivid: s_fbuf: add more sanity checks
media: vivid: dev->bitmap_cap wasn't freed in all cases
media: v4l2-dv-timings: add sanity checks for blanking values
media: videodev2.h: V4L2_DV_BT_BLANKING_HEIGHT should check 'interlaced'
media: vivid: set num_in/outputs to 0 if not supported
Heikki Krogerus (2):
usb: typec: ucsi: Check the connection on resume
usb: typec: ucsi: acpi: Implement resume callback
Heiko Carstens (3):
s390/uaccess: add missing EX_TABLE entries to __clear_user() s390/futex: add missing EX_TABLE entry to __futex_atomic_op() s390/pci: add missing EX_TABLE entries to __pcistg_mio_inuser()/__pcilg_mio_inuser()
Helge Deller (1):
fbdev: stifb: Fall back to cfb_fillrect() on 32-bit HCRX cards
Horatiu Vultur (3):
pinctrl: ocelot: Fix incorrect trigger of the interrupt.
net: lan966x: Fix the rx drop counter
net: lan966x: Stop replacing tx dcbs and dcbs_buf when changing MTU
Hugh Dickins (1):
mm: prep_compound_tail() clear page->private
Hyong Youb Kim (1):
net/mlx5e: Do not increment ESN when updating IPsec ESN state
Hyunwoo Kim (1):
fbdev: smscufx: Fix several use-after-free bugs
Jakub Kicinski (1):
net-memcg: avoid stalls when under memory pressure
James Clark (1):
coresight: cti: Fix hang in cti_disable_hw()
Jason A. Donenfeld (2):
ALSA: au88x0: use explicitly signed char
ALSA: rme9652: use explicitly signed char
Jean-Philippe Brucker (1):
random: use arch_get_random*_early() in random_init()
Jeff Vanhoof (1):
usb: gadget: uvc: fix sg handling during video encode
Jens Glathe (1):
usb: xhci: add XHCI_SPURIOUS_SUCCESS to ASM1042 despite being a V0.96 controller
Jesse Zhang (1):
drm/amdkfd: correct the cache info for gfx1036
Jisheng Zhang (1):
riscv: jump_label: mark arguments as const to satisfy asm constraints
Joaquín Ignacio Aramendía (1):
drm/amd/display: Revert logic for plane modifiers
Joel Stanley (1):
usb: gadget: aspeed: Fix probe regression
Johan Hovold (8):
drm/msm: fix use-after-free on probe deferral drm/msm/dsi: fix memory corruption with too many bridges drm/msm/hdmi: fix memory corruption with too many bridges drm/msm/hdmi: fix IRQ lifetime
drm/msm/dp: fix memory corruption with too many bridges drm/msm/dp: fix aux-bus EP lifetime
drm/msm/dp: fix IRQ lifetime
drm/msm/dp: fix bridge lifetime
José Roberto de Souza (1):
drm/i915: Extend Wa_1607297627 to Alderlake-P
Juergen Borleis (1):
net: fec: limit register access on i.MX6UL
Justin Chen (1):
usb: bdc: change state when port disconnected
Kai Vehmanen (2):
ASoC: Intel: common: add ACPI matching tables for Raptor Lake
ASoC: SOF: Intel: pci-tgl: use RPL specific firmware definitions
Kajol Jain (1):
perf vendor events power10: Fix hv-24x7 metric events
Kunihiko Hayashi (1):
net: ethernet: ave: Fix MAC to be in charge of PHY PM
Kuniyuki Iwashima (1):
tcp/udp: Fix memory leak in ipv6_renew_options().
Kuogee Hsieh (2):
drm/msm/dp: add atomic_check to bridge ops
drm/msm/dp: cleared DP_DOWNSPREAD_CTRL register before start link training
Li Zetao (1):
fs/binfmt_elf: Fix memory leak in load_elf_binary()
Lijo Lazar (1):
drm/amdgpu: Remove ATC L2 access for MMHUB 2.1.x
Lin Shengwang (1):
sched/core: Fix comparison in sched_group_cookie_match()
Linus Walleij (1):
mtd: parsers: bcm47xxpart: Fix halfblock reads
Lu Wei (1):
tcp: fix a signed-integer-overflow bug in tcp_add_backlog()
Maciej S. Szmigiero (6):
ALSA: control: add snd_ctl_rename()
ALSA: hda/realtek: Use snd_ctl_rename() to rename a control
ALSA: emu10k1: Use snd_ctl_rename() to rename a control
ALSA: ac97: Use snd_ctl_rename() to rename a control
ALSA: usb-audio: Use snd_ctl_rename() to rename a control
ALSA: ca0106: Use snd_ctl_rename() to rename a control
Manank Patel (1):
ACPI: PCC: Fix unintentional integer overflow
Manish Rangankar (1):
scsi: qla2xxx: Use transport-defined speed mask for supported_speeds
Mario Limonciello (2):
xhci-pci: Set runtime PM as default policy on all xHC 1.2 or later devices
PM: hibernate: Allow hybrid sleep to work with s2idle
Martin Blumenstingl (2):
mtd: rawnand: intel: Remove unused nand_pa member from ebu_nand_cs
mtd: rawnand: intel: Use devm_platform_ioremap_resource_byname()
Mathias Nyman (2):
xhci: Add quirk to reset host back to default state at shutdown
xhci: Remove device endpoints from bandwidth list when freeing the device
Matthew Ma (1):
mmc: core: Fix kernel panic when remove non-standard SDIO card
Matti Vaittinen (3):
tools: iio: iio_utils: fix digit calculation
iio: adxl372: Fix unsafe buffer attributes
iio: adxl367: Fix unsafe buffer attributes
Maxim Levitsky (1):
perf/x86/intel/lbr: Use setup_clear_cpu_cap() instead of clear_cpu_cap()
Mel Gorman (1):
mm/huge_memory: do not clobber swp_entry_t during THP split
Michael Grzeschik (1):
usb: gadget: uvc: limit isoc_sg to super speed gadgets
Michał Mirosław (1):
fbdev/core: Avoid uninitialized read in aperture_remove_conflicting_pci_device()
Mika Westerberg (1):
mtd: spi-nor: core: Ignore -ENOTSUPP in spi_nor_init()
Ming Qian (1):
media: amphion: release m2m ctx when releasing vpu instance
Miquel Raynal (1):
mac802154: Fix LQI recording
Moshe Shemesh (1):
net/mlx5: Wait for firmware to enable CRS before pci_restore_state
Nathan Huckleberry (2):
crypto: x86/polyval - Fix crashes when keys are not 16-byte aligned drm/msm: Fix return type of mdp4_lvds_connector_mode_valid
Neal Cardwell (1):
tcp: fix indefinite deferral of RTO with SACK reneging
Nicholas Piggin (1):
powerpc/64s/interrupt: Fix clear of PACA_IRQS_HARD_DIS when returning to soft-masked context
Nicolas Dichtel (1):
nh: fix scope used to find saddr when adding non gw nh
Paolo Abeni (1):
mptcp: set msk local address earlier
Patrice Chotard (1):
usb: dwc3: st: Rely on child's compatible instead of name
Patrick Thompson (1):
mmc: sdhci-pci-core: Disable ES for ASUS BIOS on Jasper Lake
Paul Blakey (1):
net/mlx5e: Update restore chain id for slow path packets
Paul E. McKenney (1):
rcu: Keep synchronize_rcu() from enabling irqs in early boot
Paul Kocialkowski (7):
media: sun6i-mipi-csi2: Add a Kconfig dependency on RESET_CONTROLLER
media: sun8i-a83t-mipi-csi2: Add a Kconfig dependency on RESET_CONTROLLER
media: sun6i-csi: Add a Kconfig dependency on RESET_CONTROLLER
media: sun4i-csi: Add a Kconfig dependency on RESET_CONTROLLER
media: sun8i-di: Add a Kconfig dependency on RESET_CONTROLLER
media: sun8i-rotate: Add a Kconfig dependency on RESET_CONTROLLER
media: cedrus: Add a Kconfig dependency on RESET_CONTROLLER
Pavel Kozlov (1):
ARC: mm: fix leakage of memory allocated for PTE
Peter Oberparleiter (2):
s390/boot: add secure boot trailer
s390/cio: fix out-of-bounds access on cio_ignore free
Peter Xu (1):
mm/uffd: fix vma check on userfault for wp
Peter Zijlstra (1):
perf: Fix missing SIGTRAPs
Phillip Lougher (3):
squashfs: fix read regression introduced in readahead code
squashfs: fix extending readahead beyond end of file
squashfs: fix buffer release race condition in readahead code
Pierre-Louis Bossart (2):
ASoC: SOF: Intel: pci-mtl: fix firmware name
ASoC: SOF: Intel: pci-tgl: fix ADL-N descriptor
Prike Liang (2):
drm/amdgpu: disallow gfxoff until GC IP blocks complete s2idle resume drm/amdkfd: update gfx1037 Lx cache setting
Qinglin Pan (1):
riscv: mm: add missing memcpy in kasan_init
Rafael J. Wysocki (2):
cpufreq: intel_pstate: Read all MSRs on the target CPU
cpufreq: intel_pstate: hybrid: Use known scaling factor for P-cores
Rafael Mendonca (1):
drm/amdkfd: Fix memory leak in kfd_mem_dmamap_userptr()
Rafał Miłecki (2):
mtd: core: add missing of_node_get() in dynamic partitions code
net: broadcom: bcm4908_enet: update TX stats after actual transmission
Raju Rangoju (3):
amd-xgbe: Yellow carp devices do not need rrc
amd-xgbe: fix the SFP compliance codes check for DAC cables
amd-xgbe: add the bit rate quirk for Molex cables
Randy Dunlap (2):
ASoC: codec: tlv320adc3xxx: add GPIOLIB dependency
arc: iounmap() arg is volatile
Rik van Riel (1):
mm,madvise,hugetlb: fix unexpected data loss with MADV_DONTNEED on hugetlbfs
Rob Clark (1):
drm/msm/a6xx: Fix kvzalloc vs state_kcalloc usage
Robert Marko (1):
spi: qup: support using GPIO as chip select line
Rongwei Liu (1):
net/mlx5: DR, Fix matcher disconnect error flow
Roy Novich (1):
net/mlx5: Update fw fatal reporter state on PCI handlers successful recover
Saeed Mahameed (1):
net/mlx5: ASO, Create the ASO SQ with the correct timestamp format
Sai Krishna Potthuri (2):
Revert "dt-bindings: pinctrl-zynqmp: Add output-enable configuration" Revert "pinctrl: pinctrl-zynqmp: Add support for output-enable and bias-high-impedance"
Sakari Ailus (2):
media: ar0521: Fix return value check in writing initial registers
media: sun6i-mipi-csi2: Depend on PHY_SUN6I_MIPI_DPHY
Sascha Hauer (1):
mmc: sdhci-esdhc-imx: Propagate ESDHC_FLAG_HS400* only on 8bit bus
Sergiu Moga (1):
net: macb: Specify PHY PM management done by MAC
Shang XiaoJing (2):
nfc: virtual_ncidev: Fix memory leak in virtual_nci_send() perf vendor events arm64: Fix incorrect Hisi hip08 L3 metrics
Shreeya Patel (1):
iio: light: tsl2583: Fix module unloading
Shyam Sundar S K (1):
platform/x86/amd: pmc: remove CONFIG_DEBUG_FS checks
Siarhei Volkau (1):
pinctrl: Ingenic: JZ4755 bug fixes
Slawomir Laba (2):
i40e: Fix ethtool rx-flow-hash setting for X722
i40e: Fix flow-type by setting GL_HASH_INSET registers
Srinivasa Rao Mandadapu (2):
ASoC: qcom: lpass-cpu: mark HDMI TX registers as volatile
ASoC: qcom: lpass-cpu: Mark HDMI TX parity register as volatile
Stanislav Fomichev (1):
bpf: prevent decl_tag from being referenced in func_proto
Stefan Binding (1):
ALSA: hda/realtek: Add quirk for ASUS Zenbook using CS35L41
Steven Rostedt (Google) (1):
ALSA: Use del_timer_sync() before freeing timer
Sudeep Holla (1):
PM: domains: Fix handling of unavailable/disabled idle states
Suresh Devarakonda (1):
net/mlx5: Fix crash during sync firmware reset
Sven Schnelle (1):
selftests/ftrace: fix dynamic_events dependency check
Sylwester Dziedziuch (1):
i40e: Fix VF hang when reset is triggered on another VF
Takashi Iwai (3):
ALSA: usb-audio: Add quirks for M-Audio Fast Track C400/600
ALSA: hda/realtek: Add another HP ZBook G9 model quirks
ALSA: aoa: Fix I2S device accounting
Tariq Toukan (1):
net/mlx5: Fix possible use-after-free in async command interface
Thinh Nguyen (3):
usb: dwc3: gadget: Stop processing more requests on IMI
usb: dwc3: gadget: Don't set IMI for no_interrupt
usb: dwc3: gadget: Don't delay End Transfer on delayed_status
Thomas Richter (1):
perf list: Fix PMU name pai_crypto in perf list on s390
Tony O'Brien (1):
mtd: rawnand: marvell: Use correct logic for nand-keep-config
Vincent Whitchurch (1):
mmc: core: Fix WRITE_ZEROES CQE handling
Vladimir Oltean (1):
net: enetc: survive memory pressure without crashing
Waiman Long (1):
mm/kmemleak: prevent soft lockup in kmemleak_scan()'s object iteration loops
Wei Yongjun (1):
net: ieee802154: fix error return code in dgram_bind()
Wesley Cheng (1):
usb: dwc3: gadget: Force sending delayed status during soft disconnect
William Breathitt Gray (2):
counter: microchip-tcb-capture: Handle Signal1 read and Synapse
counter: 104-quad-8: Fix race getting function mode and direction
Xin Long (2):
ethtool: eeprom: fix null-deref on genl_info in dump
tipc: fix a null-ptr-deref in tipc_topsrv_accept
Yang Yingliang (8):
can: j1939: transport: j1939_session_skb_drop_old(): spin_unlock_irqrestore() before kfree_skb()
media: ar0521: fix error return code in ar0521_power_on()
mtd: rawnand: intel: Add missing of_node_put() in ebu_nand_probe()
ALSA: ac97: fix possible memory leak in snd_ac97_dev_register()
net: netsec: fix error handling in netsec_register_mdio()
net: ksz884x: fix missing pci_disable_device() on error in pcidev_init()
ALSA: aoa: i2sbus: fix possible memory leak in i2sbus_add_dev()
net: ehea: fix possible memory leak in ehea_register_port()
Yue Hu (1):
erofs: fix illegal unmapped accesses in z_erofs_fill_inode_lazy()
Zhang Changzhong (1):
net: lantiq_etop: don't free skb when returning NETDEV_TX_BUSY
Zhang Qilong (1):
mtd: rawnand: tegra: Fix PM disable depth imbalance in probe
Zhengchao Shao (8):
net: hinic: fix incorrect assignment issue in hinic_set_interrupt_cfg()
net: hinic: fix memory leak when reading function table
net: hinic: fix the issue of CMDQ memory leaks
net: hinic: fix the issue of double release MBOX callback of VF
net: fix UAF issue in nfqnl_nf_hook_drop() when ops_init() failed
netdevsim: fix memory leak in nsim_bus_dev_new()
netdevsim: fix memory leak in nsim_drv_probe() when nsim_dev_resources_register() failed
netdevsim: remove dir in nsim_dev_debugfs_init() when creating ports dir failed
Íñigo Huguet (1):
atlantic: fix deadlock at aq_nic_stop
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/pinctrl/xlnx,zynqmp-pinctrl.yaml +0 -4
@@ -274,10 +274,6 @@ patternProperties: slew-rate: enum: [0, 1] - output-enable: - description: - This will internally disable the tri-state for MIO pins. - drive-strength: description: Selects the drive strength for MIO pins, in mA.
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 6 PATCHLEVEL = 0 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Hurr durr I'ma ninja sloth
arch/arc/include/asm/io.h +1 -1
@@ -32,7 +32,7 @@ static inline void ioport_unmap(void __iomem *addr) { } -extern void iounmap (const void __iomem *addr); +extern void iounmap (const volatile void __iomem *addr);/* * io{read,write}{16,32}be() macros
arch/arc/include/asm/pgtable-levels.h +1 -1
@@ -161,7 +161,7 @@#define pmd_pfn (pmd) ((pmd_val(pmd) & PAGE_MASK) >> PAGE_SHIFT)#define pmd_page (pmd) virt_to_page(pmd_page_vaddr(pmd))#define set_pmd (pmdp, pmd) (*(pmdp) = pmd) -#define pmd_pgtable (pmd) ((pgtable_t) pmd_page_vaddr(pmd)) +#define pmd_pgtable (pmd) ((pgtable_t) pmd_page(pmd))/* * 4th level paging: pte
arch/arc/mm/ioremap.c +1 -1
@@ -94,7 +94,7 @@ void __iomem *ioremap_prot(phys_addr_t paddr, unsigned long size,EXPORT_SYMBOL (ioremap_prot); -void iounmap (const void __iomem *addr) +void iounmap (const volatile void __iomem *addr) {/* weird double cast to handle phys_addr_t > 32 bits */ if (arc_uncached_addr_space ((phys_addr_t )(u32 )addr))
arch/arm64/include/asm/cputype.h +4 -0
@@ -60,6 +60,7 @@#define ARM_CPU_IMP_FUJITSU 0x46#define ARM_CPU_IMP_HISI 0x48#define ARM_CPU_IMP_APPLE 0x61 +#define ARM_CPU_IMP_AMPERE 0xC0#define ARM_CPU_PART_AEM_V8 0xD0F#define ARM_CPU_PART_FOUNDATION 0xD00
@@ -123,6 +124,8 @@#define APPLE_CPU_PART_M1_ICESTORM_MAX 0x028#define APPLE_CPU_PART_M1_FIRESTORM_MAX 0x029 +#define AMPERE_CPU_PART_AMPERE1 0xAC3 +#define MIDR_CORTEX_A53 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A53)#define MIDR_CORTEX_A57 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A57)#define MIDR_CORTEX_A72 MIDR_CPU_MODEL(ARM_CPU_IMP_ARM, ARM_CPU_PART_CORTEX_A72)
@@ -172,6 +175,7 @@#define MIDR_APPLE_M1_FIRESTORM_PRO MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM_PRO)#define MIDR_APPLE_M1_ICESTORM_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_ICESTORM_MAX)#define MIDR_APPLE_M1_FIRESTORM_MAX MIDR_CPU_MODEL(ARM_CPU_IMP_APPLE, APPLE_CPU_PART_M1_FIRESTORM_MAX) +#define MIDR_AMPERE1 MIDR_CPU_MODEL(ARM_CPU_IMP_AMPERE, AMPERE_CPU_PART_AMPERE1)/* Fujitsu Erratum 010001 affects A64FX 1.0 and 1.1, (v0r0 and v1r0) */ #define MIDR_FUJITSU_ERRATUM_010001 MIDR_FUJITSU_A64FX
arch/arm64/kernel/proton-pack.c +6 -0
@@ -868,6 +868,10 @@ u8 spectre_bhb_loop_affected(int scope) MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N1), {}, }; +static const struct midr_range spectre_bhb_k11_list[] = { +MIDR_ALL_VERSIONS (MIDR_AMPERE1 ), + {}, + };static const struct midr_range spectre_bhb_k8_list[] = {MIDR_ALL_VERSIONS (MIDR_CORTEX_A72 ),MIDR_ALL_VERSIONS (MIDR_CORTEX_A57 ),
@@ -878,6 +882,8 @@ u8 spectre_bhb_loop_affected(int scope) k =32 ; else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k24_list)) k =24 ; + else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k11_list)) + k =11 ; else if (is_midr_in_range_list(read_cpuid_id(), spectre_bhb_k8_list)) k =8 ;
arch/powerpc/kernel/interrupt_64.S +11 -2
@@ -565,15 +565,24 @@ _ASM_NOKPROBE_SYMBOL(interrupt_return_\srr\()_kernel) * Returning to soft-disabled context. * Check if a MUST_HARD_MASK interrupt has become pending, in which * case we need to disable MSR[EE] in the return context. + * + * The MSR[EE] check catches among other things the short incoherency + * in hard_irq_disable() between clearing MSR[EE] and setting + * PACA_IRQ_HARD_DIS. */ ld r12,_MSR(r1) andi. r10,r12,MSR_EE beq .Lfast_kernel_interrupt_return_\srr\() // EE already disabled lbz r11,PACAIRQHAPPENED(r13) andi. r10,r11,PACA_IRQ_MUST_HARD_MASK - beq .Lfast_kernel_interrupt_return_\srr\() // No HARD_MASK pending + bne 1f // HARD_MASK is pending + // No HARD_MASK pending, clear possible HARD_DIS set by interrupt + andi. r11,r11,(~PACA_IRQ_HARD_DIS)@l + stb r11,PACAIRQHAPPENED(r13) + b .Lfast_kernel_interrupt_return_\srr\() + - /* Must clear MSR_EE from _MSR */ +1: /* Must clear MSR_EE from _MSR */ #ifdef CONFIG_PPC_BOOK3S li r10,0 /* Clear valid before changing _MSR */
arch/riscv/Kconfig +13 -4
@@ -402,14 +402,16 @@ config RISCV_ISA_SVPBMT If you don't know what to do here, say Y. -config CC_HAS_ZICBOM +config TOOLCHAIN_HAS_ZICBOM bool - default y if 64BIT && $(cc-option,-mabi=lp64 -march=rv64ima_zicbom) - default y if 32BIT && $(cc-option,-mabi=ilp32 -march=rv32ima_zicbom) + default y + depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zicbom) + depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zicbom) + depends on LLD_VERSION >= 150000 || LD_VERSION >= 23800 config RISCV_ISA_ZICBOM bool "Zicbom extension support for non-coherent DMA operation" - depends on CC_HAS_ZICBOM + depends on TOOLCHAIN_HAS_ZICBOM depends on !XIP_KERNEL && MMU select RISCV_DMA_NONCOHERENT select RISCV_ALTERNATIVE
@@ -424,6 +426,13 @@ config RISCV_ISA_ZICBOM If you don't know what to do here, say Y. +config TOOLCHAIN_HAS_ZIHINTPAUSE + bool + default y + depends on !64BIT || $(cc-option,-mabi=lp64 -march=rv64ima_zihintpause) + depends on !32BIT || $(cc-option,-mabi=ilp32 -march=rv32ima_zihintpause) + depends on LLD_VERSION >= 150000 || LD_VERSION >= 23600 + config FPU bool "FPU support" default y
arch/riscv/Makefile +2 -4
@@ -59,12 +59,10 @@ toolchain-need-zicsr-zifencei := $(call cc-option-yn, -march=$(riscv-march-y)_zi riscv-march-$(toolchain-need-zicsr-zifencei) := $(riscv-march-y)_zicsr_zifencei # Check if the toolchain supports Zicbom extension -toolchain-supports-zicbom := $(call cc-option-yn, -march=$(riscv-march-y)_zicbom) -riscv-march-$(toolchain-supports-zicbom) := $(riscv-march-y)_zicbom +riscv-march-$(CONFIG_TOOLCHAIN_HAS_ZICBOM) := $(riscv-march-y)_zicbom # Check if the toolchain supports Zihintpause extension -toolchain-supports-zihintpause := $(call cc-option-yn, -march=$(riscv-march-y)_zihintpause) -riscv-march-$(toolchain-supports-zihintpause) := $(riscv-march-y)_zihintpause +riscv-march-$(CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE) := $(riscv-march-y)_zihintpause KBUILD_CFLAGS += -march=$(subst fd,,$(riscv-march-y)) KBUILD_AFLAGS += -march=$(riscv-march-y)
arch/riscv/include/asm/cacheflush.h +0 -8
@@ -42,16 +42,8 @@ void flush_icache_mm(struct mm_struct *mm, bool local);#endif /* CONFIG_SMP */ -/* -* The T-Head CMO errata internally probe the CBOM block size, but otherwise -* don't depend on Zicbom. -*/ extern unsigned int riscv_cbom_block_size; -#ifdef CONFIG_RISCV_ISA_ZICBOM void riscv_init_cbom_blocksize (void ); -#else -static inline void riscv_init_cbom_blocksize (void ) { } -#endif #ifdef CONFIG_RISCV_DMA_NONCOHERENT void riscv_noncoherent_supported (void );
arch/riscv/include/asm/jump_label.h +4 -4
@@ -14,8 +14,8 @@#define JUMP_LABEL_NOP_SIZE 4 -static __always_inline bool arch_static_branch(struct static_key *key, -bool branch) +static __always_inline bool arch_static_branch(struct static_key * const key, +const bool branch) {asm_volatile_goto ( " .option push \n\t"
@@ -35,8 +35,8 @@ static __always_inline bool arch_static_branch(struct static_key *key,return true; } -static __always_inline bool arch_static_branch_jump(struct static_key *key, -bool branch) +static __always_inline bool arch_static_branch_jump(struct static_key * const key, +const bool branch) {asm_volatile_goto ( " .option push \n\t"
arch/riscv/include/asm/kvm_vcpu_timer.h +1 -0
@@ -45,6 +45,7 @@ int kvm_riscv_vcpu_timer_deinit(struct kvm_vcpu *vcpu);int kvm_riscv_vcpu_timer_reset (struct kvm_vcpu *vcpu);void kvm_riscv_vcpu_timer_restore (struct kvm_vcpu *vcpu);void kvm_riscv_guest_timer_init (struct kvm *kvm); +void kvm_riscv_vcpu_timer_sync (struct kvm_vcpu *vcpu);void kvm_riscv_vcpu_timer_save (struct kvm_vcpu *vcpu);bool kvm_riscv_vcpu_timer_pending (struct kvm_vcpu *vcpu);
arch/riscv/include/asm/vdso/processor.h +1 -1
@@ -21,7 +21,7 @@ static inline void cpu_relax(void)* Reduce instruction retirement. * This assumes the PC changes. */ -#ifdef __riscv_zihintpause +#ifdef CONFIG_TOOLCHAIN_HAS_ZIHINTPAUSE __asm__ __volatile__ ("pause" );#else /* Encoding of the pause instruction */
arch/riscv/include/uapi/asm/kvm.h +1 -0
@@ -48,6 +48,7 @@ struct kvm_sregs {/* CONFIG registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */ struct kvm_riscv_config {unsigned long isa; +unsigned long zicbom_block_size; };/* CORE registers for KVM_GET_ONE_REG and KVM_SET_ONE_REG */
arch/riscv/kvm/vcpu.c +11 -0
@@ -18,6 +18,7 @@#include <linux/fs.h> #include <linux/kvm_host.h> #include <asm/csr.h> +#include <asm/cacheflush.h> #include <asm/hwcap.h> const struct _kvm_stats_desc kvm_vcpu_stats_desc[] = {
@@ -254,6 +255,11 @@ static int kvm_riscv_vcpu_get_reg_config(struct kvm_vcpu *vcpu,case KVM_REG_RISCV_CONFIG_REG (isa): reg_val = vcpu->arch.isa[0 ] &KVM_RISCV_BASE_ISA_MASK ;break ; +case KVM_REG_RISCV_CONFIG_REG (zicbom_block_size): +if (!riscv_isa_extension_available (vcpu->arch.isa,ZICBOM )) +return -EINVAL ; + reg_val = riscv_cbom_block_size; +break ;default :return -EINVAL ; }
@@ -311,6 +317,8 @@ static int kvm_riscv_vcpu_set_reg_config(struct kvm_vcpu *vcpu,return -EOPNOTSUPP ; }break ; +case KVM_REG_RISCV_CONFIG_REG (zicbom_block_size): +return -EOPNOTSUPP ;default :return -EINVAL ; }
@@ -690,6 +698,9 @@ void kvm_riscv_vcpu_sync_interrupts(struct kvm_vcpu *vcpu)clear_bit (IRQ_VS_SOFT , &v->irqs_pending); } } + +/* Sync-up timer CSRs */ +kvm_riscv_vcpu_timer_sync (vcpu); }int kvm_riscv_vcpu_set_interrupt (struct kvm_vcpu *vcpu,unsigned int irq)
arch/riscv/kvm/vcpu_timer.c +15 -2
@@ -320,20 +320,33 @@ void kvm_riscv_vcpu_timer_restore(struct kvm_vcpu *vcpu)kvm_riscv_vcpu_timer_unblocking (vcpu); } -void kvm_riscv_vcpu_timer_save (struct kvm_vcpu *vcpu) +void kvm_riscv_vcpu_timer_sync (struct kvm_vcpu *vcpu) {struct kvm_vcpu_timer *t = &vcpu->arch.timer;if (!t->sstc_enabled)return ; - t = &vcpu->arch.timer;#if defined(CONFIG_32BIT ) t->next_cycles =csr_read (CSR_VSTIMECMP ); t->next_cycles |= (u64 )csr_read (CSR_VSTIMECMPH ) <<32 ;#else t->next_cycles =csr_read (CSR_VSTIMECMP );#endif +} + +void kvm_riscv_vcpu_timer_save (struct kvm_vcpu *vcpu) +{ +struct kvm_vcpu_timer *t = &vcpu->arch.timer; + +if (!t->sstc_enabled) +return ; + +/* +* The vstimecmp CSRs are saved by kvm_riscv_vcpu_timer_sync() +* upon every VM exit so no need to save here. +*/ +/* timer should be enabled for the remaining operations */ if (unlikely (!t->init_done))return ;
arch/riscv/mm/cacheflush.c +38 -0
@@ -3,6 +3,7 @@* Copyright (C) 2017 SiFive */ +#include <linux/of.h> #include <asm/cacheflush.h> #ifdef CONFIG_SMP
@@ -86,3 +87,40 @@ void flush_icache_pte(pte_t pte) flush_icache_all(); }#endif /* CONFIG_MMU */ + +unsigned int riscv_cbom_block_size; +EXPORT_SYMBOL_GPL (riscv_cbom_block_size); + +void riscv_init_cbom_blocksize (void ) +{ +struct device_node *node; +unsigned long cbom_hartid; +u32 val, probed_block_size; +int ret; + + probed_block_size =0 ; +for_each_of_cpu_node (node) { +unsigned long hartid; + + ret =riscv_of_processor_hartid (node, &hartid); +if (ret) +continue ; + +/* set block-size for cbom extension if available */ + ret =of_property_read_u32 (node,"riscv,cbom-block-size" , &val); +if (ret) +continue ; + +if (!probed_block_size) { + probed_block_size = val; + cbom_hartid = hartid; + }else { +if (probed_block_size != val) +pr_warn ("cbom-block-size mismatched between harts %lu and %lu\n" , + cbom_hartid, hartid); + } + } + +if (probed_block_size) + riscv_cbom_block_size = probed_block_size; +}
arch/riscv/mm/dma-noncoherent.c +0 -39
@@ -8,11 +8,8 @@#include <linux/dma-direct.h> #include <linux/dma-map-ops.h> #include <linux/mm.h> -#include <linux/of.h> -#include <linux/of_device.h> #include <asm/cacheflush.h> -unsigned int riscv_cbom_block_size;static bool noncoherent_supported; void arch_sync_dma_for_device(phys_addr_t paddr, size_t size,
@@ -75,42 +72,6 @@ void arch_setup_dma_ops(struct device *dev, u64 dma_base, u64 size, dev->dma_coherent = coherent; } -#ifdef CONFIG_RISCV_ISA_ZICBOM -void riscv_init_cbom_blocksize (void ) -{ -struct device_node *node; -unsigned long cbom_hartid; -u32 val, probed_block_size; -int ret; - - probed_block_size =0 ; -for_each_of_cpu_node (node) { -unsigned long hartid; - - ret =riscv_of_processor_hartid (node, &hartid); -if (ret) -continue ; - -/* set block-size for cbom extension if available */ - ret =of_property_read_u32 (node,"riscv,cbom-block-size" , &val); -if (ret) -continue ; - -if (!probed_block_size) { - probed_block_size = val; - cbom_hartid = hartid; - }else { -if (probed_block_size != val) -pr_warn ("cbom-block-size mismatched between harts %lu and %lu\n" , - cbom_hartid, hartid); - } - } - -if (probed_block_size) - riscv_cbom_block_size = probed_block_size; -} -#endif -void riscv_noncoherent_supported (void ) { WARN(!riscv_cbom_block_size,
arch/riscv/mm/kasan_init.c +6 -1
@@ -113,6 +113,8 @@ static void __init kasan_populate_pud(pgd_t *pgd, base_pud = pt_ops.get_pud_virt (pfn_to_phys (_pgd_pfn (*pgd))); }else if (pgd_none (*pgd)) { base_pud =memblock_alloc (PTRS_PER_PUD *sizeof (pud_t),PAGE_SIZE ); +memcpy (base_pud, (void *)kasan_early_shadow_pud, +sizeof (pud_t) *PTRS_PER_PUD ); }else { base_pud = (pud_t *)pgd_page_vaddr (*pgd);if (base_pud ==lm_alias (kasan_early_shadow_pud)) {
@@ -173,8 +175,11 @@ static void __init kasan_populate_p4d(pgd_t *pgd, base_p4d = pt_ops.get_p4d_virt (pfn_to_phys (_pgd_pfn (*pgd))); }else { base_p4d = (p4d_t *)pgd_page_vaddr (*pgd); -if (base_p4d ==lm_alias (kasan_early_shadow_p4d)) +if (base_p4d ==lm_alias (kasan_early_shadow_p4d)) { base_p4d =memblock_alloc (PTRS_PER_PUD *sizeof (p4d_t),PAGE_SIZE ); +memcpy (base_p4d, (void *)kasan_early_shadow_p4d, +sizeof (p4d_t) *PTRS_PER_P4D ); + } } p4dp = base_p4d +p4d_index (vaddr);
arch/s390/boot/vmlinux.lds.S +11 -2
@@ -102,8 +102,17 @@ SECTIONS _compressed_start = .; *(.vmlinux.bin.compressed) _compressed_end = .; - FILL(0xff); - . = ALIGN(4096); + } + +#define SB_TRAILER_SIZE 32 + /* Trailer needed for Secure Boot */ + . += SB_TRAILER_SIZE; /* make sure .sb.trailer does not overwrite the previous section */ + . = ALIGN(4096) - SB_TRAILER_SIZE; + .sb.trailer : { + QUAD(0) + QUAD(0) + QUAD(0) + QUAD(0x000000207a49504c) } _end = .;
arch/s390/include/asm/futex.h +2 -1
@@ -17,7 +17,8 @@"3: jl 1b\n" \" lhi %0,0\n" \"4: sacf 768\n" \ - EX_TABLE(0b,4b) EX_TABLE(2b,4b) EX_TABLE(3b,4b) \ + EX_TABLE(0b,4b) EX_TABLE(1b,4b) \ + EX_TABLE(2b,4b) EX_TABLE(3b,4b) \ : "=d" (ret), "=&d" (oldval), "=&d" (newval), \" =m" (*uaddr) \ : "0" (-EFAULT), "d" (oparg), "a" (uaddr), \
arch/s390/lib/uaccess.c +3 -3
@@ -156,7 +156,7 @@ unsigned long __clear_user(void __user *to, unsigned long size) asmvolatile (" lr 0,%[spec]\n" "0: mvcos 0(%1),0(%4),%0\n" -" jz 4f\n" +"6: jz 4f\n" "1: algr %0,%2\n" " slgr %1,%2\n" " j 0b\n"
@@ -166,11 +166,11 @@ unsigned long __clear_user(void __user *to, unsigned long size)" clgr %0,%3\n" /* copy crosses next page boundary? */ " jnh 5f\n" "3: mvcos 0(%1),0(%4),%3\n" -" slgr %0,%3\n" +"7: slgr %0,%3\n" " j 5f\n" "4: slgr %0,%0\n" "5:\n" - EX_TABLE(0b,2b) EX_TABLE(3b,5b) + EX_TABLE(0b,2b) EX_TABLE(6b,2b) EX_TABLE(3b,5b) EX_TABLE(7b,5b) : "+a" (size), "+a" (to), "+a" (tmp1), "=a" (tmp2) : "a" (empty_zero_page), [spec] "d" (spec.val) : "cc", "memory", "0");
arch/s390/pci/pci_mmio.c +4 -4
@@ -64,7 +64,7 @@ static inline int __pcistg_mio_inuser( asmvolatile (" sacf 256\n" "0: llgc %[tmp],0(%[src])\n" -" sllg %[val],%[val],8\n" +"4: sllg %[val],%[val],8\n" " aghi %[src],1\n" " ogr %[val],%[tmp]\n" " brctg %[cnt],0b\n"
@@ -72,7 +72,7 @@ static inline int __pcistg_mio_inuser("2: ipm %[cc]\n" " srl %[cc],28\n" "3: sacf 768\n" - EX_TABLE(0b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b) + EX_TABLE(0b, 3b) EX_TABLE(4b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b) : [src] "+a" (src), [cnt] "+d" (cnt), [val] "+d" (val), [tmp] "=d" (tmp),
@@ -215,10 +215,10 @@ static inline int __pcilg_mio_inuser("2: ahi %[shift],-8\n" " srlg %[tmp],%[val],0(%[shift])\n" "3: stc %[tmp],0(%[dst])\n" -" aghi %[dst],1\n" +"5: aghi %[dst],1\n" " brctg %[cnt],2b\n" "4: sacf 768\n" - EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b) + EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b) EX_TABLE(5b, 4b) : [ioaddr_len] "+&d" (ioaddr_len.pair), [cc] "+d" (cc), [val] "=d" (val),
arch/x86/crypto/polyval-clmulni_glue.c +14 -5
@@ -27,13 +27,17 @@#include <asm/cpu_device_id.h> #include <asm/simd.h> +#define POLYVAL_ALIGN 16 +#define POLYVAL_ALIGN_ATTR __aligned(POLYVAL_ALIGN) +#define POLYVAL_ALIGN_EXTRA ((POLYVAL_ALIGN - 1) & ~(CRYPTO_MINALIGN - 1)) +#define POLYVAL_CTX_SIZE (sizeof(struct polyval_tfm_ctx) + POLYVAL_ALIGN_EXTRA)#define NUM_KEY_POWERS 8struct polyval_tfm_ctx {/* * These powers must be in the order h^8, ..., h^1. */ -u8 key_powers[NUM_KEY_POWERS ][POLYVAL_BLOCK_SIZE ]; + u8 key_powers[NUM_KEY_POWERS][POLYVAL_BLOCK_SIZE] POLYVAL_ALIGN_ATTR; };struct polyval_desc_ctx {
@@ -45,6 +49,11 @@ asmlinkage void clmul_polyval_update(const struct polyval_tfm_ctx *keys, const u8 *in, size_t nblocks, u8 *accumulator); asmlinkage void clmul_polyval_mul(u8 *op1, const u8 *op2); +static inline struct polyval_tfm_ctx *polyval_tfm_ctx (struct crypto_shash *tfm) +{ +return PTR_ALIGN (crypto_shash_ctx (tfm),POLYVAL_ALIGN ); +} +static void internal_polyval_update (const struct polyval_tfm_ctx *keys,const u8 *in,size_t nblocks,u8 *accumulator) {
@@ -72,7 +81,7 @@ static void internal_polyval_mul(u8 *op1, const u8 *op2)static int polyval_x86_setkey (struct crypto_shash *tfm,const u8 *key,unsigned int keylen) { -struct polyval_tfm_ctx *tctx =crypto_shash_ctx (tfm); +struct polyval_tfm_ctx *tctx =polyval_tfm_ctx (tfm);int i;if (keylen !=POLYVAL_BLOCK_SIZE )
@@ -102,7 +111,7 @@ static int polyval_x86_update(struct shash_desc *desc, const u8 *src, unsigned int srclen) {struct polyval_desc_ctx *dctx =shash_desc_ctx (desc); -const struct polyval_tfm_ctx *tctx =crypto_shash_ctx (desc->tfm); +const struct polyval_tfm_ctx *tctx =polyval_tfm_ctx (desc->tfm);u8 *pos;unsigned int nblocks;unsigned int n;
@@ -143,7 +152,7 @@ static int polyval_x86_update(struct shash_desc *desc,static int polyval_x86_final (struct shash_desc *desc,u8 *dst) {struct polyval_desc_ctx *dctx =shash_desc_ctx (desc); -const struct polyval_tfm_ctx *tctx =crypto_shash_ctx (desc->tfm); +const struct polyval_tfm_ctx *tctx =polyval_tfm_ctx (desc->tfm);if (dctx->bytes) { internal_polyval_mul(dctx->buffer,
@@ -167,7 +176,7 @@ static struct shash_alg polyval_alg = { .cra_driver_name = "polyval-clmulni", .cra_priority = 200, .cra_blocksize = POLYVAL_BLOCK_SIZE, - .cra_ctxsize = sizeof(struct polyval_tfm_ctx), + .cra_ctxsize = POLYVAL_CTX_SIZE, .cra_module = THIS_MODULE, }, };
arch/x86/events/intel/lbr.c +1 -1
@@ -1869,7 +1869,7 @@ void __init intel_pmu_arch_lbr_init(void)return ; clear_arch_lbr: -clear_cpu_cap (&boot_cpu_data,X86_FEATURE_ARCH_LBR ); +setup_clear_cpu_cap (X86_FEATURE_ARCH_LBR ); }/**
arch/x86/kernel/fpu/init.c +0 -8
@@ -210,13 +210,6 @@ static void __init fpu__init_system_xstate_size_legacy(void)fpstate_reset (¤t->thread.fpu); } -static void __init fpu__init_init_fpstate (void ) -{ -/* Bring init_fpstate size and features up to date */ - init_fpstate.size = fpu_kernel_cfg.max_size; - init_fpstate.xfeatures = fpu_kernel_cfg.max_features; -} -/* * Called on the boot CPU once per system bootup, to set up the initial * FPU state that is later cloned into all processes:
@@ -236,5 +229,4 @@ void __init fpu__init_system(struct cpuinfo_x86 *c)fpu__init_system_xstate_size_legacy ();fpu__init_system_xstate (fpu_kernel_cfg.max_size);fpu__init_task_struct_size (); -fpu__init_init_fpstate (); }
arch/x86/kernel/fpu/xstate.c +23 -19
72 lines not on this page · raw message
arch/x86/kernel/unwind_orc.c +1 -1
@@ -713,7 +713,7 @@ void __unwind_start(struct unwind_state *state, struct task_struct *task,/* Otherwise, skip ahead to the user-specified starting frame: */ while (!unwind_done (state) && (!on_stack (&state->stack_info, first_frame,sizeof (long )) || - state->sp < (unsigned long )first_frame)) + state->sp <= (unsigned long )first_frame))unwind_next_frame (state);return ;
drivers/acpi/acpi_pcc.c +1 -1
@@ -27,7 +27,7 @@* Arbitrary retries in case the remote processor is slow to respond * to PCC commands */ -#define PCC_CMD_WAIT_RETRIES_NUM 500 +#define PCC_CMD_WAIT_RETRIES_NUM 500ULLstruct pcc_data {struct pcc_mbox_chan *pcc_chan;
drivers/base/power/domain.c +4 -0
@@ -2950,6 +2950,10 @@ static int genpd_iterate_idle_states(struct device_node *dn, np = it.node;if (!of_match_node (idle_state_match, np))continue ; + +if (!of_device_is_available (np)) +continue ; +if (states) { ret =genpd_parse_state (&states[i], np);if (ret) {
drivers/char/random.c +2 -2
@@ -793,13 +793,13 @@ int __init random_init(const char *command_line)#endif for (i =0 , arch_bits =sizeof (entropy) *8 ; i <ARRAY_SIZE (entropy);) { - longs =arch_get_random_seed_longs (entropy,ARRAY_SIZE (entropy) - i); + longs =arch_get_random_seed_longs_early (entropy,ARRAY_SIZE (entropy) - i);if (longs) {_mix_pool_bytes (entropy,sizeof (*entropy) * longs); i += longs;continue ; } - longs =arch_get_random_longs (entropy,ARRAY_SIZE (entropy) - i); + longs =arch_get_random_longs_early (entropy,ARRAY_SIZE (entropy) - i);if (longs) {_mix_pool_bytes (entropy,sizeof (*entropy) * longs); i += longs;
drivers/counter/104-quad-8.c +42 -22
101 lines not on this page · raw message
drivers/counter/microchip-tcb-capture.c +14 -4
@@ -28,7 +28,6 @@ struct mchp_tc_data {int qdec_mode;int num_channels;int channel[2 ]; -bool trig_inverted; };static const enum counter_function mchp_tc_count_functions[] = {
@@ -153,7 +152,7 @@ static int mchp_tc_count_signal_read(struct counter_device *counter,regmap_read (priv->regmap,ATMEL_TC_REG (priv->channel[0 ],SR ), &sr); -if (priv->trig_inverted) +if (signal->id ==1 ) sigstatus = (sr &ATMEL_TC_MTIOB );else sigstatus = (sr &ATMEL_TC_MTIOA );
@@ -171,6 +170,17 @@ static int mchp_tc_count_action_read(struct counter_device *counter,struct mchp_tc_data *const priv =counter_priv (counter);u32 cmr; +if (priv->qdec_mode) { + *action =COUNTER_SYNAPSE_ACTION_BOTH_EDGES ; +return 0 ; + } + +/* Only TIOA signal is evaluated in non-QDEC mode */ +if (synapse->signal->id !=0 ) { + *action =COUNTER_SYNAPSE_ACTION_NONE ; +return 0 ; + } +regmap_read (priv->regmap,ATMEL_TC_REG (priv->channel[0 ],CMR ), &cmr);switch (cmr &ATMEL_TC_ETRGEDG ) {
@@ -199,8 +209,8 @@ static int mchp_tc_count_action_write(struct counter_device *counter,struct mchp_tc_data *const priv =counter_priv (counter);u32 edge =ATMEL_TC_ETRGEDG_NONE ; -/* QDEC mode is rising edge only */ -if (priv->qdec_mode) +/* QDEC mode is rising edge only; only TIOA handled in non-QDEC mode */ +if (priv->qdec_mode || synapse->signal->id !=0 )return -EINVAL ;switch (action) {
drivers/cpufreq/intel_pstate.c +47 -86
292 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +3 -3
@@ -509,13 +509,13 @@ kfd_mem_dmamap_userptr(struct kgd_mem *mem,struct ttm_tt *ttm = bo->tbo.ttm;int ret; +if (WARN_ON (ttm->num_pages != src_ttm->num_pages)) +return -EINVAL ; + ttm->sg =kmalloc (sizeof (*ttm->sg),GFP_KERNEL );if (unlikely (!ttm->sg))return -ENOMEM ; -if (WARN_ON (ttm->num_pages != src_ttm->num_pages)) -return -EINVAL ; -/* Same sequence as in amdgpu_ttm_tt_pin_userptr */ ret = sg_alloc_table_from_pages(ttm->sg, src_ttm->pages, ttm->num_pages, 0,
drivers/gpu/drm/amd/amdgpu/amdgpu_ctx.c +4 -1
@@ -327,7 +327,10 @@ static int amdgpu_ctx_init(struct amdgpu_ctx_mgr *mgr, int32_t priority,if (r)return r; - ctx->stable_pstate = current_stable_pstate; +if (mgr->adev->pm.stable_pstate_ctx) + ctx->stable_pstate = mgr->adev->pm.stable_pstate_ctx->stable_pstate; +else + ctx->stable_pstate = current_stable_pstate;return 0 ; }
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +16 -0
@@ -3208,6 +3208,15 @@ static int amdgpu_device_ip_resume_phase2(struct amdgpu_device *adev)return r; } adev->ip_blocks[i].status.hw = true; + +if (adev->in_s0ix && adev->ip_blocks[i].version->type ==AMD_IP_BLOCK_TYPE_SMC ) { +/* disable gfxoff for IP resume. The gfxoff will be re-enabled in +* amdgpu_device_resume() after IP resume. +*/ +amdgpu_gfx_off_ctrl (adev, false); +DRM_DEBUG ("will disable gfxoff for re-initializing other blocks\n" ); + } + }return 0 ;
@@ -4180,6 +4189,13 @@ int amdgpu_device_resume(struct drm_device *dev, bool fbcon)/* Make sure IB tests flushed */ flush_delayed_work (&adev->delayed_init_work); +if (adev->in_s0ix) { +/* re-enable gfxoff after IP resume. This re-enables gfxoff after +* it was disabled for IP resume in amdgpu_device_ip_resume_phase2(). +*/ +amdgpu_gfx_off_ctrl (adev, true); +DRM_DEBUG ("will enable gfxoff for the mission mode\n" ); + }if (fbcon)drm_fb_helper_set_suspend_unlocked (adev_to_drm (adev)->fb_helper, false);
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +15 -5
@@ -424,8 +424,9 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo,static bool amdgpu_mem_visible (struct amdgpu_device *adev,struct ttm_resource *mem) { -uint64_t mem_size = (u64 )mem->num_pages <<PAGE_SHIFT ; +u64 mem_size = (u64 )mem->num_pages <<PAGE_SHIFT ;struct amdgpu_res_cursor cursor; +u64 end;if (mem->mem_type ==TTM_PL_SYSTEM || mem->mem_type ==TTM_PL_TT )
@@ -434,12 +435,21 @@ static bool amdgpu_mem_visible(struct amdgpu_device *adev,return false;amdgpu_res_first (mem,0 , mem_size, &cursor); + end = cursor.start + cursor.size; +while (cursor.remaining) { +amdgpu_res_next (&cursor, cursor.size); -/* ttm_resource_ioremap only supports contiguous memory */ -if (cursor.size != mem_size) -return false; +if (!cursor.remaining) +break ; + +/* ttm_resource_ioremap only supports contiguous memory */ +if (end != cursor.start) +return false; + + end = cursor.start + cursor.size; + } -return cursor.start + cursor.size <= adev->gmc.visible_vram_size; +return end <= adev->gmc.visible_vram_size; }/*
drivers/gpu/drm/amd/amdgpu/mmhub_v2_0.c +8 -20
@@ -32,8 +32,6 @@#include "gc/gc_10_1_0_offset.h" #include "soc15_common.h" -#define mmMM_ATC_L2_MISC_CG_Sienna_Cichlid 0x064d -#define mmMM_ATC_L2_MISC_CG_Sienna_Cichlid_BASE_IDX 0#define mmDAGB0_CNTL_MISC2_Sienna_Cichlid 0x0070#define mmDAGB0_CNTL_MISC2_Sienna_Cichlid_BASE_IDX 0
@@ -574,7 +572,6 @@ static void mmhub_v2_0_update_medium_grain_clock_gating(struct amdgpu_device *adcase IP_VERSION (2 ,1 ,0 ):case IP_VERSION (2 ,1 ,1 ):case IP_VERSION (2 ,1 ,2 ): - def = data =RREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG_Sienna_Cichlid); def1 = data1 =RREG32_SOC15 (MMHUB ,0 , mmDAGB0_CNTL_MISC2_Sienna_Cichlid);break ;default :
@@ -608,8 +605,6 @@ static void mmhub_v2_0_update_medium_grain_clock_gating(struct amdgpu_device *adcase IP_VERSION (2 ,1 ,0 ):case IP_VERSION (2 ,1 ,1 ):case IP_VERSION (2 ,1 ,2 ): -if (def != data) -WREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG_Sienna_Cichlid, data);if (def1 != data1)WREG32_SOC15 (MMHUB ,0 , mmDAGB0_CNTL_MISC2_Sienna_Cichlid, data1);break ;
@@ -634,8 +629,8 @@ static void mmhub_v2_0_update_medium_grain_light_sleep(struct amdgpu_device *adecase IP_VERSION (2 ,1 ,0 ):case IP_VERSION (2 ,1 ,1 ):case IP_VERSION (2 ,1 ,2 ): - def = data =RREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG_Sienna_Cichlid); -break ; +/* There is no ATCL2 in MMHUB for 2.1.x */ +return ;default : def = data =RREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG);break ;
@@ -646,18 +641,8 @@ static void mmhub_v2_0_update_medium_grain_light_sleep(struct amdgpu_device *adeelse data &= ~MM_ATC_L2_MISC_CG__MEM_LS_ENABLE_MASK ; -if (def != data) { -switch (adev->ip_versions[MMHUB_HWIP ][0 ]) { -case IP_VERSION (2 ,1 ,0 ): -case IP_VERSION (2 ,1 ,1 ): -case IP_VERSION (2 ,1 ,2 ): -WREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG_Sienna_Cichlid, data); -break ; -default : -WREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG, data); -break ; - } - } +if (def != data) +WREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG, data); } static int mmhub_v2_0_set_clockgating(struct amdgpu_device *adev,
@@ -695,7 +680,10 @@ static void mmhub_v2_0_get_clockgating(struct amdgpu_device *adev, u64 *flags)case IP_VERSION (2 ,1 ,0 ):case IP_VERSION (2 ,1 ,1 ):case IP_VERSION (2 ,1 ,2 ): - data =RREG32_SOC15 (MMHUB ,0 , mmMM_ATC_L2_MISC_CG_Sienna_Cichlid); +/* There is no ATCL2 in MMHUB for 2.1.x. Keep the status +* based on DAGB +*/ + data =MM_ATC_L2_MISC_CG__ENABLE_MASK ; data1 =RREG32_SOC15 (MMHUB ,0 , mmDAGB0_CNTL_MISC2_Sienna_Cichlid);break ;default :
drivers/gpu/drm/amd/amdkfd/kfd_crat.c +104 -2
121 lines not on this page · raw message
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c +7 -43
63 lines not on this page · raw message
drivers/gpu/drm/bridge/parade-ps8640.c +23 -2
@@ -105,6 +105,7 @@ struct ps8640 {struct gpio_desc *gpio_powerdown;struct device_link *link;bool pre_enabled; +bool need_post_hpd_delay; };static const struct regmap_config ps8640_regmap_config[] = {
@@ -173,14 +174,31 @@ static int _ps8640_wait_hpd_asserted(struct ps8640 *ps_bridge, unsigned long wai {struct regmap *map = ps_bridge->regmap[PAGE2_TOP_CNTL ];int status; +int ret;/* * Apparently something about the firmware in the chip signals that * HPD goes high by reporting GPIO9 as high (even though HPD isn't * actually connected to GPIO9). */ -return regmap_read_poll_timeout (map,PAGE2_GPIO_H , status, - status &PS_GPIO9 , wait_us /10 , wait_us); + ret =regmap_read_poll_timeout (map,PAGE2_GPIO_H , status, + status &PS_GPIO9 , wait_us /10 , wait_us); + +/* +* The first time we see HPD go high after a reset we delay an extra +* 50 ms. The best guess is that the MCU is doing "stuff" during this +* time (maybe talking to the panel) and we don't want to interrupt it. +* +* No locking is done around "need_post_hpd_delay". If we're here we +* know we're holding a PM Runtime reference and the only other place +* that touches this is PM Runtime resume. +*/ +if (!ret && ps_bridge->need_post_hpd_delay) { + ps_bridge->need_post_hpd_delay = false; +msleep (50 ); + } + +return ret; }static int ps8640_wait_hpd_asserted (struct drm_dp_aux *aux,unsigned long wait_us)
@@ -376,6 +394,9 @@ static int __maybe_unused ps8640_resume(struct device *dev)usleep_range (2000 ,2500 );gpiod_set_value (ps_bridge->gpio_reset,0 ); +/* We just reset things, so we need a delay after the first HPD */ + ps_bridge->need_post_hpd_delay = true; +/* * Mystery 200 ms delay for the "MCU to be ready". It's unclear if * this is truly necessary since the MCU will already signal that
drivers/gpu/drm/i915/display/intel_dp.c +2 -0
@@ -3923,6 +3923,8 @@ intel_dp_handle_hdmi_link_status_change(struct intel_dp *intel_dp)drm_dp_pcon_hdmi_frl_link_error_count (&intel_dp->aux, &intel_dp->attached_connector->base); + intel_dp->frl.is_trained = false; +/* Restart FRL training or fall back to TMDS mode */ intel_dp_check_frl_training (intel_dp); }
drivers/gpu/drm/i915/gt/intel_workarounds.c +2 -2
@@ -2301,11 +2301,11 @@ rcs_engine_wa_init(struct intel_engine_cs *engine, struct i915_wa_list *wal) }if (IS_DG1_GRAPHICS_STEP (i915,STEP_A0 ,STEP_B0 ) || -IS_ROCKETLAKE (i915) ||IS_TIGERLAKE (i915)) { +IS_ROCKETLAKE (i915) ||IS_TIGERLAKE (i915) ||IS_ALDERLAKE_P (i915)) {/* * Wa_1607030317:tgl * Wa_1607186500:tgl -* Wa_1607297627:tgl,rkl,dg1[a0] +* Wa_1607297627:tgl,rkl,dg1[a0],adlp * * On TGL and RKL there are multiple entries for this WA in the * BSpec; some indicate this is an A0-only WA, others indicate
drivers/gpu/drm/i915/intel_runtime_pm.c +9 -2
@@ -591,8 +591,15 @@ void intel_runtime_pm_enable(struct intel_runtime_pm *rpm)pm_runtime_use_autosuspend (kdev); } -/* Enable by default */ -pm_runtime_allow (kdev); +/* +* FIXME: Temp hammer to keep autosupend disable on lmem supported platforms. +* As per PCIe specs 5.3.1.4.1, all iomem read write request over a PCIe +* function will be unsupported in case PCIe endpoint function is in D3. +* Let's keep i915 autosuspend control 'on' till we fix all known issue +* with lmem access in D3. +*/ +if (!IS_DGFX (i915)) +pm_runtime_allow (kdev);/* * The core calls the driver load handler with an RPM reference held.
drivers/gpu/drm/msm/adreno/a6xx_gpu_state.c +5 -2
@@ -91,7 +91,7 @@ struct a6xx_state_memobj {static void *state_kcalloc (struct a6xx_gpu_state *a6xx_state,int nr,size_t objsize) {struct a6xx_state_memobj *obj = -kzalloc ((nr * objsize) +sizeof (*obj),GFP_KERNEL ); +kvzalloc ((nr * objsize) +sizeof (*obj),GFP_KERNEL );if (!obj)return NULL ;
@@ -1040,8 +1040,11 @@ static void a6xx_gpu_state_destroy(struct kref *kref)if (a6xx_state->gmu_hfi)kvfree (a6xx_state->gmu_hfi->data); +if (a6xx_state->gmu_debug) +kvfree (a6xx_state->gmu_debug->data); +list_for_each_entry_safe (obj, tmp, &a6xx_state->objs, node) -kfree (obj); +kvfree (obj);adreno_gpu_state_destroy (state);kfree (a6xx_state);
drivers/gpu/drm/msm/adreno/adreno_gpu.c +6 -1
@@ -729,7 +729,12 @@ static char *adreno_gpu_ascii85_encode(u32 *src, size_t len)return buf; } -/* len is expected to be in bytes */ +/* len is expected to be in bytes +* +* WARNING: *ptr should be allocated with kvmalloc or friends. It can be free'd +* with kvfree() and replaced with a newly kvmalloc'd buffer on the first call +* when the unencoded raw data is encoded +*/ void adreno_show_object (struct drm_printer *p,void **ptr,int len,bool *encoded) {
drivers/gpu/drm/msm/disp/mdp4/mdp4_lvds_connector.c +3 -2
@@ -56,8 +56,9 @@ static int mdp4_lvds_connector_get_modes(struct drm_connector *connector)return ret; } -static int mdp4_lvds_connector_mode_valid (struct drm_connector *connector, -struct drm_display_mode *mode) +static enum drm_mode_status +mdp4_lvds_connector_mode_valid (struct drm_connector *connector, +struct drm_display_mode *mode) {struct mdp4_lvds_connector *mdp4_lvds_connector =to_mdp4_lvds_connector (connector);
drivers/gpu/drm/msm/dp/dp_ctrl.c +5 -8
@@ -1245,8 +1245,7 @@ static int dp_ctrl_link_train(struct dp_ctrl_private *ctrl, {int ret =0 ;const u8 *dpcd = ctrl->panel->dpcd; -u8 encoding =DP_SET_ANSI_8B10B ; -u8 ssc; +u8 encoding[] = {0 ,DP_SET_ANSI_8B10B };u8 assr;struct dp_link_info link_info = {0 };
@@ -1258,13 +1257,11 @@ static int dp_ctrl_link_train(struct dp_ctrl_private *ctrl,dp_aux_link_configure (ctrl->aux, &link_info); -if (drm_dp_max_downspread (dpcd)) { - ssc =DP_SPREAD_AMP_0_5 ; -drm_dp_dpcd_write (ctrl->aux,DP_DOWNSPREAD_CTRL , &ssc,1 ); - } +if (drm_dp_max_downspread (dpcd)) + encoding[0 ] |=DP_SPREAD_AMP_0_5 ; -drm_dp_dpcd_write (ctrl->aux,DP_MAIN_LINK_CHANNEL_CODING_SET , - &encoding,1 ); +/* config DOWNSPREAD_CTRL and MAIN_LINK_CHANNEL_CODING_SET */ +drm_dp_dpcd_write (ctrl->aux,DP_DOWNSPREAD_CTRL , encoding,2 );if (drm_dp_alternate_scrambler_reset_cap (dpcd)) { assr =DP_ALTERNATE_SCRAMBLER_RESET_ENABLE ;
drivers/gpu/drm/msm/dp/dp_display.c +20 -3
@@ -1249,7 +1249,7 @@ int dp_display_request_irq(struct msm_dp *dp_display)return -EINVAL ; } - rc =devm_request_irq (&dp->pdev->dev, dp->irq, + rc =devm_request_irq (dp_display->drm_dev->dev, dp->irq, dp_display_irq_handler,IRQF_TRIGGER_HIGH ,"dp_display_isr" , dp);if (rc <0 ) {
@@ -1528,6 +1528,11 @@ void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor) } } +static void of_dp_aux_depopulate_bus_void (void *data) +{ +of_dp_aux_depopulate_bus (data); +} +static int dp_display_get_next_bridge (struct msm_dp *dp) {int rc;
@@ -1552,10 +1557,16 @@ static int dp_display_get_next_bridge(struct msm_dp *dp)* panel driver is probed asynchronously but is the best we * can do without a bigger driver reorganization. */ - rc =devm_of_dp_aux_populate_ep_devices (dp_priv->aux); + rc =of_dp_aux_populate_bus (dp_priv->aux,NULL );of_node_put (aux_bus);if (rc) goto error; + + rc =devm_add_action_or_reset (dp->drm_dev->dev, + of_dp_aux_depopulate_bus_void, + dp_priv->aux); +if (rc) + goto error; }else if (dp->is_edp) {DRM_ERROR ("eDP aux_bus not found\n" );return -ENODEV ;
@@ -1568,7 +1579,7 @@ static int dp_display_get_next_bridge(struct msm_dp *dp)* For DisplayPort interfaces external bridges are optional, so * silently ignore an error if one is not present (-ENODEV). */ - rc =dp_parser_find_next_bridge (dp_priv->parser); + rc =devm_dp_parser_find_next_bridge (dp->drm_dev->dev, dp_priv->parser);if (!dp->is_edp && rc == -ENODEV )return 0 ;
@@ -1597,6 +1608,12 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev,return -EINVAL ; priv = dev->dev_private; + +if (priv->num_bridges ==ARRAY_SIZE (priv->bridges)) { +DRM_DEV_ERROR (dev->dev,"too many bridges\n" ); +return -ENOSPC ; + } + dp_display->drm_dev = dev; dp_priv = container_of(dp_display, struct dp_display_private, dp_display);
drivers/gpu/drm/msm/dp/dp_drm.c +34 -0
@@ -31,6 +31,36 @@ static enum drm_connector_status dp_bridge_detect(struct drm_bridge *bridge) connector_status_disconnected; } +static int dp_bridge_atomic_check (struct drm_bridge *bridge, +struct drm_bridge_state *bridge_state, +struct drm_crtc_state *crtc_state, +struct drm_connector_state *conn_state) +{ +struct msm_dp *dp; + + dp =to_dp_bridge (bridge)->dp_display; + +drm_dbg_dp (dp->drm_dev,"is_connected = %s\n" , + (dp->is_connected) ?"true" :"false" ); + +/* +* There is no protection in the DRM framework to check if the display +* pipeline has been already disabled before trying to disable it again. +* Hence if the sink is unplugged, the pipeline gets disabled, but the +* crtc->active is still true. Any attempt to set the mode or manually +* disable this encoder will result in the crash. +* +* TODO: add support for telling the DRM subsystem that the pipeline is +* disabled by the hardware and thus all access to it should be forbidden. +* After that this piece of code can be removed. +*/ +if (bridge->ops &DRM_BRIDGE_OP_HPD ) +return (dp->is_connected) ?0 : -ENOTCONN ; + +return 0 ; +} + +/** * dp_bridge_get_modes - callback to add drm modes via drm_mode_probed_add() * @bridge: Poiner to drm bridge
@@ -61,6 +91,9 @@ static int dp_bridge_get_modes(struct drm_bridge *bridge, struct drm_connector * }static const struct drm_bridge_funcs dp_bridge_ops = { + .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, + .atomic_reset = drm_atomic_helper_bridge_reset, .enable = dp_bridge_enable, .disable = dp_bridge_disable, .post_disable = dp_bridge_post_disable,
@@ -68,6 +101,7 @@ static const struct drm_bridge_funcs dp_bridge_ops = { .mode_valid = dp_bridge_mode_valid, .get_modes = dp_bridge_get_modes, .detect = dp_bridge_detect, + .atomic_check = dp_bridge_atomic_check, }; struct drm_bridge *dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev,
drivers/gpu/drm/msm/dp/dp_parser.c +3 -3
@@ -240,12 +240,12 @@ static int dp_parser_clock(struct dp_parser *parser)return 0 ; } -int dp_parser_find_next_bridge (struct dp_parser *parser) +int devm_dp_parser_find_next_bridge (struct device *dev,struct dp_parser *parser) { -struct device *dev = &parser->pdev->dev; +struct platform_device *pdev = parser->pdev;struct drm_bridge *bridge; - bridge =devm_drm_of_get_bridge (dev, dev->of_node,1 ,0 ); + bridge =devm_drm_of_get_bridge (dev, pdev->dev.of_node,1 ,0 );if (IS_ERR (bridge))return PTR_ERR (bridge);
drivers/gpu/drm/msm/dp/dp_parser.h +3 -2
@@ -138,8 +138,9 @@ struct dp_parser {struct dp_parser *dp_parser_get (struct platform_device *pdev);/** -* dp_parser_find_next_bridge() - find an additional bridge to DP +* devm_dp_parser_find_next_bridge() - find an additional bridge to DP * +* @dev: device to tie bridge lifetime to * @parser: dp_parser data from client * * This function is used to find any additional bridge attached to
@@ -147,6 +148,6 @@ struct dp_parser *dp_parser_get(struct platform_device *pdev);* * Return: 0 if able to get the bridge, otherwise negative errno for failure. */ -int dp_parser_find_next_bridge (struct dp_parser *parser); +int devm_dp_parser_find_next_bridge (struct device *dev,struct dp_parser *parser);#endif
drivers/gpu/drm/msm/dsi/dsi.c +6 -0
@@ -227,6 +227,12 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,return -EINVAL ; priv = dev->dev_private; + +if (priv->num_bridges ==ARRAY_SIZE (priv->bridges)) { +DRM_DEV_ERROR (dev->dev,"too many bridges\n" ); +return -ENOSPC ; + } + msm_dsi->dev = dev; ret =msm_dsi_host_modeset_init (msm_dsi->host, dev);
drivers/gpu/drm/msm/hdmi/hdmi.c +6 -1
@@ -300,6 +300,11 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi,struct platform_device *pdev = hdmi->pdev;int ret; +if (priv->num_bridges ==ARRAY_SIZE (priv->bridges)) { +DRM_DEV_ERROR (dev->dev,"too many bridges\n" ); +return -ENOSPC ; + } + hdmi->dev = dev; hdmi->encoder = encoder;
@@ -339,7 +344,7 @@ int msm_hdmi_modeset_init(struct hdmi *hdmi, goto fail; } - ret =devm_request_irq (&pdev->dev, hdmi->irq, + ret =devm_request_irq (dev->dev, hdmi->irq, msm_hdmi_irq,IRQF_TRIGGER_HIGH ,"hdmi_isr" , hdmi);if (ret <0 ) {
drivers/gpu/drm/msm/msm_drv.c +1 -0
@@ -241,6 +241,7 @@ static int msm_drm_uninit(struct device *dev)for (i =0 ; i < priv->num_bridges; i++)drm_bridge_remove (priv->bridges[i]); + priv->num_bridges =0 ;pm_runtime_get_sync (dev);msm_irq_uninstall (ddev);
drivers/hwtracing/coresight/coresight-cti-core.c +0 -5
@@ -90,11 +90,9 @@ void cti_write_all_hw_regs(struct cti_drvdata *drvdata)static int cti_enable_hw (struct cti_drvdata *drvdata) {struct cti_config *config = &drvdata->config; -struct device *dev = &drvdata->csdev->dev;unsigned long flags;int rc =0 ; -pm_runtime_get_sync (dev->parent);spin_lock_irqsave (&drvdata->spinlock, flags);/* no need to do anything if enabled or unpowered*/
@@ -119,7 +117,6 @@ static int cti_enable_hw(struct cti_drvdata *drvdata)/* cannot enable due to error */ cti_err_not_enabled:spin_unlock_irqrestore (&drvdata->spinlock, flags); -pm_runtime_put (dev->parent);return rc; }
@@ -153,7 +150,6 @@ static void cti_cpuhp_enable_hw(struct cti_drvdata *drvdata)static int cti_disable_hw (struct cti_drvdata *drvdata) {struct cti_config *config = &drvdata->config; -struct device *dev = &drvdata->csdev->dev;struct coresight_device *csdev = drvdata->csdev;spin_lock (&drvdata->spinlock);
@@ -175,7 +171,6 @@ static int cti_disable_hw(struct cti_drvdata *drvdata)coresight_disclaim_device_unlocked (csdev);CS_LOCK (drvdata->base);spin_unlock (&drvdata->spinlock); -pm_runtime_put (dev->parent);return 0 ;/* not disabled this call */
drivers/iio/accel/adxl367.c +18 -5
@@ -1185,17 +1185,30 @@ static ssize_t adxl367_get_fifo_watermark(struct device *dev,return sysfs_emit (buf,"%d\n" , fifo_watermark); } -static IIO_CONST_ATTR(hwfifo_watermark_min, "1"); -static IIO_CONST_ATTR(hwfifo_watermark_max, - __stringify(ADXL367_FIFO_MAX_WATERMARK)); +static ssize_t hwfifo_watermark_min_show (struct device *dev, +struct device_attribute *attr, +char *buf) +{ +return sysfs_emit (buf,"%s\n" ,"1" ); +} + +static ssize_t hwfifo_watermark_max_show (struct device *dev, +struct device_attribute *attr, +char *buf) +{ +return sysfs_emit (buf,"%s\n" ,__stringify (ADXL367_FIFO_MAX_WATERMARK )); +} + +static IIO_DEVICE_ATTR_RO(hwfifo_watermark_min, 0); +static IIO_DEVICE_ATTR_RO(hwfifo_watermark_max, 0); static IIO_DEVICE_ATTR(hwfifo_watermark, 0444, adxl367_get_fifo_watermark, NULL, 0); static IIO_DEVICE_ATTR(hwfifo_enabled, 0444, adxl367_get_fifo_enabled, NULL, 0);static const struct attribute *adxl367_fifo_attributes[] = { - &iio_const_attr_hwfifo_watermark_min.dev_attr.attr, - &iio_const_attr_hwfifo_watermark_max.dev_attr.attr, + &iio_dev_attr_hwfifo_watermark_min.dev_attr.attr, + &iio_dev_attr_hwfifo_watermark_max.dev_attr.attr, &iio_dev_attr_hwfifo_watermark.dev_attr.attr, &iio_dev_attr_hwfifo_enabled.dev_attr.attr,NULL ,
drivers/iio/accel/adxl372.c +18 -5
@@ -998,17 +998,30 @@ static ssize_t adxl372_get_fifo_watermark(struct device *dev,return sprintf (buf,"%d\n" , st->watermark); } -static IIO_CONST_ATTR(hwfifo_watermark_min, "1"); -static IIO_CONST_ATTR(hwfifo_watermark_max, - __stringify(ADXL372_FIFO_SIZE)); +static ssize_t hwfifo_watermark_min_show (struct device *dev, +struct device_attribute *attr, +char *buf) +{ +return sysfs_emit (buf,"%s\n" ,"1" ); +} + +static ssize_t hwfifo_watermark_max_show (struct device *dev, +struct device_attribute *attr, +char *buf) +{ +return sysfs_emit (buf,"%s\n" ,__stringify (ADXL372_FIFO_SIZE )); +} + +static IIO_DEVICE_ATTR_RO(hwfifo_watermark_min, 0); +static IIO_DEVICE_ATTR_RO(hwfifo_watermark_max, 0); static IIO_DEVICE_ATTR(hwfifo_watermark, 0444, adxl372_get_fifo_watermark, NULL, 0); static IIO_DEVICE_ATTR(hwfifo_enabled, 0444, adxl372_get_fifo_enabled, NULL, 0);static const struct attribute *adxl372_fifo_attributes[] = { - &iio_const_attr_hwfifo_watermark_min.dev_attr.attr, - &iio_const_attr_hwfifo_watermark_max.dev_attr.attr, + &iio_dev_attr_hwfifo_watermark_min.dev_attr.attr, + &iio_dev_attr_hwfifo_watermark_max.dev_attr.attr, &iio_dev_attr_hwfifo_watermark.dev_attr.attr, &iio_dev_attr_hwfifo_enabled.dev_attr.attr,NULL ,
drivers/iio/light/tsl2583.c +1 -1
@@ -858,7 +858,7 @@ static int tsl2583_probe(struct i2c_client *clientp, TSL2583_POWER_OFF_DELAY_MS);pm_runtime_use_autosuspend (&clientp->dev); - ret =devm_iio_device_register (indio_dev->dev.parent, indio_dev); + ret =iio_device_register (indio_dev);if (ret) {dev_err (&clientp->dev,"%s: iio registration failed\n" , __func__);
drivers/iio/temperature/ltc2983.c +6 -7
@@ -1385,13 +1385,6 @@ static int ltc2983_setup(struct ltc2983_data *st, bool assign_iio)return ret; } - st->iio_chan =devm_kzalloc (&st->spi->dev, - st->iio_channels *sizeof (*st->iio_chan), -GFP_KERNEL ); - -if (!st->iio_chan) -return -ENOMEM ; - ret =regmap_update_bits (st->regmap,LTC2983_GLOBAL_CONFIG_REG ,LTC2983_NOTCH_FREQ_MASK ,LTC2983_NOTCH_FREQ (st->filter_notch_freq));
@@ -1514,6 +1507,12 @@ static int ltc2983_probe(struct spi_device *spi)gpiod_set_value_cansleep (gpio,0 ); } + st->iio_chan =devm_kzalloc (&spi->dev, + st->iio_channels *sizeof (*st->iio_chan), +GFP_KERNEL ); +if (!st->iio_chan) +return -ENOMEM ; + ret =ltc2983_setup (st, true);if (ret)return ret;
drivers/media/i2c/ar0521.c +5 -3
@@ -756,10 +756,12 @@ static int ar0521_power_on(struct device *dev)gpiod_set_value (sensor->reset_gpio,0 );usleep_range (4500 ,5000 );/* min 45000 clocks */ -for (cnt =0 ; cnt <ARRAY_SIZE (initial_regs); cnt++) -if (ar0521_write_regs (sensor, initial_regs[cnt].data, - initial_regs[cnt].count)) +for (cnt =0 ; cnt <ARRAY_SIZE (initial_regs); cnt++) { + ret =ar0521_write_regs (sensor, initial_regs[cnt].data, + initial_regs[cnt].count); +if (ret) goto off; + } ret = ar0521_write_reg(sensor, AR0521_REG_SERIAL_FORMAT, AR0521_REG_SERIAL_FORMAT_MIPI |
drivers/media/i2c/ov8865.c +6 -4
@@ -3034,11 +3034,13 @@ static int ov8865_probe(struct i2c_client *client) &rate);if (!ret && sensor->extclk) { ret =clk_set_rate (sensor->extclk, rate); -if (ret) -return dev_err_probe (dev, ret, -"failed to set clock rate\n" ); +if (ret) { +dev_err_probe (dev, ret,"failed to set clock rate\n" ); + goto error_endpoint; + } }else if (ret && !sensor->extclk) { -return dev_err_probe (dev, ret,"invalid clock config\n" ); +dev_err_probe (dev, ret,"invalid clock config\n" ); + goto error_endpoint; } sensor->extclk_rate = rate ? rate :clk_get_rate (sensor->extclk);
drivers/media/platform/amphion/vpu_v4l2.c +4 -7
@@ -603,6 +603,10 @@ static int vpu_v4l2_release(struct vpu_inst *inst) inst->workqueue =NULL ; } +if (inst->fh.m2m_ctx) { +v4l2_m2m_ctx_release (inst->fh.m2m_ctx); + inst->fh.m2m_ctx =NULL ; + }v4l2_ctrl_handler_free (&inst->ctrl_handler);mutex_destroy (&inst->lock);v4l2_fh_del (&inst->fh);
@@ -685,13 +689,6 @@ int vpu_v4l2_close(struct file *file)vpu_trace (vpu->dev,"tgid = %d, pid = %d, inst = %p\n" , inst->tgid, inst->pid, inst); -vpu_inst_lock (inst); -if (inst->fh.m2m_ctx) { -v4l2_m2m_ctx_release (inst->fh.m2m_ctx); - inst->fh.m2m_ctx =NULL ; - } -vpu_inst_unlock (inst); -call_void_vop (inst, release);vpu_inst_unregister (inst);vpu_inst_put (inst);
drivers/media/platform/sunxi/sun4i-csi/Kconfig +1 -1
@@ -3,7 +3,7 @@ config VIDEO_SUN4I_CSI tristate "Allwinner A10 CMOS Sensor Interface Support" depends on V4L_PLATFORM_DRIVERS - depends on VIDEO_DEV && COMMON_CLK && HAS_DMA + depends on VIDEO_DEV && COMMON_CLK && RESET_CONTROLLER && HAS_DMA depends on ARCH_SUNXI || COMPILE_TEST select MEDIA_CONTROLLER select VIDEO_V4L2_SUBDEV_API
drivers/media/platform/sunxi/sun6i-csi/Kconfig +1 -1
@@ -2,7 +2,7 @@ config VIDEO_SUN6I_CSI tristate "Allwinner V3s Camera Sensor Interface driver" depends on V4L_PLATFORM_DRIVERS - depends on VIDEO_DEV && COMMON_CLK && HAS_DMA + depends on VIDEO_DEV && COMMON_CLK && RESET_CONTROLLER && HAS_DMA depends on ARCH_SUNXI || COMPILE_TEST select MEDIA_CONTROLLER select VIDEO_V4L2_SUBDEV_API
drivers/media/platform/sunxi/sun6i-mipi-csi2/Kconfig +2 -2
@@ -3,11 +3,11 @@ config VIDEO_SUN6I_MIPI_CSI2 tristate "Allwinner A31 MIPI CSI-2 Controller Driver" depends on V4L_PLATFORM_DRIVERS && VIDEO_DEV depends on ARCH_SUNXI || COMPILE_TEST - depends on PM && COMMON_CLK + depends on PM && COMMON_CLK && RESET_CONTROLLER + depends on PHY_SUN6I_MIPI_DPHY select MEDIA_CONTROLLER select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE - select PHY_SUN6I_MIPI_DPHY select GENERIC_PHY_MIPI_DPHY select REGMAP_MMIO help
drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2.c +16 -4
@@ -661,7 +661,8 @@ sun6i_mipi_csi2_resources_setup(struct sun6i_mipi_csi2_device *csi2_dev, csi2_dev->reset =devm_reset_control_get_shared (dev,NULL );if (IS_ERR (csi2_dev->reset)) {dev_err (dev,"failed to get reset controller\n" ); -return PTR_ERR (csi2_dev->reset); + ret =PTR_ERR (csi2_dev->reset); + goto error_clock_rate_exclusive; }/* D-PHY */
@@ -669,13 +670,14 @@ sun6i_mipi_csi2_resources_setup(struct sun6i_mipi_csi2_device *csi2_dev, csi2_dev->dphy =devm_phy_get (dev,"dphy" );if (IS_ERR (csi2_dev->dphy)) {dev_err (dev,"failed to get MIPI D-PHY\n" ); -return PTR_ERR (csi2_dev->dphy); + ret =PTR_ERR (csi2_dev->dphy); + goto error_clock_rate_exclusive; } ret =phy_init (csi2_dev->dphy);if (ret) {dev_err (dev,"failed to initialize MIPI D-PHY\n" ); -return ret; + goto error_clock_rate_exclusive; }/* Runtime PM */
@@ -683,6 +685,11 @@ sun6i_mipi_csi2_resources_setup(struct sun6i_mipi_csi2_device *csi2_dev,pm_runtime_enable (dev);return 0 ; + +error_clock_rate_exclusive: +clk_rate_exclusive_put (csi2_dev->clock_mod); + +return ret; } static void
@@ -712,9 +719,14 @@ static int sun6i_mipi_csi2_probe(struct platform_device *platform_dev) ret =sun6i_mipi_csi2_bridge_setup (csi2_dev);if (ret) -return ret; + goto error_resources;return 0 ; + +error_resources: +sun6i_mipi_csi2_resources_cleanup (csi2_dev); + +return ret; }static int sun6i_mipi_csi2_remove (struct platform_device *platform_dev)
drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/Kconfig +1 -1
@@ -3,7 +3,7 @@ config VIDEO_SUN8I_A83T_MIPI_CSI2 tristate "Allwinner A83T MIPI CSI-2 Controller and D-PHY Driver" depends on V4L_PLATFORM_DRIVERS && VIDEO_DEV depends on ARCH_SUNXI || COMPILE_TEST - depends on PM && COMMON_CLK + depends on PM && COMMON_CLK && RESET_CONTROLLER select MEDIA_CONTROLLER select VIDEO_V4L2_SUBDEV_API select V4L2_FWNODE
drivers/media/platform/sunxi/sun8i-a83t-mipi-csi2/sun8i_a83t_mipi_csi2.c +18 -5
@@ -719,13 +719,15 @@ sun8i_a83t_mipi_csi2_resources_setup(struct sun8i_a83t_mipi_csi2_device *csi2_de csi2_dev->clock_mipi =devm_clk_get (dev,"mipi" );if (IS_ERR (csi2_dev->clock_mipi)) {dev_err (dev,"failed to acquire mipi clock\n" ); -return PTR_ERR (csi2_dev->clock_mipi); + ret =PTR_ERR (csi2_dev->clock_mipi); + goto error_clock_rate_exclusive; } csi2_dev->clock_misc =devm_clk_get (dev,"misc" );if (IS_ERR (csi2_dev->clock_misc)) {dev_err (dev,"failed to acquire misc clock\n" ); -return PTR_ERR (csi2_dev->clock_misc); + ret =PTR_ERR (csi2_dev->clock_misc); + goto error_clock_rate_exclusive; }/* Reset */
@@ -733,7 +735,8 @@ sun8i_a83t_mipi_csi2_resources_setup(struct sun8i_a83t_mipi_csi2_device *csi2_de csi2_dev->reset =devm_reset_control_get_shared (dev,NULL );if (IS_ERR (csi2_dev->reset)) {dev_err (dev,"failed to get reset controller\n" ); -return PTR_ERR (csi2_dev->reset); + ret =PTR_ERR (csi2_dev->reset); + goto error_clock_rate_exclusive; }/* D-PHY */
@@ -741,7 +744,7 @@ sun8i_a83t_mipi_csi2_resources_setup(struct sun8i_a83t_mipi_csi2_device *csi2_de ret =sun8i_a83t_dphy_register (csi2_dev);if (ret) {dev_err (dev,"failed to initialize MIPI D-PHY\n" ); -return ret; + goto error_clock_rate_exclusive; }/* Runtime PM */
@@ -749,6 +752,11 @@ sun8i_a83t_mipi_csi2_resources_setup(struct sun8i_a83t_mipi_csi2_device *csi2_depm_runtime_enable (dev);return 0 ; + +error_clock_rate_exclusive: +clk_rate_exclusive_put (csi2_dev->clock_mod); + +return ret; } static void
@@ -778,9 +786,14 @@ static int sun8i_a83t_mipi_csi2_probe(struct platform_device *platform_dev) ret =sun8i_a83t_mipi_csi2_bridge_setup (csi2_dev);if (ret) -return ret; + goto error_resources;return 0 ; + +error_resources: +sun8i_a83t_mipi_csi2_resources_cleanup (csi2_dev); + +return ret; }static int sun8i_a83t_mipi_csi2_remove (struct platform_device *platform_dev)
drivers/media/platform/sunxi/sun8i-di/Kconfig +1 -1
@@ -4,7 +4,7 @@ config VIDEO_SUN8I_DEINTERLACE depends on V4L_MEM2MEM_DRIVERS depends on VIDEO_DEV depends on ARCH_SUNXI || COMPILE_TEST - depends on COMMON_CLK && OF + depends on COMMON_CLK && RESET_CONTROLLER && OF depends on PM select VIDEOBUF2_DMA_CONTIG select V4L2_MEM2MEM_DEV
drivers/media/platform/sunxi/sun8i-rotate/Kconfig +1 -1
@@ -5,7 +5,7 @@ config VIDEO_SUN8I_ROTATE depends on V4L_MEM2MEM_DRIVERS depends on VIDEO_DEV depends on ARCH_SUNXI || COMPILE_TEST - depends on COMMON_CLK && OF + depends on COMMON_CLK && RESET_CONTROLLER && OF depends on PM select VIDEOBUF2_DMA_CONTIG select V4L2_MEM2MEM_DEV
drivers/media/test-drivers/vivid/vivid-core.c +34 -4
@@ -339,6 +339,28 @@ static int vidioc_g_fbuf(struct file *file, void *fh, struct v4l2_framebuffer *areturn vivid_vid_out_g_fbuf (file, fh, a); } +/* +* Only support the framebuffer of one of the vivid instances. +* Anything else is rejected. +*/ +bool vivid_validate_fb (const struct v4l2_framebuffer *a) +{ +struct vivid_dev *dev; +int i; + +for (i =0 ; i < n_devs; i++) { + dev = vivid_devs[i]; +if (!dev || !dev->video_pbase) +continue ; +if ((unsigned long )a->base == dev->video_pbase && + a->fmt.width <= dev->display_width && + a->fmt.height <= dev->display_height && + a->fmt.bytesperline <= dev->display_byte_stride) +return true; + } +return false; +} +static int vidioc_s_fbuf (struct file *file,void *fh,const struct v4l2_framebuffer *a) {struct video_device *vdev =video_devdata (file);
@@ -920,8 +942,12 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,/* how many inputs do we have and of what type? */ dev->num_inputs = num_inputs[inst]; -if (dev->num_inputs <1 ) - dev->num_inputs =1 ; +if (node_type &0x20007 ) { +if (dev->num_inputs <1 ) + dev->num_inputs =1 ; + }else { + dev->num_inputs =0 ; + }if (dev->num_inputs >=MAX_INPUTS ) dev->num_inputs =MAX_INPUTS ;for (i =0 ; i < dev->num_inputs; i++) {
@@ -938,8 +964,12 @@ static int vivid_detect_feature_set(struct vivid_dev *dev, int inst,/* how many outputs do we have and of what type? */ dev->num_outputs = num_outputs[inst]; -if (dev->num_outputs <1 ) - dev->num_outputs =1 ; +if (node_type &0x40300 ) { +if (dev->num_outputs <1 ) + dev->num_outputs =1 ; + }else { + dev->num_outputs =0 ; + }if (dev->num_outputs >=MAX_OUTPUTS ) dev->num_outputs =MAX_OUTPUTS ;for (i =0 ; i < dev->num_outputs; i++) {
drivers/media/test-drivers/vivid/vivid-core.h +2 -0
@@ -610,4 +610,6 @@ static inline bool vivid_is_hdmi_out(const struct vivid_dev *dev) return dev->output_type[dev->output] == HDMI; } +bool vivid_validate_fb (const struct v4l2_framebuffer *a); +#endif
drivers/media/test-drivers/vivid/vivid-vid-cap.c +21 -6
@@ -452,6 +452,12 @@ void vivid_update_format_cap(struct vivid_dev *dev, bool keep_controls)tpg_reset_source (&dev->tpg, dev->src_rect.width, dev->src_rect.height, dev->field_cap); dev->crop_cap = dev->src_rect; dev->crop_bounds_cap = dev->src_rect; +if (dev->bitmap_cap && + (dev->compose_cap.width != dev->crop_cap.width || + dev->compose_cap.height != dev->crop_cap.height)) { +vfree (dev->bitmap_cap); + dev->bitmap_cap =NULL ; + } dev->compose_cap = dev->crop_cap;if (V4L2_FIELD_HAS_T_OR_B (dev->field_cap)) dev->compose_cap.height /=2 ;
@@ -909,6 +915,8 @@ int vivid_vid_cap_s_selection(struct file *file, void *fh, struct v4l2_selectionstruct vivid_dev *dev =video_drvdata (file);struct v4l2_rect *crop = &dev->crop_cap;struct v4l2_rect *compose = &dev->compose_cap; +unsigned orig_compose_w = compose->width; +unsigned orig_compose_h = compose->height;unsigned factor =V4L2_FIELD_HAS_T_OR_B (dev->field_cap) ?2 :1 ;int ret;
@@ -1025,17 +1033,17 @@ int vivid_vid_cap_s_selection(struct file *file, void *fh, struct v4l2_selection s->r.height /= factor; }v4l2_rect_map_inside (&s->r, &dev->fmt_cap_rect); -if (dev->bitmap_cap && (compose->width != s->r.width || - compose->height != s->r.height)) { -vfree (dev->bitmap_cap); - dev->bitmap_cap =NULL ; - } *compose = s->r;break ;default :return -EINVAL ; } +if (dev->bitmap_cap && (compose->width != orig_compose_w || + compose->height != orig_compose_h)) { +vfree (dev->bitmap_cap); + dev->bitmap_cap =NULL ; + }tpg_s_crop_compose (&dev->tpg, crop, compose);return 0 ; }
@@ -1272,7 +1280,14 @@ int vivid_vid_cap_s_fbuf(struct file *file, void *fh,return -EINVAL ;if (a->fmt.bytesperline < (a->fmt.width * fmt->bit_depth[0 ]) /8 )return -EINVAL ; -if (a->fmt.height * a->fmt.bytesperline < a->fmt.sizeimage) +if (a->fmt.bytesperline > a->fmt.sizeimage / a->fmt.height) +return -EINVAL ; + +/* +* Only support the framebuffer of one of the vivid instances. +* Anything else is rejected. +*/ +if (!vivid_validate_fb (a))return -EINVAL ; dev->fb_vbase_cap =phys_to_virt ((unsigned long )a->base);
drivers/media/v4l2-core/v4l2-dv-timings.c +14 -0
@@ -161,6 +161,20 @@ bool v4l2_valid_dv_timings(const struct v4l2_dv_timings *t, (bt->interlaced && !(caps &V4L2_DV_BT_CAP_INTERLACED )) || (!bt->interlaced && !(caps & V4L2_DV_BT_CAP_PROGRESSIVE))) return false; + +/* sanity checks for the blanking timings */ +if (!bt->interlaced && + (bt->il_vbackporch || bt->il_vsync || bt->il_vfrontporch)) +return false; +if (bt->hfrontporch >2 * bt->width || + bt->hsync >1024 || bt->hbackporch >1024 ) +return false; +if (bt->vfrontporch >4096 || + bt->vsync >128 || bt->vbackporch >4096 ) +return false; +if (bt->interlaced && (bt->il_vfrontporch >4096 || + bt->il_vsync >128 || bt->il_vbackporch >4096 )) +return false;return fnc ==NULL ||fnc (t, fnc_handle); }EXPORT_SYMBOL_GPL (v4l2_valid_dv_timings);
drivers/mmc/core/block.c +26 -18
73 lines not on this page · raw message
drivers/mmc/core/queue.c +8 -0
@@ -48,6 +48,7 @@ static enum mmc_issue_type mmc_cqe_issue_type(struct mmc_host *host,case REQ_OP_DRV_OUT :case REQ_OP_DISCARD :case REQ_OP_SECURE_ERASE : +case REQ_OP_WRITE_ZEROES :return MMC_ISSUE_SYNC ;case REQ_OP_FLUSH :return mmc_cqe_can_dcmd (host) ?MMC_ISSUE_DCMD :MMC_ISSUE_SYNC ;
@@ -493,6 +494,13 @@ void mmc_cleanup_queue(struct mmc_queue *mq)if (blk_queue_quiesced (q))blk_mq_unquiesce_queue (q); +/* +* If the recovery completes the last (and only remaining) request in +* the queue, and the card has been removed, we could end up here with +* the recovery not quite finished yet, so cancel it. +*/ +cancel_work_sync (&mq->recovery_work); +blk_mq_free_tag_set (&mq->tag_set);/*
drivers/mmc/core/sdio_bus.c +2 -1
@@ -291,7 +291,8 @@ static void sdio_release_func(struct device *dev) {struct sdio_func *func =dev_to_sdio_func (dev); -sdio_free_func_cis (func); +if (!(func->card->quirks &MMC_QUIRK_NONSTD_SDIO )) +sdio_free_func_cis (func);kfree (func->info);kfree (func->tmpbuf);
drivers/mmc/host/Kconfig +2 -1
@@ -1074,9 +1074,10 @@ config MMC_SDHCI_OMAP config MMC_SDHCI_AM654 tristate "Support for the SDHCI Controller in TI's AM654 SOCs" - depends on MMC_SDHCI_PLTFM && OF && REGMAP_MMIO + depends on MMC_SDHCI_PLTFM && OF select MMC_SDHCI_IO_ACCESSORS select MMC_CQHCI + select REGMAP_MMIO help This selects the Secure Digital Host Controller Interface (SDHCI) support present in TI's AM654 SOCs. The controller supports
drivers/mmc/host/sdhci-esdhc-imx.c +8 -6
@@ -1660,6 +1660,10 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) host->mmc_host_ops.execute_tuning = usdhc_execute_tuning; } + err =sdhci_esdhc_imx_probe_dt (pdev, host, imx_data); +if (err) + goto disable_ahb_clk; +if (imx_data->socdata->flags &ESDHC_FLAG_MAN_TUNING ) sdhci_esdhc_ops.platform_execute_tuning = esdhc_executing_tuning;
@@ -1667,13 +1671,15 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)if (imx_data->socdata->flags &ESDHC_FLAG_ERR004536 ) host->quirks |=SDHCI_QUIRK_BROKEN_ADMA ; -if (imx_data->socdata->flags &ESDHC_FLAG_HS400 ) +if (host->caps &MMC_CAP_8_BIT_DATA && + imx_data->socdata->flags &ESDHC_FLAG_HS400 ) host->mmc->caps2 |=MMC_CAP2_HS400 ;if (imx_data->socdata->flags &ESDHC_FLAG_BROKEN_AUTO_CMD23 ) host->quirks2 |=SDHCI_QUIRK2_ACMD23_BROKEN ; -if (imx_data->socdata->flags &ESDHC_FLAG_HS400_ES ) { +if (host->caps &MMC_CAP_8_BIT_DATA && + imx_data->socdata->flags &ESDHC_FLAG_HS400_ES ) { host->mmc->caps2 |=MMC_CAP2_HS400_ES ; host->mmc_host_ops.hs400_enhanced_strobe = esdhc_hs400_enhanced_strobe;
@@ -1695,10 +1701,6 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev) goto disable_ahb_clk; } - err =sdhci_esdhc_imx_probe_dt (pdev, host, imx_data); -if (err) - goto disable_ahb_clk; -sdhci_esdhc_imx_hwinit (host); err =sdhci_add_host (host);
drivers/mmc/host/sdhci-pci-core.c +11 -3
@@ -893,6 +893,12 @@ static bool glk_broken_cqhci(struct sdhci_pci_slot *slot) dmi_match(DMI_SYS_VENDOR, "IRBIS")); } +static bool jsl_broken_hs400es (struct sdhci_pci_slot *slot) +{ +return slot->chip->pdev->device ==PCI_DEVICE_ID_INTEL_JSL_EMMC && +dmi_match (DMI_BIOS_VENDOR ,"ASUSTeK COMPUTER INC." ); +} +static int glk_emmc_probe_slot (struct sdhci_pci_slot *slot) {int ret =byt_emmc_probe_slot (slot);
@@ -901,9 +907,11 @@ static int glk_emmc_probe_slot(struct sdhci_pci_slot *slot) slot->host->mmc->caps2 |=MMC_CAP2_CQE ;if (slot->chip->pdev->device !=PCI_DEVICE_ID_INTEL_GLK_EMMC ) { - slot->host->mmc->caps2 |=MMC_CAP2_HS400_ES ; - slot->host->mmc_host_ops.hs400_enhanced_strobe = - intel_hs400_enhanced_strobe; +if (!jsl_broken_hs400es (slot)) { + slot->host->mmc->caps2 |=MMC_CAP2_HS400_ES ; + slot->host->mmc_host_ops.hs400_enhanced_strobe = + intel_hs400_enhanced_strobe; + } slot->host->mmc->caps2 |=MMC_CAP2_CQE_DCMD ; }
drivers/mtd/mtdcore.c +1 -1
@@ -562,7 +562,7 @@ static void mtd_check_of_node(struct mtd_info *mtd)if (!mtd_is_partition (mtd))return ; parent = mtd->parent; - parent_dn =dev_of_node (&parent->dev); + parent_dn =of_node_get (dev_of_node (&parent->dev));if (!parent_dn)return ;
drivers/mtd/nand/raw/intel-nand-controller.c +19 -16
@@ -108,7 +108,6 @@struct ebu_nand_cs {void __iomem *chipaddr; -dma_addr_t nand_pa;u32 addr_sel; };
@@ -596,13 +595,11 @@ static int ebu_nand_probe(struct platform_device *pdev) ebu_host->dev = dev;nand_controller_init (&ebu_host->controller); - res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"ebunand" ); - ebu_host->ebu =devm_ioremap_resource (&pdev->dev, res); + ebu_host->ebu =devm_platform_ioremap_resource_byname (pdev,"ebunand" );if (IS_ERR (ebu_host->ebu))return PTR_ERR (ebu_host->ebu); - res =platform_get_resource_byname (pdev,IORESOURCE_MEM ,"hsnand" ); - ebu_host->hsnand =devm_ioremap_resource (&pdev->dev, res); + ebu_host->hsnand =devm_platform_ioremap_resource_byname (pdev,"hsnand" );if (IS_ERR (ebu_host->hsnand))return PTR_ERR (ebu_host->hsnand);
@@ -614,31 +611,35 @@ static int ebu_nand_probe(struct platform_device *pdev) ret =of_property_read_u32 (chip_np,"reg" , &cs);if (ret) {dev_err (dev,"failed to get chip select: %d\n" , ret); -return ret; + goto err_of_node_put; }if (cs >=MAX_CS ) {dev_err (dev,"got invalid chip select: %d\n" , cs); -return -EINVAL ; + ret = -EINVAL ; + goto err_of_node_put; } ebu_host->cs_num = cs; resname =devm_kasprintf (dev,GFP_KERNEL ,"nand_cs%d" , cs); - res =platform_get_resource_byname (pdev,IORESOURCE_MEM , resname); - ebu_host->cs[cs].chipaddr =devm_ioremap_resource (dev, res); -if (IS_ERR (ebu_host->cs[cs].chipaddr)) -return PTR_ERR (ebu_host->cs[cs].chipaddr); - ebu_host->cs[cs].nand_pa = res->start; + ebu_host->cs[cs].chipaddr =devm_platform_ioremap_resource_byname (pdev, + resname); +if (IS_ERR (ebu_host->cs[cs].chipaddr)) { + ret =PTR_ERR (ebu_host->cs[cs].chipaddr); + goto err_of_node_put; + } ebu_host->clk =devm_clk_get (dev,NULL ); -if (IS_ERR (ebu_host->clk)) -return dev_err_probe (dev,PTR_ERR (ebu_host->clk), -"failed to get clock\n" ); +if (IS_ERR (ebu_host->clk)) { + ret =dev_err_probe (dev,PTR_ERR (ebu_host->clk), +"failed to get clock\n" ); + goto err_of_node_put; + } ret =clk_prepare_enable (ebu_host->clk);if (ret) {dev_err (dev,"failed to enable clock: %d\n" , ret); -return ret; + goto err_of_node_put; } ebu_host->clk_rate =clk_get_rate (ebu_host->clk);
@@ -703,6 +704,8 @@ static int ebu_nand_probe(struct platform_device *pdev)ebu_dma_cleanup (ebu_host); err_disable_unprepare_clk:clk_disable_unprepare (ebu_host->clk); +err_of_node_put: +of_node_put (chip_np);return ret; }
drivers/mtd/nand/raw/marvell_nand.c +1 -1
@@ -2672,7 +2672,7 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc, chip->controller = &nfc->controller;nand_set_flash_node (chip, np); -if (!of_property_read_bool (np,"marvell,nand-keep-config" )) +if (of_property_read_bool (np,"marvell,nand-keep-config" )) chip->options |=NAND_KEEP_TIMINGS ; mtd =nand_to_mtd (chip);
drivers/mtd/nand/raw/tegra_nand.c +3 -1
@@ -1181,7 +1181,7 @@ static int tegra_nand_probe(struct platform_device *pdev)pm_runtime_enable (&pdev->dev); err =pm_runtime_resume_and_get (&pdev->dev);if (err) -return err; + goto err_dis_pm; err =reset_control_reset (rst);if (err) {
@@ -1215,6 +1215,8 @@ static int tegra_nand_probe(struct platform_device *pdev) err_put_pm:pm_runtime_put_sync_suspend (ctrl->dev);pm_runtime_force_suspend (ctrl->dev); +err_dis_pm: +pm_runtime_disable (&pdev->dev);return err; }
drivers/mtd/parsers/bcm47xxpart.c +2 -2
@@ -233,11 +233,11 @@ static int bcm47xxpart_parse(struct mtd_info *master, }/* Read middle of the block */ - err =mtd_read (master, offset +0x8000 ,0x4 , &bytes_read, + err =mtd_read (master, offset + (blocksize /2 ),0x4 , &bytes_read, (uint8_t *)buf);if (err && !mtd_is_bitflip (err)) {pr_err ("mtd_read error while parsing (offset: 0x%X): %d\n" , - offset +0x8000 , err); + offset + (blocksize /2 ), err);continue ; }
drivers/mtd/spi-nor/core.c +3 -1
@@ -2724,7 +2724,9 @@ static int spi_nor_init(struct spi_nor *nor)*/ WARN_ONCE (nor->flags &SNOR_F_BROKEN_RESET ,"enabling reset hack; may not recover from unexpected reboots\n" ); -return nor->params->set_4byte_addr_mode (nor, true); + err = nor->params->set_4byte_addr_mode (nor, true); +if (err && err != -ENOTSUPP ) +return err; }return 0 ;
drivers/net/can/mscan/mpc5xxx_can.c +5 -3
@@ -322,14 +322,14 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev) &mscan_clksrc);if (!priv->can.clock.freq) {dev_err (&ofdev->dev,"couldn't get MSCAN clock properties\n" ); - goto exit_free_mscan; + goto exit_put_clock; } err =register_mscandev (dev, mscan_clksrc);if (err) {dev_err (&ofdev->dev,"registering %s failed (err=%d)\n" ,DRV_NAME , err); - goto exit_free_mscan; + goto exit_put_clock; } dev_info(&ofdev->dev, "MSCAN at 0x%p, irq %d, clock %d Hz\n",
@@ -337,7 +337,9 @@ static int mpc5xxx_can_probe(struct platform_device *ofdev)return 0 ; -exit_free_mscan: +exit_put_clock: +if (data->put_clock) + data->put_clock (ofdev);free_candev (dev); exit_dispose_irq:irq_dispose_mapping (irq);
drivers/net/can/rcar/rcar_canfd.c +11 -13
@@ -1157,11 +1157,13 @@ static void rcar_canfd_handle_global_receive(struct rcar_canfd_global *gpriv, u3 {struct rcar_canfd_channel *priv = gpriv->ch[ch];u32 ridx = ch +RCANFD_RFFIFO_IDX ; -u32 sts; +u32 sts, cc;/* Handle Rx interrupts */ sts =rcar_canfd_read (priv->base,RCANFD_RFSTS (gpriv, ridx)); -if (likely (sts &RCANFD_RFSTS_RFIF )) { + cc =rcar_canfd_read (priv->base,RCANFD_RFCC (gpriv, ridx)); +if (likely (sts &RCANFD_RFSTS_RFIF && + cc &RCANFD_RFCC_RFIE )) {if (napi_schedule_prep (&priv->napi)) {/* Disable Rx FIFO interrupts */ rcar_canfd_clear_bit(priv->base,
@@ -1244,11 +1246,9 @@ static void rcar_canfd_handle_channel_tx(struct rcar_canfd_global *gpriv, u32 chstatic irqreturn_t rcar_canfd_channel_tx_interrupt (int irq,void *dev_id) { -struct rcar_canfd_global *gpriv = dev_id; -u32 ch; +struct rcar_canfd_channel *priv = dev_id; -for_each_set_bit (ch, &gpriv->channels_mask, gpriv->max_channels) -rcar_canfd_handle_channel_tx (gpriv, ch); +rcar_canfd_handle_channel_tx (priv->gpriv, priv->channel);return IRQ_HANDLED ; }
@@ -1276,11 +1276,9 @@ static void rcar_canfd_handle_channel_err(struct rcar_canfd_global *gpriv, u32 cstatic irqreturn_t rcar_canfd_channel_err_interrupt (int irq,void *dev_id) { -struct rcar_canfd_global *gpriv = dev_id; -u32 ch; +struct rcar_canfd_channel *priv = dev_id; -for_each_set_bit (ch, &gpriv->channels_mask, gpriv->max_channels) -rcar_canfd_handle_channel_err (gpriv, ch); +rcar_canfd_handle_channel_err (priv->gpriv, priv->channel);return IRQ_HANDLED ; }
@@ -1721,6 +1719,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch, priv->ndev = ndev; priv->base = gpriv->base; priv->channel = ch; + priv->gpriv = gpriv; priv->can.clock.freq = fcan_freq;dev_info (&pdev->dev,"can_clk rate is %u\n" , priv->can.clock.freq);
@@ -1749,7 +1748,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch, } err =devm_request_irq (&pdev->dev, err_irq, rcar_canfd_channel_err_interrupt,0 , - irq_name, gpriv); + irq_name, priv);if (err) {dev_err (&pdev->dev,"devm_request_irq CH Err(%d) failed, error %d\n" , err_irq, err);
@@ -1763,7 +1762,7 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch, } err =devm_request_irq (&pdev->dev, tx_irq, rcar_canfd_channel_tx_interrupt,0 , - irq_name, gpriv); + irq_name, priv);if (err) {dev_err (&pdev->dev,"devm_request_irq Tx (%d) failed, error %d\n" , tx_irq, err);
@@ -1789,7 +1788,6 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch, priv->can.do_set_mode = rcar_canfd_do_set_mode; priv->can.do_get_berr_counter = rcar_canfd_get_berr_counter; - priv->gpriv = gpriv;SET_NETDEV_DEV (ndev, &pdev->dev); netif_napi_add_weight(ndev, &priv->napi, rcar_canfd_rx_poll,
drivers/net/can/spi/mcp251x.c +4 -1
@@ -1415,11 +1415,14 @@ static int mcp251x_can_probe(struct spi_device *spi) ret =mcp251x_gpio_setup (priv);if (ret) - goto error_probe; + goto out_unregister_candev;netdev_info (net,"MCP%x successfully initialized.\n" , priv->model);return 0 ; +out_unregister_candev: +unregister_candev (net); + error_probe:destroy_workqueue (priv->wq); priv->wq =NULL ;
drivers/net/can/usb/kvaser_usb/kvaser_usb_hydra.c +2 -2
@@ -1875,7 +1875,7 @@ static int kvaser_usb_hydra_start_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->start_comp); +reinit_completion (&priv->start_comp); err =kvaser_usb_hydra_send_simple_cmd (priv->dev,CMD_START_CHIP_REQ , priv->channel);
@@ -1893,7 +1893,7 @@ static int kvaser_usb_hydra_stop_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->stop_comp); +reinit_completion (&priv->stop_comp);/* Make sure we do not report invalid BUS_OFF from CMD_CHIP_STATE_EVENT * see comment in kvaser_usb_hydra_update_state()
drivers/net/can/usb/kvaser_usb/kvaser_usb_leaf.c +2 -2
@@ -1320,7 +1320,7 @@ static int kvaser_usb_leaf_start_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->start_comp); +reinit_completion (&priv->start_comp); err =kvaser_usb_leaf_send_simple_cmd (priv->dev,CMD_START_CHIP , priv->channel);
@@ -1338,7 +1338,7 @@ static int kvaser_usb_leaf_stop_chip(struct kvaser_usb_net_priv *priv) {int err; -init_completion (&priv->stop_comp); +reinit_completion (&priv->stop_comp); err =kvaser_usb_leaf_send_simple_cmd (priv->dev,CMD_STOP_CHIP , priv->channel);
drivers/net/ethernet/amd/xgbe/xgbe-pci.c +5 -0
@@ -285,6 +285,9 @@ static int xgbe_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)/* Yellow Carp devices do not need cdr workaround */ pdata->vdata->an_cdr_workaround =0 ; + +/* Yellow Carp devices do not need rrc */ + pdata->vdata->enable_rrc =0 ; }else { pdata->xpcs_window_def_reg =PCS_V2_WINDOW_DEF ; pdata->xpcs_window_sel_reg =PCS_V2_WINDOW_SELECT ;
@@ -483,6 +486,7 @@ static struct xgbe_version_data xgbe_v2a = { .tx_desc_prefetch = 5, .rx_desc_prefetch = 5, .an_cdr_workaround = 1, + .enable_rrc = 1, };static struct xgbe_version_data xgbe_v2b = {
@@ -498,6 +502,7 @@ static struct xgbe_version_data xgbe_v2b = { .tx_desc_prefetch = 5, .rx_desc_prefetch = 5, .an_cdr_workaround = 1, + .enable_rrc = 1, };static const struct pci_device_id xgbe_pci_table[] = {
drivers/net/ethernet/amd/xgbe/xgbe-phy-v2.c +13 -6
@@ -239,6 +239,7 @@ enum xgbe_sfp_speed {#define XGBE_SFP_BASE_BR_1GBE_MAX 0x0d#define XGBE_SFP_BASE_BR_10GBE_MIN 0x64#define XGBE_SFP_BASE_BR_10GBE_MAX 0x68 +#define XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX 0x78#define XGBE_SFP_BASE_CU_CABLE_LEN 18
@@ -284,6 +285,8 @@ struct xgbe_sfp_eeprom {#define XGBE_BEL_FUSE_VENDOR "BEL-FUSE "#define XGBE_BEL_FUSE_PARTNO "1GBT-SFP06 " +#define XGBE_MOLEX_VENDOR "Molex Inc. " +struct xgbe_sfp_ascii {union {char vendor[XGBE_SFP_BASE_VENDOR_NAME_LEN +1 ];
@@ -834,7 +837,11 @@ static bool xgbe_phy_sfp_bit_rate(struct xgbe_sfp_eeprom *sfp_eeprom,break ;case XGBE_SFP_SPEED_10000 : min =XGBE_SFP_BASE_BR_10GBE_MIN ; - max =XGBE_SFP_BASE_BR_10GBE_MAX ; +if (memcmp (&sfp_eeprom->base[XGBE_SFP_BASE_VENDOR_NAME ], +XGBE_MOLEX_VENDOR ,XGBE_SFP_BASE_VENDOR_NAME_LEN ) ==0 ) + max =XGBE_MOLEX_SFP_BASE_BR_10GBE_MAX ; +else + max =XGBE_SFP_BASE_BR_10GBE_MAX ;break ;default :return false;
@@ -1151,7 +1158,10 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata) }/* Determine the type of SFP */ -if (sfp_base[XGBE_SFP_BASE_10GBE_CC ] &XGBE_SFP_BASE_10GBE_CC_SR ) +if (phy_data->sfp_cable ==XGBE_SFP_CABLE_PASSIVE && +xgbe_phy_sfp_bit_rate (sfp_eeprom,XGBE_SFP_SPEED_10000 )) + phy_data->sfp_base =XGBE_SFP_BASE_10000_CR ; +else if (sfp_base[XGBE_SFP_BASE_10GBE_CC ] &XGBE_SFP_BASE_10GBE_CC_SR ) phy_data->sfp_base =XGBE_SFP_BASE_10000_SR ;else if (sfp_base[XGBE_SFP_BASE_10GBE_CC ] &XGBE_SFP_BASE_10GBE_CC_LR ) phy_data->sfp_base =XGBE_SFP_BASE_10000_LR ;
@@ -1167,9 +1177,6 @@ static void xgbe_phy_sfp_parse_eeprom(struct xgbe_prv_data *pdata) phy_data->sfp_base =XGBE_SFP_BASE_1000_CX ; else if (sfp_base[XGBE_SFP_BASE_1GBE_CC] & XGBE_SFP_BASE_1GBE_CC_T) phy_data->sfp_base = XGBE_SFP_BASE_1000_T; - else if ((phy_data->sfp_cable == XGBE_SFP_CABLE_PASSIVE) && - xgbe_phy_sfp_bit_rate(sfp_eeprom, XGBE_SFP_SPEED_10000)) - phy_data->sfp_base = XGBE_SFP_BASE_10000_CR;switch (phy_data->sfp_base) {case XGBE_SFP_BASE_1000_T :
@@ -2640,7 +2647,7 @@ static int xgbe_phy_link_status(struct xgbe_prv_data *pdata, int *an_restart) }/* No link, attempt a receiver reset cycle */ -if (phy_data->rrc_count++ >XGBE_RRC_FREQUENCY ) { +if (pdata->vdata->enable_rrc && phy_data->rrc_count++ >XGBE_RRC_FREQUENCY ) { phy_data->rrc_count =0 ;xgbe_phy_rrc (pdata); }
drivers/net/ethernet/amd/xgbe/xgbe.h +1 -0
@@ -1013,6 +1013,7 @@ struct xgbe_version_data {unsigned int tx_desc_prefetch;unsigned int rx_desc_prefetch;unsigned int an_cdr_workaround; +unsigned int enable_rrc; };struct xgbe_prv_data {
drivers/net/ethernet/aquantia/atlantic/aq_macsec.c +72 -24
171 lines not on this page · raw message
drivers/net/ethernet/aquantia/atlantic/aq_nic.h +2 -0
@@ -157,6 +157,8 @@ struct aq_nic_s {struct mutex fwreq_mutex;#if IS_ENABLED (CONFIG_MACSEC )struct aq_macsec_cfg *macsec_cfg; +/* mutex to protect data in macsec_cfg */ +struct mutex macsec_mutex;#endif /* PTP support */ struct aq_ptp_s *aq_ptp;
drivers/net/ethernet/broadcom/bcm4908_enet.c +8 -4
@@ -561,8 +561,6 @@ static int bcm4908_enet_start_xmit(struct sk_buff *skb, struct net_device *netdeif (++ring->write_idx == ring->length -1 ) ring->write_idx =0 ; - enet->netdev->stats.tx_bytes += skb->len;
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/broadcom/bcmsysport.c +3 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/cadence/macb_main.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/enetc/enetc.c +5 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/freescale/fec_main.c +44 -2
46 lines not on this page · raw message
drivers/net/ethernet/huawei/hinic/hinic_debugfs.c +12 -6
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/huawei/hinic/hinic_hw_cmdq.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/huawei/hinic/hinic_hw_dev.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/huawei/hinic/hinic_sriov.c +0 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/ibm/ehea/ehea_main.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_ethtool.c +60 -40
100 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_type.h +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c +32 -11
43 lines not on this page · raw message
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h +1 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/cmd.c +5 -5
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h +9 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/tc_priv.h +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c +0 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c +71 -3
74 lines not on this page · raw message
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c +17 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lib/aso.c +7 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c +3 -3
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/main.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/mellanox/mlx5/core/steering/dr_rule.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/microchip/lan966x/lan966x_ethtool.c +9 -1
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/microchip/lan966x/lan966x_fdma.c +3 -21
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/socionext/netsec.c +2 -0
Lines of this file are not shown. View the raw message.
drivers/net/ethernet/socionext/sni_ave.c +6 -0
Lines of this file are not shown. View the raw message.
drivers/staging/media/atomisp/pci/sh_css_params.c +2 -2
Lines of this file are not shown. View the raw message.
drivers/staging/media/sunxi/cedrus/Kconfig +1 -0
Lines of this file are not shown. View the raw message.
drivers/usb/dwc3/core.c +48 -1
49 lines not on this page · raw message
drivers/usb/dwc3/drd.c +0 -50
50 lines not on this page · raw message
drivers/usb/gadget/function/uvc_queue.c +5 -3
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/function/uvc_video.c +18 -7
Lines of this file are not shown. View the raw message.
drivers/usb/gadget/udc/aspeed-vhub/dev.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/usb/host/xhci-pci.c +15 -29
44 lines not on this page · raw message
drivers/usb/typec/ucsi/ucsi.c +29 -13
42 lines not on this page · raw message
drivers/video/fbdev/smscufx.c +30 -25
55 lines not on this page · raw message
kernel/events/core.c +113 -38
151 lines not on this page · raw message
mm/kmemleak.c +42 -19
61 lines not on this page · raw message
sound/soc/intel/common/soc-acpi-intel-rpl-match.c new file +51 -0
51 lines not on this page · raw message
sound/soc/sof/intel/pci-tgl.c +88 -4
92 lines not on this page · raw message
tools/perf/pmu-events/arch/arm64/hisilicon/hip08/metrics.json +3 -3
Lines of this file are not shown. View the raw message.
tools/perf/pmu-events/arch/powerpc/power10/nest_metrics.json +36 -36
72 lines not on this page · raw message
tools/perf/pmu-events/arch/s390/cf_z16/pai.json deleted +0 -1101
1,101 lines not on this page · raw message
tools/perf/pmu-events/arch/s390/cf_z16/pai_crypto.json new file +1101 -0
1,101 lines not on this page · raw message
tools/testing/selftests/drivers/net/bonding/Makefile +3 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/bonding/dev_addr_lists.sh +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/bonding/net_forwarding_lib.sh new file +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/dsa/test_bridge_fdb_stress.sh +2 -2
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/team/Makefile +4 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/team/dev_addr_lists.sh +3 -3
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/team/lag_lib.sh new file +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/drivers/net/team/net_forwarding_lib.sh new file +1 -0
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/test.d/dynevent/test_duplicates.tc +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/ftrace/test.d/trigger/inter-event/trigger-synthetic-eprobe.tc +1 -1
Lines of this file are not shown. View the raw message.
tools/testing/selftests/kvm/memslot_modification_stress_test.c +1 -1
Lines of this file are not shown. View the raw message.
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.