Hi, On Fri, Oct 13, 2017 at 05:59:41PM +0300, Laurent Pinchart wrote: > This removes the need to access the global DISPC private data in those > functions (both for the current accesses and the future ones that will > be introduced when allocating the DISPC private data dynamically). > > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> > --- Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxxxx> IMHO this patch can be squashed into the previous patch. -- Sebastian > drivers/gpu/drm/omapdrm/dss/dispc.c | 101 ++++++++++++++++++++---------------- > drivers/gpu/drm/omapdrm/dss/dpi.c | 12 +++-- > drivers/gpu/drm/omapdrm/dss/dsi.c | 22 ++++---- > drivers/gpu/drm/omapdrm/dss/dss.c | 14 ++--- > drivers/gpu/drm/omapdrm/dss/dss.h | 74 ++++++++++++++------------ > drivers/gpu/drm/omapdrm/dss/hdmi4.c | 6 ++- > drivers/gpu/drm/omapdrm/dss/hdmi5.c | 6 ++- > drivers/gpu/drm/omapdrm/dss/sdi.c | 13 +++-- > drivers/gpu/drm/omapdrm/dss/venc.c | 2 +- > 9 files changed, 139 insertions(+), 111 deletions(-) > > diff --git a/drivers/gpu/drm/omapdrm/dss/dispc.c b/drivers/gpu/drm/omapdrm/dss/dispc.c > index 1bca5785b8a8..180ad55bbdec 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dispc.c > +++ b/drivers/gpu/drm/omapdrm/dss/dispc.c > @@ -706,7 +706,7 @@ static u32 dispc_mgr_get_sync_lost_irq(struct dispc_device *dispc, > return mgr_desc[channel].sync_lost_irq; > } > > -u32 dispc_wb_get_framedone_irq(void) > +u32 dispc_wb_get_framedone_irq(struct dispc_device *dispc) > { > return DISPC_IRQ_FRAMEDONEWB; > } > @@ -741,12 +741,12 @@ static void dispc_mgr_go(struct dispc_device *dispc, enum omap_channel channel) > mgr_fld_write(channel, DISPC_MGR_FLD_GO, 1); > } > > -bool dispc_wb_go_busy(void) > +bool dispc_wb_go_busy(struct dispc_device *dispc) > { > return REG_GET(DISPC_CONTROL2, 6, 6) == 1; > } > > -void dispc_wb_go(void) > +void dispc_wb_go(struct dispc_device *dispc) > { > enum omap_plane_id plane = OMAP_DSS_WB; > bool enable, go; > @@ -1198,7 +1198,8 @@ static enum omap_channel dispc_ovl_get_channel_out(enum omap_plane_id plane) > } > } > > -void dispc_wb_set_channel_in(enum dss_writeback_channel channel) > +void dispc_wb_set_channel_in(struct dispc_device *dispc, > + enum dss_writeback_channel channel) > { > enum omap_plane_id plane = OMAP_DSS_WB; > > @@ -1373,10 +1374,10 @@ static void dispc_init_fifos(void) > const bool use_fifomerge = false; > const bool manual_update = false; > > - dispc_ovl_compute_fifo_thresholds(i, &low, &high, > + dispc_ovl_compute_fifo_thresholds(&dispc, i, &low, &high, > use_fifomerge, manual_update); > > - dispc_ovl_set_fifo_threshold(i, low, high); > + dispc_ovl_set_fifo_threshold(&dispc, i, low, high); > } > > if (dispc.feat->has_writeback) { > @@ -1384,10 +1385,11 @@ static void dispc_init_fifos(void) > const bool use_fifomerge = false; > const bool manual_update = false; > > - dispc_ovl_compute_fifo_thresholds(OMAP_DSS_WB, &low, &high, > - use_fifomerge, manual_update); > + dispc_ovl_compute_fifo_thresholds(&dispc, OMAP_DSS_WB, > + &low, &high, > + use_fifomerge, manual_update); > > - dispc_ovl_set_fifo_threshold(OMAP_DSS_WB, low, high); > + dispc_ovl_set_fifo_threshold(&dispc, OMAP_DSS_WB, low, high); > } > } > > @@ -1404,13 +1406,14 @@ static u32 dispc_ovl_get_fifo_size(enum omap_plane_id plane) > return size; > } > > -void dispc_ovl_set_fifo_threshold(enum omap_plane_id plane, u32 low, > - u32 high) > +void dispc_ovl_set_fifo_threshold(struct dispc_device *dispc, > + enum omap_plane_id plane, > + u32 low, u32 high) > { > u8 hi_start, hi_end, lo_start, lo_end; > u32 unit; > > - unit = dispc.feat->buffer_size_unit; > + unit = dispc->feat->buffer_size_unit; > > WARN_ON(low % unit != 0); > WARN_ON(high % unit != 0); > @@ -1438,12 +1441,12 @@ void dispc_ovl_set_fifo_threshold(enum omap_plane_id plane, u32 low, > * large for the preload field, set the threshold to the maximum value > * that can be held by the preload register > */ > - if (dispc_has_feature(FEAT_PRELOAD) && dispc.feat->set_max_preload && > + if (dispc_has_feature(FEAT_PRELOAD) && dispc->feat->set_max_preload && > plane != OMAP_DSS_WB) > dispc_write_reg(DISPC_OVL_PRELOAD(plane), min(high, 0xfffu)); > } > > -void dispc_enable_fifomerge(bool enable) > +void dispc_enable_fifomerge(struct dispc_device *dispc, bool enable) > { > if (!dispc_has_feature(FEAT_FIFO_MERGE)) { > WARN_ON(enable); > @@ -1454,15 +1457,16 @@ void dispc_enable_fifomerge(bool enable) > REG_FLD_MOD(DISPC_CONFIG, enable ? 1 : 0, 14, 14); > } > > -void dispc_ovl_compute_fifo_thresholds(enum omap_plane_id plane, > - u32 *fifo_low, u32 *fifo_high, bool use_fifomerge, > - bool manual_update) > +void dispc_ovl_compute_fifo_thresholds(struct dispc_device *dispc, > + enum omap_plane_id plane, > + u32 *fifo_low, u32 *fifo_high, > + bool use_fifomerge, bool manual_update) > { > /* > * All sizes are in bytes. Both the buffer and burst are made of > * buffer_units, and the fifo thresholds must be buffer_unit aligned. > */ > - unsigned int buf_unit = dispc.feat->buffer_size_unit; > + unsigned int buf_unit = dispc->feat->buffer_size_unit; > unsigned int ovl_fifo_size, total_fifo_size, burst_size; > int i; > > @@ -1471,7 +1475,7 @@ void dispc_ovl_compute_fifo_thresholds(enum omap_plane_id plane, > > if (use_fifomerge) { > total_fifo_size = 0; > - for (i = 0; i < dispc_get_num_ovls(&dispc); ++i) > + for (i = 0; i < dispc_get_num_ovls(dispc); ++i) > total_fifo_size += dispc_ovl_get_fifo_size(i); > } else { > total_fifo_size = ovl_fifo_size; > @@ -2667,8 +2671,9 @@ static int dispc_ovl_setup(struct dispc_device *dispc, > return r; > } > > -int dispc_wb_setup(const struct omap_dss_writeback_info *wi, > - bool mem_to_mem, const struct videomode *vm) > +int dispc_wb_setup(struct dispc_device *dispc, > + const struct omap_dss_writeback_info *wi, > + bool mem_to_mem, const struct videomode *vm) > { > int r; > u32 l; > @@ -2759,7 +2764,7 @@ static void dispc_lcd_enable_signal_polarity(bool act_high) > REG_FLD_MOD(DISPC_CONTROL, act_high ? 1 : 0, 29, 29); > } > > -void dispc_lcd_enable_signal(bool enable) > +void dispc_lcd_enable_signal(struct dispc_device *dispc, bool enable) > { > if (!dispc_has_feature(FEAT_LCDENABLESIGNAL)) > return; > @@ -2767,7 +2772,7 @@ void dispc_lcd_enable_signal(bool enable) > REG_FLD_MOD(DISPC_CONTROL, enable ? 1 : 0, 28, 28); > } > > -void dispc_pck_free_enable(bool enable) > +void dispc_pck_free_enable(struct dispc_device *dispc, bool enable) > { > if (!dispc_has_feature(FEAT_PCKFREEENABLE)) > return; > @@ -2906,7 +2911,7 @@ static void dispc_mgr_set_lcd_config(struct dispc_device *dispc, > dispc_mgr_enable_stallmode(channel, config->stallmode); > dispc_mgr_enable_fifohandcheck(channel, config->fifohandcheck); > > - dispc_mgr_set_clock_div(channel, &config->clock_info); > + dispc_mgr_set_clock_div(dispc, channel, &config->clock_info); > > dispc_mgr_set_tft_data_lines(channel, config->video_port_width); > > @@ -2943,7 +2948,8 @@ static bool _dispc_mgr_pclk_ok(enum omap_channel channel, > return pclk <= dispc.feat->max_tv_pclk; > } > > -bool dispc_mgr_timings_ok(enum omap_channel channel, const struct videomode *vm) > +bool dispc_mgr_timings_ok(struct dispc_device *dispc, enum omap_channel channel, > + const struct videomode *vm) > { > if (!_dispc_mgr_size_ok(vm->hactive, vm->vactive)) > return false; > @@ -3064,7 +3070,7 @@ static void dispc_mgr_set_timings(struct dispc_device *dispc, > > DSSDBG("channel %d xres %u yres %u\n", channel, t.hactive, t.vactive); > > - if (!dispc_mgr_timings_ok(channel, &t)) { > + if (!dispc_mgr_timings_ok(dispc, channel, &t)) { > BUG(); > return; > } > @@ -3197,9 +3203,9 @@ static unsigned long dispc_mgr_pclk_rate(enum omap_channel channel) > } > } > > -void dispc_set_tv_pclk(unsigned long pclk) > +void dispc_set_tv_pclk(struct dispc_device *dispc, unsigned long pclk) > { > - dispc.tv_pclk_rate = pclk; > + dispc->tv_pclk_rate = pclk; > } > > static unsigned long dispc_core_clk_rate(void) > @@ -3251,13 +3257,13 @@ static void dispc_dump_clocks_channel(struct seq_file *s, enum omap_channel chan > dispc_mgr_pclk_rate(channel), pcd); > } > > -void dispc_dump_clocks(struct seq_file *s) > +void dispc_dump_clocks(struct dispc_device *dispc, struct seq_file *s) > { > int lcd; > u32 l; > - enum dss_clk_source dispc_clk_src = dss_get_dispc_clk_source(dispc.dss); > + enum dss_clk_source dispc_clk_src = dss_get_dispc_clk_source(dispc->dss); > > - if (dispc_runtime_get(&dispc)) > + if (dispc_runtime_get(dispc)) > return; > > seq_printf(s, "- DISPC -\n"); > @@ -3283,7 +3289,7 @@ void dispc_dump_clocks(struct seq_file *s) > if (dispc_has_feature(FEAT_MGR_LCD3)) > dispc_dump_clocks_channel(s, OMAP_DSS_CHANNEL_LCD3); > > - dispc_runtime_put(&dispc); > + dispc_runtime_put(dispc); > } > > static int dispc_dump_regs(struct seq_file *s, void *p) > @@ -3484,8 +3490,9 @@ static int dispc_dump_regs(struct seq_file *s, void *p) > } > > /* calculate clock rates using dividers in cinfo */ > -int dispc_calc_clock_rates(unsigned long dispc_fclk_rate, > - struct dispc_clock_info *cinfo) > +int dispc_calc_clock_rates(struct dispc_device *dispc, > + unsigned long dispc_fclk_rate, > + struct dispc_clock_info *cinfo) > { > if (cinfo->lck_div > 255 || cinfo->lck_div == 0) > return -EINVAL; > @@ -3498,9 +3505,9 @@ int dispc_calc_clock_rates(unsigned long dispc_fclk_rate, > return 0; > } > > -bool dispc_div_calc(unsigned long dispc_freq, > - unsigned long pck_min, unsigned long pck_max, > - dispc_div_calc_func func, void *data) > +bool dispc_div_calc(struct dispc_device *dispc, unsigned long dispc_freq, > + unsigned long pck_min, unsigned long pck_max, > + dispc_div_calc_func func, void *data) > { > int lckd, lckd_start, lckd_stop; > int pckd, pckd_start, pckd_stop; > @@ -3516,10 +3523,10 @@ bool dispc_div_calc(unsigned long dispc_freq, > min_fck_per_pck = 0; > #endif > > - pckd_hw_min = dispc.feat->min_pcd; > + pckd_hw_min = dispc->feat->min_pcd; > pckd_hw_max = 255; > > - lck_max = dss_get_max_fck_rate(dispc.dss); > + lck_max = dss_get_max_fck_rate(dispc->dss); > > pck_min = pck_min ? pck_min : 1; > pck_max = pck_max ? pck_max : ULONG_MAX; > @@ -3558,8 +3565,9 @@ bool dispc_div_calc(unsigned long dispc_freq, > return false; > } > > -void dispc_mgr_set_clock_div(enum omap_channel channel, > - const struct dispc_clock_info *cinfo) > +void dispc_mgr_set_clock_div(struct dispc_device *dispc, > + enum omap_channel channel, > + const struct dispc_clock_info *cinfo) > { > DSSDBG("lck = %lu (%u)\n", cinfo->lck, cinfo->lck_div); > DSSDBG("pck = %lu (%u)\n", cinfo->pck, cinfo->pck_div); > @@ -3567,8 +3575,9 @@ void dispc_mgr_set_clock_div(enum omap_channel channel, > dispc_mgr_set_lcd_divisor(channel, cinfo->lck_div, cinfo->pck_div); > } > > -int dispc_mgr_get_clock_div(enum omap_channel channel, > - struct dispc_clock_info *cinfo) > +int dispc_mgr_get_clock_div(struct dispc_device *dispc, > + enum omap_channel channel, > + struct dispc_clock_info *cinfo) > { > unsigned long fck; > > @@ -3606,12 +3615,12 @@ static void dispc_write_irqenable(struct dispc_device *dispc, u32 mask) > dispc_read_reg(DISPC_IRQENABLE); > } > > -void dispc_enable_sidle(void) > +void dispc_enable_sidle(struct dispc_device *dispc) > { > REG_FLD_MOD(DISPC_SYSCONFIG, 2, 4, 3); /* SIDLEMODE: smart idle */ > } > > -void dispc_disable_sidle(void) > +void dispc_disable_sidle(struct dispc_device *dispc) > { > REG_FLD_MOD(DISPC_SYSCONFIG, 1, 4, 3); /* SIDLEMODE: no idle */ > } > @@ -4473,7 +4482,7 @@ static void dispc_errata_i734_wa(void) > > /* Set up and enable display manager for LCD1 */ > dispc_mgr_setup(&dispc, OMAP_DSS_CHANNEL_LCD, &i734.mgri); > - dispc_calc_clock_rates(dss_get_dispc_clk_rate(dispc.dss), > + dispc_calc_clock_rates(&dispc, dss_get_dispc_clk_rate(dispc.dss), > &lcd_conf.clock_info); > dispc_mgr_set_lcd_config(&dispc, OMAP_DSS_CHANNEL_LCD, &lcd_conf); > dispc_mgr_set_timings(&dispc, OMAP_DSS_CHANNEL_LCD, &i734.vm); > diff --git a/drivers/gpu/drm/omapdrm/dss/dpi.c b/drivers/gpu/drm/omapdrm/dss/dpi.c > index aa10db453fd0..66183fc77bb2 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dpi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dpi.c > @@ -192,8 +192,9 @@ static bool dpi_calc_hsdiv_cb(int m_dispc, unsigned long dispc, > ctx->pll_cinfo.mX[ctx->clkout_idx] = m_dispc; > ctx->pll_cinfo.clkout[ctx->clkout_idx] = dispc; > > - return dispc_div_calc(dispc, ctx->pck_min, ctx->pck_max, > - dpi_calc_dispc_cb, ctx); > + return dispc_div_calc(ctx->pll->dss->dispc, dispc, > + ctx->pck_min, ctx->pck_max, > + dpi_calc_dispc_cb, ctx); > } > > > @@ -219,8 +220,9 @@ static bool dpi_calc_dss_cb(unsigned long fck, void *data) > > ctx->fck = fck; > > - return dispc_div_calc(fck, ctx->pck_min, ctx->pck_max, > - dpi_calc_dispc_cb, ctx); > + return dispc_div_calc(ctx->pll->dss->dispc, fck, > + ctx->pck_min, ctx->pck_max, > + dpi_calc_dispc_cb, ctx); > } > > static bool dpi_pll_clk_calc(struct dpi_data *dpi, unsigned long pck, > @@ -515,7 +517,7 @@ static int dpi_check_timings(struct omap_dss_device *dssdev, > if (vm->hactive % 8 != 0) > return -EINVAL; > > - if (!dispc_mgr_timings_ok(channel, vm)) > + if (!dispc_mgr_timings_ok(dpi->dss->dispc, channel, vm)) > return -EINVAL; > > if (vm->pixelclock == 0) > diff --git a/drivers/gpu/drm/omapdrm/dss/dsi.c b/drivers/gpu/drm/omapdrm/dss/dsi.c > index 1cac221e499a..c7700dfccc08 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dsi.c > +++ b/drivers/gpu/drm/omapdrm/dss/dsi.c > @@ -1396,18 +1396,18 @@ static int dsi_pll_enable(struct dss_pll *pll) > } > > /* XXX PLL does not come out of reset without this... */ > - dispc_pck_free_enable(1); > + dispc_pck_free_enable(dsi->dss->dispc, 1); > > if (!wait_for_bit_change(dsi, DSI_PLL_STATUS, 0, 1)) { > DSSERR("PLL not coming out of reset.\n"); > r = -ENODEV; > - dispc_pck_free_enable(0); > + dispc_pck_free_enable(dsi->dss->dispc, 0); > goto err1; > } > > /* XXX ... but if left on, we get problems when planes do not > * fill the whole display. No idea about this */ > - dispc_pck_free_enable(0); > + dispc_pck_free_enable(dsi->dss->dispc, 0); > > r = dsi_pll_power(dsi, DSI_PLL_POWER_ON_ALL); > > @@ -3974,7 +3974,7 @@ static void dsi_update_screen_dispc(struct dsi_data *dsi) > * the same goes for any DSS interrupts, but for some reason I have not > * seen the problem anywhere else than here. > */ > - dispc_disable_sidle(); > + dispc_disable_sidle(dsi->dss->dispc); > > dsi_perf_mark_start(dsi); > > @@ -4009,7 +4009,7 @@ static void dsi_te_timeout(unsigned long arg) > static void dsi_handle_framedone(struct dsi_data *dsi, int error) > { > /* SIDLEMODE back to smart-idle */ > - dispc_enable_sidle(); > + dispc_enable_sidle(dsi->dss->dispc); > > if (dsi->te_enabled) { > /* enable LP_RX_TO again after the TE */ > @@ -4090,7 +4090,7 @@ static int dsi_configure_dispc_clocks(struct dsi_data *dsi) > dispc_cinfo.lck_div = dsi->user_dispc_cinfo.lck_div; > dispc_cinfo.pck_div = dsi->user_dispc_cinfo.pck_div; > > - r = dispc_calc_clock_rates(fck, &dispc_cinfo); > + r = dispc_calc_clock_rates(dsi->dss->dispc, fck, &dispc_cinfo); > if (r) { > DSSERR("Failed to calc dispc clocks\n"); > return r; > @@ -4441,8 +4441,9 @@ static bool dsi_cm_calc_hsdiv_cb(int m_dispc, unsigned long dispc, > ctx->dsi_cinfo.mX[HSDIV_DISPC] = m_dispc; > ctx->dsi_cinfo.clkout[HSDIV_DISPC] = dispc; > > - return dispc_div_calc(dispc, ctx->req_pck_min, ctx->req_pck_max, > - dsi_cm_calc_dispc_cb, ctx); > + return dispc_div_calc(ctx->dsi->dss->dispc, dispc, > + ctx->req_pck_min, ctx->req_pck_max, > + dsi_cm_calc_dispc_cb, ctx); > } > > static bool dsi_cm_calc_pll_cb(int n, int m, unsigned long fint, > @@ -4741,8 +4742,9 @@ static bool dsi_vm_calc_hsdiv_cb(int m_dispc, unsigned long dispc, > else > pck_max = ctx->req_pck_max; > > - return dispc_div_calc(dispc, ctx->req_pck_min, pck_max, > - dsi_vm_calc_dispc_cb, ctx); > + return dispc_div_calc(ctx->dsi->dss->dispc, dispc, > + ctx->req_pck_min, pck_max, > + dsi_vm_calc_dispc_cb, ctx); > } > > static bool dsi_vm_calc_pll_cb(int n, int m, unsigned long fint, > diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c > index fcdd7d00caa8..5d927dfe0a7f 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dss.c > +++ b/drivers/gpu/drm/omapdrm/dss/dss.c > @@ -276,7 +276,7 @@ int dss_sdi_enable(struct dss_device *dss) > { > unsigned long timeout; > > - dispc_pck_free_enable(1); > + dispc_pck_free_enable(dss->dispc, 1); > > /* Reset SDI PLL */ > REG_FLD_MOD(dss, DSS_PLL_CONTROL, 1, 18, 18); /* SDI_PLL_SYSRESET */ > @@ -306,7 +306,7 @@ int dss_sdi_enable(struct dss_device *dss) > } > } > > - dispc_lcd_enable_signal(1); > + dispc_lcd_enable_signal(dss->dispc, 1); > > /* Waiting for SDI reset to complete */ > timeout = jiffies + msecs_to_jiffies(500); > @@ -320,21 +320,21 @@ int dss_sdi_enable(struct dss_device *dss) > return 0; > > err2: > - dispc_lcd_enable_signal(0); > + dispc_lcd_enable_signal(dss->dispc, 0); > err1: > /* Reset SDI PLL */ > REG_FLD_MOD(dss, DSS_PLL_CONTROL, 0, 18, 18); /* SDI_PLL_SYSRESET */ > > - dispc_pck_free_enable(0); > + dispc_pck_free_enable(dss->dispc, 0); > > return -ETIMEDOUT; > } > > void dss_sdi_disable(struct dss_device *dss) > { > - dispc_lcd_enable_signal(0); > + dispc_lcd_enable_signal(dss->dispc, 0); > > - dispc_pck_free_enable(0); > + dispc_pck_free_enable(dss->dispc, 0); > > /* Reset SDI PLL */ > REG_FLD_MOD(dss, DSS_PLL_CONTROL, 0, 18, 18); /* SDI_PLL_SYSRESET */ > @@ -899,7 +899,7 @@ static int dss_debug_dump_clocks(struct seq_file *s, void *p) > struct dss_device *dss = s->private; > > dss_dump_clocks(dss, s); > - dispc_dump_clocks(s); > + dispc_dump_clocks(dss->dispc, s); > #ifdef CONFIG_OMAP2_DSS_DSI > dsi_dump_clocks(s); > #endif > diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h > index 5f3e26bec402..ceba8441c7cc 100644 > --- a/drivers/gpu/drm/omapdrm/dss/dss.h > +++ b/drivers/gpu/drm/omapdrm/dss/dss.h > @@ -417,47 +417,55 @@ static inline void dpi_uninit_port(struct device_node *port) > /* DISPC */ > int dispc_init_platform_driver(void) __init; > void dispc_uninit_platform_driver(void); > -void dispc_dump_clocks(struct seq_file *s); > +void dispc_dump_clocks(struct dispc_device *dispc, struct seq_file *s); > > int dispc_runtime_get(struct dispc_device *dispc); > void dispc_runtime_put(struct dispc_device *dispc); > > -void dispc_enable_sidle(void); > -void dispc_disable_sidle(void); > +void dispc_enable_sidle(struct dispc_device *dispc); > +void dispc_disable_sidle(struct dispc_device *dispc); > > -void dispc_lcd_enable_signal(bool enable); > -void dispc_pck_free_enable(bool enable); > -void dispc_enable_fifomerge(bool enable); > +void dispc_lcd_enable_signal(struct dispc_device *dispc, bool enable); > +void dispc_pck_free_enable(struct dispc_device *dispc, bool enable); > +void dispc_enable_fifomerge(struct dispc_device *dispc, bool enable); > > typedef bool (*dispc_div_calc_func)(int lckd, int pckd, unsigned long lck, > unsigned long pck, void *data); > -bool dispc_div_calc(unsigned long dispc, > - unsigned long pck_min, unsigned long pck_max, > - dispc_div_calc_func func, void *data); > - > -bool dispc_mgr_timings_ok(enum omap_channel channel, const struct videomode *vm); > -int dispc_calc_clock_rates(unsigned long dispc_fclk_rate, > - struct dispc_clock_info *cinfo); > - > - > -void dispc_ovl_set_fifo_threshold(enum omap_plane_id plane, u32 low, > - u32 high); > -void dispc_ovl_compute_fifo_thresholds(enum omap_plane_id plane, > - u32 *fifo_low, u32 *fifo_high, bool use_fifomerge, > - bool manual_update); > - > -void dispc_mgr_set_clock_div(enum omap_channel channel, > - const struct dispc_clock_info *cinfo); > -int dispc_mgr_get_clock_div(enum omap_channel channel, > - struct dispc_clock_info *cinfo); > -void dispc_set_tv_pclk(unsigned long pclk); > - > -u32 dispc_wb_get_framedone_irq(void); > -bool dispc_wb_go_busy(void); > -void dispc_wb_go(void); > -void dispc_wb_set_channel_in(enum dss_writeback_channel channel); > -int dispc_wb_setup(const struct omap_dss_writeback_info *wi, > - bool mem_to_mem, const struct videomode *vm); > +bool dispc_div_calc(struct dispc_device *dispc, unsigned long dispc_freq, > + unsigned long pck_min, unsigned long pck_max, > + dispc_div_calc_func func, void *data); > + > +bool dispc_mgr_timings_ok(struct dispc_device *dispc, > + enum omap_channel channel, > + const struct videomode *vm); > +int dispc_calc_clock_rates(struct dispc_device *dispc, > + unsigned long dispc_fclk_rate, > + struct dispc_clock_info *cinfo); > + > + > +void dispc_ovl_set_fifo_threshold(struct dispc_device *dispc, > + enum omap_plane_id plane, u32 low, u32 high); > +void dispc_ovl_compute_fifo_thresholds(struct dispc_device *dispc, > + enum omap_plane_id plane, > + u32 *fifo_low, u32 *fifo_high, > + bool use_fifomerge, bool manual_update); > + > +void dispc_mgr_set_clock_div(struct dispc_device *dispc, > + enum omap_channel channel, > + const struct dispc_clock_info *cinfo); > +int dispc_mgr_get_clock_div(struct dispc_device *dispc, > + enum omap_channel channel, > + struct dispc_clock_info *cinfo); > +void dispc_set_tv_pclk(struct dispc_device *dispc, unsigned long pclk); > + > +u32 dispc_wb_get_framedone_irq(struct dispc_device *dispc); > +bool dispc_wb_go_busy(struct dispc_device *dispc); > +void dispc_wb_go(struct dispc_device *dispc); > +void dispc_wb_set_channel_in(struct dispc_device *dispc, > + enum dss_writeback_channel channel); > +int dispc_wb_setup(struct dispc_device *dispc, > + const struct omap_dss_writeback_info *wi, > + bool mem_to_mem, const struct videomode *vm); > > /* VENC */ > int venc_init_platform_driver(void) __init; > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi4.c b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > index cf4b2c9bbcbd..2050601fef0a 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c > @@ -273,7 +273,9 @@ static void hdmi_power_off_full(struct omap_hdmi *hdmi) > static int hdmi_display_check_timing(struct omap_dss_device *dssdev, > struct videomode *vm) > { > - if (!dispc_mgr_timings_ok(dssdev->dispc_channel, vm)) > + struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev); > + > + if (!dispc_mgr_timings_ok(hdmi->dss->dispc, dssdev->dispc_channel, vm)) > return -EINVAL; > > return 0; > @@ -288,7 +290,7 @@ static void hdmi_display_set_timing(struct omap_dss_device *dssdev, > > hdmi->cfg.vm = *vm; > > - dispc_set_tv_pclk(vm->pixelclock); > + dispc_set_tv_pclk(hdmi->dss->dispc, vm->pixelclock); > > mutex_unlock(&hdmi->lock); > } > diff --git a/drivers/gpu/drm/omapdrm/dss/hdmi5.c b/drivers/gpu/drm/omapdrm/dss/hdmi5.c > index 66b603c5b2fc..ec3b044925d0 100644 > --- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c > +++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c > @@ -271,7 +271,9 @@ static void hdmi_power_off_full(struct omap_hdmi *hdmi) > static int hdmi_display_check_timing(struct omap_dss_device *dssdev, > struct videomode *vm) > { > - if (!dispc_mgr_timings_ok(dssdev->dispc_channel, vm)) > + struct omap_hdmi *hdmi = dssdev_to_hdmi(dssdev); > + > + if (!dispc_mgr_timings_ok(hdmi->dss->dispc, dssdev->dispc_channel, vm)) > return -EINVAL; > > return 0; > @@ -286,7 +288,7 @@ static void hdmi_display_set_timing(struct omap_dss_device *dssdev, > > hdmi->cfg.vm = *vm; > > - dispc_set_tv_pclk(vm->pixelclock); > + dispc_set_tv_pclk(hdmi->dss->dispc, vm->pixelclock); > > mutex_unlock(&hdmi->lock); > } > diff --git a/drivers/gpu/drm/omapdrm/dss/sdi.c b/drivers/gpu/drm/omapdrm/dss/sdi.c > index efa73cfabce6..b0ef2395e8a1 100644 > --- a/drivers/gpu/drm/omapdrm/dss/sdi.c > +++ b/drivers/gpu/drm/omapdrm/dss/sdi.c > @@ -48,6 +48,7 @@ struct sdi_device { > #define dssdev_to_sdi(dssdev) container_of(dssdev, struct sdi_device, output) > > struct sdi_clk_calc_ctx { > + struct sdi_device *sdi; > unsigned long pck_min, pck_max; > > unsigned long fck; > @@ -73,8 +74,9 @@ static bool dpi_calc_dss_cb(unsigned long fck, void *data) > > ctx->fck = fck; > > - return dispc_div_calc(fck, ctx->pck_min, ctx->pck_max, > - dpi_calc_dispc_cb, ctx); > + return dispc_div_calc(ctx->sdi->dss->dispc, fck, > + ctx->pck_min, ctx->pck_max, > + dpi_calc_dispc_cb, ctx); > } > > static int sdi_calc_clock_div(struct sdi_device *sdi, unsigned long pclk, > @@ -82,7 +84,7 @@ static int sdi_calc_clock_div(struct sdi_device *sdi, unsigned long pclk, > struct dispc_clock_info *dispc_cinfo) > { > int i; > - struct sdi_clk_calc_ctx ctx; > + struct sdi_clk_calc_ctx ctx = { .sdi = sdi }; > > /* > * DSS fclk gives us very few possibilities, so finding a good pixel > @@ -186,7 +188,7 @@ static int sdi_display_enable(struct omap_dss_device *dssdev) > * need to care about the shadow register mechanism for pck-free. The > * exact reason for this is unknown. > */ > - dispc_mgr_set_clock_div(sdi->output.dispc_channel, > + dispc_mgr_set_clock_div(sdi->dss->dispc, sdi->output.dispc_channel, > &sdi->mgr_config.clock_info); > > dss_sdi_init(sdi->dss, sdi->datapairs); > @@ -245,9 +247,10 @@ static void sdi_get_timings(struct omap_dss_device *dssdev, > static int sdi_check_timings(struct omap_dss_device *dssdev, > struct videomode *vm) > { > + struct sdi_device *sdi = dssdev_to_sdi(dssdev); > enum omap_channel channel = dssdev->dispc_channel; > > - if (!dispc_mgr_timings_ok(channel, vm)) > + if (!dispc_mgr_timings_ok(sdi->dss->dispc, channel, vm)) > return -EINVAL; > > if (vm->pixelclock == 0) > diff --git a/drivers/gpu/drm/omapdrm/dss/venc.c b/drivers/gpu/drm/omapdrm/dss/venc.c > index 13ed7426ea09..449a82b84d03 100644 > --- a/drivers/gpu/drm/omapdrm/dss/venc.c > +++ b/drivers/gpu/drm/omapdrm/dss/venc.c > @@ -597,7 +597,7 @@ static void venc_set_timings(struct omap_dss_device *dssdev, > > venc->vm = actual_vm; > > - dispc_set_tv_pclk(13500000); > + dispc_set_tv_pclk(venc->dss->dispc, 13500000); > > mutex_unlock(&venc->venc_lock); > } > -- > 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