Lines Matching refs:sdw

199 	struct sdw_intel *sdw = s_file->private;  in intel_reg_show()  local
200 void __iomem *s = sdw->link_res->shim; in intel_reg_show()
201 void __iomem *a = sdw->link_res->alh; in intel_reg_show()
267 struct sdw_intel *sdw = data; in intel_set_m_datamode() local
268 struct sdw_bus *bus = &sdw->cdns.bus; in intel_set_m_datamode()
285 struct sdw_intel *sdw = data; in intel_set_s_datamode() local
286 struct sdw_bus *bus = &sdw->cdns.bus; in intel_set_s_datamode()
301 static void intel_debugfs_init(struct sdw_intel *sdw) in intel_debugfs_init() argument
303 struct dentry *root = sdw->cdns.bus.debugfs; in intel_debugfs_init()
308 sdw->debugfs = debugfs_create_dir("intel-sdw", root); in intel_debugfs_init()
310 debugfs_create_file("intel-registers", 0400, sdw->debugfs, sdw, in intel_debugfs_init()
313 debugfs_create_file("intel-m-datamode", 0200, sdw->debugfs, sdw, in intel_debugfs_init()
316 debugfs_create_file("intel-s-datamode", 0200, sdw->debugfs, sdw, in intel_debugfs_init()
319 sdw_cdns_debugfs_init(&sdw->cdns, sdw->debugfs); in intel_debugfs_init()
322 static void intel_debugfs_exit(struct sdw_intel *sdw) in intel_debugfs_exit() argument
324 debugfs_remove_recursive(sdw->debugfs); in intel_debugfs_exit()
327 static void intel_debugfs_init(struct sdw_intel *sdw) {} in intel_debugfs_init() argument
328 static void intel_debugfs_exit(struct sdw_intel *sdw) {} in intel_debugfs_exit() argument
335 static int intel_link_power_up(struct sdw_intel *sdw) in intel_link_power_up() argument
337 unsigned int link_id = sdw->instance; in intel_link_power_up()
338 void __iomem *shim = sdw->link_res->shim; in intel_link_power_up()
339 u32 *shim_mask = sdw->link_res->shim_mask; in intel_link_power_up()
340 struct sdw_bus *bus = &sdw->cdns.bus; in intel_link_power_up()
348 mutex_lock(sdw->link_res->shim_lock); in intel_link_power_up()
366 dev_dbg(sdw->cdns.dev, "%s: powering up all links\n", __func__); in intel_link_power_up()
369 dev_dbg(sdw->cdns.dev, in intel_link_power_up()
384 spa_mask = FIELD_PREP(SDW_SHIM_LCTL_SPA_MASK, sdw->link_res->link_mask); in intel_link_power_up()
385 cpa_mask = FIELD_PREP(SDW_SHIM_LCTL_CPA_MASK, sdw->link_res->link_mask); in intel_link_power_up()
391 dev_err(sdw->cdns.dev, "Failed to power up link: %d\n", ret); in intel_link_power_up()
399 dev_err(sdw->cdns.dev, in intel_link_power_up()
407 sdw->cdns.link_up = true; in intel_link_power_up()
409 mutex_unlock(sdw->link_res->shim_lock); in intel_link_power_up()
415 static void intel_shim_glue_to_master_ip(struct sdw_intel *sdw) in intel_shim_glue_to_master_ip() argument
417 void __iomem *shim = sdw->link_res->shim; in intel_shim_glue_to_master_ip()
418 unsigned int link_id = sdw->instance; in intel_shim_glue_to_master_ip()
445 static void intel_shim_master_ip_to_glue(struct sdw_intel *sdw) in intel_shim_master_ip_to_glue() argument
447 unsigned int link_id = sdw->instance; in intel_shim_master_ip_to_glue()
448 void __iomem *shim = sdw->link_res->shim; in intel_shim_master_ip_to_glue()
465 static int intel_shim_init(struct sdw_intel *sdw, bool clock_stop) in intel_shim_init() argument
467 void __iomem *shim = sdw->link_res->shim; in intel_shim_init()
468 unsigned int link_id = sdw->instance; in intel_shim_init()
472 mutex_lock(sdw->link_res->shim_lock); in intel_shim_init()
491 intel_shim_glue_to_master_ip(sdw); in intel_shim_init()
499 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_init()
504 static void intel_shim_wake(struct sdw_intel *sdw, bool wake_enable) in intel_shim_wake() argument
506 void __iomem *shim = sdw->link_res->shim; in intel_shim_wake()
507 unsigned int link_id = sdw->instance; in intel_shim_wake()
510 mutex_lock(sdw->link_res->shim_lock); in intel_shim_wake()
527 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_wake()
530 static int intel_link_power_down(struct sdw_intel *sdw) in intel_link_power_down() argument
533 unsigned int link_id = sdw->instance; in intel_link_power_down()
534 void __iomem *shim = sdw->link_res->shim; in intel_link_power_down()
535 u32 *shim_mask = sdw->link_res->shim_mask; in intel_link_power_down()
538 mutex_lock(sdw->link_res->shim_lock); in intel_link_power_down()
540 intel_shim_master_ip_to_glue(sdw); in intel_link_power_down()
543 dev_err(sdw->cdns.dev, in intel_link_power_down()
550 dev_dbg(sdw->cdns.dev, "%s: powering down all links\n", __func__); in intel_link_power_down()
556 spa_mask = FIELD_PREP(SDW_SHIM_LCTL_SPA_MASK, ~sdw->link_res->link_mask); in intel_link_power_down()
557 cpa_mask = FIELD_PREP(SDW_SHIM_LCTL_CPA_MASK, sdw->link_res->link_mask); in intel_link_power_down()
566 mutex_unlock(sdw->link_res->shim_lock); in intel_link_power_down()
569 dev_err(sdw->cdns.dev, "%s: could not power down link\n", __func__); in intel_link_power_down()
574 sdw->cdns.link_up = false; in intel_link_power_down()
578 static void intel_shim_sync_arm(struct sdw_intel *sdw) in intel_shim_sync_arm() argument
580 void __iomem *shim = sdw->link_res->shim; in intel_shim_sync_arm()
583 mutex_lock(sdw->link_res->shim_lock); in intel_shim_sync_arm()
587 sync_reg |= (SDW_SHIM_SYNC_CMDSYNC << sdw->instance); in intel_shim_sync_arm()
590 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_sync_arm()
593 static int intel_shim_sync_go_unlocked(struct sdw_intel *sdw) in intel_shim_sync_go_unlocked() argument
595 void __iomem *shim = sdw->link_res->shim; in intel_shim_sync_go_unlocked()
613 dev_err(sdw->cdns.dev, "SyncGO clear failed: %d\n", ret); in intel_shim_sync_go_unlocked()
618 static int intel_shim_sync_go(struct sdw_intel *sdw) in intel_shim_sync_go() argument
622 mutex_lock(sdw->link_res->shim_lock); in intel_shim_sync_go()
624 ret = intel_shim_sync_go_unlocked(sdw); in intel_shim_sync_go()
626 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_sync_go()
634 static void intel_pdi_init(struct sdw_intel *sdw, in intel_pdi_init() argument
637 void __iomem *shim = sdw->link_res->shim; in intel_pdi_init()
638 unsigned int link_id = sdw->instance; in intel_pdi_init()
648 dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n", in intel_pdi_init()
658 dev_dbg(sdw->cdns.dev, "PDM cap bd:%d in:%d out:%d\n", in intel_pdi_init()
663 intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num, bool pcm) in intel_pdi_get_ch_cap() argument
665 void __iomem *shim = sdw->link_res->shim; in intel_pdi_get_ch_cap()
666 unsigned int link_id = sdw->instance; in intel_pdi_get_ch_cap()
692 static int intel_pdi_get_ch_update(struct sdw_intel *sdw, in intel_pdi_get_ch_update() argument
700 pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num, pcm); in intel_pdi_get_ch_update()
709 static int intel_pdi_stream_ch_update(struct sdw_intel *sdw, in intel_pdi_stream_ch_update() argument
712 intel_pdi_get_ch_update(sdw, stream->bd, stream->num_bd, in intel_pdi_stream_ch_update()
715 intel_pdi_get_ch_update(sdw, stream->in, stream->num_in, in intel_pdi_stream_ch_update()
718 intel_pdi_get_ch_update(sdw, stream->out, stream->num_out, in intel_pdi_stream_ch_update()
724 static int intel_pdi_ch_update(struct sdw_intel *sdw) in intel_pdi_ch_update() argument
727 intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm, true); in intel_pdi_ch_update()
728 intel_pdi_stream_ch_update(sdw, &sdw->cdns.pdm, false); in intel_pdi_ch_update()
734 intel_pdi_shim_configure(struct sdw_intel *sdw, struct sdw_cdns_pdi *pdi) in intel_pdi_shim_configure() argument
736 void __iomem *shim = sdw->link_res->shim; in intel_pdi_shim_configure()
737 unsigned int link_id = sdw->instance; in intel_pdi_shim_configure()
765 intel_pdi_alh_configure(struct sdw_intel *sdw, struct sdw_cdns_pdi *pdi) in intel_pdi_alh_configure() argument
767 void __iomem *alh = sdw->link_res->alh; in intel_pdi_alh_configure()
768 unsigned int link_id = sdw->instance; in intel_pdi_alh_configure()
785 static int intel_params_stream(struct sdw_intel *sdw, in intel_params_stream() argument
791 struct sdw_intel_link_res *res = sdw->link_res; in intel_params_stream()
806 static int intel_free_stream(struct sdw_intel *sdw, in intel_free_stream() argument
811 struct sdw_intel_link_res *res = sdw->link_res; in intel_free_stream()
832 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_pre_bank_switch() local
838 intel_shim_sync_arm(sdw); in intel_pre_bank_switch()
846 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_post_bank_switch() local
847 void __iomem *shim = sdw->link_res->shim; in intel_post_bank_switch()
854 mutex_lock(sdw->link_res->shim_lock); in intel_post_bank_switch()
872 ret = intel_shim_sync_go_unlocked(sdw); in intel_post_bank_switch()
874 mutex_unlock(sdw->link_res->shim_lock); in intel_post_bank_switch()
877 dev_err(sdw->cdns.dev, "Post bank switch failed: %d\n", ret); in intel_post_bank_switch()
908 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_hw_params() local
941 intel_pdi_shim_configure(sdw, pdi); in intel_hw_params()
942 intel_pdi_alh_configure(sdw, pdi); in intel_hw_params()
951 ret = intel_params_stream(sdw, substream, dai, params, in intel_hw_params()
952 sdw->instance, in intel_hw_params()
993 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_prepare() local
1023 intel_pdi_shim_configure(sdw, dma->pdi); in intel_prepare()
1024 intel_pdi_alh_configure(sdw, dma->pdi); in intel_prepare()
1028 ret = intel_params_stream(sdw, substream, dai, in intel_prepare()
1030 sdw->instance, in intel_prepare()
1041 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_hw_free() local
1062 ret = intel_free_stream(sdw, substream, dai, sdw->instance); in intel_hw_free()
1200 static int intel_register_dai(struct sdw_intel *sdw) in intel_register_dai() argument
1202 struct sdw_cdns *cdns = &sdw->cdns; in intel_register_dai()
1313 static int intel_init(struct sdw_intel *sdw) in intel_init() argument
1318 intel_link_power_up(sdw); in intel_init()
1320 clock_stop = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_init()
1322 intel_shim_init(sdw, clock_stop); in intel_init()
1333 struct sdw_intel *sdw; in intel_master_probe() local
1338 sdw = devm_kzalloc(dev, sizeof(*sdw), GFP_KERNEL); in intel_master_probe()
1339 if (!sdw) in intel_master_probe()
1342 cdns = &sdw->cdns; in intel_master_probe()
1345 sdw->instance = pdev->id; in intel_master_probe()
1346 sdw->link_res = dev_get_platdata(dev); in intel_master_probe()
1348 cdns->registers = sdw->link_res->registers; in intel_master_probe()
1349 cdns->instance = sdw->instance; in intel_master_probe()
1364 sdw->cdns.bus.compute_params = sdw_compute_params; in intel_master_probe()
1390 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_master_startup() local
1400 sdw->instance); in intel_master_startup()
1421 ret = intel_init(sdw); in intel_master_startup()
1426 intel_pdi_init(sdw, &config); in intel_master_startup()
1431 intel_pdi_ch_update(sdw); in intel_master_startup()
1444 intel_shim_sync_arm(sdw); in intel_master_startup()
1459 ret = intel_shim_sync_go(sdw); in intel_master_startup()
1467 ret = intel_register_dai(sdw); in intel_master_startup()
1474 intel_debugfs_init(sdw); in intel_master_startup()
1487 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_master_startup()
1529 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_master_remove() local
1538 intel_debugfs_exit(sdw); in intel_master_remove()
1550 struct sdw_intel *sdw; in intel_master_process_wakeen_event() local
1555 sdw = platform_get_drvdata(pdev); in intel_master_process_wakeen_event()
1556 bus = &sdw->cdns.bus; in intel_master_process_wakeen_event()
1563 shim = sdw->link_res->shim; in intel_master_process_wakeen_event()
1566 if (!(wake_sts & BIT(sdw->instance))) in intel_master_process_wakeen_event()
1570 intel_shim_wake(sdw, false); in intel_master_process_wakeen_event()
1593 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_suspend() local
1607 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend()
1621 intel_shim_wake(sdw, false); in intel_suspend()
1633 ret = intel_link_power_down(sdw); in intel_suspend()
1639 intel_shim_wake(sdw, false); in intel_suspend()
1647 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_suspend_runtime() local
1658 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend_runtime()
1668 ret = intel_link_power_down(sdw); in intel_suspend_runtime()
1674 intel_shim_wake(sdw, false); in intel_suspend_runtime()
1690 ret = intel_link_power_down(sdw); in intel_suspend_runtime()
1696 intel_shim_wake(sdw, true); in intel_suspend_runtime()
1709 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_resume() local
1739 ret = intel_init(sdw); in intel_resume()
1762 intel_shim_sync_arm(sdw); in intel_resume()
1764 ret = sdw_cdns_init(&sdw->cdns); in intel_resume()
1777 ret = intel_shim_sync_go(sdw); in intel_resume()
1802 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_resume_runtime() local
1820 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_resume_runtime()
1823 ret = intel_init(sdw); in intel_resume_runtime()
1846 intel_shim_sync_arm(sdw); in intel_resume_runtime()
1848 ret = sdw_cdns_init(&sdw->cdns); in intel_resume_runtime()
1861 ret = intel_shim_sync_go(sdw); in intel_resume_runtime()
1868 ret = intel_init(sdw); in intel_resume_runtime()
1881 clock_stop0 = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_resume_runtime()
1904 intel_shim_sync_arm(sdw); in intel_resume_runtime()
1909 sdw_cdns_init(&sdw->cdns); in intel_resume_runtime()
1933 ret = intel_shim_sync_go(sdw); in intel_resume_runtime()
1935 dev_err(sdw->cdns.dev, "sync go failed during resume\n"); in intel_resume_runtime()
1942 clock_stop0 = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_resume_runtime()
1946 ret = intel_init(sdw); in intel_resume_runtime()