Lines Matching refs:sst

76 void sst_memcpy_toio_32(struct sst_dsp *sst,  in sst_memcpy_toio_32()  argument
83 void sst_memcpy_fromio_32(struct sst_dsp *sst, void *dest, in sst_memcpy_fromio_32() argument
91 void sst_dsp_shim_write(struct sst_dsp *sst, u32 offset, u32 value) in sst_dsp_shim_write() argument
95 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_write()
96 sst->ops->write(sst->addr.shim, offset, value); in sst_dsp_shim_write()
97 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_write()
101 u32 sst_dsp_shim_read(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read() argument
106 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_read()
107 val = sst->ops->read(sst->addr.shim, offset); in sst_dsp_shim_read()
108 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_read()
114 void sst_dsp_shim_write64(struct sst_dsp *sst, u32 offset, u64 value) in sst_dsp_shim_write64() argument
118 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_write64()
119 sst->ops->write64(sst->addr.shim, offset, value); in sst_dsp_shim_write64()
120 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_write64()
124 u64 sst_dsp_shim_read64(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read64() argument
129 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_read64()
130 val = sst->ops->read64(sst->addr.shim, offset); in sst_dsp_shim_read64()
131 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_read64()
137 void sst_dsp_shim_write_unlocked(struct sst_dsp *sst, u32 offset, u32 value) in sst_dsp_shim_write_unlocked() argument
139 sst->ops->write(sst->addr.shim, offset, value); in sst_dsp_shim_write_unlocked()
143 u32 sst_dsp_shim_read_unlocked(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read_unlocked() argument
145 return sst->ops->read(sst->addr.shim, offset); in sst_dsp_shim_read_unlocked()
149 void sst_dsp_shim_write64_unlocked(struct sst_dsp *sst, u32 offset, u64 value) in sst_dsp_shim_write64_unlocked() argument
151 sst->ops->write64(sst->addr.shim, offset, value); in sst_dsp_shim_write64_unlocked()
155 u64 sst_dsp_shim_read64_unlocked(struct sst_dsp *sst, u32 offset) in sst_dsp_shim_read64_unlocked() argument
157 return sst->ops->read64(sst->addr.shim, offset); in sst_dsp_shim_read64_unlocked()
161 int sst_dsp_shim_update_bits_unlocked(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits_unlocked() argument
168 ret = sst_dsp_shim_read_unlocked(sst, offset); in sst_dsp_shim_update_bits_unlocked()
175 sst_dsp_shim_write_unlocked(sst, offset, new); in sst_dsp_shim_update_bits_unlocked()
181 int sst_dsp_shim_update_bits64_unlocked(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits64_unlocked() argument
187 old = sst_dsp_shim_read64_unlocked(sst, offset); in sst_dsp_shim_update_bits64_unlocked()
193 sst_dsp_shim_write64_unlocked(sst, offset, new); in sst_dsp_shim_update_bits64_unlocked()
199 int sst_dsp_shim_update_bits(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits() argument
205 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_update_bits()
206 change = sst_dsp_shim_update_bits_unlocked(sst, offset, mask, value); in sst_dsp_shim_update_bits()
207 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_update_bits()
212 int sst_dsp_shim_update_bits64(struct sst_dsp *sst, u32 offset, in sst_dsp_shim_update_bits64() argument
218 spin_lock_irqsave(&sst->spinlock, flags); in sst_dsp_shim_update_bits64()
219 change = sst_dsp_shim_update_bits64_unlocked(sst, offset, mask, value); in sst_dsp_shim_update_bits64()
220 spin_unlock_irqrestore(&sst->spinlock, flags); in sst_dsp_shim_update_bits64()
225 void sst_dsp_dump(struct sst_dsp *sst) in sst_dsp_dump() argument
227 if (sst->ops->dump) in sst_dsp_dump()
228 sst->ops->dump(sst); in sst_dsp_dump()
232 void sst_dsp_reset(struct sst_dsp *sst) in sst_dsp_reset() argument
234 if (sst->ops->reset) in sst_dsp_reset()
235 sst->ops->reset(sst); in sst_dsp_reset()
239 int sst_dsp_boot(struct sst_dsp *sst) in sst_dsp_boot() argument
241 if (sst->ops->boot) in sst_dsp_boot()
242 sst->ops->boot(sst); in sst_dsp_boot()
248 int sst_dsp_wake(struct sst_dsp *sst) in sst_dsp_wake() argument
250 if (sst->ops->wake) in sst_dsp_wake()
251 return sst->ops->wake(sst); in sst_dsp_wake()
257 void sst_dsp_sleep(struct sst_dsp *sst) in sst_dsp_sleep() argument
259 if (sst->ops->sleep) in sst_dsp_sleep()
260 sst->ops->sleep(sst); in sst_dsp_sleep()
264 void sst_dsp_stall(struct sst_dsp *sst) in sst_dsp_stall() argument
266 if (sst->ops->stall) in sst_dsp_stall()
267 sst->ops->stall(sst); in sst_dsp_stall()
289 int sst_dsp_mailbox_init(struct sst_dsp *sst, u32 inbox_offset, size_t inbox_size, in sst_dsp_mailbox_init() argument
292 sst->mailbox.in_base = sst->addr.lpe + inbox_offset; in sst_dsp_mailbox_init()
293 sst->mailbox.out_base = sst->addr.lpe + outbox_offset; in sst_dsp_mailbox_init()
294 sst->mailbox.in_size = inbox_size; in sst_dsp_mailbox_init()
295 sst->mailbox.out_size = outbox_size; in sst_dsp_mailbox_init()
300 void sst_dsp_outbox_write(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_outbox_write() argument
306 memcpy_toio(sst->mailbox.out_base, message, bytes); in sst_dsp_outbox_write()
313 void sst_dsp_outbox_read(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_outbox_read() argument
319 memcpy_fromio(message, sst->mailbox.out_base, bytes); in sst_dsp_outbox_read()
326 void sst_dsp_inbox_write(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_inbox_write() argument
332 memcpy_toio(sst->mailbox.in_base, message, bytes); in sst_dsp_inbox_write()
339 void sst_dsp_inbox_read(struct sst_dsp *sst, void *message, size_t bytes) in sst_dsp_inbox_read() argument
345 memcpy_fromio(message, sst->mailbox.in_base, bytes); in sst_dsp_inbox_read()
355 struct sst_dsp *sst; in sst_dsp_new() local
360 sst = devm_kzalloc(dev, sizeof(*sst), GFP_KERNEL); in sst_dsp_new()
361 if (sst == NULL) in sst_dsp_new()
364 spin_lock_init(&sst->spinlock); in sst_dsp_new()
365 mutex_init(&sst->mutex); in sst_dsp_new()
366 sst->dev = dev; in sst_dsp_new()
367 sst->dma_dev = pdata->dma_dev; in sst_dsp_new()
368 sst->thread_context = sst_dev->thread_context; in sst_dsp_new()
369 sst->sst_dev = sst_dev; in sst_dsp_new()
370 sst->id = pdata->id; in sst_dsp_new()
371 sst->irq = pdata->irq; in sst_dsp_new()
372 sst->ops = sst_dev->ops; in sst_dsp_new()
373 sst->pdata = pdata; in sst_dsp_new()
374 INIT_LIST_HEAD(&sst->used_block_list); in sst_dsp_new()
375 INIT_LIST_HEAD(&sst->free_block_list); in sst_dsp_new()
376 INIT_LIST_HEAD(&sst->module_list); in sst_dsp_new()
377 INIT_LIST_HEAD(&sst->fw_list); in sst_dsp_new()
378 INIT_LIST_HEAD(&sst->scratch_block_list); in sst_dsp_new()
381 if (sst->ops->init) { in sst_dsp_new()
382 err = sst->ops->init(sst, pdata); in sst_dsp_new()
388 err = request_threaded_irq(sst->irq, sst->ops->irq_handler, in sst_dsp_new()
389 sst_dev->thread, IRQF_SHARED, "AudioDSP", sst); in sst_dsp_new()
393 err = sst_dma_new(sst); in sst_dsp_new()
397 return sst; in sst_dsp_new()
400 if (sst->ops->free) in sst_dsp_new()
401 sst->ops->free(sst); in sst_dsp_new()
407 void sst_dsp_free(struct sst_dsp *sst) in sst_dsp_free() argument
409 free_irq(sst->irq, sst); in sst_dsp_free()
410 if (sst->ops->free) in sst_dsp_free()
411 sst->ops->free(sst); in sst_dsp_free()
413 sst_dma_free(sst->dma); in sst_dsp_free()