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 |
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
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 :-)
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
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 --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);
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(+)