diff options
author | Michael I. Gold <gold@nvidia.com> | 2011-03-30 19:07:07 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:37:10 -0800 |
commit | a972fd8e76bc192aeb4dc1acc4140c6795c66bd6 (patch) | |
tree | cafd37821e97f03cc12ebbfec04b5de687b5d12c | |
parent | 832ea7674a494f1099e61b623a37aee721b9630d (diff) |
video: tegra: add support for tiled surfaces
Change-Id: I82497fc756552740836eaa2f608fecaea409cfeb
Signed-off-by: Michael I. Gold <gold@nvidia.com>
-rw-r--r-- | arch/arm/mach-tegra/include/mach/dc.h | 1 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 11 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc_reg.h | 4 | ||||
-rw-r--r-- | drivers/video/tegra/fb.c | 3 | ||||
-rw-r--r-- | include/video/tegrafb.h | 1 |
5 files changed, 20 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/include/mach/dc.h b/arch/arm/mach-tegra/include/mach/dc.h index 8ca6f3da3c8e..daaeb3b8a72e 100644 --- a/arch/arm/mach-tegra/include/mach/dc.h +++ b/arch/arm/mach-tegra/include/mach/dc.h @@ -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) diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index e846be96c7e6..53f52df2e0f8 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -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; diff --git a/drivers/video/tegra/dc/dc_reg.h b/drivers/video/tegra/dc/dc_reg.h index 43d0fa579375..df1333e31d14 100644 --- a/drivers/video/tegra/dc/dc_reg.h +++ b/drivers/video/tegra/dc/dc_reg.h @@ -382,6 +382,10 @@ #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 diff --git a/drivers/video/tegra/fb.c b/drivers/video/tegra/fb.c index 06f399b58d55..c42452caef43 100644 --- a/drivers/video/tegra/fb.c +++ b/drivers/video/tegra/fb.c @@ -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; diff --git a/include/video/tegrafb.h b/include/video/tegrafb.h index 01f94c6c2fb7..6e765c5b175a 100644 --- a/include/video/tegrafb.h +++ b/include/video/tegrafb.h @@ -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 { |