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()
541 dev_err(sdw->cdns.dev, in intel_link_power_down()
544 sdw->cdns.link_up = false; in intel_link_power_down()
546 intel_shim_master_ip_to_glue(sdw); in intel_link_power_down()
552 dev_dbg(sdw->cdns.dev, "%s: powering down all links\n", __func__); in intel_link_power_down()
558 spa_mask = FIELD_PREP(SDW_SHIM_LCTL_SPA_MASK, ~sdw->link_res->link_mask); in intel_link_power_down()
559 cpa_mask = FIELD_PREP(SDW_SHIM_LCTL_CPA_MASK, sdw->link_res->link_mask); in intel_link_power_down()
565 dev_err(sdw->cdns.dev, "%s: could not power down link\n", __func__); in intel_link_power_down()
576 mutex_unlock(sdw->link_res->shim_lock); in intel_link_power_down()
581 static void intel_shim_sync_arm(struct sdw_intel *sdw) in intel_shim_sync_arm() argument
583 void __iomem *shim = sdw->link_res->shim; in intel_shim_sync_arm()
586 mutex_lock(sdw->link_res->shim_lock); in intel_shim_sync_arm()
590 sync_reg |= (SDW_SHIM_SYNC_CMDSYNC << sdw->instance); in intel_shim_sync_arm()
593 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_sync_arm()
596 static int intel_shim_sync_go_unlocked(struct sdw_intel *sdw) in intel_shim_sync_go_unlocked() argument
598 void __iomem *shim = sdw->link_res->shim; in intel_shim_sync_go_unlocked()
616 dev_err(sdw->cdns.dev, "SyncGO clear failed: %d\n", ret); in intel_shim_sync_go_unlocked()
621 static int intel_shim_sync_go(struct sdw_intel *sdw) in intel_shim_sync_go() argument
625 mutex_lock(sdw->link_res->shim_lock); in intel_shim_sync_go()
627 ret = intel_shim_sync_go_unlocked(sdw); in intel_shim_sync_go()
629 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_sync_go()
637 static void intel_pdi_init(struct sdw_intel *sdw, in intel_pdi_init() argument
640 void __iomem *shim = sdw->link_res->shim; in intel_pdi_init()
641 unsigned int link_id = sdw->instance; in intel_pdi_init()
651 dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n", in intel_pdi_init()
661 dev_dbg(sdw->cdns.dev, "PDM cap bd:%d in:%d out:%d\n", in intel_pdi_init()
666 intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num, bool pcm) in intel_pdi_get_ch_cap() argument
668 void __iomem *shim = sdw->link_res->shim; in intel_pdi_get_ch_cap()
669 unsigned int link_id = sdw->instance; in intel_pdi_get_ch_cap()
695 static int intel_pdi_get_ch_update(struct sdw_intel *sdw, in intel_pdi_get_ch_update() argument
703 pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num, pcm); in intel_pdi_get_ch_update()
712 static int intel_pdi_stream_ch_update(struct sdw_intel *sdw, in intel_pdi_stream_ch_update() argument
715 intel_pdi_get_ch_update(sdw, stream->bd, stream->num_bd, in intel_pdi_stream_ch_update()
718 intel_pdi_get_ch_update(sdw, stream->in, stream->num_in, in intel_pdi_stream_ch_update()
721 intel_pdi_get_ch_update(sdw, stream->out, stream->num_out, in intel_pdi_stream_ch_update()
727 static int intel_pdi_ch_update(struct sdw_intel *sdw) in intel_pdi_ch_update() argument
730 intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm, true); in intel_pdi_ch_update()
731 intel_pdi_stream_ch_update(sdw, &sdw->cdns.pdm, false); in intel_pdi_ch_update()
737 intel_pdi_shim_configure(struct sdw_intel *sdw, struct sdw_cdns_pdi *pdi) in intel_pdi_shim_configure() argument
739 void __iomem *shim = sdw->link_res->shim; in intel_pdi_shim_configure()
740 unsigned int link_id = sdw->instance; in intel_pdi_shim_configure()
768 intel_pdi_alh_configure(struct sdw_intel *sdw, struct sdw_cdns_pdi *pdi) in intel_pdi_alh_configure() argument
770 void __iomem *alh = sdw->link_res->alh; in intel_pdi_alh_configure()
771 unsigned int link_id = sdw->instance; in intel_pdi_alh_configure()
788 static int intel_params_stream(struct sdw_intel *sdw, in intel_params_stream() argument
794 struct sdw_intel_link_res *res = sdw->link_res; in intel_params_stream()
809 static int intel_free_stream(struct sdw_intel *sdw, in intel_free_stream() argument
814 struct sdw_intel_link_res *res = sdw->link_res; in intel_free_stream()
835 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_pre_bank_switch() local
841 intel_shim_sync_arm(sdw); in intel_pre_bank_switch()
849 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_post_bank_switch() local
850 void __iomem *shim = sdw->link_res->shim; in intel_post_bank_switch()
857 mutex_lock(sdw->link_res->shim_lock); in intel_post_bank_switch()
875 ret = intel_shim_sync_go_unlocked(sdw); in intel_post_bank_switch()
877 mutex_unlock(sdw->link_res->shim_lock); in intel_post_bank_switch()
880 dev_err(sdw->cdns.dev, "Post bank switch failed: %d\n", ret); in intel_post_bank_switch()
911 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_hw_params() local
944 intel_pdi_shim_configure(sdw, pdi); in intel_hw_params()
945 intel_pdi_alh_configure(sdw, pdi); in intel_hw_params()
954 ret = intel_params_stream(sdw, substream, dai, params, in intel_hw_params()
955 sdw->instance, in intel_hw_params()
996 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_prepare() local
1026 intel_pdi_shim_configure(sdw, dma->pdi); in intel_prepare()
1027 intel_pdi_alh_configure(sdw, dma->pdi); in intel_prepare()
1031 ret = intel_params_stream(sdw, substream, dai, in intel_prepare()
1033 sdw->instance, in intel_prepare()
1044 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_hw_free() local
1065 ret = intel_free_stream(sdw, substream, dai, sdw->instance); in intel_hw_free()
1203 static int intel_register_dai(struct sdw_intel *sdw) in intel_register_dai() argument
1205 struct sdw_cdns *cdns = &sdw->cdns; in intel_register_dai()
1316 static int intel_init(struct sdw_intel *sdw) in intel_init() argument
1321 intel_link_power_up(sdw); in intel_init()
1323 clock_stop = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_init()
1325 intel_shim_init(sdw, clock_stop); in intel_init()
1336 struct sdw_intel *sdw; in intel_master_probe() local
1341 sdw = devm_kzalloc(dev, sizeof(*sdw), GFP_KERNEL); in intel_master_probe()
1342 if (!sdw) in intel_master_probe()
1345 cdns = &sdw->cdns; in intel_master_probe()
1348 sdw->instance = pdev->id; in intel_master_probe()
1349 sdw->link_res = dev_get_platdata(dev); in intel_master_probe()
1351 cdns->registers = sdw->link_res->registers; in intel_master_probe()
1352 cdns->instance = sdw->instance; in intel_master_probe()
1367 sdw->cdns.bus.compute_params = sdw_compute_params; in intel_master_probe()
1393 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_master_startup() local
1403 sdw->instance); in intel_master_startup()
1424 ret = intel_init(sdw); in intel_master_startup()
1429 intel_pdi_init(sdw, &config); in intel_master_startup()
1434 intel_pdi_ch_update(sdw); in intel_master_startup()
1447 intel_shim_sync_arm(sdw); in intel_master_startup()
1462 ret = intel_shim_sync_go(sdw); in intel_master_startup()
1470 ret = intel_register_dai(sdw); in intel_master_startup()
1476 intel_debugfs_init(sdw); in intel_master_startup()
1489 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_master_startup()
1531 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_master_remove() local
1540 intel_debugfs_exit(sdw); in intel_master_remove()
1552 struct sdw_intel *sdw; in intel_master_process_wakeen_event() local
1557 sdw = platform_get_drvdata(pdev); in intel_master_process_wakeen_event()
1558 bus = &sdw->cdns.bus; in intel_master_process_wakeen_event()
1565 shim = sdw->link_res->shim; in intel_master_process_wakeen_event()
1568 if (!(wake_sts & BIT(sdw->instance))) in intel_master_process_wakeen_event()
1572 intel_shim_wake(sdw, false); in intel_master_process_wakeen_event()
1595 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_suspend() local
1609 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend()
1623 intel_shim_wake(sdw, false); in intel_suspend()
1635 ret = intel_link_power_down(sdw); in intel_suspend()
1641 intel_shim_wake(sdw, false); in intel_suspend()
1649 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_suspend_runtime() local
1660 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend_runtime()
1670 ret = intel_link_power_down(sdw); in intel_suspend_runtime()
1676 intel_shim_wake(sdw, false); in intel_suspend_runtime()
1692 ret = intel_link_power_down(sdw); in intel_suspend_runtime()
1698 intel_shim_wake(sdw, true); in intel_suspend_runtime()
1711 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_resume() local
1741 ret = intel_init(sdw); in intel_resume()
1764 intel_shim_sync_arm(sdw); in intel_resume()
1766 ret = sdw_cdns_init(&sdw->cdns); in intel_resume()
1779 ret = intel_shim_sync_go(sdw); in intel_resume()
1804 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_resume_runtime() local
1822 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_resume_runtime()
1825 ret = intel_init(sdw); in intel_resume_runtime()
1848 intel_shim_sync_arm(sdw); in intel_resume_runtime()
1850 ret = sdw_cdns_init(&sdw->cdns); in intel_resume_runtime()
1863 ret = intel_shim_sync_go(sdw); in intel_resume_runtime()
1870 ret = intel_init(sdw); in intel_resume_runtime()
1883 clock_stop0 = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_resume_runtime()
1906 intel_shim_sync_arm(sdw); in intel_resume_runtime()
1911 sdw_cdns_init(&sdw->cdns); in intel_resume_runtime()
1935 ret = intel_shim_sync_go(sdw); in intel_resume_runtime()
1937 dev_err(sdw->cdns.dev, "sync go failed during resume\n"); in intel_resume_runtime()
1944 clock_stop0 = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_resume_runtime()
1948 ret = intel_init(sdw); in intel_resume_runtime()