Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/sound/sof/dai-amd.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ struct sof_ipc_dai_acp_params {
uint32_t fsync_rate; /* FSYNC frequency in Hz */
uint32_t tdm_slots;
uint32_t tdm_mode;
u32 format;
} __packed;

/* ACPDMIC Configuration Request - SOF_IPC_DAI_AMD_CONFIG */
Expand Down
2 changes: 2 additions & 0 deletions include/sound/sof/dai.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ enum sof_ipc_dai_type {
SOF_DAI_IMX_MICFIL, /** < i.MX MICFIL PDM */
SOF_DAI_AMD_SDW, /**< AMD ACP SDW */
SOF_DAI_INTEL_UAOL, /**< Intel UAOL */
SOF_DAI_AMD_I2S, /**< AMD ACP I2S */
};

/* general purpose DAI configuration */
Expand Down Expand Up @@ -122,6 +123,7 @@ struct sof_ipc_dai_config {
struct sof_ipc_dai_mtk_afe_params afe;
struct sof_ipc_dai_micfil_params micfil;
struct sof_ipc_dai_acp_sdw_params acp_sdw;
struct sof_ipc_dai_acp_params acp_i2s;
};
} __packed;

Expand Down
1 change: 1 addition & 0 deletions include/uapi/sound/sof/tokens.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@
#define SOF_TKN_AMD_ACPI2S_RATE 1700
#define SOF_TKN_AMD_ACPI2S_CH 1701
#define SOF_TKN_AMD_ACPI2S_TDM_MODE 1702
#define SOF_TKN_AMD_ACPI2S_FORMAT 1703

/* MICFIL PDM */
#define SOF_TKN_IMX_MICFIL_RATE 2000
Expand Down
12 changes: 12 additions & 0 deletions sound/soc/amd/acp-config.c
Original file line number Diff line number Diff line change
Expand Up @@ -353,5 +353,17 @@ struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_machines[] = {
};
EXPORT_SYMBOL(snd_soc_acpi_amd_acp70_sof_machines);

struct snd_soc_acpi_mach snd_soc_acpi_amd_acp7x_sof_machines[] = {
{
.id = "AMDI1010",
.drv_name = "acp7x-dsp",
.pdata = &acp_quirk_data,
.fw_filename = "sof-acp7x.ri",
.sof_tplg_filename = "sof-acp7x.tplg",
},
{},
};
EXPORT_SYMBOL(snd_soc_acpi_amd_acp7x_sof_machines);

MODULE_DESCRIPTION("AMD ACP Machine Configuration Module");
MODULE_LICENSE("Dual BSD/GPL");
1 change: 1 addition & 0 deletions sound/soc/amd/mach-config.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ extern struct snd_soc_acpi_mach snd_soc_acpi_amd_acp63_sof_sdw_machines[];
extern struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_machines[];
extern struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sdw_machines[];
extern struct snd_soc_acpi_mach snd_soc_acpi_amd_acp70_sof_sdw_machines[];
extern struct snd_soc_acpi_mach snd_soc_acpi_amd_acp7x_sof_machines[];

