|
Takashi Iwai |
a6e21b |
From c6dbab46324b1742b50dc2fb5c1fee2c28129439 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
a6e21b |
From: Geert Uytterhoeven <geert+renesas@glider.be>
|
|
Takashi Iwai |
a6e21b |
Date: Tue, 30 Jul 2024 17:58:12 +0200
|
|
Takashi Iwai |
a6e21b |
Subject: [PATCH] drm/radeon/r100: Handle unknown family in r100_cp_init_microcode()
|
|
Takashi Iwai |
a6e21b |
Mime-version: 1.0
|
|
Takashi Iwai |
a6e21b |
Content-type: text/plain; charset=UTF-8
|
|
Takashi Iwai |
a6e21b |
Content-transfer-encoding: 8bit
|
|
Takashi Iwai |
a6e21b |
Git-commit: c6dbab46324b1742b50dc2fb5c1fee2c28129439
|
|
Takashi Iwai |
a6e21b |
Patch-mainline: v6.12-rc1
|
|
Takashi Iwai |
a6e21b |
References: stable-fixes
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
With -Werror:
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
In function ‘r100_cp_init_microcode’,
|
|
Takashi Iwai |
a6e21b |
inlined from ‘r100_cp_init’ at drivers/gpu/drm/radeon/r100.c:1136:7:
|
|
Takashi Iwai |
a6e21b |
include/linux/printk.h:465:44: error: ‘%s’ directive argument is null [-Werror=format-overflow=]
|
|
Takashi Iwai |
a6e21b |
465 | #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__)
|
|
Takashi Iwai |
a6e21b |
| ^
|
|
Takashi Iwai |
a6e21b |
include/linux/printk.h:437:17: note: in definition of macro ‘printk_index_wrap’
|
|
Takashi Iwai |
a6e21b |
437 | _p_func(_fmt,
|
|
Takashi Iwai |
a6e21b |
| ^~~~~~~
|
|
Takashi Iwai |
a6e21b |
include/linux/printk.h:508:9: note: in expansion of macro ‘printk’
|
|
Takashi Iwai |
a6e21b |
508 | printk(KERN_ERR pr_fmt(fmt),
|
|
Takashi Iwai |
a6e21b |
| ^~~~~~
|
|
Takashi Iwai |
a6e21b |
drivers/gpu/drm/radeon/r100.c:1062:17: note: in expansion of macro ‘pr_err’
|
|
Takashi Iwai |
a6e21b |
1062 | pr_err("radeon_cp: Failed to load firmware \"%s\"\n", fw_name);
|
|
Takashi Iwai |
a6e21b |
| ^~~~~~
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
Fix this by converting the if/else if/... construct into a proper
|
|
Takashi Iwai |
a6e21b |
switch() statement with a default to handle the error case.
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
As a bonus, the generated code is ca. 100 bytes smaller (with gcc 11.4.0
|
|
Takashi Iwai |
a6e21b |
targeting arm32).
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
|
|
Takashi Iwai |
a6e21b |
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
|
|
Takashi Iwai |
a6e21b |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
drivers/gpu/drm/radeon/r100.c | 70 ++++++++++++++++++++++
|
|
Takashi Iwai |
a6e21b |
1 file changed, 45 insertions(+), 25 deletions(-)
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
diff
|
|
Takashi Iwai |
a6e21b |
index d7d7d23bf9a1..80703417d8a1 100644
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
@@ -1016,45 +1016,65 @@ static int r100_cp_init_microcode(struct radeon_device *rdev)
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
DRM_DEBUG_KMS("\n");
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
- if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RS200)) {
|
|
Takashi Iwai |
a6e21b |
+ switch (rdev->family) {
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R100:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV100:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV200:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS100:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS200:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading R100 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_R100;
|
|
Takashi Iwai |
a6e21b |
- } else if ((rdev->family == CHIP_R200) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV250) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV280) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RS300)) {
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R200:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV250:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV280:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS300:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading R200 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_R200;
|
|
Takashi Iwai |
a6e21b |
- } else if ((rdev->family == CHIP_R300) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_R350) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV350) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV380) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RS400) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RS480)) {
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R300:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R350:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV350:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV380:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS400:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS480:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading R300 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_R300;
|
|
Takashi Iwai |
a6e21b |
- } else if ((rdev->family == CHIP_R420) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_R423) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV410)) {
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R420:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R423:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV410:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading R400 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_R420;
|
|
Takashi Iwai |
a6e21b |
- } else if ((rdev->family == CHIP_RS690) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RS740)) {
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS690:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS740:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading RS690/RS740 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_RS690;
|
|
Takashi Iwai |
a6e21b |
- } else if (rdev->family == CHIP_RS600) {
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RS600:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading RS600 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_RS600;
|
|
Takashi Iwai |
a6e21b |
- } else if ((rdev->family == CHIP_RV515) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_R520) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV530) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_R580) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV560) ||
|
|
Takashi Iwai |
a6e21b |
- (rdev->family == CHIP_RV570)) {
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV515:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R520:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV530:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_R580:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV560:
|
|
Takashi Iwai |
a6e21b |
+ case CHIP_RV570:
|
|
Takashi Iwai |
a6e21b |
DRM_INFO("Loading R500 Microcode\n");
|
|
Takashi Iwai |
a6e21b |
fw_name = FIRMWARE_R520;
|
|
Takashi Iwai |
a6e21b |
+ break;
|
|
Takashi Iwai |
a6e21b |
+
|
|
Takashi Iwai |
a6e21b |
+ default:
|
|
Takashi Iwai |
a6e21b |
+ DRM_ERROR("Unsupported Radeon family %u\n", rdev->family);
|
|
Takashi Iwai |
a6e21b |
+ return -EINVAL;
|
|
Takashi Iwai |
a6e21b |
}
|
|
Takashi Iwai |
a6e21b |
|
|
Takashi Iwai |
a6e21b |
err = request_firmware(&rdev->me_fw, fw_name, rdev->dev);
|
|
Takashi Iwai |
a6e21b |
--
|
|
Takashi Iwai |
a6e21b |
2.43.0
|
|
Takashi Iwai |
a6e21b |
|