* [PATCH v3] drm/etnaviv: add optional reset support
@ 2024-12-06 17:00 LECOINTRE Philippe
2024-12-09 10:06 ` Lucas Stach
0 siblings, 1 reply; 3+ messages in thread
From: LECOINTRE Philippe @ 2024-12-06 17:00 UTC (permalink / raw)
To: Lucas Stach, Russell King, Christian Gmeiner
Cc: David Airlie, Simona Vetter, etnaviv, dri-devel, linux-kernel,
LENAIN Simon, BARBEAU Etienne, LEJEUNE Sebastien
Add optional reset support which is mentioned in vivante,gc.yaml to
allow the driver to work on SoCs whose reset signal is asserted by default
Signed-off-by: Philippe Lecointre <philippe.lecointre@thalesgroup.com>
Reviewed-by: Simon Lenain <simon.lenain@thalesgroup.com>
---
v3:
- Rework to match initial feedback
---
drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 37 +++++++++++++++++++++++++++
drivers/gpu/drm/etnaviv/etnaviv_gpu.h | 1 +
2 files changed, 38 insertions(+)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
index 2d4c112ce033..1961ebac315a 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
@@ -13,6 +13,7 @@
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
+#include <linux/reset.h>
#include <linux/thermal.h>
#include "etnaviv_cmdbuf.h"
@@ -172,6 +173,25 @@ int etnaviv_gpu_get_param(struct etnaviv_gpu *gpu, u32 param, u64 *value)
return 0;
}
+static int etnaviv_gpu_reset_deassert(struct etnaviv_gpu *gpu)
+{
+ int ret;
+
+ /* 32 core clock cycles (slowest clock) required before deassertion */
+ /* 1 microsecond might match all implementations without computation */
+ usleep_range(1, 2);
+
+ ret = reset_control_deassert(gpu->rst);
+ if (ret)
+ return ret;
+
+ /* 128 core clock cycles (slowest clock) required before any activity on AHB */
+ /* 1 microsecond might match all implementations without computation */
+ usleep_range(1, 2);
+
+ return 0;
+}
+
static inline bool etnaviv_is_model_rev(struct etnaviv_gpu *gpu, u32 model, u32 revision)
{
return gpu->identity.model == model &&
@@ -799,6 +819,12 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
goto pm_put;
}
+ ret = etnaviv_gpu_reset_deassert(gpu);
+ if (ret) {
+ dev_err(gpu->dev, "GPU reset deassert failed\n");
+ goto fail;
+ }
+
etnaviv_hw_identify(gpu);
if (gpu->identity.model == 0) {
@@ -1860,6 +1886,17 @@ static int etnaviv_gpu_platform_probe(struct platform_device *pdev)
if (IS_ERR(gpu->mmio))
return PTR_ERR(gpu->mmio);
+
+ /* Get Reset: */
+ gpu->rst = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
+ if (IS_ERR(gpu->rst))
+ return dev_err_probe(dev, PTR_ERR(gpu->rst),
+ "failed to get reset\n");
+
+ err = reset_control_assert(gpu->rst);
+ if (err)
+ return dev_err_probe(dev, err, "failed to assert reset\n");
+
/* Get Interrupt: */
gpu->irq = platform_get_irq(pdev, 0);
if (gpu->irq < 0)
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
index 4d8a7d48ade3..0985ea548b82 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
@@ -158,6 +158,7 @@ struct etnaviv_gpu {
struct clk *clk_reg;
struct clk *clk_core;
struct clk *clk_shader;
+ struct reset_control *rst;
unsigned int freq_scale;
unsigned int fe_waitcycles;
--
2.19.1
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: [PATCH v3] drm/etnaviv: add optional reset support
2024-12-06 17:00 [PATCH v3] drm/etnaviv: add optional reset support LECOINTRE Philippe
@ 2024-12-09 10:06 ` Lucas Stach
2024-12-10 11:22 ` LENAIN Simon
0 siblings, 1 reply; 3+ messages in thread
From: Lucas Stach @ 2024-12-09 10:06 UTC (permalink / raw)
To: LECOINTRE Philippe, Russell King, Christian Gmeiner
Cc: David Airlie, Simona Vetter, etnaviv, dri-devel, linux-kernel,
LENAIN Simon, BARBEAU Etienne, LEJEUNE Sebastien
Hi Philippe,
Am Freitag, dem 06.12.2024 um 17:00 +0000 schrieb LECOINTRE Philippe:
> Add optional reset support which is mentioned in vivante,gc.yaml to
> allow the driver to work on SoCs whose reset signal is asserted by default
>
> Signed-off-by: Philippe Lecointre <philippe.lecointre@thalesgroup.com>
> Reviewed-by: Simon Lenain <simon.lenain@thalesgroup.com>
Upstream usually doesn't put much weight on such internal reviews. No
harm here, as the patch is simple enough and I do review it before
applying. Just as a hint for the future: if you want maintainers to
take such reviews into account for speeding up the adoption of a patch,
do the review on the public mailing lists.
> ---
> v3:
> - Rework to match initial feedback
> ---
> drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 37 +++++++++++++++++++++++++++
> drivers/gpu/drm/etnaviv/etnaviv_gpu.h | 1 +
> 2 files changed, 38 insertions(+)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> index 2d4c112ce033..1961ebac315a 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> @@ -13,6 +13,7 @@
> #include <linux/platform_device.h>
> #include <linux/pm_runtime.h>
> #include <linux/regulator/consumer.h>
> +#include <linux/reset.h>
> #include <linux/thermal.h>
>
> #include "etnaviv_cmdbuf.h"
> @@ -172,6 +173,25 @@ int etnaviv_gpu_get_param(struct etnaviv_gpu *gpu, u32 param, u64 *value)
> return 0;
> }
>
> +static int etnaviv_gpu_reset_deassert(struct etnaviv_gpu *gpu)
> +{
> + int ret;
> +
> + /* 32 core clock cycles (slowest clock) required before deassertion */
> + /* 1 microsecond might match all implementations without computation */
I missed to mention this before, as I was focused on the technical
side: this is not the multiline comment style used in the
kernel/etnaviv. Please use the same style as already found in this
file.
> + usleep_range(1, 2);
> +
> + ret = reset_control_deassert(gpu->rst);
> + if (ret)
> + return ret;
> +
> + /* 128 core clock cycles (slowest clock) required before any activity on AHB */
> + /* 1 microsecond might match all implementations without computation */
> + usleep_range(1, 2);
> +
> + return 0;
> +}
> +
> static inline bool etnaviv_is_model_rev(struct etnaviv_gpu *gpu, u32 model, u32 revision)
> {
> return gpu->identity.model == model &&
> @@ -799,6 +819,12 @@ int etnaviv_gpu_init(struct etnaviv_gpu *gpu)
> goto pm_put;
> }
>
> + ret = etnaviv_gpu_reset_deassert(gpu);
> + if (ret) {
> + dev_err(gpu->dev, "GPU reset deassert failed\n");
> + goto fail;
> + }
> +
> etnaviv_hw_identify(gpu);
>
> if (gpu->identity.model == 0) {
> @@ -1860,6 +1886,17 @@ static int etnaviv_gpu_platform_probe(struct platform_device *pdev)
> if (IS_ERR(gpu->mmio))
> return PTR_ERR(gpu->mmio);
>
> +
> + /* Get Reset: */
> + gpu->rst = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL);
> + if (IS_ERR(gpu->rst))
> + return dev_err_probe(dev, PTR_ERR(gpu->rst),
> + "failed to get reset\n");
> +
> + err = reset_control_assert(gpu->rst);
> + if (err)
> + return dev_err_probe(dev, err, "failed to assert reset\n");
> +
> /* Get Interrupt: */
> gpu->irq = platform_get_irq(pdev, 0);
> if (gpu->irq < 0)
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> index 4d8a7d48ade3..0985ea548b82 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> @@ -158,6 +158,7 @@ struct etnaviv_gpu {
> struct clk *clk_reg;
> struct clk *clk_core;
> struct clk *clk_shader;
> + struct reset_control *rst;
This needs a forward declaration of struct reset_control in the header,
to avoid build failures if headers are included in a different order.
Please put them right next to the existing ones for regulator and clk.
Other than that, patch looks good to me.
Regards,
Lucas
>
> unsigned int freq_scale;
> unsigned int fe_waitcycles;
^ permalink raw reply [flat|nested] 3+ messages in thread* RE: [PATCH v3] drm/etnaviv: add optional reset support
2024-12-09 10:06 ` Lucas Stach
@ 2024-12-10 11:22 ` LENAIN Simon
0 siblings, 0 replies; 3+ messages in thread
From: LENAIN Simon @ 2024-12-10 11:22 UTC (permalink / raw)
To: Lucas Stach, LECOINTRE Philippe, Russell King, Christian Gmeiner
Cc: David Airlie, Simona Vetter, etnaviv, dri-devel, linux-kernel,
BARBEAU Etienne, LEJEUNE Sebastien
Hi Lucas,
> -----Message d'origine-----
> De : Lucas Stach <l.stach@pengutronix.de>
> Envoyé : lundi 9 décembre 2024 11:07
> À : LECOINTRE Philippe <philippe.lecointre@thalesgroup.com>; Russell King
> <linux+etnaviv@armlinux.org.uk>; Christian Gmeiner
> <christian.gmeiner@gmail.com>
> Cc : David Airlie <airlied@gmail.com>; Simona Vetter <simona@ffwll.ch>;
> etnaviv@lists.freedesktop.org; dri-devel@lists.freedesktop.org; linux-
> kernel@vger.kernel.org; LENAIN Simon <simon.lenain@thalesgroup.com>;
> BARBEAU Etienne <etienne.barbeau@thalesgroup.com>; LEJEUNE Sebastien
> <sebastien.lejeune@thalesgroup.com>
> Objet : Re: [PATCH v3] drm/etnaviv: add optional reset support
>
> Hi Philippe,
>
> Am Freitag, dem 06.12.2024 um 17:00 +0000 schrieb LECOINTRE Philippe:
> > Add optional reset support which is mentioned in vivante,gc.yaml to
> > allow the driver to work on SoCs whose reset signal is asserted by
> > default
> >
> > Signed-off-by: Philippe Lecointre <philippe.lecointre@thalesgroup.com>
> > Reviewed-by: Simon Lenain <simon.lenain@thalesgroup.com>
>
> Upstream usually doesn't put much weight on such internal reviews. No
> harm here, as the patch is simple enough and I do review it before applying.
> Just as a hint for the future: if you want maintainers to take such reviews into
> account for speeding up the adoption of a patch, do the review on the public
> mailing lists.
>
Do you think an "Acked-by:" is better for our internal review ?
Regards,
Simon
> > ---
> > v3:
> > - Rework to match initial feedback
> > ---
> > drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 37
> > +++++++++++++++++++++++++++
> drivers/gpu/drm/etnaviv/etnaviv_gpu.h |
> > 1 +
> > 2 files changed, 38 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> > b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> > index 2d4c112ce033..1961ebac315a 100644
> > --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c
> > @@ -13,6 +13,7 @@
> > #include <linux/platform_device.h>
> > #include <linux/pm_runtime.h>
> > #include <linux/regulator/consumer.h>
> > +#include <linux/reset.h>
> > #include <linux/thermal.h>
> >
> > #include "etnaviv_cmdbuf.h"
> > @@ -172,6 +173,25 @@ int etnaviv_gpu_get_param(struct etnaviv_gpu
> *gpu, u32 param, u64 *value)
> > return 0;
> > }
> >
> > +static int etnaviv_gpu_reset_deassert(struct etnaviv_gpu *gpu) {
> > + int ret;
> > +
> > + /* 32 core clock cycles (slowest clock) required before deassertion */
> > + /* 1 microsecond might match all implementations without
> computation
> > +*/
>
> I missed to mention this before, as I was focused on the technical
> side: this is not the multiline comment style used in the kernel/etnaviv.
> Please use the same style as already found in this file.
>
> > + usleep_range(1, 2);
> > +
> > + ret = reset_control_deassert(gpu->rst);
> > + if (ret)
> > + return ret;
> > +
> > + /* 128 core clock cycles (slowest clock) required before any activity
> on AHB */
> > + /* 1 microsecond might match all implementations without
> computation */
> > + usleep_range(1, 2);
> > +
> > + return 0;
> > +}
> > +
> > static inline bool etnaviv_is_model_rev(struct etnaviv_gpu *gpu, u32
> > model, u32 revision) {
> > return gpu->identity.model == model && @@ -799,6 +819,12 @@ int
> > etnaviv_gpu_init(struct etnaviv_gpu *gpu)
> > goto pm_put;
> > }
> >
> > + ret = etnaviv_gpu_reset_deassert(gpu);
> > + if (ret) {
> > + dev_err(gpu->dev, "GPU reset deassert failed\n");
> > + goto fail;
> > + }
> > +
> > etnaviv_hw_identify(gpu);
> >
> > if (gpu->identity.model == 0) {
> > @@ -1860,6 +1886,17 @@ static int etnaviv_gpu_platform_probe(struct
> platform_device *pdev)
> > if (IS_ERR(gpu->mmio))
> > return PTR_ERR(gpu->mmio);
> >
> > +
> > + /* Get Reset: */
> > + gpu->rst = devm_reset_control_get_optional_exclusive(&pdev-
> >dev, NULL);
> > + if (IS_ERR(gpu->rst))
> > + return dev_err_probe(dev, PTR_ERR(gpu->rst),
> > + "failed to get reset\n");
> > +
> > + err = reset_control_assert(gpu->rst);
> > + if (err)
> > + return dev_err_probe(dev, err, "failed to assert reset\n");
> > +
> > /* Get Interrupt: */
> > gpu->irq = platform_get_irq(pdev, 0);
> > if (gpu->irq < 0)
> > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> > b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> > index 4d8a7d48ade3..0985ea548b82 100644
> > --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.h
> > @@ -158,6 +158,7 @@ struct etnaviv_gpu {
> > struct clk *clk_reg;
> > struct clk *clk_core;
> > struct clk *clk_shader;
> > + struct reset_control *rst;
>
> This needs a forward declaration of struct reset_control in the header, to
> avoid build failures if headers are included in a different order.
> Please put them right next to the existing ones for regulator and clk.
>
> Other than that, patch looks good to me.
>
> Regards,
> Lucas
>
> >
> > unsigned int freq_scale;
> > unsigned int fe_waitcycles;
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-12-10 11:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-12-06 17:00 [PATCH v3] drm/etnaviv: add optional reset support LECOINTRE Philippe
2024-12-09 10:06 ` Lucas Stach
2024-12-10 11:22 ` LENAIN Simon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®