* [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.