Commit 6bb517df authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'drm-misc-fixes-2023-01-19' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes



A fix for vc4 to address a memory leak when allocating a buffer, a
Kconfig fix for panfrost and two fixes for i915 and fb-helper to
address some bugs with vga-switcheroo.

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Maxime Ripard <maxime@cerno.tech>
Link: https://patchwork.freedesktop.org/patch/msgid/20230119082059.h32bs7zqoxmjbcvn@houat
parents d6cf886f 2293a73a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -30,7 +30,9 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

#include <linux/console.h>
#include <linux/pci.h>
#include <linux/sysrq.h>
#include <linux/vga_switcheroo.h>

#include <drm/drm_atomic.h>
#include <drm/drm_drv.h>
@@ -1909,6 +1911,11 @@ static int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,
		return ret;

	strcpy(fb_helper->fb->comm, "[fbcon]");

	/* Set the fb info for vgaswitcheroo clients. Does nothing otherwise. */
	if (dev_is_pci(dev->dev))
		vga_switcheroo_client_fb_set(to_pci_dev(dev->dev), fb_helper->info);

	return 0;
}

+1 −4
Original line number Diff line number Diff line
@@ -1069,11 +1069,8 @@ static int i915_driver_open(struct drm_device *dev, struct drm_file *file)
 */
static void i915_driver_lastclose(struct drm_device *dev)
{
	struct drm_i915_private *i915 = to_i915(dev);

	intel_fbdev_restore_mode(dev);

	if (HAS_DISPLAY(i915))
	vga_switcheroo_process_delayed_switch();
}

+5 −1
Original line number Diff line number Diff line
@@ -19,6 +19,10 @@ static void i915_switcheroo_set_state(struct pci_dev *pdev,
		dev_err(&pdev->dev, "DRM not initialized, aborting switch.\n");
		return;
	}
	if (!HAS_DISPLAY(i915)) {
		dev_err(&pdev->dev, "Device state not initialized, aborting switch.\n");
		return;
	}

	if (state == VGA_SWITCHEROO_ON) {
		drm_info(&i915->drm, "switched on\n");
@@ -44,7 +48,7 @@ static bool i915_switcheroo_can_switch(struct pci_dev *pdev)
	 * locking inversion with the driver load path. And the access here is
	 * completely racy anyway. So don't bother with locking for now.
	 */
	return i915 && atomic_read(&i915->drm.open_count) == 0;
	return i915 && HAS_DISPLAY(i915) && atomic_read(&i915->drm.open_count) == 0;
}

static const struct vga_switcheroo_client_ops i915_switcheroo_ops = {
+2 −1
Original line number Diff line number Diff line
@@ -3,7 +3,8 @@
config DRM_PANFROST
	tristate "Panfrost (DRM support for ARM Mali Midgard/Bifrost GPUs)"
	depends on DRM
	depends on ARM || ARM64 || (COMPILE_TEST && !GENERIC_ATOMIC64)
	depends on ARM || ARM64 || COMPILE_TEST
	depends on !GENERIC_ATOMIC64    # for IOMMU_IO_PGTABLE_LPAE
	depends on MMU
	select DRM_SCHED
	select IOMMU_SUPPORT
+2 −4
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ static void vc4_bo_destroy(struct vc4_bo *bo)
		bo->validated_shader = NULL;
	}

	mutex_destroy(&bo->madv_lock);
	drm_gem_dma_free(&bo->base);
}

@@ -394,7 +395,6 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
{
	struct vc4_dev *vc4 = to_vc4_dev(dev);
	struct vc4_bo *bo;
	int ret;

	if (WARN_ON_ONCE(vc4->is_vc5))
		return ERR_PTR(-ENODEV);
@@ -406,9 +406,7 @@ struct drm_gem_object *vc4_create_object(struct drm_device *dev, size_t size)
	bo->madv = VC4_MADV_WILLNEED;
	refcount_set(&bo->usecnt, 0);

	ret = drmm_mutex_init(dev, &bo->madv_lock);
	if (ret)
		return ERR_PTR(ret);
	mutex_init(&bo->madv_lock);

	mutex_lock(&vc4->bo_lock);
	bo->label = VC4_BO_TYPE_KERNEL;