All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2)
@ 2014-04-11 15:21 Alex Deucher
  2014-04-11 15:21 ` [PATCH 2/3] drm/radeon: add support for newer mc ucode on CI (v2) Alex Deucher
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Alex Deucher @ 2014-04-11 15:21 UTC (permalink / raw)
  To: dri-devel, deathsimple; +Cc: Alex Deucher, stable

May fix stability issues with some newer cards.

v2: print out mc firmware version used and size

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/radeon/radeon_ucode.h |  3 +++
 drivers/gpu/drm/radeon/si.c           | 35 ++++++++++++++++++++++-------------
 2 files changed, 25 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_ucode.h b/drivers/gpu/drm/radeon/radeon_ucode.h
index a77cd27..f415548 100644
--- a/drivers/gpu/drm/radeon/radeon_ucode.h
+++ b/drivers/gpu/drm/radeon/radeon_ucode.h
@@ -57,6 +57,9 @@
 #define BTC_MC_UCODE_SIZE            6024
 #define CAYMAN_MC_UCODE_SIZE         6037
 #define SI_MC_UCODE_SIZE             7769
+#define TAHITI_MC_UCODE_SIZE         7808
+#define PITCAIRN_MC_UCODE_SIZE       7775
+#define VERDE_MC_UCODE_SIZE          7875
 #define OLAND_MC_UCODE_SIZE          7863
 #define CIK_MC_UCODE_SIZE            7866
 #define HAWAII_MC_UCODE_SIZE         7933
diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
index d589475..86f8c9c 100644
--- a/drivers/gpu/drm/radeon/si.c
+++ b/drivers/gpu/drm/radeon/si.c
@@ -39,30 +39,35 @@ MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
 MODULE_FIRMWARE("radeon/TAHITI_me.bin");
 MODULE_FIRMWARE("radeon/TAHITI_ce.bin");
 MODULE_FIRMWARE("radeon/TAHITI_mc.bin");
+MODULE_FIRMWARE("radeon/TAHITI_mc2.bin");
 MODULE_FIRMWARE("radeon/TAHITI_rlc.bin");
 MODULE_FIRMWARE("radeon/TAHITI_smc.bin");
 MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin");
 MODULE_FIRMWARE("radeon/PITCAIRN_me.bin");
 MODULE_FIRMWARE("radeon/PITCAIRN_ce.bin");
 MODULE_FIRMWARE("radeon/PITCAIRN_mc.bin");
+MODULE_FIRMWARE("radeon/PITCAIRN_mc2.bin");
 MODULE_FIRMWARE("radeon/PITCAIRN_rlc.bin");
 MODULE_FIRMWARE("radeon/PITCAIRN_smc.bin");
 MODULE_FIRMWARE("radeon/VERDE_pfp.bin");
 MODULE_FIRMWARE("radeon/VERDE_me.bin");
 MODULE_FIRMWARE("radeon/VERDE_ce.bin");
 MODULE_FIRMWARE("radeon/VERDE_mc.bin");
+MODULE_FIRMWARE("radeon/VERDE_mc2.bin");
 MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
 MODULE_FIRMWARE("radeon/VERDE_smc.bin");
 MODULE_FIRMWARE("radeon/OLAND_pfp.bin");
 MODULE_FIRMWARE("radeon/OLAND_me.bin");
 MODULE_FIRMWARE("radeon/OLAND_ce.bin");
 MODULE_FIRMWARE("radeon/OLAND_mc.bin");
+MODULE_FIRMWARE("radeon/OLAND_mc2.bin");
 MODULE_FIRMWARE("radeon/OLAND_rlc.bin");
 MODULE_FIRMWARE("radeon/OLAND_smc.bin");
 MODULE_FIRMWARE("radeon/HAINAN_pfp.bin");
 MODULE_FIRMWARE("radeon/HAINAN_me.bin");
 MODULE_FIRMWARE("radeon/HAINAN_ce.bin");
 MODULE_FIRMWARE("radeon/HAINAN_mc.bin");
+MODULE_FIRMWARE("radeon/HAINAN_mc2.bin");
 MODULE_FIRMWARE("radeon/HAINAN_rlc.bin");
 MODULE_FIRMWARE("radeon/HAINAN_smc.bin");
 
@@ -1467,7 +1472,7 @@ int si_mc_load_microcode(struct radeon_device *rdev)
 	const __be32 *fw_data;
 	u32 running, blackout = 0;
 	u32 *io_mc_regs;
-	int i, ucode_size, regs_size;
+	int i, regs_size, ucode_size = rdev->mc_fw->size / 4;
 
 	if (!rdev->mc_fw)
 		return -EINVAL;
@@ -1475,28 +1480,23 @@ int si_mc_load_microcode(struct radeon_device *rdev)
 	switch (rdev->family) {
 	case CHIP_TAHITI:
 		io_mc_regs = (u32 *)&tahiti_io_mc_regs;
-		ucode_size = SI_MC_UCODE_SIZE;
 		regs_size = TAHITI_IO_MC_REGS_SIZE;
 		break;
 	case CHIP_PITCAIRN:
 		io_mc_regs = (u32 *)&pitcairn_io_mc_regs;
-		ucode_size = SI_MC_UCODE_SIZE;
 		regs_size = TAHITI_IO_MC_REGS_SIZE;
 		break;
 	case CHIP_VERDE:
 	default:
 		io_mc_regs = (u32 *)&verde_io_mc_regs;
-		ucode_size = SI_MC_UCODE_SIZE;
 		regs_size = TAHITI_IO_MC_REGS_SIZE;
 		break;
 	case CHIP_OLAND:
 		io_mc_regs = (u32 *)&oland_io_mc_regs;
-		ucode_size = OLAND_MC_UCODE_SIZE;
 		regs_size = TAHITI_IO_MC_REGS_SIZE;
 		break;
 	case CHIP_HAINAN:
 		io_mc_regs = (u32 *)&hainan_io_mc_regs;
-		ucode_size = OLAND_MC_UCODE_SIZE;
 		regs_size = TAHITI_IO_MC_REGS_SIZE;
 		break;
 	}
@@ -1552,7 +1552,7 @@ static int si_init_microcode(struct radeon_device *rdev)
 	const char *chip_name;
 	const char *rlc_chip_name;
 	size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
-	size_t smc_req_size;
+	size_t smc_req_size, mc2_req_size;
 	char fw_name[30];
 	int err;
 
@@ -1567,6 +1567,7 @@ static int si_init_microcode(struct radeon_device *rdev)
 		ce_req_size = SI_CE_UCODE_SIZE * 4;
 		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
 		mc_req_size = SI_MC_UCODE_SIZE * 4;
+		mc2_req_size = TAHITI_MC_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(TAHITI_SMC_UCODE_SIZE, 4);
 		break;
 	case CHIP_PITCAIRN:
@@ -1577,6 +1578,7 @@ static int si_init_microcode(struct radeon_device *rdev)
 		ce_req_size = SI_CE_UCODE_SIZE * 4;
 		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
 		mc_req_size = SI_MC_UCODE_SIZE * 4;
+		mc2_req_size = PITCAIRN_MC_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(PITCAIRN_SMC_UCODE_SIZE, 4);
 		break;
 	case CHIP_VERDE:
@@ -1587,6 +1589,7 @@ static int si_init_microcode(struct radeon_device *rdev)
 		ce_req_size = SI_CE_UCODE_SIZE * 4;
 		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
 		mc_req_size = SI_MC_UCODE_SIZE * 4;
+		mc2_req_size = VERDE_MC_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(VERDE_SMC_UCODE_SIZE, 4);
 		break;
 	case CHIP_OLAND:
@@ -1596,7 +1599,7 @@ static int si_init_microcode(struct radeon_device *rdev)
 		me_req_size = SI_PM4_UCODE_SIZE * 4;
 		ce_req_size = SI_CE_UCODE_SIZE * 4;
 		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
-		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
+		mc_req_size = mc2_req_size = OLAND_MC_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(OLAND_SMC_UCODE_SIZE, 4);
 		break;
 	case CHIP_HAINAN:
@@ -1606,7 +1609,7 @@ static int si_init_microcode(struct radeon_device *rdev)
 		me_req_size = SI_PM4_UCODE_SIZE * 4;
 		ce_req_size = SI_CE_UCODE_SIZE * 4;
 		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
-		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
+		mc_req_size = mc2_req_size = OLAND_MC_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(HAINAN_SMC_UCODE_SIZE, 4);
 		break;
 	default: BUG();
@@ -1659,16 +1662,22 @@ static int si_init_microcode(struct radeon_device *rdev)
 		err = -EINVAL;
 	}
 
-	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
+	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc2.bin", chip_name);
 	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
-	if (err)
-		goto out;
-	if (rdev->mc_fw->size != mc_req_size) {
+	if (err) {
+		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
+		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
+		if (err)
+			goto out;
+	}
+	if ((rdev->mc_fw->size != mc_req_size) &&
+	    (rdev->mc_fw->size != mc2_req_size)) {
 		printk(KERN_ERR
 		       "si_mc: Bogus length %zu in firmware \"%s\"\n",
 		       rdev->mc_fw->size, fw_name);
 		err = -EINVAL;
 	}
+	DRM_INFO("%s: %zu bytes\n", fw_name, rdev->mc_fw->size);
 
 	snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
 	err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] drm/radeon: add support for newer mc ucode on CI (v2)
  2014-04-11 15:21 [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Alex Deucher
@ 2014-04-11 15:21 ` Alex Deucher
  2014-04-11 15:21 ` [PATCH 3/3] drm/radeon: re-enable mclk dpm on R7 260X asics Alex Deucher
  2014-04-11 15:26 ` [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Christian König
  2 siblings, 0 replies; 4+ messages in thread
From: Alex Deucher @ 2014-04-11 15:21 UTC (permalink / raw)
  To: dri-devel, deathsimple; +Cc: Alex Deucher, stable

Fixes mclk stability on certain asics.

v2: print out mc firmware version used and size

bug:
https://bugs.freedesktop.org/show_bug.cgi?id=75992

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/radeon/cik.c          | 26 +++++++++++++++++---------
 drivers/gpu/drm/radeon/radeon_ucode.h |  4 +++-
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/radeon/cik.c b/drivers/gpu/drm/radeon/cik.c
index 0ae991d..469bd6f 100644
--- a/drivers/gpu/drm/radeon/cik.c
+++ b/drivers/gpu/drm/radeon/cik.c
@@ -38,6 +38,7 @@ MODULE_FIRMWARE("radeon/BONAIRE_me.bin");
 MODULE_FIRMWARE("radeon/BONAIRE_ce.bin");
 MODULE_FIRMWARE("radeon/BONAIRE_mec.bin");
 MODULE_FIRMWARE("radeon/BONAIRE_mc.bin");
+MODULE_FIRMWARE("radeon/BONAIRE_mc2.bin");
 MODULE_FIRMWARE("radeon/BONAIRE_rlc.bin");
 MODULE_FIRMWARE("radeon/BONAIRE_sdma.bin");
 MODULE_FIRMWARE("radeon/BONAIRE_smc.bin");
@@ -46,6 +47,7 @@ MODULE_FIRMWARE("radeon/HAWAII_me.bin");
 MODULE_FIRMWARE("radeon/HAWAII_ce.bin");
 MODULE_FIRMWARE("radeon/HAWAII_mec.bin");
 MODULE_FIRMWARE("radeon/HAWAII_mc.bin");
+MODULE_FIRMWARE("radeon/HAWAII_mc2.bin");
 MODULE_FIRMWARE("radeon/HAWAII_rlc.bin");
 MODULE_FIRMWARE("radeon/HAWAII_sdma.bin");
 MODULE_FIRMWARE("radeon/HAWAII_smc.bin");
@@ -1703,7 +1705,7 @@ int ci_mc_load_microcode(struct radeon_device *rdev)
 	const __be32 *fw_data;
 	u32 running, blackout = 0;
 	u32 *io_mc_regs;
-	int i, ucode_size, regs_size;
+	int i, regs_size, ucode_size = rdev->mc_fw->size / 4;
 
 	if (!rdev->mc_fw)
 		return -EINVAL;
@@ -1711,12 +1713,10 @@ int ci_mc_load_microcode(struct radeon_device *rdev)
 	switch (rdev->family) {
 	case CHIP_BONAIRE:
 		io_mc_regs = (u32 *)&bonaire_io_mc_regs;
-		ucode_size = CIK_MC_UCODE_SIZE;
 		regs_size = BONAIRE_IO_MC_REGS_SIZE;
 		break;
 	case CHIP_HAWAII:
 		io_mc_regs = (u32 *)&hawaii_io_mc_regs;
-		ucode_size = HAWAII_MC_UCODE_SIZE;
 		regs_size = HAWAII_IO_MC_REGS_SIZE;
 		break;
 	default:
@@ -1783,7 +1783,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
 	const char *chip_name;
 	size_t pfp_req_size, me_req_size, ce_req_size,
 		mec_req_size, rlc_req_size, mc_req_size = 0,
-		sdma_req_size, smc_req_size = 0;
+		sdma_req_size, smc_req_size = 0, mc2_req_size = 0;
 	char fw_name[30];
 	int err;
 
@@ -1797,7 +1797,8 @@ static int cik_init_microcode(struct radeon_device *rdev)
 		ce_req_size = CIK_CE_UCODE_SIZE * 4;
 		mec_req_size = CIK_MEC_UCODE_SIZE * 4;
 		rlc_req_size = BONAIRE_RLC_UCODE_SIZE * 4;
-		mc_req_size = CIK_MC_UCODE_SIZE * 4;
+		mc_req_size = BONAIRE_MC_UCODE_SIZE * 4;
+		mc2_req_size = BONAIRE_MC2_UCODE_SIZE * 4;
 		sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(BONAIRE_SMC_UCODE_SIZE, 4);
 		break;
@@ -1809,6 +1810,7 @@ static int cik_init_microcode(struct radeon_device *rdev)
 		mec_req_size = CIK_MEC_UCODE_SIZE * 4;
 		rlc_req_size = BONAIRE_RLC_UCODE_SIZE * 4;
 		mc_req_size = HAWAII_MC_UCODE_SIZE * 4;
+		mc2_req_size = HAWAII_MC2_UCODE_SIZE * 4;
 		sdma_req_size = CIK_SDMA_UCODE_SIZE * 4;
 		smc_req_size = ALIGN(HAWAII_SMC_UCODE_SIZE, 4);
 		break;
@@ -1904,16 +1906,22 @@ static int cik_init_microcode(struct radeon_device *rdev)
 
 	/* No SMC, MC ucode on APUs */
 	if (!(rdev->flags & RADEON_IS_IGP)) {
-		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
+		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc2.bin", chip_name);
 		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
-		if (err)
-			goto out;
-		if (rdev->mc_fw->size != mc_req_size) {
+		if (err) {
+			snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
+			err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
+			if (err)
+				goto out;
+		}
+		if ((rdev->mc_fw->size != mc_req_size) &&
+		    (rdev->mc_fw->size != mc2_req_size)){
 			printk(KERN_ERR
 			       "cik_mc: Bogus length %zu in firmware \"%s\"\n",
 			       rdev->mc_fw->size, fw_name);
 			err = -EINVAL;
 		}
+		DRM_INFO("%s: %zu bytes\n", fw_name, rdev->mc_fw->size);
 
 		snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
 		err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);
diff --git a/drivers/gpu/drm/radeon/radeon_ucode.h b/drivers/gpu/drm/radeon/radeon_ucode.h
index f415548..58d1293 100644
--- a/drivers/gpu/drm/radeon/radeon_ucode.h
+++ b/drivers/gpu/drm/radeon/radeon_ucode.h
@@ -61,8 +61,10 @@
 #define PITCAIRN_MC_UCODE_SIZE       7775
 #define VERDE_MC_UCODE_SIZE          7875
 #define OLAND_MC_UCODE_SIZE          7863
-#define CIK_MC_UCODE_SIZE            7866
+#define BONAIRE_MC_UCODE_SIZE        7866
+#define BONAIRE_MC2_UCODE_SIZE       7948
 #define HAWAII_MC_UCODE_SIZE         7933
+#define HAWAII_MC2_UCODE_SIZE        8091
 
 /* SDMA */
 #define CIK_SDMA_UCODE_SIZE          1050
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] drm/radeon: re-enable mclk dpm on R7 260X asics
  2014-04-11 15:21 [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Alex Deucher
  2014-04-11 15:21 ` [PATCH 2/3] drm/radeon: add support for newer mc ucode on CI (v2) Alex Deucher
@ 2014-04-11 15:21 ` Alex Deucher
  2014-04-11 15:26 ` [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Christian König
  2 siblings, 0 replies; 4+ messages in thread
From: Alex Deucher @ 2014-04-11 15:21 UTC (permalink / raw)
  To: dri-devel, deathsimple; +Cc: Alex Deucher, stable

If the new mc ucode is available.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
---
 drivers/gpu/drm/radeon/ci_dpm.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/radeon/ci_dpm.c b/drivers/gpu/drm/radeon/ci_dpm.c
index 18e91ee..10dae41 100644
--- a/drivers/gpu/drm/radeon/ci_dpm.c
+++ b/drivers/gpu/drm/radeon/ci_dpm.c
@@ -21,8 +21,10 @@
  *
  */
 
+#include <linux/firmware.h>
 #include "drmP.h"
 #include "radeon.h"
+#include "radeon_ucode.h"
 #include "cikd.h"
 #include "r600_dpm.h"
 #include "ci_dpm.h"
@@ -5147,9 +5149,11 @@ int ci_dpm_init(struct radeon_device *rdev)
 	pi->mclk_dpm_key_disabled = 0;
 	pi->pcie_dpm_key_disabled = 0;
 
-	/* mclk dpm is unstable on some R7 260X cards */
-	if (rdev->pdev->device == 0x6658)
+	/* mclk dpm is unstable on some R7 260X cards with the old mc ucode */
+	if ((rdev->pdev->device == 0x6658) &&
+	    (rdev->mc_fw->size == (BONAIRE_MC_UCODE_SIZE * 4))) {
 		pi->mclk_dpm_key_disabled = 1;
+	}
 
 	pi->caps_sclk_ds = true;
 
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2)
  2014-04-11 15:21 [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Alex Deucher
  2014-04-11 15:21 ` [PATCH 2/3] drm/radeon: add support for newer mc ucode on CI (v2) Alex Deucher
  2014-04-11 15:21 ` [PATCH 3/3] drm/radeon: re-enable mclk dpm on R7 260X asics Alex Deucher
@ 2014-04-11 15:26 ` Christian König
  2 siblings, 0 replies; 4+ messages in thread
From: Christian König @ 2014-04-11 15:26 UTC (permalink / raw)
  To: Alex Deucher, dri-devel; +Cc: Alex Deucher, stable

Am 11.04.2014 17:21, schrieb Alex Deucher:
> May fix stability issues with some newer cards.
>
> v2: print out mc firmware version used and size
>
> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
> Cc: stable@vger.kernel.org
All three added to my drm-fixes-3.15 queue.

Christian.

> ---
>   drivers/gpu/drm/radeon/radeon_ucode.h |  3 +++
>   drivers/gpu/drm/radeon/si.c           | 35 ++++++++++++++++++++++-------------
>   2 files changed, 25 insertions(+), 13 deletions(-)
>
> diff --git a/drivers/gpu/drm/radeon/radeon_ucode.h b/drivers/gpu/drm/radeon/radeon_ucode.h
> index a77cd27..f415548 100644
> --- a/drivers/gpu/drm/radeon/radeon_ucode.h
> +++ b/drivers/gpu/drm/radeon/radeon_ucode.h
> @@ -57,6 +57,9 @@
>   #define BTC_MC_UCODE_SIZE            6024
>   #define CAYMAN_MC_UCODE_SIZE         6037
>   #define SI_MC_UCODE_SIZE             7769
> +#define TAHITI_MC_UCODE_SIZE         7808
> +#define PITCAIRN_MC_UCODE_SIZE       7775
> +#define VERDE_MC_UCODE_SIZE          7875
>   #define OLAND_MC_UCODE_SIZE          7863
>   #define CIK_MC_UCODE_SIZE            7866
>   #define HAWAII_MC_UCODE_SIZE         7933
> diff --git a/drivers/gpu/drm/radeon/si.c b/drivers/gpu/drm/radeon/si.c
> index d589475..86f8c9c 100644
> --- a/drivers/gpu/drm/radeon/si.c
> +++ b/drivers/gpu/drm/radeon/si.c
> @@ -39,30 +39,35 @@ MODULE_FIRMWARE("radeon/TAHITI_pfp.bin");
>   MODULE_FIRMWARE("radeon/TAHITI_me.bin");
>   MODULE_FIRMWARE("radeon/TAHITI_ce.bin");
>   MODULE_FIRMWARE("radeon/TAHITI_mc.bin");
> +MODULE_FIRMWARE("radeon/TAHITI_mc2.bin");
>   MODULE_FIRMWARE("radeon/TAHITI_rlc.bin");
>   MODULE_FIRMWARE("radeon/TAHITI_smc.bin");
>   MODULE_FIRMWARE("radeon/PITCAIRN_pfp.bin");
>   MODULE_FIRMWARE("radeon/PITCAIRN_me.bin");
>   MODULE_FIRMWARE("radeon/PITCAIRN_ce.bin");
>   MODULE_FIRMWARE("radeon/PITCAIRN_mc.bin");
> +MODULE_FIRMWARE("radeon/PITCAIRN_mc2.bin");
>   MODULE_FIRMWARE("radeon/PITCAIRN_rlc.bin");
>   MODULE_FIRMWARE("radeon/PITCAIRN_smc.bin");
>   MODULE_FIRMWARE("radeon/VERDE_pfp.bin");
>   MODULE_FIRMWARE("radeon/VERDE_me.bin");
>   MODULE_FIRMWARE("radeon/VERDE_ce.bin");
>   MODULE_FIRMWARE("radeon/VERDE_mc.bin");
> +MODULE_FIRMWARE("radeon/VERDE_mc2.bin");
>   MODULE_FIRMWARE("radeon/VERDE_rlc.bin");
>   MODULE_FIRMWARE("radeon/VERDE_smc.bin");
>   MODULE_FIRMWARE("radeon/OLAND_pfp.bin");
>   MODULE_FIRMWARE("radeon/OLAND_me.bin");
>   MODULE_FIRMWARE("radeon/OLAND_ce.bin");
>   MODULE_FIRMWARE("radeon/OLAND_mc.bin");
> +MODULE_FIRMWARE("radeon/OLAND_mc2.bin");
>   MODULE_FIRMWARE("radeon/OLAND_rlc.bin");
>   MODULE_FIRMWARE("radeon/OLAND_smc.bin");
>   MODULE_FIRMWARE("radeon/HAINAN_pfp.bin");
>   MODULE_FIRMWARE("radeon/HAINAN_me.bin");
>   MODULE_FIRMWARE("radeon/HAINAN_ce.bin");
>   MODULE_FIRMWARE("radeon/HAINAN_mc.bin");
> +MODULE_FIRMWARE("radeon/HAINAN_mc2.bin");
>   MODULE_FIRMWARE("radeon/HAINAN_rlc.bin");
>   MODULE_FIRMWARE("radeon/HAINAN_smc.bin");
>   
> @@ -1467,7 +1472,7 @@ int si_mc_load_microcode(struct radeon_device *rdev)
>   	const __be32 *fw_data;
>   	u32 running, blackout = 0;
>   	u32 *io_mc_regs;
> -	int i, ucode_size, regs_size;
> +	int i, regs_size, ucode_size = rdev->mc_fw->size / 4;
>   
>   	if (!rdev->mc_fw)
>   		return -EINVAL;
> @@ -1475,28 +1480,23 @@ int si_mc_load_microcode(struct radeon_device *rdev)
>   	switch (rdev->family) {
>   	case CHIP_TAHITI:
>   		io_mc_regs = (u32 *)&tahiti_io_mc_regs;
> -		ucode_size = SI_MC_UCODE_SIZE;
>   		regs_size = TAHITI_IO_MC_REGS_SIZE;
>   		break;
>   	case CHIP_PITCAIRN:
>   		io_mc_regs = (u32 *)&pitcairn_io_mc_regs;
> -		ucode_size = SI_MC_UCODE_SIZE;
>   		regs_size = TAHITI_IO_MC_REGS_SIZE;
>   		break;
>   	case CHIP_VERDE:
>   	default:
>   		io_mc_regs = (u32 *)&verde_io_mc_regs;
> -		ucode_size = SI_MC_UCODE_SIZE;
>   		regs_size = TAHITI_IO_MC_REGS_SIZE;
>   		break;
>   	case CHIP_OLAND:
>   		io_mc_regs = (u32 *)&oland_io_mc_regs;
> -		ucode_size = OLAND_MC_UCODE_SIZE;
>   		regs_size = TAHITI_IO_MC_REGS_SIZE;
>   		break;
>   	case CHIP_HAINAN:
>   		io_mc_regs = (u32 *)&hainan_io_mc_regs;
> -		ucode_size = OLAND_MC_UCODE_SIZE;
>   		regs_size = TAHITI_IO_MC_REGS_SIZE;
>   		break;
>   	}
> @@ -1552,7 +1552,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   	const char *chip_name;
>   	const char *rlc_chip_name;
>   	size_t pfp_req_size, me_req_size, ce_req_size, rlc_req_size, mc_req_size;
> -	size_t smc_req_size;
> +	size_t smc_req_size, mc2_req_size;
>   	char fw_name[30];
>   	int err;
>   
> @@ -1567,6 +1567,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   		ce_req_size = SI_CE_UCODE_SIZE * 4;
>   		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
>   		mc_req_size = SI_MC_UCODE_SIZE * 4;
> +		mc2_req_size = TAHITI_MC_UCODE_SIZE * 4;
>   		smc_req_size = ALIGN(TAHITI_SMC_UCODE_SIZE, 4);
>   		break;
>   	case CHIP_PITCAIRN:
> @@ -1577,6 +1578,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   		ce_req_size = SI_CE_UCODE_SIZE * 4;
>   		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
>   		mc_req_size = SI_MC_UCODE_SIZE * 4;
> +		mc2_req_size = PITCAIRN_MC_UCODE_SIZE * 4;
>   		smc_req_size = ALIGN(PITCAIRN_SMC_UCODE_SIZE, 4);
>   		break;
>   	case CHIP_VERDE:
> @@ -1587,6 +1589,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   		ce_req_size = SI_CE_UCODE_SIZE * 4;
>   		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
>   		mc_req_size = SI_MC_UCODE_SIZE * 4;
> +		mc2_req_size = VERDE_MC_UCODE_SIZE * 4;
>   		smc_req_size = ALIGN(VERDE_SMC_UCODE_SIZE, 4);
>   		break;
>   	case CHIP_OLAND:
> @@ -1596,7 +1599,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   		me_req_size = SI_PM4_UCODE_SIZE * 4;
>   		ce_req_size = SI_CE_UCODE_SIZE * 4;
>   		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
> -		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
> +		mc_req_size = mc2_req_size = OLAND_MC_UCODE_SIZE * 4;
>   		smc_req_size = ALIGN(OLAND_SMC_UCODE_SIZE, 4);
>   		break;
>   	case CHIP_HAINAN:
> @@ -1606,7 +1609,7 @@ static int si_init_microcode(struct radeon_device *rdev)
>   		me_req_size = SI_PM4_UCODE_SIZE * 4;
>   		ce_req_size = SI_CE_UCODE_SIZE * 4;
>   		rlc_req_size = SI_RLC_UCODE_SIZE * 4;
> -		mc_req_size = OLAND_MC_UCODE_SIZE * 4;
> +		mc_req_size = mc2_req_size = OLAND_MC_UCODE_SIZE * 4;
>   		smc_req_size = ALIGN(HAINAN_SMC_UCODE_SIZE, 4);
>   		break;
>   	default: BUG();
> @@ -1659,16 +1662,22 @@ static int si_init_microcode(struct radeon_device *rdev)
>   		err = -EINVAL;
>   	}
>   
> -	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
> +	snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc2.bin", chip_name);
>   	err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
> -	if (err)
> -		goto out;
> -	if (rdev->mc_fw->size != mc_req_size) {
> +	if (err) {
> +		snprintf(fw_name, sizeof(fw_name), "radeon/%s_mc.bin", chip_name);
> +		err = request_firmware(&rdev->mc_fw, fw_name, rdev->dev);
> +		if (err)
> +			goto out;
> +	}
> +	if ((rdev->mc_fw->size != mc_req_size) &&
> +	    (rdev->mc_fw->size != mc2_req_size)) {
>   		printk(KERN_ERR
>   		       "si_mc: Bogus length %zu in firmware \"%s\"\n",
>   		       rdev->mc_fw->size, fw_name);
>   		err = -EINVAL;
>   	}
> +	DRM_INFO("%s: %zu bytes\n", fw_name, rdev->mc_fw->size);
>   
>   	snprintf(fw_name, sizeof(fw_name), "radeon/%s_smc.bin", chip_name);
>   	err = request_firmware(&rdev->smc_fw, fw_name, rdev->dev);

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2014-04-11 15:26 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-11 15:21 [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Alex Deucher
2014-04-11 15:21 ` [PATCH 2/3] drm/radeon: add support for newer mc ucode on CI (v2) Alex Deucher
2014-04-11 15:21 ` [PATCH 3/3] drm/radeon: re-enable mclk dpm on R7 260X asics Alex Deucher
2014-04-11 15:26 ` [PATCH 1/3] drm/radeon: add support for newer mc ucode on SI (v2) Christian König

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.