2024-02-20 20:16:48

by Cristian Ciocaltea

[permalink] [raw]
Subject: [PATCH v3 0/2] ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED

This patch series restores audio support on Valve's Steam Deck OLED model, which
broke after the recent introduction of ACP/PSP communication for IRAM/DRAM fence
register programming.

Changes in v3:
- Drop a patch file that was sent by mistake in v2

Changes in v2:
- Rebased onto next-20240219
- Added new patch introducing struct acp_quirk_entry
- Reworked v1 patch to make use of a dedicated quirk
- Link to v1:
https://lore.kernel.org/lkml/[email protected]/

Cristian Ciocaltea (2):
ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry
ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED

sound/soc/sof/amd/acp-loader.c | 2 +-
sound/soc/sof/amd/acp.c | 50 ++++++++++++++++++----------------
sound/soc/sof/amd/acp.h | 7 ++++-
sound/soc/sof/amd/vangogh.c | 9 ++++--
4 files changed, 41 insertions(+), 27 deletions(-)

--
2.43.2



2024-02-20 20:17:45

by Cristian Ciocaltea

[permalink] [raw]
Subject: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry

The signed_fw_image member of struct sof_amd_acp_desc is used to enable
signed firmware support in the driver via the acp_sof_quirk_table.

In preparation to support additional use cases of the quirk table (i.e.
adding new flags), move signed_fw_image to a new struct acp_quirk_entry
and update all references to it accordingly.

No functional changes intended.

Signed-off-by: Cristian Ciocaltea <[email protected]>
---
sound/soc/sof/amd/acp-loader.c | 2 +-
sound/soc/sof/amd/acp.c | 47 ++++++++++++++++++----------------
sound/soc/sof/amd/acp.h | 6 ++++-
sound/soc/sof/amd/vangogh.c | 9 +++++--
4 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/sound/soc/sof/amd/acp-loader.c b/sound/soc/sof/amd/acp-loader.c
index d2d21478399e..aad904839b81 100644
--- a/sound/soc/sof/amd/acp-loader.c
+++ b/sound/soc/sof/amd/acp-loader.c
@@ -173,7 +173,7 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)

adata = sdev->pdata->hw_pdata;

- if (adata->signed_fw_image)
+ if (adata->quirks && adata->quirks->signed_fw_image)
size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
else
size_fw = adata->fw_bin_size;
diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
index 9b3c26210db3..9d9197fa83ed 100644
--- a/sound/soc/sof/amd/acp.c
+++ b/sound/soc/sof/amd/acp.c
@@ -20,12 +20,14 @@
#include "acp.h"
#include "acp-dsp-offset.h"

-#define SECURED_FIRMWARE 1
-
static bool enable_fw_debug;
module_param(enable_fw_debug, bool, 0444);
MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");

+static struct acp_quirk_entry quirk_valve_galileo = {
+ .signed_fw_image = true,
+};
+
const struct dmi_system_id acp_sof_quirk_table[] = {
{
/* Steam Deck OLED device */
@@ -33,7 +35,7 @@ const struct dmi_system_id acp_sof_quirk_table[] = {
DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
},
- .driver_data = (void *)SECURED_FIRMWARE,
+ .driver_data = &quirk_valve_galileo,
},
{}
};
@@ -254,7 +256,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
}
}

- if (adata->signed_fw_image)
+ if (adata->quirks && adata->quirks->signed_fw_image)
snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_INCLUDE_HDR, ACP_SHA_HEADER);

snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr);
@@ -738,26 +740,27 @@ int amd_sof_acp_probe(struct snd_sof_dev *sdev)
sdev->debug_box.offset = sdev->host_box.offset + sdev->host_box.size;
sdev->debug_box.size = BOX_SIZE_1024;

- adata->signed_fw_image = false;
dmi_id = dmi_first_match(acp_sof_quirk_table);
- if (dmi_id && dmi_id->driver_data) {
- adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
- "sof-%s-code.bin",
- chip->name);
- if (!adata->fw_code_bin) {
- ret = -ENOMEM;
- goto free_ipc_irq;
+ if (dmi_id) {
+ adata->quirks = dmi_id->driver_data;
+
+ if (adata->quirks->signed_fw_image) {
+ adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
+ "sof-%s-code.bin",
+ chip->name);
+ if (!adata->fw_code_bin) {
+ ret = -ENOMEM;
+ goto free_ipc_irq;
+ }
+
+ adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
+ "sof-%s-data.bin",
+ chip->name);
+ if (!adata->fw_data_bin) {
+ ret = -ENOMEM;
+ goto free_ipc_irq;
+ }
}
-
- adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
- "sof-%s-data.bin",
- chip->name);
- if (!adata->fw_data_bin) {
- ret = -ENOMEM;
- goto free_ipc_irq;
- }
-
- adata->signed_fw_image = dmi_id->driver_data;
}

adata->enable_fw_debug = enable_fw_debug;
diff --git a/sound/soc/sof/amd/acp.h b/sound/soc/sof/amd/acp.h
index 947068da39b5..b648ed194b9f 100644
--- a/sound/soc/sof/amd/acp.h
+++ b/sound/soc/sof/amd/acp.h
@@ -207,6 +207,10 @@ struct sof_amd_acp_desc {
u64 sdw_acpi_dev_addr;
};

