Lines Matching refs:sst
77 void sst_memcpy_toio_32(struct sst_dsp *sst, in sst_memcpy_toio_32() argument
84 void sst_memcpy_fromio_32(struct sst_dsp *sst, void *dest, in sst_memcpy_fromio_32() argument
92 void sst_dsp_shim_write(struct sst_dsp *sst, u32 offset, u32 value) in sst_dsp_shim_write() argument
96 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_write()
97 sst->ops->write(sst->addr.shim, offset, value); in sst_dsp_shim_write()
98 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_write()
102 u32 sst_dsp_shim_read(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read() argument
107 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_read()
108 val = sst->ops->read(sst->addr.shim, offset); in sst_dsp_shim_read()
109 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_read()
115 void sst_dsp_shim_write64(struct sst_dsp *sst, u32 offset, u64 value) in sst_dsp_shim_write64() argument
119 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_write64()
120 sst->ops->write64(sst->addr.shim, offset, value); in sst_dsp_shim_write64()
121 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_write64()
125 u64 sst_dsp_shim_read64(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read64() argument
130 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_read64()
131 val = sst->ops->read64(sst->addr.shim, offset); in sst_dsp_shim_read64()
132 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_read64()
138 void sst_dsp_shim_write_unlocked(struct sst_dsp *sst, u32 offset, u32 value) in sst_dsp_shim_write_unlocked() argument
140 sst->ops->write(sst->addr.shim, offset, value); in sst_dsp_shim_write_unlocked()
144 u32 sst_dsp_shim_read_unlocked(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read_unlocked() argument
146 return sst->ops->read(sst->addr.shim, offset); in sst_dsp_shim_read_unlocked()
150 void sst_dsp_shim_write64_unlocked(struct sst_dsp *sst, u32 offset, u64 value) in sst_dsp_shim_write64_unlocked() argument
152 sst->ops->write64(sst->addr.shim, offset, value); in sst_dsp_shim_write64_unlocked()
156 u64 sst_dsp_shim_read64_unlocked(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read64_unlocked() argument
158 return sst->ops->read64(sst->addr.shim, offset); in sst_dsp_shim_read64_unlocked()
162 int sst_dsp_shim_update_bits_unlocked(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits_unlocked() argument
169 ret = sst_dsp_shim_read_unlocked(sst, offset); in sst_dsp_shim_update_bits_unlocked()
176 sst_dsp_shim_write_unlocked(sst, offset, new); in sst_dsp_shim_update_bits_unlocked()
182 int sst_dsp_shim_update_bits64_unlocked(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits64_unlocked() argument
188 old = sst_dsp_shim_read64_unlocked(sst, offset); in sst_dsp_shim_update_bits64_unlocked()
194 sst_dsp_shim_write64_unlocked(sst, offset, new); in sst_dsp_shim_update_bits64_unlocked()
201 void sst_dsp_shim_update_bits_forced_unlocked(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits_forced_unlocked() argument
207 ret = sst_dsp_shim_read_unlocked(sst, offset); in sst_dsp_shim_update_bits_forced_unlocked()
212 sst_dsp_shim_write_unlocked(sst, offset, new); in sst_dsp_shim_update_bits_forced_unlocked()
216 int sst_dsp_shim_update_bits(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits() argument
222 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_update_bits()
223 change = sst_dsp_shim_update_bits_unlocked(sst, offset, mask, value); in sst_dsp_shim_update_bits()
224 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_update_bits()
229 int sst_dsp_shim_update_bits64(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits64() argument
235 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_update_bits64()
236 change = sst_dsp_shim_update_bits64_unlocked(sst, offset, mask, value); in sst_dsp_shim_update_bits64()
237 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_update_bits64()
243 void sst_dsp_shim_update_bits_forced(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits_forced() argument
248 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_update_bits_forced()
249 sst_dsp_shim_update_bits_forced_unlocked(sst, offset, mask, value); in sst_dsp_shim_update_bits_forced()
250 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_update_bits_forced()
296 void sst_dsp_dump(struct sst_dsp *sst) in sst_dsp_dump() argument
298 if (sst->ops->dump) in sst_dsp_dump()
299 sst->ops->dump(sst); in sst_dsp_dump()
303 void sst_dsp_reset(struct sst_dsp *sst) in sst_dsp_reset() argument
305 if (sst->ops->reset) in sst_dsp_reset()
306 sst->ops->reset(sst); in sst_dsp_reset()
310 int sst_dsp_boot(struct sst_dsp *sst) in sst_dsp_boot() argument
312 if (sst->ops->boot) in sst_dsp_boot()
313 sst->ops->boot(sst); in sst_dsp_boot()
319 int sst_dsp_wake(struct sst_dsp *sst) in sst_dsp_wake() argument
321 if (sst->ops->wake) in sst_dsp_wake()
322 return sst->ops->wake(sst); in sst_dsp_wake()
328 void sst_dsp_sleep(struct sst_dsp *sst) in sst_dsp_sleep() argument
330 if (sst->ops->sleep) in sst_dsp_sleep()
331 sst->ops->sleep(sst); in sst_dsp_sleep()
335 void sst_dsp_stall(struct sst_dsp *sst) in sst_dsp_stall() argument
337 if (sst->ops->stall) in sst_dsp_stall()
338 sst->ops->stall(sst); in sst_dsp_stall()
360 int sst_dsp_mailbox_init(struct sst_dsp *sst, u32 inbox_offset, size_t inbox_size, in sst_dsp_mailbox_init() argument
363 sst->mailbox.in_base = sst->addr.lpe + inbox_offset; in sst_dsp_mailbox_init()
364 sst->mailbox.out_base = sst->addr.lpe + outbox_offset; in sst_dsp_mailbox_init()
365 sst->mailbox.in_size = inbox_size; in sst_dsp_mailbox_init()
366 sst->mailbox.out_size = outbox_size; in sst_dsp_mailbox_init()
371 void sst_dsp_outbox_write(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_outbox_write() argument
377 memcpy_toio(sst->mailbox.out_base, message, bytes); in sst_dsp_outbox_write()
384 void sst_dsp_outbox_read(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_outbox_read() argument
390 memcpy_fromio(message, sst->mailbox.out_base, bytes); in sst_dsp_outbox_read()
397 void sst_dsp_inbox_write(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_inbox_write() argument
403 memcpy_toio(sst->mailbox.in_base, message, bytes); in sst_dsp_inbox_write()
410 void sst_dsp_inbox_read(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_inbox_read() argument
416 memcpy_fromio(message, sst->mailbox.in_base, bytes); in sst_dsp_inbox_read()
427 struct sst_dsp *sst; in sst_dsp_new() local
432 sst = devm_kzalloc(dev, sizeof(*sst), GFP_KERNEL); in sst_dsp_new()
433 if (sst == NULL) in sst_dsp_new()
436 spin_lock_init(&sst->spinlock); in sst_dsp_new()
437 mutex_init(&sst->mutex); in sst_dsp_new()
438 sst->dev = dev; in sst_dsp_new()
439 sst->dma_dev = pdata->dma_dev; in sst_dsp_new()
440 sst->thread_context = sst_dev->thread_context; in sst_dsp_new()
441 sst->sst_dev = sst_dev; in sst_dsp_new()
442 sst->id = pdata->id; in sst_dsp_new()
443 sst->irq = pdata->irq; in sst_dsp_new()
444 sst->ops = sst_dev->ops; in sst_dsp_new()
445 sst->pdata = pdata; in sst_dsp_new()
446 INIT_LIST_HEAD(&sst->used_block_list); in sst_dsp_new()
447 INIT_LIST_HEAD(&sst->free_block_list); in sst_dsp_new()
448 INIT_LIST_HEAD(&sst->module_list); in sst_dsp_new()
449 INIT_LIST_HEAD(&sst->fw_list); in sst_dsp_new()
450 INIT_LIST_HEAD(&sst->scratch_block_list); in sst_dsp_new()
453 if (sst->ops->init) { in sst_dsp_new()
454 err = sst->ops->init(sst, pdata); in sst_dsp_new()
460 err = request_threaded_irq(sst->irq, sst->ops->irq_handler, in sst_dsp_new()
461 sst_dev->thread, IRQF_SHARED, "AudioDSP", sst); in sst_dsp_new()
465 err = sst_dma_new(sst); in sst_dsp_new()
469 return sst; in sst_dsp_new()
472 if (sst->ops->free) in sst_dsp_new()
473 sst->ops->free(sst); in sst_dsp_new()
479 void sst_dsp_free(struct sst_dsp *sst) in sst_dsp_free() argument
481 free_irq(sst->irq, sst); in sst_dsp_free()
482 if (sst->ops->free) in sst_dsp_free()
483 sst->ops->free(sst); in sst_dsp_free()
485 sst_dma_free(sst->dma); in sst_dsp_free()