From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2A48D1C3C03 for ; Wed, 4 Dec 2024 18:50:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338242; cv=pass; b=GLijCkb/SINSU5bY3KWWgena/hSMtyJ9EQDB8Puh5XPIleJUEytPt9OOXFa8Z/jOJ5VuPfcCz7HfJL5b5kaJ31V7xspmmynoLx2+fFdXItuMA7Gak2IWuKG10JL3bvaehjlSRv6h6/Fw2EidaXaBxqnUW9HrtJTmQE54Dqlnd4I= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338242; c=relaxed/simple; bh=VrJGhKQMq9p1Mv51gL0TtTc+am4S1bLHEwrTrGcUmVc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GPM4cf4pXVqlHxcCPC8eUmhpuJ+DTX4tBaSKtHMFPeX+fxRu8OYQtWBov2eM1gO41AEM6/H0GO+PCMeCeL6k7i1B+8KaGyPa7NR/eea3sFWpJfryjZeb9nMOu7dky7HP6YuiO/6Vr2IJI9f6kjilYLOapfxL08doVmwHYH1jFuk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=j5BZCsh1; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="j5BZCsh1" ARC-Seal: i=1; a=rsa-sha256; t=1733338212; cv=none; d=zohomail.com; s=zohoarc; b=gbyyinefzZ3/Mm5Qq/0/2di7Wxe5y0SYPWG7g/AXoOOAKxVe/cjQHSbZtbW63CiTrHpEaAUT1dDFME/Dqr6gOcPdlSdw0/RnU1koTtA56BI1fkrUzwA4up/voY5wjvm7dQLTBV6Nji+AraneM+e5eXkAoZK/Hr9beAMV6JkklT0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338212; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=6fd5zxpijURCyMjZhyvR0LGRlZH+VhMgVl/NJ3JWWIs=; b=Nf9LczeAEt+NYygcc/yCkLVhkwZOAu/T5hHCLkzyyV1WwNZwNm2+adtMJqBC9T1lPiBmlcwsQl2+k8H6KyCku6TWMGVDyFJ+bEI+fqMByux9rZeBcd97MwbhkHf1UBgFV5xMosblwRqLsgph8Uw0UAiNPYeR7CouVo/sXaGM6rM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338212; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=6fd5zxpijURCyMjZhyvR0LGRlZH+VhMgVl/NJ3JWWIs=; b=j5BZCsh1qvbGw74JkN61NvygUIZnVRqGImDhyyGsFPc+RojxBTut8kCJ/pkTsK9k z9mEvPClyVWw4Us7SgsjnMo+h8h8LIroRAFoBVvizvpsZWgypRu/TEvGotEFByxF4rE Z5tjybND0MKk7RJ+Gz7AqDeHmJii97+RGMZcQxCE= Received: by mx.zohomail.com with SMTPS id 1733338210423924.0527915064695; Wed, 4 Dec 2024 10:50:10 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/9] drm/panfrost: Replace DRM driver allocation method with newer one Date: Wed, 4 Dec 2024 18:49:30 +0000 Message-ID: <20241204184945.1477677-2-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Drop the deprecated DRM driver allocation method in favour of devm_drm_dev_alloc(). Overall just make it the same as in Panthor. Also discard now superfluous generic and platform device pointers inside the main panfrost device structure. Some ancient checkpatch issues unearthed as a result of these changes were also fixed, like lines too long or double assignment in one line. Reviewed-by: Steven Price Acked-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_devfreq.c | 4 +- drivers/gpu/drm/panfrost/panfrost_device.c | 49 ++++++------- drivers/gpu/drm/panfrost/panfrost_device.h | 6 +- drivers/gpu/drm/panfrost/panfrost_drv.c | 68 +++++++------------ drivers/gpu/drm/panfrost/panfrost_dump.c | 8 +-- drivers/gpu/drm/panfrost/panfrost_gem.c | 6 +- .../gpu/drm/panfrost/panfrost_gem_shrinker.c | 4 +- drivers/gpu/drm/panfrost/panfrost_gpu.c | 49 ++++++------- drivers/gpu/drm/panfrost/panfrost_job.c | 37 +++++----- drivers/gpu/drm/panfrost/panfrost_mmu.c | 40 ++++++----- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 22 +++--- 11 files changed, 141 insertions(+), 152 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_devfreq.c b/drivers/gpu/drm/= panfrost/panfrost_devfreq.c index 3385fd3ef41a..2a26cd971d79 100644 --- a/drivers/gpu/drm/panfrost/panfrost_devfreq.c +++ b/drivers/gpu/drm/panfrost/panfrost_devfreq.c @@ -74,7 +74,7 @@ static int panfrost_devfreq_get_dev_status(struct device = *dev, =20 spin_unlock_irqrestore(&pfdevfreq->lock, irqflags); =20 - dev_dbg(pfdev->dev, "busy %lu total %lu %lu %% freq %lu MHz\n", + dev_dbg(pfdev->base.dev, "busy %lu total %lu %lu %% freq %lu MHz\n", status->busy_time, status->total_time, status->busy_time / (status->total_time / 100), status->current_frequency / 1000 / 1000); @@ -119,7 +119,7 @@ int panfrost_devfreq_init(struct panfrost_device *pfdev) int ret; struct dev_pm_opp *opp; unsigned long cur_freq; - struct device *dev =3D &pfdev->pdev->dev; + struct device *dev =3D pfdev->base.dev; struct devfreq *devfreq; struct thermal_cooling_device *cooling; struct panfrost_devfreq *pfdevfreq =3D &pfdev->pfdevfreq; diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index a45e4addcc19..4fe29286bbe3 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -20,9 +20,9 @@ =20 static int panfrost_reset_init(struct panfrost_device *pfdev) { - pfdev->rstc =3D devm_reset_control_array_get_optional_exclusive(pfdev->de= v); + pfdev->rstc =3D devm_reset_control_array_get_optional_exclusive(pfdev->ba= se.dev); if (IS_ERR(pfdev->rstc)) { - dev_err(pfdev->dev, "get reset failed %ld\n", PTR_ERR(pfdev->rstc)); + dev_err(pfdev->base.dev, "get reset failed %ld\n", PTR_ERR(pfdev->rstc)); return PTR_ERR(pfdev->rstc); } =20 @@ -39,22 +39,22 @@ static int panfrost_clk_init(struct panfrost_device *pf= dev) int err; unsigned long rate; =20 - pfdev->clock =3D devm_clk_get(pfdev->dev, NULL); + pfdev->clock =3D devm_clk_get(pfdev->base.dev, NULL); if (IS_ERR(pfdev->clock)) { - dev_err(pfdev->dev, "get clock failed %ld\n", PTR_ERR(pfdev->clock)); + dev_err(pfdev->base.dev, "get clock failed %ld\n", PTR_ERR(pfdev->clock)= ); return PTR_ERR(pfdev->clock); } =20 rate =3D clk_get_rate(pfdev->clock); - dev_info(pfdev->dev, "clock rate =3D %lu\n", rate); + dev_info(pfdev->base.dev, "clock rate =3D %lu\n", rate); =20 err =3D clk_prepare_enable(pfdev->clock); if (err) return err; =20 - pfdev->bus_clock =3D devm_clk_get_optional(pfdev->dev, "bus"); + pfdev->bus_clock =3D devm_clk_get_optional(pfdev->base.dev, "bus"); if (IS_ERR(pfdev->bus_clock)) { - dev_err(pfdev->dev, "get bus_clock failed %ld\n", + dev_err(pfdev->base.dev, "get bus_clock failed %ld\n", PTR_ERR(pfdev->bus_clock)); err =3D PTR_ERR(pfdev->bus_clock); goto disable_clock; @@ -62,7 +62,7 @@ static int panfrost_clk_init(struct panfrost_device *pfde= v) =20 if (pfdev->bus_clock) { rate =3D clk_get_rate(pfdev->bus_clock); - dev_info(pfdev->dev, "bus_clock rate =3D %lu\n", rate); + dev_info(pfdev->base.dev, "bus_clock rate =3D %lu\n", rate); =20 err =3D clk_prepare_enable(pfdev->bus_clock); if (err) @@ -87,7 +87,7 @@ static int panfrost_regulator_init(struct panfrost_device= *pfdev) { int ret, i; =20 - pfdev->regulators =3D devm_kcalloc(pfdev->dev, pfdev->comp->num_supplies, + pfdev->regulators =3D devm_kcalloc(pfdev->base.dev, pfdev->comp->num_supp= lies, sizeof(*pfdev->regulators), GFP_KERNEL); if (!pfdev->regulators) @@ -96,12 +96,12 @@ static int panfrost_regulator_init(struct panfrost_devi= ce *pfdev) for (i =3D 0; i < pfdev->comp->num_supplies; i++) pfdev->regulators[i].supply =3D pfdev->comp->supply_names[i]; =20 - ret =3D devm_regulator_bulk_get(pfdev->dev, + ret =3D devm_regulator_bulk_get(pfdev->base.dev, pfdev->comp->num_supplies, pfdev->regulators); if (ret < 0) { if (ret !=3D -EPROBE_DEFER) - dev_err(pfdev->dev, "failed to get regulators: %d\n", + dev_err(pfdev->base.dev, "failed to get regulators: %d\n", ret); return ret; } @@ -109,7 +109,7 @@ static int panfrost_regulator_init(struct panfrost_devi= ce *pfdev) ret =3D regulator_bulk_enable(pfdev->comp->num_supplies, pfdev->regulators); if (ret < 0) { - dev_err(pfdev->dev, "failed to enable regulators: %d\n", ret); + dev_err(pfdev->base.dev, "failed to enable regulators: %d\n", ret); return ret; } =20 @@ -144,7 +144,7 @@ static int panfrost_pm_domain_init(struct panfrost_devi= ce *pfdev) int err; int i, num_domains; =20 - num_domains =3D of_count_phandle_with_args(pfdev->dev->of_node, + num_domains =3D of_count_phandle_with_args(pfdev->base.dev->of_node, "power-domains", "#power-domain-cells"); =20 @@ -156,7 +156,7 @@ static int panfrost_pm_domain_init(struct panfrost_devi= ce *pfdev) return 0; =20 if (num_domains !=3D pfdev->comp->num_pm_domains) { - dev_err(pfdev->dev, + dev_err(pfdev->base.dev, "Incorrect number of power domains: %d provided, %d needed\n", num_domains, pfdev->comp->num_pm_domains); return -EINVAL; @@ -168,20 +168,21 @@ static int panfrost_pm_domain_init(struct panfrost_de= vice *pfdev) =20 for (i =3D 0; i < num_domains; i++) { pfdev->pm_domain_devs[i] =3D - dev_pm_domain_attach_by_name(pfdev->dev, - pfdev->comp->pm_domain_names[i]); + dev_pm_domain_attach_by_name(pfdev->base.dev, + pfdev->comp->pm_domain_names[i]); if (IS_ERR_OR_NULL(pfdev->pm_domain_devs[i])) { err =3D PTR_ERR(pfdev->pm_domain_devs[i]) ? : -ENODATA; pfdev->pm_domain_devs[i] =3D NULL; - dev_err(pfdev->dev, + dev_err(pfdev->base.dev, "failed to get pm-domain %s(%d): %d\n", pfdev->comp->pm_domain_names[i], i, err); goto err; } =20 - pfdev->pm_domain_links[i] =3D device_link_add(pfdev->dev, - pfdev->pm_domain_devs[i], DL_FLAG_PM_RUNTIME | - DL_FLAG_STATELESS | DL_FLAG_RPM_ACTIVE); + pfdev->pm_domain_links[i] =3D + device_link_add(pfdev->base.dev, + pfdev->pm_domain_devs[i], DL_FLAG_PM_RUNTIME | + DL_FLAG_STATELESS | DL_FLAG_RPM_ACTIVE); if (!pfdev->pm_domain_links[i]) { dev_err(pfdev->pm_domain_devs[i], "adding device link failed!\n"); @@ -211,14 +212,14 @@ int panfrost_device_init(struct panfrost_device *pfde= v) =20 err =3D panfrost_clk_init(pfdev); if (err) { - dev_err(pfdev->dev, "clk init failed %d\n", err); + dev_err(pfdev->base.dev, "clk init failed %d\n", err); return err; } =20 err =3D panfrost_devfreq_init(pfdev); if (err) { if (err !=3D -EPROBE_DEFER) - dev_err(pfdev->dev, "devfreq init failed %d\n", err); + dev_err(pfdev->base.dev, "devfreq init failed %d\n", err); goto out_clk; } =20 @@ -231,7 +232,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) =20 err =3D panfrost_reset_init(pfdev); if (err) { - dev_err(pfdev->dev, "reset init failed %d\n", err); + dev_err(pfdev->base.dev, "reset init failed %d\n", err); goto out_regulator; } =20 @@ -239,7 +240,7 @@ int panfrost_device_init(struct panfrost_device *pfdev) if (err) goto out_reset; =20 - pfdev->iomem =3D devm_platform_ioremap_resource(pfdev->pdev, 0); + pfdev->iomem =3D devm_platform_ioremap_resource(to_platform_device(pfdev-= >base.dev), 0); if (IS_ERR(pfdev->iomem)) { err =3D PTR_ERR(pfdev->iomem); goto out_pm_domain; diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index cffcb0ac7c11..d9aea2c2cbe5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -98,9 +98,7 @@ struct panfrost_compatible { }; =20 struct panfrost_device { - struct device *dev; - struct drm_device *ddev; - struct platform_device *pdev; + struct drm_device base; int gpu_irq; int mmu_irq; =20 @@ -181,7 +179,7 @@ struct panfrost_file_priv { =20 static inline struct panfrost_device *to_panfrost_device(struct drm_device= *ddev) { - return ddev->dev_private; + return container_of(ddev, struct panfrost_device, base); } =20 static inline int panfrost_model_cmp(struct panfrost_device *pfdev, s32 id) diff --git a/drivers/gpu/drm/panfrost/panfrost_drv.c b/drivers/gpu/drm/panf= rost/panfrost_drv.c index 04d615df5259..6284397a7030 100644 --- a/drivers/gpu/drm/panfrost/panfrost_drv.c +++ b/drivers/gpu/drm/panfrost/panfrost_drv.c @@ -35,7 +35,7 @@ static int panfrost_ioctl_query_timestamp(struct panfrost= _device *pfdev, { int ret; =20 - ret =3D pm_runtime_resume_and_get(pfdev->dev); + ret =3D pm_runtime_resume_and_get(pfdev->base.dev); if (ret) return ret; =20 @@ -43,14 +43,14 @@ static int panfrost_ioctl_query_timestamp(struct panfro= st_device *pfdev, *arg =3D panfrost_timestamp_read(pfdev); panfrost_cycle_counter_put(pfdev); =20 - pm_runtime_put(pfdev->dev); + pm_runtime_put(pfdev->base.dev); return 0; } =20 static int panfrost_ioctl_get_param(struct drm_device *ddev, void *data, s= truct drm_file *file) { struct drm_panfrost_get_param *param =3D data; - struct panfrost_device *pfdev =3D ddev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(ddev); int ret; =20 if (param->pad !=3D 0) @@ -274,7 +274,7 @@ panfrost_copy_in_sync(struct drm_device *dev, static int panfrost_ioctl_submit(struct drm_device *dev, void *data, struct drm_file *file) { - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); struct panfrost_file_priv *file_priv =3D file->driver_priv; struct drm_panfrost_submit *args =3D data; struct drm_syncobj *sync_out =3D NULL; @@ -435,7 +435,7 @@ static int panfrost_ioctl_madvise(struct drm_device *de= v, void *data, { struct panfrost_file_priv *priv =3D file_priv->driver_priv; struct drm_panfrost_madvise *args =3D data; - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); struct drm_gem_object *gem_obj; struct panfrost_gem_object *bo; int ret =3D 0; @@ -507,7 +507,7 @@ static int panfrost_open(struct drm_device *dev, struct drm_file *file) { int ret; - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); struct panfrost_file_priv *panfrost_priv; =20 panfrost_priv =3D kzalloc(sizeof(*panfrost_priv), GFP_KERNEL); @@ -604,8 +604,7 @@ static void panfrost_gpu_show_fdinfo(struct panfrost_de= vice *pfdev, =20 static void panfrost_show_fdinfo(struct drm_printer *p, struct drm_file *f= ile) { - struct drm_device *dev =3D file->minor->dev; - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(file->minor->dev); =20 panfrost_gpu_show_fdinfo(pfdev, file->driver_priv, p); =20 @@ -647,15 +646,12 @@ static const struct drm_driver panfrost_drm_driver = =3D { static int panfrost_probe(struct platform_device *pdev) { struct panfrost_device *pfdev; - struct drm_device *ddev; int err; =20 - pfdev =3D devm_kzalloc(&pdev->dev, sizeof(*pfdev), GFP_KERNEL); - if (!pfdev) - return -ENOMEM; - - pfdev->pdev =3D pdev; - pfdev->dev =3D &pdev->dev; + pfdev =3D devm_drm_dev_alloc(&pdev->dev, &panfrost_drm_driver, + struct panfrost_device, base); + if (IS_ERR(pfdev)) + return PTR_ERR(pfdev); =20 platform_set_drvdata(pdev, pfdev); =20 @@ -665,14 +661,6 @@ static int panfrost_probe(struct platform_device *pdev) =20 pfdev->coherent =3D device_get_dma_attr(&pdev->dev) =3D=3D DEV_DMA_COHERE= NT; =20 - /* Allocate and initialize the DRM device. */ - ddev =3D drm_dev_alloc(&panfrost_drm_driver, &pdev->dev); - if (IS_ERR(ddev)) - return PTR_ERR(ddev); - - ddev->dev_private =3D pfdev; - pfdev->ddev =3D ddev; - mutex_init(&pfdev->shrinker_lock); INIT_LIST_HEAD(&pfdev->shrinker_list); =20 @@ -683,51 +671,47 @@ static int panfrost_probe(struct platform_device *pde= v) goto err_out0; } =20 - pm_runtime_set_active(pfdev->dev); - pm_runtime_mark_last_busy(pfdev->dev); - pm_runtime_enable(pfdev->dev); - pm_runtime_set_autosuspend_delay(pfdev->dev, 50); /* ~3 frames */ - pm_runtime_use_autosuspend(pfdev->dev); + pm_runtime_set_active(pfdev->base.dev); + pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_enable(pfdev->base.dev); + pm_runtime_set_autosuspend_delay(pfdev->base.dev, 50); /* ~3 frames */ + pm_runtime_use_autosuspend(pfdev->base.dev); =20 /* * Register the DRM device with the core and the connectors with * sysfs */ - err =3D drm_dev_register(ddev, 0); + err =3D drm_dev_register(&pfdev->base, 0); if (err < 0) goto err_out1; =20 - err =3D panfrost_gem_shrinker_init(ddev); + err =3D panfrost_gem_shrinker_init(&pfdev->base); if (err) goto err_out2; =20 return 0; =20 err_out2: - drm_dev_unregister(ddev); + drm_dev_unregister(&pfdev->base); err_out1: - pm_runtime_disable(pfdev->dev); + pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); - pm_runtime_set_suspended(pfdev->dev); + pm_runtime_set_suspended(pfdev->base.dev); err_out0: - drm_dev_put(ddev); return err; } =20 static void panfrost_remove(struct platform_device *pdev) { struct panfrost_device *pfdev =3D platform_get_drvdata(pdev); - struct drm_device *ddev =3D pfdev->ddev; =20 - drm_dev_unregister(ddev); - panfrost_gem_shrinker_cleanup(ddev); + drm_dev_unregister(&pfdev->base); + panfrost_gem_shrinker_cleanup(&pfdev->base); =20 - pm_runtime_get_sync(pfdev->dev); - pm_runtime_disable(pfdev->dev); + pm_runtime_get_sync(pfdev->base.dev); + pm_runtime_disable(pfdev->base.dev); panfrost_device_fini(pfdev); - pm_runtime_set_suspended(pfdev->dev); - - drm_dev_put(ddev); + pm_runtime_set_suspended(pfdev->base.dev); } =20 static ssize_t profiling_show(struct device *dev, diff --git a/drivers/gpu/drm/panfrost/panfrost_dump.c b/drivers/gpu/drm/pan= frost/panfrost_dump.c index 47751302f1bc..ce704d077fa7 100644 --- a/drivers/gpu/drm/panfrost/panfrost_dump.c +++ b/drivers/gpu/drm/panfrost/panfrost_dump.c @@ -163,7 +163,7 @@ void panfrost_core_dump(struct panfrost_job *job) iter.start =3D __vmalloc(file_size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY); if (!iter.start) { - dev_warn(pfdev->dev, "failed to allocate devcoredump file\n"); + dev_warn(pfdev->base.dev, "failed to allocate devcoredump file\n"); return; } =20 @@ -204,14 +204,14 @@ void panfrost_core_dump(struct panfrost_job *job) mapping =3D job->mappings[i]; =20 if (!bo->base.sgt) { - dev_err(pfdev->dev, "Panfrost Dump: BO has no sgt, cannot dump\n"); + dev_err(pfdev->base.dev, "Panfrost Dump: BO has no sgt, cannot dump\n"); iter.hdr->bomap.valid =3D 0; goto dump_header; } =20 ret =3D drm_gem_vmap_unlocked(&bo->base.base, &map); if (ret) { - dev_err(pfdev->dev, "Panfrost Dump: couldn't map Buffer Object\n"); + dev_err(pfdev->base.dev, "Panfrost Dump: couldn't map Buffer Object\n"); iter.hdr->bomap.valid =3D 0; goto dump_header; } @@ -237,5 +237,5 @@ dump_header: panfrost_core_dump_header(&iter, PANFROSTD= UMP_BUF_BO, iter.data + } panfrost_core_dump_header(&iter, PANFROSTDUMP_BUF_TRAILER, iter.data); =20 - dev_coredumpv(pfdev->dev, iter.start, iter.data - iter.start, GFP_KERNEL); + dev_coredumpv(pfdev->base.dev, iter.start, iter.data - iter.start, GFP_KE= RNEL); } diff --git a/drivers/gpu/drm/panfrost/panfrost_gem.c b/drivers/gpu/drm/panf= rost/panfrost_gem.c index 8e0ff3efede7..768fed21c985 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem.c @@ -17,7 +17,7 @@ static void panfrost_gem_free_object(struct drm_gem_object *obj) { struct panfrost_gem_object *bo =3D to_panfrost_bo(obj); - struct panfrost_device *pfdev =3D obj->dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(obj->dev); =20 /* * Make sure the BO is no longer inserted in the shrinker list before @@ -41,7 +41,7 @@ static void panfrost_gem_free_object(struct drm_gem_objec= t *obj) =20 for (i =3D 0; i < n_sgt; i++) { if (bo->sgts[i].sgl) { - dma_unmap_sgtable(pfdev->dev, &bo->sgts[i], + dma_unmap_sgtable(pfdev->base.dev, &bo->sgts[i], DMA_BIDIRECTIONAL, 0); sg_free_table(&bo->sgts[i]); } @@ -249,7 +249,7 @@ static const struct drm_gem_object_funcs panfrost_gem_f= uncs =3D { */ struct drm_gem_object *panfrost_gem_create_object(struct drm_device *dev, = size_t size) { - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); struct panfrost_gem_object *obj; =20 obj =3D kzalloc(sizeof(*obj), GFP_KERNEL); diff --git a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c b/drivers/gpu= /drm/panfrost/panfrost_gem_shrinker.c index 3d9f51bd48b6..ee22777d06c8 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c +++ b/drivers/gpu/drm/panfrost/panfrost_gem_shrinker.c @@ -97,7 +97,7 @@ panfrost_gem_shrinker_scan(struct shrinker *shrinker, str= uct shrink_control *sc) */ int panfrost_gem_shrinker_init(struct drm_device *dev) { - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); =20 pfdev->shrinker =3D shrinker_alloc(0, "drm-panfrost"); if (!pfdev->shrinker) @@ -120,7 +120,7 @@ int panfrost_gem_shrinker_init(struct drm_device *dev) */ void panfrost_gem_shrinker_cleanup(struct drm_device *dev) { - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); =20 if (pfdev->shrinker) shrinker_free(pfdev->shrinker); diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panf= rost/panfrost_gpu.c index 174e190ba40f..f94337a6c302 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -36,12 +36,12 @@ static irqreturn_t panfrost_gpu_irq_handler(int irq, vo= id *data) u64 address =3D (u64) gpu_read(pfdev, GPU_FAULT_ADDRESS_HI) << 32; address |=3D gpu_read(pfdev, GPU_FAULT_ADDRESS_LO); =20 - dev_warn(pfdev->dev, "GPU Fault 0x%08x (%s) at 0x%016llx\n", + dev_warn(pfdev->base.dev, "GPU Fault 0x%08x (%s) at 0x%016llx\n", fault_status, panfrost_exception_name(fault_status & 0xFF), address); =20 if (state & GPU_IRQ_MULTIPLE_FAULT) - dev_warn(pfdev->dev, "There were multiple GPU faults - some have not be= en reported\n"); + dev_warn(pfdev->base.dev, "There were multiple GPU faults - some have n= ot been reported\n"); =20 gpu_write(pfdev, GPU_INT_MASK, 0); } @@ -72,13 +72,13 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfd= ev) val, val & GPU_IRQ_RESET_COMPLETED, 10, 10000); =20 if (ret) { - dev_err(pfdev->dev, "gpu soft reset timed out, attempting hard reset\n"); + dev_err(pfdev->base.dev, "gpu soft reset timed out, attempting hard rese= t\n"); =20 gpu_write(pfdev, GPU_CMD, GPU_CMD_HARD_RESET); ret =3D readl_relaxed_poll_timeout(pfdev->iomem + GPU_INT_RAWSTAT, val, val & GPU_IRQ_RESET_COMPLETED, 100, 10000); if (ret) { - dev_err(pfdev->dev, "gpu hard reset timed out\n"); + dev_err(pfdev->base.dev, "gpu hard reset timed out\n"); return ret; } } @@ -95,7 +95,7 @@ int panfrost_gpu_soft_reset(struct panfrost_device *pfdev) * All in-flight jobs should have released their cycle * counter references upon reset, but let us make sure */ - if (drm_WARN_ON(pfdev->ddev, atomic_read(&pfdev->cycle_counter.use_count)= !=3D 0)) + if (drm_WARN_ON(&pfdev->base, atomic_read(&pfdev->cycle_counter.use_count= ) !=3D 0)) atomic_set(&pfdev->cycle_counter.use_count, 0); =20 return 0; @@ -330,13 +330,13 @@ static void panfrost_gpu_init_features(struct panfros= t_device *pfdev) bitmap_from_u64(pfdev->features.hw_features, hw_feat); bitmap_from_u64(pfdev->features.hw_issues, hw_issues); =20 - dev_info(pfdev->dev, "mali-%s id 0x%x major 0x%x minor 0x%x status 0x%x", + dev_info(pfdev->base.dev, "mali-%s id 0x%x major 0x%x minor 0x%x status 0= x%x", name, gpu_id, major, minor, status); - dev_info(pfdev->dev, "features: %64pb, issues: %64pb", + dev_info(pfdev->base.dev, "features: %64pb, issues: %64pb", pfdev->features.hw_features, pfdev->features.hw_issues); =20 - dev_info(pfdev->dev, "Features: L2:0x%08x Shader:0x%08x Tiler:0x%08x Mem:= 0x%0x MMU:0x%08x AS:0x%x JS:0x%x", + dev_info(pfdev->base.dev, "Features: L2:0x%08x Shader:0x%08x Tiler:0x%08x= Mem:0x%0x MMU:0x%08x AS:0x%x JS:0x%x", pfdev->features.l2_features, pfdev->features.core_features, pfdev->features.tiler_features, @@ -345,7 +345,7 @@ static void panfrost_gpu_init_features(struct panfrost_= device *pfdev) pfdev->features.as_present, pfdev->features.js_present); =20 - dev_info(pfdev->dev, "shader_present=3D0x%0llx l2_present=3D0x%0llx", + dev_info(pfdev->base.dev, "shader_present=3D0x%0llx l2_present=3D0x%0llx", pfdev->features.shader_present, pfdev->features.l2_present); } =20 @@ -411,7 +411,7 @@ static u64 panfrost_get_core_mask(struct panfrost_devic= e *pfdev) */ core_mask =3D ~(pfdev->features.l2_present - 1) & (pfdev->features.l2_present - 2); - dev_info_once(pfdev->dev, "using only 1st core group (%lu cores from %lu)= \n", + dev_info_once(pfdev->base.dev, "using only 1st core group (%lu cores from= %lu)\n", hweight64(core_mask), hweight64(pfdev->features.shader_present)); =20 @@ -432,7 +432,7 @@ void panfrost_gpu_power_on(struct panfrost_device *pfde= v) val, val =3D=3D (pfdev->features.l2_present & core_mask), 10, 20000); if (ret) - dev_err(pfdev->dev, "error powering up gpu L2"); + dev_err(pfdev->base.dev, "error powering up gpu L2"); =20 gpu_write(pfdev, SHADER_PWRON_LO, pfdev->features.shader_present & core_mask); @@ -440,13 +440,13 @@ void panfrost_gpu_power_on(struct panfrost_device *pf= dev) val, val =3D=3D (pfdev->features.shader_present & core_mask), 10, 20000); if (ret) - dev_err(pfdev->dev, "error powering up gpu shader"); + dev_err(pfdev->base.dev, "error powering up gpu shader"); =20 gpu_write(pfdev, TILER_PWRON_LO, pfdev->features.tiler_present); ret =3D readl_relaxed_poll_timeout(pfdev->iomem + TILER_READY_LO, val, val =3D=3D pfdev->features.tiler_present, 10, 1000); if (ret) - dev_err(pfdev->dev, "error powering up gpu tiler"); + dev_err(pfdev->base.dev, "error powering up gpu tiler"); } =20 void panfrost_gpu_power_off(struct panfrost_device *pfdev) @@ -458,19 +458,19 @@ void panfrost_gpu_power_off(struct panfrost_device *p= fdev) ret =3D readl_relaxed_poll_timeout(pfdev->iomem + SHADER_PWRTRANS_LO, val, !val, 1, 2000); if (ret) - dev_err(pfdev->dev, "shader power transition timeout"); + dev_err(pfdev->base.dev, "shader power transition timeout"); =20 gpu_write(pfdev, TILER_PWROFF_LO, pfdev->features.tiler_present); ret =3D readl_relaxed_poll_timeout(pfdev->iomem + TILER_PWRTRANS_LO, val, !val, 1, 2000); if (ret) - dev_err(pfdev->dev, "tiler power transition timeout"); + dev_err(pfdev->base.dev, "tiler power transition timeout"); =20 gpu_write(pfdev, L2_PWROFF_LO, pfdev->features.l2_present); ret =3D readl_poll_timeout(pfdev->iomem + L2_PWRTRANS_LO, val, !val, 0, 2000); if (ret) - dev_err(pfdev->dev, "l2 power transition timeout"); + dev_err(pfdev->base.dev, "l2 power transition timeout"); } =20 void panfrost_gpu_suspend_irq(struct panfrost_device *pfdev) @@ -491,21 +491,22 @@ int panfrost_gpu_init(struct panfrost_device *pfdev) =20 panfrost_gpu_init_features(pfdev); =20 - err =3D dma_set_mask_and_coherent(pfdev->dev, - DMA_BIT_MASK(FIELD_GET(0xff00, pfdev->features.mmu_features))); + err =3D dma_set_mask_and_coherent(pfdev->base.dev, + DMA_BIT_MASK(FIELD_GET(0xff00, + pfdev->features.mmu_features))); if (err) return err; =20 - dma_set_max_seg_size(pfdev->dev, UINT_MAX); + dma_set_max_seg_size(pfdev->base.dev, UINT_MAX); =20 - pfdev->gpu_irq =3D platform_get_irq_byname(to_platform_device(pfdev->dev)= , "gpu"); + pfdev->gpu_irq =3D platform_get_irq_byname(to_platform_device(pfdev->base= .dev), "gpu"); if (pfdev->gpu_irq < 0) return pfdev->gpu_irq; =20 - err =3D devm_request_irq(pfdev->dev, pfdev->gpu_irq, panfrost_gpu_irq_han= dler, + err =3D devm_request_irq(pfdev->base.dev, pfdev->gpu_irq, panfrost_gpu_ir= q_handler, IRQF_SHARED, KBUILD_MODNAME "-gpu", pfdev); if (err) { - dev_err(pfdev->dev, "failed to request gpu irq"); + dev_err(pfdev->base.dev, "failed to request gpu irq"); return err; } =20 @@ -525,9 +526,9 @@ u32 panfrost_gpu_get_latest_flush_id(struct panfrost_de= vice *pfdev) =20 if (panfrost_has_hw_feature(pfdev, HW_FEATURE_FLUSH_REDUCTION)) { /* Flush reduction only makes sense when the GPU is kept powered on betw= een jobs */ - if (pm_runtime_get_if_in_use(pfdev->dev)) { + if (pm_runtime_get_if_in_use(pfdev->base.dev)) { flush_id =3D gpu_read(pfdev, GPU_LATEST_FLUSH_ID); - pm_runtime_put(pfdev->dev); + pm_runtime_put(pfdev->base.dev); return flush_id; } } diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 9b8e82fb8bc4..f640d211cc3a 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -94,7 +94,7 @@ static struct dma_fence *panfrost_fence_create(struct pan= frost_device *pfdev, in if (!fence) return ERR_PTR(-ENOMEM); =20 - fence->dev =3D pfdev->ddev; + fence->dev =3D &pfdev->base; fence->queue =3D js_num; fence->seqno =3D ++js->queue[js_num].emit_seqno; dma_fence_init(&fence->base, &panfrost_fence_ops, &js->job_lock, @@ -205,7 +205,7 @@ static void panfrost_job_hw_submit(struct panfrost_job = *job, int js) =20 panfrost_devfreq_record_busy(&pfdev->pfdevfreq); =20 - ret =3D pm_runtime_get_sync(pfdev->dev); + ret =3D pm_runtime_get_sync(pfdev->base.dev); if (ret < 0) return; =20 @@ -256,7 +256,7 @@ static void panfrost_job_hw_submit(struct panfrost_job = *job, int js) } =20 job_write(pfdev, JS_COMMAND_NEXT(js), JS_COMMAND_START); - dev_dbg(pfdev->dev, + dev_dbg(pfdev->base.dev, "JS: Submitting atom %p to js[%d][%d] with head=3D0x%llx AS %d", job, js, subslot, jc_head, cfg & 0xf); } @@ -437,12 +437,12 @@ static void panfrost_job_handle_err(struct panfrost_d= evice *pfdev, bool signal_fence =3D true; =20 if (!panfrost_exception_is_fault(js_status)) { - dev_dbg(pfdev->dev, "js event, js=3D%d, status=3D%s, head=3D0x%x, tail= =3D0x%x", + dev_dbg(pfdev->base.dev, "js event, js=3D%d, status=3D%s, head=3D0x%x, t= ail=3D0x%x", js, exception_name, job_read(pfdev, JS_HEAD_LO(js)), job_read(pfdev, JS_TAIL_LO(js))); } else { - dev_err(pfdev->dev, "js fault, js=3D%d, status=3D%s, head=3D0x%x, tail= =3D0x%x", + dev_err(pfdev->base.dev, "js fault, js=3D%d, status=3D%s, head=3D0x%x, t= ail=3D0x%x", js, exception_name, job_read(pfdev, JS_HEAD_LO(js)), job_read(pfdev, JS_TAIL_LO(js))); @@ -474,7 +474,7 @@ static void panfrost_job_handle_err(struct panfrost_dev= ice *pfdev, if (signal_fence) dma_fence_signal_locked(job->done_fence); =20 - pm_runtime_put_autosuspend(pfdev->dev); + pm_runtime_put_autosuspend(pfdev->base.dev); =20 if (panfrost_exception_needs_reset(pfdev, js_status)) { atomic_set(&pfdev->reset.pending, 1); @@ -493,7 +493,7 @@ static void panfrost_job_handle_done(struct panfrost_de= vice *pfdev, panfrost_devfreq_record_idle(&pfdev->pfdevfreq); =20 dma_fence_signal_locked(job->done_fence); - pm_runtime_put_autosuspend(pfdev->dev); + pm_runtime_put_autosuspend(pfdev->base.dev); } =20 static void panfrost_job_handle_irq(struct panfrost_device *pfdev, u32 sta= tus) @@ -602,7 +602,7 @@ static void panfrost_job_handle_irqs(struct panfrost_de= vice *pfdev) u32 status =3D job_read(pfdev, JOB_INT_RAWSTAT); =20 while (status) { - pm_runtime_mark_last_busy(pfdev->dev); + pm_runtime_mark_last_busy(pfdev->base.dev); =20 spin_lock(&pfdev->js->job_lock); panfrost_job_handle_irq(pfdev, status); @@ -683,7 +683,7 @@ panfrost_reset(struct panfrost_device *pfdev, 10, 10000); =20 if (ret) - dev_err(pfdev->dev, "Soft-stop failed\n"); + dev_err(pfdev->base.dev, "Soft-stop failed\n"); =20 /* Handle the remaining interrupts before we reset. */ panfrost_job_handle_irqs(pfdev); @@ -701,7 +701,7 @@ panfrost_reset(struct panfrost_device *pfdev, if (pfdev->jobs[i][j]->requirements & PANFROST_JD_REQ_CYCLE_COUNT || pfdev->jobs[i][j]->is_profiled) panfrost_cycle_counter_put(pfdev->jobs[i][j]->pfdev); - pm_runtime_put_noidle(pfdev->dev); + pm_runtime_put_noidle(pfdev->base.dev); panfrost_devfreq_record_idle(&pfdev->pfdevfreq); } } @@ -769,11 +769,11 @@ static enum drm_gpu_sched_stat panfrost_job_timedout(= struct drm_sched_job synchronize_irq(pfdev->js->irq); =20 if (dma_fence_is_signaled(job->done_fence)) { - dev_warn(pfdev->dev, "unexpectedly high interrupt latency\n"); + dev_warn(pfdev->base.dev, "unexpectedly high interrupt latency\n"); return DRM_GPU_SCHED_STAT_NOMINAL; } =20 - dev_err(pfdev->dev, "gpu sched timeout, js=3D%d, config=3D0x%x, status=3D= 0x%x, head=3D0x%x, tail=3D0x%x, sched_job=3D%p", + dev_err(pfdev->base.dev, "gpu sched timeout, js=3D%d, config=3D0x%x, stat= us=3D0x%x, head=3D0x%x, tail=3D0x%x, sched_job=3D%p", js, job_read(pfdev, JS_CONFIG(js)), job_read(pfdev, JS_STATUS(js)), @@ -847,24 +847,25 @@ int panfrost_job_init(struct panfrost_device *pfdev) if (!panfrost_has_hw_feature(pfdev, HW_FEATURE_JOBCHAIN_DISAMBIGUATION)) nentries =3D 1; =20 - pfdev->js =3D js =3D devm_kzalloc(pfdev->dev, sizeof(*js), GFP_KERNEL); + js =3D devm_kzalloc(pfdev->base.dev, sizeof(*js), GFP_KERNEL); if (!js) return -ENOMEM; + pfdev->js =3D js; =20 INIT_WORK(&pfdev->reset.work, panfrost_reset_work); spin_lock_init(&js->job_lock); =20 - js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->dev), "job"= ); + js->irq =3D platform_get_irq_byname(to_platform_device(pfdev->base.dev), = "job"); if (js->irq < 0) return js->irq; =20 - ret =3D devm_request_threaded_irq(pfdev->dev, js->irq, + ret =3D devm_request_threaded_irq(pfdev->base.dev, js->irq, panfrost_job_irq_handler, panfrost_job_irq_handler_thread, IRQF_SHARED, KBUILD_MODNAME "-job", pfdev); if (ret) { - dev_err(pfdev->dev, "failed to request job irq"); + dev_err(pfdev->base.dev, "failed to request job irq"); return ret; } =20 @@ -881,9 +882,9 @@ int panfrost_job_init(struct panfrost_device *pfdev) nentries, 0, msecs_to_jiffies(JOB_TIMEOUT_MS), pfdev->reset.wq, - NULL, "pan_js", pfdev->dev); + NULL, "pan_js", pfdev->base.dev); if (ret) { - dev_err(pfdev->dev, "Failed to create scheduler: %d.", ret); + dev_err(pfdev->base.dev, "Failed to create scheduler: %d.", ret); goto err_sched; } } diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index b91019cd5acb..2189e42d2bfa 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -39,7 +39,7 @@ static int wait_ready(struct panfrost_device *pfdev, u32 = as_nr) if (ret) { /* The GPU hung, let's trigger a reset */ panfrost_device_schedule_reset(pfdev); - dev_err(pfdev->dev, "AS_ACTIVE bit stuck\n"); + dev_err(pfdev->base.dev, "AS_ACTIVE bit stuck\n"); } =20 return ret; @@ -212,7 +212,9 @@ u32 panfrost_mmu_as_get(struct panfrost_device *pfdev, = struct panfrost_mmu *mmu) atomic_set(&mmu->as_count, 1); list_add(&mmu->list, &pfdev->as_lru_list); =20 - dev_dbg(pfdev->dev, "Assigned AS%d to mmu %p, alloc_mask=3D%lx", as, mmu,= pfdev->as_alloc_mask); + dev_dbg(pfdev->base.dev, + "Assigned AS%d to mmu %p, alloc_mask=3D%lx", + as, mmu, pfdev->as_alloc_mask); =20 panfrost_mmu_enable(pfdev, mmu); =20 @@ -278,13 +280,13 @@ static void panfrost_mmu_flush_range(struct panfrost_= device *pfdev, if (mmu->as < 0) return; =20 - pm_runtime_get_noresume(pfdev->dev); + pm_runtime_get_noresume(pfdev->base.dev); =20 /* Flush the PTs only if we're already awake */ - if (pm_runtime_active(pfdev->dev)) + if (pm_runtime_active(pfdev->base.dev)) mmu_hw_do_operation(pfdev, mmu, iova, size, AS_COMMAND_FLUSH_PT); =20 - pm_runtime_put_autosuspend(pfdev->dev); + pm_runtime_put_autosuspend(pfdev->base.dev); } =20 static int mmu_map_sg(struct panfrost_device *pfdev, struct panfrost_mmu *= mmu, @@ -299,7 +301,9 @@ static int mmu_map_sg(struct panfrost_device *pfdev, st= ruct panfrost_mmu *mmu, unsigned long paddr =3D sg_dma_address(sgl); size_t len =3D sg_dma_len(sgl); =20 - dev_dbg(pfdev->dev, "map: as=3D%d, iova=3D%llx, paddr=3D%lx, len=3D%zx",= mmu->as, iova, paddr, len); + dev_dbg(pfdev->base.dev, + "map: as=3D%d, iova=3D%llx, paddr=3D%lx, len=3D%zx", + mmu->as, iova, paddr, len); =20 while (len) { size_t pgcount, mapped =3D 0; @@ -359,7 +363,7 @@ void panfrost_mmu_unmap(struct panfrost_gem_mapping *ma= pping) if (WARN_ON(!mapping->active)) return; =20 - dev_dbg(pfdev->dev, "unmap: as=3D%d, iova=3D%llx, len=3D%zx", + dev_dbg(pfdev->base.dev, "unmap: as=3D%d, iova=3D%llx, len=3D%zx", mapping->mmu->as, iova, len); =20 while (unmapped_len < len) { @@ -456,7 +460,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_= device *pfdev, int as, =20 bo =3D bomapping->obj; if (!bo->is_heap) { - dev_WARN(pfdev->dev, "matching BO is not heap type (GPU VA =3D %llx)", + dev_WARN(pfdev->base.dev, "matching BO is not heap type (GPU VA =3D %llx= )", bomapping->mmnode.start << PAGE_SHIFT); ret =3D -EINVAL; goto err_bo; @@ -523,7 +527,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_= device *pfdev, int as, if (ret) goto err_unlock; =20 - ret =3D dma_map_sgtable(pfdev->dev, sgt, DMA_BIDIRECTIONAL, 0); + ret =3D dma_map_sgtable(pfdev->base.dev, sgt, DMA_BIDIRECTIONAL, 0); if (ret) goto err_map; =20 @@ -533,7 +537,7 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_= device *pfdev, int as, bomapping->active =3D true; bo->heap_rss_size +=3D SZ_2M; =20 - dev_dbg(pfdev->dev, "mapped page fault @ AS%d %llx", as, addr); + dev_dbg(pfdev->base.dev, "mapped page fault @ AS%d %llx", as, addr); =20 out: dma_resv_unlock(obj->resv); @@ -559,10 +563,10 @@ static void panfrost_mmu_release_ctx(struct kref *kre= f) =20 spin_lock(&pfdev->as_lock); if (mmu->as >=3D 0) { - pm_runtime_get_noresume(pfdev->dev); - if (pm_runtime_active(pfdev->dev)) + pm_runtime_get_noresume(pfdev->base.dev); + if (pm_runtime_active(pfdev->base.dev)) panfrost_mmu_disable(pfdev, mmu->as); - pm_runtime_put_autosuspend(pfdev->dev); + pm_runtime_put_autosuspend(pfdev->base.dev); =20 clear_bit(mmu->as, &pfdev->as_alloc_mask); clear_bit(mmu->as, &pfdev->as_in_use_mask); @@ -637,7 +641,7 @@ struct panfrost_mmu *panfrost_mmu_ctx_create(struct pan= frost_device *pfdev) .oas =3D FIELD_GET(0xff00, pfdev->features.mmu_features), .coherent_walk =3D pfdev->coherent, .tlb =3D &mmu_tlb_ops, - .iommu_dev =3D pfdev->dev, + .iommu_dev =3D pfdev->base.dev, }; =20 mmu->pgtbl_ops =3D alloc_io_pgtable_ops(ARM_MALI_LPAE, &mmu->pgtbl_cfg, @@ -720,7 +724,7 @@ static irqreturn_t panfrost_mmu_irq_handler_thread(int = irq, void *data) =20 if (ret) { /* terminal fault, print info about the fault */ - dev_err(pfdev->dev, + dev_err(pfdev->base.dev, "Unhandled Page fault in AS%d at VA 0x%016llX\n" "Reason: %s\n" "raw fault status: 0x%X\n" @@ -768,18 +772,18 @@ int panfrost_mmu_init(struct panfrost_device *pfdev) { int err; =20 - pfdev->mmu_irq =3D platform_get_irq_byname(to_platform_device(pfdev->dev)= , "mmu"); + pfdev->mmu_irq =3D platform_get_irq_byname(to_platform_device(pfdev->base= .dev), "mmu"); if (pfdev->mmu_irq < 0) return pfdev->mmu_irq; =20 - err =3D devm_request_threaded_irq(pfdev->dev, pfdev->mmu_irq, + err =3D devm_request_threaded_irq(pfdev->base.dev, pfdev->mmu_irq, panfrost_mmu_irq_handler, panfrost_mmu_irq_handler_thread, IRQF_SHARED, KBUILD_MODNAME "-mmu", pfdev); =20 if (err) { - dev_err(pfdev->dev, "failed to request mmu irq"); + dev_err(pfdev->base.dev, "failed to request mmu irq"); return err; } =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index ba9b6e2b2636..f30817bcf8ba 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -84,11 +84,11 @@ static int panfrost_perfcnt_enable_locked(struct panfro= st_device *pfdev, else if (perfcnt->user) return -EBUSY; =20 - ret =3D pm_runtime_get_sync(pfdev->dev); + ret =3D pm_runtime_get_sync(pfdev->base.dev); if (ret < 0) goto err_put_pm; =20 - bo =3D drm_gem_shmem_create(pfdev->ddev, perfcnt->bosize); + bo =3D drm_gem_shmem_create(&pfdev->base, perfcnt->bosize); if (IS_ERR(bo)) { ret =3D PTR_ERR(bo); goto err_put_pm; @@ -173,7 +173,7 @@ static int panfrost_perfcnt_enable_locked(struct panfro= st_device *pfdev, err_put_bo: drm_gem_object_put(&bo->base); err_put_pm: - pm_runtime_put(pfdev->dev); + pm_runtime_put(pfdev->base.dev); return ret; } =20 @@ -201,8 +201,8 @@ static int panfrost_perfcnt_disable_locked(struct panfr= ost_device *pfdev, panfrost_mmu_as_put(pfdev, perfcnt->mapping->mmu); panfrost_gem_mapping_put(perfcnt->mapping); perfcnt->mapping =3D NULL; - pm_runtime_mark_last_busy(pfdev->dev); - pm_runtime_put_autosuspend(pfdev->dev); + pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_put_autosuspend(pfdev->base.dev); =20 return 0; } @@ -210,7 +210,7 @@ static int panfrost_perfcnt_disable_locked(struct panfr= ost_device *pfdev, int panfrost_ioctl_perfcnt_enable(struct drm_device *dev, void *data, struct drm_file *file_priv) { - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; struct drm_panfrost_perfcnt_enable *req =3D data; int ret; @@ -237,7 +237,7 @@ int panfrost_ioctl_perfcnt_enable(struct drm_device *de= v, void *data, int panfrost_ioctl_perfcnt_dump(struct drm_device *dev, void *data, struct drm_file *file_priv) { - struct panfrost_device *pfdev =3D dev->dev_private; + struct panfrost_device *pfdev =3D to_panfrost_device(dev); struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; struct drm_panfrost_perfcnt_dump *req =3D data; void __user *user_ptr =3D (void __user *)(uintptr_t)req->buf_ptr; @@ -272,13 +272,13 @@ void panfrost_perfcnt_close(struct drm_file *file_pri= v) struct panfrost_device *pfdev =3D pfile->pfdev; struct panfrost_perfcnt *perfcnt =3D pfdev->perfcnt; =20 - pm_runtime_get_sync(pfdev->dev); + pm_runtime_get_sync(pfdev->base.dev); mutex_lock(&perfcnt->lock); if (perfcnt->user =3D=3D pfile) panfrost_perfcnt_disable_locked(pfdev, file_priv); mutex_unlock(&perfcnt->lock); - pm_runtime_mark_last_busy(pfdev->dev); - pm_runtime_put_autosuspend(pfdev->dev); + pm_runtime_mark_last_busy(pfdev->base.dev); + pm_runtime_put_autosuspend(pfdev->base.dev); } =20 int panfrost_perfcnt_init(struct panfrost_device *pfdev) @@ -316,7 +316,7 @@ int panfrost_perfcnt_init(struct panfrost_device *pfdev) COUNTERS_PER_BLOCK * BYTES_PER_COUNTER; } =20 - perfcnt =3D devm_kzalloc(pfdev->dev, sizeof(*perfcnt), GFP_KERNEL); + perfcnt =3D devm_kzalloc(pfdev->base.dev, sizeof(*perfcnt), GFP_KERNEL); if (!perfcnt) return -ENOMEM; =20 --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C1191C3BE5 for ; Wed, 4 Dec 2024 18:50:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338236; cv=pass; b=OzOX0BMxRNq62l/hCzdADZ47O8ct5tMl7NSb1/4V70r2UTpvoR20JH2T19y+uO7uJUSKKZePEPCoJNx32mLgC9pBP5YIImBMuy2rCHTyjFD40b10qJ0A3HsgEVD7b/ls1mgCb0CRzt4tMngWzfIeDzgg1SNSiDcYV9pk5W2FTQE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338236; c=relaxed/simple; bh=wENLujEaE0/jDv9eUtx7VbQkHBJh+HI5TA1D/Kh87Ok=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ajba0xbxQTUlEjLZzA9xmi+GHz1QiqhqCZhfNO4EvEUNO2t0P2AWmfBiE5Buk+0eU3ggLvJUx0g1gWNnRshqiVIP9xQC1L9dvSA6yX2KmFIbkN8YVNp3pidVokDigbOXrQA61C5nsiQrl1LVPaRCBOw6hCteEediqW+3HAvRs0I= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=HXboe/nj; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="HXboe/nj" ARC-Seal: i=1; a=rsa-sha256; t=1733338214; cv=none; d=zohomail.com; s=zohoarc; b=EiinLxhL34XIKGHWkXDMwD8VhFjkL5rkn128Fzponp3WFZvjI4g/SlhRNZqGFzSd1Dt67dx9N8n5KhxqOghs+XF7vFoiXwhw100LhiuFaUfhfTOcPso/fN6SuhjetseGGRmNNCbo2aayND1UNKqPV/6/wIqSJTj+RxuOAAiy+R0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338214; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=kjtahGPaTpINYYZfuLGp4VkVf+IQcM1cz95cqRqH8GE=; b=eTPw+7m4wxlXwmQfHV2nItyT0v/fvZoQei0r1d78rN3nzCFjo7zXJ8g+yGcBLmUxYK3slkNWBfIoxbcXZpIWgWICWyS5fRIr/LYmO8AD/VS1P0Ks6ypWPK+4ncDIeEKNhfo/ZT+H6NKca5op8lm1a1HNhGUiBevG+mkJye7VwGM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338214; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=kjtahGPaTpINYYZfuLGp4VkVf+IQcM1cz95cqRqH8GE=; b=HXboe/njq5d/+cVgEc7927qDFDglAi8ZLe2tk/IF4tO9SpNFUyCQ9fh77+Y/Dv+f bsmqsrbjzTwEz5Iehg0e0hioxAkqmEmISfpOx7Wfyb9sCKg0cYX0Zroy5r//1wSAxER mFClzVHePVTypNGMHqf4Iv5EX7D+OMx2qFM2K2/c= Received: by mx.zohomail.com with SMTPS id 1733338212967952.7450718448498; Wed, 4 Dec 2024 10:50:12 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/9] drm/panfrost: Handle inexistent GPU during probe Date: Wed, 4 Dec 2024 18:49:31 +0000 Message-ID: <20241204184945.1477677-3-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Just in case we're dealing with a yet not recognised device. Reviewed-by: Steven Price Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_gpu.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_gpu.c b/drivers/gpu/drm/panf= rost/panfrost_gpu.c index f94337a6c302..8d049a07d393 100644 --- a/drivers/gpu/drm/panfrost/panfrost_gpu.c +++ b/drivers/gpu/drm/panfrost/panfrost_gpu.c @@ -240,9 +240,10 @@ static const struct panfrost_model gpu_models[] =3D { /* MediaTek MT8188 Mali-G57 MC3 */ GPU_MODEL(g57, 0x9093, GPU_REV(g57, 0, 0)), + {0}, }; =20 -static void panfrost_gpu_init_features(struct panfrost_device *pfdev) +static int panfrost_gpu_init_features(struct panfrost_device *pfdev) { u32 gpu_id, num_js, major, minor, status, rev; const char *name =3D "unknown"; @@ -327,6 +328,12 @@ static void panfrost_gpu_init_features(struct panfrost= _device *pfdev) break; } =20 + if (!model->name) { + dev_err(pfdev->base.dev, "GPU model not found: mali-%s id rev %#x %#x\n", + name, gpu_id, rev); + return -ENODEV; + } + bitmap_from_u64(pfdev->features.hw_features, hw_feat); bitmap_from_u64(pfdev->features.hw_issues, hw_issues); =20 @@ -347,6 +354,8 @@ static void panfrost_gpu_init_features(struct panfrost_= device *pfdev) =20 dev_info(pfdev->base.dev, "shader_present=3D0x%0llx l2_present=3D0x%0llx", pfdev->features.shader_present, pfdev->features.l2_present); + + return 0; } =20 void panfrost_cycle_counter_get(struct panfrost_device *pfdev) @@ -489,7 +498,9 @@ int panfrost_gpu_init(struct panfrost_device *pfdev) if (err) return err; =20 - panfrost_gpu_init_features(pfdev); + err =3D panfrost_gpu_init_features(pfdev); + if (err) + return err; =20 err =3D dma_set_mask_and_coherent(pfdev->base.dev, DMA_BIT_MASK(FIELD_GET(0xff00, --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 48AE91B395D for ; Wed, 4 Dec 2024 18:50:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338238; cv=pass; b=py3XMO7RTUObFDPvtOw7AMdbPQzv5eiQVMGZBhBPPudoBsULXY+2AuJVePGzA7Awo3eCnNXNTcW43ja5+cOuDvcb65QsbxwfpvzvopVEp4n10miH/otDAvn6YNTR/lNT8duPVIaucPehJLhZnwVj5WmfDXogGz1oWtZPzU4hzPQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338238; c=relaxed/simple; bh=0vAis1+9Iur4U7JyeJ4ywRTB8A0fnL0rvs6QK2NOuuM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=uehy4Tho8AlQjmF9qLYECAOH//hpDqI/HCsO71qdvsvh7IMc+Y4OZXmAsu//+fthljeCbneL+sYuURip6JIFCYhCJsqFa47W40MYdnvqCMORkYz2chhZTS79DIEqcysGHpY6qm3OM2qBJ2DKmA7i3WnMU5NBLNXFcui40/i47+4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=DuZHHq97; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="DuZHHq97" ARC-Seal: i=1; a=rsa-sha256; t=1733338216; cv=none; d=zohomail.com; s=zohoarc; b=iEI1bfMMruzPfJ6/0atm1MUxOgMXB6Hn5hTgVCYtJdcs5Y/4JbgsVMZAhMq7XB7FeKodCyQjGRURy10xkJtVLRRNJqH3e8Gt0XYoNWfrvS3+SzJqerm/IRCtzPrcxJazNpM/y81qrI5kVaX5m+dBF5tFMpZgJ9epn5XvxiopHf4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338216; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=ttdCHXLB8sd6tHbLHmHbCUNcVhrUROqKuRsqIlLsEfs=; b=lCrTLIwfiAltfPlLICnSEVHrMe3+W9W3cYQiK1N+sBllwVjvRMZHsXMM9HmXPH/bTP4SitAh12lVpfyaH5ow6oweR+N7FbTMGOKZdnwP7LuKUyM5fhb8eLVHFrBERtqRAW1Zu/ZSFJD5Pdk8PghyN/boNI+jrzQYBhskXxDQ4mc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338216; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=ttdCHXLB8sd6tHbLHmHbCUNcVhrUROqKuRsqIlLsEfs=; b=DuZHHq97v8Lqhb05c0l45V1Ms6CyBedZGo9waSERKQjOrfc0p5QoFYdRTQiJplMe z7Ry0uUd4NET4c/hycnqfOQgXs2yzbgIe3YEjInOU9Ect5cx5sN08pL0idOsu8HeGgs Y6rWG0pZt7xhhZswzx1bobjIyC0UtdX+c5D55iWc= Received: by mx.zohomail.com with SMTPS id 1733338215510420.7367774673804; Wed, 4 Dec 2024 10:50:15 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/9] drm/panfrost: Handle job HW submit errors Date: Wed, 4 Dec 2024 18:49:32 +0000 Message-ID: <20241204184945.1477677-4-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Avoid waiting for the DRM scheduler job timedout handler, and instead, let the DRM scheduler core signal the error fence immediately when HW job submission fails. That means we must also decrement the runtime-PM refcnt for the device, because the job will never be enqueued or inflight. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_job.c | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index f640d211cc3a..83bc74f6044e 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -195,7 +195,7 @@ panfrost_enqueue_job(struct panfrost_device *pfdev, int= slot, return 1; } =20 -static void panfrost_job_hw_submit(struct panfrost_job *job, int js) +static int panfrost_job_hw_submit(struct panfrost_job *job, int js) { struct panfrost_device *pfdev =3D job->pfdev; unsigned int subslot; @@ -207,10 +207,11 @@ static void panfrost_job_hw_submit(struct panfrost_jo= b *job, int js) =20 ret =3D pm_runtime_get_sync(pfdev->base.dev); if (ret < 0) - return; + goto err_hwsubmit; =20 if (WARN_ON(job_read(pfdev, JS_COMMAND_NEXT(js)))) { - return; + ret =3D -EINVAL; + goto err_hwsubmit; } =20 cfg =3D panfrost_mmu_as_get(pfdev, job->mmu); @@ -261,6 +262,12 @@ static void panfrost_job_hw_submit(struct panfrost_job= *job, int js) job, js, subslot, jc_head, cfg & 0xf); } spin_unlock(&pfdev->js->job_lock); + + return 0; + +err_hwsubmit: + pm_runtime_put_autosuspend(pfdev->base.dev); + return ret; } =20 static int panfrost_acquire_object_fences(struct drm_gem_object **bos, @@ -382,6 +389,7 @@ static struct dma_fence *panfrost_job_run(struct drm_sc= hed_job *sched_job) struct panfrost_device *pfdev =3D job->pfdev; int slot =3D panfrost_job_get_slot(job); struct dma_fence *fence =3D NULL; + int ret; =20 if (unlikely(job->base.s_fence->finished.error)) return NULL; @@ -400,7 +408,11 @@ static struct dma_fence *panfrost_job_run(struct drm_s= ched_job *sched_job) dma_fence_put(job->done_fence); job->done_fence =3D dma_fence_get(fence); =20 - panfrost_job_hw_submit(job, slot); + ret =3D panfrost_job_hw_submit(job, slot); + if (ret) { + dma_fence_put(fence); + return ERR_PTR(ret); + } =20 return fence; } --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 58BCA1C3C0E for ; Wed, 4 Dec 2024 18:50:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338241; cv=pass; b=ki1d1CKQ7PI0SrtNDeCYFWd5PhSJe16l1HW2rzFHZ1zQ43e73984UNkN0JDTQe+DlVRDUXMP4p+eElzIUlGhgNMy0bOhUjXyGsS1jpoQaS64Nn7DWzD+Bcjua6v1nX9zs2elrhJRYCWIbKa+QpjREJkZCHeIYXpUrC5fkfKFbn8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338241; c=relaxed/simple; bh=VmekAnvTHihGZIfchksMeLHRR9dERBj/FgRIAtmd1VE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JEcO2pSS95zEGURXyvQbY3k/6hu4KWXmNOIU6cuLVQcignGP4CGXzye2WEqgcw63vfrNpqR4XsXoRcTw4agauY5IYc9lAwHkG8UBLtT5pUONdtm4X8qV/A0Uhuexa8oHaVSbgz+gPxPR5n3w6Zj2tqdvlsaLF0JWcLIVKN8wfro= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=YbpWbPaN; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="YbpWbPaN" ARC-Seal: i=1; a=rsa-sha256; t=1733338220; cv=none; d=zohomail.com; s=zohoarc; b=FDLspdUKvddl5QQ7rm+9s1QxoYfxUggzhN0RAsmx2Qn9e3BJgBr3nZccTdbJBU/L6UBNnXEh5lU3Gd4P62RPPgY/xQYDCz0Lj5jZwQ1kSqSe+wYSuhy5bP2Zt7g+Rg7z9O/LdgDUx68EMll0uIZrUp2OvjAjpUwRo5BUCY1LJYs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338220; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=sgGFYTpB2s0EDBW/ccLjDBCyNPeLkKbJ491OXwFkDP4=; b=Cjc0RlfjNGdJGExdfU3b23TFickqDEJIug9TSoRnd6Wxjp68BriJCJm2NQEG8ivXjBslAmeKSPHUjZxatJw4AKVLbYMkkCWqXUYI/rIZ+VH2nw7CmDttBzWil6SWKq4OTAJhNlgxyHqxOmoQcc2StJ2lLVUoiqtEjihLULda6q4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338220; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=sgGFYTpB2s0EDBW/ccLjDBCyNPeLkKbJ491OXwFkDP4=; b=YbpWbPaNA9NMsvjSVNKu5iwt4SRPxieWWCOToFW+NeIVspee4AMKm95XcjKqRULg m6crQy0+uxPXsiGVYTjWTogxHP6HsA7Z/mxlefKnal6Wk8WeSSrGPdGBros5PCSjbp1 KmcVTon3kHrGc/biYz2j6CVJHgQD6LaK4HSWKpPc= Received: by mx.zohomail.com with SMTPS id 1733338218055806.7687330402214; Wed, 4 Dec 2024 10:50:18 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/9] drm/panfrost: Handle error when allocating AS number Date: Wed, 4 Dec 2024 18:49:33 +0000 Message-ID: <20241204184945.1477677-5-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable If we reach the beginning of the LRU AS list, then return an error. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_job.c | 6 +++++- drivers/gpu/drm/panfrost/panfrost_mmu.c | 5 +++-- drivers/gpu/drm/panfrost/panfrost_mmu.h | 2 +- drivers/gpu/drm/panfrost/panfrost_perfcnt.c | 9 ++++++++- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index 83bc74f6044e..d10f66f4cc53 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -214,7 +214,11 @@ static int panfrost_job_hw_submit(struct panfrost_job = *job, int js) goto err_hwsubmit; } =20 - cfg =3D panfrost_mmu_as_get(pfdev, job->mmu); + ret =3D panfrost_mmu_as_get(pfdev, job->mmu); + if (ret < 0) + goto err_hwsubmit; + + cfg =3D ret; =20 job_write(pfdev, JS_HEAD_NEXT_LO(js), lower_32_bits(jc_head)); job_write(pfdev, JS_HEAD_NEXT_HI(js), upper_32_bits(jc_head)); diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 2189e42d2bfa..03ac527b35e7 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -155,7 +155,7 @@ static void panfrost_mmu_disable(struct panfrost_device= *pfdev, u32 as_nr) write_cmd(pfdev, as_nr, AS_COMMAND_UPDATE); } =20 -u32 panfrost_mmu_as_get(struct panfrost_device *pfdev, struct panfrost_mmu= *mmu) +int panfrost_mmu_as_get(struct panfrost_device *pfdev, struct panfrost_mmu= *mmu) { int as; =20 @@ -197,7 +197,8 @@ u32 panfrost_mmu_as_get(struct panfrost_device *pfdev, = struct panfrost_mmu *mmu) if (!atomic_read(&lru_mmu->as_count)) break; } - WARN_ON(&lru_mmu->list =3D=3D &pfdev->as_lru_list); + if (WARN_ON(&lru_mmu->list =3D=3D &pfdev->as_lru_list)) + return -EBUSY; =20 list_del_init(&lru_mmu->list); as =3D lru_mmu->as; diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.h b/drivers/gpu/drm/panf= rost/panfrost_mmu.h index 022a9a74a114..e6e6966a0cca 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.h +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.h @@ -16,7 +16,7 @@ void panfrost_mmu_fini(struct panfrost_device *pfdev); void panfrost_mmu_reset(struct panfrost_device *pfdev); void panfrost_mmu_suspend_irq(struct panfrost_device *pfdev); =20 -u32 panfrost_mmu_as_get(struct panfrost_device *pfdev, struct panfrost_mmu= *mmu); +int panfrost_mmu_as_get(struct panfrost_device *pfdev, struct panfrost_mmu= *mmu); void panfrost_mmu_as_put(struct panfrost_device *pfdev, struct panfrost_mm= u *mmu); =20 struct panfrost_mmu *panfrost_mmu_ctx_get(struct panfrost_mmu *mmu); diff --git a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c b/drivers/gpu/drm/= panfrost/panfrost_perfcnt.c index f30817bcf8ba..c551fa1ddfe5 100644 --- a/drivers/gpu/drm/panfrost/panfrost_perfcnt.c +++ b/drivers/gpu/drm/panfrost/panfrost_perfcnt.c @@ -130,7 +130,12 @@ static int panfrost_perfcnt_enable_locked(struct panfr= ost_device *pfdev, =20 perfcnt->user =3D user; =20 - as =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); + ret =3D panfrost_mmu_as_get(pfdev, perfcnt->mapping->mmu); + if (ret) + goto err_unsetuser; + + as =3D ret; + cfg =3D GPU_PERFCNT_CFG_AS(as) | GPU_PERFCNT_CFG_MODE(GPU_PERFCNT_CFG_MODE_MANUAL); =20 @@ -164,6 +169,8 @@ static int panfrost_perfcnt_enable_locked(struct panfro= st_device *pfdev, =20 return 0; =20 +err_unsetuser: + perfcnt->user =3D NULL; err_vunmap: drm_gem_vunmap_unlocked(&bo->base, &map); err_put_mapping: --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3C2101C3C17 for ; Wed, 4 Dec 2024 18:50:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338243; cv=pass; b=M1R8o8T6g25LH+7g5j89dS8O28tE/XDaY+xnWQc5L+vjLhtJZhkv00dVkXxVh0Ksv+k7VueWitLmlGt/9KEg12TWea1Cjue56KtSOxCwI0rEDmKXwjvTpikQcRO/3mS+f7TqklIR8DT4oK8HA59lO9ExrFj1LpN2VyKPx8C9BJA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338243; c=relaxed/simple; bh=Gxmgl7JId5YxLhp27WPo8S0U++enkznLsBC2CCUE1hw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=IquKYr7p2Bpf79kS7/06HBUF5nAkNBLXQcDr9YyYs3TPNsZ1uwAQ+zmyiqdVs6wv8vZyR5bfJEGMPJMJkastTeyrqV103b1GWdUc6s6PoH3vZJ4kmprHSrPbcq8nwGJW4FgXu8OcaEQxYnQFVoE6GRZMyFC5xDdKJ+J7fSw5pGo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=ViapI7YA; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="ViapI7YA" ARC-Seal: i=1; a=rsa-sha256; t=1733338222; cv=none; d=zohomail.com; s=zohoarc; b=Acg2d6GZnOyyCpVc6VksZQPJGwLzxw6lyRX9Ul0rq7swnZluA3+3KCIrmSrUVX29k4JSlzR9AeFBs+qdSduwqwqLXNBDP3E55JhexK2BftL/fi+INfXXpJEv/xK4W+3mWpRJg+19HQ5z9iDMi6U2CWcNpwWnUepKB++zFO1hzzo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338222; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=lEXhHGys1FAioT7vrf84uPdDoQxjt+sd75zd+0joyCA=; b=GVz4aysZo33wyb8f9VAOYWvY7rN10stWqSuV1p30NWYIcCTmEMWx+cYYqcKNsUUHau9aGnGG/fGILSAEIFvHjpZlJn+jVQ8afuJrxvZTOpOyig/MoESRG5/vA2peC52ldwEaha/VLCjfWH4Sl04xZG+CBdju7vF42hE13LrehjY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338222; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=lEXhHGys1FAioT7vrf84uPdDoQxjt+sd75zd+0joyCA=; b=ViapI7YA1WLu894zvHjSSoiWCOP/fYk4cwT1cdYnQvPN+mcrJUOmypQw99/FuA7r IMhSLnHPiym0T6OCzZPFHDd/TqUv396Jpqn9ugGA8iYnYt3KeTacwpQAcd3Azab8QdE K//VpzbVfkElJ848yXDXYpSHSGCqqdZPwH/r2fiM= Received: by mx.zohomail.com with SMTPS id 1733338220730866.7866025559289; Wed, 4 Dec 2024 10:50:20 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 5/9] drm/panfrost: Handle page mapping failure Date: Wed, 4 Dec 2024 18:49:34 +0000 Message-ID: <20241204184945.1477677-6-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When mapping the pages of a BO, either a heap type at page fault time or else a non-heap BO at object creation time, if the ARM page table mapping function fails, we unmap what had been mapped so far and bail out. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_mmu.c | 49 ++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 03ac527b35e7..2a6c60170109 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -290,13 +290,32 @@ static void panfrost_mmu_flush_range(struct panfrost_= device *pfdev, pm_runtime_put_autosuspend(pfdev->base.dev); } =20 +static void mmu_unmap_range(struct panfrost_mmu *mmu, u64 iova, size_t len) +{ + struct io_pgtable_ops *ops =3D mmu->pgtbl_ops; + size_t pgsize, unmapped_len =3D 0; + size_t unmapped_page, pgcount; + + while (unmapped_len < len) { + pgsize =3D get_pgsize(iova, len - unmapped_len, &pgcount); + + unmapped_page =3D ops->unmap_pages(ops, iova, pgsize, pgcount, NULL); + WARN_ON(unmapped_page !=3D pgsize * pgcount); + + iova +=3D pgsize * pgcount; + unmapped_len +=3D pgsize * pgcount; + } +} + static int mmu_map_sg(struct panfrost_device *pfdev, struct panfrost_mmu *= mmu, u64 iova, int prot, struct sg_table *sgt) { unsigned int count; struct scatterlist *sgl; struct io_pgtable_ops *ops =3D mmu->pgtbl_ops; + size_t total_mapped =3D 0; u64 start_iova =3D iova; + int ret; =20 for_each_sgtable_dma_sg(sgt, sgl, count) { unsigned long paddr =3D sg_dma_address(sgl); @@ -310,10 +329,14 @@ static int mmu_map_sg(struct panfrost_device *pfdev, = struct panfrost_mmu *mmu, size_t pgcount, mapped =3D 0; size_t pgsize =3D get_pgsize(iova | paddr, len, &pgcount); =20 - ops->map_pages(ops, iova, paddr, pgsize, pgcount, prot, + ret =3D ops->map_pages(ops, iova, paddr, pgsize, pgcount, prot, GFP_KERNEL, &mapped); + if (ret) + goto err_unmap_pages; + /* Don't get stuck if things have gone wrong */ mapped =3D max(mapped, pgsize); + total_mapped +=3D mapped; iova +=3D mapped; paddr +=3D mapped; len -=3D mapped; @@ -323,6 +346,10 @@ static int mmu_map_sg(struct panfrost_device *pfdev, s= truct panfrost_mmu *mmu, panfrost_mmu_flush_range(pfdev, mmu, start_iova, iova - start_iova); =20 return 0; + +err_unmap_pages: + mmu_unmap_range(mmu, start_iova, total_mapped); + return ret; } =20 int panfrost_mmu_map(struct panfrost_gem_mapping *mapping) @@ -333,6 +360,7 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *mappi= ng) struct panfrost_device *pfdev =3D to_panfrost_device(obj->dev); struct sg_table *sgt; int prot =3D IOMMU_READ | IOMMU_WRITE; + int ret; =20 if (WARN_ON(mapping->active)) return 0; @@ -344,11 +372,18 @@ int panfrost_mmu_map(struct panfrost_gem_mapping *map= ping) if (WARN_ON(IS_ERR(sgt))) return PTR_ERR(sgt); =20 - mmu_map_sg(pfdev, mapping->mmu, mapping->mmnode.start << PAGE_SHIFT, - prot, sgt); + ret =3D mmu_map_sg(pfdev, mapping->mmu, mapping->mmnode.start << PAGE_SHI= FT, + prot, sgt); + if (ret) + goto err_put_pages; + mapping->active =3D true; =20 return 0; + +err_put_pages: + drm_gem_shmem_put_pages(shmem); + return ret; } =20 void panfrost_mmu_unmap(struct panfrost_gem_mapping *mapping) @@ -532,8 +567,10 @@ static int panfrost_mmu_map_fault_addr(struct panfrost= _device *pfdev, int as, if (ret) goto err_map; =20 - mmu_map_sg(pfdev, bomapping->mmu, addr, - IOMMU_WRITE | IOMMU_READ | IOMMU_NOEXEC, sgt); + ret =3D mmu_map_sg(pfdev, bomapping->mmu, addr, + IOMMU_WRITE | IOMMU_READ | IOMMU_NOEXEC, sgt); + if (ret) + goto err_mmu_map_sg; =20 bomapping->active =3D true; bo->heap_rss_size +=3D SZ_2M; @@ -547,6 +584,8 @@ static int panfrost_mmu_map_fault_addr(struct panfrost_= device *pfdev, int as, =20 return 0; =20 +err_mmu_map_sg: + dma_unmap_sgtable(pfdev->base.dev, sgt, DMA_BIDIRECTIONAL, 0); err_map: sg_free_table(sgt); err_unlock: --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22DA21F03DA for ; Wed, 4 Dec 2024 18:50:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338247; cv=pass; b=c3Ew6kJ+bSsMvV7viWEeBAiBxif6cVjKbeqqqh6mnA1ex9gn6WnXGLCZ3Ip3z/0C1IOkiFA9LCAdLJi00acxYEW1fsNhj4UvW5T9yOcbYERWRHuCRcFBuacEeDxjhHpojRT391lrr6nguZTk7dnDRf6Y/9XkeJ0zZK1pbpPaYwE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338247; c=relaxed/simple; bh=JGqoCNLTTbZXwbaVDqpvrG4edotoEApTfRM+i/clZIk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nuM8CUsmGQOSrGAvMTS+babAJbS13TWh96uF204tOl+UX6rjUQhmsZnMgV6gz9ZcvcAMxo/GeuJDdsSi1AES/HJFOUpmtHInx8Na7Inxe/VS9Tp7neBHWrmML0RR0+45DGhQN6IE4eRnh3dFVSzxRGVOc00eUWNN3+oUPB38trs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=e/CPsla6; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="e/CPsla6" ARC-Seal: i=1; a=rsa-sha256; t=1733338224; cv=none; d=zohomail.com; s=zohoarc; b=kFIjlcbR/X88RRsfL7iG6+XXAxHy/XZi1YnqqWOzPE/ER5ea6k0N1fNd290QHeUoQqLrOMguZWtdWemEcnMTRb+YxWeA5px07vhujdFZ6noCv/zUhaoOsT5b2J9VrBiLXciLRK92IhHPqvwViwLY6P52s3WV/NNLAaDTPtGXGjk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338224; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=tH78IWKyYFFk7AcWXgGVFrk4fXHp9kJonxjpfidTDt4=; b=gQ4dn+YYNHF40P0Ma7owIALzFKfqZbkWtqXfdQQzvqzQl9mw6TOs5b9zNkbwn7dtUiBACc5Hzl+5wBqufGbp/ZWkrDJSmDwW2hYNgyw0McT+5cz8hnzE5crDoXx0g3rHvWfurDT4yPcayfA1hYlz7f0bqPnATB/k6U+k+zsgPWU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338224; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=tH78IWKyYFFk7AcWXgGVFrk4fXHp9kJonxjpfidTDt4=; b=e/CPsla6zuFVjzOEfjTJFMsWPxmCs7WWemQvqvQIUm86f/pWgHBFWq0NnW1JX1uY VWfyKoiWgK+88RNnHe7kZDwEqz7SCqG2BQXMyYSFMoOB4aoTf7UobU+8CO+gp4sGxXO KHus7+huk4yPeIT7ihRiKTsjDhdNuNh4A0b4yuXo= Received: by mx.zohomail.com with SMTPS id 173333822341858.21122196726333; Wed, 4 Dec 2024 10:50:23 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 6/9] drm/panfrost: Don't rework job IRQ enable mask in the enable path Date: Wed, 4 Dec 2024 18:49:35 +0000 Message-ID: <20241204184945.1477677-7-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Up until now, panfrost_job_enable_interrupts() would always recalculate the same job IRQ enablement mask, which is effectively a constant. Replace it with a compile-time constant value, and also in another couple places where an equivalent expression was being used. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.h | 4 ++++ drivers/gpu/drm/panfrost/panfrost_job.c | 19 ++++--------------- 2 files changed, 8 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index d9aea2c2cbe5..8bddc37aee19 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -25,6 +25,10 @@ struct panfrost_perfcnt; #define NUM_JOB_SLOTS 3 #define MAX_PM_DOMAINS 5 =20 +#define ALL_JS_INT_MASK \ + (GENMASK(16 + NUM_JOB_SLOTS - 1, 16) | \ + GENMASK(NUM_JOB_SLOTS - 1, 0)) + enum panfrost_drv_comp_bits { PANFROST_COMP_BIT_GPU, PANFROST_COMP_BIT_JOB, diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index d10f66f4cc53..e599a8535511 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -423,17 +423,10 @@ static struct dma_fence *panfrost_job_run(struct drm_= sched_job *sched_job) =20 void panfrost_job_enable_interrupts(struct panfrost_device *pfdev) { - int j; - u32 irq_mask =3D 0; - clear_bit(PANFROST_COMP_BIT_JOB, pfdev->is_suspended); =20 - for (j =3D 0; j < NUM_JOB_SLOTS; j++) { - irq_mask |=3D MK_JS_MASK(j); - } - - job_write(pfdev, JOB_INT_CLEAR, irq_mask); - job_write(pfdev, JOB_INT_MASK, irq_mask); + job_write(pfdev, JOB_INT_CLEAR, ALL_JS_INT_MASK); + job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK); } =20 void panfrost_job_suspend_irq(struct panfrost_device *pfdev) @@ -752,9 +745,7 @@ panfrost_reset(struct panfrost_device *pfdev, drm_sched_start(&pfdev->js->queue[i].sched, 0); =20 /* Re-enable job interrupts now that everything has been restarted. */ - job_write(pfdev, JOB_INT_MASK, - GENMASK(16 + NUM_JOB_SLOTS - 1, 16) | - GENMASK(NUM_JOB_SLOTS - 1, 0)); + job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK); =20 dma_fence_end_signalling(cookie); } @@ -827,9 +818,7 @@ static irqreturn_t panfrost_job_irq_handler_thread(int = irq, void *data) =20 /* Enable interrupts only if we're not about to get suspended */ if (!test_bit(PANFROST_COMP_BIT_JOB, pfdev->is_suspended)) - job_write(pfdev, JOB_INT_MASK, - GENMASK(16 + NUM_JOB_SLOTS - 1, 16) | - GENMASK(NUM_JOB_SLOTS - 1, 0)); + job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK); =20 return IRQ_HANDLED; } --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3D45A1F03F9 for ; Wed, 4 Dec 2024 18:50:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338250; cv=pass; b=DuJwsFO4ZUfFJaK7Y1lMtEJdn1Ilhpa1g9mDgJLDdGFz/2cQlC6hKA+SwDzyuhda/wF8RqNY6gwt05FJdv//Q+m1Blu0fjDDYM7rgz3AmBv7QByAZk11bYA7OM7r+aJ2FYDwiO82lpx1/mJxaAuh81ls5VSKMvzSxc4kongB5R8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338250; c=relaxed/simple; bh=FeNgi9x7/4cdqFpnrmWJ2bSGpVXCjbSMxtuIeMbFV3s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W8bljF++PneSo+qO8B4eYbOlx+jIdPIqGRAgMyqkP82pkLOAavt+CRURwP2Ze+wyuabWvUJnYLFCckP353nDg/+nfd5rFmfeQwx6n55/loWyOSwE4HP4xOTE6fsnTfBCvcBY9IBiI8NHH+AgurFw9BybgiHrv2uFvyXZiSZRwl4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=IRJrWQwN; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="IRJrWQwN" ARC-Seal: i=1; a=rsa-sha256; t=1733338228; cv=none; d=zohomail.com; s=zohoarc; b=IC3H6K4dpyxpiOudZkbMXl2mvkbkTxMhmjHqz04/2q5uxbd6oPd0O3AUJO5z8lnreMWWjKbUAGGzHIWiwce6p1DtZJmFs/kRoXvmfOkyADp6Qpz2VzVWaflvM/kBiXayZnTwFiOj8xPwXkvc+ha5b4L9Fj96uvL5MZZfhtV2b1g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338228; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=W2svrh7vS6Pni7QoUPS3Qb615NzfHeczA8rly3S+pGU=; b=SLvj3uOGhXk4sUtE4xOIsLJhvmPTfKSdybh4TXwUgGhORcyTApM++xFhmzS9rHmnl0qR7gjP0ryrJOK2PdwBGNi5k01XdYI05Q9ANxtu1K6cgm36z5W42mgrYXkOtpHejyLXxIjWAqrCIzh1Cro1WBW8T+Eeq0tUzrABnav+TH4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338228; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=W2svrh7vS6Pni7QoUPS3Qb615NzfHeczA8rly3S+pGU=; b=IRJrWQwNy/3ljCvenGwzLdP+4X+FA3SrKME4lzJ63W+e/K8dXMNPBERKHQo/HItI ucMR7vHxqQGHv3GhQDREIPeQmChAiz/QBuIvdgWHGU2zdL8+zyj+2QriV3bcGX7UBVR ZqmPmsN+NJV04fbAMkxpCGrJJB4PcQqnH9jbw/Zc= Received: by mx.zohomail.com with SMTPS id 1733338225987892.9560656832709; Wed, 4 Dec 2024 10:50:25 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 7/9] drm/panfrost: Make re-enabling job interrupts at device reset optional Date: Wed, 4 Dec 2024 18:49:36 +0000 Message-ID: <20241204184945.1477677-8-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Rather than remasking interrupts after a device reset in the main reset path, allow selecting whether to do this with an additional bool parameter. To this end, split reenabling job interrupts into two functions, one that clears the interrupts and another one which unmasks them conditionally. Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.c | 9 ++++++--- drivers/gpu/drm/panfrost/panfrost_device.h | 2 +- drivers/gpu/drm/panfrost/panfrost_job.c | 17 ++++++++--------- drivers/gpu/drm/panfrost/panfrost_job.h | 1 + 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.c b/drivers/gpu/drm/p= anfrost/panfrost_device.c index 4fe29286bbe3..ac067eddd037 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.c +++ b/drivers/gpu/drm/panfrost/panfrost_device.c @@ -395,20 +395,23 @@ bool panfrost_exception_needs_reset(const struct panf= rost_device *pfdev, return false; } =20 -void panfrost_device_reset(struct panfrost_device *pfdev) +void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int) { panfrost_gpu_soft_reset(pfdev); =20 panfrost_gpu_power_on(pfdev); panfrost_mmu_reset(pfdev); - panfrost_job_enable_interrupts(pfdev); + + panfrost_job_reset_interrupts(pfdev); + if (enable_job_int) + panfrost_job_enable_interrupts(pfdev); } =20 static int panfrost_device_runtime_resume(struct device *dev) { struct panfrost_device *pfdev =3D dev_get_drvdata(dev); =20 - panfrost_device_reset(pfdev); + panfrost_device_reset(pfdev, true); panfrost_devfreq_resume(pfdev); =20 return 0; diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index 8bddc37aee19..30ce8cec1aa6 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -209,7 +209,7 @@ int panfrost_unstable_ioctl_check(void); =20 int panfrost_device_init(struct panfrost_device *pfdev); void panfrost_device_fini(struct panfrost_device *pfdev); -void panfrost_device_reset(struct panfrost_device *pfdev); +void panfrost_device_reset(struct panfrost_device *pfdev, bool enable_job_= int); =20 extern const struct dev_pm_ops panfrost_pm_ops; =20 diff --git a/drivers/gpu/drm/panfrost/panfrost_job.c b/drivers/gpu/drm/panf= rost/panfrost_job.c index e599a8535511..c1cf37e3c4c1 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.c +++ b/drivers/gpu/drm/panfrost/panfrost_job.c @@ -421,11 +421,14 @@ static struct dma_fence *panfrost_job_run(struct drm_= sched_job *sched_job) return fence; } =20 +void panfrost_job_reset_interrupts(struct panfrost_device *pfdev) +{ + job_write(pfdev, JOB_INT_CLEAR, ALL_JS_INT_MASK); +} + void panfrost_job_enable_interrupts(struct panfrost_device *pfdev) { clear_bit(PANFROST_COMP_BIT_JOB, pfdev->is_suspended); - - job_write(pfdev, JOB_INT_CLEAR, ALL_JS_INT_MASK); job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK); } =20 @@ -718,12 +721,7 @@ panfrost_reset(struct panfrost_device *pfdev, spin_unlock(&pfdev->js->job_lock); =20 /* Proceed with reset now. */ - panfrost_device_reset(pfdev); - - /* panfrost_device_reset() unmasks job interrupts, but we want to - * keep them masked a bit longer. - */ - job_write(pfdev, JOB_INT_MASK, 0); + panfrost_device_reset(pfdev, false); =20 /* GPU has been reset, we can clear the reset pending bit. */ atomic_set(&pfdev->reset.pending, 0); @@ -745,7 +743,7 @@ panfrost_reset(struct panfrost_device *pfdev, drm_sched_start(&pfdev->js->queue[i].sched, 0); =20 /* Re-enable job interrupts now that everything has been restarted. */ - job_write(pfdev, JOB_INT_MASK, ALL_JS_INT_MASK); + panfrost_job_enable_interrupts(pfdev); =20 dma_fence_end_signalling(cookie); } @@ -894,6 +892,7 @@ int panfrost_job_init(struct panfrost_device *pfdev) } } =20 + panfrost_job_reset_interrupts(pfdev); panfrost_job_enable_interrupts(pfdev); =20 return 0; diff --git a/drivers/gpu/drm/panfrost/panfrost_job.h b/drivers/gpu/drm/panf= rost/panfrost_job.h index ec581b97852b..c9d4b77d5ed1 100644 --- a/drivers/gpu/drm/panfrost/panfrost_job.h +++ b/drivers/gpu/drm/panfrost/panfrost_job.h @@ -46,6 +46,7 @@ void panfrost_job_close(struct panfrost_file_priv *panfro= st_priv); int panfrost_job_get_slot(struct panfrost_job *job); int panfrost_job_push(struct panfrost_job *job); void panfrost_job_put(struct panfrost_job *job); +void panfrost_job_reset_interrupts(struct panfrost_device *pfdev); void panfrost_job_enable_interrupts(struct panfrost_device *pfdev); void panfrost_job_suspend_irq(struct panfrost_device *pfdev); int panfrost_job_is_idle(struct panfrost_device *pfdev); --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D9CD61F5404 for ; Wed, 4 Dec 2024 18:50:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338251; cv=pass; b=qc5alyOq7m2JmD1Yh6hK4i6Lc5x11a2eWU/lskgE9lqydLFE/oDC/45JipuluTpOqoGMOWL9nedSbpiYvUOVnWoNn7zfvP0mK1uBi5pHjykXvE4ymlqK+qJ0MqO08rNMtmP08WKku2PICGV+AuhsWfjpY9aOX1EOm+IxCWSAy/E= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338251; c=relaxed/simple; bh=I4kn7o3dQA7UNq5U/VE1rUhvDUHzxgWFvHathwXuJwk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=K4lw6DZj3zE/d9EvwnlqPwc8S722aJAAGB1eAU0Zn5ON6Hi2do/n2tJHIbHhN5nj0APmKmlS/locYmKD7rLLICNxz+O1o9bMo1aHz2LgIGAcLbHL6uoXgQavqnZ/RU3+krKszw5RLfuQYC8hgrRT4jRXvVk4ZYf3YqNhjPL8y8E= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=SIWj1okh; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="SIWj1okh" ARC-Seal: i=1; a=rsa-sha256; t=1733338230; cv=none; d=zohomail.com; s=zohoarc; b=UiUW6u+kUHBO95VyEtPTPdyOUyn2ffyH22dNOqn5sktuN4bAYzhSuj5OXGNIO99n+CRw52K8H+Sqhuthe+hVElmYFlnr0GEy0F5Y0e9rBVL1FNhZ1A8dBbEC59uRp/gwC6wtH+Gqbprjp+QGhDC9Edfpzm/gnaUxUtAeIJYP3v0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338230; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Z4cnhxf/c5ioQPu9CgEC8xnKTrDLFOWLMVaDiNAiR6I=; b=VzG4GZ3i1T+UKRcCZGNDCW8oOEtC819jLFUe0Rh2IDkpU2En9ydGQEVh8FJighpIs6yQv/mEifGnouT384ltgpQOcm58UixfBZf4dZzqzjZgtGNUOcJiC3/CUjNokhrBCqWtHdtnSGAnquOv+9wMcyzA863lN0XBUx99r6HCtrY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338230; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=Z4cnhxf/c5ioQPu9CgEC8xnKTrDLFOWLMVaDiNAiR6I=; b=SIWj1okh95+sbf9A34d0rPAnPKHiONLi4/6skD0XXgzWx/HoW8PAR93gu/9bDoSZ NcXCOD2OjasIovj64Nh7Fg19D8BLyv3fMorW5ixJ1IaIcH0mrIPa2IfsObjQaSUqDIG 4AJDKFq/9iE2b6BMOPsfbmClgAhjjsZVQAQkDdA0= Received: by mx.zohomail.com with SMTPS id 1733338228692326.96738407483633; Wed, 4 Dec 2024 10:50:28 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 8/9] drm/panfrost: Add forward declaration and types header Date: Wed, 4 Dec 2024 18:49:37 +0000 Message-ID: <20241204184945.1477677-9-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable This is to make LLVM syntactic analysers happy. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_mmu.h | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.h b/drivers/gpu/drm/panf= rost/panfrost_mmu.h index e6e6966a0cca..27c3c65ed074 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.h +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.h @@ -4,6 +4,7 @@ #ifndef __PANFROST_MMU_H__ #define __PANFROST_MMU_H__ =20 +struct panfrost_device; struct panfrost_gem_mapping; struct panfrost_file_priv; struct panfrost_mmu; --=20 2.47.0 From nobody Thu Dec 18 09:47:24 2025 Received: from sender4-pp-f112.zoho.com (sender4-pp-f112.zoho.com [136.143.188.112]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 558BB1F5426 for ; Wed, 4 Dec 2024 18:50:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=pass smtp.client-ip=136.143.188.112 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338253; cv=pass; b=h85m/5+D8V0/bD1Q19gOinpnX22CqerW2x9e2VfoZk4ehgGKKMtk9xaq2tdlTUeu1BGjW7uCBjwRWjhZPxrV6Ss5obvicS3C8I6vupad6TKThQnpFuMKLmeTSqbiIp0epahybmaXc6Br2PhqlsVkjmqIeoyRDMtcVaVjIyPl/wI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1733338253; c=relaxed/simple; bh=dplq4x6BedNB5JheFQIXwPZGhbGv4xVl4+D/cXJcX2g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=XaxW9qgALLjsY7fgJtBqKLWdLRMwIW1Nf3IYVI15tPa9USvAT+6srPlPtCBjYbsSd726wxCHgrVwaFTP6Fuo46SDej6JkVgqHMIxItHmZXyUEM4N/cBZXA6MDAsUMKSx8ow9loX+LpmsjCvsv9fCe1NoHcavsHytj3GAbp2PgIk= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b=MxDjWDBE; arc=pass smtp.client-ip=136.143.188.112 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=collabora.com header.i=adrian.larumbe@collabora.com header.b="MxDjWDBE" ARC-Seal: i=1; a=rsa-sha256; t=1733338232; cv=none; d=zohomail.com; s=zohoarc; b=g5ov8K2zqxVSH2Z5IH9nRm+RGq78G57aQffUfuEklFccCLY629g/IsCfXWeY6ejsuDZTbgsYWl2VmTxMy2QimCNbEuWdn2IggM/1DAkaallb97R+scw2eJDwjhQ14eOiyh3sBTHQamvKmmh5mUtRF6EmFo2H+HHxoE5teBBrwFg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1733338232; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ows0zJTgSZQ4scHFg0XOpHfquBwwawR0kxgR/lAiOQA=; b=N/i4zihArNbnjW5roW11qwta/gCSQgCHugXLS7LWxjKdUDjCMwiX7yjnBKMRla02eeXjQQDzSoJGNMbEekq+65npAK4Ll3XsxhfeTfckhsgek6NAni33oHHqjaYl/EpkvSMdi609z0agsgtZAyHVRmk+CLGdpFdCCOu7NZOSmDQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=collabora.com; spf=pass smtp.mailfrom=adrian.larumbe@collabora.com; dmarc=pass header.from= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; t=1733338232; s=zohomail; d=collabora.com; i=adrian.larumbe@collabora.com; h=From:From:To:To:Cc:Cc:Subject:Subject:Date:Date:Message-ID:In-Reply-To:References:MIME-Version:Content-Type:Content-Transfer-Encoding:Message-Id:Reply-To; bh=Ows0zJTgSZQ4scHFg0XOpHfquBwwawR0kxgR/lAiOQA=; b=MxDjWDBEMxm2eAtndg1+cEeULnvauw0VZd9aAkzEAIBby/5u7hVKtMWJvqbujQtt WKwYEsOtc06+BqjJfaHlShBaC4tACtwOgAcxNBTeZN+2qy+H85O4RqjeOQOD7KqAMc1 HsBQWa3e4RZudV5JTVVyeylz7LeLuylEb6opWSuI= Received: by mx.zohomail.com with SMTPS id 1733338231243207.3303468289498; Wed, 4 Dec 2024 10:50:31 -0800 (PST) From: =?UTF-8?q?Adri=C3=A1n=20Larumbe?= To: Boris Brezillon , Rob Herring , Steven Price , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philipp Zabel Cc: kernel@collabora.com, =?UTF-8?q?Adri=C3=A1n=20Larumbe?= , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 9/9] drm/panfrost: Remove unused device property Date: Wed, 4 Dec 2024 18:49:38 +0000 Message-ID: <20241204184945.1477677-10-adrian.larumbe@collabora.com> X-Mailer: git-send-email 2.47.0 In-Reply-To: <20241204184945.1477677-1-adrian.larumbe@collabora.com> References: <20241204184945.1477677-1-adrian.larumbe@collabora.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The as_in_use_mask device state variable is no longer in use. Reviewed-by: Boris Brezillon Signed-off-by: Adri=C3=A1n Larumbe --- drivers/gpu/drm/panfrost/panfrost_device.h | 1 - drivers/gpu/drm/panfrost/panfrost_mmu.c | 1 - 2 files changed, 2 deletions(-) diff --git a/drivers/gpu/drm/panfrost/panfrost_device.h b/drivers/gpu/drm/p= anfrost/panfrost_device.h index 30ce8cec1aa6..6aea214ca1f2 100644 --- a/drivers/gpu/drm/panfrost/panfrost_device.h +++ b/drivers/gpu/drm/panfrost/panfrost_device.h @@ -121,7 +121,6 @@ struct panfrost_device { DECLARE_BITMAP(is_suspended, PANFROST_COMP_BIT_MAX); =20 spinlock_t as_lock; - unsigned long as_in_use_mask; unsigned long as_alloc_mask; unsigned long as_faulty_mask; struct list_head as_lru_list; diff --git a/drivers/gpu/drm/panfrost/panfrost_mmu.c b/drivers/gpu/drm/panf= rost/panfrost_mmu.c index 2a6c60170109..6914018d5540 100644 --- a/drivers/gpu/drm/panfrost/panfrost_mmu.c +++ b/drivers/gpu/drm/panfrost/panfrost_mmu.c @@ -609,7 +609,6 @@ static void panfrost_mmu_release_ctx(struct kref *kref) pm_runtime_put_autosuspend(pfdev->base.dev); =20 clear_bit(mmu->as, &pfdev->as_alloc_mask); - clear_bit(mmu->as, &pfdev->as_in_use_mask); list_del(&mmu->list); } spin_unlock(&pfdev->as_lock); --=20 2.47.0