diff options
-rw-r--r-- | sound/soc/intel/skylake/bxt-sst.c | 28 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-sst-dsp.h | 3 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-sst-utils.c | 37 | ||||
-rw-r--r-- | sound/soc/intel/skylake/skl-sst.c | 32 |
4 files changed, 51 insertions, 49 deletions
diff --git a/sound/soc/intel/skylake/bxt-sst.c b/sound/soc/intel/skylake/bxt-sst.c index 268bdaec8042..2bf6ebe29f50 100644 --- a/sound/soc/intel/skylake/bxt-sst.c +++ b/sound/soc/intel/skylake/bxt-sst.c | |||
@@ -590,23 +590,14 @@ int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | |||
590 | struct sst_dsp *sst; | 590 | struct sst_dsp *sst; |
591 | int ret; | 591 | int ret; |
592 | 592 | ||
593 | skl = devm_kzalloc(dev, sizeof(*skl), GFP_KERNEL); | 593 | ret = skl_sst_ctx_init(dev, irq, fw_name, dsp_ops, dsp, &skl_dev); |
594 | if (skl == NULL) | 594 | if (ret < 0) { |
595 | return -ENOMEM; | 595 | dev_err(skl->dev, "%s: no device\n", __func__); |
596 | 596 | return ret; | |
597 | skl->dev = dev; | ||
598 | skl_dev.thread_context = skl; | ||
599 | INIT_LIST_HEAD(&skl->uuid_list); | ||
600 | |||
601 | skl->dsp = skl_dsp_ctx_init(dev, &skl_dev, irq); | ||
602 | if (!skl->dsp) { | ||
603 | dev_err(skl->dev, "skl_dsp_ctx_init failed\n"); | ||
604 | return -ENODEV; | ||
605 | } | 597 | } |
606 | 598 | ||
599 | skl = *dsp; | ||
607 | sst = skl->dsp; | 600 | sst = skl->dsp; |
608 | sst->fw_name = fw_name; | ||
609 | sst->dsp_ops = dsp_ops; | ||
610 | sst->fw_ops = bxt_fw_ops; | 601 | sst->fw_ops = bxt_fw_ops; |
611 | sst->addr.lpe = mmio_base; | 602 | sst->addr.lpe = mmio_base; |
612 | sst->addr.shim = mmio_base; | 603 | sst->addr.shim = mmio_base; |
@@ -614,24 +605,15 @@ int bxt_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | |||
614 | sst_dsp_mailbox_init(sst, (BXT_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ), | 605 | sst_dsp_mailbox_init(sst, (BXT_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ), |
615 | SKL_ADSP_W0_UP_SZ, BXT_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ); | 606 | SKL_ADSP_W0_UP_SZ, BXT_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ); |
616 | 607 | ||
617 | INIT_LIST_HEAD(&sst->module_list); | ||
618 | ret = skl_ipc_init(dev, skl); | ||
619 | if (ret) | ||
620 | return ret; | ||
621 | |||
622 | /* set the D0i3 check */ | 608 | /* set the D0i3 check */ |
623 | skl->ipc.ops.check_dsp_lp_on = skl_ipc_check_D0i0; | 609 | skl->ipc.ops.check_dsp_lp_on = skl_ipc_check_D0i0; |
624 | 610 | ||
625 | skl->cores.count = 2; | 611 | skl->cores.count = 2; |
626 | skl->boot_complete = false; | 612 | skl->boot_complete = false; |
627 | init_waitqueue_head(&skl->boot_wait); | 613 | init_waitqueue_head(&skl->boot_wait); |
628 | skl->is_first_boot = true; | ||
629 | INIT_DELAYED_WORK(&skl->d0i3.work, bxt_set_dsp_D0i3); | 614 | INIT_DELAYED_WORK(&skl->d0i3.work, bxt_set_dsp_D0i3); |
630 | skl->d0i3.state = SKL_DSP_D0I3_NONE; | 615 | skl->d0i3.state = SKL_DSP_D0I3_NONE; |
631 | 616 | ||
632 | if (dsp) | ||
633 | *dsp = skl; | ||
634 | |||
635 | return 0; | 617 | return 0; |
636 | } | 618 | } |
637 | EXPORT_SYMBOL_GPL(bxt_sst_dsp_init); | 619 | EXPORT_SYMBOL_GPL(bxt_sst_dsp_init); |
diff --git a/sound/soc/intel/skylake/skl-sst-dsp.h b/sound/soc/intel/skylake/skl-sst-dsp.h index 7229a12b4c94..c1f95e23933d 100644 --- a/sound/soc/intel/skylake/skl-sst-dsp.h +++ b/sound/soc/intel/skylake/skl-sst-dsp.h | |||
@@ -247,5 +247,8 @@ void skl_freeup_uuid_list(struct skl_sst *ctx); | |||
247 | 247 | ||
248 | int skl_dsp_strip_extended_manifest(struct firmware *fw); | 248 | int skl_dsp_strip_extended_manifest(struct firmware *fw); |
249 | void skl_dsp_enable_notification(struct skl_sst *ctx, bool enable); | 249 | void skl_dsp_enable_notification(struct skl_sst *ctx, bool enable); |
250 | int skl_sst_ctx_init(struct device *dev, int irq, const char *fw_name, | ||
251 | struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, | ||
252 | struct sst_dsp_device *skl_dev); | ||
250 | 253 | ||
251 | #endif /*__SKL_SST_DSP_H__*/ | 254 | #endif /*__SKL_SST_DSP_H__*/ |
diff --git a/sound/soc/intel/skylake/skl-sst-utils.c b/sound/soc/intel/skylake/skl-sst-utils.c index 6d5bff04bf65..a72152123c3c 100644 --- a/sound/soc/intel/skylake/skl-sst-utils.c +++ b/sound/soc/intel/skylake/skl-sst-utils.c | |||
@@ -361,3 +361,40 @@ int skl_dsp_strip_extended_manifest(struct firmware *fw) | |||
361 | 361 | ||
362 | return 0; | 362 | return 0; |
363 | } | 363 | } |
364 | |||
365 | int skl_sst_ctx_init(struct device *dev, int irq, const char *fw_name, | ||
366 | struct skl_dsp_loader_ops dsp_ops, struct skl_sst **dsp, | ||
367 | struct sst_dsp_device *skl_dev) | ||
368 | { | ||
369 | struct skl_sst *skl; | ||
370 | struct sst_dsp *sst; | ||
371 | int ret; | ||
372 | |||
373 | skl = devm_kzalloc(dev, sizeof(*skl), GFP_KERNEL); | ||
374 | if (skl == NULL) | ||
375 | return -ENOMEM; | ||
376 | |||
377 | skl->dev = dev; | ||
378 | skl_dev->thread_context = skl; | ||
379 | INIT_LIST_HEAD(&skl->uuid_list); | ||
380 | skl->dsp = skl_dsp_ctx_init(dev, skl_dev, irq); | ||
381 | if (!skl->dsp) { | ||
382 | dev_err(skl->dev, "%s: no device\n", __func__); | ||
383 | return -ENODEV; | ||
384 | } | ||
385 | |||
386 | sst = skl->dsp; | ||
387 | sst->fw_name = fw_name; | ||
388 | sst->dsp_ops = dsp_ops; | ||
389 | init_waitqueue_head(&skl->mod_load_wait); | ||
390 | INIT_LIST_HEAD(&sst->module_list); | ||
391 | ret = skl_ipc_init(dev, skl); | ||
392 | if (ret) | ||
393 | return ret; | ||
394 | |||
395 | skl->is_first_boot = true; | ||
396 | if (dsp) | ||
397 | *dsp = skl; | ||
398 | |||
399 | return ret; | ||
400 | } | ||
diff --git a/sound/soc/intel/skylake/skl-sst.c b/sound/soc/intel/skylake/skl-sst.c index 539529729e3f..4fdd503a837c 100644 --- a/sound/soc/intel/skylake/skl-sst.c +++ b/sound/soc/intel/skylake/skl-sst.c | |||
@@ -330,7 +330,6 @@ static int skl_transfer_module(struct sst_dsp *ctx, const void *data, | |||
330 | int ret, bytes_left, curr_pos; | 330 | int ret, bytes_left, curr_pos; |
331 | struct skl_sst *skl = ctx->thread_context; | 331 | struct skl_sst *skl = ctx->thread_context; |
332 | skl->mod_load_complete = false; | 332 | skl->mod_load_complete = false; |
333 | init_waitqueue_head(&skl->mod_load_wait); | ||
334 | 333 | ||
335 | bytes_left = ctx->cl_dev.ops.cl_copy_to_dmabuf(ctx, data, size, false); | 334 | bytes_left = ctx->cl_dev.ops.cl_copy_to_dmabuf(ctx, data, size, false); |
336 | if (bytes_left < 0) | 335 | if (bytes_left < 0) |
@@ -489,43 +488,24 @@ int skl_sst_dsp_init(struct device *dev, void __iomem *mmio_base, int irq, | |||
489 | struct sst_dsp *sst; | 488 | struct sst_dsp *sst; |
490 | int ret; | 489 | int ret; |
491 | 490 | ||
492 | skl = devm_kzalloc(dev, sizeof(*skl), GFP_KERNEL); | 491 | ret = skl_sst_ctx_init(dev, irq, fw_name, dsp_ops, dsp, &skl_dev); |
493 | if (skl == NULL) | 492 | if (ret < 0) { |
494 | return -ENOMEM; | 493 | dev_err(dev, "%s: no device\n", __func__); |
495 | 494 | return ret; | |
496 | skl->dev = dev; | ||
497 | skl_dev.thread_context = skl; | ||
498 | INIT_LIST_HEAD(&skl->uuid_list); | ||
499 | |||
500 | skl->dsp = skl_dsp_ctx_init(dev, &skl_dev, irq); | ||
501 | if (!skl->dsp) { | ||
502 | dev_err(skl->dev, "%s: no device\n", __func__); | ||
503 | return -ENODEV; | ||
504 | } | 495 | } |
505 | 496 | ||
497 | skl = *dsp; | ||
506 | sst = skl->dsp; | 498 | sst = skl->dsp; |
507 | |||
508 | sst->fw_name = fw_name; | ||
509 | sst->addr.lpe = mmio_base; | 499 | sst->addr.lpe = mmio_base; |
510 | sst->addr.shim = mmio_base; | 500 | sst->addr.shim = mmio_base; |
511 | sst_dsp_mailbox_init(sst, (SKL_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ), | 501 | sst_dsp_mailbox_init(sst, (SKL_ADSP_SRAM0_BASE + SKL_ADSP_W0_STAT_SZ), |
512 | SKL_ADSP_W0_UP_SZ, SKL_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ); | 502 | SKL_ADSP_W0_UP_SZ, SKL_ADSP_SRAM1_BASE, SKL_ADSP_W1_SZ); |
513 | 503 | ||
514 | INIT_LIST_HEAD(&sst->module_list); | ||
515 | sst->dsp_ops = dsp_ops; | ||
516 | sst->fw_ops = skl_fw_ops; | 504 | sst->fw_ops = skl_fw_ops; |
517 | 505 | ||
518 | ret = skl_ipc_init(dev, skl); | ||
519 | if (ret) | ||
520 | return ret; | ||
521 | |||
522 | skl->cores.count = 2; | 506 | skl->cores.count = 2; |
523 | skl->is_first_boot = true; | ||
524 | |||
525 | if (dsp) | ||
526 | *dsp = skl; | ||
527 | 507 | ||
528 | return ret; | 508 | return 0; |
529 | } | 509 | } |
530 | EXPORT_SYMBOL_GPL(skl_sst_dsp_init); | 510 | EXPORT_SYMBOL_GPL(skl_sst_dsp_init); |
531 | 511 | ||