Hi, On Fri, Oct 13, 2017 at 05:59:18PM +0300, Laurent Pinchart wrote: > To prepare for the removal of the global variable storing DSS private > data, pass its pointer to the dss_runtime_{get,put}() functions. > > As this requires getting hold of the DSS private structure in the > callers, we expose the structure through an opaque pointer that can be > retrieved through a new dss_device_get() function. The function > currently returns a pointer to the global data structure, and will later > be updated to get the pointer from device driver data when the DSS > private structure will be allocated dynamically. > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxxxx> -- Sebastian > drivers/gpu/drm/omapdrm/dss/dsi.c | 7 +++++-- > drivers/gpu/drm/omapdrm/dss/dss.c | 37 ++++++++++++++++++++------------- > drivers/gpu/drm/omapdrm/dss/dss.h | 13 ++++++++---- > drivers/gpu/drm/omapdrm/dss/hdmi.h | 6 ++++-- > drivers/gpu/drm/omapdrm/dss/hdmi4.c | 3 ++- > drivers/gpu/drm/omapdrm/dss/hdmi5.c | 3 ++- > drivers/gpu/drm/omapdrm/dss/hdmi_pll.c | 10 +++++---- > drivers/gpu/drm/omapdrm/dss/video-pll.c | 12 ++++++----- > 8 files changed, 58 insertions(+), 33 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c > index a64e6a39ebf1..1dab308c9bc1 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dsi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c > @@ -5333,7 +5333,8 @@ static const struct dss_pll_hw dss_omap5_dsi_pll_hw = { > .has_refsel = true, > }; > > -static int dsi_init_pll_data(struct platform_device *dsidev) > +static int dsi_init_pll_data(struct dss_device *dss, > + struct platform_device *dsidev) > { > struct dsi_data *dsi = dsi_get_dsidrv_data(dsidev); > struct dss_pll *pll = &dsi->pll; > @@ -5352,6 +5353,7 @@ static int dsi_init_pll_data(struct platform_device *dsidev) > pll->base = dsi->pll_base; > pll->hw = dsi->data->pll_hw; > pll->ops = &dsi_pll_ops; > + pll->dss = dss; > > r = dss_pll_register(pll); > if (r) > @@ -5428,6 +5430,7 @@ static const struct soc_device_attribute dsi_soc_devices[] = { > static int dsi_bind(struct device *dev, struct device *master, void *data) > { > struct platform_device *dsidev = to_platform_device(dev); > + struct dss_device *dss = dss_get_device(master); > const struct soc_device_attribute *soc; > const struct dsi_module_id_data *d; > u32 rev; > @@ -5538,7 +5541,7 @@ static int dsi_bind(struct device *dev, struct device *master, void *data) > if (r) > return r; > > - dsi_init_pll_data(dsidev); > + dsi_init_pll_data(dss, dsidev); > > pm_runtime_enable(&dsidev->dev); > > diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c > index b45641f6a844..a83277ebe1ef 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dss.c > +++ b/drivers/gpu/drm/omapdrm/dss/dss.c > @@ -93,7 +93,7 @@ struct dss_features { > bool has_lcd_clk_src; > }; > > -static struct { > +struct dss_device { > struct platform_device *pdev; > struct omap_drm_private drm; > > @@ -125,7 +125,9 @@ static struct { > > struct dss_pll *video1_pll; > struct dss_pll *video2_pll; > -} dss; > +}; > + > +static struct dss_device dss; > > static const char * const dss_generic_clk_source_names[] = { > [DSS_CLK_SRC_FCK] = "FCK", > @@ -382,7 +384,7 @@ static void dss_dump_clocks(struct seq_file *s) > const char *fclk_name; > unsigned long fclk_rate; > > - if (dss_runtime_get()) > + if (dss_runtime_get(&dss)) > return; > > seq_printf(s, "- DSS -\n"); > @@ -394,7 +396,7 @@ static void dss_dump_clocks(struct seq_file *s) > fclk_name, > fclk_rate); > > - dss_runtime_put(); > + dss_runtime_put(&dss); > } > #endif > > @@ -402,7 +404,7 @@ static int dss_dump_regs(struct seq_file *s, void *p) > { > #define DUMPREG(r) seq_printf(s, "%-35s %08x\n", #r, dss_read_reg(r)) > > - if (dss_runtime_get()) > + if (dss_runtime_get(&dss)) > return 0; > > DUMPREG(DSS_REVISION); > @@ -416,7 +418,7 @@ static int dss_dump_regs(struct seq_file *s, void *p) > DUMPREG(DSS_SDI_STATUS); > } > > - dss_runtime_put(); > + dss_runtime_put(&dss); > #undef DUMPREG > return 0; > } > @@ -889,27 +891,32 @@ static void dss_put_clocks(void) > clk_put(dss.parent_clk); > } > > -int dss_runtime_get(void) > +int dss_runtime_get(struct dss_device *dss) > { > int r; > > DSSDBG("dss_runtime_get\n"); > > - r = pm_runtime_get_sync(&dss.pdev->dev); > + r = pm_runtime_get_sync(&dss->pdev->dev); > WARN_ON(r < 0); > return r < 0 ? r : 0; > } > > -void dss_runtime_put(void) > +void dss_runtime_put(struct dss_device *dss) > { > int r; > > DSSDBG("dss_runtime_put\n"); > > - r = pm_runtime_put_sync(&dss.pdev->dev); > + r = pm_runtime_put_sync(&dss->pdev->dev); > WARN_ON(r < 0 && r != -ENOSYS && r != -EBUSY); > } > > +struct dss_device *dss_get_device(struct device *dev) > +{ > + return &dss; > +} > + > /* DEBUGFS */ > #if defined(CONFIG_OMAP2_DSS_DEBUGFS) > static int dss_debug_dump_clocks(struct seq_file *s, void *p) > @@ -1297,13 +1304,15 @@ static int dss_video_pll_probe(struct platform_device *pdev) > } > > if (of_property_match_string(np, "reg-names", "pll1") >= 0) { > - dss.video1_pll = dss_video_pll_init(pdev, 0, pll_regulator); > + dss.video1_pll = dss_video_pll_init(&dss, pdev, 0, > + pll_regulator); > if (IS_ERR(dss.video1_pll)) > return PTR_ERR(dss.video1_pll); > } > > if (of_property_match_string(np, "reg-names", "pll2") >= 0) { > - dss.video2_pll = dss_video_pll_init(pdev, 1, pll_regulator); > + dss.video2_pll = dss_video_pll_init(&dss, pdev, 1, > + pll_regulator); > if (IS_ERR(dss.video2_pll)) { > dss_video_pll_uninit(dss.video1_pll); > return PTR_ERR(dss.video2_pll); > @@ -1361,7 +1370,7 @@ static int dss_bind(struct device *dev) > > pm_runtime_enable(&pdev->dev); > > - r = dss_runtime_get(); > + r = dss_runtime_get(&dss); > if (r) > goto err_runtime_get; > > @@ -1386,7 +1395,7 @@ static int dss_bind(struct device *dev) > rev = dss_read_reg(DSS_REVISION); > pr_info("OMAP DSS rev %d.%d\n", FLD_GET(rev, 7, 4), FLD_GET(rev, 3, 0)); > > - dss_runtime_put(); > + dss_runtime_put(&dss); > > r = component_bind_all(&pdev->dev, NULL); > if (r) > diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h > index e688e937da28..009b7ef200cd 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dss.h > +++ b/drivers/gpu/drm/omapdrm/dss/dss.h > @@ -29,6 +29,7 @@ > > struct dentry; > struct dss_debugfs_entry; > +struct dss_device; > struct platform_device; > struct seq_file; > > @@ -198,6 +199,7 @@ struct dss_pll_hw { > struct dss_pll { > const char *name; > enum dss_pll_id id; > + struct dss_device *dss; > > struct clk *clkin; > struct regulator *regulator; > @@ -277,8 +279,10 @@ static inline void dss_debugfs_remove_file(struct dss_debugfs_entry *entry) > int dss_init_platform_driver(void) __init; > void dss_uninit_platform_driver(void); > > -int dss_runtime_get(void); > -void dss_runtime_put(void); > +struct dss_device *dss_get_device(struct device *dev); > + > +int dss_runtime_get(struct dss_device *dss); > +void dss_runtime_put(struct dss_device *dss); > > unsigned long dss_get_dispc_clk_rate(void); > unsigned long dss_get_max_fck_rate(void); > @@ -289,8 +293,9 @@ enum dss_hdmi_venc_clk_source_select dss_get_hdmi_venc_clk_source(void); > const char *dss_get_clk_source_name(enum dss_clk_source clk_src); > > /* DSS VIDEO PLL */ > -struct dss_pll *dss_video_pll_init(struct platform_device *pdev, int id, > - struct regulator *regulator); > +struct dss_pll *dss_video_pll_init(struct dss_device *dss, > + struct platform_device *pdev, int id, > + struct regulator *regulator); > void dss_video_pll_uninit(struct dss_pll *pll); > > void dss_ctrl_pll_enable(enum dss_pll_id pll_id, bool enable); > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi.h b/drivers/gpu/drm/omapdrm/dss/hdmi.h > index a66f8ff06c24..4dbc4f3d728c 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi.h > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi.h > @@ -29,6 +29,8 @@ > #include "omapdss.h" > #include "dss.h" > > +struct dss_device; > + > /* HDMI Wrapper */ > > #define HDMI_WP_REVISION 0x0 > @@ -324,8 +326,8 @@ phys_addr_t hdmi_wp_get_audio_dma_addr(struct hdmi_wp_data *wp); > > /* HDMI PLL funcs */ > void hdmi_pll_dump(struct hdmi_pll_data *pll, struct seq_file *s); > -int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll, > - struct hdmi_wp_data *wp); > +int hdmi_pll_init(struct dss_device *dss, struct platform_device *pdev, > + struct hdmi_pll_data *pll, struct hdmi_wp_data *wp); > void hdmi_pll_uninit(struct hdmi_pll_data *hpll); > > /* HDMI PHY funcs */ > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > index ada4e3a9dba7..d84eba8440c8 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > @@ -717,6 +717,7 @@ static int hdmi_audio_register(struct device *dev) > static int hdmi4_bind(struct device *dev, struct device *master, void *data) > { > struct platform_device *pdev = to_platform_device(dev); > + struct dss_device *dss = dss_get_device(master); > int r; > int irq; > > @@ -734,7 +735,7 @@ static int hdmi4_bind(struct device *dev, struct device *master, void *data) > if (r) > return r; > > - r = hdmi_pll_init(pdev, &hdmi.pll, &hdmi.wp); > + r = hdmi_pll_init(dss, pdev, &hdmi.pll, &hdmi.wp); > if (r) > return r; > > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c > index 00ea975b75f9..64cfed89c79b 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c > @@ -719,6 +719,7 @@ static int hdmi_audio_register(struct device *dev) > static int hdmi5_bind(struct device *dev, struct device *master, void *data) > { > struct platform_device *pdev = to_platform_device(dev); > + struct dss_device *dss = dss_get_device(master); > int r; > int irq; > > @@ -736,7 +737,7 @@ static int hdmi5_bind(struct device *dev, struct device *master, void *data) > if (r) > return r; > > - r = hdmi_pll_init(pdev, &hdmi.pll, &hdmi.wp); > + r = hdmi_pll_init(dss, pdev, &hdmi.pll, &hdmi.wp); > if (r) > return r; > > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi_pll.c b/drivers/gpu/drm/omapdrm/dss/hdmi_pll.c > index 55bee81f4dd5..9915354b66c9 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi_pll.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi_pll.c > @@ -128,7 +128,8 @@ static const struct dss_pll_hw dss_omap5_hdmi_pll_hw = { > .has_refsel = true, > }; > > -static int hdmi_init_pll_data(struct platform_device *pdev, > +static int hdmi_init_pll_data(struct dss_device *dss, > + struct platform_device *pdev, > struct hdmi_pll_data *hpll) > { > struct dss_pll *pll = &hpll->pll; > @@ -145,6 +146,7 @@ static int hdmi_init_pll_data(struct platform_device *pdev, > pll->id = DSS_PLL_HDMI; > pll->base = hpll->base; > pll->clkin = clk; > + pll->dss = dss; > > if (hpll->wp->version == 4) > pll->hw = &dss_omap4_hdmi_pll_hw; > @@ -160,8 +162,8 @@ static int hdmi_init_pll_data(struct platform_device *pdev, > return 0; > } > > -int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll, > - struct hdmi_wp_data *wp) > +int hdmi_pll_init(struct dss_device *dss, struct platform_device *pdev, > + struct hdmi_pll_data *pll, struct hdmi_wp_data *wp) > { > int r; > struct resource *res; > @@ -174,7 +176,7 @@ int hdmi_pll_init(struct platform_device *pdev, struct hdmi_pll_data *pll, > if (IS_ERR(pll->base)) > return PTR_ERR(pll->base); > > - r = hdmi_init_pll_data(pdev, pll); > + r = hdmi_init_pll_data(dss, pdev, pll); > if (r) { > DSSERR("failed to init HDMI PLL\n"); > return r; > diff --git a/drivers/gpu/drm/omapdrm/dss/video-pll.c b/drivers/gpu/drm/omapdrm/dss/video-pll.c > index 38a239cc5e04..7ef30f61c52b 100644 > --- a/drivers/gpu/drm/omapdrm/dss/video-pll.c > +++ b/drivers/gpu/drm/omapdrm/dss/video-pll.c > @@ -62,7 +62,7 @@ static int dss_video_pll_enable(struct dss_pll *pll) > struct dss_video_pll *vpll = container_of(pll, struct dss_video_pll, pll); > int r; > > - r = dss_runtime_get(); > + r = dss_runtime_get(pll->dss); > if (r) > return r; > > @@ -81,7 +81,7 @@ static int dss_video_pll_enable(struct dss_pll *pll) > err_reset: > dss_dpll_disable_scp_clk(vpll); > dss_ctrl_pll_enable(pll->id, false); > - dss_runtime_put(); > + dss_runtime_put(pll->dss); > > return r; > } > @@ -96,7 +96,7 @@ static void dss_video_pll_disable(struct dss_pll *pll) > > dss_ctrl_pll_enable(pll->id, false); > > - dss_runtime_put(); > + dss_runtime_put(pll->dss); > } > > static const struct dss_pll_ops dss_pll_ops = { > @@ -134,8 +134,9 @@ static const struct dss_pll_hw dss_dra7_video_pll_hw = { > .errata_i886 = true, > }; > > -struct dss_pll *dss_video_pll_init(struct platform_device *pdev, int id, > - struct regulator *regulator) > +struct dss_pll *dss_video_pll_init(struct dss_device *dss, > + struct platform_device *pdev, int id, > + struct regulator *regulator) > { > const char * const reg_name[] = { "pll1", "pll2" }; > const char * const clkctrl_name[] = { "pll1_clkctrl", "pll2_clkctrl" }; > @@ -187,6 +188,7 @@ struct dss_pll *dss_video_pll_init(struct platform_device *pdev, int id, > pll->base = pll_base; > pll->hw = &dss_dra7_video_pll_hw; > pll->ops = &dss_pll_ops; > + pll->dss = dss; > > r = dss_pll_register(pll); > if (r) > -- > Regards, > > Laurent Pinchart > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel
Attachment:
signature.asc
Description: PGP signature
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel