diff mbox series

v4l: rcar-fcp: Read IP version register at probe time

Message ID 20190608125331.29146-1-laurent.pinchart+renesas@ideasonboard.com (mailing list archive)
State Superseded
Delegated to: Kieran Bingham
Headers show
Series v4l: rcar-fcp: Read IP version register at probe time | expand

Commit Message

Laurent Pinchart June 8, 2019, 12:53 p.m. UTC
This helps identifying the IP core version, for debugging purpose only
for now.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/media/platform/rcar-fcp.c | 43 +++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

Comments

Geert Uytterhoeven June 9, 2019, 8:06 a.m. UTC | #1
Hi Laurent,

On Sat, Jun 8, 2019 at 2:55 PM Laurent Pinchart
<laurent.pinchart+renesas@ideasonboard.com> wrote:
> This helps identifying the IP core version, for debugging purpose only
> for now.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>

Thanks for your patch!

> --- a/drivers/media/platform/rcar-fcp.c
> +++ b/drivers/media/platform/rcar-fcp.c

> @@ -138,6 +168,19 @@ static int rcar_fcp_probe(struct platform_device *pdev)
>
>         pm_runtime_enable(&pdev->dev);
>
> +       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> +       fcp->iomem = devm_ioremap_resource(&pdev->dev, mem);

devm_platform_ioremap_resource()?

> +       if (IS_ERR(fcp->iomem))
> +               return PTR_ERR(fcp->iomem);
> +
> +       pm_runtime_get_sync(&pdev->dev);
> +       version = rcar_fcp_read(fcp, FCP_VCR);

Please note that rcar_fcp_read() does not exist in upstream nor next,
and linux-renesas-soc hasn't seen the patch that added it.

Gr{oetje,eeting}s,

                        Geert


--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Laurent Pinchart June 9, 2019, 10:08 a.m. UTC | #2
Hi Geert,

On Sun, Jun 09, 2019 at 10:06:19AM +0200, Geert Uytterhoeven wrote:
> On Sat, Jun 8, 2019 at 2:55 PM Laurent Pinchart wrote:
> > This helps identifying the IP core version, for debugging purpose only
> > for now.
> >
> > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> 
> Thanks for your patch!
> 
> > --- a/drivers/media/platform/rcar-fcp.c
> > +++ b/drivers/media/platform/rcar-fcp.c
> 
> > @@ -138,6 +168,19 @@ static int rcar_fcp_probe(struct platform_device *pdev)
> >
> >         pm_runtime_enable(&pdev->dev);
> >
> > +       mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> > +       fcp->iomem = devm_ioremap_resource(&pdev->dev, mem);
> 
> devm_platform_ioremap_resource()?

Nice, I've thought about adding such a function for some time, I didn't
know it had been merged.

> > +       if (IS_ERR(fcp->iomem))
> > +               return PTR_ERR(fcp->iomem);
> > +
> > +       pm_runtime_get_sync(&pdev->dev);
> > +       version = rcar_fcp_read(fcp, FCP_VCR);
> 
> Please note that rcar_fcp_read() does not exist in upstream nor next,
> and linux-renesas-soc hasn't seen the patch that added it.

That's why it was added in this patch :-)
Geert Uytterhoeven June 9, 2019, 11:51 a.m. UTC | #3
Hi Laurent,

On Sun, Jun 9, 2019 at 12:09 PM Laurent Pinchart
<laurent.pinchart@ideasonboard.com> wrote:
> On Sun, Jun 09, 2019 at 10:06:19AM +0200, Geert Uytterhoeven wrote:
> > On Sat, Jun 8, 2019 at 2:55 PM Laurent Pinchart wrote:
> > > This helps identifying the IP core version, for debugging purpose only
> > > for now.
> > >
> > > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> >
> > Thanks for your patch!
> >
> > > --- a/drivers/media/platform/rcar-fcp.c
> > > +++ b/drivers/media/platform/rcar-fcp.c

> > > +       if (IS_ERR(fcp->iomem))
> > > +               return PTR_ERR(fcp->iomem);
> > > +
> > > +       pm_runtime_get_sync(&pdev->dev);
> > > +       version = rcar_fcp_read(fcp, FCP_VCR);
> >
> > Please note that rcar_fcp_read() does not exist in upstream nor next,
> > and linux-renesas-soc hasn't seen the patch that added it.
>
> That's why it was added in this patch :-)

Bummer... Do you plan to have other users?
If not, I'd just open-code this single-line function.

Gr{oetje,eeting}s,

                        Geert
Laurent Pinchart June 9, 2019, 12:37 p.m. UTC | #4
Hi Geert,