+struct acp_quirk_entry {
+ bool signed_fw_image;
+};
+
/* Common device data struct for ACP devices */
struct acp_dev_data {
struct snd_sof_dev *dev;
@@ -236,7 +240,7 @@ struct acp_dev_data {
u8 *data_buf;
dma_addr_t sram_dma_addr;
u8 *sram_data_buf;
- bool signed_fw_image;
+ struct acp_quirk_entry *quirks;
struct dma_descriptor dscr_info[ACP_MAX_DESC];
struct acp_dsp_stream stream_buf[ACP_MAX_STREAM];
struct acp_dsp_stream *dtrace_stream;
diff --git a/sound/soc/sof/amd/vangogh.c b/sound/soc/sof/amd/vangogh.c
index de15d21aa6d9..bc6ffdb5471a 100644
--- a/sound/soc/sof/amd/vangogh.c
+++ b/sound/soc/sof/amd/vangogh.c
@@ -143,6 +143,7 @@ EXPORT_SYMBOL_NS(sof_vangogh_ops, SND_SOC_SOF_AMD_COMMON);
int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
{
const struct dmi_system_id *dmi_id;
+ struct acp_quirk_entry *quirks;

/* common defaults */
memcpy(&sof_vangogh_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));
@@ -151,8 +152,12 @@ int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
sof_vangogh_ops.num_drv = ARRAY_SIZE(vangogh_sof_dai);

dmi_id = dmi_first_match(acp_sof_quirk_table);
- if (dmi_id && dmi_id->driver_data)
- sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
+ if (dmi_id) {
+ quirks = dmi_id->driver_data;
+
+ if (quirks->signed_fw_image)
+ sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
+ }

return 0;
}
--
2.43.2


2024-02-20 20:18:12

by Cristian Ciocaltea

[permalink] [raw]
Subject: [PATCH v3 2/2] ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED

The recent introduction of the ACP/PSP communication for IRAM/DRAM fence
register modification breaks the audio support on Valve's Steam Deck
OLED device.

It causes IPC timeout errors when trying to load DSP topology during
probing:

1707255557.688176 kernel: snd_sof_amd_vangogh 0000:04:00.5: ipc tx timed out for 0x30100000 (msg/reply size: 48/0)
1707255557.689035 kernel: snd_sof_amd_vangogh 0000:04:00.5: ------------[ IPC dump start ]------------
1707255557.689421 kernel: snd_sof_amd_vangogh 0000:04:00.5: dsp_msg = 0x0 dsp_ack = 0x91d14f6f host_msg = 0x1 host_ack = 0xead0f1a4 irq_stat >
1707255557.689730 kernel: snd_sof_amd_vangogh 0000:04:00.5: ------------[ IPC dump end ]------------
1707255557.690074 kernel: snd_sof_amd_vangogh 0000:04:00.5: ------------[ DSP dump start ]------------
1707255557.690376 kernel: snd_sof_amd_vangogh 0000:04:00.5: IPC timeout
1707255557.690744 kernel: snd_sof_amd_vangogh 0000:04:00.5: fw_state: SOF_FW_BOOT_COMPLETE (7)
1707255557.691037 kernel: snd_sof_amd_vangogh 0000:04:00.5: invalid header size 0xdb43fe7. FW oops is bogus
1707255557.694824 kernel: snd_sof_amd_vangogh 0000:04:00.5: unexpected fault 0x6942d3b3 trace 0x6942d3b3
1707255557.695392 kernel: snd_sof_amd_vangogh 0000:04:00.5: ------------[ DSP dump end ]------------
1707255557.695755 kernel: snd_sof_amd_vangogh 0000:04:00.5: Failed to setup widget PIPELINE.6.ACPHS1.IN
1707255557.696069 kernel: snd_sof_amd_vangogh 0000:04:00.5: error: tplg component load failed -110
1707255557.696374 kernel: snd_sof_amd_vangogh 0000:04:00.5: error: failed to load DSP topology -22
1707255557.697904 kernel: snd_sof_amd_vangogh 0000:04:00.5: ASoC: error at snd_soc_component_probe on 0000:04:00.5: -22
1707255557.698405 kernel: sof_mach nau8821-max: ASoC: failed to instantiate card -22
1707255557.701061 kernel: sof_mach nau8821-max: error -EINVAL: Failed to register card(sof-nau8821-max)
1707255557.701624 kernel: sof_mach: probe of nau8821-max failed with error -22

Introduce a new member skip_iram_dram_size_mod to struct acp_quirk_entry and
use it to skip IRAM/DRAM size modification for Vangogh Galileo device.

Fixes: 55d7bbe43346 ("ASoC: SOF: amd: Add acp-psp mailbox interface for iram-dram fence register modification")
Signed-off-by: Cristian Ciocaltea <[email protected]>
---
sound/soc/sof/amd/acp.c | 3 ++-
sound/soc/sof/amd/acp.h | 1 +
2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
index 9d9197fa83ed..be7dc1e02284 100644
--- a/sound/soc/sof/amd/acp.c
+++ b/sound/soc/sof/amd/acp.c
@@ -26,6 +26,7 @@ MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");

static struct acp_quirk_entry quirk_valve_galileo = {
.signed_fw_image = true,
+ .skip_iram_dram_size_mod = true,
};

const struct dmi_system_id acp_sof_quirk_table[] = {
@@ -280,7 +281,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
}

/* psp_send_cmd only required for vangogh platform (rev - 5) */
- if (desc->rev == 5) {
+ if (desc->rev == 5 && !(adata->quirks && adata->quirks->skip_iram_dram_size_mod)) {
/* Modify IRAM and DRAM size */
ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | IRAM_DRAM_FENCE_2);
if (ret)
diff --git a/sound/soc/sof/amd/acp.h b/sound/soc/sof/amd/acp.h
index b648ed194b9f..e229bb6b849d 100644
--- a/sound/soc/sof/amd/acp.h
+++ b/sound/soc/sof/amd/acp.h
@@ -209,6 +209,7 @@ struct sof_amd_acp_desc {

struct acp_quirk_entry {
bool signed_fw_image;
+ bool skip_iram_dram_size_mod;
};

/* Common device data struct for ACP devices */
--
2.43.2


2024-02-21 06:14:39

by Venkata Prasad Potturu

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry


On 2/21/24 01:46, Cristian Ciocaltea wrote:
> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
> signed firmware support in the driver via the acp_sof_quirk_table.
>
> In preparation to support additional use cases of the quirk table (i.e.
> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
> and update all references to it accordingly.
>
> No functional changes intended.

If there are no new flags currently being used in this patch, and also
no functional changes added, in this case this patch is really required?

Also please use scripts/get_maintainer.pl in CC while sending patches,
then only
maintainers get notified your changes.

>
> Signed-off-by: Cristian Ciocaltea <[email protected]>
> ---
> sound/soc/sof/amd/acp-loader.c | 2 +-
> sound/soc/sof/amd/acp.c | 47 ++++++++++++++++++----------------
> sound/soc/sof/amd/acp.h | 6 ++++-
> sound/soc/sof/amd/vangogh.c | 9 +++++--
> 4 files changed, 38 insertions(+), 26 deletions(-)
>
> diff --git a/sound/soc/sof/amd/acp-loader.c b/sound/soc/sof/amd/acp-loader.c
> index d2d21478399e..aad904839b81 100644
> --- a/sound/soc/sof/amd/acp-loader.c
> +++ b/sound/soc/sof/amd/acp-loader.c
> @@ -173,7 +173,7 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)
>
> adata = sdev->pdata->hw_pdata;
>
> - if (adata->signed_fw_image)
> + if (adata->quirks && adata->quirks->signed_fw_image)
> size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
> else
> size_fw = adata->fw_bin_size;
> diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
> index 9b3c26210db3..9d9197fa83ed 100644
> --- a/sound/soc/sof/amd/acp.c
> +++ b/sound/soc/sof/amd/acp.c
> @@ -20,12 +20,14 @@
> #include "acp.h"
> #include "acp-dsp-offset.h"
>
> -#define SECURED_FIRMWARE 1
> -
> static bool enable_fw_debug;
> module_param(enable_fw_debug, bool, 0444);
> MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");
>
> +static struct acp_quirk_entry quirk_valve_galileo = {
> + .signed_fw_image = true,
> +};
> +
> const struct dmi_system_id acp_sof_quirk_table[] = {
> {
> /* Steam Deck OLED device */
> @@ -33,7 +35,7 @@ const struct dmi_system_id acp_sof_quirk_table[] = {
> DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
> DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
> },
> - .driver_data = (void *)SECURED_FIRMWARE,
> + .driver_data = &quirk_valve_galileo,
> },
> {}
> };
> @@ -254,7 +256,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
> }
> }
>
> - if (adata->signed_fw_image)
> + if (adata->quirks && adata->quirks->signed_fw_image)
> snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_INCLUDE_HDR, ACP_SHA_HEADER);
>
> snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr);
> @@ -738,26 +740,27 @@ int amd_sof_acp_probe(struct snd_sof_dev *sdev)
> sdev->debug_box.offset = sdev->host_box.offset + sdev->host_box.size;
> sdev->debug_box.size = BOX_SIZE_1024;
>
> - adata->signed_fw_image = false;
> dmi_id = dmi_first_match(acp_sof_quirk_table);
> - if (dmi_id && dmi_id->driver_data) {
> - adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> - "sof-%s-code.bin",
> - chip->name);
> - if (!adata->fw_code_bin) {
> - ret = -ENOMEM;
> - goto free_ipc_irq;
> + if (dmi_id) {
> + adata->quirks = dmi_id->driver_data;
> +
> + if (adata->quirks->signed_fw_image) {
> + adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> + "sof-%s-code.bin",
> + chip->name);
> + if (!adata->fw_code_bin) {
> + ret = -ENOMEM;
> + goto free_ipc_irq;
> + }
> +
> + adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> + "sof-%s-data.bin",
> + chip->name);
> + if (!adata->fw_data_bin) {
> + ret = -ENOMEM;
> + goto free_ipc_irq;
> + }
> }
> -
> - adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> - "sof-%s-data.bin",
> - chip->name);
> - if (!adata->fw_data_bin) {
> - ret = -ENOMEM;
> - goto free_ipc_irq;
> - }
> -
> - adata->signed_fw_image = dmi_id->driver_data;
> }
>
> adata->enable_fw_debug = enable_fw_debug;
> diff --git a/sound/soc/sof/amd/acp.h b/sound/soc/sof/amd/acp.h
> index 947068da39b5..b648ed194b9f 100644
> --- a/sound/soc/sof/amd/acp.h
> +++ b/sound/soc/sof/amd/acp.h
> @@ -207,6 +207,10 @@ struct sof_amd_acp_desc {
> u64 sdw_acpi_dev_addr;
> };
>
> +struct acp_quirk_entry {
> + bool signed_fw_image;
> +};
> +
> /* Common device data struct for ACP devices */
> struct acp_dev_data {
> struct snd_sof_dev *dev;
> @@ -236,7 +240,7 @@ struct acp_dev_data {
> u8 *data_buf;
> dma_addr_t sram_dma_addr;
> u8 *sram_data_buf;
> - bool signed_fw_image;
> + struct acp_quirk_entry *quirks;
> struct dma_descriptor dscr_info[ACP_MAX_DESC];
> struct acp_dsp_stream stream_buf[ACP_MAX_STREAM];
> struct acp_dsp_stream *dtrace_stream;
> diff --git a/sound/soc/sof/amd/vangogh.c b/sound/soc/sof/amd/vangogh.c
> index de15d21aa6d9..bc6ffdb5471a 100644
> --- a/sound/soc/sof/amd/vangogh.c
> +++ b/sound/soc/sof/amd/vangogh.c
> @@ -143,6 +143,7 @@ EXPORT_SYMBOL_NS(sof_vangogh_ops, SND_SOC_SOF_AMD_COMMON);
> int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
> {
> const struct dmi_system_id *dmi_id;
> + struct acp_quirk_entry *quirks;
>
> /* common defaults */
> memcpy(&sof_vangogh_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));
> @@ -151,8 +152,12 @@ int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
> sof_vangogh_ops.num_drv = ARRAY_SIZE(vangogh_sof_dai);
>
> dmi_id = dmi_first_match(acp_sof_quirk_table);
> - if (dmi_id && dmi_id->driver_data)
> - sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
> + if (dmi_id) {
> + quirks = dmi_id->driver_data;
> +
> + if (quirks->signed_fw_image)
> + sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
> + }
>
> return 0;
> }

2024-02-21 07:30:27

by Venkata Prasad Potturu

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry


On 2/21/24 01:46, Cristian Ciocaltea wrote:
> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
> signed firmware support in the driver via the acp_sof_quirk_table.
>
> In preparation to support additional use cases of the quirk table (i.e.
> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
> and update all references to it accordingly.
>
> No functional changes intended.
If there are no new flags currently being used in this patch, and also
no functional changes added, in this case this patch is really required?

Also please use scripts/get_maintainer.pl and add authors in CC while
sending patches, then only
maintainers and code authors gets notified your changes.
>
> Signed-off-by: Cristian Ciocaltea <[email protected]>
> ---
> sound/soc/sof/amd/acp-loader.c | 2 +-
> sound/soc/sof/amd/acp.c | 47 ++++++++++++++++++----------------
> sound/soc/sof/amd/acp.h | 6 ++++-
> sound/soc/sof/amd/vangogh.c | 9 +++++--
> 4 files changed, 38 insertions(+), 26 deletions(-)
>
> diff --git a/sound/soc/sof/amd/acp-loader.c b/sound/soc/sof/amd/acp-loader.c
> index d2d21478399e..aad904839b81 100644
> --- a/sound/soc/sof/amd/acp-loader.c
> +++ b/sound/soc/sof/amd/acp-loader.c
> @@ -173,7 +173,7 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)
>
> adata = sdev->pdata->hw_pdata;
>
> - if (adata->signed_fw_image)
> + if (adata->quirks && adata->quirks->signed_fw_image)
> size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
> else
> size_fw = adata->fw_bin_size;
> diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
> index 9b3c26210db3..9d9197fa83ed 100644
> --- a/sound/soc/sof/amd/acp.c
> +++ b/sound/soc/sof/amd/acp.c
> @@ -20,12 +20,14 @@
> #include "acp.h"
> #include "acp-dsp-offset.h"
>
> -#define SECURED_FIRMWARE 1
> -
> static bool enable_fw_debug;
> module_param(enable_fw_debug, bool, 0444);
> MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");
>
> +static struct acp_quirk_entry quirk_valve_galileo = {
> + .signed_fw_image = true,
> +};
> +
> const struct dmi_system_id acp_sof_quirk_table[] = {
> {
> /* Steam Deck OLED device */
> @@ -33,7 +35,7 @@ const struct dmi_system_id acp_sof_quirk_table[] = {
> DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
> DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
> },
> - .driver_data = (void *)SECURED_FIRMWARE,
> + .driver_data = &quirk_valve_galileo,
> },
> {}
> };
> @@ -254,7 +256,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
> }
> }
>
> - if (adata->signed_fw_image)
> + if (adata->quirks && adata->quirks->signed_fw_image)
> snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_INCLUDE_HDR, ACP_SHA_HEADER);
>
> snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr);
> @@ -738,26 +740,27 @@ int amd_sof_acp_probe(struct snd_sof_dev *sdev)
> sdev->debug_box.offset = sdev->host_box.offset + sdev->host_box.size;
> sdev->debug_box.size = BOX_SIZE_1024;
>
> - adata->signed_fw_image = false;
> dmi_id = dmi_first_match(acp_sof_quirk_table);
> - if (dmi_id && dmi_id->driver_data) {
> - adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> - "sof-%s-code.bin",
> - chip->name);
> - if (!adata->fw_code_bin) {
> - ret = -ENOMEM;
> - goto free_ipc_irq;
> + if (dmi_id) {
> + adata->quirks = dmi_id->driver_data;
> +
> + if (adata->quirks->signed_fw_image) {
> + adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> + "sof-%s-code.bin",
> + chip->name);
> + if (!adata->fw_code_bin) {
> + ret = -ENOMEM;
> + goto free_ipc_irq;
> + }
> +
> + adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> + "sof-%s-data.bin",
> + chip->name);
> + if (!adata->fw_data_bin) {
> + ret = -ENOMEM;
> + goto free_ipc_irq;
> + }
> }
> -
> - adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> - "sof-%s-data.bin",
> - chip->name);
> - if (!adata->fw_data_bin) {
> - ret = -ENOMEM;
> - goto free_ipc_irq;
> - }
> -
> - adata->signed_fw_image = dmi_id->driver_data;
> }
>
> adata->enable_fw_debug = enable_fw_debug;
> diff --git a/sound/soc/sof/amd/acp.h b/sound/soc/sof/amd/acp.h
> index 947068da39b5..b648ed194b9f 100644
> --- a/sound/soc/sof/amd/acp.h
> +++ b/sound/soc/sof/amd/acp.h
> @@ -207,6 +207,10 @@ struct sof_amd_acp_desc {
> u64 sdw_acpi_dev_addr;
> };
>
> +struct acp_quirk_entry {
> + bool signed_fw_image;
> +};
> +
> /* Common device data struct for ACP devices */
> struct acp_dev_data {
> struct snd_sof_dev *dev;
> @@ -236,7 +240,7 @@ struct acp_dev_data {
> u8 *data_buf;
> dma_addr_t sram_dma_addr;
> u8 *sram_data_buf;
> - bool signed_fw_image;
> + struct acp_quirk_entry *quirks;
> struct dma_descriptor dscr_info[ACP_MAX_DESC];
> struct acp_dsp_stream stream_buf[ACP_MAX_STREAM];
> struct acp_dsp_stream *dtrace_stream;
> diff --git a/sound/soc/sof/amd/vangogh.c b/sound/soc/sof/amd/vangogh.c
> index de15d21aa6d9..bc6ffdb5471a 100644
> --- a/sound/soc/sof/amd/vangogh.c
> +++ b/sound/soc/sof/amd/vangogh.c
> @@ -143,6 +143,7 @@ EXPORT_SYMBOL_NS(sof_vangogh_ops, SND_SOC_SOF_AMD_COMMON);
> int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
> {
> const struct dmi_system_id *dmi_id;
> + struct acp_quirk_entry *quirks;
>
> /* common defaults */
> memcpy(&sof_vangogh_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));
> @@ -151,8 +152,12 @@ int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
> sof_vangogh_ops.num_drv = ARRAY_SIZE(vangogh_sof_dai);
>
> dmi_id = dmi_first_match(acp_sof_quirk_table);
> - if (dmi_id && dmi_id->driver_data)
> - sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
> + if (dmi_id) {
> + quirks = dmi_id->driver_data;
> +
> + if (quirks->signed_fw_image)
> + sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
> + }
>
> return 0;
> }

2024-02-21 08:56:19

by Cristian Ciocaltea

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry

On 2/21/24 08:14, Venkata Prasad Potturu wrote:
>
> On 2/21/24 01:46, Cristian Ciocaltea wrote:
>> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
>> signed firmware support in the driver via the acp_sof_quirk_table.
>>
>> In preparation to support additional use cases of the quirk table (i.e.
>> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
>> and update all references to it accordingly.
>>
>> No functional changes intended.
>
> If there are no new flags currently being used in this patch, and also
> no functional changes added, in this case this patch is really required?

I would say yes, as it improves the ACP SOF quirk handling by making the
implementation more readable, less error prone and open for extension,
as already mentioned.

Additionally, it should facilitate the review process, since it's
unaffected by any potential changes that might be required for the
subsequent patch.

> Also please use scripts/get_maintainer.pl in CC while sending patches,
> then only
> maintainers get notified your changes.

I've already done that. Did I miss something?

Regards,
Cristian

Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry

Il 20/02/24 21:16, Cristian Ciocaltea ha scritto:
> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
> signed firmware support in the driver via the acp_sof_quirk_table.
>
> In preparation to support additional use cases of the quirk table (i.e.
> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
> and update all references to it accordingly.
>
> No functional changes intended.
>
> Signed-off-by: Cristian Ciocaltea <[email protected]>
> ---
> sound/soc/sof/amd/acp-loader.c | 2 +-
> sound/soc/sof/amd/acp.c | 47 ++++++++++++++++++----------------
> sound/soc/sof/amd/acp.h | 6 ++++-
> sound/soc/sof/amd/vangogh.c | 9 +++++--
> 4 files changed, 38 insertions(+), 26 deletions(-)
>
> diff --git a/sound/soc/sof/amd/acp-loader.c b/sound/soc/sof/amd/acp-loader.c
> index d2d21478399e..aad904839b81 100644
> --- a/sound/soc/sof/amd/acp-loader.c
> +++ b/sound/soc/sof/amd/acp-loader.c
> @@ -173,7 +173,7 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)
>
> adata = sdev->pdata->hw_pdata;
>
> - if (adata->signed_fw_image)
> + if (adata->quirks && adata->quirks->signed_fw_image)
> size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
> else
> size_fw = adata->fw_bin_size;
> diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
> index 9b3c26210db3..9d9197fa83ed 100644
> --- a/sound/soc/sof/amd/acp.c
> +++ b/sound/soc/sof/amd/acp.c
> @@ -20,12 +20,14 @@
> #include "acp.h"
> #include "acp-dsp-offset.h"
>
> -#define SECURED_FIRMWARE 1
> -
> static bool enable_fw_debug;
> module_param(enable_fw_debug, bool, 0444);
> MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");
>
> +static struct acp_quirk_entry quirk_valve_galileo = {
> + .signed_fw_image = true,

Hello Cristian,

are you sure that a structure holding "quirks" is the right choice here?

That probably comes as a personal preference, but I would simply pass a `u32 flags`
and structure the quirks as bits.

#define ACP_SIGNED_FW_IMAGE BIT(0)
#define ACP_SOMETHING_ELSE BIT(1)

flags = BIT(SIGNED_FW_IMAGE) | BIT(SOMETHING_ELSE);

if (flags & BIT(SIGNED_FW_IMAGE))
do_something()

What do you think?

Cheers,
Angelo

> +};
> +
> const struct dmi_system_id acp_sof_quirk_table[] = {
> {
> /* Steam Deck OLED device */
> @@ -33,7 +35,7 @@ const struct dmi_system_id acp_sof_quirk_table[] = {
> DMI_MATCH(DMI_SYS_VENDOR, "Valve"),
> DMI_MATCH(DMI_PRODUCT_NAME, "Galileo"),
> },
> - .driver_data = (void *)SECURED_FIRMWARE,
> + .driver_data = &quirk_valve_galileo,
> },
> {}
> };
> @@ -254,7 +256,7 @@ int configure_and_run_sha_dma(struct acp_dev_data *adata, void *image_addr,
> }
> }
>
> - if (adata->signed_fw_image)
> + if (adata->quirks && adata->quirks->signed_fw_image)
> snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_INCLUDE_HDR, ACP_SHA_HEADER);
>
> snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr);
> @@ -738,26 +740,27 @@ int amd_sof_acp_probe(struct snd_sof_dev *sdev)
> sdev->debug_box.offset = sdev->host_box.offset + sdev->host_box.size;
> sdev->debug_box.size = BOX_SIZE_1024;
>
> - adata->signed_fw_image = false;
> dmi_id = dmi_first_match(acp_sof_quirk_table);
> - if (dmi_id && dmi_id->driver_data) {
> - adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> - "sof-%s-code.bin",
> - chip->name);
> - if (!adata->fw_code_bin) {
> - ret = -ENOMEM;
> - goto free_ipc_irq;
> + if (dmi_id) {
> + adata->quirks = dmi_id->driver_data;
> +
> + if (adata->quirks->signed_fw_image) {
> + adata->fw_code_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> + "sof-%s-code.bin",
> + chip->name);
> + if (!adata->fw_code_bin) {
> + ret = -ENOMEM;
> + goto free_ipc_irq;
> + }
> +
> + adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> + "sof-%s-data.bin",
> + chip->name);
> + if (!adata->fw_data_bin) {
> + ret = -ENOMEM;
> + goto free_ipc_irq;
> + }
> }
> -
> - adata->fw_data_bin = devm_kasprintf(sdev->dev, GFP_KERNEL,
> - "sof-%s-data.bin",
> - chip->name);
> - if (!adata->fw_data_bin) {
> - ret = -ENOMEM;
> - goto free_ipc_irq;
> - }
> -
> - adata->signed_fw_image = dmi_id->driver_data;
> }
>
> adata->enable_fw_debug = enable_fw_debug;
> diff --git a/sound/soc/sof/amd/acp.h b/sound/soc/sof/amd/acp.h
> index 947068da39b5..b648ed194b9f 100644
> --- a/sound/soc/sof/amd/acp.h
> +++ b/sound/soc/sof/amd/acp.h
> @@ -207,6 +207,10 @@ struct sof_amd_acp_desc {
> u64 sdw_acpi_dev_addr;
> };
>
> +struct acp_quirk_entry {
> + bool signed_fw_image;
> +};
> +
> /* Common device data struct for ACP devices */
> struct acp_dev_data {
> struct snd_sof_dev *dev;
> @@ -236,7 +240,7 @@ struct acp_dev_data {
> u8 *data_buf;
> dma_addr_t sram_dma_addr;
> u8 *sram_data_buf;
> - bool signed_fw_image;
> + struct acp_quirk_entry *quirks;
> struct dma_descriptor dscr_info[ACP_MAX_DESC];
> struct acp_dsp_stream stream_buf[ACP_MAX_STREAM];
> struct acp_dsp_stream *dtrace_stream;
> diff --git a/sound/soc/sof/amd/vangogh.c b/sound/soc/sof/amd/vangogh.c
> index de15d21aa6d9..bc6ffdb5471a 100644
> --- a/sound/soc/sof/amd/vangogh.c
> +++ b/sound/soc/sof/amd/vangogh.c
> @@ -143,6 +143,7 @@ EXPORT_SYMBOL_NS(sof_vangogh_ops, SND_SOC_SOF_AMD_COMMON);
> int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
> {
> const struct dmi_system_id *dmi_id;
> + struct acp_quirk_entry *quirks;
>
> /* common defaults */
> memcpy(&sof_vangogh_ops, &sof_acp_common_ops, sizeof(struct snd_sof_dsp_ops));
> @@ -151,8 +152,12 @@ int sof_vangogh_ops_init(struct snd_sof_dev *sdev)
> sof_vangogh_ops.num_drv = ARRAY_SIZE(vangogh_sof_dai);
>
> dmi_id = dmi_first_match(acp_sof_quirk_table);
> - if (dmi_id && dmi_id->driver_data)
> - sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
> + if (dmi_id) {
> + quirks = dmi_id->driver_data;
> +
> + if (quirks->signed_fw_image)
> + sof_vangogh_ops.load_firmware = acp_sof_load_signed_firmware;
> + }
>
> return 0;
> }




2024-02-21 10:29:34

by Cristian Ciocaltea

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry

On 2/21/24 11:35, AngeloGioacchino Del Regno wrote:
> Il 20/02/24 21:16, Cristian Ciocaltea ha scritto:
>> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
>> signed firmware support in the driver via the acp_sof_quirk_table.
>>
>> In preparation to support additional use cases of the quirk table (i.e.
>> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
>> and update all references to it accordingly.
>>
>> No functional changes intended.
>>
>> Signed-off-by: Cristian Ciocaltea <[email protected]>
>> ---
>>   sound/soc/sof/amd/acp-loader.c |  2 +-
>>   sound/soc/sof/amd/acp.c        | 47 ++++++++++++++++++----------------
>>   sound/soc/sof/amd/acp.h        |  6 ++++-
>>   sound/soc/sof/amd/vangogh.c    |  9 +++++--
>>   4 files changed, 38 insertions(+), 26 deletions(-)
>>
>> diff --git a/sound/soc/sof/amd/acp-loader.c
>> b/sound/soc/sof/amd/acp-loader.c
>> index d2d21478399e..aad904839b81 100644
>> --- a/sound/soc/sof/amd/acp-loader.c
>> +++ b/sound/soc/sof/amd/acp-loader.c
>> @@ -173,7 +173,7 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)
>>         adata = sdev->pdata->hw_pdata;
>>   -    if (adata->signed_fw_image)
>> +    if (adata->quirks && adata->quirks->signed_fw_image)
>>           size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
>>       else
>>           size_fw = adata->fw_bin_size;
>> diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
>> index 9b3c26210db3..9d9197fa83ed 100644
>> --- a/sound/soc/sof/amd/acp.c
>> +++ b/sound/soc/sof/amd/acp.c
>> @@ -20,12 +20,14 @@
>>   #include "acp.h"
>>   #include "acp-dsp-offset.h"
>>   -#define SECURED_FIRMWARE 1
>> -
>>   static bool enable_fw_debug;
>>   module_param(enable_fw_debug, bool, 0444);
>>   MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");
>>   +static struct acp_quirk_entry quirk_valve_galileo = {
>> +    .signed_fw_image = true,
>
> Hello Cristian,
>
> are you sure that a structure holding "quirks" is the right choice here?
>
> That probably comes as a personal preference, but I would simply pass a
> `u32 flags`
> and structure the quirks as bits.
>
> #define ACP_SIGNED_FW_IMAGE    BIT(0)
> #define ACP_SOMETHING_ELSE    BIT(1)
>
> flags = BIT(SIGNED_FW_IMAGE) | BIT(SOMETHING_ELSE);
>
> if (flags & BIT(SIGNED_FW_IMAGE))
>    do_something()
>
> What do you think?

Hi Angelo,

The flags approach was actually my first thought and I think that would
have been the best choice if the quirks usage was limited to a single
file (acp.c).

Since they need to be exposed externally as well (acp-loader.c,
vangogh.c) and already using a dedicated member in struct
sof_amd_acp_desc related to the existing quirk, I found the "quirks"
struct solution a bit more natural/convenient to follow (I've done a bit
of research before and noticed other drivers having similar handling).

However, as you already pointed out, it may also come down to individual
preferences, so I'm open to using the flags if there is not enough
reasoning to stick with the current implementation.

Thanks,
Cristian

2024-02-21 11:01:33

by Cristian Ciocaltea

[permalink] [raw]
Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry

On 2/21/24 12:35, AngeloGioacchino Del Regno wrote:
> Il 21/02/24 11:29, Cristian Ciocaltea ha scritto:
>> On 2/21/24 11:35, AngeloGioacchino Del Regno wrote:
>>> Il 20/02/24 21:16, Cristian Ciocaltea ha scritto:
>>>> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
>>>> signed firmware support in the driver via the acp_sof_quirk_table.
>>>>
>>>> In preparation to support additional use cases of the quirk table (i.e.
>>>> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
>>>> and update all references to it accordingly.
>>>>

[...]

>>> are you sure that a structure holding "quirks" is the right choice here?
>>>
>>> That probably comes as a personal preference, but I would simply pass a
>>> `u32 flags`
>>> and structure the quirks as bits.
>>>
>>> #define ACP_SIGNED_FW_IMAGE    BIT(0)
>>> #define ACP_SOMETHING_ELSE    BIT(1)
>>>
>>> flags = BIT(SIGNED_FW_IMAGE) | BIT(SOMETHING_ELSE);
>
> That should've been
>   flags = SIGNED_FW_IMAGE | SOMETHING_ELSE;
>
>>>
>>> if (flags & BIT(SIGNED_FW_IMAGE))
>
> and this
>    if (flags & SIGNED_FW_IMAGE)
>
> ... I have no idea why I added a nested BIT(BIT()) in there, something in
> my brain started ticking sideways, lol.

Yeah, don't worry about that, it's perfectly clear what you initially
meant.. :-)

>>>     do_something()
>>>
>>> What do you think?
>>
>> Hi Angelo,
>>
>> The flags approach was actually my first thought and I think that would
>> have been the best choice if the quirks usage was limited to a single
>> file (acp.c).
>>
>> Since they need to be exposed externally as well (acp-loader.c,
>> vangogh.c) and already using a dedicated member in struct
>> sof_amd_acp_desc related to the existing quirk, I found the "quirks"
>> struct solution a bit more natural/convenient to follow (I've done a bit
>> of research before and noticed other drivers having similar handling).
>>
>> However, as you already pointed out, it may also come down to individual
>> preferences, so I'm open to using the flags if there is not enough
>> reasoning to stick with the current implementation.
>
> Of course the definitions should be put in a "common header" for that to
> actually work in your described situation, but it's not a big deal.
>
> Mine wasn't a strong opinion: that does actually matter in case you expect
> more quirks (or something that is not a quirk, but a functional flag
> instead)
> to eventually get there... but otherwise, it's actually the same.
>
> It's your choice in the end, I'm fine with both anyway :-)

Great, thanks! :-)

Subject: Re: [PATCH v3 1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry

Il 21/02/24 11:29, Cristian Ciocaltea ha scritto:
> On 2/21/24 11:35, AngeloGioacchino Del Regno wrote:
>> Il 20/02/24 21:16, Cristian Ciocaltea ha scritto:
>>> The signed_fw_image member of struct sof_amd_acp_desc is used to enable
>>> signed firmware support in the driver via the acp_sof_quirk_table.
>>>
>>> In preparation to support additional use cases of the quirk table (i.e.
>>> adding new flags), move signed_fw_image to a new struct acp_quirk_entry
>>> and update all references to it accordingly.
>>>
>>> No functional changes intended.
>>>
>>> Signed-off-by: Cristian Ciocaltea <[email protected]>
>>> ---
>>>   sound/soc/sof/amd/acp-loader.c |  2 +-
>>>   sound/soc/sof/amd/acp.c        | 47 ++++++++++++++++++----------------
>>>   sound/soc/sof/amd/acp.h        |  6 ++++-
>>>   sound/soc/sof/amd/vangogh.c    |  9 +++++--
>>>   4 files changed, 38 insertions(+), 26 deletions(-)
>>>
>>> diff --git a/sound/soc/sof/amd/acp-loader.c
>>> b/sound/soc/sof/amd/acp-loader.c
>>> index d2d21478399e..aad904839b81 100644
>>> --- a/sound/soc/sof/amd/acp-loader.c
>>> +++ b/sound/soc/sof/amd/acp-loader.c
>>> @@ -173,7 +173,7 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)
>>>         adata = sdev->pdata->hw_pdata;
>>>   -    if (adata->signed_fw_image)
>>> +    if (adata->quirks && adata->quirks->signed_fw_image)
>>>           size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
>>>       else
>>>           size_fw = adata->fw_bin_size;
>>> diff --git a/sound/soc/sof/amd/acp.c b/sound/soc/sof/amd/acp.c
>>> index 9b3c26210db3..9d9197fa83ed 100644
>>> --- a/sound/soc/sof/amd/acp.c
>>> +++ b/sound/soc/sof/amd/acp.c
>>> @@ -20,12 +20,14 @@
>>>   #include "acp.h"
>>>   #include "acp-dsp-offset.h"
>>>   -#define SECURED_FIRMWARE 1
>>> -
>>>   static bool enable_fw_debug;
>>>   module_param(enable_fw_debug, bool, 0444);
>>>   MODULE_PARM_DESC(enable_fw_debug, "Enable Firmware debug");
>>>   +static struct acp_quirk_entry quirk_valve_galileo = {
>>> +    .signed_fw_image = true,
>>
>> Hello Cristian,
>>
>> are you sure that a structure holding "quirks" is the right choice here?
>>
>> That probably comes as a personal preference, but I would simply pass a
>> `u32 flags`
>> and structure the quirks as bits.
>>
>> #define ACP_SIGNED_FW_IMAGE    BIT(0)
>> #define ACP_SOMETHING_ELSE    BIT(1)
>>
>> flags = BIT(SIGNED_FW_IMAGE) | BIT(SOMETHING_ELSE);

That should've been
flags = SIGNED_FW_IMAGE | SOMETHING_ELSE;

>>
>> if (flags & BIT(SIGNED_FW_IMAGE))

and this
if (flags & SIGNED_FW_IMAGE)

.. I have no idea why I added a nested BIT(BIT()) in there, something in
my brain started ticking sideways, lol.

>>    do_something()
>>
>> What do you think?
>
> Hi Angelo,
>
> The flags approach was actually my first thought and I think that would
> have been the best choice if the quirks usage was limited to a single
> file (acp.c).
>
> Since they need to be exposed externally as well (acp-loader.c,
> vangogh.c) and already using a dedicated member in struct
> sof_amd_acp_desc related to the existing quirk, I found the "quirks"
> struct solution a bit more natural/convenient to follow (I've done a bit
> of research before and noticed other drivers having similar handling).
>
> However, as you already pointed out, it may also come down to individual
> preferences, so I'm open to using the flags if there is not enough
> reasoning to stick with the current implementation.

Of course the definitions should be put in a "common header" for that to
actually work in your described situation, but it's not a big deal.

Mine wasn't a strong opinion: that does actually matter in case you expect
more quirks (or something that is not a quirk, but a functional flag instead)
to eventually get there... but otherwise, it's actually the same.

It's your choice in the end, I'm fine with both anyway :-)

Cheers,
Angelo



2024-03-04 19:12:50

by Cristian Ciocaltea

[permalink] [raw]
Subject: Re: [PATCH v3 0/2] ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED

On 2/20/24 22:16, Cristian Ciocaltea wrote:
> This patch series restores audio support on Valve's Steam Deck OLED model, which
> broke after the recent introduction of ACP/PSP communication for IRAM/DRAM fence
> register programming.

Hi Mark,

Could we get this queued for merging as v6.9 material?

Thanks,
Cristian

2024-03-04 19:15:03

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v3 0/2] ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED

