Skip to content

Commit 75c151c

Browse files
committed
accel/amdxdna: Use a different name for latest firmware
Using legacy driver with latest firmware causes a power off issue. Fix this by assigning a different filename (npu_7.sbin) to the latest firmware. The driver attempts to load the latest firmware first and falls back to the previous firmware version if loading fails. Closes: https://gitlab.freedesktop.org/drm/amd/-/issues/5009 Fixes: f1eac46 ("accel/amdxdna: Update firmware version check for latest firmware") Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org> Signed-off-by: Lizhi Hou <lizhi.hou@amd.com> Link: https://patch.msgid.link/20260225204752.2711734-1-lizhi.hou@amd.com
1 parent c601fd5 commit 75c151c

6 files changed

Lines changed: 26 additions & 5 deletions

File tree

drivers/accel/amdxdna/aie2_pci.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,11 @@ static int aie2_max_col = XRS_MAX_COL;
3232
module_param(aie2_max_col, uint, 0600);
3333
MODULE_PARM_DESC(aie2_max_col, "Maximum column could be used");
3434

35+
static char *npu_fw[] = {
36+
"npu_7.sbin",
37+
"npu.sbin"
38+
};
39+
3540
/*
3641
* The management mailbox channel is allocated by firmware.
3742
* The related register and ring buffer information is on SRAM BAR.
@@ -489,6 +494,7 @@ static int aie2_init(struct amdxdna_dev *xdna)
489494
struct psp_config psp_conf;
490495
const struct firmware *fw;
491496
unsigned long bars = 0;
497+
char *fw_full_path;
492498
int i, nvec, ret;
493499

494500
if (!hypervisor_is_type(X86_HYPER_NATIVE)) {
@@ -503,7 +509,19 @@ static int aie2_init(struct amdxdna_dev *xdna)
503509
ndev->priv = xdna->dev_info->dev_priv;
504510
ndev->xdna = xdna;
505511

506-
ret = request_firmware(&fw, ndev->priv->fw_path, &pdev->dev);
512+
for (i = 0; i < ARRAY_SIZE(npu_fw); i++) {
513+
fw_full_path = kasprintf(GFP_KERNEL, "%s%s", ndev->priv->fw_path, npu_fw[i]);
514+
if (!fw_full_path)
515+
return -ENOMEM;
516+
517+
ret = firmware_request_nowarn(&fw, fw_full_path, &pdev->dev);
518+
kfree(fw_full_path);
519+
if (!ret) {
520+
XDNA_INFO(xdna, "Load firmware %s%s", ndev->priv->fw_path, npu_fw[i]);
521+
break;
522+
}
523+
}
524+
507525
if (ret) {
508526
XDNA_ERR(xdna, "failed to request_firmware %s, ret %d",
509527
ndev->priv->fw_path, ret);

drivers/accel/amdxdna/amdxdna_pci_drv.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ MODULE_FIRMWARE("amdnpu/1502_00/npu.sbin");
2323
MODULE_FIRMWARE("amdnpu/17f0_10/npu.sbin");
2424
MODULE_FIRMWARE("amdnpu/17f0_11/npu.sbin");
2525
MODULE_FIRMWARE("amdnpu/17f0_20/npu.sbin");
26+
MODULE_FIRMWARE("amdnpu/1502_00/npu_7.sbin");
27+
MODULE_FIRMWARE("amdnpu/17f0_10/npu_7.sbin");
28+
MODULE_FIRMWARE("amdnpu/17f0_11/npu_7.sbin");
2629

2730
/*
2831
* 0.0: Initial version

drivers/accel/amdxdna/npu1_regs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ static const struct aie2_fw_feature_tbl npu1_fw_feature_table[] = {
7272
};
7373

7474
static const struct amdxdna_dev_priv npu1_dev_priv = {
75-
.fw_path = "amdnpu/1502_00/npu.sbin",
75+
.fw_path = "amdnpu/1502_00/",
7676
.rt_config = npu1_default_rt_cfg,
7777
.dpm_clk_tbl = npu1_dpm_clk_table,
7878
.fw_feature_tbl = npu1_fw_feature_table,

drivers/accel/amdxdna/npu4_regs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ const struct aie2_fw_feature_tbl npu4_fw_feature_table[] = {
9898
};
9999

100100
static const struct amdxdna_dev_priv npu4_dev_priv = {
101-
.fw_path = "amdnpu/17f0_10/npu.sbin",
101+
.fw_path = "amdnpu/17f0_10/",
102102
.rt_config = npu4_default_rt_cfg,
103103
.dpm_clk_tbl = npu4_dpm_clk_table,
104104
.fw_feature_tbl = npu4_fw_feature_table,

drivers/accel/amdxdna/npu5_regs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
#define NPU5_SRAM_BAR_BASE MMNPU_APERTURE1_BASE
6464

6565
static const struct amdxdna_dev_priv npu5_dev_priv = {
66-
.fw_path = "amdnpu/17f0_11/npu.sbin",
66+
.fw_path = "amdnpu/17f0_11/",
6767
.rt_config = npu4_default_rt_cfg,
6868
.dpm_clk_tbl = npu4_dpm_clk_table,
6969
.fw_feature_tbl = npu4_fw_feature_table,

drivers/accel/amdxdna/npu6_regs.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@
6363
#define NPU6_SRAM_BAR_BASE MMNPU_APERTURE1_BASE
6464

6565
static const struct amdxdna_dev_priv npu6_dev_priv = {
66-
.fw_path = "amdnpu/17f0_10/npu.sbin",
66+
.fw_path = "amdnpu/17f0_10/",
6767
.rt_config = npu4_default_rt_cfg,
6868
.dpm_clk_tbl = npu4_dpm_clk_table,
6969
.fw_feature_tbl = npu4_fw_feature_table,

0 commit comments

Comments
 (0)