On Sun, Jun 09, 2019 at 01:51:24PM +0200, Geert Uytterhoeven wrote:
> On Sun, Jun 9, 2019 at 12:09 PM Laurent Pinchart wrote:
> > On Sun, Jun 09, 2019 at 10:06:19AM +0200, Geert Uytterhoeven wrote:
> > > On Sat, Jun 8, 2019 at 2:55 PM Laurent Pinchart wrote:
> > > > This helps identifying the IP core version, for debugging purpose only
> > > > for now.
> > > >
> > > > Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
> > >
> > > Thanks for your patch!
> > >
> > > > --- a/drivers/media/platform/rcar-fcp.c
> > > > +++ b/drivers/media/platform/rcar-fcp.c
> 
> > > > +       if (IS_ERR(fcp->iomem))
> > > > +               return PTR_ERR(fcp->iomem);
> > > > +
> > > > +       pm_runtime_get_sync(&pdev->dev);
> > > > +       version = rcar_fcp_read(fcp, FCP_VCR);
> > >
> > > Please note that rcar_fcp_read() does not exist in upstream nor next,
> > > and linux-renesas-soc hasn't seen the patch that added it.
> >
> > That's why it was added in this patch :-)
> 
> Bummer... Do you plan to have other users?
> If not, I'd just open-code this single-line function.

Yes, with FNCL support there should be other users.
diff mbox series

Patch

diff --git a/drivers/media/platform/rcar-fcp.c b/drivers/media/platform/rcar-fcp.c
index 43c78620c9d8..e9b01965052d 100644
--- a/drivers/media/platform/rcar-fcp.c
+++ b/drivers/media/platform/rcar-fcp.c
@@ -8,6 +8,7 @@ 
  */
 
 #include <linux/device.h>
+#include <linux/io.h>
 #include <linux/list.h>
 #include <linux/module.h>
 #include <linux/mod_devicetable.h>
@@ -21,11 +22,38 @@ 
 struct rcar_fcp_device {
 	struct list_head list;
 	struct device *dev;
+	void __iomem *iomem;
 };
 
 static LIST_HEAD(fcp_devices);
 static DEFINE_MUTEX(fcp_lock);
 
+#define FCP_VCR			0x0000
+#define FCP_VCR_CATEGORY_MASK	(0xff << 8)
+#define FCP_VCR_CATEGORY_SHIFT	8
+#define FCP_VCR_REVISION_MASK	(0xff << 0)
+#define FCP_VCR_REVISION_SHIFT	0
+
+#define FCP_CFG0		0x0004
+#define FCP_RST			0x0010
+#define FCP_STA			0x0018
+#define FCP_TL_CTRL		0x0070
+#define FCP_PICINFO1		0x00c4
+#define FCP_BA_ANC_Y0		0x0100
+#define FCP_BA_ANC_Y1		0x0104
+#define FCP_BA_ANC_Y2		0x0108
+#define FCP_BA_ANC_C		0x010c
+#define FCP_BA_REF_Y0		0x0110
+#define FCP_BA_REF_Y1		0x0114
+#define FCP_BA_REF_Y2		0x0118
+#define FCP_BA_REF_C		0x011c
+
+
+static inline u32 rcar_fcp_read(struct rcar_fcp_device *fcp, u32 reg)
+{
+	return ioread32(fcp->iomem + reg);
+}
+
 /* -----------------------------------------------------------------------------
  * Public API
  */
@@ -129,6 +157,8 @@  EXPORT_SYMBOL_GPL(rcar_fcp_disable);
 static int rcar_fcp_probe(struct platform_device *pdev)
 {
 	struct rcar_fcp_device *fcp;
+	struct resource *mem;
+	u32 version;
 
 	fcp = devm_kzalloc(&pdev->dev, sizeof(*fcp), GFP_KERNEL);
 	if (fcp == NULL)
@@ -138,6 +168,19 @@  static int rcar_fcp_probe(struct platform_device *pdev)
 
 	pm_runtime_enable(&pdev->dev);
 
+	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	fcp->iomem = devm_ioremap_resource(&pdev->dev, mem);
+	if (IS_ERR(fcp->iomem))
+		return PTR_ERR(fcp->iomem);
+
+	pm_runtime_get_sync(&pdev->dev);
+	version = rcar_fcp_read(fcp, FCP_VCR);
+	pm_runtime_put(&pdev->dev);
+
+	dev_dbg(&pdev->dev, "FCP category %u revision %u\n",
+		(version & FCP_VCR_CATEGORY_MASK) >> FCP_VCR_CATEGORY_SHIFT,
+		(version & FCP_VCR_REVISION_MASK) >> FCP_VCR_REVISION_SHIFT);
+
 	mutex_lock(&fcp_lock);
 	list_add_tail(&fcp->list, &fcp_devices);
 	mutex_unlock(&fcp_lock);