Skip to content

Commit

Permalink
drm/tegra: dc: Support background color
Browse files Browse the repository at this point in the history
Starting with Tegra124, the interface to set the background color (the
value generated for pixels that are not sourced from any window) is via
a different register. Earlier generations called this the border color.
Reverse the feature flag and assume that IP revisions that don't have
support for background color will support border color instead.

Signed-off-by: Thierry Reding <treding@nvidia.com>
  • Loading branch information
Thierry Reding committed Dec 13, 2017
1 parent 9b49f67 commit 7116e9a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
14 changes: 8 additions & 6 deletions drivers/gpu/drm/tegra/dc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1572,7 +1572,9 @@ static void tegra_crtc_atomic_enable(struct drm_crtc *crtc,
WIN_A_OF_INT | WIN_B_OF_INT | WIN_C_OF_INT;
tegra_dc_writel(dc, value, DC_CMD_INT_MASK);

if (dc->soc->supports_border_color)
if (dc->soc->supports_background_color)
tegra_dc_writel(dc, 0, DC_DISP_BLEND_BACKGROUND_COLOR);
else
tegra_dc_writel(dc, 0, DC_DISP_BORDER_COLOR);

/* apply PLL and pixel clock changes */
Expand Down Expand Up @@ -1835,7 +1837,7 @@ static const struct host1x_client_ops dc_client_ops = {
};

static const struct tegra_dc_soc_info tegra20_dc_soc_info = {
.supports_border_color = true,
.supports_background_color = false,
.supports_interlacing = false,
.supports_cursor = false,
.supports_block_linear = false,
Expand All @@ -1845,7 +1847,7 @@ static const struct tegra_dc_soc_info tegra20_dc_soc_info = {
};

static const struct tegra_dc_soc_info tegra30_dc_soc_info = {
.supports_border_color = true,
.supports_background_color = false,
.supports_interlacing = false,
.supports_cursor = false,
.supports_block_linear = false,
Expand All @@ -1855,7 +1857,7 @@ static const struct tegra_dc_soc_info tegra30_dc_soc_info = {
};

static const struct tegra_dc_soc_info tegra114_dc_soc_info = {
.supports_border_color = true,
.supports_background_color = false,
.supports_interlacing = false,
.supports_cursor = false,
.supports_block_linear = false,
Expand All @@ -1865,7 +1867,7 @@ static const struct tegra_dc_soc_info tegra114_dc_soc_info = {
};

static const struct tegra_dc_soc_info tegra124_dc_soc_info = {
.supports_border_color = false,
.supports_background_color = true,
.supports_interlacing = true,
.supports_cursor = true,
.supports_block_linear = true,
Expand All @@ -1875,7 +1877,7 @@ static const struct tegra_dc_soc_info tegra124_dc_soc_info = {
};

static const struct tegra_dc_soc_info tegra210_dc_soc_info = {
.supports_border_color = false,
.supports_background_color = true,
.supports_interlacing = true,
.supports_cursor = true,
.supports_block_linear = true,
Expand Down
8 changes: 7 additions & 1 deletion drivers/gpu/drm/tegra/dc.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ struct tegra_dc_stats {
};

struct tegra_dc_soc_info {
bool supports_border_color;
bool supports_background_color;
bool supports_interlacing;
bool supports_cursor;
bool supports_block_linear;
Expand Down Expand Up @@ -447,6 +447,12 @@ int tegra_dc_rgb_exit(struct tegra_dc *dc);
#define DC_DISP_SD_HW_K_VALUES 0x4dd
#define DC_DISP_SD_MAN_K_VALUES 0x4de

#define DC_DISP_BLEND_BACKGROUND_COLOR 0x4e4
#define BACKGROUND_COLOR_ALPHA(x) (((x) & 0xff) << 24)
#define BACKGROUND_COLOR_BLUE(x) (((x) & 0xff) << 16)
#define BACKGROUND_COLOR_GREEN(x) (((x) & 0xff) << 8)
#define BACKGROUND_COLOR_RED(x) (((x) & 0xff) << 0)

#define DC_DISP_INTERLACE_CONTROL 0x4e5
#define INTERLACE_STATUS (1 << 2)
#define INTERLACE_START (1 << 1)
Expand Down

0 comments on commit 7116e9a

Please sign in to comment.