Lines Matching refs:sdev
83 static void hda_dsp_get_status_skl(struct snd_sof_dev *sdev) in hda_dsp_get_status_skl() argument
88 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_get_status_skl()
93 dev_err(sdev->dev, "%s - code %8.8x\n", in hda_dsp_get_status_skl()
100 dev_dbg(sdev->dev, "unknown ROM status value %8.8x\n", status); in hda_dsp_get_status_skl()
103 static void hda_dsp_get_status(struct snd_sof_dev *sdev) in hda_dsp_get_status() argument
108 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_get_status()
113 dev_err(sdev->dev, "%s - code %8.8x\n", in hda_dsp_get_status()
120 dev_dbg(sdev->dev, "unknown ROM status value %8.8x\n", status); in hda_dsp_get_status()
123 static void hda_dsp_get_registers(struct snd_sof_dev *sdev, in hda_dsp_get_registers() argument
128 u32 offset = sdev->dsp_oops_offset; in hda_dsp_get_registers()
131 sof_mailbox_read(sdev, offset, xoops, sizeof(*xoops)); in hda_dsp_get_registers()
137 dev_err(sdev->dev, "invalid header size 0x%x. FW oops is bogus\n", in hda_dsp_get_registers()
142 sof_block_read(sdev, sdev->mmio_bar, offset, in hda_dsp_get_registers()
147 sof_block_read(sdev, sdev->mmio_bar, offset, stack, in hda_dsp_get_registers()
151 void hda_dsp_dump_skl(struct snd_sof_dev *sdev, u32 flags) in hda_dsp_dump_skl() argument
159 hda_dsp_get_status_skl(sdev); in hda_dsp_dump_skl()
162 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_dump_skl()
166 panic = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_dump_skl()
169 if (sdev->boot_complete) { in hda_dsp_dump_skl()
170 hda_dsp_get_registers(sdev, &xoops, &panic_info, stack, in hda_dsp_dump_skl()
172 snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, in hda_dsp_dump_skl()
175 dev_err(sdev->dev, "error: status = 0x%8.8x panic = 0x%8.8x\n", in hda_dsp_dump_skl()
177 hda_dsp_get_status_skl(sdev); in hda_dsp_dump_skl()
181 void hda_dsp_dump(struct snd_sof_dev *sdev, u32 flags) in hda_dsp_dump() argument
189 hda_dsp_get_status(sdev); in hda_dsp_dump()
192 status = snd_sof_dsp_read(sdev, HDA_DSP_BAR, in hda_dsp_dump()
194 panic = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_SRAM_REG_FW_TRACEP); in hda_dsp_dump()
196 if (sdev->boot_complete) { in hda_dsp_dump()
197 hda_dsp_get_registers(sdev, &xoops, &panic_info, stack, in hda_dsp_dump()
199 snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, in hda_dsp_dump()
202 dev_err(sdev->dev, "error: status = 0x%8.8x panic = 0x%8.8x\n", in hda_dsp_dump()
204 hda_dsp_get_status(sdev); in hda_dsp_dump()
208 void hda_ipc_irq_dump(struct snd_sof_dev *sdev) in hda_ipc_irq_dump() argument
210 struct hdac_bus *bus = sof_to_bus(sdev); in hda_ipc_irq_dump()
218 adspis = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_ADSPIS); in hda_ipc_irq_dump()
219 intsts = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTSTS); in hda_ipc_irq_dump()
220 intctl = snd_sof_dsp_read(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL); in hda_ipc_irq_dump()
221 ppsts = snd_sof_dsp_read(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPSTS); in hda_ipc_irq_dump()
224 dev_err(sdev->dev, in hda_ipc_irq_dump()
227 dev_err(sdev->dev, in hda_ipc_irq_dump()
232 void hda_ipc_dump(struct snd_sof_dev *sdev) in hda_ipc_dump() argument
238 hda_ipc_irq_dump(sdev); in hda_ipc_dump()
241 hipcie = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCIE); in hda_ipc_dump()
242 hipct = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCT); in hda_ipc_dump()
243 hipcctl = snd_sof_dsp_read(sdev, HDA_DSP_BAR, HDA_DSP_REG_HIPCCTL); in hda_ipc_dump()
247 dev_err(sdev->dev, in hda_ipc_dump()
252 static int hda_init(struct snd_sof_dev *sdev) in hda_init() argument
256 struct pci_dev *pci = to_pci_dev(sdev->dev); in hda_init()
259 hbus = sof_to_hbus(sdev); in hda_init()
260 bus = sof_to_bus(sdev); in hda_init()
288 sdev->bar[HDA_DSP_HDA_BAR] = bus->remap_addr; in hda_init()
291 ret = hda_dsp_ctrl_get_caps(sdev); in hda_init()
293 dev_err(sdev->dev, "error: get caps error\n"); in hda_init()
300 static int check_nhlt_dmic(struct snd_sof_dev *sdev) in check_nhlt_dmic() argument
305 nhlt = intel_nhlt_init(sdev->dev); in check_nhlt_dmic()
307 dmic_num = intel_nhlt_get_dmic_geo(sdev->dev, nhlt); in check_nhlt_dmic()
316 static const char *fixup_tplg_name(struct snd_sof_dev *sdev, in fixup_tplg_name() argument
325 filename = devm_kstrdup(sdev->dev, sof_tplg_filename, GFP_KERNEL); in fixup_tplg_name()
332 tplg_filename = devm_kasprintf(sdev->dev, GFP_KERNEL, in fixup_tplg_name()
343 static int hda_init_caps(struct snd_sof_dev *sdev) in hda_init_caps() argument
345 struct hdac_bus *bus = sof_to_bus(sdev); in hda_init_caps()
350 struct snd_sof_pdata *pdata = sdev->pdata; in hda_init_caps()
365 dev_dbg(sdev->dev, "PP capability, will probe DSP later.\n"); in hda_init_caps()
369 ret = hda_codec_i915_init(sdev); in hda_init_caps()
371 dev_err(sdev->dev, "error: init i915 and HDMI codec failed\n"); in hda_init_caps()
377 ret = hda_dsp_ctrl_init_chip(sdev, true); in hda_init_caps()
382 hda_codec_i915_exit(sdev); in hda_init_caps()
432 dmic_num = check_nhlt_dmic(sdev); in hda_init_caps()
452 tplg_filename = fixup_tplg_name(sdev, tplg_filename, in hda_init_caps()
455 hda_codec_i915_exit(sdev); in hda_init_caps()
467 mach_params->platform = dev_name(sdev->dev); in hda_init_caps()
471 hda_codec_probe_bus(sdev); in hda_init_caps()
473 hda_codec_i915_put(sdev); in hda_init_caps()
495 int hda_dsp_probe(struct snd_sof_dev *sdev) in hda_dsp_probe() argument
497 struct pci_dev *pci = to_pci_dev(sdev->dev); in hda_dsp_probe()
511 dev_err(sdev->dev, "error: the DSP is not enabled on this platform, aborting probe\n"); in hda_dsp_probe()
514 …dev_err(sdev->dev, "error: unknown PCI class/subclass/prog-if 0x%06x found, aborting probe\n", pci… in hda_dsp_probe()
517 dev_info(sdev->dev, "DSP detected with PCI class/subclass/prog-if 0x%06x\n", pci->class); in hda_dsp_probe()
519 chip = get_chip_info(sdev->pdata); in hda_dsp_probe()
521 dev_err(sdev->dev, "error: no such device supported, chip id:%x\n", in hda_dsp_probe()
527 hdev = devm_kzalloc(sdev->dev, sizeof(*hdev), GFP_KERNEL); in hda_dsp_probe()
530 sdev->pdata->hw_pdata = hdev; in hda_dsp_probe()
533 hdev->dmic_dev = platform_device_register_data(sdev->dev, "dmic-codec", in hda_dsp_probe()
537 dev_err(sdev->dev, "error: failed to create DMIC device\n"); in hda_dsp_probe()
548 hdev->no_ipc_position = sof_ops(sdev)->pcm_pointer ? 1 : 0; in hda_dsp_probe()
552 bus = sof_to_bus(sdev); in hda_dsp_probe()
553 ret = hda_init(sdev); in hda_dsp_probe()
559 sdev->bar[HDA_DSP_BAR] = pci_ioremap_bar(pci, HDA_DSP_BAR); in hda_dsp_probe()
561 if (!sdev->bar[HDA_DSP_BAR]) { in hda_dsp_probe()
562 dev_err(sdev->dev, "error: ioremap error\n"); in hda_dsp_probe()
567 sdev->mmio_bar = HDA_DSP_BAR; in hda_dsp_probe()
568 sdev->mailbox_bar = HDA_DSP_BAR; in hda_dsp_probe()
572 dev_dbg(sdev->dev, "DMA mask is 64 bit\n"); in hda_dsp_probe()
575 dev_dbg(sdev->dev, "DMA mask is 32 bit\n"); in hda_dsp_probe()
581 ret = hda_dsp_stream_init(sdev); in hda_dsp_probe()
583 dev_err(sdev->dev, "error: failed to init streams\n"); in hda_dsp_probe()
598 dev_info(sdev->dev, "use msi interrupt mode\n"); in hda_dsp_probe()
601 sdev->ipc_irq = hdev->irq; in hda_dsp_probe()
603 sdev->msi_enabled = true; in hda_dsp_probe()
606 if (!sdev->msi_enabled) { in hda_dsp_probe()
607 dev_info(sdev->dev, "use legacy interrupt mode\n"); in hda_dsp_probe()
613 sdev->ipc_irq = pci->irq; in hda_dsp_probe()
616 dev_dbg(sdev->dev, "using HDA IRQ %d\n", hdev->irq); in hda_dsp_probe()
621 dev_err(sdev->dev, "error: failed to register HDA IRQ %d\n", in hda_dsp_probe()
626 dev_dbg(sdev->dev, "using IPC IRQ %d\n", sdev->ipc_irq); in hda_dsp_probe()
627 ret = request_threaded_irq(sdev->ipc_irq, hda_dsp_ipc_irq_handler, in hda_dsp_probe()
628 sof_ops(sdev)->irq_thread, IRQF_SHARED, in hda_dsp_probe()
629 "AudioDSP", sdev); in hda_dsp_probe()
631 dev_err(sdev->dev, "error: failed to register IPC IRQ %d\n", in hda_dsp_probe()
632 sdev->ipc_irq); in hda_dsp_probe()
643 snd_sof_pci_update_bits(sdev, PCI_TCSEL, 0x07, 0); in hda_dsp_probe()
646 ret = hda_init_caps(sdev); in hda_dsp_probe()
651 hda_dsp_ctrl_ppcap_enable(sdev, true); in hda_dsp_probe()
652 hda_dsp_ctrl_ppcap_int_enable(sdev, true); in hda_dsp_probe()
655 init_waitqueue_head(&sdev->waitq); in hda_dsp_probe()
658 sdev->dsp_box.offset = HDA_DSP_MBOX_UPLINK_OFFSET; in hda_dsp_probe()
663 free_irq(sdev->ipc_irq, sdev); in hda_dsp_probe()
667 if (sdev->msi_enabled) in hda_dsp_probe()
670 hda_dsp_stream_free(sdev); in hda_dsp_probe()
672 iounmap(sdev->bar[HDA_DSP_BAR]); in hda_dsp_probe()
679 int hda_dsp_remove(struct snd_sof_dev *sdev) in hda_dsp_remove() argument
681 struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; in hda_dsp_remove()
682 struct hdac_bus *bus = sof_to_bus(sdev); in hda_dsp_remove()
683 struct pci_dev *pci = to_pci_dev(sdev->dev); in hda_dsp_remove()
695 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL, in hda_dsp_remove()
699 snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL, in hda_dsp_remove()
704 hda_dsp_core_reset_power_down(sdev, chip->cores_mask); in hda_dsp_remove()
707 snd_sof_dsp_update_bits(sdev, HDA_DSP_PP_BAR, SOF_HDA_REG_PP_PPCTL, in hda_dsp_remove()
710 free_irq(sdev->ipc_irq, sdev); in hda_dsp_remove()
712 if (sdev->msi_enabled) in hda_dsp_remove()
715 hda_dsp_stream_free(sdev); in hda_dsp_remove()
720 iounmap(sdev->bar[HDA_DSP_BAR]); in hda_dsp_remove()
726 hda_codec_i915_exit(sdev); in hda_dsp_remove()