Lines Matching refs:sdev

109 static void byt_host_done(struct snd_sof_dev *sdev);
110 static void byt_dsp_done(struct snd_sof_dev *sdev);
111 static void byt_get_reply(struct snd_sof_dev *sdev);
117 static void byt_get_registers(struct snd_sof_dev *sdev, in byt_get_registers() argument
122 u32 offset = sdev->dsp_oops_offset; in byt_get_registers()
125 sof_mailbox_read(sdev, offset, xoops, sizeof(*xoops)); in byt_get_registers()
131 dev_err(sdev->dev, "invalid header size 0x%x. FW oops is bogus\n", in byt_get_registers()
136 sof_mailbox_read(sdev, offset, panic_info, sizeof(*panic_info)); in byt_get_registers()
140 sof_mailbox_read(sdev, offset, stack, stack_words * sizeof(u32)); in byt_get_registers()
143 static void byt_dump(struct snd_sof_dev *sdev, u32 flags) in byt_dump() argument
151 status = snd_sof_dsp_read(sdev, BYT_DSP_BAR, SHIM_IPCD); in byt_dump()
152 panic = snd_sof_dsp_read(sdev, BYT_DSP_BAR, SHIM_IPCX); in byt_dump()
153 byt_get_registers(sdev, &xoops, &panic_info, stack, in byt_dump()
155 snd_sof_get_status(sdev, status, panic, &xoops, &panic_info, stack, in byt_dump()
165 struct snd_sof_dev *sdev = context; in byt_irq_handler() local
170 isr = snd_sof_dsp_read64(sdev, BYT_DSP_BAR, SHIM_ISRX); in byt_irq_handler()
179 struct snd_sof_dev *sdev = context; in byt_irq_thread() local
183 imrx = snd_sof_dsp_read64(sdev, BYT_DSP_BAR, SHIM_IMRX); in byt_irq_thread()
184 ipcx = snd_sof_dsp_read64(sdev, BYT_DSP_BAR, SHIM_IPCX); in byt_irq_thread()
190 snd_sof_dsp_update_bits64_unlocked(sdev, BYT_DSP_BAR, in byt_irq_thread()
195 spin_lock_irq(&sdev->ipc_lock); in byt_irq_thread()
204 byt_get_reply(sdev); in byt_irq_thread()
205 snd_sof_ipc_reply(sdev, ipcx); in byt_irq_thread()
207 byt_dsp_done(sdev); in byt_irq_thread()
209 spin_unlock_irq(&sdev->ipc_lock); in byt_irq_thread()
213 ipcd = snd_sof_dsp_read64(sdev, BYT_DSP_BAR, SHIM_IPCD); in byt_irq_thread()
217 snd_sof_dsp_update_bits64_unlocked(sdev, BYT_DSP_BAR, in byt_irq_thread()
224 snd_sof_dsp_panic(sdev, BYT_PANIC_OFFSET(ipcd) + in byt_irq_thread()
227 snd_sof_ipc_msgs_rx(sdev); in byt_irq_thread()
230 byt_host_done(sdev); in byt_irq_thread()
236 static int byt_send_msg(struct snd_sof_dev *sdev, struct snd_sof_ipc_msg *msg) in byt_send_msg() argument
239 sof_mailbox_write(sdev, sdev->host_box.offset, msg->msg_data, in byt_send_msg()
241 snd_sof_dsp_write64(sdev, BYT_DSP_BAR, SHIM_IPCX, SHIM_BYT_IPCX_BUSY); in byt_send_msg()
246 static void byt_get_reply(struct snd_sof_dev *sdev) in byt_get_reply() argument
248 struct snd_sof_ipc_msg *msg = sdev->msg; in byt_get_reply()
258 dev_warn(sdev->dev, "unexpected ipc interrupt raised!\n"); in byt_get_reply()
263 sof_mailbox_read(sdev, sdev->host_box.offset, &reply, sizeof(reply)); in byt_get_reply()
271 dev_err(sdev->dev, "error: reply expected %zu got %u bytes\n", in byt_get_reply()
278 sof_mailbox_read(sdev, sdev->host_box.offset, in byt_get_reply()
285 static int byt_get_mailbox_offset(struct snd_sof_dev *sdev) in byt_get_mailbox_offset() argument
290 static int byt_get_window_offset(struct snd_sof_dev *sdev, u32 id) in byt_get_window_offset() argument
295 static void byt_host_done(struct snd_sof_dev *sdev) in byt_host_done() argument
298 snd_sof_dsp_update_bits64_unlocked(sdev, BYT_DSP_BAR, SHIM_IPCD, in byt_host_done()
304 snd_sof_dsp_update_bits64_unlocked(sdev, BYT_DSP_BAR, SHIM_IMRX, in byt_host_done()
308 static void byt_dsp_done(struct snd_sof_dev *sdev) in byt_dsp_done() argument
311 snd_sof_dsp_update_bits64_unlocked(sdev, BYT_DSP_BAR, SHIM_IPCX, in byt_dsp_done()
315 snd_sof_dsp_update_bits64_unlocked(sdev, BYT_DSP_BAR, SHIM_IMRX, in byt_dsp_done()
323 static int byt_run(struct snd_sof_dev *sdev) in byt_run() argument
328 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_CSR, in byt_run()
331 if (!(snd_sof_dsp_read64(sdev, BYT_DSP_BAR, SHIM_CSR) & in byt_run()
337 dev_err(sdev->dev, "error: unable to run DSP firmware\n"); in byt_run()
338 byt_dump(sdev, SOF_DBG_REGS | SOF_DBG_MBOX); in byt_run()
346 static int byt_reset(struct snd_sof_dev *sdev) in byt_reset() argument
349 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_CSR, in byt_reset()
358 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_CSR, in byt_reset()
392 static int tangier_pci_probe(struct snd_sof_dev *sdev) in tangier_pci_probe() argument
394 struct snd_sof_pdata *pdata = sdev->pdata; in tangier_pci_probe()
396 struct pci_dev *pci = to_pci_dev(sdev->dev); in tangier_pci_probe()
403 dev_err(sdev->dev, "error: failed to set DMA mask %d\n", ret); in tangier_pci_probe()
411 dev_dbg(sdev->dev, "LPE PHY base at 0x%x size 0x%x", base, size); in tangier_pci_probe()
412 sdev->bar[BYT_DSP_BAR] = devm_ioremap(sdev->dev, base, size); in tangier_pci_probe()
413 if (!sdev->bar[BYT_DSP_BAR]) { in tangier_pci_probe()
414 dev_err(sdev->dev, "error: failed to ioremap LPE base 0x%x size 0x%x\n", in tangier_pci_probe()
418 dev_dbg(sdev->dev, "LPE VADDR %p\n", sdev->bar[BYT_DSP_BAR]); in tangier_pci_probe()
429 dev_info(sdev->dev, "IMR not set by BIOS. Ignoring\n"); in tangier_pci_probe()
433 dev_dbg(sdev->dev, "IMR base at 0x%x size 0x%x", base, size); in tangier_pci_probe()
434 sdev->bar[BYT_IMR_BAR] = devm_ioremap(sdev->dev, base, size); in tangier_pci_probe()
435 if (!sdev->bar[BYT_IMR_BAR]) { in tangier_pci_probe()
436 dev_err(sdev->dev, "error: failed to ioremap IMR base 0x%x size 0x%x\n", in tangier_pci_probe()
440 dev_dbg(sdev->dev, "IMR VADDR %p\n", sdev->bar[BYT_IMR_BAR]); in tangier_pci_probe()
444 sdev->ipc_irq = pci->irq; in tangier_pci_probe()
445 dev_dbg(sdev->dev, "using IRQ %d\n", sdev->ipc_irq); in tangier_pci_probe()
446 ret = devm_request_threaded_irq(sdev->dev, sdev->ipc_irq, in tangier_pci_probe()
448 0, "AudioDSP", sdev); in tangier_pci_probe()
450 dev_err(sdev->dev, "error: failed to register IRQ %d\n", in tangier_pci_probe()
451 sdev->ipc_irq); in tangier_pci_probe()
456 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRX, 0x3, 0x0); in tangier_pci_probe()
457 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRD, 0x3, 0x0); in tangier_pci_probe()
460 sdev->dsp_box.offset = MBOX_OFFSET; in tangier_pci_probe()
527 static int byt_acpi_probe(struct snd_sof_dev *sdev) in byt_acpi_probe() argument
529 struct snd_sof_pdata *pdata = sdev->pdata; in byt_acpi_probe()
532 container_of(sdev->dev, struct platform_device, dev); in byt_acpi_probe()
538 ret = dma_coerce_mask_and_coherent(sdev->dev, DMA_BIT_MASK(31)); in byt_acpi_probe()
540 dev_err(sdev->dev, "error: failed to set DMA mask %d\n", ret); in byt_acpi_probe()
551 dev_err(sdev->dev, "error: failed to get LPE base at idx %d\n", in byt_acpi_probe()
556 dev_dbg(sdev->dev, "LPE PHY base at 0x%x size 0x%x", base, size); in byt_acpi_probe()
557 sdev->bar[BYT_DSP_BAR] = devm_ioremap(sdev->dev, base, size); in byt_acpi_probe()
558 if (!sdev->bar[BYT_DSP_BAR]) { in byt_acpi_probe()
559 dev_err(sdev->dev, "error: failed to ioremap LPE base 0x%x size 0x%x\n", in byt_acpi_probe()
563 dev_dbg(sdev->dev, "LPE VADDR %p\n", sdev->bar[BYT_DSP_BAR]); in byt_acpi_probe()
566 sdev->mmio_bar = BYT_DSP_BAR; in byt_acpi_probe()
567 sdev->mailbox_bar = BYT_DSP_BAR; in byt_acpi_probe()
579 dev_err(sdev->dev, "error: failed to get IMR base at idx %d\n", in byt_acpi_probe()
586 dev_info(sdev->dev, "IMR not set by BIOS. Ignoring\n"); in byt_acpi_probe()
590 dev_dbg(sdev->dev, "IMR base at 0x%x size 0x%x", base, size); in byt_acpi_probe()
591 sdev->bar[BYT_IMR_BAR] = devm_ioremap(sdev->dev, base, size); in byt_acpi_probe()
592 if (!sdev->bar[BYT_IMR_BAR]) { in byt_acpi_probe()
593 dev_err(sdev->dev, "error: failed to ioremap IMR base 0x%x size 0x%x\n", in byt_acpi_probe()
597 dev_dbg(sdev->dev, "IMR VADDR %p\n", sdev->bar[BYT_IMR_BAR]); in byt_acpi_probe()
601 sdev->ipc_irq = platform_get_irq(pdev, desc->irqindex_host_ipc); in byt_acpi_probe()
602 if (sdev->ipc_irq < 0) in byt_acpi_probe()
603 return sdev->ipc_irq; in byt_acpi_probe()
605 dev_dbg(sdev->dev, "using IRQ %d\n", sdev->ipc_irq); in byt_acpi_probe()
606 ret = devm_request_threaded_irq(sdev->dev, sdev->ipc_irq, in byt_acpi_probe()
608 IRQF_SHARED, "AudioDSP", sdev); in byt_acpi_probe()
610 dev_err(sdev->dev, "error: failed to register IRQ %d\n", in byt_acpi_probe()
611 sdev->ipc_irq); in byt_acpi_probe()
616 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRX, 0x3, 0x0); in byt_acpi_probe()
617 snd_sof_dsp_update_bits64(sdev, BYT_DSP_BAR, SHIM_IMRD, 0x3, 0x0); in byt_acpi_probe()
620 sdev->dsp_box.offset = MBOX_OFFSET; in byt_acpi_probe()