On Mon, Mar 04, 2024 at 09:11:06PM +0200, Cristian Ciocaltea wrote:

> Could we get this queued for merging as v6.9 material?

Please don't send content free pings and please allow a reasonable time
for review. People get busy, go on holiday, attend conferences and so
on so unless there is some reason for urgency (like critical bug fixes)
please allow at least a couple of weeks for review. If there have been
review comments then people may be waiting for those to be addressed.

Sending content free pings adds to the mail volume (if they are seen at
all) which is often the problem and since they can't be reviewed
directly if something has gone wrong you'll have to resend the patches
anyway, so sending again is generally a better approach though there are
some other maintainers who like them - if in doubt look at how patches
for the subsystem are normally handled.


Attachments:
(No filename) (894.00 B)
signature.asc (499.00 B)
Download all attachments

2024-03-15 22:04:35

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v3 0/2] ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED

On Tue, 20 Feb 2024 22:16:02 +0200, Cristian Ciocaltea wrote:
> This patch series restores audio support on Valve's Steam Deck OLED model, which
> broke after the recent introduction of ACP/PSP communication for IRAM/DRAM fence
> register programming.
>
> Changes in v3:
> - Drop a patch file that was sent by mistake in v2
>
> [...]

Applied to

https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/2] ASoC: SOF: amd: Move signed_fw_image to struct acp_quirk_entry
commit: 33c3d813330718c403a60d220f03fbece0f4fb5c
[2/2] ASoC: SOF: amd: Skip IRAM/DRAM size modification for Steam Deck OLED
commit: 094d11768f740f11483dad4efcd9bbcffa4ce146

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark