video: tegra: add support for tiled surfaces
authorMichael I. Gold <gold@nvidia.com>
Thu, 31 Mar 2011 02:07:07 +0000 (19:07 -0700)
committerErik Gilling <konkers@android.com>
Tue, 24 May 2011 20:55:12 +0000 (13:55 -0700)
Change-Id: I82497fc756552740836eaa2f608fecaea409cfeb
Signed-off-by: Michael I. Gold <gold@nvidia.com>
arch/arm/mach-tegra/include/mach/dc.h
drivers/video/tegra/dc/dc.c
drivers/video/tegra/dc/dc_reg.h
drivers/video/tegra/fb.c
include/video/tegrafb.h

index 8ca6f3da3c8eb582053882e9327310bd343438c2..daaeb3b8a72eae4fbd9df0c1e0e69b9cc260c9c7 100644 (file)
@@ -124,6 +124,7 @@ struct tegra_dc_win {
 #define TEGRA_WIN_FLAG_BLEND_COVERAGE  (1 << 2)
 #define TEGRA_WIN_FLAG_INVERT_H                (1 << 3)
 #define TEGRA_WIN_FLAG_INVERT_V                (1 << 4)
+#define TEGRA_WIN_FLAG_TILED           (1 << 5)
 
 #define TEGRA_WIN_BLEND_FLAGS_MASK \
        (TEGRA_WIN_FLAG_BLEND_PREMULT | TEGRA_WIN_FLAG_BLEND_COVERAGE)
index e846be96c7e672c602a09e04739d0289dd0f1bda..53f52df2e0f881aa6aeda5baf532eaba09544c9f 100644 (file)
@@ -585,6 +585,17 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n)
                tegra_dc_writel(dc, h_offset, DC_WINBUF_ADDR_H_OFFSET);
                tegra_dc_writel(dc, v_offset, DC_WINBUF_ADDR_V_OFFSET);
 
+               if (win->flags & TEGRA_WIN_FLAG_TILED)
+                       tegra_dc_writel(dc,
+                                       DC_WIN_BUFFER_ADDR_MODE_TILE |
+                                       DC_WIN_BUFFER_ADDR_MODE_TILE_UV,
+                                       DC_WIN_BUFFER_ADDR_MODE);
+               else
+                       tegra_dc_writel(dc,
+                                       DC_WIN_BUFFER_ADDR_MODE_LINEAR |
+                                       DC_WIN_BUFFER_ADDR_MODE_LINEAR_UV,
+                                       DC_WIN_BUFFER_ADDR_MODE);
+
                val = WIN_ENABLE;
                if (yuvp)
                        val |= CSC_ENABLE;
index 43d0fa57937563259267ff318e94d5a8ca5c2fa2..df1333e31d141d66cde2d04f9703be2ad62769ea 100644 (file)
 #define DC_WIN_BUF_STRIDE                      0x70b
 #define DC_WIN_UV_BUF_STRIDE                   0x70c
 #define DC_WIN_BUFFER_ADDR_MODE                        0x70d
+#define  DC_WIN_BUFFER_ADDR_MODE_LINEAR                (0 << 0)
+#define  DC_WIN_BUFFER_ADDR_MODE_LINEAR_UV     (0 << 16)
+#define  DC_WIN_BUFFER_ADDR_MODE_TILE          (1 << 0)
+#define  DC_WIN_BUFFER_ADDR_MODE_TILE_UV       (1 << 16)
 #define DC_WIN_DV_CONTROL                      0x70e
 #define DC_WIN_BLEND_NOKEY                     0x70f
 #define DC_WIN_BLEND_1WIN                      0x710
index 06f399b58d55fe43a6edc00e0dcc5f61657bbe58..c42452caef43204a7c8cefbf3e0bbd9ca4caa4f1 100644 (file)
@@ -391,6 +391,9 @@ static int tegra_fb_set_windowattr(struct tegra_fb_info *tegra_fb,
                win->flags |= TEGRA_WIN_FLAG_INVERT_H;
        if (flip_win->attr.flags & TEGRA_FB_WIN_FLAG_INVERT_V)
                win->flags |= TEGRA_WIN_FLAG_INVERT_V;
+       if (flip_win->attr.flags & TEGRA_FB_WIN_FLAG_TILED)
+               win->flags |= TEGRA_WIN_FLAG_TILED;
+
        win->fmt = flip_win->attr.pixformat;
        win->x = flip_win->attr.x;
        win->y = flip_win->attr.y;
index 01f94c6c2fb776de000f0a2ccdcaaac1ae767098..6e765c5b175a19ebbaa25ff26171d6be05c85679 100644 (file)
@@ -51,6 +51,7 @@
 
 #define TEGRA_FB_WIN_FLAG_INVERT_H     (1 << 0)
 #define TEGRA_FB_WIN_FLAG_INVERT_V     (1 << 1)
+#define TEGRA_FB_WIN_FLAG_TILED                (1 << 2)
 
 /* set index to -1 to ignore window data */
 struct tegra_fb_windowattr {