Lines Matching refs:sdev
48 static u32 hda_get_interface_mask(struct snd_sof_dev *sdev)
53 chip = get_chip_info(sdev->pdata);
83 return interface_mask[sdev->dspless_mode_selected];
143 void hda_common_enable_sdw_irq(struct snd_sof_dev *sdev, bool enable)
147 hdev = sdev->pdata->hw_pdata;
152 snd_sof_dsp_update_bits(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIC2,
157 void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable)
159 u32 interface_mask = hda_get_interface_mask(sdev);
165 chip = get_chip_info(sdev->pdata);
167 chip->enable_sdw_irq(sdev, enable);
170 static int hda_sdw_acpi_scan(struct snd_sof_dev *sdev)
172 u32 interface_mask = hda_get_interface_mask(sdev);
180 handle = ACPI_HANDLE(sdev->dev);
183 hdev = sdev->pdata->hw_pdata;
192 static int hda_sdw_probe(struct snd_sof_dev *sdev)
199 hdev = sdev->pdata->hw_pdata;
203 chip = get_chip_info(sdev->pdata);
205 res.mmio_base = sdev->bar[HDA_DSP_BAR];
216 res.eml_lock = hdac_bus_eml_get_mutex(sof_to_bus(sdev), true,
221 res.mmio_base = sdev->bar[HDA_DSP_HDA_BAR];
231 res.irq = sdev->ipc_irq;
233 res.parent = sdev->dev;
235 res.dev = sdev->dev;
237 res.hbus = sof_to_bus(sdev);
251 dev_err(sdev->dev, "error: SoundWire probe failed\n");
261 int hda_sdw_check_lcount_common(struct snd_sof_dev *sdev)
267 hdev = sdev->pdata->hw_pdata;
270 caps = snd_sof_dsp_read(sdev, HDA_DSP_BAR, ctx->shim_base + SDW_SHIM_LCAP);
275 dev_err(sdev->dev,
284 int hda_sdw_check_lcount_ext(struct snd_sof_dev *sdev)
291 bus = sof_to_bus(sdev);
293 hdev = sdev->pdata->hw_pdata;
300 dev_err(sdev->dev,
309 static int hda_sdw_check_lcount(struct snd_sof_dev *sdev)
313 chip = get_chip_info(sdev->pdata);
315 return chip->read_sdw_lcount(sdev);
320 int hda_sdw_startup(struct snd_sof_dev *sdev)
323 struct snd_sof_pdata *pdata = sdev->pdata;
326 hdev = sdev->pdata->hw_pdata;
334 ret = hda_sdw_check_lcount(sdev);
341 static int hda_sdw_exit(struct snd_sof_dev *sdev)
345 hdev = sdev->pdata->hw_pdata;
347 hda_sdw_int_enable(sdev, false);
356 bool hda_common_check_sdw_irq(struct snd_sof_dev *sdev)
362 hdev = sdev->pdata->hw_pdata;
368 irq_status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIS2);
382 static bool hda_dsp_check_sdw_irq(struct snd_sof_dev *sdev)
384 u32 interface_mask = hda_get_interface_mask(sdev);
390 chip = get_chip_info(sdev->pdata);
392 return chip->check_sdw_irq(sdev);
402 bool hda_sdw_check_wakeen_irq_common(struct snd_sof_dev *sdev)
406 hdev = sdev->pdata->hw_pdata;
408 snd_sof_dsp_read(sdev, HDA_DSP_BAR,
415 static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
417 u32 interface_mask = hda_get_interface_mask(sdev);
423 chip = get_chip_info(sdev->pdata);
425 return chip->check_sdw_wakeen_irq(sdev);
430 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev)
432 u32 interface_mask = hda_get_interface_mask(sdev);
438 hdev = sdev->pdata->hw_pdata;
446 static inline int hda_sdw_acpi_scan(struct snd_sof_dev *sdev)
451 static inline int hda_sdw_probe(struct snd_sof_dev *sdev)
456 static inline int hda_sdw_exit(struct snd_sof_dev *sdev)
461 static inline bool hda_dsp_check_sdw_irq(struct snd_sof_dev *sdev)
471 static inline bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev)
598 static void hda_dsp_get_state(struct snd_sof_dev *sdev, const char *level)
600 const struct sof_intel_dsp_desc *chip = get_chip_info(sdev->pdata);
604 fsr = snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg);
623 dev_printk(level, sdev->dev, "%#010x: unknown ROM status value\n", fsr);
635 dev_printk(level, sdev->dev,
640 dev_printk(level, sdev->dev, "%#010x: module: %s, state: %s, %s\n",
645 error_code = snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg + 4);
655 dev_printk(level, sdev->dev, "status code: %#x (%s)\n", error_code,
658 dev_printk(level, sdev->dev, "error code: %#x (%s)\n", error_code,
662 static void hda_dsp_get_registers(struct snd_sof_dev *sdev,
667 u32 offset = sdev->dsp_oops_offset;
670 sof_mailbox_read(sdev, offset, xoops, sizeof(*xoops));
676 dev_err(sdev->dev, "invalid header size 0x%x. FW oops is bogus\n",
681 sof_block_read(sdev, sdev->mmio_bar, offset,
686 sof_block_read(sdev, sdev->mmio_bar, offset, stack,
691 static void hda_dsp_dump_ext_rom_status(struct snd_sof_dev *sdev, const char *level,
700 chip = get_chip_info(sdev->pdata);
702 value = snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->rom_status_reg + i * 0x4);
706 dev_printk(level, sdev->dev, "extended rom status: %s", msg);
710 void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags)
718 hda_dsp_get_state(sdev, level);
721 if (flags & SOF_DBG_DUMP_REGS && sdev->pdata->ipc_type == SOF_IPC) {
722 u32 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_FW_STATUS);
723 u32 panic = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_FW_TRACEP);
725 hda_dsp_get_registers(sdev, &xoops, &panic_info, stack,
727 sof_print_oops_and_stack(sdev, level, status, panic, &xoops,
730 hda_dsp_dump_ext_rom_status(sdev, level, flags);
734 static bool hda_check_ipc_irq(struct snd_sof_dev *sdev)
738 chip = get_chip_info(sdev->pdata);
740 return chip->check_ipc_irq(sdev);
745 void hda_ipc_irq_dump(struct snd_sof_dev *sdev)
754 adspis = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIS);
755 intsts = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS);
756 intctl = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL);
757 ppsts = snd_sof_dsp_read(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPSTS);
758 rirbsts = snd_sof_dsp_read8(sdev, HDA_DSP_HDA_BAR, AZX_REG_RIRBSTS);
760 dev_err(sdev->dev, "hda irq intsts 0x%8.8x intlctl 0x%8.8x rirb %2.2x\n",
762 dev_err(sdev->dev, "dsp irq ppsts 0x%8.8x adspis 0x%8.8x\n", ppsts, adspis);
765 void hda_ipc_dump(struct snd_sof_dev *sdev)
771 hda_ipc_irq_dump(sdev);
774 hipcie = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCIE);
775 hipct = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCT);
776 hipcctl = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCCTL);
780 dev_err(sdev->dev, "host status 0x%8.8x dsp status 0x%8.8x mask 0x%8.8x\n",
784 void hda_ipc4_dump(struct snd_sof_dev *sdev)
788 hda_ipc_irq_dump(sdev);
790 hipci = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCI);
791 hipcie = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCIE);
792 hipct = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCT);
793 hipcte = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCTE);
794 hipcctl = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCCTL);
798 dev_err(sdev->dev, "Host IPC initiator: %#x|%#x, target: %#x|%#x, ctl: %#x\n",
802 bool hda_ipc4_tx_is_busy(struct snd_sof_dev *sdev)
804 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
808 val = snd_sof_dsp_read(sdev, HDA_DSP_BAR, chip->ipc_req);
813 static int hda_init(struct snd_sof_dev *sdev)
817 struct pci_dev *pci = to_pci_dev(sdev->dev);
820 hbus = sof_to_hbus(sdev);
821 bus = sof_to_bus(sdev);
824 sof_hda_bus_init(sdev, &pci->dev);
847 sdev->bar[HDA_DSP_HDA_BAR] = bus->remap_addr;
850 ret = hda_codec_i915_init(sdev);
852 dev_warn(sdev->dev, "init of i915 and HDMI codec failed\n");
855 ret = hda_dsp_ctrl_get_caps(sdev);
857 dev_err(sdev->dev, "error: get caps error\n");
862 static int check_dmic_num(struct snd_sof_dev *sdev)
864 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
870 dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt);
874 dev_dbg(sdev->dev,
881 dev_dbg(sdev->dev, "invalid dmic_number %d\n", dmic_num);
888 static int check_nhlt_ssp_mask(struct snd_sof_dev *sdev)
890 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
901 dev_info(sdev->dev, "NHLT_DEVICE_I2S detected, ssp_mask %#x\n", ssp_mask);
907 static int check_nhlt_ssp_mclk_mask(struct snd_sof_dev *sdev, int ssp_num)
909 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
921 static const char *fixup_tplg_name(struct snd_sof_dev *sdev,
938 tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
946 static int dmic_detect_topology_fixup(struct snd_sof_dev *sdev,
956 dmic_num = check_dmic_num(sdev);
981 fixed_tplg_filename = fixup_tplg_name(sdev, default_tplg_filename,
988 dev_info(sdev->dev, "DMICs detected in NHLT tables: %d\n", dmic_num);
995 static int hda_init_caps(struct snd_sof_dev *sdev)
997 u32 interface_mask = hda_get_interface_mask(sdev);
998 struct hdac_bus *bus = sof_to_bus(sdev);
999 struct snd_sof_pdata *pdata = sdev->pdata;
1006 dev_dbg(sdev->dev, "PP capability, will probe DSP later.\n");
1009 ret = hda_dsp_ctrl_init_chip(sdev);
1023 ret = hda_sdw_acpi_scan(sdev);
1025 dev_dbg(sdev->dev, "skipping SoundWire, not detected with ACPI scan\n");
1031 dev_dbg(sdev->dev, "skipping SoundWire, no links enabled\n");
1042 ret = hda_sdw_probe(sdev);
1044 dev_err(sdev->dev, "error: SoundWire probe error\n");
1051 hda_codec_probe_bus(sdev);
1054 hda_codec_i915_display_power(sdev, false);
1063 struct snd_sof_dev *sdev = context;
1069 if (snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS) &
1073 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR,
1086 struct snd_sof_dev *sdev = context;
1087 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
1090 if (hda_dsp_check_stream_irq(sdev)) {
1091 trace_sof_intel_hda_irq(sdev, "stream");
1092 hda_dsp_stream_threaded_handler(irq, sdev);
1095 if (hda_check_ipc_irq(sdev)) {
1096 trace_sof_intel_hda_irq(sdev, "ipc");
1097 sof_ops(sdev)->irq_thread(irq, sdev);
1100 if (hda_dsp_check_sdw_irq(sdev)) {
1101 trace_sof_intel_hda_irq(sdev, "sdw");
1105 if (hda_sdw_check_wakeen_irq(sdev)) {
1106 trace_sof_intel_hda_irq(sdev, "wakeen");
1107 hda_sdw_process_wakeen(sdev);
1110 hda_codec_check_for_state_change(sdev);
1113 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR,
1121 int hda_dsp_probe(struct snd_sof_dev *sdev)
1123 struct pci_dev *pci = to_pci_dev(sdev->dev);
1129 if (!sdev->dspless_mode_selected) {
1138 dev_err(sdev->dev, "the DSP is not enabled on this platform, aborting probe\n");
1141 dev_err(sdev->dev, "unknown PCI class/subclass/prog-if 0x%06x found, aborting probe\n",
1145 dev_info(sdev->dev, "DSP detected with PCI class/subclass/prog-if 0x%06x\n",
1149 chip = get_chip_info(sdev->pdata);
1151 dev_err(sdev->dev, "error: no such device supported, chip id:%x\n",
1157 sdev->num_cores = chip->cores_num;
1159 hdev = devm_kzalloc(sdev->dev, sizeof(*hdev), GFP_KERNEL);
1162 sdev->pdata->hw_pdata = hdev;
1165 hdev->dmic_dev = platform_device_register_data(sdev->dev, "dmic-codec",
1169 dev_err(sdev->dev, "error: failed to create DMIC device\n");
1180 hdev->no_ipc_position = sof_ops(sdev)->pcm_pointer ? 1 : 0;
1183 if (sdev->dspless_mode_selected)
1187 bus = sof_to_bus(sdev);
1188 ret = hda_init(sdev);
1192 if (sdev->dspless_mode_selected)
1196 sdev->bar[HDA_DSP_BAR] = pci_ioremap_bar(pci, HDA_DSP_BAR);
1197 if (!sdev->bar[HDA_DSP_BAR]) {
1198 dev_err(sdev->dev, "error: ioremap error\n");
1203 sdev->mmio_bar = HDA_DSP_BAR;
1204 sdev->mailbox_bar = HDA_DSP_BAR;
1209 dev_dbg(sdev->dev, "DMA mask is 32 bit\n");
1215 ret = hda_dsp_stream_init(sdev);
1217 dev_err(sdev->dev, "error: failed to init streams\n");
1232 dev_info(sdev->dev, "use msi interrupt mode\n");
1233 sdev->ipc_irq = pci_irq_vector(pci, 0);
1235 sdev->msi_enabled = true;
1238 if (!sdev->msi_enabled) {
1239 dev_info(sdev->dev, "use legacy interrupt mode\n");
1244 sdev->ipc_irq = pci->irq;
1247 dev_dbg(sdev->dev, "using IPC IRQ %d\n", sdev->ipc_irq);
1248 ret = request_threaded_irq(sdev->ipc_irq, hda_dsp_interrupt_handler,
1250 IRQF_SHARED, "AudioDSP", sdev);
1252 dev_err(sdev->dev, "error: failed to register IPC IRQ %d\n",
1253 sdev->ipc_irq);
1264 snd_sof_pci_update_bits(sdev, PCI_TCSEL, 0x07, 0);
1267 ret = hda_init_caps(sdev);
1271 if (!sdev->dspless_mode_selected) {
1273 hda_dsp_ctrl_ppcap_enable(sdev, true);
1274 hda_dsp_ctrl_ppcap_int_enable(sdev, true);
1277 sdev->dsp_box.offset = HDA_DSP_MBOX_UPLINK_OFFSET;
1284 hdev->nhlt = intel_nhlt_init(sdev->dev);
1289 free_irq(sdev->ipc_irq, sdev);
1291 if (sdev->msi_enabled)
1294 hda_dsp_stream_free(sdev);
1296 if (!sdev->dspless_mode_selected)
1297 iounmap(sdev->bar[HDA_DSP_BAR]);
1301 hda_codec_i915_exit(sdev);
1306 int hda_dsp_remove(struct snd_sof_dev *sdev)
1308 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
1310 struct hdac_bus *bus = sof_to_bus(sdev);
1311 struct pci_dev *pci = to_pci_dev(sdev->dev);
1317 if (!sdev->dspless_mode_selected)
1321 hda_codec_device_remove(sdev);
1323 hda_sdw_exit(sdev);
1328 if (!sdev->dspless_mode_selected) {
1330 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL,
1335 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL,
1338 if (sdev->dspless_mode_selected)
1343 chip->power_down_dsp(sdev);
1346 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL,
1350 free_irq(sdev->ipc_irq, sdev);
1351 if (sdev->msi_enabled)
1354 hda_dsp_stream_free(sdev);
1356 hda_bus_ml_free(sof_to_bus(sdev));
1358 if (!sdev->dspless_mode_selected)
1359 iounmap(sdev->bar[HDA_DSP_BAR]);
1363 sof_hda_bus_exit(sdev);
1365 hda_codec_i915_exit(sdev);
1370 int hda_power_down_dsp(struct snd_sof_dev *sdev)
1372 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata;
1375 return hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask);
1379 static void hda_generic_machine_select(struct snd_sof_dev *sdev,
1382 struct hdac_bus *bus = sof_to_bus(sdev);
1385 struct snd_sof_pdata *pdata = sdev->pdata;
1433 ret = dmic_detect_topology_fixup(sdev, &tplg_filename, idisp_str, &dmic_num,
1454 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata;
1471 static void hda_generic_machine_select(struct snd_sof_dev *sdev,
1479 static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev)
1481 struct snd_sof_pdata *pdata = sdev->pdata;
1522 if (!snd_soc_acpi_sdw_link_slaves_found(sdev->dev, link,
1538 mach->mach_params.platform = dev_name(sdev->dev);
1557 ret = dmic_detect_topology_fixup(sdev, &tplg_filename, "",
1566 dev_dbg(sdev->dev,
1574 dev_info(sdev->dev, "No SoundWire machine driver found\n");
1580 static struct snd_soc_acpi_mach *hda_sdw_machine_select(struct snd_sof_dev *sdev)
1587 struct snd_sof_dev *sdev)
1589 struct snd_sof_pdata *pdata = sdev->pdata;
1594 mach_params->platform = dev_name(sdev->dev);
1603 struct snd_soc_acpi_mach *hda_machine_select(struct snd_sof_dev *sdev)
1605 u32 interface_mask = hda_get_interface_mask(sdev);
1606 struct snd_sof_pdata *sof_pdata = sdev->pdata;
1629 mach->mach_params.dmic_num = check_dmic_num(sdev);
1634 tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
1653 mach->mach_params.i2s_link_mask = check_nhlt_ssp_mask(sdev);
1658 const struct sof_intel_dsp_desc *chip = get_chip_info(sdev->pdata);
1664 dev_warn(sdev->dev, "More than one SSP exposed by NHLT, choosing MSB\n");
1670 dev_err(sdev->dev, "Invalid SSP %d, max on this platform is %d\n",
1675 tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
1686 mclk_mask = check_nhlt_ssp_mclk_mask(sdev, ssp_num);
1689 dev_err(sdev->dev, "Invalid MCLK configuration\n");
1693 dev_dbg(sdev->dev, "MCLK mask %#x found in NHLT\n", mclk_mask);
1696 dev_info(sdev->dev, "Overriding topology with MCLK mask %#x from NHLT\n", mclk_mask);
1697 sdev->mclk_id_override = true;
1698 sdev->mclk_id_quirk = (mclk_mask & BIT(0)) ? 0 : 1;
1703 tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL,
1715 dev_info(sdev->dev, "Overriding topology with MCLK %d from kernel_parameter\n", mclk_id_override);
1716 sdev->mclk_id_override = true;
1717 sdev->mclk_id_quirk = mclk_id_override;
1723 mach = hda_sdw_machine_select(sdev);
1729 hda_generic_machine_select(sdev, &mach);
1731 dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n");
1750 int hda_register_clients(struct snd_sof_dev *sdev)
1752 return hda_probes_register(sdev);
1755 void hda_unregister_clients(struct snd_sof_dev *sdev)
1757 hda_probes_unregister(sdev);