Merge tag 'sound-6.11-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"It became a bit larger collection of fixes than wished at this time,
but all changes are small and mostly device-specific fixes that should
be fairly safe to apply.

Majority of fixes are about ASoC for AMD SOF, Cirrus codecs, lpass,
etc, in addition to the usual HD-audio quirks / fixes"

* tag 'sound-6.11-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (22 commits)
ALSA: hda: hda_component: Fix mutex crash if nothing ever binds
ALSA: hda/realtek: support HP Pavilion Aero 13-bg0xxx Mute LED
ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book3 Ultra
ASoC: cs-amp-lib: Ignore empty UEFI calibration entries
ASoC: cs-amp-lib-test: Force test calibration blob entries to be valid
ALSA: hda/realtek - FIxed ALC285 headphone no sound
ALSA: hda/realtek - Fixed ALC256 headphone no sound
ASoC: allow module autoloading for table board_ids
ASoC: allow module autoloading for table db1200_pids
ALSA: hda: cs35l56: Don't use the device index as a calibration index
ALSA: seq: Skip event type filtering for UMP events
ALSA: hda/realtek: Enable mute/micmute LEDs on HP Laptop 14-ey0xxx
ASoC: SOF: amd: Fix for acp init sequence
ASoC: amd: acp: fix module autoloading
ASoC: mediatek: mt8188: Mark AFE_DAC_CON0 register as volatile
ASoC: codecs: wcd937x: Fix missing de-assert of reset GPIO
ASoC: SOF: mediatek: Add missing board compatible
ASoC: MAINTAINERS: Drop Banajit Goswami from Qualcomm sound drivers
ASoC: SOF: amd: Fix for incorrect acp error register offsets
ASoC: SOF: amd: move iram-dram fence register programming sequence
...