struct config_entry {
u32 flags;
Expand Down
11 changes: 11 additions & 0 deletions sound/soc/sof/amd/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -103,5 +103,16 @@ config SND_SOC_SOF_AMD_ACP70
Select this option for SOF support on
AMD ACP7.0/ACP7.1 version based platforms.
Say Y if you want to enable SOF on ACP7.0/ACP7.1 based platforms.
config SND_SOC_SOF_AMD_ACP7X
tristate "SOF support for ACP7.B/7.F platforms"
depends on SND_SOC_SOF_PCI
depends on AMD_NODE
select SND_SOC_SOF_AMD_COMMON
select SND_SOC_SOF_ACP_PROBES
help
Select this option for SOF support on AMD ACP7.B and ACP7.F PCI
revision based platforms.
Say Y if you want to enable SOF on ACP7.B/7.F based platforms.
If unsure select "N".

endif
2 changes: 2 additions & 0 deletions sound/soc/sof/amd/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@ snd-sof-amd-rembrandt-y := pci-rmb.o rembrandt.o
snd-sof-amd-vangogh-y := pci-vangogh.o vangogh.o
snd-sof-amd-acp63-y := pci-acp63.o acp63.o
snd-sof-amd-acp70-y := pci-acp70.o acp70.o
snd-sof-amd-acp7x-y := pci-acp7x.o acp7x.o

obj-$(CONFIG_SND_SOC_SOF_AMD_COMMON) += snd-sof-amd-acp.o
obj-$(CONFIG_SND_SOC_SOF_AMD_RENOIR) += snd-sof-amd-renoir.o
obj-$(CONFIG_SND_SOC_SOF_AMD_REMBRANDT) += snd-sof-amd-rembrandt.o
obj-$(CONFIG_SND_SOC_SOF_AMD_VANGOGH) += snd-sof-amd-vangogh.o
obj-$(CONFIG_SND_SOC_SOF_AMD_ACP63) += snd-sof-amd-acp63.o
obj-$(CONFIG_SND_SOC_SOF_AMD_ACP70) += snd-sof-amd-acp70.o
obj-$(CONFIG_SND_SOC_SOF_AMD_ACP7X) += snd-sof-amd-acp7x.o
17 changes: 17 additions & 0 deletions sound/soc/sof/amd/acp-dsp-offset.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,14 @@
#define ACP5X_PGFSM_BASE 0x1424
#define ACP6X_PGFSM_BASE 0x1024
#define ACP70_PGFSM_BASE ACP6X_PGFSM_BASE
#define ACP7X_PGFSM_BASE ACP6X_PGFSM_BASE
#define PGFSM_CONTROL_OFFSET 0x0
#define PGFSM_STATUS_OFFSET 0x4
#define ACP3X_CLKMUX_SEL 0x1424
#define ACP5X_CLKMUX_SEL 0x142C
#define ACP6X_CLKMUX_SEL 0x102C
#define ACP70_CLKMUX_SEL ACP6X_CLKMUX_SEL
#define ACP7X_CLKMUX_SEL ACP6X_CLKMUX_SEL

/* Registers from ACP_INTR block */
#define ACP3X_EXT_INTR_STAT 0x1808
Expand All @@ -86,21 +88,31 @@
#define ACP70_EXTERNAL_INTR_CNTL ACP6X_EXTERNAL_INTR_CNTL
#define ACP70_EXT_INTR_STAT ACP6X_EXT_INTR_STAT
#define ACP70_EXT_INTR_STAT1 ACP6X_EXT_INTR_STAT1
#define ACP7X_EXTERNAL_INTR_ENB ACP6X_EXTERNAL_INTR_ENB
#define ACP7X_EXTERNAL_INTR_CNTL 0x1A04
#define ACP7X_EXT_INTR_STAT 0x1A1C
#define ACP7X_EXTERNAL_INTR_CNTL1 0x1A08
#define ACP7X_EXT_INTR_STAT1 0x1A20

#define ACP3X_DSP_SW_INTR_BASE 0x1814
#define ACP5X_DSP_SW_INTR_BASE 0x1814
#define ACP6X_DSP_SW_INTR_BASE 0x1808
#define ACP70_DSP_SW_INTR_BASE ACP6X_DSP_SW_INTR_BASE
#define ACP7X_DSP_SW_INTR_BASE 0x1860
#define DSP_SW_INTR_CNTL_OFFSET 0x0
#define DSP_SW_INTR_STAT_OFFSET 0x4
#define ACP7X_DSP_SW_INTR_STAT (ACP7X_DSP_SW_INTR_BASE + DSP_SW_INTR_STAT_OFFSET)
#define DSP_SW_INTR_TRIG_OFFSET 0x8
#define ACP7X_DSP_SW_INTR_TRIG_OFFSET 0x30
#define ACP3X_ERROR_STATUS 0x18C4
#define ACP6X_ERROR_STATUS 0x1A4C
#define ACP70_ERROR_STATUS ACP6X_ERROR_STATUS
#define ACP7X_ERROR_STATUS 0x1A88
#define ACP3X_AXI2DAGB_SEM_0 0x1880
#define ACP5X_AXI2DAGB_SEM_0 0x1884
#define ACP6X_AXI2DAGB_SEM_0 0x1874
#define ACP70_AXI2DAGB_SEM_0 ACP6X_AXI2DAGB_SEM_0
#define ACP7X_AXI2DAGB_SEM_0 0x18F4

/* ACP common registers to report errors related to I2S & SoundWire interfaces */
#define ACP3X_SW_I2S_ERROR_REASON 0x18C8
Expand All @@ -123,6 +135,7 @@
#define ACP_SCRATCH_REG_0 0x10000
#define ACP6X_DSP_FUSION_RUNSTALL 0x0644
#define ACP70_DSP_FUSION_RUNSTALL ACP6X_DSP_FUSION_RUNSTALL
#define ACP7X_DSP_FUSION_RUNSTALL ACP6X_DSP_FUSION_RUNSTALL

/* Cache window registers */
#define ACP_DSP0_CACHE_OFFSET0 0x0420
Expand All @@ -139,5 +152,9 @@
#define ACP70_SDW1_HOST_WAKE_STAT BIT(25)
#define ACP70_SDW0_PME_STAT BIT(26)
#define ACP70_SDW1_PME_STAT BIT(27)
#define ACP7X_DSP0_IDMA_ERROR_MASK 0x4B0
#define ACP7X_IDMA_ERROR_MASK 0x1FF9FF
#define ACP_ZSC_DSP_CTRL 0x001014
#define ACP_PME_EN 0x001400
Comment on lines +155 to +158

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will fix it.


#endif
15 changes: 12 additions & 3 deletions sound/soc/sof/amd/acp-ipc.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,20 @@ static void acpbus_trigger_host_to_dsp_swintr(struct acp_dev_data *adata)
struct snd_sof_dev *sdev = adata->dev;
const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata);
u32 swintr_trigger;

