mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
commit
dd7eaaf6e3
@ -0,0 +1,47 @@
|
||||
From 35a905282b20e556cd09f348f9c2bc8a22ea26d5 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
|
||||
Date: Mon, 23 Dec 2013 17:11:35 +0100
|
||||
Subject: [PATCH 2/4] drm/radeon: set correct pipe config for Hawaii in DCE
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/atombios_crtc.c | 19 ++++++-------------
|
||||
1 file changed, 6 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
index b197059..ec97bad 100644
|
||||
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
@@ -1180,19 +1180,12 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
|
||||
fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_1D_TILED_THIN1);
|
||||
|
||||
if (rdev->family >= CHIP_BONAIRE) {
|
||||
- u32 num_pipe_configs = rdev->config.cik.max_tile_pipes;
|
||||
- u32 num_rb = rdev->config.cik.max_backends_per_se;
|
||||
- if (num_pipe_configs > 8)
|
||||
- num_pipe_configs = 8;
|
||||
- if (num_pipe_configs == 8)
|
||||
- fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P8_32x32_16x16);
|
||||
- else if (num_pipe_configs == 4) {
|
||||
- if (num_rb == 4)
|
||||
- fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P4_16x16);
|
||||
- else if (num_rb < 4)
|
||||
- fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P4_8x16);
|
||||
- } else if (num_pipe_configs == 2)
|
||||
- fb_format |= CIK_GRPH_PIPE_CONFIG(CIK_ADDR_SURF_P2);
|
||||
+ /* Read the pipe config from the 2D TILED SCANOUT mode.
|
||||
+ * It should be the same for the other modes too, but not all
|
||||
+ * modes set the pipe config field. */
|
||||
+ u32 pipe_config = (rdev->config.cik.tile_mode_array[10] >> 6) & 0x1f;
|
||||
+
|
||||
+ fb_format |= CIK_GRPH_PIPE_CONFIG(pipe_config);
|
||||
} else if ((rdev->family == CHIP_TAHITI) ||
|
||||
(rdev->family == CHIP_PITCAIRN))
|
||||
fb_format |= SI_GRPH_PIPE_CONFIG(SI_ADDR_SURF_P8_32x32_8x16);
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -0,0 +1,106 @@
|
||||
From 439a1cfffe2c1a06e5a6394ccd5d18a8e89b15d3 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
|
||||
Date: Sun, 22 Dec 2013 02:18:01 +0100
|
||||
Subject: [PATCH 1/4] drm/radeon: expose render backend mask to the userspace
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This will allow userspace to correctly program the PA_SC_RASTER_CONFIG
|
||||
register, so it can be considered a fix.
|
||||
|
||||
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
drivers/gpu/drm/radeon/cik.c | 2 ++
|
||||
drivers/gpu/drm/radeon/radeon.h | 4 ++--
|
||||
drivers/gpu/drm/radeon/radeon_kms.c | 9 +++++++++
|
||||
drivers/gpu/drm/radeon/si.c | 2 ++
|
||||
include/uapi/drm/radeon_drm.h | 2 ++
|
||||
5 files changed, 17 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
|
||||
index 138a776..e950fab 100644
|
||||
--- a/drivers/gpu/drm/radeon/cik.c
|
||||
+++ b/drivers/gpu/drm/radeon/cik.c
|
||||
@@ -3114,6 +3114,8 @@ static void cik_setup_rb(struct radeon_device *rdev,
|
||||
mask <<= 1;
|
||||
}
|
||||
|
||||
+ rdev->config.cik.backend_enable_mask = enabled_rbs;
|
||||
+
|
||||
for (i = 0; i < se_num; i++) {
|
||||
cik_select_se_sh(rdev, i, 0xffffffff);
|
||||
data = 0;
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
|
||||
index b1f990d..45e1f44 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon.h
|
||||
+++ b/drivers/gpu/drm/radeon/radeon.h
|
||||
@@ -1940,7 +1940,7 @@ struct si_asic {
|
||||
unsigned sc_earlyz_tile_fifo_size;
|
||||
|
||||
unsigned num_tile_pipes;
|
||||
- unsigned num_backends_per_se;
|
||||
+ unsigned backend_enable_mask;
|
||||
unsigned backend_disable_mask_per_asic;
|
||||
unsigned backend_map;
|
||||
unsigned num_texture_channel_caches;
|
||||
@@ -1970,7 +1970,7 @@ struct cik_asic {
|
||||
unsigned sc_earlyz_tile_fifo_size;
|
||||
|
||||
unsigned num_tile_pipes;
|
||||
- unsigned num_backends_per_se;
|
||||
+ unsigned backend_enable_mask;
|
||||
unsigned backend_disable_mask_per_asic;
|
||||
unsigned backend_map;
|
||||
unsigned num_texture_channel_caches;
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
index 55d0b47..21d593c 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_kms.c
|
||||
@@ -461,6 +461,15 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
|
||||
case RADEON_INFO_SI_CP_DMA_COMPUTE:
|
||||
*value = 1;
|
||||
break;
|
||||
+ case RADEON_INFO_SI_BACKEND_ENABLED_MASK:
|
||||
+ if (rdev->family >= CHIP_BONAIRE) {
|
||||
+ *value = rdev->config.cik.backend_enable_mask;
|
||||
+ } else if (rdev->family >= CHIP_TAHITI) {
|
||||
+ *value = rdev->config.si.backend_enable_mask;
|
||||
+ } else {
|
||||
+ DRM_DEBUG_KMS("BACKEND_ENABLED_MASK is si+ only!\n");
|
||||
+ }
|
||||
+ break;
|
||||
default:
|
||||
DRM_DEBUG_KMS("Invalid request %d\n", info->request);
|
||||
return -EINVAL;
|
||||
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
|
||||
index 3eed9a1..85e1edf 100644
|
||||
--- a/drivers/gpu/drm/radeon/si.c
|
||||
+++ b/drivers/gpu/drm/radeon/si.c
|
||||
@@ -2855,6 +2855,8 @@ static void si_setup_rb(struct radeon_device *rdev,
|
||||
mask <<= 1;
|
||||
}
|
||||
|
||||
+ rdev->config.si.backend_enable_mask = enabled_rbs;
|
||||
+
|
||||
for (i = 0; i < se_num; i++) {
|
||||
si_select_se_sh(rdev, i, 0xffffffff);
|
||||
data = 0;
|
||||
diff --git a/include/uapi/drm/radeon_drm.h b/include/uapi/drm/radeon_drm.h
|
||||
index 2f3f7ea..fe421e8 100644
|
||||
--- a/include/uapi/drm/radeon_drm.h
|
||||
+++ b/include/uapi/drm/radeon_drm.h
|
||||
@@ -983,6 +983,8 @@ struct drm_radeon_cs {
|
||||
#define RADEON_INFO_SI_CP_DMA_COMPUTE 0x17
|
||||
/* CIK macrotile mode array */
|
||||
#define RADEON_INFO_CIK_MACROTILE_MODE_ARRAY 0x18
|
||||
+/* query the number of render backends */
|
||||
+#define RADEON_INFO_SI_BACKEND_ENABLED_MASK 0x19
|
||||
|
||||
|
||||
struct drm_radeon_info {
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -0,0 +1,102 @@
|
||||
From e3ea94a60f12025a3a547964c31245e71ac8fa77 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= <marek.olsak@amd.com>
|
||||
Date: Mon, 23 Dec 2013 17:11:36 +0100
|
||||
Subject: [PATCH 3/4] drm/radeon: set correct number of banks for CIK chips in
|
||||
DCE
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
We don't have the NUM_BANKS parameter, so we have to calculate it
|
||||
from the other parameters. NUM_BANKS is not constant on CIK.
|
||||
|
||||
This fixes 2D tiling for the display engine on CIK.
|
||||
|
||||
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/atombios_crtc.c | 64 +++++++++++++++++++++++-----------
|
||||
1 file changed, 43 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
index ec97bad..0b9621c 100644
|
||||
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
|
||||
@@ -1143,31 +1143,53 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc,
|
||||
}
|
||||
|
||||
if (tiling_flags & RADEON_TILING_MACRO) {
|
||||
- if (rdev->family >= CHIP_BONAIRE)
|
||||
- tmp = rdev->config.cik.tile_config;
|
||||
- else if (rdev->family >= CHIP_TAHITI)
|
||||
- tmp = rdev->config.si.tile_config;
|
||||
- else if (rdev->family >= CHIP_CAYMAN)
|
||||
- tmp = rdev->config.cayman.tile_config;
|
||||
- else
|
||||
- tmp = rdev->config.evergreen.tile_config;
|
||||
+ evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split);
|
||||
|
||||
- switch ((tmp & 0xf0) >> 4) {
|
||||
- case 0: /* 4 banks */
|
||||
- fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_4_BANK);
|
||||
- break;
|
||||
- case 1: /* 8 banks */
|
||||
- default:
|
||||
- fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_8_BANK);
|
||||
- break;
|
||||
- case 2: /* 16 banks */
|
||||
- fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_16_BANK);
|
||||
- break;
|
||||
+ /* Set NUM_BANKS. */
|
||||
+ if (rdev->family >= CHIP_BONAIRE) {
|
||||
+ unsigned tileb, index, num_banks, tile_split_bytes;
|
||||
+
|
||||
+ /* Calculate the macrotile mode index. */
|
||||
+ tile_split_bytes = 64 << tile_split;
|
||||
+ tileb = 8 * 8 * target_fb->bits_per_pixel / 8;
|
||||
+ tileb = min(tile_split_bytes, tileb);
|
||||
+
|
||||
+ for (index = 0; tileb > 64; index++) {
|
||||
+ tileb >>= 1;
|
||||
+ }
|
||||
+
|
||||
+ if (index >= 16) {
|
||||
+ DRM_ERROR("Wrong screen bpp (%u) or tile split (%u)\n",
|
||||
+ target_fb->bits_per_pixel, tile_split);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ num_banks = (rdev->config.cik.macrotile_mode_array[index] >> 6) & 0x3;
|
||||
+ fb_format |= EVERGREEN_GRPH_NUM_BANKS(num_banks);
|
||||
+ } else {
|
||||
+ /* SI and older. */
|
||||
+ if (rdev->family >= CHIP_TAHITI)
|
||||
+ tmp = rdev->config.si.tile_config;
|
||||
+ else if (rdev->family >= CHIP_CAYMAN)
|
||||
+ tmp = rdev->config.cayman.tile_config;
|
||||
+ else
|
||||
+ tmp = rdev->config.evergreen.tile_config;
|
||||
+
|
||||
+ switch ((tmp & 0xf0) >> 4) {
|
||||
+ case 0: /* 4 banks */
|
||||
+ fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_4_BANK);
|
||||
+ break;
|
||||
+ case 1: /* 8 banks */
|
||||
+ default:
|
||||
+ fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_8_BANK);
|
||||
+ break;
|
||||
+ case 2: /* 16 banks */
|
||||
+ fb_format |= EVERGREEN_GRPH_NUM_BANKS(EVERGREEN_ADDR_SURF_16_BANK);
|
||||
+ break;
|
||||
+ }
|
||||
}
|
||||
|
||||
fb_format |= EVERGREEN_GRPH_ARRAY_MODE(EVERGREEN_GRPH_ARRAY_2D_TILED_THIN1);
|
||||
-
|
||||
- evergreen_tiling_fields(tiling_flags, &bankw, &bankh, &mtaspect, &tile_split);
|
||||
fb_format |= EVERGREEN_GRPH_TILE_SPLIT(tile_split);
|
||||
fb_format |= EVERGREEN_GRPH_BANK_WIDTH(bankw);
|
||||
fb_format |= EVERGREEN_GRPH_BANK_HEIGHT(bankh);
|
||||
--
|
||||
1.8.3.2
|
||||
|
@ -0,0 +1,31 @@
|
||||
From 9482d0d37b46d2bd968d357bbd912cae49caf163 Mon Sep 17 00:00:00 2001
|
||||
From: Alex Deucher <alexander.deucher@amd.com>
|
||||
Date: Mon, 23 Dec 2013 11:31:44 -0500
|
||||
Subject: [PATCH 4/4] drm/radeon: Bump version for CIK DCE tiling fix
|
||||
|
||||
Note when CIK DCE tiling was fixed.
|
||||
|
||||
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
||||
---
|
||||
drivers/gpu/drm/radeon/radeon_drv.c | 3 ++-
|
||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
index 1958b36a..db39ea3 100644
|
||||
--- a/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
@@ -77,9 +77,10 @@
|
||||
* 2.33.0 - Add SI tiling mode array query
|
||||
* 2.34.0 - Add CIK tiling mode array query
|
||||
* 2.35.0 - Add CIK macrotile mode array query
|
||||
+ * 2.36.0 - Fix CIK DCE tiling setup
|
||||
*/
|
||||
#define KMS_DRIVER_MAJOR 2
|
||||
-#define KMS_DRIVER_MINOR 35
|
||||
+#define KMS_DRIVER_MINOR 36
|
||||
#define KMS_DRIVER_PATCHLEVEL 0
|
||||
int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags);
|
||||
int radeon_driver_unload_kms(struct drm_device *dev);
|
||||
--
|
||||
1.8.3.2
|
||||
|
Loading…
x
Reference in New Issue
Block a user