aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0060-drm-amdgpu-enable-ABGR-and-XBGR-formats-v2.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0060-drm-amdgpu-enable-ABGR-and-XBGR-formats-v2.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0060-drm-amdgpu-enable-ABGR-and-XBGR-formats-v2.patch174
1 files changed, 174 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0060-drm-amdgpu-enable-ABGR-and-XBGR-formats-v2.patch b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0060-drm-amdgpu-enable-ABGR-and-XBGR-formats-v2.patch
new file mode 100644
index 00000000..c2085c38
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux-4.19/linux-yocto-4.19.8/0060-drm-amdgpu-enable-ABGR-and-XBGR-formats-v2.patch
@@ -0,0 +1,174 @@
+From f672a82c76e8690f2b34d25975abce1b00b61877 Mon Sep 17 00:00:00 2001
+From: Mauro Rossi <issor.oruam@gmail.com>
+Date: Sun, 12 Aug 2018 21:43:02 +0200
+Subject: [PATCH 0060/2940] drm/amdgpu: enable ABGR and XBGR formats (v2)
+
+Add support for DRM_FORMAT_{A,X}BGR8888 in amdgpu with amd dc disabled
+
+(v2) Crossbar registers are defined and used to swap red and blue channels,
+ keeping the existing coding style in each of the dce modules.
+ After setting crossbar bits in fb_swap, use bitwise OR for big endian
+ where required in DCE6 and DCE8 which do not rely on REG_SET_FIELD()
+
+Signed-off-by: Mauro Rossi <issor.oruam@gmail.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/dce_v10_0.c | 11 +++++++++++
+ drivers/gpu/drm/amd/amdgpu/dce_v11_0.c | 11 +++++++++++
+ drivers/gpu/drm/amd/amdgpu/dce_v6_0.c | 10 ++++++++++
+ drivers/gpu/drm/amd/amdgpu/dce_v8_0.c | 10 ++++++++++
+ drivers/gpu/drm/amd/amdgpu/si_enums.h | 20 ++++++++++++++++++++
+ drivers/gpu/drm/amd/amdgpu/sid.h | 20 ++++++++++++++++++++
+ 6 files changed, 82 insertions(+)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+index 4313d6c6407d..3916aa6cc4ec 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v10_0.c
+@@ -1943,6 +1943,17 @@ static int dce_v10_0_crtc_do_set_base(struct drm_crtc *crtc,
+ /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */
+ bypass_lut = true;
+ break;
++ case DRM_FORMAT_XBGR8888:
++ case DRM_FORMAT_ABGR8888:
++ fb_format = REG_SET_FIELD(0, GRPH_CONTROL, GRPH_DEPTH, 2);
++ fb_format = REG_SET_FIELD(fb_format, GRPH_CONTROL, GRPH_FORMAT, 0);
++ fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, 2);
++ fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, 2);
++#ifdef __BIG_ENDIAN
++ fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_ENDIAN_SWAP,
++ ENDIAN_8IN32);
++#endif
++ break;
+ default:
+ DRM_ERROR("Unsupported screen format %s\n",
+ drm_get_format_name(target_fb->format->format, &format_name));
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+index e295cc18cae4..4ffb612a4e53 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v11_0.c
+@@ -1985,6 +1985,17 @@ static int dce_v11_0_crtc_do_set_base(struct drm_crtc *crtc,
+ /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */
+ bypass_lut = true;
+ break;
++ case DRM_FORMAT_XBGR8888:
++ case DRM_FORMAT_ABGR8888:
++ fb_format = REG_SET_FIELD(0, GRPH_CONTROL, GRPH_DEPTH, 2);
++ fb_format = REG_SET_FIELD(fb_format, GRPH_CONTROL, GRPH_FORMAT, 0);
++ fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_RED_CROSSBAR, 2);
++ fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_BLUE_CROSSBAR, 2);
++#ifdef __BIG_ENDIAN
++ fb_swap = REG_SET_FIELD(fb_swap, GRPH_SWAP_CNTL, GRPH_ENDIAN_SWAP,
++ ENDIAN_8IN32);
++#endif
++ break;
+ default:
+ DRM_ERROR("Unsupported screen format %s\n",
+ drm_get_format_name(target_fb->format->format, &format_name));
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+index 018dd62dc5b6..480c5348a14f 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v6_0.c
+@@ -1888,6 +1888,16 @@ static int dce_v6_0_crtc_do_set_base(struct drm_crtc *crtc,
+ /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */
+ bypass_lut = true;
+ break;
++ case DRM_FORMAT_XBGR8888:
++ case DRM_FORMAT_ABGR8888:
++ fb_format = (GRPH_DEPTH(GRPH_DEPTH_32BPP) |
++ GRPH_FORMAT(GRPH_FORMAT_ARGB8888));
++ fb_swap = (GRPH_RED_CROSSBAR(GRPH_RED_SEL_B) |
++ GRPH_BLUE_CROSSBAR(GRPH_BLUE_SEL_R));
++#ifdef __BIG_ENDIAN
++ fb_swap |= GRPH_ENDIAN_SWAP(GRPH_ENDIAN_8IN32);
++#endif
++ break;
+ default:
+ DRM_ERROR("Unsupported screen format %s\n",
+ drm_get_format_name(target_fb->format->format, &format_name));
+diff --git a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+index 2bae3ad2bbf8..797196476c94 100644
+--- a/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
++++ b/drivers/gpu/drm/amd/amdgpu/dce_v8_0.c
+@@ -1865,6 +1865,16 @@ static int dce_v8_0_crtc_do_set_base(struct drm_crtc *crtc,
+ /* Greater 8 bpc fb needs to bypass hw-lut to retain precision */
+ bypass_lut = true;
+ break;
++ case DRM_FORMAT_XBGR8888:
++ case DRM_FORMAT_ABGR8888:
++ fb_format = ((GRPH_DEPTH_32BPP << GRPH_CONTROL__GRPH_DEPTH__SHIFT) |
++ (GRPH_FORMAT_ARGB8888 << GRPH_CONTROL__GRPH_FORMAT__SHIFT));
++ fb_swap = ((GRPH_RED_SEL_B << GRPH_SWAP_CNTL__GRPH_RED_CROSSBAR__SHIFT) |
++ (GRPH_BLUE_SEL_R << GRPH_SWAP_CNTL__GRPH_BLUE_CROSSBAR__SHIFT));
++#ifdef __BIG_ENDIAN
++ fb_swap |= (GRPH_ENDIAN_8IN32 << GRPH_SWAP_CNTL__GRPH_ENDIAN_SWAP__SHIFT);
++#endif
++ break;
+ default:
+ DRM_ERROR("Unsupported screen format %s\n",
+ drm_get_format_name(target_fb->format->format, &format_name));
+diff --git a/drivers/gpu/drm/amd/amdgpu/si_enums.h b/drivers/gpu/drm/amd/amdgpu/si_enums.h
+index dc9e0e6b4558..790ba46eaebb 100644
+--- a/drivers/gpu/drm/amd/amdgpu/si_enums.h
++++ b/drivers/gpu/drm/amd/amdgpu/si_enums.h
+@@ -46,6 +46,26 @@
+ #define GRPH_ENDIAN_8IN16 1
+ #define GRPH_ENDIAN_8IN32 2
+ #define GRPH_ENDIAN_8IN64 3
++#define GRPH_RED_CROSSBAR(x) (((x) & 0x3) << 4)
++#define GRPH_RED_SEL_R 0
++#define GRPH_RED_SEL_G 1
++#define GRPH_RED_SEL_B 2
++#define GRPH_RED_SEL_A 3
++#define GRPH_GREEN_CROSSBAR(x) (((x) & 0x3) << 6)
++#define GRPH_GREEN_SEL_G 0
++#define GRPH_GREEN_SEL_B 1
++#define GRPH_GREEN_SEL_A 2
++#define GRPH_GREEN_SEL_R 3
++#define GRPH_BLUE_CROSSBAR(x) (((x) & 0x3) << 8)
++#define GRPH_BLUE_SEL_B 0
++#define GRPH_BLUE_SEL_A 1
++#define GRPH_BLUE_SEL_R 2
++#define GRPH_BLUE_SEL_G 3
++#define GRPH_ALPHA_CROSSBAR(x) (((x) & 0x3) << 10)
++#define GRPH_ALPHA_SEL_A 0
++#define GRPH_ALPHA_SEL_R 1
++#define GRPH_ALPHA_SEL_G 2
++#define GRPH_ALPHA_SEL_B 3
+
+ #define GRPH_DEPTH(x) (((x) & 0x3) << 0)
+ #define GRPH_DEPTH_8BPP 0
+diff --git a/drivers/gpu/drm/amd/amdgpu/sid.h b/drivers/gpu/drm/amd/amdgpu/sid.h
+index c57eff159374..7cf12adb3915 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sid.h
++++ b/drivers/gpu/drm/amd/amdgpu/sid.h
+@@ -2201,6 +2201,26 @@
+ # define EVERGREEN_GRPH_ENDIAN_8IN16 1
+ # define EVERGREEN_GRPH_ENDIAN_8IN32 2
+ # define EVERGREEN_GRPH_ENDIAN_8IN64 3
++#define EVERGREEN_GRPH_RED_CROSSBAR(x) (((x) & 0x3) << 4)
++# define EVERGREEN_GRPH_RED_SEL_R 0
++# define EVERGREEN_GRPH_RED_SEL_G 1
++# define EVERGREEN_GRPH_RED_SEL_B 2
++# define EVERGREEN_GRPH_RED_SEL_A 3
++#define EVERGREEN_GRPH_GREEN_CROSSBAR(x) (((x) & 0x3) << 6)
++# define EVERGREEN_GRPH_GREEN_SEL_G 0
++# define EVERGREEN_GRPH_GREEN_SEL_B 1
++# define EVERGREEN_GRPH_GREEN_SEL_A 2
++# define EVERGREEN_GRPH_GREEN_SEL_R 3
++#define EVERGREEN_GRPH_BLUE_CROSSBAR(x) (((x) & 0x3) << 8)
++# define EVERGREEN_GRPH_BLUE_SEL_B 0
++# define EVERGREEN_GRPH_BLUE_SEL_A 1
++# define EVERGREEN_GRPH_BLUE_SEL_R 2
++# define EVERGREEN_GRPH_BLUE_SEL_G 3
++#define EVERGREEN_GRPH_ALPHA_CROSSBAR(x) (((x) & 0x3) << 10)
++# define EVERGREEN_GRPH_ALPHA_SEL_A 0
++# define EVERGREEN_GRPH_ALPHA_SEL_R 1
++# define EVERGREEN_GRPH_ALPHA_SEL_G 2
++# define EVERGREEN_GRPH_ALPHA_SEL_B 3
+
+ #define EVERGREEN_D3VGA_CONTROL 0xf8
+ #define EVERGREEN_D4VGA_CONTROL 0xf9
+--
+2.17.1
+