+149 -54
-1
MAINTAINERS
··· 18545 18545 18546 18546 QCOM AUDIO (ASoC) DRIVERS 18547 18547 M: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> 18548 - M: Banajit Goswami <bgoswami@quicinc.com> 18549 18548 L: alsa-devel@alsa-project.org (moderated for non-subscribers) 18550 18549 L: linux-arm-msm@vger.kernel.org 18551 18550 S: Supported
+3
sound/core/seq/seq_clientmgr.c
··· 537 537 return NULL; 538 538 if (! dest->accept_input) 539 539 goto __not_avail; 540 + if (snd_seq_ev_is_ump(event)) 541 + return dest; /* ok - no filter checks */ 542 + 540 543 if ((dest->filter & SNDRV_SEQ_FILTER_USE_EVENT) && 541 544 ! test_bit(event->type, dest->event_filter)) 542 545 goto __not_avail;
+1 -1
sound/pci/hda/cs35l56_hda.c
··· 1003 1003 goto err; 1004 1004 } 1005 1005 1006 - cs35l56->base.cal_index = cs35l56->index; 1006 + cs35l56->base.cal_index = -1; 1007 1007 1008 1008 cs35l56_init_cs_dsp(&cs35l56->base, &cs35l56->cs_dsp); 1009 1009 cs35l56->cs_dsp.client_ops = &cs35l56_hda_client_ops;
+3 -2
sound/pci/hda/hda_component.c
··· 141 141 int ret; 142 142 143 143 /* Init shared and component specific data */ 144 - memset(parent, 0, sizeof(*parent)); 145 - mutex_init(&parent->mutex); 144 + memset(parent->comps, 0, sizeof(parent->comps)); 146 145 parent->codec = cdc; 147 146 148 147 mutex_lock(&parent->mutex); ··· 162 163 struct component_match *match = NULL; 163 164 struct hda_scodec_match *sm; 164 165 int ret, i; 166 + 167 + mutex_init(&parent->mutex); 165 168 166 169 for (i = 0; i < count; i++) { 167 170 sm = devm_kmalloc(dev, sizeof(*sm), GFP_KERNEL);
+54 -25
sound/pci/hda/patch_realtek.c
··· 4930 4930 } 4931 4931 } 4932 4932 4933 + static void alc_hp_mute_disable(struct hda_codec *codec, unsigned int delay) 4934 + { 4935 + if (delay <= 0) 4936 + delay = 75; 4937 + snd_hda_codec_write(codec, 0x21, 0, 4938 + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 4939 + msleep(delay); 4940 + snd_hda_codec_write(codec, 0x21, 0, 4941 + AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); 4942 + msleep(delay); 4943 + } 4944 + 4945 + static void alc_hp_enable_unmute(struct hda_codec *codec, unsigned int delay) 4946 + { 4947 + if (delay <= 0) 4948 + delay = 75; 4949 + snd_hda_codec_write(codec, 0x21, 0, 4950 + AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 4951 + msleep(delay); 4952 + snd_hda_codec_write(codec, 0x21, 0, 4953 + AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 4954 + msleep(delay); 4955 + } 4956 + 4933 4957 static const struct coef_fw alc225_pre_hsmode[] = { 4934 4958 UPDATE_COEF(0x4a, 1<<8, 0), 4935 4959 UPDATE_COEFEX(0x57, 0x05, 1<<14, 0), ··· 5055 5031 case 0x10ec0236: 5056 5032 case 0x10ec0256: 5057 5033 case 0x19e58326: 5034 + alc_hp_mute_disable(codec, 75); 5058 5035 alc_process_coef_fw(codec, coef0256); 5059 5036 break; 5060 5037 case 0x10ec0234: ··· 5090 5065 case 0x10ec0295: 5091 5066 case 0x10ec0289: 5092 5067 case 0x10ec0299: 5068 + alc_hp_mute_disable(codec, 75); 5093 5069 alc_process_coef_fw(codec, alc225_pre_hsmode); 5094 5070 alc_process_coef_fw(codec, coef0225); 5095 5071 break; ··· 5316 5290 case 0x10ec0299: 5317 5291 alc_process_coef_fw(codec, alc225_pre_hsmode); 5318 5292 alc_process_coef_fw(codec, coef0225); 5293 + alc_hp_enable_unmute(codec, 75); 5319 5294 break; 5320 5295 case 0x10ec0255: 5321 5296 alc_process_coef_fw(codec, coef0255); ··· 5329 5302 alc_write_coef_idx(codec, 0x45, 0xc089); 5330 5303 msleep(50); 5331 5304 alc_process_coef_fw(codec, coef0256); 5305 + alc_hp_enable_unmute(codec, 75); 5332 5306 break; 5333 5307 case 0x10ec0234: 5334 5308 case 0x10ec0274: ··· 5427 5399 case 0x10ec0256: 5428 5400 case 0x19e58326: 5429 5401 alc_process_coef_fw(codec, coef0256); 5402 + alc_hp_enable_unmute(codec, 75); 5430 5403 break; 5431 5404 case 0x10ec0234: 5432 5405 case 0x10ec0274: ··· 5476 5447 alc_process_coef_fw(codec, coef0225_2); 5477 5448 else 5478 5449 alc_process_coef_fw(codec, coef0225_1); 5450 + alc_hp_enable_unmute(codec, 75); 5479 5451 break; 5480 5452 case 0x10ec0867: 5481 5453 alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0); ··· 5544 5514 case 0x10ec0256: 5545 5515 case 0x19e58326: 5546 5516 alc_process_coef_fw(codec, coef0256); 5517 + alc_hp_enable_unmute(codec, 75); 5547 5518 break; 5548 5519 case 0x10ec0234: 5549 5520 case 0x10ec0274: ··· 5582 5551 case 0x10ec0289: 5583 5552 case 0x10ec0299: 5584 5553 alc_process_coef_fw(codec, coef0225); 5554 + alc_hp_enable_unmute(codec, 75); 5585 5555 break; 5586 5556 } 5587 5557 codec_dbg(codec, "Headset jack set to Nokia-style headset mode.\n"); ··· 5651 5619 alc_write_coef_idx(codec, 0x06, 0x6104); 5652 5620 alc_write_coefex_idx(codec, 0x57, 0x3, 0x09a3); 5653 5621 5654 - snd_hda_codec_write(codec, 0x21, 0, 5655 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 5656 - msleep(80); 5657 - snd_hda_codec_write(codec, 0x21, 0, 5658 - AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); 5659 - 5660 5622 alc_process_coef_fw(codec, coef0255); 5661 5623 msleep(300); 5662 5624 val = alc_read_coef_idx(codec, 0x46); 5663 5625 is_ctia = (val & 0x0070) == 0x0070; 5664 - 5626 + if (!is_ctia) { 5627 + alc_write_coef_idx(codec, 0x45, 0xe089); 5628 + msleep(100); 5629 + val = alc_read_coef_idx(codec, 0x46); 5630 + if ((val & 0x0070) == 0x0070) 5631 + is_ctia = false; 5632 + else 5633 + is_ctia = true; 5634 + } 5665 5635 alc_write_coefex_idx(codec, 0x57, 0x3, 0x0da3); 5666 5636 alc_update_coefex_idx(codec, 0x57, 0x5, 1<<14, 0); 5667 - 5668 - snd_hda_codec_write(codec, 0x21, 0, 5669 - AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 5670 - msleep(80); 5671 - snd_hda_codec_write(codec, 0x21, 0, 5672 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 5673 5637 break; 5674 5638 case 0x10ec0234: 5675 5639 case 0x10ec0274: ··· 5742 5714 case 0x10ec0295: 5743 5715 case 0x10ec0289: 5744 5716 case 0x10ec0299: 5745 - snd_hda_codec_write(codec, 0x21, 0, 5746 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); 5747 - msleep(80); 5748 - snd_hda_codec_write(codec, 0x21, 0, 5749 - AC_VERB_SET_PIN_WIDGET_CONTROL, 0x0); 5750 - 5751 5717 alc_process_coef_fw(codec, alc225_pre_hsmode); 5752 5718 alc_update_coef_idx(codec, 0x67, 0xf000, 0x1000); 5753 5719 val = alc_read_coef_idx(codec, 0x45); ··· 5758 5736 val = alc_read_coef_idx(codec, 0x46); 5759 5737 is_ctia = (val & 0x00f0) == 0x00f0; 5760 5738 } 5739 + if (!is_ctia) { 5740 + alc_update_coef_idx(codec, 0x45, 0x3f<<10, 0x38<<10); 5741 + alc_update_coef_idx(codec, 0x49, 3<<8, 1<<8); 5742 + msleep(100); 5743 + val = alc_read_coef_idx(codec, 0x46); 5744 + if ((val & 0x00f0) == 0x00f0) 5745 + is_ctia = false; 5746 + else 5747 + is_ctia = true; 5748 + } 5761 5749 alc_update_coef_idx(codec, 0x4a, 7<<6, 7<<6); 5762 5750 alc_update_coef_idx(codec, 0x4a, 3<<4, 3<<4); 5763 5751 alc_update_coef_idx(codec, 0x67, 0xf000, 0x3000); 5764 - 5765 - snd_hda_codec_write(codec, 0x21, 0, 5766 - AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT); 5767 - msleep(80); 5768 - snd_hda_codec_write(codec, 0x21, 0, 5769 - AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 5770 5752 break; 5771 5753 case 0x10ec0867: 5772 5754 is_ctia = true; ··· 10341 10315 SND_PCI_QUIRK(0x103c, 0x8c15, "HP Spectre x360 2-in-1 Laptop 14-eu0xxx", ALC245_FIXUP_HP_SPECTRE_X360_EU0XXX), 10342 10316 SND_PCI_QUIRK(0x103c, 0x8c16, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10343 10317 SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre 16", ALC287_FIXUP_CS35L41_I2C_2), 10318 + SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS), 10344 10319 SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10345 10320 SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10346 10321 SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), ··· 10380 10353 SND_PCI_QUIRK(0x103c, 0x8ca2, "HP ZBook Power", ALC236_FIXUP_HP_GPIO_LED), 10381 10354 SND_PCI_QUIRK(0x103c, 0x8ca4, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10382 10355 SND_PCI_QUIRK(0x103c, 0x8ca7, "HP ZBook Fury", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10356 + SND_PCI_QUIRK(0x103c, 0x8cbd, "HP Pavilion Aero Laptop 13-bg0xxx", ALC245_FIXUP_HP_X360_MUTE_LEDS), 10383 10357 SND_PCI_QUIRK(0x103c, 0x8cdd, "HP Spectre", ALC287_FIXUP_CS35L41_I2C_2), 10384 10358 SND_PCI_QUIRK(0x103c, 0x8cde, "HP Spectre", ALC287_FIXUP_CS35L41_I2C_2), 10385 10359 SND_PCI_QUIRK(0x103c, 0x8cdf, "HP SnowWhite", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), ··· 10541 10513 SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP), 10542 10514 SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP), 10543 10515 SND_PCI_QUIRK(0x144d, 0xc1ca, "Samsung Galaxy Book3 Pro 360 (NP960QFG-KB1US)", ALC298_FIXUP_SAMSUNG_AMP2), 10516 + SND_PCI_QUIRK(0x144d, 0xc1cc, "Samsung Galaxy Book3 Ultra (NT960XFH-XD92G))", ALC298_FIXUP_SAMSUNG_AMP2), 10544 10517 SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC), 10545 10518 SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC), 10546 10519 SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC),
+2
sound/soc/amd/acp/acp-legacy-mach.c
··· 227 227 }, 228 228 { } 229 229 }; 230 + MODULE_DEVICE_TABLE(platform, board_ids); 231 + 230 232 static struct platform_driver acp_asoc_audio = { 231 233 .driver = { 232 234 .pm = &snd_soc_pm_ops,
+2
sound/soc/amd/acp/acp-sof-mach.c
··· 158 158 }, 159 159 { } 160 160 }; 161 + MODULE_DEVICE_TABLE(platform, board_ids); 162 + 161 163 static struct platform_driver acp_asoc_audio = { 162 164 .driver = { 163 165 .name = "sof_mach",
+1
sound/soc/au1x/db1200.c
··· 44 44 }, 45 45 {}, 46 46 }; 47 + MODULE_DEVICE_TABLE(platform, db1200_pids); 47 48 48 49 /*------------------------- AC97 PART ---------------------------*/ 49 50
+9
sound/soc/codecs/cs-amp-lib-test.c
··· 38 38 { 39 39 struct cs_amp_lib_test_priv *priv = test->priv; 40 40 unsigned int blob_size; 41 + int i; 41 42 42 43 blob_size = offsetof(struct cirrus_amp_efi_data, data) + 43 44 sizeof(struct cirrus_amp_cal_data) * num_amps; ··· 50 49 priv->cal_blob->count = num_amps; 51 50 52 51 get_random_bytes(priv->cal_blob->data, sizeof(struct cirrus_amp_cal_data) * num_amps); 52 + 53 + /* Ensure all timestamps are non-zero to mark the entry valid. */ 54 + for (i = 0; i < num_amps; i++) 55 + priv->cal_blob->data[i].calTime[0] |= 1; 56 + 57 + /* Ensure that all UIDs are non-zero and unique. */ 58 + for (i = 0; i < num_amps; i++) 59 + *(u8 *)&priv->cal_blob->data[i].calTarget[0] = i + 1; 53 60 } 54 61 55 62 static u64 cs_amp_lib_test_get_target_uid(struct kunit *test)
+6 -1
sound/soc/codecs/cs-amp-lib.c
··· 182 182 for (i = 0; i < efi_data->count; ++i) { 183 183 u64 cal_target = cs_amp_cal_target_u64(&efi_data->data[i]); 184 184 185 + /* Skip empty entries */ 186 + if (!efi_data->data[i].calTime[0] && !efi_data->data[i].calTime[1]) 187 + continue; 188 + 185 189 /* Skip entries with unpopulated silicon ID */ 186 190 if (cal_target == 0) 187 191 continue; ··· 197 193 } 198 194 } 199 195 200 - if (!cal && (amp_index >= 0) && (amp_index < efi_data->count)) { 196 + if (!cal && (amp_index >= 0) && (amp_index < efi_data->count) && 197 + (efi_data->data[amp_index].calTime[0] || efi_data->data[amp_index].calTime[1])) { 201 198 u64 cal_target = cs_amp_cal_target_u64(&efi_data->data[amp_index]); 202 199 203 200 /*
+6
sound/soc/codecs/lpass-macro-common.h
··· 49 49 static inline const char *lpass_macro_get_codec_version_string(int version) 50 50 { 51 51 switch (version) { 52 + case LPASS_CODEC_VERSION_1_0: 53 + return "v1.0"; 54 + case LPASS_CODEC_VERSION_1_1: 55 + return "v1.1"; 56 + case LPASS_CODEC_VERSION_1_2: 57 + return "v1.2"; 52 58 case LPASS_CODEC_VERSION_2_0: 53 59 return "v2.0"; 54 60 case LPASS_CODEC_VERSION_2_1:
+4
sound/soc/codecs/lpass-va-macro.c
··· 1485 1485 if ((core_id_0 == 0x02) && (core_id_1 == 0x0F) && (core_id_2 == 0x80 || core_id_2 == 0x81)) 1486 1486 version = LPASS_CODEC_VERSION_2_8; 1487 1487 1488 + if (version == LPASS_CODEC_VERSION_UNKNOWN) 1489 + dev_warn(va->dev, "Unknown Codec version, ID: %02x / %02x / %02x\n", 1490 + core_id_0, core_id_1, core_id_2); 1491 + 1488 1492 lpass_macro_set_codec_version(version); 1489 1493 1490 1494 dev_dbg(va->dev, "LPASS Codec Version %s\n", lpass_macro_get_codec_version_string(version));
+2 -3
sound/soc/codecs/wcd937x.c
··· 242 242 243 243 static void wcd937x_reset(struct wcd937x_priv *wcd937x) 244 244 { 245 - usleep_range(20, 30); 246 - 247 245 gpiod_set_value(wcd937x->reset_gpio, 1); 248 - 246 + usleep_range(20, 30); 247 + gpiod_set_value(wcd937x->reset_gpio, 0); 249 248 usleep_range(20, 30); 250 249 } 251 250
+1
sound/soc/mediatek/mt8188/mt8188-afe-pcm.c
··· 2748 2748 case AFE_ASRC12_NEW_CON9: 2749 2749 case AFE_LRCK_CNT: 2750 2750 case AFE_DAC_MON0: 2751 + case AFE_DAC_CON0: 2751 2752 case AFE_DL2_CUR: 2752 2753 case AFE_DL3_CUR: 2753 2754 case AFE_DL6_CUR:
+4 -2
sound/soc/sof/amd/acp-dsp-offset.h
··· 76 76 #define DSP_SW_INTR_CNTL_OFFSET 0x0 77 77 #define DSP_SW_INTR_STAT_OFFSET 0x4 78 78 #define DSP_SW_INTR_TRIG_OFFSET 0x8 79 - #define ACP_ERROR_STATUS 0x18C4 79 + #define ACP3X_ERROR_STATUS 0x18C4 80 + #define ACP6X_ERROR_STATUS 0x1A4C 80 81 #define ACP3X_AXI2DAGB_SEM_0 0x1880 81 82 #define ACP5X_AXI2DAGB_SEM_0 0x1884 82 83 #define ACP6X_AXI2DAGB_SEM_0 0x1874 83 84 84 85 /* ACP common registers to report errors related to I2S & SoundWire interfaces */ 85 - #define ACP_SW0_I2S_ERROR_REASON 0x18B4 86 + #define ACP3X_SW_I2S_ERROR_REASON 0x18C8 87 + #define ACP6X_SW0_I2S_ERROR_REASON 0x18B4 86 88 #define ACP_SW1_I2S_ERROR_REASON 0x1A50 87 89 88 90 /* Registers from ACP_SHA block */
+35 -17
sound/soc/sof/amd/acp.c
··· 92 92 unsigned int idx, unsigned int dscr_count) 93 93 { 94 94 struct snd_sof_dev *sdev = adata->dev; 95 + const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata); 95 96 unsigned int val, status; 96 97 int ret; 97 98 ··· 103 102 val & (1 << ch), ACP_REG_POLL_INTERVAL, 104 103 ACP_REG_POLL_TIMEOUT_US); 105 104 if (ret < 0) { 106 - status = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP_ERROR_STATUS); 105 + status = snd_sof_dsp_read(sdev, ACP_DSP_BAR, desc->acp_error_stat); 107 106 val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, ACP_DMA_ERR_STS_0 + ch * sizeof(u32)); 108 107 109 108 dev_err(sdev->dev, "ACP_DMA_ERR_STS :0x%x ACP_ERROR_STATUS :0x%x\n", val, status); ··· 264 263 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_STRT_ADDR, start_addr); 265 264 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_DESTINATION_ADDR, dest_addr); 266 265 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_MSG_LENGTH, image_length); 266 + 267 + /* psp_send_cmd only required for vangogh platform (rev - 5) */ 268 + if (desc->rev == 5 && !(adata->quirks && adata->quirks->skip_iram_dram_size_mod)) { 269 + /* Modify IRAM and DRAM size */ 270 + ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | IRAM_DRAM_FENCE_2); 271 + if (ret) 272 + return ret; 273 + ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | MBOX_ISREADY_FLAG); 274 + if (ret) 275 + return ret; 276 + } 267 277 snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SHA_DMA_CMD, ACP_SHA_RUN); 268 278 269 279 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, ACP_SHA_TRANSFER_BYTE_CNT, ··· 288 276 /* psp_send_cmd only required for renoir platform (rev - 3) */ 289 277 if (desc->rev == 3) { 290 278 ret = psp_send_cmd(adata, MBOX_ACP_SHA_DMA_COMMAND); 291 - if (ret) 292 - return ret; 293 - } 294 - 295 - /* psp_send_cmd only required for vangogh platform (rev - 5) */ 296 - if (desc->rev == 5 && !(adata->quirks && adata->quirks->skip_iram_dram_size_mod)) { 297 - /* Modify IRAM and DRAM size */ 298 - ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | IRAM_DRAM_FENCE_2); 299 - if (ret) 300 - return ret; 301 - ret = psp_send_cmd(adata, MBOX_ACP_IRAM_DRAM_FENCE_COMMAND | MBOX_ISREADY_FLAG); 302 279 if (ret) 303 280 return ret; 304 281 } ··· 403 402 404 403 if (val & ACP_ERROR_IRQ_MASK) { 405 404 snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->ext_intr_stat, ACP_ERROR_IRQ_MASK); 406 - snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + ACP_SW0_I2S_ERROR_REASON, 0); 407 - snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + ACP_SW1_I2S_ERROR_REASON, 0); 408 - snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + ACP_ERROR_STATUS, 0); 405 + snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->acp_sw0_i2s_err_reason, 0); 406 + /* ACP_SW1_I2S_ERROR_REASON is newly added register from rmb platform onwards */ 407 + if (desc->rev >= 6) 408 + snd_sof_dsp_write(sdev, ACP_DSP_BAR, ACP_SW1_I2S_ERROR_REASON, 0); 409 + snd_sof_dsp_write(sdev, ACP_DSP_BAR, desc->acp_error_stat, 0); 409 410 irq_flag = 1; 410 411 } 411 412 ··· 433 430 const struct sof_amd_acp_desc *desc = get_chip_info(sdev->pdata); 434 431 unsigned int base = desc->pgfsm_base; 435 432 unsigned int val; 433 + unsigned int acp_pgfsm_status_mask, acp_pgfsm_cntl_mask; 436 434 int ret; 437 435 438 436 val = snd_sof_dsp_read(sdev, ACP_DSP_BAR, base + PGFSM_STATUS_OFFSET); ··· 441 437 if (val == ACP_POWERED_ON) 442 438 return 0; 443 439 444 - if (val & ACP_PGFSM_STATUS_MASK) 440 + switch (desc->rev) { 441 + case 3: 442 + case 5: 443 + acp_pgfsm_status_mask = ACP3X_PGFSM_STATUS_MASK; 444 + acp_pgfsm_cntl_mask = ACP3X_PGFSM_CNTL_POWER_ON_MASK; 445 + break; 446 + case 6: 447 + acp_pgfsm_status_mask = ACP6X_PGFSM_STATUS_MASK; 448 + acp_pgfsm_cntl_mask = ACP6X_PGFSM_CNTL_POWER_ON_MASK; 449 + break; 450 + default: 451 + return -EINVAL; 452 + } 453 + 454 + if (val & acp_pgfsm_status_mask) 445 455 snd_sof_dsp_write(sdev, ACP_DSP_BAR, base + PGFSM_CONTROL_OFFSET, 446 - ACP_PGFSM_CNTL_POWER_ON_MASK); 456 + acp_pgfsm_cntl_mask); 447 457 448 458 ret = snd_sof_dsp_read_poll_timeout(sdev, ACP_DSP_BAR, base + PGFSM_STATUS_OFFSET, val, 449 459 !val, ACP_REG_POLL_INTERVAL, ACP_REG_POLL_TIMEOUT_US);
+7 -2
sound/soc/sof/amd/acp.h
··· 25 25 #define ACP_REG_POLL_TIMEOUT_US 2000 26 26 #define ACP_DMA_COMPLETE_TIMEOUT_US 5000 27 27 28 - #define ACP_PGFSM_CNTL_POWER_ON_MASK 0x01 29 - #define ACP_PGFSM_STATUS_MASK 0x03 28 + #define ACP3X_PGFSM_CNTL_POWER_ON_MASK 0x01 29 + #define ACP3X_PGFSM_STATUS_MASK 0x03 30 + #define ACP6X_PGFSM_CNTL_POWER_ON_MASK 0x07 31 + #define ACP6X_PGFSM_STATUS_MASK 0x0F 32 + 30 33 #define ACP_POWERED_ON 0x00 31 34 #define ACP_ASSERT_RESET 0x01 32 35 #define ACP_RELEASE_RESET 0x00 ··· 206 203 u32 probe_reg_offset; 207 204 u32 reg_start_addr; 208 205 u32 reg_end_addr; 206 + u32 acp_error_stat; 207 + u32 acp_sw0_i2s_err_reason; 209 208 u32 sdw_max_link_count; 210 209 u64 sdw_acpi_dev_addr; 211 210 };
+2
sound/soc/sof/amd/pci-acp63.c
··· 35 35 .ext_intr_cntl = ACP6X_EXTERNAL_INTR_CNTL, 36 36 .ext_intr_stat = ACP6X_EXT_INTR_STAT, 37 37 .ext_intr_stat1 = ACP6X_EXT_INTR_STAT1, 38 + .acp_error_stat = ACP6X_ERROR_STATUS, 39 + .acp_sw0_i2s_err_reason = ACP6X_SW0_I2S_ERROR_REASON, 38 40 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 39 41 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 40 42 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0,
+2
sound/soc/sof/amd/pci-rmb.c
··· 33 33 .pgfsm_base = ACP6X_PGFSM_BASE, 34 34 .ext_intr_stat = ACP6X_EXT_INTR_STAT, 35 35 .dsp_intr_base = ACP6X_DSP_SW_INTR_BASE, 36 + .acp_error_stat = ACP6X_ERROR_STATUS, 37 + .acp_sw0_i2s_err_reason = ACP6X_SW0_I2S_ERROR_REASON, 36 38 .sram_pte_offset = ACP6X_SRAM_PTE_OFFSET, 37 39 .hw_semaphore_offset = ACP6X_AXI2DAGB_SEM_0, 38 40 .fusion_dsp_offset = ACP6X_DSP_FUSION_RUNSTALL,
+2
sound/soc/sof/amd/pci-rn.c
··· 33 33 .pgfsm_base = ACP3X_PGFSM_BASE, 34 34 .ext_intr_stat = ACP3X_EXT_INTR_STAT, 35 35 .dsp_intr_base = ACP3X_DSP_SW_INTR_BASE, 36 + .acp_error_stat = ACP3X_ERROR_STATUS, 37 + .acp_sw0_i2s_err_reason = ACP3X_SW_I2S_ERROR_REASON, 36 38 .sram_pte_offset = ACP3X_SRAM_PTE_OFFSET, 37 39 .hw_semaphore_offset = ACP3X_AXI2DAGB_SEM_0, 38 40 .acp_clkmux_sel = ACP3X_CLKMUX_SEL,
+3
sound/soc/sof/mediatek/mt8195/mt8195.c
··· 575 575 .compatible = "google,tomato", 576 576 .sof_tplg_filename = "sof-mt8195-mt6359-rt1019-rt5682.tplg" 577 577 }, { 578 + .compatible = "google,dojo", 579 + .sof_tplg_filename = "sof-mt8195-mt6359-max98390-rt5682.tplg" 580 + }, { 578 581 .compatible = "mediatek,mt8195", 579 582 .sof_tplg_filename = "sof-mt8195.tplg" 580 583 }, {