RE: [PATCH v2 2/3] OMAPDSS: DISPC: VIDEO3 pipeline support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Taneja, Archit
> Sent: Friday, September 16, 2011 12:09 PM
> To: Valkeinen, Tomi
> Cc: Hiremath, Vaibhav; linux-omap@xxxxxxxxxxxxxxx; Taneja, Archit
> Subject: [PATCH v2 2/3] OMAPDSS: DISPC: VIDEO3 pipeline support
>
> Add support for VIDEO3 pipeline on OMAP4:
> - Add VIDEO3 pipeline information in dss_features and omapdss.h
> - Add VIDEO3 pipeline register coefficients in dispc.h
> - Create a new overlay structure corresponding to VIDEO3.
> - Make changes in dispc.c for VIDEO3
>
> Signed-off-by: Archit Taneja <archit@xxxxxx>
> ---
>  drivers/video/omap2/dss/dispc.c        |   17 ++++++++--
>  drivers/video/omap2/dss/dispc.h        |   57
> ++++++++++++++++++++++++++++++++
>  drivers/video/omap2/dss/dss_features.c |   18 +++++++++-
>  drivers/video/omap2/dss/dss_features.h |    2 +-
>  drivers/video/omap2/dss/overlay.c      |    5 +++
>  include/video/omapdss.h                |    5 ++-
>  6 files changed, 97 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/video/omap2/dss/dispc.c
> b/drivers/video/omap2/dss/dispc.c
> index e0639d3..fa7aadf 100644
> --- a/drivers/video/omap2/dss/dispc.c
> +++ b/drivers/video/omap2/dss/dispc.c
> @@ -751,7 +751,7 @@ static void dispc_ovl_set_pre_mult_alpha(enum
> omap_plane plane, bool enable)
>
>  static void dispc_ovl_setup_global_alpha(enum omap_plane plane, u8
> global_alpha)
>  {
> -     static const unsigned shifts[] = { 0, 8, 16, };
> +     static const unsigned shifts[] = { 0, 8, 16, 24, };
>       int shift;
>       struct omap_overlay *ovl = omap_dss_get_overlay(plane);
>
> @@ -866,6 +866,7 @@ static void dispc_ovl_set_channel_out(enum omap_plane
> plane,
>               break;
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
> +     case OMAP_DSS_VIDEO3:
>               shift = 16;
>               break;
>       default:
> @@ -903,7 +904,7 @@ static void dispc_ovl_set_channel_out(enum omap_plane
> plane,
>  static void dispc_ovl_set_burst_size(enum omap_plane plane,
>               enum omap_burst_size burst_size)
>  {
> -     static const unsigned shifts[] = { 6, 14, 14, };
> +     static const unsigned shifts[] = { 6, 14, 14, 14, };
>       int shift;
>
>       shift = shifts[plane];
> @@ -988,7 +989,7 @@ static void dispc_ovl_set_vid_color_conv(enum
> omap_plane plane, bool enable)
>
>  static void dispc_ovl_enable_replication(enum omap_plane plane, bool
> enable)
>  {
> -     static const unsigned shifts[] = { 5, 10, 10 };
> +     static const unsigned shifts[] = { 5, 10, 10, 10 };
>       int shift;
>
>       shift = shifts[plane];
> @@ -2558,6 +2559,10 @@ void dispc_dump_irqs(struct seq_file *s)
>       PIS(VID1_END_WIN);
>       PIS(VID2_FIFO_UNDERFLOW);
>       PIS(VID2_END_WIN);
> +     if (dss_feat_get_num_ovls() > 3) {
> +             PIS(VID3_FIFO_UNDERFLOW);
> +             PIS(VID3_END_WIN);
> +     }
>       PIS(SYNC_LOST);
>       PIS(SYNC_LOST_DIGIT);
>       PIS(WAKEUP);
> @@ -2583,6 +2588,7 @@ void dispc_dump_regs(struct seq_file *s)
>               [OMAP_DSS_GFX]          = "GFX",
>               [OMAP_DSS_VIDEO1]       = "VID1",
>               [OMAP_DSS_VIDEO2]       = "VID2",
> +             [OMAP_DSS_VIDEO3]       = "VID3",
>       };
>       const char **p_names;
>
> @@ -2985,6 +2991,8 @@ static void print_irq_status(u32 status)
>       PIS(OCP_ERR);
>       PIS(VID1_FIFO_UNDERFLOW);
>       PIS(VID2_FIFO_UNDERFLOW);
> +     if (dss_feat_get_num_ovls() > 3)
> +             PIS(VID3_FIFO_UNDERFLOW);
>       PIS(SYNC_LOST);
>       PIS(SYNC_LOST_DIGIT);
>       if (dss_has_feature(FEAT_MGR_LCD2))
> @@ -3082,6 +3090,7 @@ static void dispc_error_worker(struct work_struct
> *work)
>               DISPC_IRQ_GFX_FIFO_UNDERFLOW,
>               DISPC_IRQ_VID1_FIFO_UNDERFLOW,
>               DISPC_IRQ_VID2_FIFO_UNDERFLOW,
> +             DISPC_IRQ_VID3_FIFO_UNDERFLOW,
>       };
>
>       static const unsigned sync_lost_bits[] = {
> @@ -3257,6 +3266,8 @@ static void _omap_dispc_initialize_irq(void)
>       dispc.irq_error_mask = DISPC_IRQ_MASK_ERROR;
>       if (dss_has_feature(FEAT_MGR_LCD2))
>               dispc.irq_error_mask |= DISPC_IRQ_SYNC_LOST2;
> +     if (dss_feat_get_num_ovls() > 3)
> +             dispc.irq_error_mask |= DISPC_IRQ_VID3_FIFO_UNDERFLOW;
>
>       /* there's SYNC_LOST_DIGIT waiting after enabling the DSS,
>        * so clear it */
> diff --git a/drivers/video/omap2/dss/dispc.h
> b/drivers/video/omap2/dss/dispc.h
> index 6c9ee0a..c06efc3 100644
> --- a/drivers/video/omap2/dss/dispc.h
> +++ b/drivers/video/omap2/dss/dispc.h
> @@ -291,6 +291,8 @@ static inline u16 DISPC_OVL_BASE(enum omap_plane
> plane)
>               return 0x00BC;
>       case OMAP_DSS_VIDEO2:
>               return 0x014C;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0300;
>       default:
>               BUG();
>       }
> @@ -304,6 +306,8 @@ static inline u16 DISPC_BA0_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0000;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0008;
>       default:
>               BUG();
>       }
> @@ -316,6 +320,8 @@ static inline u16 DISPC_BA1_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0004;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x000C;
>       default:
>               BUG();
>       }
> @@ -330,6 +336,8 @@ static inline u16 DISPC_BA0_UV_OFFSET(enum omap_plane
> plane)
>               return 0x0544;
>       case OMAP_DSS_VIDEO2:
>               return 0x04BC;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0310;
>       default:
>               BUG();
>       }
> @@ -344,6 +352,8 @@ static inline u16 DISPC_BA1_UV_OFFSET(enum omap_plane
> plane)
>               return 0x0548;
>       case OMAP_DSS_VIDEO2:
>               return 0x04C0;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0314;
>       default:
>               BUG();
>       }
> @@ -356,6 +366,8 @@ static inline u16 DISPC_POS_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0008;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x009C;
>       default:
>               BUG();
>       }
> @@ -368,6 +380,8 @@ static inline u16 DISPC_SIZE_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x000C;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x00A8;
>       default:
>               BUG();
>       }
> @@ -381,6 +395,8 @@ static inline u16 DISPC_ATTR_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0010;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0070;
>       default:
>               BUG();
>       }
> @@ -395,6 +411,8 @@ static inline u16 DISPC_ATTR2_OFFSET(enum omap_plane
> plane)
>               return 0x0568;
>       case OMAP_DSS_VIDEO2:
>               return 0x04DC;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x032C;
>       default:
>               BUG();
>       }
> @@ -408,6 +426,8 @@ static inline u16 DISPC_FIFO_THRESH_OFFSET(enum
> omap_plane plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0014;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x008C;
>       default:
>               BUG();
>       }
> @@ -421,6 +441,8 @@ static inline u16 DISPC_FIFO_SIZE_STATUS_OFFSET(enum
> omap_plane plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0018;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0088;
>       default:
>               BUG();
>       }
> @@ -434,6 +456,8 @@ static inline u16 DISPC_ROW_INC_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x001C;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x00A4;
>       default:
>               BUG();
>       }
> @@ -447,6 +471,8 @@ static inline u16 DISPC_PIX_INC_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0020;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0098;
>       default:
>               BUG();
>       }
> @@ -459,6 +485,7 @@ static inline u16 DISPC_WINDOW_SKIP_OFFSET(enum
> omap_plane plane)
>               return 0x0034;
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
> +     case OMAP_DSS_VIDEO3:
>               BUG();
>       default:
>               BUG();
> @@ -472,6 +499,7 @@ static inline u16 DISPC_TABLE_BA_OFFSET(enum
> omap_plane plane)
>               return 0x0038;
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
> +     case OMAP_DSS_VIDEO3:
>               BUG();
>       default:
>               BUG();
> @@ -486,6 +514,8 @@ static inline u16 DISPC_FIR_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0024;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0090;
>       default:
>               BUG();
>       }
> @@ -500,6 +530,8 @@ static inline u16 DISPC_FIR2_OFFSET(enum omap_plane
> plane)
>               return 0x0580;
>       case OMAP_DSS_VIDEO2:
>               return 0x055C;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0424;
>       default:
>               BUG();
>       }
> @@ -513,6 +545,8 @@ static inline u16 DISPC_PIC_SIZE_OFFSET(enum
> omap_plane plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0028;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0094;
>       default:
>               BUG();
>       }
> @@ -527,6 +561,8 @@ static inline u16 DISPC_ACCU0_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x002C;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0000;
>       default:
>               BUG();
>       }
> @@ -541,6 +577,8 @@ static inline u16 DISPC_ACCU2_0_OFFSET(enum omap_plane
> plane)
>               return 0x0584;
>       case OMAP_DSS_VIDEO2:
>               return 0x0560;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0428;
>       default:
>               BUG();
>       }
> @@ -554,6 +592,8 @@ static inline u16 DISPC_ACCU1_OFFSET(enum omap_plane
> plane)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0030;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0004;
>       default:
>               BUG();
>       }
> @@ -568,6 +608,8 @@ static inline u16 DISPC_ACCU2_1_OFFSET(enum omap_plane
> plane)
>               return 0x0588;
>       case OMAP_DSS_VIDEO2:
>               return 0x0564;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x042C;
>       default:
>               BUG();
>       }
> @@ -582,6 +624,8 @@ static inline u16 DISPC_FIR_COEF_H_OFFSET(enum
> omap_plane plane, u16 i)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0034 + i * 0x8;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0010 + i * 0x8;
>       default:
>               BUG();
>       }
> @@ -597,6 +641,8 @@ static inline u16 DISPC_FIR_COEF_H2_OFFSET(enum
> omap_plane plane, u16 i)
>               return 0x058C + i * 0x8;
>       case OMAP_DSS_VIDEO2:
>               return 0x0568 + i * 0x8;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0430 + i * 0x8;
>       default:
>               BUG();
>       }
> @@ -611,6 +657,8 @@ static inline u16 DISPC_FIR_COEF_HV_OFFSET(enum
> omap_plane plane, u16 i)
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
>               return 0x0038 + i * 0x8;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0014 + i * 0x8;
>       default:
>               BUG();
>       }
> @@ -626,6 +674,8 @@ static inline u16 DISPC_FIR_COEF_HV2_OFFSET(enum
> omap_plane plane, u16 i)
>               return 0x0590 + i * 8;
>       case OMAP_DSS_VIDEO2:
>               return 0x056C + i * 0x8;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0434 + i * 0x8;
>       default:
>               BUG();
>       }
> @@ -639,6 +689,7 @@ static inline u16 DISPC_CONV_COEF_OFFSET(enum
> omap_plane plane, u16 i)
>               BUG();
>       case OMAP_DSS_VIDEO1:
>       case OMAP_DSS_VIDEO2:
> +     case OMAP_DSS_VIDEO3:
>               return 0x0074 + i * 0x4;
>       default:
>               BUG();
> @@ -655,6 +706,8 @@ static inline u16 DISPC_FIR_COEF_V_OFFSET(enum
> omap_plane plane, u16 i)
>               return 0x0124 + i * 0x4;
>       case OMAP_DSS_VIDEO2:
>               return 0x00B4 + i * 0x4;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0050 + i * 0x4;
>       default:
>               BUG();
>       }
> @@ -670,6 +723,8 @@ static inline u16 DISPC_FIR_COEF_V2_OFFSET(enum
> omap_plane plane, u16 i)
>               return 0x05CC + i * 0x4;
>       case OMAP_DSS_VIDEO2:
>               return 0x05A8 + i * 0x4;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x0470 + i * 0x4;
>       default:
>               BUG();
>       }
> @@ -684,6 +739,8 @@ static inline u16 DISPC_PRELOAD_OFFSET(enum omap_plane
> plane)
>               return 0x0174;
>       case OMAP_DSS_VIDEO2:
>               return 0x00E8;
> +     case OMAP_DSS_VIDEO3:
> +             return 0x00A0;
>       default:
>               BUG();
>       }
> diff --git a/drivers/video/omap2/dss/dss_features.c
> b/drivers/video/omap2/dss/dss_features.c
> index 70d5b9e..e5e94f4 100644
> --- a/drivers/video/omap2/dss/dss_features.c
> +++ b/drivers/video/omap2/dss/dss_features.c
> @@ -210,6 +210,16 @@ static const enum omap_color_mode
> omap4_dss_supported_color_modes[] = {
>       OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 |
>       OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 |
>       OMAP_DSS_COLOR_RGBX32,
> +
> +     /* OMAP_DSS_VIDEO3 */
> +     OMAP_DSS_COLOR_RGB16 | OMAP_DSS_COLOR_RGB12U |
> +     OMAP_DSS_COLOR_YUV2 | OMAP_DSS_COLOR_ARGB16_1555 |
> +     OMAP_DSS_COLOR_RGBA32 | OMAP_DSS_COLOR_NV12 |
> +     OMAP_DSS_COLOR_RGBA16 | OMAP_DSS_COLOR_RGB24U |
> +     OMAP_DSS_COLOR_RGB24P | OMAP_DSS_COLOR_UYVY |
> +     OMAP_DSS_COLOR_ARGB16 | OMAP_DSS_COLOR_XRGB16_1555 |
> +     OMAP_DSS_COLOR_ARGB32 | OMAP_DSS_COLOR_RGBX16 |
> +     OMAP_DSS_COLOR_RGBX32,
>  };
>
>  static const enum omap_overlay_caps omap2_dss_overlay_caps[] = {
> @@ -258,6 +268,10 @@ static const enum omap_overlay_caps
> omap4_dss_overlay_caps[] = {
>       /* OMAP_DSS_VIDEO2 */
>       OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
>               OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER,
> +
> +     /* OMAP_DSS_VIDEO3 */
> +     OMAP_DSS_OVL_CAP_SCALE | OMAP_DSS_OVL_CAP_GLOBAL_ALPHA |
> +             OMAP_DSS_OVL_CAP_PRE_MULT_ALPHA | OMAP_DSS_OVL_CAP_ZORDER,
>  };
>
>  static const char * const omap2_dss_clk_source_names[] = {
> @@ -401,7 +415,7 @@ static const struct omap_dss_features
> omap4430_es1_0_dss_features  = {
>               FEAT_ALPHA_FREE_ZORDER,
>
>       .num_mgrs = 3,
> -     .num_ovls = 3,
> +     .num_ovls = 4,
>       .supported_displays = omap4_dss_supported_displays,
>       .supported_color_modes = omap4_dss_supported_color_modes,
>       .overlay_caps = omap4_dss_overlay_caps,
> @@ -425,7 +439,7 @@ static const struct omap_dss_features
> omap4_dss_features = {
>               FEAT_PRELOAD | FEAT_FIR_COEF_V | FEAT_ALPHA_FREE_ZORDER,
>
>       .num_mgrs = 3,
> -     .num_ovls = 3,
> +     .num_ovls = 4,
>       .supported_displays = omap4_dss_supported_displays,
>       .supported_color_modes = omap4_dss_supported_color_modes,
>       .overlay_caps = omap4_dss_overlay_caps,
> diff --git a/drivers/video/omap2/dss/dss_features.h
> b/drivers/video/omap2/dss/dss_features.h
> index e81271a..6a6c05d 100644
> --- a/drivers/video/omap2/dss/dss_features.h
> +++ b/drivers/video/omap2/dss/dss_features.h
> @@ -25,7 +25,7 @@
>  #endif
>
>  #define MAX_DSS_MANAGERS     3
> -#define MAX_DSS_OVERLAYS     3
> +#define MAX_DSS_OVERLAYS     4
[Hiremath, Vaibhav] Not related to this patch as such, but I think we should now get rid of these macros and use run-time mechanism.

Overall this patch looks ok to me, I will test it tomorrow and will update you.

Thanks,
Vaibhav

>  #define MAX_DSS_LCD_MANAGERS 2
>  #define MAX_NUM_DSI          2
>
> diff --git a/drivers/video/omap2/dss/overlay.c
> b/drivers/video/omap2/dss/overlay.c
> index afb7583..11d21e3 100644
> --- a/drivers/video/omap2/dss/overlay.c
> +++ b/drivers/video/omap2/dss/overlay.c
> @@ -615,6 +615,11 @@ void dss_init_overlays(struct platform_device *pdev)
>                       ovl->id = OMAP_DSS_VIDEO2;
>                       ovl->info.global_alpha = 255;
>                       break;
> +             case 3:
> +                     ovl->name = "vid3";
> +                     ovl->id = OMAP_DSS_VIDEO3;
> +                     ovl->info.global_alpha = 255;
> +                     break;
>               }
>
>               ovl->set_manager = &omap_dss_set_manager;
> diff --git a/include/video/omapdss.h b/include/video/omapdss.h
> index 5f0ce5e..1f12559 100644
> --- a/include/video/omapdss.h
> +++ b/include/video/omapdss.h
> @@ -41,6 +41,8 @@
>  #define DISPC_IRQ_WAKEUP             (1 << 16)
>  #define DISPC_IRQ_SYNC_LOST2         (1 << 17)
>  #define DISPC_IRQ_VSYNC2             (1 << 18)
> +#define DISPC_IRQ_VID3_END_WIN               (1 << 19)
> +#define DISPC_IRQ_VID3_FIFO_UNDERFLOW        (1 << 20)
>  #define DISPC_IRQ_ACBIAS_COUNT_STAT2 (1 << 21)
>  #define DISPC_IRQ_FRAMEDONE2         (1 << 22)
>  #define DISPC_IRQ_FRAMEDONEWB                (1 << 23)
> @@ -63,7 +65,8 @@ enum omap_display_type {
>  enum omap_plane {
>       OMAP_DSS_GFX    = 0,
>       OMAP_DSS_VIDEO1 = 1,
> -     OMAP_DSS_VIDEO2 = 2
> +     OMAP_DSS_VIDEO2 = 2,
> +     OMAP_DSS_VIDEO3 = 3,
>  };
>
>  enum omap_channel {
> --
> 1.7.1

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux