Linux 7.0.9
Greg Kroah-Hartman
maintainerI'm announcing the release of the 7.0.9 kernel.
All users of the 7.0 kernel series must upgrade.
The updated 7.0.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-7.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/media/rockchip,vdec.yaml | 22 Makefile | 2 arch/arm64/boot/dts/broadcom/bcm2712-d-rpi-5-b.dts | 14 arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi | 7 arch/arm64/boot/dts/freescale/fsl-lx2160a-clearfog-itx.dtsi | 2 arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi | 24 arch/arm64/boot/dts/freescale/fsl-lx2162a-clearfog.dts | 2 arch/arm64/boot/dts/freescale/fsl-lx2162a-sr-som.dtsi | 7 arch/arm64/boot/dts/freescale/imx95-toradex-smarc.dtsi | 1 arch/arm64/boot/dts/qcom/kodiak.dtsi | 2 arch/arm64/boot/dts/qcom/lemans.dtsi | 8 arch/arm64/boot/dts/ti/k3-am62a7-sk.dts | 2 arch/arm64/boot/dts/ti/k3-am69-aquila-clover.dts | 2 arch/arm64/boot/dts/ti/k3-am69-aquila-dev.dts | 2 drivers/edac/versalnet_edac.c | 170 +++--- drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 13 drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h | 11 drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 3 drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c | 12 drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c | 31 + drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c | 3 drivers/gpu/drm/amd/amdgpu/mes_userqueue.c | 95 +-- drivers/gpu/drm/amd/amdgpu/nbif_v6_3_1.c | 9 drivers/gpu/drm/amd/amdgpu/psp_v15_0.c | 1 drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c | 4 drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c | 25 drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c | 46 + drivers/gpu/drm/amd/amdkfd/kfd_chardev.c | 33 + drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c | 6 drivers/gpu/drm/amd/amdkfd/kfd_priv.h | 10 drivers/gpu/drm/amd/amdkfd/kfd_svm.c | 4 drivers/gpu/drm/amd/amdkfd/kfd_topology.c | 11 drivers/gpu/drm/amd/display/dc/core/dc_resource.c | 2 drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_standalone_libraries/lib_float_math.c | 2 drivers/gpu/drm/amd/pm/powerplay/smumgr/ci_smumgr.c | 13 drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c | 10 drivers/gpu/drm/bridge/tda998x_drv.c | 2 drivers/gpu/drm/drm_atomic.c | 7 drivers/gpu/drm/drm_colorop.c | 28 - drivers/gpu/drm/drm_gem.c | 25 drivers/gpu/drm/drm_gem_framebuffer_helper.c | 4 drivers/gpu/drm/drm_gpusvm.c | 3 drivers/gpu/drm/exynos/exynos_drm_mic.c | 8 drivers/gpu/drm/i915/display/intel_psr.c | 2 drivers/gpu/drm/imx/ipuv3/parallel-display.c | 15 drivers/gpu/drm/msm/hdmi/hdmi_bridge.c | 4 drivers/gpu/drm/msm/msm_drv.c | 7 drivers/gpu/drm/msm/msm_gpu.c | 42 - drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c | 2 drivers/gpu/drm/panel/panel-himax-hx83102.c | 2 drivers/gpu/drm/radeon/ci_dpm.c | 9 drivers/gpu/drm/sti/sti_hda.c | 8 drivers/gpu/drm/tiny/appletbdrm.c | 4 drivers/gpu/drm/udl/udl_main.c | 3 drivers/gpu/drm/udl/udl_modeset.c | 5 drivers/gpu/drm/v3d/v3d_submit.c | 5 drivers/gpu/drm/xe/display/xe_hdcp_gsc.c | 12 drivers/gpu/drm/xe/xe_bo.c | 8 drivers/gpu/drm/xe/xe_dma_buf.c | 23 drivers/gpu/drm/xe/xe_vm_madvise.c | 47 + drivers/hid/hid-appletb-kbd.c | 56 +- drivers/hid/hid-playstation.c | 6 drivers/hid/usbhid/hid-pidff.c | 7 drivers/media/common/videobuf2/videobuf2-dma-sg.c | 1 drivers/media/dvb-frontends/dib8000.c | 4 drivers/media/i2c/imx283.c | 15 drivers/media/i2c/imx412.c | 2 drivers/media/i2c/ov08d10.c | 21 drivers/media/i2c/ov5647.c | 12 drivers/media/i2c/ov8856.c | 10 drivers/media/pci/intel/ipu-bridge.c | 14 drivers/media/pci/intel/ipu6/ipu6.c | 2 drivers/media/pci/saa7164/saa7164-core.c | 47 + drivers/media/pci/zoran/zoran_card.c | 2 drivers/media/platform/arm/mali-c55/mali-c55-common.h | 2 drivers/media/platform/arm/mali-c55/mali-c55-core.c | 35 - drivers/media/platform/arm/mali-c55/mali-c55-isp.c | 37 - drivers/media/platform/arm/mali-c55/mali-c55-params.c | 122 ++++ drivers/media/platform/arm/mali-c55/mali-c55-registers.h | 4 drivers/media/platform/chips-media/wave5/wave5-vdi.c | 1 drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c | 14 drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c | 2 drivers/media/platform/qcom/camss/camss-csid-gen3.c | 6 drivers/media/platform/qcom/camss/camss.c | 80 +-- drivers/media/platform/qcom/iris/Kconfig | 2 drivers/media/platform/qcom/iris/iris_buffer.c | 6 drivers/media/platform/qcom/iris/iris_core.c | 4 drivers/media/platform/qcom/iris/iris_hfi_common.c | 4 drivers/media/platform/qcom/iris/iris_hfi_queue.c | 2 drivers/media/platform/qcom/iris/iris_vdec.c | 6 drivers/media/platform/qcom/iris/iris_vdec.h | 1 drivers/media/platform/qcom/iris/iris_venc.c | 6 drivers/media/platform/qcom/iris/iris_venc.h | 1 drivers/media/platform/qcom/iris/iris_vidc.c | 6 drivers/media/platform/qcom/iris/iris_vpu2.c | 1 drivers/media/platform/qcom/iris/iris_vpu3x.c | 9 drivers/media/platform/qcom/iris/iris_vpu4x.c | 24 drivers/media/platform/qcom/iris/iris_vpu_buffer.h | 2 drivers/media/platform/qcom/iris/iris_vpu_common.c | 16 drivers/media/platform/qcom/iris/iris_vpu_common.h | 3 drivers/media/platform/qcom/venus/Kconfig | 2 drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 22 drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c | 12 drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c | 35 - drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h | 8 drivers/media/platform/renesas/vsp1/vsp1_drv.c | 8 drivers/media/platform/rockchip/rkcif/rkcif-interface.c | 3 drivers/media/platform/rockchip/rkcif/rkcif-stream.c | 2 drivers/media/platform/ti/omap3isp/ispvideo.c | 1 drivers/media/platform/ti/vpe/vip.c | 1 drivers/media/rc/streamzap.c | 12 drivers/media/rc/xbox_remote.c | 9 drivers/media/usb/uvc/uvc_queue.c | 3 drivers/platform/x86/hp/hp-wmi.c | 5 drivers/regulator/act8945a-regulator.c | 3 drivers/regulator/bd9571mwv-regulator.c | 3 drivers/regulator/bq257xx-regulator.c | 3 drivers/regulator/max77650-regulator.c | 2 drivers/regulator/mt6357-regulator.c | 2 drivers/regulator/rk808-regulator.c | 3 drivers/regulator/s2dos05-regulator.c | 2 drivers/spi/spi-amlogic-spisg.c | 4 drivers/spi/spi-aspeed-smc.c | 9 drivers/spi/spi-at91-usart.c | 8 drivers/spi/spi-atmel.c | 8 drivers/spi/spi-bcm63xx.c | 8 drivers/spi/spi-bcmbca-hsspi.c | 4 drivers/spi/spi-cadence-quadspi.c | 40 - drivers/spi/spi-cadence.c | 21 drivers/spi/spi-cavium-octeon.c | 8 drivers/spi/spi-cavium-thunderx.c | 8 drivers/spi/spi-ch341.c | 7 drivers/spi/spi-coldfire-qspi.c | 10 drivers/spi/spi-dln2.c | 8 drivers/spi/spi-ep93xx.c | 8 drivers/spi/spi-fsl-espi.c | 10 drivers/spi/spi-fsl-spi.c | 14 drivers/spi/spi-img-spfi.c | 8 drivers/spi/spi-imx.c | 1 drivers/spi/spi-lantiq-ssc.c | 8 drivers/spi/spi-meson-spicc.c | 8 drivers/spi/spi-mpc52xx.c | 9 drivers/spi/spi-mpfs.c | 4 drivers/spi/spi-mt65xx.c | 4 drivers/spi/spi-mtk-nor.c | 4 drivers/spi/spi-mxic.c | 3 drivers/spi/spi-mxs.c | 8 drivers/spi/spi-npcm-pspi.c | 8 drivers/spi/spi-omap2-mcspi.c | 8 drivers/spi/spi-orion.c | 16 drivers/spi/spi-pic32-sqi.c | 8 drivers/spi/spi-pic32.c | 11 drivers/spi/spi-pl022.c | 8 drivers/spi/spi-qup.c | 8 drivers/spi/spi-rspi.c | 10 drivers/spi/spi-s3c64xx.c | 4 drivers/spi/spi-sh-hspi.c | 10 drivers/spi/spi-sh-msiof.c | 10 drivers/spi/spi-slave-mt27xx.c | 10 drivers/spi/spi-sprd.c | 8 drivers/spi/spi-st-ssc4.c | 8 drivers/spi/spi-uniphier.c | 24 drivers/staging/media/atomisp/pci/atomisp_ioctl.c | 4 drivers/staging/media/imx/imx-media-csi.c | 40 - drivers/usb/typec/tcpm/tcpm.c | 2 include/linux/cgroup-defs.h | 4 include/linux/mm.h | 2 io_uring/zcrx.c | 17 kernel/cgroup/cgroup.c | 254 ++++------ kernel/liveupdate/kexec_handover.c | 13 kernel/sched/ext.c | 12 mm/util.c | 51 +- mm/vma.c | 3 net/batman-adv/bat_iv_ogm.c | 85 ++- net/batman-adv/bridge_loop_avoidance.c | 11 net/batman-adv/main.c | 1 net/batman-adv/tp_meter.c | 116 +++- net/batman-adv/tp_meter.h | 1 net/batman-adv/types.h | 4 net/sctp/socket.c | 9 net/vmw_vsock/af_vsock.c | 6 net/vmw_vsock/virtio_transport_common.c | 55 -- tools/perf/pmu-events/Build | 4 tools/testing/vma/include/dup.h | 41 - tools/testing/vma/include/stubs.h | 3 187 files changed, 1815 insertions(+), 937 deletions(-)
Abdun Nihaal (1):
media: pci: zoran: fix potential memory leak in zoran_probe()
Alex Deucher (3):
drm/radeon: add missing revision check for CI drm/amdgpu/pm: add missing revision check for CI drm/amdgpu/pm: align Hawaii mclk workaround with radeon
Alexander Koskovich (1):
media: i2c: ov8856: free control handler on error in ov8856_init_controls()
Alysa Liu (2):
drm/amdkfd: Add upper bound check for num_of_nodes drm/amdkfd: validate SVM ioctl nattr against buffer size
Amir Shetaia (1):
drm/amdkfd: Clear VRAM on allocation to prevent stale data exposure
Amit Sunil Dhamne (1):
usb: typec: tcpm: reset internal port states on soft reset AMS
Andrea Righi (1):
sched_ext: Use HK_TYPE_DOMAIN_BOOT to detect isolcpus= domain isolation
Anna Maniscalco (1):
drm/msm: always recover the gpu
Arnd Bergmann (2):
media: iris: fix QCOM_MDT_LOADER dependency
media: venus: fix QCOM_MDT_LOADER dependency
Ashutosh Desai (2):
drm/v3d: Reject empty multisync extension to prevent infinite loop drm/gem: Fix inconsistent plane dimension calculation in drm_gem_fb_init_with_funcs()
Barnabás Pőcze (3):
media: rzv2h-ivc: Write AXIRX_PIXFMT once
media: rzv2h-ivc: Fix FM_STOP register write
media: rzv2h-ivc: Fix concurrent buffer list access
Ben Morris (1):
sctp: revalidate list cursor after sctp_sendmsg_to_asoc() in SCTP_SENDALL
Benjamin Cheng (7):
drm/amdgpu: Add bounds checking to ib_{get,set}_value drm/amdgpu/vcn4: Prevent OOB reads when parsing IB drm/amdgpu/vce: Prevent partial address patches drm/amdgpu/vcn4: Prevent OOB reads when parsing dec msg drm/amdgpu/vcn3: Prevent OOB reads when parsing dec msg drm/amdgpu/vcn3: Avoid overflow on msg bound check drm/amdgpu/vcn4: Avoid overflow on msg bound check
Breno Leitao (1):
kho: fix error handling in kho_add_subtree()
Chaitanya Kumar Borah (2):
drm/colorop: Preserve bypass value in duplicate_state() drm/atomic: Add affected colorops with affected planes
Chenglei Xie (1):
drm/amdgpu: gate VM CPU HDP flush on reset lock
Cristian Ciocaltea (2):
media: dt-bindings: rockchip,vdec: Add alternative reg-names order for RK35{76,88}
media: dt-bindings: rockchip,vdec: Mark reg-names required for RK35{76,88}Dang Huynh (1):
media: rockchip: rkcif: Add missing MUST_CONNECT flag to pads
Daniel Scally (1):
media: mali-c55: Fix Iridix bypass macros
Dikshita Agarwal (1):
media: iris: Fix use-after-free in iris_release_internal_buffers()
Dmitry Baryshkov (1):
media: qcom: iris: increase H265D_MAX_SLICE to fix H.265 decoding on SC7280
Dudu Lu (1):
vsock/virtio: fix accept queue count leak on transport mismatch
Emanuele Ghidoli (1):
arm64: dts: freescale: imx95-toradex-smarc: fix PMIC_SD2_VSEL label position
Ethan Tidmore (1):
media: intel/ipu6: fix error pointer dereference
Felix Gu (1):
media: ti: vpe: Add missing v4l2_device_unregister in vip_remove()
Felix Kuehling (1):
drm/amdkfd: Make all TLB-flushes heavy-weight
Francis, David (1):
drm: Set old handle to NULL before prime swap in change_handle
Franz Schnyder (2):
arm64: dts: ti: k3-am69-aquila-clover: Fix DP regulator enable GPIO
arm64: dts: ti: k3-am69-aquila-dev: Fix DP regulator enable GPIO
Greg Kroah-Hartman (1):
Linux 7.0.9
Gregor Herburger (2):
arm64: dts: broadcom: bcm2712-d-rpi-5-b: add fixes for pinctrl/pinctrl_aon
arm64: dts: broadcom: bcm2712-d-rpi-5-b: update uart10 interrupt
Guoniu Zhou (1):
media: nxp: imx8-isi: Reduce minimum queued buffers from 2 to 0
Gustavo Sousa (1):
drm/xe/hdcp: Add NULL check for media_gt in intel_hdcp_gsc_check_status()
Hans de Goede (1):
media: ipu-bridge: Add upside-down sensor DMI quirk for Dell XPS 13 9340 and XPS 14 9440
Haoxiang Li (2):
media: chips-media: wave5: fix a potential memory leak in wave5_vdi_init()
media: omap3isp: drop the use count of v4l2 pipeline
Harry Wentland (1):
drm/colorop: Fix blob property reference tracking in state lifecycle
Icenowy Zheng (2):
drm/panel: himax-hx83102: restore MODE_LPM after sending disable cmds drm/panel: boe-tv101wum-nl6: restore MODE_LPM after sending disable cmds
Jacopo Mondi (3):
media: rzv2h-ivc: Avoid double job scheduling
media: mali-c55: Initialize the ISP in enable_streams()
media: mali-c55: Fully reset the ISP configuration
Jai Luthra (2):
media: i2c: imx283: Enter full standby when stopping streaming
media: i2c: imx283: Fix hang when going from large to small resolution
Janne Grunau (1):
media: videobuf2: Set vma_flags in vb2_dma_sg_mmap
Jia Yao (1):
drm/xe/uapi: Reject coh_none PAT index for CPU cached memory in madvise
Jiexun Wang (3):
batman-adv: reject new tp_meter sessions during teardown
batman-adv: stop tp_meter sessions during mesh teardown
batman-adv: stop caching unowned originator pointers in BAT IV
Johan Hovold (58):
spi: bcm63xx: fix controller deregistration
spi: atmel: fix controller deregistration
regulator: mt6357: fix OF node reference imbalance
spi: st-ssc4: fix controller deregistration
regulator: max77650: fix OF node reference imbalance
regulator: bq257xx: fix OF node reference imbalance
regulator: rk808: fix OF node reference imbalance
regulator: act8945a: fix OF node reference imbalance
regulator: s2dos05: fix OF node reference imbalance
regulator: bd9571mwv: fix OF node reference imbalance
spi: lantiq-ssc: fix controller deregistration
spi: meson-spicc: fix controller deregistration
spi: qup: fix controller deregistration
spi: at91-usart: fix controller deregistration
spi: amlogic-spisg: fix controller deregistration
spi: aspeed-smc: fix controller deregistration
spi: mxs: fix controller deregistration
spi: mt65xx: fix controller deregistration
spi: dln2: fix controller deregistration
spi: s3c64xx: fix controller deregistration
spi: fsl-espi: fix controller deregistration
spi: omap2-mcspi: fix controller deregistration
spi: pic32: fix controller deregistration
spi: ep93xx: fix controller deregistration
spi: mtk-nor: fix controller deregistration
spi: pl022: fix controller deregistration
spi: ch341: fix devres lifetime
spi: sh-hspi: fix controller deregistration
spi: fsl: fix controller deregistration
spi: bcmbca-hsspi: fix controller deregistration
spi: coldfire-qspi: fix controller deregistration
spi: npcm-pspi: fix controller deregistration
spi: cavium-thunderx: fix controller deregistration
spi: pic32-sqi: fix controller deregistration
spi: sprd: fix controller deregistration
spi: rspi: fix controller deregistration
spi: sh-msiof: fix controller deregistration
spi: slave-mt27xx: fix controller deregistration
spi: img-spfi: fix controller deregistration
spi: mpfs: fix controller deregistration
spi: octeon: fix controller deregistration
spi: imx: fix runtime pm leak on probe deferral
spi: mxic: fix controller deregistration
spi: orion: fix controller deregistration
spi: orion: fix runtime pm leak on unbind
spi: orion: fix clock imbalance on registration failure
spi: mpc52xx: fix use-after-free on registration failure
spi: mpc52xx: fix controller deregistration
spi: mpc52xx: fix use-after-free on unbind
spi: cadence: fix controller deregistration
spi: cadence-quadspi: fix controller deregistration
spi: cadence: fix unclocked access on unbind
spi: cadence: fix clock imbalance on probe failure
spi: cadence-quadspi: fix runtime pm disable imbalance on probe failure
spi: cadence-quadspi: fix clock imbalance on probe failure
spi: cadence-quadspi: fix runtime pm and clock imbalance on unbind
spi: cadence-quadspi: fix unclocked access on unbind
spi: uniphier: fix controller deregistration
John B. Moore (2):
drm/amdgpu/gfx9: drop unnecessary 64-bit fence flag check in KIQ drm/amdgpu/sdma4: replace BUG_ON with WARN_ON in fence emission
Josua Mayer (1):
arm64: dts: lx2160a-cex7/lx2162a-sr-som: fix usd-cd & gpio pinmux
Jouni Högander (1):
drm/i915/psr: Init variable to avoid early exit from et alignment loop
Kory Maincent (TI) (1):
drm/bridge: tda998x: Use __be32 for audio port OF property pointer
Krishna Chaitanya Chundru (1):
arm64: dts: qcom: kodiak: Fix PCIe1 PHY ref clock voting
Krishna Chomal (1):
platform/x86: hp-wmi: Ignore backlight and FnLock events
Krzysztof Kozlowski (1):
drm/msm/hdmi: Fix wrong CTRL1 register used in writing info frames
Lorenzo Stoakes (1):
mm/vma: do not try to unmap a VMA if mmap_prepare() invoked from mmap()
Luigi Leonardi (1):
vsock/virtio: fix MSG_PEEK ignoring skb offset when calculating bytes to copy
Lyes Bourennani (1):
batman-adv: fix integer overflow on buff_pos
Marek Vasut (1):
drm/imx: parallel-display: Prefer bus format set via legacy "interface-pix-fmt" DT property
Mario Kleiner (1):
drm/amd/display: Change dither policy for 10 bpc output back to dithering
Mario Limonciello (1):
drm/amd: Add missing firmware declaration for PSP v15.0.0
Markus Mayer (1):
perf build: fix "argument list too long" in second location
Matthew Brost (2):
drm/gpusvm: Allow device pages to be mapped in mixed mappings after system pages drm/gpusvm: Force unmapping on error in drm_gpusvm_get_pages
Matthias Fend (2):
media: i2c: ov08d10: fix image vertical start setting
media: i2c: ov08d10: fix runtime PM handling in probe
Michael Tretter (1):
media: staging: imx: request mbus_config in csi_start
Norbert Szetei (1):
vsock: fix buffer size clamping order
Oliver Neukum (2):
media: rc: xbox_remote: heed DMA restrictions
media: rc: streamzap: Error handling in probe
Osama Abdelkader (2):
drm/exynos: remove bridge when component_add fails drm/sti: remove bridge when sti_hda component_add fails
Pavel Begunkov (2):
io_uring/zcrx: use guards for locking
io_uring/zcrx: warn on freelist violations
Pei Xiao (1):
spi: uniphier: Simplify clock handling with devm_clk_get_enabled()
Petr Malat (1):
cgroup: Increment nr_dying_subsys_* from rmdir context
Philip Yang (1):
drm/amdgpu: zero-initialize GART table on allocation
Prasanna Kumar T S M (1):
EDAC/versalnet: Fix device name memory leak
Ramalingeswara Reddy, Kanala (2):
drm/amdgpu: Use NBIF offset for register RCC_STRAP0_RCC_DEV0_EPF0_STRAP0 . drm/amdgpu: Use SMUIO 15.0.0 offsets for TSC upper and lower count.
Ricardo Ribalda (1):
media: uvcvideo: Enable VB2_DMABUF for metadata stream
Sakari Ailus (1):
staging: media: atomisp: Disallow all private IOCTLs
Sangyun Kim (2):
HID: appletb-kbd: fix UAF in inactivity-timer cleanup path
HID: appletb-kbd: run inactivity autodim from workqueues
Sasha Finkelstein (1):
drm/appletbdrm: Use kvzalloc for big allocations
Sergey Shtylyov (1):
media: dib8000: avoid division by 0 in dib8000_set_dds()
Shixiong Ou (1):
drm/udl: Increase GET_URB_TIMEOUT
Shubhankar Milind Sardeshpande (1):
drm/amdgpu: Avoid reset in AMDGPU unload path for APUs with GFX V11 and higher.
Shubhrajyoti Datta (1):
EDAC/versalnet: Refactor memory controller initialization and cleanup
Shuicheng Lin (4):
drm/xe: Fix bo leak in xe_dma_buf_init_obj() on allocation failure drm/xe/bo: Fix bo leak on GGTT flag validation in xe_bo_init_locked() drm/xe: Fix dma-buf attachment leak in xe_gem_prime_import() drm/xe/bo: Fix bo leak on unaligned size validation in xe_bo_init_locked()
Siddharth Vadapalli (1):
arm64: dts: ti: k3-am62a7-sk: Fix pin name in comment from M19 to N22
Stefano Garzarella (2):
vsock/virtio: fix length and offset in tap skb for split packets vsock/virtio: fix empty payload in tap skb for non-linear buffers
Sunil Khatri (1):
drm/amdgpu/userq: fix access to stale wptr mapping
Sven Eckelmann (4):
batman-adv: tp_meter: fix tp_num leak on kmalloc failure
batman-adv: bla: prevent use-after-free when deleting claims
batman-adv: bla: only purge non-released claims
batman-adv: bla: put backbone reference on failed claim hash insert
T.J. Mercier (1):
HID: playstation: Clamp num_touch_reports
Tejun Heo (2):
cgroup: Defer css percpu_ref kill on rmdir until cgroup is depopulated
sched_ext: Skip tasks with stale task_rq in bypass_lb_cpu()
Thomas Fourier (1):
media: iris: Fix dma_free_attrs() size in iris_hfi_queues_init()
Tomasz Pakuła (1):
HID: pidff: Fix integer overflow in pidff_rescale
Tomi Valkeinen (2):
media: renesas: vsp1: Fix NULL pointer deref on module unload
media: renesas: vin: Fix RAW8 (again)
Vikash Garodia (1):
media: iris: switch to hardware mode after firmware boot
Viken Dadhaniya (1):
arm64: dts: qcom: lemans: Correct QUP interrupt numbers
Vishnu Reddy (1):
media: iris: fix use-after-free of fmt_src during MBPF check
Wang Jun (1):
media: saa7164: add ioremap return checks and cleanups
Wenjing Liu (1):
drm/amd/display: fix math_mod() using arg1 instead of arg2
Wenmeng Liu (4):
media: i2c: imx412: Assert reset GPIO during probe
media: qcom: camss: Fix csid clock configuration for sa8775p
media: qcom: camss: Fix csid IRQ offset for sa8775p
media: qcom: camss: Add missing clocks for VFE lite on sa8775p
Xiaolei Wang (1):
media: i2c: ov5647: Fix runtime PM refcount leak in s_ctrl
Yang Wang (1):
drm/amd/pm: fix incorrect FeatureCtrlMask setting on smu v14.0.x
Yasuaki Torimaru (1):
drm/msm/gem: fix error handling in msm_ioctl_gem_info_get_metadata()
Ziyi Guo (2):
media: chips-media: wave5: add missing spinlock protection for send_eos_event()
media: chips-media: wave5: add missing spinlock protection for handle_dynamic_resolution_change()
Greg Kroah-Hartman
maintainerDocumentation/devicetree/bindings/media/rockchip,vdec.yaml +14 -8
@@ -28,16 +28,20 @@ properties: reg: minItems: 1 - items: - - description: The function configuration registers base - - description: The link table configuration registers base - - description: The cache configuration registers base + maxItems: 3 reg-names: - items: - - const: function - - const: link - - const: cache + oneOf: + - items: + - const: link + - const: function + - const: cache + - items: + - const: function + - const: link + - const: cache + deprecated: true + description: Use link,function,cache block order instead. interrupts: maxItems: 1
@@ -123,6 +127,8 @@ allOf: minItems: 5 reset-names: minItems: 5 + required: + - reg-names else: properties: reg:
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 7 PATCHLEVEL = 0 -SUBLEVEL = 8 +SUBLEVEL = 9 EXTRAVERSION = NAME = Baby Opossum Posse
arch/arm64/boot/dts/broadcom/bcm2712-d-rpi-5-b.dts +14 -0
@@ -35,3 +35,17 @@ &gio_aon { "PMIC_SCL", // AON_SGPIO_04 "PMIC_SDA"; // AON_SGPIO_05 }; + +&pinctrl { + compatible = "brcm,bcm2712d0-pinctrl"; + reg = <0x7d504100 0x20>; +}; + +&pinctrl_aon { + compatible = "brcm,bcm2712d0-aon-pinctrl"; + reg = <0x7d510700 0x1c>; +}; + +&uart10 { + interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>; +};
arch/arm64/boot/dts/freescale/fsl-lx2160a-cex7.dtsi +7 -0
@@ -162,6 +162,8 @@ rtc@51 { }; &fspi { + pinctrl-names = "default"; + pinctrl-0 = <&fspi_data74_pins>, <&fspi_data30_pins>, <&fspi_dqs_sck_cs10_pins>; status = "okay"; flash@0 {
@@ -177,6 +179,11 @@ flash@0 { }; }; +&pinmux_i2crv { + pinctrl-names = "default"; + pinctrl-0 = <&gpio0_14_12_pins>; +}; + &usb0 { status = "okay"; };
arch/arm64/boot/dts/freescale/fsl-lx2160a-clearfog-itx.dtsi +2 -0
@@ -89,6 +89,8 @@ &emdio2 { }; &esdhc0 { + pinctrl-names = "default"; + pinctrl-0 = <&esdhc0_cd_wp_pins>, <&esdhc0_cmd_data30_clk_vsel_pins>; sd-uhs-sdr104; sd-uhs-sdr50; sd-uhs-sdr25;
arch/arm64/boot/dts/freescale/fsl-lx2160a.dtsi +24 -0
@@ -1721,6 +1721,10 @@ i2c1_scl_gpio: i2c1-scl-gpio-pins { pinctrl-single,bits = <0x0 0x1 0x7>; }; + esdhc0_cd_wp_pins: iic2-sdhc-pins { + pinctrl-single,bits = <0x0 0x6 0x7>; + }; + i2c2_scl: i2c2-scl-pins { pinctrl-single,bits = <0x0 0 (0x7 << 3)>; };
@@ -1753,6 +1757,26 @@ i2c5_scl_gpio: i2c5-scl-gpio-pins { pinctrl-single,bits = <0x0 (0x1 << 12) (0x7 << 12)>; }; + fspi_data74_pins: xspi1-data74-pins { + pinctrl-single,bits = <0x0 0x0 (0x7 << 15)>; + }; + + fspi_data30_pins: xspi1-data30-pins { + pinctrl-single,bits = <0x0 0x0 (0x7 << 18)>; + }; + + fspi_dqs_sck_cs10_pins: xspi1-base-pins { + pinctrl-single,bits = <0x0 0x0 (0x7 << 21)>; + }; + + esdhc0_cmd_data30_clk_vsel_pins: sdhc1-base-sdhc-vsel-pins { + pinctrl-single,bits = <0x0 0x0 (0x7 << 24)>; + }; + + gpio0_14_12_pins: sdhc1-dir-gpio-pins { + pinctrl-single,bits = <0x0 (0x1 << 27) (0x7 << 27)>; + }; + i2c6_scl: i2c6-scl-pins { pinctrl-single,bits = <0x4 0x2 0x7>; };
arch/arm64/boot/dts/freescale/fsl-lx2162a-clearfog.dts +2 -0
@@ -223,6 +223,8 @@ ethernet_phy8: ethernet-phy@15 { }; &esdhc0 { + pinctrl-names = "default"; + pinctrl-0 = <&esdhc0_cd_wp_pins>, <&esdhc0_cmd_data30_clk_vsel_pins>; sd-uhs-sdr104; sd-uhs-sdr50; sd-uhs-sdr25;
arch/arm64/boot/dts/freescale/fsl-lx2162a-sr-som.dtsi +7 -0
@@ -30,6 +30,8 @@ &esdhc1 { }; &fspi { + pinctrl-names = "default"; + pinctrl-0 = <&fspi_data74_pins>, <&fspi_data30_pins>, <&fspi_dqs_sck_cs10_pins>; status = "okay"; flash@0 {
@@ -80,3 +82,8 @@ rtc@6f { reg = <0x6f>; }; }; + +&pinmux_i2crv { + pinctrl-names = "default"; + pinctrl-0 = <&gpio0_14_12_pins>; +};
arch/arm64/boot/dts/freescale/imx95-toradex-smarc.dtsi +0 -1
@@ -262,7 +262,6 @@ &gpio3 { "", "", "", - "", "PMIC_SD2_VSEL"; status = "okay"; };
arch/arm64/boot/dts/qcom/kodiak.dtsi +1 -1
@@ -2445,7 +2445,7 @@ pcie1_phy: phy@1c0e000 { reg = <0 0x01c0e000 0 0x1000>; clocks = <&gcc GCC_PCIE_1_AUX_CLK>, <&gcc GCC_PCIE_1_CFG_AHB_CLK>, - <&gcc GCC_PCIE_CLKREF_EN>, + <&rpmhcc RPMH_CXO_CLK>, <&gcc GCC_PCIE1_PHY_RCHNG_CLK>, <&gcc GCC_PCIE_1_PIPE_CLK>; clock-names = "aux",
arch/arm64/boot/dts/qcom/lemans.dtsi +4 -4
@@ -1512,7 +1512,7 @@ i2c20: i2c@898000 { reg = <0x0 0x898000 0x0 0x4000>; #address-cells = <1>; #size-cells = <0>; - interrupts = <GIC_SPI 834 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 833 IRQ_TYPE_LEVEL_HIGH>; clocks = <&gcc GCC_QUPV3_WRAP2_S6_CLK>; clock-names = "se"; pinctrl-0 = <&qup_i2c20_default>;
@@ -1539,7 +1539,7 @@ spi20: spi@898000 { reg = <0x0 0x898000 0x0 0x4000>; #address-cells = <1>; #size-cells = <0>; - interrupts = <GIC_SPI 834 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 833 IRQ_TYPE_LEVEL_HIGH>; clocks = <&gcc GCC_QUPV3_WRAP2_S6_CLK>; clock-names = "se"; pinctrl-0 = <&qup_spi20_default>;
@@ -1564,7 +1564,7 @@ &config_noc SLAVE_QUP_2 QCOM_ICC_TAG_ALWAYS>, uart20: serial@898000 { compatible = "qcom,geni-uart"; reg = <0x0 0x00898000 0x0 0x4000>; - interrupts = <GIC_SPI 834 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 833 IRQ_TYPE_LEVEL_HIGH>; clocks = <&gcc GCC_QUPV3_WRAP2_S6_CLK>; clock-names = "se"; pinctrl-0 = <&qup_uart20_default>;
@@ -2510,7 +2510,7 @@ i2c13: i2c@a98000 { reg = <0x0 0xa98000 0x0 0x4000>; #address-cells = <1>; #size-cells = <0>; - interrupts = <GIC_SPI 836 IRQ_TYPE_LEVEL_HIGH>; + interrupts = <GIC_SPI 835 IRQ_TYPE_LEVEL_HIGH>; clocks = <&gcc GCC_QUPV3_WRAP1_S6_CLK>; clock-names = "se"; pinctrl-0 = <&qup_i2c13_default>;
arch/arm64/boot/dts/ti/k3-am62a7-sk.dts +1 -1
@@ -398,7 +398,7 @@ AM62AX_IOPAD(0x01d4, PIN_INPUT, 7) /* (C15) UART0_RTSn.GPIO1_23 */ vddshv_sdio_pins_default: vddshv-sdio-default-pins { pinctrl-single,pins = < - AM62AX_IOPAD(0x07c, PIN_OUTPUT, 7) /* (M19) GPMC0_CLK.GPIO0_31 */ + AM62AX_IOPAD(0x07c, PIN_OUTPUT, 7) /* (N22) GPMC0_CLK.GPIO0_31 */ >; };
arch/arm64/boot/dts/ti/k3-am69-aquila-clover.dts +1 -1
@@ -26,7 +26,7 @@ reg_3v3_dp: regulator-3v3-dp { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio_21_dp>; /* Aquila GPIO_21_DP (AQUILA B57) */ - gpio = <&main_gpio0 37 GPIO_ACTIVE_HIGH>; + gpio = <&main_gpio0 21 GPIO_ACTIVE_HIGH>; enable-active-high; regulator-max-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
arch/arm64/boot/dts/ti/k3-am69-aquila-dev.dts +1 -1
@@ -33,7 +33,7 @@ reg_3v3_dp: regulator-3v3-dp { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio_21_dp>; /* Aquila GPIO_21_DP (AQUILA B57) */ - gpio = <&main_gpio0 37 GPIO_ACTIVE_HIGH>; + gpio = <&main_gpio0 21 GPIO_ACTIVE_HIGH>; enable-active-high; regulator-max-microvolt = <3300000>; regulator-min-microvolt = <3300000>;
drivers/edac/versalnet_edac.c +92 -78
208 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +2 -1
@@ -1735,7 +1735,8 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu( alloc_domain =AMDGPU_GEM_DOMAIN_GTT ; alloc_flags =0 ; }else { - alloc_flags =AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE ; + alloc_flags =AMDGPU_GEM_CREATE_VRAM_WIPE_ON_RELEASE | +AMDGPU_GEM_CREATE_VRAM_CLEARED ; alloc_flags |= (flags &KFD_IOC_ALLOC_MEM_FLAGS_PUBLIC ) ?AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED :0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c +5 -1
@@ -3539,8 +3539,12 @@ static int amdgpu_device_ip_fini_early(struct amdgpu_device *adev)* that checks whether the PSP is running. A solution for those issues * in the APU is to trigger a GPU reset, but this should be done during * the unload phase to avoid adding boot latency and screen flicker. +* GFX V11 has GC block as default off IP. Every time AMDGPU driver sends +* a request to PMFW to unload MP1, PMFW will put GC in reset and power down +* the voltage. Hence, skipping reset for APUs with GFX V11 or later. */ -if ((adev->flags &AMD_IS_APU ) && !adev->gmc.is_app_apu) { +if ((adev->flags &AMD_IS_APU ) && !adev->gmc.is_app_apu && +amdgpu_ip_version (adev,GC_HWIP ,0 ) <IP_VERSION (11 ,0 ,0 )) { r =amdgpu_asic_reset (adev);if (r)dev_err (adev->dev,"asic reset on %s failed\n" , __func__);
drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +10 -3
@@ -262,12 +262,19 @@ void amdgpu_gart_table_ram_free(struct amdgpu_device *adev)*/ int amdgpu_gart_table_vram_alloc (struct amdgpu_device *adev) { +int r; +if (adev->gart.bo !=NULL )return 0 ; -return amdgpu_bo_create_kernel (adev, adev->gart.table_size,PAGE_SIZE , -AMDGPU_GEM_DOMAIN_VRAM , &adev->gart.bo, -NULL , (void *)&adev->gart.ptr); + r =amdgpu_bo_create_kernel (adev, adev->gart.table_size,PAGE_SIZE , +AMDGPU_GEM_DOMAIN_VRAM , &adev->gart.bo, +NULL , (void *)&adev->gart.ptr); +if (r) +return r; + +memset_io (adev->gart.ptr, adev->gart.gart_pte_flags, adev->gart.table_size); +return 0 ; }/**
drivers/gpu/drm/amd/amdgpu/amdgpu_ring.h +7 -4
@@ -553,15 +553,18 @@ void amdgpu_debugfs_ring_init(struct amdgpu_device *adev,int amdgpu_ring_init_mqd (struct amdgpu_ring *ring); -static inline u32 amdgpu_ib_get_value (struct amdgpu_ib *ib,int idx) +static inline u32 amdgpu_ib_get_value (struct amdgpu_ib *ib,uint32_t idx) { -return ib->ptr[idx]; +if (idx < ib->length_dw) +return ib->ptr[idx]; +return 0 ; } -static inline void amdgpu_ib_set_value (struct amdgpu_ib *ib,int idx, +static inline void amdgpu_ib_set_value (struct amdgpu_ib *ib,uint32_t idx,uint32_t value) { - ib->ptr[idx] = value; +if (idx < ib->length_dw) + ib->ptr[idx] = value; } int amdgpu_ib_get(struct amdgpu_device *adev, struct amdgpu_vm *vm,
drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c +3 -0
@@ -698,6 +698,9 @@ static int amdgpu_vce_cs_reloc(struct amdgpu_cs_parser *p, struct amdgpu_ib *ib,uint64_t addr;int r; +if (lo >= ib->length_dw || hi >= ib->length_dw) +return -EINVAL ; +if (index ==0xffffffff ) index =0 ;
drivers/gpu/drm/amd/amdgpu/amdgpu_vm_cpu.c +11 -1
@@ -21,6 +21,8 @@*/ #include "amdgpu_vm.h" +#include "amdgpu.h" +#include "amdgpu_reset.h" #include "amdgpu_object.h" #include "amdgpu_trace.h"
@@ -108,11 +110,19 @@ static int amdgpu_vm_cpu_update(struct amdgpu_vm_update_params *p,static int amdgpu_vm_cpu_commit (struct amdgpu_vm_update_params *p,struct dma_fence **fence) { +struct amdgpu_device *adev = p->adev; +if (p->needs_flush)atomic64_inc (&p->vm->tlb_seq);mb (); -amdgpu_device_flush_hdp (p->adev,NULL ); +/* A reset flushed the HDP anyway, so that here can be skipped when a reset is ongoing */ +if (!down_read_trylock (&adev->reset_domain->sem)) +return 0 ; + +amdgpu_device_flush_hdp (adev,NULL ); +up_read (&adev->reset_domain->sem); +return 0 ; }
drivers/gpu/drm/amd/amdgpu/gfx_v11_0.c +26 -5
@@ -64,6 +64,11 @@#define regPC_CONFIG_CNTL_1 0x194d#define regPC_CONFIG_CNTL_1_BASE_IDX 1 +#define regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0 0x0030 +#define regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0_BASE_IDX 1 +#define regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0 0x0031 +#define regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0_BASE_IDX 1 +#define regCP_GFX_MQD_CONTROL_DEFAULT 0x00000100#define regCP_GFX_HQD_VMID_DEFAULT 0x00000000#define regCP_GFX_HQD_QUEUE_PRIORITY_DEFAULT 0x00000000
@@ -5187,11 +5192,27 @@ static uint64_t gfx_v11_0_get_gpu_clock_counter(struct amdgpu_device *adev)amdgpu_gfx_off_ctrl (adev, true); }else {preempt_disable (); - clock_counter_hi_pre = (uint64_t )RREG32_SOC15 (SMUIO ,0 , regGOLDEN_TSC_COUNT_UPPER); - clock_counter_lo = (uint64_t )RREG32_SOC15 (SMUIO ,0 , regGOLDEN_TSC_COUNT_LOWER); - clock_counter_hi_after = (uint64_t )RREG32_SOC15 (SMUIO ,0 , regGOLDEN_TSC_COUNT_UPPER); -if (clock_counter_hi_pre != clock_counter_hi_after) - clock_counter_lo = (uint64_t )RREG32_SOC15 (SMUIO ,0 , regGOLDEN_TSC_COUNT_LOWER); +if (amdgpu_ip_version (adev,SMUIO_HWIP ,0 ) <IP_VERSION (15 ,0 ,0 )) { + clock_counter_hi_pre = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_UPPER); + clock_counter_lo = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_LOWER); + clock_counter_hi_after = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_UPPER); +if (clock_counter_hi_pre != clock_counter_hi_after) + clock_counter_lo = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_LOWER); + }else { + clock_counter_hi_pre = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0); + clock_counter_lo = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0); + clock_counter_hi_after = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_UPPER_smu_15_0_0); +if (clock_counter_hi_pre != clock_counter_hi_after) + clock_counter_lo = (uint64_t )RREG32_SOC15 (SMUIO ,0 , + regGOLDEN_TSC_COUNT_LOWER_smu_15_0_0); + }preempt_enable (); } clock = clock_counter_lo | (clock_counter_hi_after <<32ULL );
drivers/gpu/drm/amd/amdgpu/gfx_v9_0.c +0 -3
@@ -5660,9 +5660,6 @@ static void gfx_v9_0_ring_emit_fence_kiq(struct amdgpu_ring *ring, u64 addr, {struct amdgpu_device *adev = ring->adev; -/* we only allocate 32bit for each seq wb address */ -BUG_ON (flags &AMDGPU_FENCE_FLAG_64BIT ); -/* write fence seq to the "addr" */ amdgpu_ring_write (ring,PACKET3 (PACKET3_WRITE_DATA ,3 )); amdgpu_ring_write(ring, (WRITE_DATA_ENGINE_SEL(0) |
drivers/gpu/drm/amd/amdgpu/mes_userqueue.c +37 -58
126 lines not on this page · raw message
drivers/gpu/drm/amd/amdgpu/nbif_v6_3_1.c +8 -1
@@ -54,6 +54,8 @@#define regGDC_S2A0_S2A_DOORBELL_ENTRY_5_CTRL_nbif_4_10_BASE_IDX 3#define regGDC_S2A0_S2A_DOORBELL_ENTRY_5_CTRL1_nbif_4_10 0x4f0af6#define regGDC_S2A0_S2A_DOORBELL_ENTRY_5_CTRL1_nbif_4_10_BASE_IDX 3 +#define regRCC_STRAP0_RCC_DEV0_EPF0_STRAP0_nbif_4_10 0x0021 +#define regRCC_STRAP0_RCC_DEV0_EPF0_STRAP0_nbif_4_10_BASE_IDX 2static void nbif_v6_3_1_remap_hdp_registers (struct amdgpu_device *adev) {
@@ -65,7 +67,12 @@ static void nbif_v6_3_1_remap_hdp_registers(struct amdgpu_device *adev)static u32 nbif_v6_3_1_get_rev_id (struct amdgpu_device *adev) { -u32 tmp =RREG32_SOC15 (NBIO ,0 , regRCC_STRAP0_RCC_DEV0_EPF0_STRAP0); +u32 tmp; + +if (amdgpu_ip_version (adev,NBIO_HWIP ,0 ) ==IP_VERSION (7 ,11 ,4 )) + tmp =RREG32_SOC15 (NBIO ,0 , regRCC_STRAP0_RCC_DEV0_EPF0_STRAP0_nbif_4_10); +else + tmp =RREG32_SOC15 (NBIO ,0 , regRCC_STRAP0_RCC_DEV0_EPF0_STRAP0); tmp &=RCC_STRAP0_RCC_DEV0_EPF0_STRAP0__STRAP_ATI_REV_ID_DEV0_F0_MASK ; tmp >>=RCC_STRAP0_RCC_DEV0_EPF0_STRAP0__STRAP_ATI_REV_ID_DEV0_F0__SHIFT ;
drivers/gpu/drm/amd/amdgpu/psp_v15_0.c +1 -0
@@ -32,6 +32,7 @@#include "mp/mp_15_0_0_sh_mask.h" MODULE_FIRMWARE ("amdgpu/psp_15_0_0_toc.bin" ); +MODULE_FIRMWARE ("amdgpu/psp_15_0_0_ta.bin" );static int psp_v15_0_0_init_microcode (struct psp_context *psp) {
drivers/gpu/drm/amd/amdgpu/sdma_v4_0.c +2 -2
@@ -890,7 +890,7 @@ static void sdma_v4_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se/* write the fence */ amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_FENCE ));/* zero in first two bits */ -BUG_ON (addr &0x3 ); +WARN_ON (addr &0x3 );amdgpu_ring_write (ring,lower_32_bits (addr));amdgpu_ring_write (ring,upper_32_bits (addr));amdgpu_ring_write (ring,lower_32_bits (seq));
@@ -900,7 +900,7 @@ static void sdma_v4_0_ring_emit_fence(struct amdgpu_ring *ring, u64 addr, u64 se addr +=4 ;amdgpu_ring_write (ring,SDMA_PKT_HEADER_OP (SDMA_OP_FENCE ));/* zero in first two bits */ -BUG_ON (addr &0x3 ); +WARN_ON (addr &0x3 );amdgpu_ring_write (ring,lower_32_bits (addr));amdgpu_ring_write (ring,upper_32_bits (addr));amdgpu_ring_write (ring,upper_32_bits (seq));
drivers/gpu/drm/amd/amdgpu/vcn_v3_0.c +21 -4
@@ -1909,7 +1909,7 @@ static int vcn_v3_0_dec_msg(struct amdgpu_cs_parser *p, struct amdgpu_job *job,struct ttm_operation_ctx ctx = { false, false };struct amdgpu_device *adev = p->adev;struct amdgpu_bo_va_mapping *map; -uint32_t *msg, num_buffers; +uint32_t *msg, num_buffers, len_dw;struct amdgpu_bo *bo;uint64_t start, end;unsigned int i;
@@ -1930,6 +1930,11 @@ static int vcn_v3_0_dec_msg(struct amdgpu_cs_parser *p, struct amdgpu_job *job,return -EINVAL ; } +if (end - addr <16 ) { +DRM_ERROR ("VCN messages must be at least 4 DWORDs!\n" ); +return -EINVAL ; + } + bo->flags |=AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED ;amdgpu_bo_placement_from_domain (bo, bo->allowed_domains); r =ttm_bo_validate (&bo->tbo, &bo->placement, &ctx);
@@ -1946,8 +1951,8 @@ static int vcn_v3_0_dec_msg(struct amdgpu_cs_parser *p, struct amdgpu_job *job, msg = ptr + addr - start; -/* Check length */ if (msg[1 ] > end - addr) { +DRM_ERROR ("VCN message header does not fit in BO!\n" ); r = -EINVAL ; goto out; }
@@ -1955,9 +1960,19 @@ static int vcn_v3_0_dec_msg(struct amdgpu_cs_parser *p, struct amdgpu_job *job,if (msg[3 ] !=RDECODE_MSG_CREATE ) goto out; + len_dw = msg[1 ] /4 ; num_buffers = msg[2 ]; + +/* Verify that all indices fit within the claimed length. Each index is 4 DWORDs */ +if (num_buffers > len_dw ||6 + num_buffers *4 > len_dw) { +DRM_ERROR ("VCN message has too many buffers!\n" ); + r = -EINVAL ; + goto out; + } +for (i =0 , msg = &msg[6 ]; i < num_buffers; ++i, msg +=4 ) {uint32_t offset, size, *create; +uint64_t buf_end;if (msg[0 ] !=RDECODE_MESSAGE_CREATE )continue ;
@@ -1965,14 +1980,16 @@ static int vcn_v3_0_dec_msg(struct amdgpu_cs_parser *p, struct amdgpu_job *job, offset = msg[1 ]; size = msg[2 ]; -if (offset + size > end) { +if (size <4 ||check_add_overflow (offset, size, &buf_end) || + buf_end > end - addr) { +DRM_ERROR ("VCN message buffer exceeds BO bounds!\n" ); r = -EINVAL ; goto out; } create = ptr + addr + offset - start; -/* H246, HEVC and VP9 can run on any instance */ +/* H264, HEVC and VP9 can run on any instance */ if (create[0 ] ==0x7 || create[0 ] ==0x10 || create[0 ] ==0x11 )continue ;
drivers/gpu/drm/amd/amdgpu/vcn_v4_0.c +32 -14
106 lines not on this page · raw message
drivers/gpu/drm/amd/amdkfd/kfd_chardev.c +29 -4
@@ -25,6 +25,7 @@#include <linux/err.h> #include <linux/fs.h> #include <linux/file.h> +#include <linux/overflow.h> #include <linux/sched.h> #include <linux/slab.h> #include <linux/uaccess.h>
@@ -776,6 +777,9 @@ static int kfd_ioctl_get_process_apertures_new(struct file *filp, goto out_unlock; } +if (args->num_of_nodes >kfd_topology_get_num_devices ()) +return -EINVAL ; +/* Fill in process-aperture information for all available * nodes, but not more than args->num_of_nodes as that is * the amount of memory allocated by user
@@ -1356,7 +1360,7 @@ static int kfd_ioctl_map_memory_to_gpu(struct file *filep, peer_pdd =kfd_process_device_data_by_id (p, devices_arr[i]);if (WARN_ON_ONCE (!peer_pdd))continue ; -kfd_flush_tlb (peer_pdd,TLB_FLUSH_LEGACY ); +kfd_flush_tlb (peer_pdd); }kfree (devices_arr);
@@ -1451,7 +1455,7 @@ static int kfd_ioctl_unmap_memory_from_gpu(struct file *filep,if (WARN_ON_ONCE (!peer_pdd))continue ;if (flush_tlb) -kfd_flush_tlb (peer_pdd,TLB_FLUSH_HEAVYWEIGHT ); +kfd_flush_tlb (peer_pdd);/* Remove dma mapping after tlb flush to avoid IO_PAGE_FAULT */ err =amdgpu_amdkfd_gpuvm_dmaunmap_mem (mem, peer_pdd->drm_priv);
@@ -1692,6 +1696,16 @@ static int kfd_ioctl_smi_events(struct file *filep,return kfd_smi_event_open (pdd->dev, &args->anon_fd); } +static int kfd_ioctl_svm_validate (void *kdata,unsigned int usize) +{ +struct kfd_ioctl_svm_args *args = kdata; +size_t expected =struct_size (args, attrs, args->nattr); + +if (expected ==SIZE_MAX || usize < expected) +return -EINVAL ; +return 0 ; +} +#if IS_ENABLED (CONFIG_HSA_AMD_SVM ) static int kfd_ioctl_set_xnack_mode(struct file *filep,
@@ -3206,7 +3220,11 @@ static int kfd_ioctl_create_process(struct file *filep, struct kfd_process *p, v#define AMDKFD_IOCTL_DEF (ioctl, _func, _flags) \ [_IOC_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags, \ - .cmd_drv = 0, .name = #ioctl} + .validate = NULL, .cmd_drv = 0, .name = #ioctl} + +#define AMDKFD_IOCTL_DEF_V (ioctl, _func, _validate, _flags) \ + [_IOC_NR(ioctl)] = {.cmd = ioctl, .func = _func, .flags = _flags, \ + .validate = _validate, .cmd_drv = 0, .name = #ioctl}/** Ioctl table */ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = {
@@ -3303,7 +3321,8 @@ static const struct amdkfd_ioctl_desc amdkfd_ioctls[] = {AMDKFD_IOCTL_DEF (AMDKFD_IOC_SMI_EVENTS , kfd_ioctl_smi_events,0 ), -AMDKFD_IOCTL_DEF (AMDKFD_IOC_SVM , kfd_ioctl_svm,0 ), +AMDKFD_IOCTL_DEF_V (AMDKFD_IOC_SVM , kfd_ioctl_svm, + kfd_ioctl_svm_validate,0 ),AMDKFD_IOCTL_DEF (AMDKFD_IOC_SET_XNACK_MODE , kfd_ioctl_set_xnack_mode, 0),
@@ -3428,6 +3447,12 @@ static long kfd_ioctl(struct file *filep, unsigned int cmd, unsigned long arg)memset (kdata,0 , usize); } +if (ioctl->validate) { + retcode = ioctl->validate (kdata, usize); +if (retcode) + goto err_i1; + } + retcode =func (filep, process, kdata);if (cmd &IOC_OUT )
drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c +3 -3
@@ -572,7 +572,7 @@ static int allocate_vmid(struct device_queue_manager *dqm, qpd->vmid, qpd->page_table_base);/* invalidate the VM context after pasid and vmid mapping is set up */ -kfd_flush_tlb (qpd_to_pdd (qpd),TLB_FLUSH_LEGACY ); +kfd_flush_tlb (qpd_to_pdd (qpd));if (dqm->dev->kfd2kgd->set_scratch_backing_va) dqm->dev->kfd2kgd->set_scratch_backing_va(dqm->dev->adev,
@@ -610,7 +610,7 @@ static void deallocate_vmid(struct device_queue_manager *dqm,if (flush_texture_cache_nocpsch (q->device, qpd))dev_err (dev,"Failed to flush TC\n" ); -kfd_flush_tlb (qpd_to_pdd (qpd),TLB_FLUSH_LEGACY ); +kfd_flush_tlb (qpd_to_pdd (qpd));/* Release the vmid mapping */ set_pasid_vmid_mapping (dqm,0 , qpd->vmid);
@@ -1284,7 +1284,7 @@ static int restore_process_queues_nocpsch(struct device_queue_manager *dqm, dqm->dev->adev, qpd->vmid, qpd->page_table_base); -kfd_flush_tlb (pdd,TLB_FLUSH_LEGACY ); +kfd_flush_tlb (pdd); }/* Take a safe reference to the mm_struct, which may otherwise
drivers/gpu/drm/amd/amdkfd/kfd_priv.h +7 -3
@@ -1047,10 +1047,13 @@ extern struct srcu_struct kfd_processes_srcu;typedef int amdkfd_ioctl_t (struct file *filep,struct kfd_process *p,void *data); +typedef int amdkfd_ioctl_validate_t (void *kdata,unsigned int usize); +struct amdkfd_ioctl_desc {unsigned int cmd;int flags;amdkfd_ioctl_t *func; +amdkfd_ioctl_validate_t *validate;unsigned int cmd_drv;const char *name; };
@@ -1191,6 +1194,7 @@ static inline struct kfd_node *kfd_node_by_irq_ids(struct amdgpu_device *adev,return NULL ; }int kfd_topology_enum_kfd_devices (uint8_t idx,struct kfd_node **kdev); +uint32_t kfd_topology_get_num_devices (void );int kfd_numa_node_to_apic_id (int numa_node_id);uint32_t kfd_gpu_node_num (void );
@@ -1550,13 +1554,13 @@ void kfd_signal_reset_event(struct kfd_node *dev);void kfd_signal_poison_consumed_event (struct kfd_node *dev,u32 pasid);void kfd_signal_process_terminate_event (struct kfd_process *p); -static inline void kfd_flush_tlb (struct kfd_process_device *pdd, -enum TLB_FLUSH_TYPE type) +static inline void kfd_flush_tlb (struct kfd_process_device *pdd) {struct amdgpu_device *adev = pdd->dev->adev;struct amdgpu_vm *vm =drm_priv_to_vm (pdd->drm_priv); -amdgpu_vm_flush_compute_tlb (adev, vm, type, pdd->dev->xcc_mask); +amdgpu_vm_flush_compute_tlb (adev, vm,TLB_FLUSH_HEAVYWEIGHT , + pdd->dev->xcc_mask); }static inline bool kfd_flush_tlb_after_unmap (struct kfd_dev *dev)
drivers/gpu/drm/amd/amdkfd/kfd_svm.c +2 -2
@@ -1415,7 +1415,7 @@ svm_range_unmap_from_gpus(struct svm_range *prange, unsigned long start,if (r)break ; } -kfd_flush_tlb (pdd,TLB_FLUSH_HEAVYWEIGHT ); +kfd_flush_tlb (pdd); }return r;
@@ -1557,7 +1557,7 @@ svm_range_map_to_gpus(struct svm_range *prange, unsigned long offset, } } -kfd_flush_tlb (pdd,TLB_FLUSH_LEGACY ); +kfd_flush_tlb (pdd); }return r;
drivers/gpu/drm/amd/amdkfd/kfd_topology.c +11 -0
@@ -2297,6 +2297,17 @@ int kfd_topology_remove_device(struct kfd_node *gpu)return res; } +uint32_t kfd_topology_get_num_devices (void ) +{ +uint32_t num_devices; + +down_read (&topology_lock); + num_devices = sys_props.num_devices; +up_read (&topology_lock); + +return num_devices; +} +/* kfd_topology_enum_kfd_devices - Enumerate through all devices in KFD * topology. If GPU device is found @idx, then valid kfd_dev pointer is * returned through @kdev
drivers/gpu/drm/amd/display/dc/core/dc_resource.c +1 -1
@@ -5049,7 +5049,7 @@ void resource_build_bit_depth_reduction_params(struct dc_stream_state *stream, option =DITHER_OPTION_SPATIAL8 ;break ;case COLOR_DEPTH_101010 : - option =DITHER_OPTION_TRUN10 ; + option =DITHER_OPTION_SPATIAL10 ;break ;default : option =DITHER_OPTION_DISABLE ;
drivers/gpu/drm/amd/display/dc/dml2_0/dml21/src/dml2_standalone_libraries/lib_float_math.c +1 -1
@@ -23,7 +23,7 @@ double math_mod(const double arg1, const double arg2)return arg2;if (isNaN (arg2))return arg1; -return arg1 - arg1 * ((int )(arg1 / arg2)); +return arg1 - arg2 * ((int )(arg1 / arg2)); }double math_min2 (const double arg1,const double arg2)
drivers/gpu/drm/amd/pm/powerplay/smumgr/ci_smumgr.c +7 -6
@@ -1326,12 +1326,13 @@ static int ci_populate_all_memory_levels(struct pp_hwmgr *hwmgr) dev_id = adev->pdev->device; -if ((dpm_table->mclk_table.count >=2 ) - && ((dev_id ==0x67B0 ) || (dev_id ==0x67B1 ))) { - smu_data->smc_state_table.MemoryLevel[1 ].MinVddci = - smu_data->smc_state_table.MemoryLevel[0 ].MinVddci; - smu_data->smc_state_table.MemoryLevel[1 ].MinMvdd = - smu_data->smc_state_table.MemoryLevel[0 ].MinMvdd; +if ((dpm_table->mclk_table.count >=2 ) && + ((dev_id ==0x67B0 ) || (dev_id ==0x67B1 )) && + (adev->pdev->revision ==0 )) { + smu_data->smc_state_table.MemoryLevel[1 ].MinVddc = + smu_data->smc_state_table.MemoryLevel[0 ].MinVddc; + smu_data->smc_state_table.MemoryLevel[1 ].MinVddcPhases = + smu_data->smc_state_table.MemoryLevel[0 ].MinVddcPhases; } smu_data->smc_state_table.MemoryLevel[0 ].ActivityLevel =0x1F ;CONVERT_FROM_HOST_TO_SMC_US (smu_data->smc_state_table.MemoryLevel[0 ].ActivityLevel);
drivers/gpu/drm/amd/pm/swsmu/smu14/smu_v14_0_2_ppt.c +7 -3
@@ -2372,6 +2372,7 @@ static int smu_v14_0_2_od_restore_table_single(struct smu_context *smu, long inp } od_table->OverDriveTable.FanMode =FAN_MODE_AUTO ; od_table->OverDriveTable.FeatureCtrlMask |=BIT (PP_OD_FEATURE_FAN_CURVE_BIT ); + od_table->OverDriveTable.FeatureCtrlMask &= ~BIT (PP_OD_FEATURE_FAN_LEGACY_BIT );break ;case PP_OD_EDIT_FAN_ZERO_RPM_ENABLE : od_table->OverDriveTable.FanZeroRpmEnable =
@@ -2400,7 +2401,8 @@ static int smu_v14_0_2_od_restore_table_single(struct smu_context *smu, long inp od_table->OverDriveTable.FanMinimumPwm = boot_overdrive_table->OverDriveTable.FanMinimumPwm; od_table->OverDriveTable.FanMode =FAN_MODE_AUTO ; - od_table->OverDriveTable.FeatureCtrlMask |=BIT (PP_OD_FEATURE_FAN_CURVE_BIT ); + od_table->OverDriveTable.FeatureCtrlMask |=BIT (PP_OD_FEATURE_FAN_LEGACY_BIT ); + od_table->OverDriveTable.FeatureCtrlMask &= ~BIT (PP_OD_FEATURE_FAN_CURVE_BIT );break ;default :dev_info (adev->dev,"Invalid table index: %ld\n" , input);
@@ -2570,6 +2572,7 @@ static int smu_v14_0_2_od_edit_dpm_table(struct smu_context *smu, od_table->OverDriveTable.FanLinearPwmPoints[input[0 ]] = input[2 ]; od_table->OverDriveTable.FanMode =FAN_MODE_MANUAL_LINEAR ; od_table->OverDriveTable.FeatureCtrlMask |=BIT (PP_OD_FEATURE_FAN_CURVE_BIT ); + od_table->OverDriveTable.FeatureCtrlMask &= ~BIT (PP_OD_FEATURE_FAN_LEGACY_BIT );break ;case PP_OD_EDIT_ACOUSTIC_LIMIT :
@@ -2639,7 +2642,7 @@ static int smu_v14_0_2_od_edit_dpm_table(struct smu_context *smu,break ;case PP_OD_EDIT_FAN_MINIMUM_PWM : -if (!smu_v14_0_2_is_od_feature_supported (smu,PP_OD_FEATURE_FAN_CURVE_BIT )) { +if (!smu_v14_0_2_is_od_feature_supported (smu,PP_OD_FEATURE_FAN_LEGACY_BIT )) {dev_warn (adev->dev,"Fan curve setting not supported!\n" );return -ENOTSUPP ; }
@@ -2657,7 +2660,8 @@ static int smu_v14_0_2_od_edit_dpm_table(struct smu_context *smu, od_table->OverDriveTable.FanMinimumPwm = input[0 ]; od_table->OverDriveTable.FanMode =FAN_MODE_AUTO ; - od_table->OverDriveTable.FeatureCtrlMask |=BIT (PP_OD_FEATURE_FAN_CURVE_BIT ); + od_table->OverDriveTable.FeatureCtrlMask |=BIT (PP_OD_FEATURE_FAN_LEGACY_BIT ); + od_table->OverDriveTable.FeatureCtrlMask &= ~BIT (PP_OD_FEATURE_FAN_CURVE_BIT );break ;case PP_OD_EDIT_FAN_ZERO_RPM_ENABLE :
drivers/gpu/drm/bridge/tda998x_drv.c +1 -1
@@ -1697,7 +1697,7 @@ static const struct drm_bridge_funcs tda998x_bridge_funcs = {static int tda998x_get_audio_ports (struct tda998x_priv *priv,struct device_node *np) { -const u32 *port_data; +const __be32 *port_data;u32 size;int i;
drivers/gpu/drm/drm_atomic.c +7 -0
@@ -1569,6 +1569,7 @@ drm_atomic_add_affected_planes(struct drm_atomic_state *state,const struct drm_crtc_state *old_crtc_state =drm_atomic_get_old_crtc_state (state, crtc);struct drm_plane *plane; +int ret;WARN_ON (!drm_atomic_get_new_crtc_state (state, crtc));
@@ -1582,6 +1583,12 @@ drm_atomic_add_affected_planes(struct drm_atomic_state *state,if (IS_ERR (plane_state))return PTR_ERR (plane_state); + +if (plane_state->color_pipeline) { + ret =drm_atomic_add_affected_colorops (state, plane); +if (ret) +return ret; + } }return 0 ; }
drivers/gpu/drm/drm_colorop.c +19 -9
@@ -169,12 +169,8 @@ void drm_colorop_cleanup(struct drm_colorop *colorop)list_del (&colorop->head); config->num_colorop--; -if (colorop->state && colorop->state->data) { -drm_property_blob_put (colorop->state->data); - colorop->state->data =NULL ; - } - -kfree (colorop->state); +if (colorop->state) +drm_colorop_atomic_destroy_state (colorop, colorop->state); }EXPORT_SYMBOL (drm_colorop_cleanup);
@@ -441,8 +437,6 @@ static void __drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *coloif (state->data)drm_property_blob_get (state->data); - - state->bypass = true; } struct drm_colorop_state *
@@ -460,9 +454,23 @@ drm_atomic_helper_colorop_duplicate_state(struct drm_colorop *colorop)return state; } +/** +* __drm_atomic_helper_colorop_destroy_state - release colorop state +* @state: colorop state object to release +* +* Releases all resources stored in the colorop state without actually freeing +* the memory of the colorop state. This is useful for drivers that subclass the +* colorop state. +*/ +static void __drm_atomic_helper_colorop_destroy_state (struct drm_colorop_state *state) +{ +drm_property_blob_put (state->data); +} +void drm_colorop_atomic_destroy_state (struct drm_colorop *colorop,struct drm_colorop_state *state) { +__drm_atomic_helper_colorop_destroy_state (state);kfree (state); }
@@ -513,7 +521,9 @@ static void __drm_colorop_reset(struct drm_colorop *colorop,void drm_colorop_reset (struct drm_colorop *colorop) { -kfree (colorop->state); +if (colorop->state) +drm_colorop_atomic_destroy_state (colorop, colorop->state); + colorop->state =kzalloc_obj (*colorop->state);if (colorop->state)
drivers/gpu/drm/drm_gem.c +24 -1
@@ -1001,7 +1001,7 @@ int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) {struct drm_gem_change_handle *args = data; -struct drm_gem_object *obj; +struct drm_gem_object *obj, *idrobj;int handle, ret;if (!drm_core_check_feature (dev,DRIVER_GEM ))
@@ -1024,8 +1024,29 @@ int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data,mutex_lock (&file_priv->prime.lock);spin_lock (&file_priv->table_lock); + +/* When create_tail allocs an obj idr, it needs to first alloc as NULL, +* then later replace with the correct object. This is not necessary +* here, because the only operations that could race are drm_prime +* bookkeeping, and we hold the prime lock. +*/ ret =idr_alloc (&file_priv->object_idr, obj, handle, handle +1 ,GFP_NOWAIT ); + +if (ret <0 ) { +spin_unlock (&file_priv->table_lock); + goto out_unlock; + } + + idrobj =idr_replace (&file_priv->object_idr,NULL , handle); +if (idrobj != obj) { +idr_replace (&file_priv->object_idr, idrobj, handle); +idr_remove (&file_priv->object_idr, args->new_handle); +spin_unlock (&file_priv->table_lock); + ret = -ENOENT ; + goto out_unlock; + } +spin_unlock (&file_priv->table_lock);if (ret <0 )
@@ -1037,6 +1058,8 @@ int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data,if (ret <0 ) {spin_lock (&file_priv->table_lock);idr_remove (&file_priv->object_idr, handle); + idrobj =idr_replace (&file_priv->object_idr, obj, handle); +WARN_ON (idrobj !=NULL );spin_unlock (&file_priv->table_lock); goto out_unlock; }
drivers/gpu/drm/drm_gem_framebuffer_helper.c +2 -2
@@ -172,8 +172,8 @@ int drm_gem_fb_init_with_funcs(struct drm_device *dev, }for (i =0 ; i < info->num_planes; i++) { -unsigned int width = mode_cmd->width / (i ? info->hsub :1 ); -unsigned int height = mode_cmd->height / (i ? info->vsub :1 ); +unsigned int width =drm_format_info_plane_width (info, mode_cmd->width, i); +unsigned int height =drm_format_info_plane_height (info, mode_cmd->height, i);unsigned int min_size; objs[i] =drm_gem_object_lookup (file, mode_cmd->handles[i]);
drivers/gpu/drm/drm_gpusvm.c +2 -1
@@ -1495,7 +1495,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm, } zdd = page->zone_device_data;if (pagemap !=page_pgmap (page)) { -if (i >0 ) { +if (pagemap) { err = -EOPNOTSUPP ; goto err_unmap; }
@@ -1572,6 +1572,7 @@ int drm_gpusvm_get_pages(struct drm_gpusvm *gpusvm,return 0 ; err_unmap: + svm_pages->flags.has_dma_mapping = true;__drm_gpusvm_unmap_pages (gpusvm, svm_pages, num_dma_mapped);drm_gpusvm_notifier_unlock (gpusvm); err_free:
drivers/gpu/drm/exynos/exynos_drm_mic.c +3 -5
@@ -423,7 +423,9 @@ static int exynos_mic_probe(struct platform_device *pdev) mic->bridge.of_node = dev->of_node; -drm_bridge_add (&mic->bridge); + ret =devm_drm_bridge_add (dev, &mic->bridge); +if (ret) + goto err;pm_runtime_enable (dev);
@@ -443,12 +445,8 @@ static int exynos_mic_probe(struct platform_device *pdev)static void exynos_mic_remove (struct platform_device *pdev) { -struct exynos_mic *mic =platform_get_drvdata (pdev); -component_del (&pdev->dev, &exynos_mic_component_ops);pm_runtime_disable (&pdev->dev); - -drm_bridge_remove (&mic->bridge); }static const struct of_device_id exynos_mic_of_match[] = {
drivers/gpu/drm/i915/display/intel_psr.c +1 -1
@@ -2970,7 +2970,7 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,return ret; do { - bool cursor_in_su_area; + bool cursor_in_su_area = false; /* * Adjust su area to cover cursor fully as necessary
drivers/gpu/drm/imx/ipuv3/parallel-display.c +12 -3
@@ -110,8 +110,7 @@ imx_pd_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge, output_fmt = imxpd->bus_format ? :MEDIA_BUS_FMT_RGB888_1X24 ;/* Now make sure the requested output format is supported. */ -if ((imxpd->bus_format && imxpd->bus_format != output_fmt) || - !imx_pd_format_supported (output_fmt)) { +if (!imx_pd_format_supported (output_fmt)) { *num_input_fmts =0 ;return NULL ; }
@@ -121,7 +120,17 @@ imx_pd_bridge_atomic_get_input_bus_fmts(struct drm_bridge *bridge,if (!input_fmts)return NULL ; - input_fmts[0 ] = output_fmt; +/* +* Prefer bus format set via legacy "interface-pix-fmt" DT property +* over panel bus format. This is necessary to retain support for +* DTs which configure the IPUv3 parallel output as 24bit, but +* connect 18bit DPI panels to it with hardware swizzling. +*/ +if (imxpd->bus_format && imxpd->bus_format != output_fmt) + input_fmts[0 ] = imxpd->bus_format; +else + input_fmts[0 ] = output_fmt; +return input_fmts; }
drivers/gpu/drm/msm/hdmi/hdmi_bridge.c +2 -2
@@ -153,7 +153,7 @@ static int msm_hdmi_bridge_write_avi_infoframe(struct drm_bridge *bridge,for (i =0 ; i <ARRAY_SIZE (buf); i++)hdmi_write (hdmi,REG_HDMI_AVI_INFO (i), buf[i]); - val =hdmi_read (hdmi,REG_HDMI_INFOFRAME_CTRL1 ); + val =hdmi_read (hdmi,REG_HDMI_INFOFRAME_CTRL0 ); val |=HDMI_INFOFRAME_CTRL0_AVI_SEND |HDMI_INFOFRAME_CTRL0_AVI_CONT ;hdmi_write (hdmi,REG_HDMI_INFOFRAME_CTRL0 , val);
@@ -193,7 +193,7 @@ static int msm_hdmi_bridge_write_audio_infoframe(struct drm_bridge *bridge, buffer[9 ] <<16 | buffer[10] << 24); - val =hdmi_read (hdmi,REG_HDMI_INFOFRAME_CTRL1 ); + val =hdmi_read (hdmi,REG_HDMI_INFOFRAME_CTRL0 ); val |=HDMI_INFOFRAME_CTRL0_AUDIO_INFO_SEND |HDMI_INFOFRAME_CTRL0_AUDIO_INFO_CONT | HDMI_INFOFRAME_CTRL0_AUDIO_INFO_SOURCE |
drivers/gpu/drm/msm/msm_drv.c +6 -1
@@ -536,6 +536,11 @@ static int msm_ioctl_gem_info_get_metadata(struct drm_gem_object *obj, len = msm_obj->metadata_size; buf =kmemdup (msm_obj->metadata, len,GFP_KERNEL ); +if (!buf) { +msm_gem_unlock (obj); +return -ENOMEM ; + } +msm_gem_unlock (obj);if (*metadata_size < len) {
@@ -548,7 +553,7 @@ static int msm_ioctl_gem_info_get_metadata(struct drm_gem_object *obj,kfree (buf); -return 0 ; +return ret; } static int msm_ioctl_gem_info(struct drm_device *dev, void *data,
drivers/gpu/drm/msm/msm_gpu.c +20 -22
52 lines not on this page · raw message
drivers/gpu/drm/panel/panel-boe-tv101wum-nl6.c +2 -0
@@ -1324,6 +1324,8 @@ static int boe_panel_disable(struct drm_panel *panel)mipi_dsi_dcs_set_display_off_multi (&ctx);mipi_dsi_dcs_enter_sleep_mode_multi (&ctx); + boe->dsi->mode_flags |=MIPI_DSI_MODE_LPM ; +mipi_dsi_msleep (&ctx,150 );return ctx.accum_err;
drivers/gpu/drm/panel/panel-himax-hx83102.c +2 -0
@@ -850,6 +850,8 @@ static int hx83102_disable(struct drm_panel *panel)mipi_dsi_dcs_set_display_off_multi (&dsi_ctx);mipi_dsi_dcs_enter_sleep_mode_multi (&dsi_ctx); + dsi->mode_flags |=MIPI_DSI_MODE_LPM ; +mipi_dsi_msleep (&dsi_ctx,150 );return dsi_ctx.accum_err;
drivers/gpu/drm/radeon/ci_dpm.c +6 -3
@@ -2461,7 +2461,8 @@ static void ci_register_patching_mc_arb(struct radeon_device *rdev,if (patch && ((rdev->pdev->device ==0x67B0 ) || - (rdev->pdev->device ==0x67B1 ))) { + (rdev->pdev->device ==0x67B1 )) && + (rdev->pdev->revision ==0 )) {if ((memory_clock >100000 ) && (memory_clock <=125000 )) { tmp2 = (((0x31 * engine_clock) /125000 ) -1 ) &0xff ; *dram_timimg2 &= ~0x00ff0000 ;
@@ -3304,7 +3305,8 @@ static int ci_populate_all_memory_levels(struct radeon_device *rdev) pi->smc_state_table.MemoryLevel[0 ].EnabledForActivity =1 ;if ((dpm_table->mclk_table.count >=2 ) && - ((rdev->pdev->device ==0x67B0 ) || (rdev->pdev->device ==0x67B1 ))) { + ((rdev->pdev->device ==0x67B0 ) || (rdev->pdev->device ==0x67B1 )) && + (rdev->pdev->revision ==0 )) { pi->smc_state_table.MemoryLevel[1 ].MinVddc = pi->smc_state_table.MemoryLevel[0 ].MinVddc; pi->smc_state_table.MemoryLevel[1].MinVddcPhases =
@@ -4493,7 +4495,8 @@ static int ci_register_patching_mc_seq(struct radeon_device *rdev,if (patch && ((rdev->pdev->device ==0x67B0 ) || - (rdev->pdev->device ==0x67B1 ))) { + (rdev->pdev->device ==0x67B1 )) && + (rdev->pdev->revision ==0 )) {for (i =0 ; i < table->last; i++) {if (table->last >=SMU7_DISCRETE_MC_REGISTER_ARRAY_SIZE )return -EINVAL ;
drivers/gpu/drm/sti/sti_hda.c +4 -4
@@ -741,6 +741,7 @@ static int sti_hda_probe(struct platform_device *pdev)struct device *dev = &pdev->dev;struct sti_hda *hda;struct resource *res; +int ret;DRM_INFO ("%s\n" , __func__);
@@ -779,7 +780,9 @@ static int sti_hda_probe(struct platform_device *pdev)return PTR_ERR (hda->clk_hddac); } -drm_bridge_add (&hda->bridge); + ret =devm_drm_bridge_add (dev, &hda->bridge); +if (ret) +return ret;platform_set_drvdata (pdev, hda);
@@ -788,10 +791,7 @@ static int sti_hda_probe(struct platform_device *pdev)static void sti_hda_remove (struct platform_device *pdev) { -struct sti_hda *hda =platform_get_drvdata (pdev); -component_del (&pdev->dev, &sti_hda_ops); -drm_bridge_remove (&hda->bridge); }static const struct of_device_id hda_of_match[] = {
drivers/gpu/drm/tiny/appletbdrm.c +2 -2
@@ -353,7 +353,7 @@ static int appletbdrm_primary_plane_helper_atomic_check(struct drm_plane *plane, frames_size + sizeof(struct appletbdrm_fb_request_footer), 16); - appletbdrm_state->request =kzalloc (request_size,GFP_KERNEL ); + appletbdrm_state->request =kvzalloc (request_size,GFP_KERNEL );if (!appletbdrm_state->request)return -ENOMEM ;
@@ -543,7 +543,7 @@ static void appletbdrm_primary_plane_destroy_state(struct drm_plane *plane, {struct appletbdrm_plane_state *appletbdrm_state =to_appletbdrm_plane_state (state); -kfree (appletbdrm_state->request); +kvfree (appletbdrm_state->request);kfree (appletbdrm_state->response);__drm_gem_destroy_shadow_plane_state (&appletbdrm_state->base);
drivers/gpu/drm/udl/udl_main.c +1 -2
@@ -285,13 +285,12 @@ static struct urb *udl_get_urb_locked(struct udl_device *udl, long timeout)return unode->urb; } -#define GET_URB_TIMEOUT HZstruct urb *udl_get_urb (struct udl_device *udl) {struct urb *urb;spin_lock_irq (&udl->urbs.lock); - urb =udl_get_urb_locked (udl,GET_URB_TIMEOUT ); + urb =udl_get_urb_locked (udl,HZ *2 );spin_unlock_irq (&udl->urbs.lock);return urb; }
drivers/gpu/drm/udl/udl_modeset.c +4 -1
@@ -21,6 +21,7 @@#include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_gem_shmem_helper.h> #include <drm/drm_modeset_helper_vtables.h> +#include <drm/drm_print.h> #include <drm/drm_probe_helper.h> #include <drm/drm_vblank.h>
@@ -342,8 +343,10 @@ static void udl_crtc_helper_atomic_enable(struct drm_crtc *crtc, struct drm_atomreturn ; urb =udl_get_urb (udl); -if (!urb) +if (!urb) { +drm_err_ratelimited (dev,"get urb failed when enabling crtc\n" ); goto out; + } buf = (char *)urb->transfer_buffer; buf =udl_vidreg_lock (buf);
drivers/gpu/drm/v3d/v3d_submit.c +5 -0
@@ -393,6 +393,11 @@ v3d_get_multisync_submit_deps(struct drm_file *file_priv,if (multisync.pad)return -EINVAL ; +if (!multisync.in_sync_count && !multisync.out_sync_count) { +drm_dbg (&v3d->drm,"Empty multisync extension\n" ); +return -EINVAL ; + } + ret =v3d_get_multisync_post_deps (file_priv, se, multisync.out_sync_count, multisync.out_syncs);if (ret)
drivers/gpu/drm/xe/display/xe_hdcp_gsc.c +10 -2
@@ -37,9 +37,17 @@ static bool intel_hdcp_gsc_check_status(struct drm_device *drm)struct xe_device *xe =to_xe_device (drm);struct xe_tile *tile =xe_device_get_root_tile (xe);struct xe_gt *gt = tile->media_gt; -struct xe_gsc *gsc = >->uc.gsc; +struct xe_gsc *gsc; + +if (!gt) { +drm_dbg_kms (&xe->drm, +"not checking GSC status for HDCP2.x: media GT not present or disabled\n" ); +return false; + } + + gsc = >->uc.gsc; -if (!gsc || !xe_uc_fw_is_available (&gsc->fw)) { +if (!xe_uc_fw_is_available (&gsc->fw)) {drm_dbg_kms (&xe->drm,"GSC Components not ready for HDCP2.x\n" );return false;
drivers/gpu/drm/xe/xe_bo.c +6 -2
@@ -2154,8 +2154,10 @@ struct xe_bo *xe_bo_init_locked(struct xe_device *xe, struct xe_bo *bo, }/* XE_BO_FLAG_GGTTx requires XE_BO_FLAG_GGTT also be set */ -if ((flags &XE_BO_FLAG_GGTT_ALL ) && !(flags &XE_BO_FLAG_GGTT )) +if ((flags &XE_BO_FLAG_GGTT_ALL ) && !(flags &XE_BO_FLAG_GGTT )) { +xe_bo_free (bo);return ERR_PTR (-EINVAL ); + } if (flags & (XE_BO_FLAG_VRAM_MASK | XE_BO_FLAG_STOLEN) && !(flags & XE_BO_FLAG_IGNORE_MIN_PAGE_SIZE) &&
@@ -2174,8 +2176,10 @@ struct xe_bo *xe_bo_init_locked(struct xe_device *xe, struct xe_bo *bo, alignment =SZ_4K >>PAGE_SHIFT ; } -if (type == ttm_bo_type_device && aligned_size != size) +if (type == ttm_bo_type_device && aligned_size != size) { +xe_bo_free (bo);return ERR_PTR (-EINVAL ); + }if (!bo) { bo =xe_bo_alloc ();
drivers/gpu/drm/xe/xe_dma_buf.c +18 -5
@@ -238,6 +238,13 @@ struct dma_buf *xe_gem_prime_export(struct drm_gem_object *obj, int flags)return buf; } +/* +* Takes ownership of @storage: on success it is transferred to the returned +* drm_gem_object; on failure it is freed before returning the error. +* This matches the contract of xe_bo_init_locked() which frees @storage on +* its error paths, so callers need not (and must not) free @storage after +* this call. +*/ static struct drm_gem_object *xe_dma_buf_init_obj (struct drm_device *dev,struct xe_bo *storage,struct dma_buf *dma_buf)
@@ -251,8 +258,10 @@ xe_dma_buf_init_obj(struct drm_device *dev, struct xe_bo *storage,int ret =0 ; dummy_obj =drm_gpuvm_resv_object_alloc (&xe->drm); -if (!dummy_obj) +if (!dummy_obj) { +xe_bo_free (storage);return ERR_PTR (-ENOMEM ); + } dummy_obj->resv = resv; xe_validation_guard(&ctx, &xe->val, &exec, (struct xe_val_flags) {}, ret) {
@@ -261,6 +270,7 @@ xe_dma_buf_init_obj(struct drm_device *dev, struct xe_bo *storage,if (ret)break ; +/* xe_bo_init_locked() frees storage on error */ bo =xe_bo_init_locked (xe, storage,NULL , resv,NULL , dma_buf->size,0 ,/* Will require 1way or 2way for vm_bind */ ttm_bo_type_sg,XE_BO_FLAG_SYSTEM , &exec);
@@ -348,12 +358,15 @@ struct drm_gem_object *xe_gem_prime_import(struct drm_device *dev, goto out_err; } -/* Errors here will take care of freeing the bo. */ +/* +* xe_dma_buf_init_obj() takes ownership of bo on both success +* and failure, so we must not touch bo after this call. +*/ obj =xe_dma_buf_init_obj (dev, bo, dma_buf); -if (IS_ERR (obj)) +if (IS_ERR (obj)) { +dma_buf_detach (dma_buf, attach);return obj; - - + }get_dma_buf (dma_buf); obj->import_attach = attach;return obj;
drivers/gpu/drm/xe/xe_vm_madvise.c +47 -0
59 lines not on this page · raw message
drivers/hid/hid-appletb-kbd.c +36 -20
117 lines not on this page · raw message
drivers/hid/hid-playstation.c +4 -2
@@ -2378,7 +2378,8 @@ static int dualshock4_parse_report(struct ps_device *ps_dev, struct hid_report * (struct dualshock4_input_report_usb *)data; ds4_report = &usb->common; - num_touch_reports = usb->num_touch_reports; + num_touch_reports =min_t (u8, usb->num_touch_reports, +ARRAY_SIZE (usb->touch_reports)); touch_reports = usb->touch_reports; }else if (hdev->bus ==BUS_BLUETOOTH && report->id ==DS4_INPUT_REPORT_BT && size ==DS4_INPUT_REPORT_BT_SIZE ) {
@@ -2392,7 +2393,8 @@ static int dualshock4_parse_report(struct ps_device *ps_dev, struct hid_report * } ds4_report = &bt->common; - num_touch_reports = bt->num_touch_reports; + num_touch_reports =min_t (u8, bt->num_touch_reports, +ARRAY_SIZE (bt->touch_reports)); touch_reports = bt->touch_reports; } else if (hdev->bus == BUS_BLUETOOTH && report->id == DS4_INPUT_REPORT_BT_MINIMAL &&
drivers/hid/usbhid/hid-pidff.c +5 -2
@@ -11,6 +11,7 @@#include "hid-pidff.h" #include <linux/hid.h> #include <linux/input.h> +#include <linux/math64.h> #include <linux/minmax.h> #include <linux/slab.h> #include <linux/usb.h>
@@ -325,8 +326,10 @@ static s32 pidff_clamp(s32 i, struct hid_field *field)*/ static int pidff_rescale (int i,int max,struct hid_field *field) { -return i * (field->logical_maximum - field->logical_minimum) / max + - field->logical_minimum; +/* 64 bits needed for big values during rescale */ +s64 result = field->logical_maximum - field->logical_minimum; + +return div_s64 (result * i, max) + field->logical_minimum; }/*
drivers/media/common/videobuf2/videobuf2-dma-sg.c +1 -0
@@ -345,6 +345,7 @@ static int vb2_dma_sg_mmap(void *buf_priv, struct vm_area_struct *vma)return err; } +vm_flags_set (vma,VM_DONTEXPAND |VM_DONTDUMP );/* * Use common vm_area operations to track buffer refcount. */
drivers/media/dvb-frontends/dib8000.c +2 -2
@@ -2695,7 +2695,7 @@ static void dib8000_viterbi_state(struct dib8000_state *state, u8 onoff)static void dib8000_set_dds (struct dib8000_state *state,s32 offset_khz) { -s16 unit_khz_dds_val; +s32 unit_khz_dds_val;u32 abs_offset_khz =abs (offset_khz);u32 dds = state->cfg.pll->ifreq &0x1ffffff ;u8 invert = !!(state->cfg.pll->ifreq & (1 <<25 ));
@@ -2716,7 +2716,7 @@ static void dib8000_set_dds(struct dib8000_state *state, s32 offset_khz) dds = (1 <<26 ) - dds; }else { ratio =2 ; - unit_khz_dds_val = (u16) (67108864 / state->cfg.pll->internal); + unit_khz_dds_val =67108864 / state->cfg.pll->internal;if (offset_khz <0 ) unit_khz_dds_val *=-1 ;
drivers/media/i2c/imx283.c +10 -5
@@ -129,7 +129,8 @@/* Master Mode Operation Control */ #define IMX283_REG_XMSTA CCI_REG8(0x3105) -#define IMX283_XMSTA BIT(0) +#define IMX283_XMSTA_START 0 +#define IMX283_XMSTA_STOP BIT(0)#define IMX283_REG_SYNCDRV CCI_REG8(0x3107)#define IMX283_SYNCDRV_XHS_XVS (0xa0 | 0x02)
@@ -1023,8 +1024,6 @@ static int imx283_standby_cancel(struct imx283 *imx283)usleep_range (19000 ,20000 );cci_write (imx283->cci,IMX283_REG_CLAMP ,IMX283_CLPSQRST , &ret); -cci_write (imx283->cci,IMX283_REG_XMSTA ,0 , &ret); -cci_write (imx283->cci,IMX283_REG_SYNCDRV ,IMX283_SYNCDRV_XHS_XVS , &ret);return ret; }
@@ -1117,6 +1116,10 @@ static int imx283_start_streaming(struct imx283 *imx283,/* Apply customized values from controls (HMAX/VMAX/SHR) */ ret =__v4l2_ctrl_handler_setup (imx283->sd.ctrl_handler); +/* Start master mode */ +cci_write (imx283->cci,IMX283_REG_XMSTA ,IMX283_XMSTA_START , &ret); +cci_write (imx283->cci,IMX283_REG_SYNCDRV ,IMX283_SYNCDRV_XHS_XVS , &ret); +return ret; }
@@ -1153,12 +1156,14 @@ static int imx283_disable_streams(struct v4l2_subdev *sd, u64 streams_mask) {struct imx283 *imx283 =to_imx283 (sd); -int ret; +int ret =0 ;if (pad !=IMAGE_PAD )return -EINVAL ; - ret =cci_write (imx283->cci,IMX283_REG_STANDBY ,IMX283_STBLOGIC ,NULL ); +cci_write (imx283->cci,IMX283_REG_XMSTA ,IMX283_XMSTA_STOP , &ret); +cci_write (imx283->cci,IMX283_REG_STANDBY ,IMX283_STANDBY , &ret); +if (ret)dev_err (imx283->dev,"Failed to stop stream\n" );
drivers/media/i2c/imx412.c +1 -1
@@ -925,7 +925,7 @@ static int imx412_parse_hw_config(struct imx412 *imx412)/* Request optional reset pin */ imx412->reset_gpio =devm_gpiod_get_optional (imx412->dev,"reset" , -GPIOD_OUT_LOW ); +GPIOD_OUT_HIGH );if (IS_ERR (imx412->reset_gpio)) {dev_err (imx412->dev,"failed to get reset gpio %pe\n" , imx412->reset_gpio);
drivers/media/i2c/ov08d10.c +10 -11
@@ -217,7 +217,7 @@ static const struct ov08d10_reg lane_2_mode_3280x2460[] = { {0x9a, 0x30}, {0xa8, 0x02}, {0xfd, 0x02}, - {0xa1, 0x01}, + {0xa1, 0x00}, {0xa2, 0x09}, {0xa3, 0x9c}, {0xa5, 0x00},
@@ -335,7 +335,7 @@ static const struct ov08d10_reg lane_2_mode_3264x2448[] = { {0x9a, 0x30}, {0xa8, 0x02}, {0xfd, 0x02}, - {0xa1, 0x09}, + {0xa1, 0x08}, {0xa2, 0x09}, {0xa3, 0x90}, {0xa5, 0x08},
@@ -467,7 +467,7 @@ static const struct ov08d10_reg lane_2_mode_1632x1224[] = { {0xaa, 0xd0}, {0xab, 0x06}, {0xac, 0x68}, - {0xa1, 0x09}, + {0xa1, 0x04}, {0xa2, 0x04}, {0xa3, 0xc8}, {0xa5, 0x04},
@@ -613,8 +613,8 @@ static const struct ov08d10_lane_cfg lane_cfg_2 = {static u32 ov08d10_get_format_code (struct ov08d10 *ov08d10) {static const u32 codes[2 ][2 ] = { - {MEDIA_BUS_FMT_SGRBG10_1X10 ,MEDIA_BUS_FMT_SRGGB10_1X10 }, - {MEDIA_BUS_FMT_SBGGR10_1X10 ,MEDIA_BUS_FMT_SGBRG10_1X10 }, + {MEDIA_BUS_FMT_SBGGR10_1X10 ,MEDIA_BUS_FMT_SGBRG10_1X10 }, + {MEDIA_BUS_FMT_SGRBG10_1X10 ,MEDIA_BUS_FMT_SRGGB10_1X10 }, };return codes[ov08d10->vflip->val][ov08d10->hflip->val];
@@ -1430,6 +1430,9 @@ static int ov08d10_probe(struct i2c_client *client) goto probe_error_v4l2_ctrl_handler_free; } +pm_runtime_set_active (ov08d10->dev); +pm_runtime_enable (ov08d10->dev); + ret =v4l2_async_register_subdev_sensor (&ov08d10->sd);if (ret <0 ) { dev_err(ov08d10->dev, "failed to register V4L2 subdev: %d",
@@ -1437,17 +1440,13 @@ static int ov08d10_probe(struct i2c_client *client) goto probe_error_media_entity_cleanup; } -/* -* Device is already turned on by i2c-core with ACPI domain PM. -* Enable runtime PM and turn off the device. -*/ -pm_runtime_set_active (ov08d10->dev); -pm_runtime_enable (ov08d10->dev);pm_runtime_idle (ov08d10->dev);return 0 ; probe_error_media_entity_cleanup: +pm_runtime_disable (ov08d10->dev); +pm_runtime_set_suspended (ov08d10->dev);media_entity_cleanup (&ov08d10->sd.entity); probe_error_v4l2_ctrl_handler_free:
drivers/media/i2c/ov5647.c +6 -6
@@ -967,21 +967,21 @@ static int ov5647_s_ctrl(struct v4l2_ctrl *ctrl)break ;case V4L2_CID_AUTOGAIN :/* Non-zero turns on AGC by clearing bit 1.*/ -return cci_update_bits (sensor->regmap,OV5647_REG_AEC_AGC ,BIT (1 ), - ctrl->val ?0 :BIT (1 ),NULL ); + ret =cci_update_bits (sensor->regmap,OV5647_REG_AEC_AGC ,BIT (1 ), + ctrl->val ?0 :BIT (1 ),NULL );break ;case V4L2_CID_EXPOSURE_AUTO :/* * Everything except V4L2_EXPOSURE_MANUAL turns on AEC by * clearing bit 0. */ -return cci_update_bits (sensor->regmap,OV5647_REG_AEC_AGC ,BIT (0 ), - ctrl->val ==V4L2_EXPOSURE_MANUAL ?BIT (0 ) :0 ,NULL ); + ret =cci_update_bits (sensor->regmap,OV5647_REG_AEC_AGC ,BIT (0 ), + ctrl->val ==V4L2_EXPOSURE_MANUAL ?BIT (0 ) :0 ,NULL );break ;case V4L2_CID_ANALOGUE_GAIN :/* 10 bits of gain, 2 in the high register. */ -return cci_write (sensor->regmap,OV5647_REG_GAIN , - ctrl->val &0x3ff ,NULL ); + ret =cci_write (sensor->regmap,OV5647_REG_GAIN , + ctrl->val &0x3ff ,NULL );break ;case V4L2_CID_EXPOSURE :/*
drivers/media/i2c/ov8856.c +8 -2
@@ -1951,12 +1951,18 @@ static int ov8856_init_controls(struct ov8856 *ov8856) V4L2_CID_HFLIP, 0, 1, 1, 0);v4l2_ctrl_new_std (ctrl_hdlr, &ov8856_ctrl_ops,V4L2_CID_VFLIP ,0 ,1 ,1 ,0 ); -if (ctrl_hdlr->error) -return ctrl_hdlr->error; +if (ctrl_hdlr->error) { + ret = ctrl_hdlr->error; + goto err_ctrl_handler_free; + } ov8856->sd.ctrl_handler = ctrl_hdlr;return 0 ; + +err_ctrl_handler_free: +v4l2_ctrl_handler_free (ctrl_hdlr); +return ret; } static void ov8856_update_pad_format(struct ov8856 *ov8856,
drivers/media/pci/intel/ipu-bridge.c +14 -0
@@ -104,6 +104,13 @@ static const struct ipu_sensor_config ipu_supported_sensors[] = {* without reporting a rotation of 180° in neither the SSDB nor the _PLD. */ static const struct dmi_system_id upside_down_sensor_dmi_ids[] = { + { + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ), +DMI_EXACT_MATCH (DMI_PRODUCT_NAME ,"XPS 13 9340" ), + }, + .driver_data ="OVTI02C1" , + }, { .matches = {DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ),
@@ -111,6 +118,13 @@ static const struct dmi_system_id upside_down_sensor_dmi_ids[] = { }, .driver_data = "OVTI02C1", }, + { + .matches = { +DMI_EXACT_MATCH (DMI_SYS_VENDOR ,"Dell Inc." ), + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "XPS 14 9440"), + }, + .driver_data = "OVTI02C1", + }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
drivers/media/pci/intel/ipu6/ipu6.c +1 -1
@@ -686,7 +686,7 @@ static int ipu6_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) out_ipu6_rpm_put:pm_runtime_put_sync (&isp->psys->auxdev.dev); out_ipu6_bus_del_devices: -if (isp->psys) { +if (!IS_ERR_OR_NULL (isp->psys)) {ipu6_cpd_free_pkg_dir (isp->psys);ipu6_buttress_unmap_fw_image (isp->psys, &isp->psys->fw_sgt); }
drivers/media/pci/saa7164/saa7164-core.c +35 -12
78 lines not on this page · raw message
drivers/media/pci/zoran/zoran_card.c +1 -1
@@ -1373,7 +1373,7 @@ static int zoran_probe(struct pci_dev *pdev, const struct pci_device_id *ent) }if (zr->codec->type != zr->card.video_codec) {pci_err (pdev,"%s - wrong codec\n" , __func__); - goto zr_unreg_videocodec; + goto zr_detach_codec; } }if (zr->card.video_vfe !=0 ) {
drivers/media/platform/arm/mali-c55/mali-c55-common.h +2 -0
@@ -306,5 +306,7 @@ bool mali_c55_pipeline_ready(struct mali_c55 *mali_c55);void mali_c55_stats_fill_buffer (struct mali_c55 *mali_c55,enum mali_c55_config_spaces cfg_space);void mali_c55_params_write_config (struct mali_c55 *mali_c55); +void mali_c55_params_init_isp_config (struct mali_c55 *mali_c55, +const struct v4l2_subdev_state *state);#endif /* _MALI_C55_COMMON_H */
drivers/media/platform/arm/mali-c55/mali-c55-core.c +0 -35
@@ -663,41 +663,6 @@ static int mali_c55_init_context(struct mali_c55 *mali_c55, mali_c55->base + config_space_addrs[MALI_C55_CONFIG_PING ], MALI_C55_CONFIG_SPACE_SIZE); -/* -* Some features of the ISP need to be disabled by default and only -* enabled at the same time as they're configured by a parameters buffer -*/ - -/* Bypass the sqrt and square compression and expansion modules */ -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_BYPASS_1 , -MALI_C55_REG_BYPASS_1_FE_SQRT , -MALI_C55_REG_BYPASS_1_FE_SQRT ); -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_BYPASS_3 , -MALI_C55_REG_BYPASS_3_SQUARE_BE , -MALI_C55_REG_BYPASS_3_SQUARE_BE ); - -/* Bypass the temper module */ -mali_c55_ctx_write (mali_c55,MALI_C55_REG_BYPASS_2 , -MALI_C55_REG_BYPASS_2_TEMPER ); - -/* Disable the temper module's DMA read/write */ -mali_c55_ctx_write (mali_c55,MALI_C55_REG_TEMPER_DMA_IO ,0x0 ); - -/* Bypass the colour noise reduction */ -mali_c55_ctx_write (mali_c55,MALI_C55_REG_BYPASS_4 , -MALI_C55_REG_BYPASS_4_CNR ); - -/* Disable the sinter module */ -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_SINTER_CONFIG , -MALI_C55_SINTER_ENABLE_MASK ,0 ); - -/* Disable the RGB Gamma module for each output */ -mali_c55_ctx_write (mali_c55,MALI_C55_REG_FR_GAMMA_RGB_ENABLE ,0 ); -mali_c55_ctx_write (mali_c55,MALI_C55_REG_DS_GAMMA_RGB_ENABLE ,0 ); - -/* Disable the colour correction matrix */ -mali_c55_ctx_write (mali_c55,MALI_C55_REG_CCM_ENABLE ,0 ); -return 0 ; }
drivers/media/platform/arm/mali-c55/mali-c55-isp.c +5 -32
@@ -112,9 +112,6 @@ static int mali_c55_isp_start(struct mali_c55 *mali_c55, const struct v4l2_subdev_state *state) {struct mali_c55_context *ctx =mali_c55_get_active_context (mali_c55); -const struct mali_c55_isp_format_info *cfg; -const struct v4l2_mbus_framefmt *format; -const struct v4l2_rect *crop;u32 val;int ret;
@@ -122,35 +119,11 @@ static int mali_c55_isp_start(struct mali_c55 *mali_c55,MALI_C55_REG_MCU_CONFIG_WRITE_MASK , MALI_C55_REG_MCU_CONFIG_WRITE_PING); -/* Apply input windowing */ - crop =v4l2_subdev_state_get_crop (state,MALI_C55_ISP_PAD_SINK_VIDEO ); - format =v4l2_subdev_state_get_format (state, -MALI_C55_ISP_PAD_SINK_VIDEO ); - cfg =mali_c55_isp_get_mbus_config_by_code (format->code); - -mali_c55_write (mali_c55,MALI_C55_REG_HC_START , -MALI_C55_HC_START (crop->left)); -mali_c55_write (mali_c55,MALI_C55_REG_HC_SIZE , -MALI_C55_HC_SIZE (crop->width)); -mali_c55_write (mali_c55,MALI_C55_REG_VC_START_SIZE , -MALI_C55_VC_START (crop->top) | -MALI_C55_VC_SIZE (crop->height)); -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_BASE_ADDR , -MALI_C55_REG_ACTIVE_WIDTH_MASK , format->width); -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_BASE_ADDR , -MALI_C55_REG_ACTIVE_HEIGHT_MASK , - format->height <<16 ); -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_BAYER_ORDER , -MALI_C55_BAYER_ORDER_MASK , cfg->order); -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_INPUT_WIDTH , -MALI_C55_INPUT_WIDTH_MASK , -MALI_C55_INPUT_WIDTH_20BIT ); - -mali_c55_ctx_update_bits (mali_c55,MALI_C55_REG_ISP_RAW_BYPASS , -MALI_C55_ISP_RAW_BYPASS_BYPASS_MASK , - cfg->bypass ?MALI_C55_ISP_RAW_BYPASS_BYPASS_MASK : -0x00 ); - +/* +* Apply default ISP configuration and the apply configurations from +* the first available parameters buffer. +*/ +mali_c55_params_init_isp_config (mali_c55, state);mali_c55_params_write_config (mali_c55); ret =mali_c55_config_write (ctx,MALI_C55_CONFIG_PING , true);if (ret) {
drivers/media/platform/arm/mali-c55/mali-c55-params.c +122 -0
128 lines not on this page · raw message
drivers/media/platform/arm/mali-c55/mali-c55-registers.h +2 -2
@@ -128,8 +128,8 @@ enum mali_c55_interrupts {#define MALI_C55_REG_BYPASS_3_SENSOR_OFFSET_PRE_SH BIT(1)#define MALI_C55_REG_BYPASS_3_MESH_SHADING BIT(3)#define MALI_C55_REG_BYPASS_3_WHITE_BALANCE BIT(4) -#define MALI_C55_REG_BYPASS_3_IRIDIX BIT(5) -#define MALI_C55_REG_BYPASS_3_IRIDIX_GAIN BIT(6) +#define MALI_C55_REG_BYPASS_3_IRIDIX_GAIN BIT(5) +#define MALI_C55_REG_BYPASS_3_IRIDIX BIT(6)#define MALI_C55_REG_BYPASS_4 0x18ec0#define MALI_C55_REG_BYPASS_4_DEMOSAIC_RGB BIT(1)#define MALI_C55_REG_BYPASS_4_PF_CORRECTION BIT(3)
drivers/media/platform/chips-media/wave5/wave5-vdi.c +1 -0
@@ -49,6 +49,7 @@ int wave5_vdi_init(struct device *dev)if (!PRODUCT_CODE_W_SERIES (vpu_dev->product_code)) {WARN_ONCE (1 ,"unsupported product code: 0x%x\n" , vpu_dev->product_code); +wave5_vdi_free_dma_memory (vpu_dev, &vpu_dev->common_mem);return -EOPNOTSUPP ; }
drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c +13 -1
@@ -1303,13 +1303,17 @@ static void wave5_vpu_dec_buf_queue_dst(struct vb2_buffer *vb)if (vb2_is_streaming (vb->vb2_queue) &&v4l2_m2m_dst_buf_is_last (m2m_ctx)) {unsigned int i; +unsigned long flags;for (i =0 ; i < vb->num_planes; i++)vb2_set_plane_payload (vb, i,0 ); vbuf->field =V4L2_FIELD_NONE ; +spin_lock_irqsave (&inst->state_spinlock, flags);send_eos_event (inst); +spin_unlock_irqrestore (&inst->state_spinlock, flags); +v4l2_m2m_last_buffer_done (m2m_ctx, vbuf); }else {v4l2_m2m_buf_queue (m2m_ctx, vbuf);
@@ -1462,8 +1466,13 @@ static int streamoff_output(struct vb2_queue *q) inst->codec_info->dec_info.stream_rd_ptr = new_rd_ptr; inst->codec_info->dec_info.stream_wr_ptr = new_rd_ptr; -if (v4l2_m2m_has_stopped (m2m_ctx)) +if (v4l2_m2m_has_stopped (m2m_ctx)) { +unsigned long flags; + +spin_lock_irqsave (&inst->state_spinlock, flags);send_eos_event (inst); +spin_unlock_irqrestore (&inst->state_spinlock, flags); + }/* streamoff on output cancels any draining operation */ inst->eos = false;
@@ -1584,6 +1593,7 @@ static int initialize_sequence(struct vpu_instance *inst) {struct dec_initial_info initial_info;int ret =0 ; +unsigned long flags;memset (&initial_info,0 ,sizeof (struct dec_initial_info ));
@@ -1605,7 +1615,9 @@ static int initialize_sequence(struct vpu_instance *inst)return ret; } +spin_lock_irqsave (&inst->state_spinlock, flags);handle_dynamic_resolution_change (inst); +spin_unlock_irqrestore (&inst->state_spinlock, flags);return 0 ; }
drivers/media/platform/nxp/imx8-isi/imx8-isi-video.c +1 -1
@@ -1410,7 +1410,7 @@ int mxc_isi_video_register(struct mxc_isi_pipe *pipe, q->mem_ops = &vb2_dma_contig_memops; q->buf_struct_size =sizeof (struct mxc_isi_buffer ); q->timestamp_flags =V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC ; - q->min_queued_buffers =2 ; + q->min_queued_buffers =0 ; q->lock = &video->lock; q->dev = pipe->isi->dev;
drivers/media/platform/qcom/camss/camss-csid-gen3.c +3 -3
@@ -48,9 +48,9 @@#define IS_CSID_690 (csid) ((csid->camss->res->version == CAMSS_8775P) \ || (csid->camss->res->version == CAMSS_8300))#define CSID_BUF_DONE_IRQ_STATUS 0x8C -#define BUF_DONE_IRQ_STATUS_RDI_OFFSET (csid_is_lite(csid) ?\ - 1 : (IS_CSID_690(csid) ?\ - 13 : 14)) +#define BUF_DONE_IRQ_STATUS_RDI_OFFSET (csid_is_lite(csid) ? \ + ((IS_CSID_690(csid) ? 0 : 1)) : \ + ((IS_CSID_690(csid) ? 13 : 14)))#define CSID_BUF_DONE_IRQ_MASK 0x90#define CSID_BUF_DONE_IRQ_CLEAR 0x94#define CSID_BUF_DONE_IRQ_SET 0x98
drivers/media/platform/qcom/camss/camss.c +40 -40
175 lines not on this page · raw message
drivers/media/platform/qcom/iris/Kconfig +1 -1
@@ -3,7 +3,7 @@ config VIDEO_QCOM_IRIS depends on VIDEO_DEV depends on ARCH_QCOM || COMPILE_TEST select V4L2_MEM2MEM_DEV - select QCOM_MDT_LOADER if ARCH_QCOM + select QCOM_MDT_LOADER select QCOM_SCM select VIDEOBUF2_DMA_CONTIG help
drivers/media/platform/qcom/iris/iris_buffer.c +4 -2
@@ -582,10 +582,12 @@ static int iris_release_internal_buffers(struct iris_inst *inst,continue ;if (!(buffer->attr &BUF_ATTR_QUEUED ))continue ; + buffer->attr |=BUF_ATTR_PENDING_RELEASE ; ret = hfi_ops->session_release_buf (inst, buffer); -if (ret) +if (ret) { + buffer->attr &= ~BUF_ATTR_PENDING_RELEASE ;return ret; - buffer->attr |=BUF_ATTR_PENDING_RELEASE ; + } }return 0 ;
drivers/media/platform/qcom/iris/iris_core.c +4 -0
@@ -75,6 +75,10 @@ int iris_core_init(struct iris_core *core)if (ret) goto error_unload_fw; + ret =iris_vpu_switch_to_hwmode (core); +if (ret) + goto error_unload_fw; + ret =iris_hfi_core_init (core);if (ret) goto error_unload_fw;
drivers/media/platform/qcom/iris/iris_hfi_common.c +4 -0
@@ -159,6 +159,10 @@ int iris_hfi_pm_resume(struct iris_core *core)if (ret) goto err_suspend_hw; + ret =iris_vpu_switch_to_hwmode (core); +if (ret) + goto err_suspend_hw; + ret = ops->sys_interframe_powercollapse (core);if (ret) goto err_suspend_hw;
drivers/media/platform/qcom/iris/iris_hfi_queue.c +1 -1
@@ -263,7 +263,7 @@ int iris_hfi_queues_init(struct iris_core *core) GFP_KERNEL, DMA_ATTR_WRITE_COMBINE);if (!core->sfr_vaddr) {dev_err (core->dev,"sfr alloc and map failed\n" ); -dma_free_attrs (core->dev,sizeof (*q_tbl_hdr), core->iface_q_table_vaddr, +dma_free_attrs (core->dev, queue_size, core->iface_q_table_vaddr, core->iface_q_table_daddr,DMA_ATTR_WRITE_COMBINE );return -ENOMEM ; }
drivers/media/platform/qcom/iris/iris_vdec.c +0 -6
@@ -61,12 +61,6 @@ int iris_vdec_inst_init(struct iris_inst *inst)return iris_ctrls_init (inst); } -void iris_vdec_inst_deinit (struct iris_inst *inst) -{ -kfree (inst->fmt_dst); -kfree (inst->fmt_src); -} -static const struct iris_fmt iris_vdec_formats_cap[] = { [IRIS_FMT_NV12 ] = { .pixfmt =V4L2_PIX_FMT_NV12 ,
drivers/media/platform/qcom/iris/iris_vdec.h +0 -1
@@ -9,7 +9,6 @@struct iris_inst ;int iris_vdec_inst_init (struct iris_inst *inst); -void iris_vdec_inst_deinit (struct iris_inst *inst);int iris_vdec_enum_fmt (struct iris_inst *inst,struct v4l2_fmtdesc *f);int iris_vdec_try_fmt (struct iris_inst *inst,struct v4l2_format *f);int iris_vdec_s_fmt (struct iris_inst *inst,struct v4l2_format *f);
drivers/media/platform/qcom/iris/iris_venc.c +0 -6
@@ -79,12 +79,6 @@ int iris_venc_inst_init(struct iris_inst *inst)return iris_ctrls_init (inst); } -void iris_venc_inst_deinit (struct iris_inst *inst) -{ -kfree (inst->fmt_dst); -kfree (inst->fmt_src); -} -static const struct iris_fmt iris_venc_formats_cap[] = { [IRIS_FMT_H264 ] = { .pixfmt =V4L2_PIX_FMT_H264 ,
drivers/media/platform/qcom/iris/iris_venc.h +0 -1
@@ -9,7 +9,6 @@struct iris_inst ;int iris_venc_inst_init (struct iris_inst *inst); -void iris_venc_inst_deinit (struct iris_inst *inst);int iris_venc_enum_fmt (struct iris_inst *inst,struct v4l2_fmtdesc *f);int iris_venc_try_fmt (struct iris_inst *inst,struct v4l2_format *f);int iris_venc_s_fmt (struct iris_inst *inst,struct v4l2_format *f);
drivers/media/platform/qcom/iris/iris_vidc.c +2 -4
@@ -289,10 +289,6 @@ int iris_close(struct file *filp)v4l2_m2m_ctx_release (inst->m2m_ctx);v4l2_m2m_release (inst->m2m_dev);mutex_lock (&inst->lock); -if (inst->domain ==DECODER ) -iris_vdec_inst_deinit (inst); -else if (inst->domain ==ENCODER ) -iris_venc_inst_deinit (inst);iris_session_close (inst);iris_inst_change_state (inst,IRIS_INST_DEINIT );iris_v4l2_fh_deinit (inst, filp);
@@ -304,6 +300,8 @@ int iris_close(struct file *filp)mutex_unlock (&inst->lock);mutex_destroy (&inst->ctx_q_lock);mutex_destroy (&inst->lock); +kfree (inst->fmt_src); +kfree (inst->fmt_dst);kfree (inst);return 0 ;
drivers/media/platform/qcom/iris/iris_vpu2.c +1 -0
@@ -44,4 +44,5 @@ const struct vpu_ops iris_vpu2_ops = { .power_off_controller = iris_vpu_power_off_controller, .power_on_controller = iris_vpu_power_on_controller, .calc_freq = iris_vpu2_calc_freq, + .set_hwmode = iris_vpu_set_hwmode, };
drivers/media/platform/qcom/iris/iris_vpu3x.c +3 -6
@@ -234,14 +234,8 @@ static int iris_vpu35_power_on_hw(struct iris_core *core)if (ret) goto err_disable_hw_free_clk; - ret =dev_pm_genpd_set_hwmode (core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN ], true); -if (ret) - goto err_disable_hw_clk; -return 0 ; -err_disable_hw_clk: -iris_disable_unprepare_clock (core,IRIS_HW_CLK ); err_disable_hw_free_clk:iris_disable_unprepare_clock (core,IRIS_HW_FREERUN_CLK ); err_disable_axi_clk:
@@ -266,6 +260,7 @@ const struct vpu_ops iris_vpu3_ops = { .power_off_controller = iris_vpu_power_off_controller, .power_on_controller = iris_vpu_power_on_controller, .calc_freq = iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode = iris_vpu_set_hwmode, };const struct vpu_ops iris_vpu33_ops = {
@@ -274,6 +269,7 @@ const struct vpu_ops iris_vpu33_ops = { .power_off_controller = iris_vpu33_power_off_controller, .power_on_controller = iris_vpu_power_on_controller, .calc_freq = iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode = iris_vpu_set_hwmode, };const struct vpu_ops iris_vpu35_ops = {
@@ -283,4 +279,5 @@ const struct vpu_ops iris_vpu35_ops = { .power_on_controller = iris_vpu35_vpu4x_power_on_controller, .program_bootup_registers = iris_vpu35_vpu4x_program_bootup_registers, .calc_freq = iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode = iris_vpu_set_hwmode, };
drivers/media/platform/qcom/iris/iris_vpu4x.c +13 -11
@@ -252,21 +252,10 @@ static int iris_vpu4x_power_on_hardware(struct iris_core *core) ret =iris_vpu4x_power_on_apv (core);if (ret) goto disable_hw_clocks; - -iris_vpu4x_ahb_sync_reset_apv (core); } -iris_vpu4x_ahb_sync_reset_hardware (core); - - ret =iris_vpu4x_genpd_set_hwmode (core, true, efuse_value); -if (ret) - goto disable_apv_power_domain; -return 0 ; -disable_apv_power_domain: -if (!(efuse_value &DISABLE_VIDEO_APV_BIT )) -iris_vpu4x_power_off_apv (core); disable_hw_clocks:iris_vpu4x_disable_hardware_clocks (core, efuse_value); disable_vpp1_power_domain:
@@ -359,6 +348,18 @@ static void iris_vpu4x_power_off_hardware(struct iris_core *core)iris_disable_power_domains (core, core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN ]); } +static int iris_vpu4x_set_hwmode (struct iris_core *core) +{ +u32 efuse_value =readl (core->reg_base +WRAPPER_EFUSE_MONITOR ); + +if (!(efuse_value &DISABLE_VIDEO_APV_BIT )) +iris_vpu4x_ahb_sync_reset_apv (core); + +iris_vpu4x_ahb_sync_reset_hardware (core); + +return iris_vpu4x_genpd_set_hwmode (core, true, efuse_value); +} +const struct vpu_ops iris_vpu4x_ops = { .power_off_hw = iris_vpu4x_power_off_hardware, .power_on_hw = iris_vpu4x_power_on_hardware,
@@ -366,4 +367,5 @@ const struct vpu_ops iris_vpu4x_ops = { .power_on_controller = iris_vpu35_vpu4x_power_on_controller, .program_bootup_registers = iris_vpu35_vpu4x_program_bootup_registers, .calc_freq = iris_vpu3x_vpu4x_calculate_frequency, + .set_hwmode = iris_vpu4x_set_hwmode, };
drivers/media/platform/qcom/iris/iris_vpu_buffer.h +1 -1
@@ -67,7 +67,7 @@ struct iris_inst;#define SIZE_DOLBY_RPU_METADATA (41 * 1024)#define H264_CABAC_HDR_RATIO_HD_TOT 1#define H264_CABAC_RES_RATIO_HD_TOT 3 -#define H265D_MAX_SLICE 1200 +#define H265D_MAX_SLICE 3600#define SIZE_H265D_HW_PIC_T SIZE_H264D_HW_PIC_T#define H265_CABAC_HDR_RATIO_HD_TOT 2#define H265_CABAC_RES_RATIO_HD_TOT 2
drivers/media/platform/qcom/iris/iris_vpu_common.c +10 -6
@@ -292,14 +292,8 @@ int iris_vpu_power_on_hw(struct iris_core *core)if (ret && ret != -ENOENT ) goto err_disable_hw_clock; - ret =dev_pm_genpd_set_hwmode (core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN ], true); -if (ret) - goto err_disable_hw_ahb_clock; -return 0 ; -err_disable_hw_ahb_clock: -iris_disable_unprepare_clock (core,IRIS_HW_AHB_CLK ); err_disable_hw_clock:iris_disable_unprepare_clock (core,IRIS_HW_CLK ); err_disable_power:
@@ -308,6 +302,16 @@ int iris_vpu_power_on_hw(struct iris_core *core)return ret; } +int iris_vpu_set_hwmode (struct iris_core *core) +{ +return dev_pm_genpd_set_hwmode (core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN ], true); +} + +int iris_vpu_switch_to_hwmode (struct iris_core *core) +{ +return core->iris_platform_data->vpu_ops->set_hwmode (core); +} +int iris_vpu35_vpu4x_power_off_controller (struct iris_core *core) {u32 clk_rst_tbl_size = core->iris_platform_data->clk_rst_tbl_size;
drivers/media/platform/qcom/iris/iris_vpu_common.h +3 -0
@@ -21,6 +21,7 @@ struct vpu_ops {int (*power_on_controller)(struct iris_core *core);void (*program_bootup_registers)(struct iris_core *core);u64 (*calc_freq)(struct iris_inst *inst,size_t data_size); +int (*set_hwmode)(struct iris_core *core); };int iris_vpu_boot_firmware (struct iris_core *core);
@@ -30,6 +31,8 @@ int iris_vpu_watchdog(struct iris_core *core, u32 intr_status);int iris_vpu_prepare_pc (struct iris_core *core);int iris_vpu_power_on_controller (struct iris_core *core);int iris_vpu_power_on_hw (struct iris_core *core); +int iris_vpu_set_hwmode (struct iris_core *core); +int iris_vpu_switch_to_hwmode (struct iris_core *core);int iris_vpu_power_on (struct iris_core *core);int iris_vpu_power_off_controller (struct iris_core *core);void iris_vpu_power_off_hw (struct iris_core *core);
drivers/media/platform/qcom/venus/Kconfig +1 -1
@@ -4,7 +4,7 @@ config VIDEO_QCOM_VENUS depends on VIDEO_DEV && QCOM_SMEM depends on (ARCH_QCOM && ARM64 && IOMMU_API) || COMPILE_TEST select OF_DYNAMIC if ARCH_QCOM - select QCOM_MDT_LOADER if ARCH_QCOM + select QCOM_MDT_LOADER select QCOM_SCM select VIDEOBUF2_DMA_CONTIG select V4L2_MEM2MEM_DEV
drivers/media/platform/renesas/rcar-vin/rcar-dma.c +22 -0
@@ -676,8 +676,30 @@ void rvin_crop_scale_comp(struct rvin_dev *vin)if (vin->scaler) vin->scaler (vin); +/* +* VNIS_REG has four lowest bits always 0, i.e. the stride has to be +* aligned to 16 bytes. This is done in rvin_format_bytesperline(). +*/ + fmt =rvin_format_from_pixel (vin, vin->format.pixelformat); stride = vin->format.bytesperline / fmt->bpp; + +/* +* RAW8 format bpp is 1, but the hardware process RAW8 format in 2 pixel +* units, so we need to divide the stride by 2. +*/ +switch (vin->format.pixelformat) { +case V4L2_PIX_FMT_SBGGR8 : +case V4L2_PIX_FMT_SGBRG8 : +case V4L2_PIX_FMT_SGRBG8 : +case V4L2_PIX_FMT_SRGGB8 : +case V4L2_PIX_FMT_GREY : + stride /=2 ; +break ; +default : +break ; + } +rvin_write (vin, stride,VNIS_REG ); }
drivers/media/platform/renesas/rcar-vin/rcar-v4l2.c +12 -0
@@ -155,6 +155,18 @@ static u32 rvin_format_bytesperline(struct rvin_dev *vin,case V4L2_PIX_FMT_NV16 : align =0x20 ;break ; +case V4L2_PIX_FMT_SBGGR8 : +case V4L2_PIX_FMT_SGBRG8 : +case V4L2_PIX_FMT_SGRBG8 : +case V4L2_PIX_FMT_SRGGB8 : +case V4L2_PIX_FMT_GREY : +/* +* RAW8 format bpp is 1, but the hardware process RAW8 format in +* 2 pixel units, and we need to align to 32 bytes. See +* rvin_crop_scale_comp(). +*/ + align =0x20 ; +break ;default : align =0x10 ;break ;
drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc-video.c +19 -16
@@ -149,24 +149,26 @@ static void rzv2h_ivc_transfer_buffer(struct work_struct *work) buffers.work);struct rzv2h_ivc_buf *buf; +guard (spinlock_irqsave)(&ivc->spinlock); + +if (ivc->vvalid_ifp) +return ; +/* Setup buffers */ scoped_guard(spinlock_irqsave, &ivc->buffers.lock) { buf =list_first_entry_or_null (&ivc->buffers.queue, struct rzv2h_ivc_buf, queue); - } - -if (!buf)
Lines of this file are not shown. View the raw message.
drivers/media/platform/renesas/rzv2h-ivc/rzv2h-ivc.h +5 -3
Lines of this file are not shown. View the raw message.
drivers/media/platform/renesas/vsp1/vsp1_drv.c +6 -2
Lines of this file are not shown. View the raw message.
drivers/media/platform/rockchip/rkcif/rkcif-interface.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/rockchip/rkcif/rkcif-stream.c +1 -1
Lines of this file are not shown. View the raw message.
drivers/media/platform/ti/omap3isp/ispvideo.c +1 -0
Lines of this file are not shown. View the raw message.
drivers/regulator/bd9571mwv-regulator.c +2 -1
Lines of this file are not shown. View the raw message.
drivers/staging/media/atomisp/pci/atomisp_ioctl.c +4 -0
Lines of this file are not shown. View the raw message.
drivers/staging/media/imx/imx-media-csi.c +24 -16
Lines of this file are not shown. View the raw message.
kernel/cgroup/cgroup.c +120 -134
254 lines not on this page · raw message
mm/util.c +29 -22
51 lines not on this page · raw message
net/batman-adv/bat_iv_ogm.c +60 -25
85 lines not on this page · raw message
net/batman-adv/bridge_loop_avoidance.c +10 -1
Lines of this file are not shown. View the raw message.
net/batman-adv/tp_meter.c +96 -20
116 lines not on this page · raw message
net/vmw_vsock/virtio_transport_common.c +19 -36
55 lines not on this page · raw message
tools/testing/vma/include/dup.h +20 -21
41 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
Part of the diff is not shown here. View the raw message.