unsigned int swintr_trigger_reg_offset;

switch (adata->pci_rev) {
case ACP7B_PCI_ID:
case ACP7F_PCI_ID:
swintr_trigger_reg_offset = ACP7X_DSP_SW_INTR_TRIG_OFFSET;
break;
default:
swintr_trigger_reg_offset = DSP_SW_INTR_TRIG_OFFSET;
}
swintr_trigger = snd_sof_dsp_read(sdev, ACP_DSP_BAR, desc->dsp_intr_base +
DSP_SW_INTR_TRIG_OFFSET);
swintr_trigger_reg_offset);
swintr_trigger |= 0x01;
snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->dsp_intr_base + DSP_SW_INTR_TRIG_OFFSET,
snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->dsp_intr_base + swintr_trigger_reg_offset,
swintr_trigger);
}

Expand Down
30 changes: 25 additions & 5 deletions sound/soc/sof/amd/acp-loader.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
#include <linux/firmware.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/unaligned.h>

#include "../ops.h"
#include "acp-dsp-offset.h"
Expand Down Expand Up @@ -173,10 +174,24 @@ int acp_dsp_pre_fw_run(struct snd_sof_dev *sdev)

adata = sdev->pdata->hw_pdata;

if (adata->quirks && adata->quirks->signed_fw_image)
if (adata->pci_rev >= ACP7B_PCI_ID) {
if (adata->acp_sof_signed_firmware_image) {
if (adata->fw_bin_size <= ACP_IMAGE_HEADER_SIZE) {
dev_err(sdev->dev, "Invalid signed firmware size %u\n",
adata->fw_bin_size);
return -EINVAL;
}
size_fw = get_unaligned_le32(adata->bin_buf +
ACP_IMAGE_HDR_SIZE_FW_SIGNED_OFF);
size_fw += ACP_IMAGE_HEADER_SIZE;
Comment on lines +177 to +186

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will fix it.

} else {
size_fw = adata->fw_bin_size;
}
} else if (adata->quirks && adata->quirks->signed_fw_image) {
Comment thread
vijendarmukunda marked this conversation as resolved.
size_fw = adata->fw_bin_size - ACP_FIRMWARE_SIGNATURE;
else
} else {
size_fw = adata->fw_bin_size;
}

page_count = PAGE_ALIGN(size_fw) >> PAGE_SHIFT;
adata->fw_bin_page_count = page_count;
Expand Down Expand Up @@ -312,9 +327,14 @@ int acp_sof_load_signed_firmware(struct snd_sof_dev *sdev, const char *fw_name)
}
kfree(fw_filename);

ret = snd_sof_dsp_block_write(sdev, SOF_FW_BLK_TYPE_DRAM, 0,
(void *)adata->fw_dbin->data,
adata->fw_dbin->size);
if (adata->pci_rev >= ACP7B_PCI_ID)
ret = snd_sof_dsp_block_write(sdev, SOF_FW_BLK_TYPE_SRAM, 0,
(void *)adata->fw_dbin->data,
adata->fw_dbin->size);
else
ret = snd_sof_dsp_block_write(sdev, SOF_FW_BLK_TYPE_DRAM, 0,
(void *)adata->fw_dbin->data,
adata->fw_dbin->size);
return ret;
}
EXPORT_SYMBOL_NS(acp_sof_load_signed_firmware, "SND_SOC_SOF_AMD_COMMON");
Loading
Loading