Re: [PATCH V2 2/6] OMAPDSS: DISPC: Move DISPC specific dss_reg_fields to dispc_features
On Monday 17 December 2012 06:07 PM, Tomi Valkeinen wrote: On 2012-12-05 12:16, Chandrabhanu Mahapatra wrote: The register fields in dss_reg_fields specific to DISPC are moved from struct omap_dss_features to corresponding dispc_reg_fields, initialized in struct dispc_features, thereby enabling local access. Signed-off-by: Chandrabhanu Mahapatra cmahapa...@ti.com --- drivers/video/omap2/dss/dispc.c| 114 drivers/video/omap2/dss/dss.h |4 ++ drivers/video/omap2/dss/dss_features.c | 28 drivers/video/omap2/dss/dss_features.h |7 -- 4 files changed, 89 insertions(+), 64 deletions(-) diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index bbba83f..ee4b152 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c @@ -80,6 +80,16 @@ struct dispc_irq_stats { unsigned irqs[32]; }; +struct dispc_reg_fields { +struct omapdss_reg_field firhinc; +struct omapdss_reg_field firvinc; +struct omapdss_reg_field fifo_low_thresh; +struct omapdss_reg_field fifo_high_thresh; +struct omapdss_reg_field fifosize; +struct omapdss_reg_field hori_accu; +struct omapdss_reg_field vert_accu; +}; + struct dispc_features { u8 sw_start; u8 fp_start; @@ -110,6 +120,8 @@ struct dispc_features { u32 buffer_size_unit; /* in bytes */ u32 burst_size_unit; /* in bytes */ + +struct dispc_reg_fields *reg_fields; This can be pointer to const. Yes, the same thing can also be done in other dispc and dsi reg_fields and param_ranges. }; #define DISPC_MAX_NR_FIFOS 5 @@ -1137,17 +1149,17 @@ static void dispc_mgr_set_size(enum omap_channel channel, u16 width, static void dispc_init_fifos(void) { -u32 size; +u32 size, unit; int fifo; -u8 start, end; -u32 unit; +const struct omapdss_reg_field *fifo_field; unit = dispc.feat-buffer_size_unit; -dss_feat_get_reg_field(FEAT_REG_FIFOSIZE, start, end); +fifo_field = dispc.feat-reg_fields-fifosize; for (fifo = 0; fifo dispc.feat-num_fifos; ++fifo) { -size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo), start, end); +size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo), +fifo_field-start, fifo_field-end); size *= unit; dispc.fifo_size[fifo] = size; @@ -1197,8 +1209,8 @@ static u32 dispc_ovl_get_fifo_size(enum omap_plane plane) void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high) { -u8 hi_start, hi_end, lo_start, lo_end; u32 unit; +const struct omapdss_reg_field *hi_field, *lo_field; unit = dispc.feat-buffer_size_unit; @@ -1208,20 +1220,20 @@ void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high) low /= unit; high /= unit; -dss_feat_get_reg_field(FEAT_REG_FIFOHIGHTHRESHOLD, hi_start, hi_end); -dss_feat_get_reg_field(FEAT_REG_FIFOLOWTHRESHOLD, lo_start, lo_end); +hi_field = dispc.feat-reg_fields-fifo_high_thresh; +lo_field = dispc.feat-reg_fields-fifo_low_thresh; DSSDBG(fifo(%d) threshold (bytes), old %u/%u, new %u/%u\n, plane, REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane), -lo_start, lo_end) * unit, +lo_field-start, lo_field-end) * unit, REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane), -hi_start, hi_end) * unit, +hi_field-start, hi_field-end) * unit, low * unit, high * unit); dispc_write_reg(DISPC_OVL_FIFO_THRESHOLD(plane), -FLD_VAL(high, hi_start, hi_end) | -FLD_VAL(low, lo_start, lo_end)); +FLD_VAL(high, hi_field-start, hi_field-end) | +FLD_VAL(low, lo_field-start, lo_field-end)); } void dispc_enable_fifomerge(bool enable) @@ -1289,14 +1301,13 @@ static void dispc_ovl_set_fir(enum omap_plane plane, u32 val; if (color_comp == DISPC_COLOR_COMPONENT_RGB_Y) { -u8 hinc_start, hinc_end, vinc_start, vinc_end; +const struct omapdss_reg_field *hinc_field, *vinc_field; -dss_feat_get_reg_field(FEAT_REG_FIRHINC, -hinc_start, hinc_end); -dss_feat_get_reg_field(FEAT_REG_FIRVINC, -vinc_start, vinc_end); -val = FLD_VAL(vinc, vinc_start, vinc_end) | -FLD_VAL(hinc, hinc_start, hinc_end); +hinc_field = dispc.feat-reg_fields-firhinc; +vinc_field = dispc.feat-reg_fields-firvinc; + +val = FLD_VAL(vinc, vinc_field-start, vinc_field-end) | +FLD_VAL(hinc, hinc_field-start, hinc_field-end);
Re: [PATCH V2 2/6] OMAPDSS: DISPC: Move DISPC specific dss_reg_fields to dispc_features
On 2012-12-05 12:16, Chandrabhanu Mahapatra wrote: The register fields in dss_reg_fields specific to DISPC are moved from struct omap_dss_features to corresponding dispc_reg_fields, initialized in struct dispc_features, thereby enabling local access. Signed-off-by: Chandrabhanu Mahapatra cmahapa...@ti.com --- drivers/video/omap2/dss/dispc.c| 114 drivers/video/omap2/dss/dss.h |4 ++ drivers/video/omap2/dss/dss_features.c | 28 drivers/video/omap2/dss/dss_features.h |7 -- 4 files changed, 89 insertions(+), 64 deletions(-) diff --git a/drivers/video/omap2/dss/dispc.c b/drivers/video/omap2/dss/dispc.c index bbba83f..ee4b152 100644 --- a/drivers/video/omap2/dss/dispc.c +++ b/drivers/video/omap2/dss/dispc.c @@ -80,6 +80,16 @@ struct dispc_irq_stats { unsigned irqs[32]; }; +struct dispc_reg_fields { + struct omapdss_reg_field firhinc; + struct omapdss_reg_field firvinc; + struct omapdss_reg_field fifo_low_thresh; + struct omapdss_reg_field fifo_high_thresh; + struct omapdss_reg_field fifosize; + struct omapdss_reg_field hori_accu; + struct omapdss_reg_field vert_accu; +}; + struct dispc_features { u8 sw_start; u8 fp_start; @@ -110,6 +120,8 @@ struct dispc_features { u32 buffer_size_unit; /* in bytes */ u32 burst_size_unit; /* in bytes */ + + struct dispc_reg_fields *reg_fields; This can be pointer to const. }; #define DISPC_MAX_NR_FIFOS 5 @@ -1137,17 +1149,17 @@ static void dispc_mgr_set_size(enum omap_channel channel, u16 width, static void dispc_init_fifos(void) { - u32 size; + u32 size, unit; int fifo; - u8 start, end; - u32 unit; + const struct omapdss_reg_field *fifo_field; unit = dispc.feat-buffer_size_unit; - dss_feat_get_reg_field(FEAT_REG_FIFOSIZE, start, end); + fifo_field = dispc.feat-reg_fields-fifosize; for (fifo = 0; fifo dispc.feat-num_fifos; ++fifo) { - size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo), start, end); + size = REG_GET(DISPC_OVL_FIFO_SIZE_STATUS(fifo), + fifo_field-start, fifo_field-end); size *= unit; dispc.fifo_size[fifo] = size; @@ -1197,8 +1209,8 @@ static u32 dispc_ovl_get_fifo_size(enum omap_plane plane) void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high) { - u8 hi_start, hi_end, lo_start, lo_end; u32 unit; + const struct omapdss_reg_field *hi_field, *lo_field; unit = dispc.feat-buffer_size_unit; @@ -1208,20 +1220,20 @@ void dispc_ovl_set_fifo_threshold(enum omap_plane plane, u32 low, u32 high) low /= unit; high /= unit; - dss_feat_get_reg_field(FEAT_REG_FIFOHIGHTHRESHOLD, hi_start, hi_end); - dss_feat_get_reg_field(FEAT_REG_FIFOLOWTHRESHOLD, lo_start, lo_end); + hi_field = dispc.feat-reg_fields-fifo_high_thresh; + lo_field = dispc.feat-reg_fields-fifo_low_thresh; DSSDBG(fifo(%d) threshold (bytes), old %u/%u, new %u/%u\n, plane, REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane), - lo_start, lo_end) * unit, + lo_field-start, lo_field-end) * unit, REG_GET(DISPC_OVL_FIFO_THRESHOLD(plane), - hi_start, hi_end) * unit, + hi_field-start, hi_field-end) * unit, low * unit, high * unit); dispc_write_reg(DISPC_OVL_FIFO_THRESHOLD(plane), - FLD_VAL(high, hi_start, hi_end) | - FLD_VAL(low, lo_start, lo_end)); + FLD_VAL(high, hi_field-start, hi_field-end) | + FLD_VAL(low, lo_field-start, lo_field-end)); } void dispc_enable_fifomerge(bool enable) @@ -1289,14 +1301,13 @@ static void dispc_ovl_set_fir(enum omap_plane plane, u32 val; if (color_comp == DISPC_COLOR_COMPONENT_RGB_Y) { - u8 hinc_start, hinc_end, vinc_start, vinc_end; + const struct omapdss_reg_field *hinc_field, *vinc_field; - dss_feat_get_reg_field(FEAT_REG_FIRHINC, - hinc_start, hinc_end); - dss_feat_get_reg_field(FEAT_REG_FIRVINC, - vinc_start, vinc_end); - val = FLD_VAL(vinc, vinc_start, vinc_end) | - FLD_VAL(hinc, hinc_start, hinc_end); + hinc_field = dispc.feat-reg_fields-firhinc; + vinc_field = dispc.feat-reg_fields-firvinc; + + val = FLD_VAL(vinc, vinc_field-start, vinc_field-end) | + FLD_VAL(hinc, hinc_field-start, hinc_field-end); dispc_write_reg(DISPC_OVL_FIR(plane), val); } else { @@