Lines Matching refs:sdev
57 struct snd_sof_dev *sdev = dev_get_drvdata(dev); in sdw_params_stream() local
74 ret = sof_ipc_tx_message(sdev->ipc, in sdw_params_stream()
78 dev_err(sdev->dev, in sdw_params_stream()
89 struct snd_sof_dev *sdev = dev_get_drvdata(dev); in sdw_free_stream() local
105 ret = sof_ipc_tx_message(sdev->ipc, in sdw_free_stream()
109 dev_err(sdev->dev, in sdw_free_stream()
122 void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable) in hda_sdw_int_enable() argument
124 sdw_intel_enable_irq(sdev->bar[HDA_DSP_BAR], enable); in hda_sdw_int_enable()
127 static int hda_sdw_acpi_scan(struct snd_sof_dev *sdev) in hda_sdw_acpi_scan() argument
133 handle = ACPI_HANDLE(sdev->dev); in hda_sdw_acpi_scan()
136 hdev = sdev->pdata->hw_pdata; in hda_sdw_acpi_scan()
145 static int hda_sdw_probe(struct snd_sof_dev *sdev) in hda_sdw_probe() argument
151 hdev = sdev->pdata->hw_pdata; in hda_sdw_probe()
155 res.mmio_base = sdev->bar[HDA_DSP_BAR]; in hda_sdw_probe()
156 res.irq = sdev->ipc_irq; in hda_sdw_probe()
158 res.parent = sdev->dev; in hda_sdw_probe()
160 res.dev = sdev->dev; in hda_sdw_probe()
175 dev_err(sdev->dev, "error: SoundWire probe failed\n"); in hda_sdw_probe()
185 int hda_sdw_startup(struct snd_sof_dev *sdev) in hda_sdw_startup() argument
189 hdev = sdev->pdata->hw_pdata; in hda_sdw_startup()
197 static int hda_sdw_exit(struct snd_sof_dev *sdev) in hda_sdw_exit() argument
201 hdev = sdev->pdata->hw_pdata; in hda_sdw_exit()
203 hda_sdw_int_enable(sdev, false); in hda_sdw_exit()
212 static bool hda_dsp_check_sdw_irq(struct snd_sof_dev *sdev) in hda_dsp_check_sdw_irq() argument
218 hdev = sdev->pdata->hw_pdata; in hda_dsp_check_sdw_irq()
224 irq_status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIS2); in hda_dsp_check_sdw_irq()
243 static bool hda_sdw_check_wakeen_irq(struct snd_sof_dev *sdev) in hda_sdw_check_wakeen_irq() argument
247 hdev = sdev->pdata->hw_pdata; in hda_sdw_check_wakeen_irq()
249 snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_sdw_check_wakeen_irq()
256 void hda_sdw_process_wakeen(struct snd_sof_dev *sdev) in hda_sdw_process_wakeen() argument
260 hdev = sdev->pdata->hw_pdata; in hda_sdw_process_wakeen()
320 static void hda_dsp_get_status_skl(struct snd_sof_dev *sdev) in hda_dsp_get_status_skl() argument
325 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_get_status_skl()
330 dev_err(sdev->dev, "%s - code %8.8x\n", in hda_dsp_get_status_skl()
337 dev_dbg(sdev->dev, "unknown ROM status value %8.8x\n", status); in hda_dsp_get_status_skl()
340 static void hda_dsp_get_status(struct snd_sof_dev *sdev) in hda_dsp_get_status() argument
345 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_get_status()
350 dev_err(sdev->dev, "%s - code %8.8x\n", in hda_dsp_get_status()
357 dev_dbg(sdev->dev, "unknown ROM status value %8.8x\n", status); in hda_dsp_get_status()
360 static void hda_dsp_get_registers(struct snd_sof_dev *sdev, in hda_dsp_get_registers() argument
365 u32 offset = sdev->dsp_oops_offset; in hda_dsp_get_registers()
368 sof_mailbox_read(sdev, offset, xoops, sizeof(*xoops)); in hda_dsp_get_registers()
374 dev_err(sdev->dev, "invalid header size 0x%x. FW oops is bogus\n", in hda_dsp_get_registers()
379 sof_block_read(sdev, sdev->mmio_bar, offset, in hda_dsp_get_registers()
384 sof_block_read(sdev, sdev->mmio_bar, offset, stack, in hda_dsp_get_registers()
388 void hda_dsp_dump_skl(struct snd_sof_dev *sdev, u32 flags) in hda_dsp_dump_skl() argument
396 hda_dsp_get_status_skl(sdev); in hda_dsp_dump_skl()
399 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_dump_skl()
403 panic = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_dump_skl()
406 if (sdev->fw_state == SOF_FW_BOOT_COMPLETE) { in hda_dsp_dump_skl()
407 hda_dsp_get_registers(sdev, &xoops, &panic_info, stack, in hda_dsp_dump_skl()
409 snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, in hda_dsp_dump_skl()
412 dev_err(sdev->dev, "error: status = 0x%8.8x panic = 0x%8.8x\n", in hda_dsp_dump_skl()
414 hda_dsp_get_status_skl(sdev); in hda_dsp_dump_skl()
419 static void hda_dsp_dump_ext_rom_status(struct snd_sof_dev *sdev) in hda_dsp_dump_ext_rom_status() argument
421 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_dump_ext_rom_status()
428 value = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_ROM_STATUS + i * 0x4); in hda_dsp_dump_ext_rom_status()
432 sof_dev_dbg_or_err(sdev->dev, hda->boot_iteration == HDA_FW_BOOT_ATTEMPTS, in hda_dsp_dump_ext_rom_status()
437 void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags) in hda_dsp_dump() argument
439 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_dump()
446 hda_dsp_get_status(sdev); in hda_dsp_dump()
449 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_dump()
451 panic = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_FW_TRACEP); in hda_dsp_dump()
453 if (sdev->fw_state == SOF_FW_BOOT_COMPLETE) { in hda_dsp_dump()
454 hda_dsp_get_registers(sdev, &xoops, &panic_info, stack, in hda_dsp_dump()
456 snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, in hda_dsp_dump()
459 sof_dev_dbg_or_err(sdev->dev, hda->boot_iteration == HDA_FW_BOOT_ATTEMPTS, in hda_dsp_dump()
463 hda_dsp_dump_ext_rom_status(sdev); in hda_dsp_dump()
464 hda_dsp_get_status(sdev); in hda_dsp_dump()
468 void hda_ipc_irq_dump(struct snd_sof_dev *sdev) in hda_ipc_irq_dump() argument
470 struct hdac_bus *bus = sof_to_bus(sdev); in hda_ipc_irq_dump()
478 adspis = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIS); in hda_ipc_irq_dump()
479 intsts = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS); in hda_ipc_irq_dump()
480 intctl = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL); in hda_ipc_irq_dump()
481 ppsts = snd_sof_dsp_read(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPSTS); in hda_ipc_irq_dump()
484 dev_err(sdev->dev, in hda_ipc_irq_dump()
487 dev_err(sdev->dev, in hda_ipc_irq_dump()
492 void hda_ipc_dump(struct snd_sof_dev *sdev) in hda_ipc_dump() argument
498 hda_ipc_irq_dump(sdev); in hda_ipc_dump()
501 hipcie = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCIE); in hda_ipc_dump()
502 hipct = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCT); in hda_ipc_dump()
503 hipcctl = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCCTL); in hda_ipc_dump()
507 dev_err(sdev->dev, in hda_ipc_dump()
512 static int hda_init(struct snd_sof_dev *sdev) in hda_init() argument
516 struct pci_dev *pci = to_pci_dev(sdev->dev); in hda_init()
519 hbus = sof_to_hbus(sdev); in hda_init()
520 bus = sof_to_bus(sdev); in hda_init()
545 sdev->bar[HDA_DSP_HDA_BAR] = bus->remap_addr; in hda_init()
548 ret = hda_codec_i915_init(sdev); in hda_init()
550 dev_warn(sdev->dev, "init of i915 and HDMI codec failed\n"); in hda_init()
553 ret = hda_dsp_ctrl_get_caps(sdev); in hda_init()
555 dev_err(sdev->dev, "error: get caps error\n"); in hda_init()
562 static int check_nhlt_dmic(struct snd_sof_dev *sdev) in check_nhlt_dmic() argument
567 nhlt = intel_nhlt_init(sdev->dev); in check_nhlt_dmic()
569 dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt); in check_nhlt_dmic()
578 static const char *fixup_tplg_name(struct snd_sof_dev *sdev, in fixup_tplg_name() argument
587 filename = devm_kstrdup(sdev->dev, sof_tplg_filename, GFP_KERNEL); in fixup_tplg_name()
594 tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL, in fixup_tplg_name()
605 static int hda_init_caps(struct snd_sof_dev *sdev) in hda_init_caps() argument
607 struct hdac_bus *bus = sof_to_bus(sdev); in hda_init_caps()
608 struct snd_sof_pdata *pdata = sdev->pdata; in hda_init_caps()
620 dev_dbg(sdev->dev, "PP capability, will probe DSP later.\n"); in hda_init_caps()
623 ret = hda_dsp_ctrl_init_chip(sdev, true); in hda_init_caps()
631 ret = hda_sdw_acpi_scan(sdev); in hda_init_caps()
633 dev_dbg(sdev->dev, "skipping SoundWire, not detected with ACPI scan\n"); in hda_init_caps()
639 dev_dbg(sdev->dev, "skipping SoundWire, no links enabled\n"); in hda_init_caps()
650 ret = hda_sdw_probe(sdev); in hda_init_caps()
652 dev_err(sdev->dev, "error: SoundWire probe error\n"); in hda_init_caps()
663 hda_codec_probe_bus(sdev, hda_codec_use_common_hdmi); in hda_init_caps()
666 hda_codec_i915_display_power(sdev, false); in hda_init_caps()
690 struct snd_sof_dev *sdev = context; in hda_dsp_interrupt_handler() local
696 if (snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS) & in hda_dsp_interrupt_handler()
700 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, in hda_dsp_interrupt_handler()
713 struct snd_sof_dev *sdev = context; in hda_dsp_interrupt_thread() local
714 struct sof_intel_hda_dev *hdev = sdev->pdata->hw_pdata; in hda_dsp_interrupt_thread()
717 if (hda_dsp_check_stream_irq(sdev)) in hda_dsp_interrupt_thread()
718 hda_dsp_stream_threaded_handler(irq, sdev); in hda_dsp_interrupt_thread()
720 if (hda_dsp_check_ipc_irq(sdev)) in hda_dsp_interrupt_thread()
721 sof_ops(sdev)->irq_thread(irq, sdev); in hda_dsp_interrupt_thread()
723 if (hda_dsp_check_sdw_irq(sdev)) in hda_dsp_interrupt_thread()
726 if (hda_sdw_check_wakeen_irq(sdev)) in hda_dsp_interrupt_thread()
727 hda_sdw_process_wakeen(sdev); in hda_dsp_interrupt_thread()
730 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, in hda_dsp_interrupt_thread()
738 int hda_dsp_probe(struct snd_sof_dev *sdev) in hda_dsp_probe() argument
740 struct pci_dev *pci = to_pci_dev(sdev->dev); in hda_dsp_probe()
754 dev_err(sdev->dev, "error: the DSP is not enabled on this platform, aborting probe\n"); in hda_dsp_probe()
757 …dev_err(sdev->dev, "error: unknown PCI class/subclass/prog-if 0x%06x found, aborting probe\n", pci… in hda_dsp_probe()
760 dev_info(sdev->dev, "DSP detected with PCI class/subclass/prog-if 0x%06x\n", pci->class); in hda_dsp_probe()
762 chip = get_chip_info(sdev->pdata); in hda_dsp_probe()
764 dev_err(sdev->dev, "error: no such device supported, chip id:%x\n", in hda_dsp_probe()
770 hdev = devm_kzalloc(sdev->dev, sizeof(*hdev), GFP_KERNEL); in hda_dsp_probe()
773 sdev->pdata->hw_pdata = hdev; in hda_dsp_probe()
776 hdev->dmic_dev = platform_device_register_data(sdev->dev, "dmic-codec", in hda_dsp_probe()
780 dev_err(sdev->dev, "error: failed to create DMIC device\n"); in hda_dsp_probe()
791 hdev->no_ipc_position = sof_ops(sdev)->pcm_pointer ? 1 : 0; in hda_dsp_probe()
795 bus = sof_to_bus(sdev); in hda_dsp_probe()
796 ret = hda_init(sdev); in hda_dsp_probe()
802 sdev->bar[HDA_DSP_BAR] = pci_ioremap_bar(pci, HDA_DSP_BAR); in hda_dsp_probe()
804 if (!sdev->bar[HDA_DSP_BAR]) { in hda_dsp_probe()
805 dev_err(sdev->dev, "error: ioremap error\n"); in hda_dsp_probe()
810 sdev->mmio_bar = HDA_DSP_BAR; in hda_dsp_probe()
811 sdev->mailbox_bar = HDA_DSP_BAR; in hda_dsp_probe()
815 dev_dbg(sdev->dev, "DMA mask is 64 bit\n"); in hda_dsp_probe()
818 dev_dbg(sdev->dev, "DMA mask is 32 bit\n"); in hda_dsp_probe()
824 ret = hda_dsp_stream_init(sdev); in hda_dsp_probe()
826 dev_err(sdev->dev, "error: failed to init streams\n"); in hda_dsp_probe()
841 dev_info(sdev->dev, "use msi interrupt mode\n"); in hda_dsp_probe()
842 sdev->ipc_irq = pci_irq_vector(pci, 0); in hda_dsp_probe()
844 sdev->msi_enabled = true; in hda_dsp_probe()
847 if (!sdev->msi_enabled) { in hda_dsp_probe()
848 dev_info(sdev->dev, "use legacy interrupt mode\n"); in hda_dsp_probe()
853 sdev->ipc_irq = pci->irq; in hda_dsp_probe()
856 dev_dbg(sdev->dev, "using IPC IRQ %d\n", sdev->ipc_irq); in hda_dsp_probe()
857 ret = request_threaded_irq(sdev->ipc_irq, hda_dsp_interrupt_handler, in hda_dsp_probe()
859 IRQF_SHARED, "AudioDSP", sdev); in hda_dsp_probe()
861 dev_err(sdev->dev, "error: failed to register IPC IRQ %d\n", in hda_dsp_probe()
862 sdev->ipc_irq); in hda_dsp_probe()
873 snd_sof_pci_update_bits(sdev, PCI_TCSEL, 0x07, 0); in hda_dsp_probe()
876 ret = hda_init_caps(sdev); in hda_dsp_probe()
881 hda_dsp_ctrl_ppcap_enable(sdev, true); in hda_dsp_probe()
882 hda_dsp_ctrl_ppcap_int_enable(sdev, true); in hda_dsp_probe()
885 sdev->dsp_box.offset = HDA_DSP_MBOX_UPLINK_OFFSET; in hda_dsp_probe()
892 free_irq(sdev->ipc_irq, sdev); in hda_dsp_probe()
894 if (sdev->msi_enabled) in hda_dsp_probe()
897 hda_dsp_stream_free(sdev); in hda_dsp_probe()
899 iounmap(sdev->bar[HDA_DSP_BAR]); in hda_dsp_probe()
902 hda_codec_i915_exit(sdev); in hda_dsp_probe()
907 int hda_dsp_remove(struct snd_sof_dev *sdev) in hda_dsp_remove() argument
909 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_remove()
910 struct hdac_bus *bus = sof_to_bus(sdev); in hda_dsp_remove()
911 struct pci_dev *pci = to_pci_dev(sdev->dev); in hda_dsp_remove()
922 hda_sdw_exit(sdev); in hda_dsp_remove()
928 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL, in hda_dsp_remove()
932 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL, in hda_dsp_remove()
937 hda_dsp_core_reset_power_down(sdev, chip->host_managed_cores_mask); in hda_dsp_remove()
940 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL, in hda_dsp_remove()
943 free_irq(sdev->ipc_irq, sdev); in hda_dsp_remove()
944 if (sdev->msi_enabled) in hda_dsp_remove()
947 hda_dsp_stream_free(sdev); in hda_dsp_remove()
952 iounmap(sdev->bar[HDA_DSP_BAR]); in hda_dsp_remove()
958 hda_codec_i915_exit(sdev); in hda_dsp_remove()
964 static int hda_generic_machine_select(struct snd_sof_dev *sdev) in hda_generic_machine_select() argument
966 struct hdac_bus *bus = sof_to_bus(sdev); in hda_generic_machine_select()
969 struct snd_sof_pdata *pdata = sdev->pdata; in hda_generic_machine_select()
1012 dmic_num = check_nhlt_dmic(sdev); in hda_generic_machine_select()
1038 tplg_filename = fixup_tplg_name(sdev, tplg_filename, in hda_generic_machine_select()
1064 static int hda_generic_machine_select(struct snd_sof_dev *sdev) in hda_generic_machine_select() argument
1072 static bool link_slaves_found(struct snd_sof_dev *sdev, in link_slaves_found() argument
1076 struct hdac_bus *bus = sof_to_bus(sdev); in link_slaves_found()
1118 static int hda_sdw_machine_select(struct snd_sof_dev *sdev) in hda_sdw_machine_select() argument
1120 struct snd_sof_pdata *pdata = sdev->pdata; in hda_sdw_machine_select()
1122 struct hdac_bus *bus = sof_to_bus(sdev); in hda_sdw_machine_select()
1162 if (!link_slaves_found(sdev, link, hdev->sdw)) in hda_sdw_machine_select()
1177 mach->mach_params.platform = dev_name(sdev->dev); in hda_sdw_machine_select()
1181 dev_info(sdev->dev, in hda_sdw_machine_select()
1189 static int hda_sdw_machine_select(struct snd_sof_dev *sdev) in hda_sdw_machine_select() argument
1204 void hda_machine_select(struct snd_sof_dev *sdev) in hda_machine_select() argument
1206 struct snd_sof_pdata *sof_pdata = sdev->pdata; in hda_machine_select()
1230 hda_sdw_machine_select(sdev); in hda_machine_select()
1236 hda_generic_machine_select(sdev); in hda_machine_select()
1239 dev_warn(sdev->dev, "warning: No matching ASoC machine driver found\n"); in hda_machine_select()