Lines Matching refs:sdw
129 struct sdw_intel *sdw = s_file->private; in intel_reg_show() local
130 void __iomem *s = sdw->link_res->shim; in intel_reg_show()
131 void __iomem *a = sdw->link_res->alh; in intel_reg_show()
196 struct sdw_intel *sdw = data; in intel_set_m_datamode() local
197 struct sdw_bus *bus = &sdw->cdns.bus; in intel_set_m_datamode()
214 struct sdw_intel *sdw = data; in intel_set_s_datamode() local
215 struct sdw_bus *bus = &sdw->cdns.bus; in intel_set_s_datamode()
230 static void intel_debugfs_init(struct sdw_intel *sdw) in intel_debugfs_init() argument
232 struct dentry *root = sdw->cdns.bus.debugfs; in intel_debugfs_init()
237 sdw->debugfs = debugfs_create_dir("intel-sdw", root); in intel_debugfs_init()
239 debugfs_create_file("intel-registers", 0400, sdw->debugfs, sdw, in intel_debugfs_init()
242 debugfs_create_file("intel-m-datamode", 0200, sdw->debugfs, sdw, in intel_debugfs_init()
245 debugfs_create_file("intel-s-datamode", 0200, sdw->debugfs, sdw, in intel_debugfs_init()
248 sdw_cdns_debugfs_init(&sdw->cdns, sdw->debugfs); in intel_debugfs_init()
251 static void intel_debugfs_exit(struct sdw_intel *sdw) in intel_debugfs_exit() argument
253 debugfs_remove_recursive(sdw->debugfs); in intel_debugfs_exit()
256 static void intel_debugfs_init(struct sdw_intel *sdw) {} in intel_debugfs_init() argument
257 static void intel_debugfs_exit(struct sdw_intel *sdw) {} in intel_debugfs_exit() argument
264 static void intel_shim_glue_to_master_ip(struct sdw_intel *sdw) in intel_shim_glue_to_master_ip() argument
266 void __iomem *shim = sdw->link_res->shim; in intel_shim_glue_to_master_ip()
267 unsigned int link_id = sdw->instance; in intel_shim_glue_to_master_ip()
294 static void intel_shim_master_ip_to_glue(struct sdw_intel *sdw) in intel_shim_master_ip_to_glue() argument
296 unsigned int link_id = sdw->instance; in intel_shim_master_ip_to_glue()
297 void __iomem *shim = sdw->link_res->shim; in intel_shim_master_ip_to_glue()
315 static void intel_shim_init(struct sdw_intel *sdw) in intel_shim_init() argument
317 void __iomem *shim = sdw->link_res->shim; in intel_shim_init()
318 unsigned int link_id = sdw->instance; in intel_shim_init()
338 intel_shim_glue_to_master_ip(sdw); in intel_shim_init()
347 static int intel_shim_check_wake(struct sdw_intel *sdw) in intel_shim_check_wake() argument
352 shim = sdw->link_res->shim; in intel_shim_check_wake()
355 return wake_sts & BIT(sdw->instance); in intel_shim_check_wake()
358 static void intel_shim_wake(struct sdw_intel *sdw, bool wake_enable) in intel_shim_wake() argument
360 void __iomem *shim = sdw->link_res->shim; in intel_shim_wake()
361 unsigned int link_id = sdw->instance; in intel_shim_wake()
364 mutex_lock(sdw->link_res->shim_lock); in intel_shim_wake()
381 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_wake()
384 static int intel_link_power_up(struct sdw_intel *sdw) in intel_link_power_up() argument
386 unsigned int link_id = sdw->instance; in intel_link_power_up()
387 void __iomem *shim = sdw->link_res->shim; in intel_link_power_up()
388 u32 *shim_mask = sdw->link_res->shim_mask; in intel_link_power_up()
389 struct sdw_bus *bus = &sdw->cdns.bus; in intel_link_power_up()
397 mutex_lock(sdw->link_res->shim_lock); in intel_link_power_up()
415 dev_dbg(sdw->cdns.dev, "powering up all links\n"); in intel_link_power_up()
418 dev_dbg(sdw->cdns.dev, in intel_link_power_up()
433 spa_mask = FIELD_PREP(SDW_SHIM_LCTL_SPA_MASK, sdw->link_res->link_mask); in intel_link_power_up()
434 cpa_mask = FIELD_PREP(SDW_SHIM_LCTL_CPA_MASK, sdw->link_res->link_mask); in intel_link_power_up()
440 dev_err(sdw->cdns.dev, "Failed to power up link: %d\n", ret); in intel_link_power_up()
448 dev_err(sdw->cdns.dev, in intel_link_power_up()
456 sdw->cdns.link_up = true; in intel_link_power_up()
458 intel_shim_init(sdw); in intel_link_power_up()
461 mutex_unlock(sdw->link_res->shim_lock); in intel_link_power_up()
466 static int intel_link_power_down(struct sdw_intel *sdw) in intel_link_power_down() argument
469 unsigned int link_id = sdw->instance; in intel_link_power_down()
470 void __iomem *shim = sdw->link_res->shim; in intel_link_power_down()
471 u32 *shim_mask = sdw->link_res->shim_mask; in intel_link_power_down()
474 mutex_lock(sdw->link_res->shim_lock); in intel_link_power_down()
477 dev_err(sdw->cdns.dev, in intel_link_power_down()
480 sdw->cdns.link_up = false; in intel_link_power_down()
482 intel_shim_master_ip_to_glue(sdw); in intel_link_power_down()
488 dev_dbg(sdw->cdns.dev, "powering down all links\n"); in intel_link_power_down()
494 spa_mask = FIELD_PREP(SDW_SHIM_LCTL_SPA_MASK, ~sdw->link_res->link_mask); in intel_link_power_down()
495 cpa_mask = FIELD_PREP(SDW_SHIM_LCTL_CPA_MASK, sdw->link_res->link_mask); in intel_link_power_down()
501 dev_err(sdw->cdns.dev, "%s: could not power down link\n", __func__); in intel_link_power_down()
510 mutex_unlock(sdw->link_res->shim_lock); in intel_link_power_down()
515 static void intel_shim_sync_arm(struct sdw_intel *sdw) in intel_shim_sync_arm() argument
517 void __iomem *shim = sdw->link_res->shim; in intel_shim_sync_arm()
520 mutex_lock(sdw->link_res->shim_lock); in intel_shim_sync_arm()
524 sync_reg |= (SDW_SHIM_SYNC_CMDSYNC << sdw->instance); in intel_shim_sync_arm()
527 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_sync_arm()
530 static int intel_shim_sync_go_unlocked(struct sdw_intel *sdw) in intel_shim_sync_go_unlocked() argument
532 void __iomem *shim = sdw->link_res->shim; in intel_shim_sync_go_unlocked()
550 dev_err(sdw->cdns.dev, "SyncGO clear failed: %d\n", ret); in intel_shim_sync_go_unlocked()
555 static int intel_shim_sync_go(struct sdw_intel *sdw) in intel_shim_sync_go() argument
559 mutex_lock(sdw->link_res->shim_lock); in intel_shim_sync_go()
561 ret = intel_shim_sync_go_unlocked(sdw); in intel_shim_sync_go()
563 mutex_unlock(sdw->link_res->shim_lock); in intel_shim_sync_go()
571 static void intel_pdi_init(struct sdw_intel *sdw, in intel_pdi_init() argument
574 void __iomem *shim = sdw->link_res->shim; in intel_pdi_init()
575 unsigned int link_id = sdw->instance; in intel_pdi_init()
585 dev_dbg(sdw->cdns.dev, "PCM cap bd:%d in:%d out:%d\n", in intel_pdi_init()
590 intel_pdi_get_ch_cap(struct sdw_intel *sdw, unsigned int pdi_num) in intel_pdi_get_ch_cap() argument
592 void __iomem *shim = sdw->link_res->shim; in intel_pdi_get_ch_cap()
593 unsigned int link_id = sdw->instance; in intel_pdi_get_ch_cap()
613 static int intel_pdi_get_ch_update(struct sdw_intel *sdw, in intel_pdi_get_ch_update() argument
621 pdi->ch_count = intel_pdi_get_ch_cap(sdw, pdi->num); in intel_pdi_get_ch_update()
630 static int intel_pdi_stream_ch_update(struct sdw_intel *sdw, in intel_pdi_stream_ch_update() argument
633 intel_pdi_get_ch_update(sdw, stream->bd, stream->num_bd, in intel_pdi_stream_ch_update()
636 intel_pdi_get_ch_update(sdw, stream->in, stream->num_in, in intel_pdi_stream_ch_update()
639 intel_pdi_get_ch_update(sdw, stream->out, stream->num_out, in intel_pdi_stream_ch_update()
645 static int intel_pdi_ch_update(struct sdw_intel *sdw) in intel_pdi_ch_update() argument
647 intel_pdi_stream_ch_update(sdw, &sdw->cdns.pcm); in intel_pdi_ch_update()
653 intel_pdi_shim_configure(struct sdw_intel *sdw, struct sdw_cdns_pdi *pdi) in intel_pdi_shim_configure() argument
655 void __iomem *shim = sdw->link_res->shim; in intel_pdi_shim_configure()
656 unsigned int link_id = sdw->instance; in intel_pdi_shim_configure()
684 intel_pdi_alh_configure(struct sdw_intel *sdw, struct sdw_cdns_pdi *pdi) in intel_pdi_alh_configure() argument
686 void __iomem *alh = sdw->link_res->alh; in intel_pdi_alh_configure()
687 unsigned int link_id = sdw->instance; in intel_pdi_alh_configure()
704 static int intel_params_stream(struct sdw_intel *sdw, in intel_params_stream() argument
710 struct sdw_intel_link_res *res = sdw->link_res; in intel_params_stream()
725 static int intel_free_stream(struct sdw_intel *sdw, in intel_free_stream() argument
730 struct sdw_intel_link_res *res = sdw->link_res; in intel_free_stream()
751 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_pre_bank_switch() local
757 intel_shim_sync_arm(sdw); in intel_pre_bank_switch()
765 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_post_bank_switch() local
766 void __iomem *shim = sdw->link_res->shim; in intel_post_bank_switch()
773 mutex_lock(sdw->link_res->shim_lock); in intel_post_bank_switch()
791 ret = intel_shim_sync_go_unlocked(sdw); in intel_post_bank_switch()
793 mutex_unlock(sdw->link_res->shim_lock); in intel_post_bank_switch()
796 dev_err(sdw->cdns.dev, "Post bank switch failed: %d\n", ret); in intel_post_bank_switch()
826 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_hw_params() local
852 intel_pdi_shim_configure(sdw, pdi); in intel_hw_params()
853 intel_pdi_alh_configure(sdw, pdi); in intel_hw_params()
863 ret = intel_params_stream(sdw, substream->stream, dai, params, in intel_hw_params()
864 sdw->instance, in intel_hw_params()
900 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_prepare() local
930 intel_pdi_shim_configure(sdw, dma->pdi); in intel_prepare()
931 intel_pdi_alh_configure(sdw, dma->pdi); in intel_prepare()
935 ret = intel_params_stream(sdw, substream->stream, dai, in intel_prepare()
937 sdw->instance, in intel_prepare()
948 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_hw_free() local
969 ret = intel_free_stream(sdw, substream->stream, dai, sdw->instance); in intel_hw_free()
1015 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_trigger() local
1016 struct sdw_intel_link_res *res = sdw->link_res; in intel_trigger()
1047 ret = intel_free_stream(sdw, substream->stream, dai, sdw->instance); in intel_trigger()
1093 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_component_dais_suspend() local
1114 ret = intel_free_stream(sdw, stream, dai, sdw->instance); in intel_component_dais_suspend()
1179 static int intel_register_dai(struct sdw_intel *sdw) in intel_register_dai() argument
1182 struct sdw_cdns *cdns = &sdw->cdns; in intel_register_dai()
1188 intel_pdi_init(sdw, &config); in intel_register_dai()
1193 intel_pdi_ch_update(sdw); in intel_register_dai()
1226 static int intel_start_bus(struct sdw_intel *sdw) in intel_start_bus() argument
1228 struct device *dev = sdw->cdns.dev; in intel_start_bus()
1229 struct sdw_cdns *cdns = &sdw->cdns; in intel_start_bus()
1244 intel_shim_sync_arm(sdw); in intel_start_bus()
1259 ret = intel_shim_sync_go(sdw); in intel_start_bus()
1275 static int intel_start_bus_after_reset(struct sdw_intel *sdw) in intel_start_bus_after_reset() argument
1277 struct device *dev = sdw->cdns.dev; in intel_start_bus_after_reset()
1278 struct sdw_cdns *cdns = &sdw->cdns; in intel_start_bus_after_reset()
1291 clock_stop0 = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_start_bus_after_reset()
1314 intel_shim_sync_arm(sdw); in intel_start_bus_after_reset()
1319 sdw_cdns_init(&sdw->cdns); in intel_start_bus_after_reset()
1343 ret = intel_shim_sync_go(sdw); in intel_start_bus_after_reset()
1345 dev_err(sdw->cdns.dev, "sync go failed during resume\n"); in intel_start_bus_after_reset()
1359 static void intel_check_clock_stop(struct sdw_intel *sdw) in intel_check_clock_stop() argument
1361 struct device *dev = sdw->cdns.dev; in intel_check_clock_stop()
1364 clock_stop0 = sdw_cdns_is_clock_stop(&sdw->cdns); in intel_check_clock_stop()
1369 static int intel_start_bus_after_clock_stop(struct sdw_intel *sdw) in intel_start_bus_after_clock_stop() argument
1371 struct device *dev = sdw->cdns.dev; in intel_start_bus_after_clock_stop()
1372 struct sdw_cdns *cdns = &sdw->cdns; in intel_start_bus_after_clock_stop()
1394 static int intel_stop_bus(struct sdw_intel *sdw, bool clock_stop) in intel_stop_bus() argument
1396 struct device *dev = sdw->cdns.dev; in intel_stop_bus()
1397 struct sdw_cdns *cdns = &sdw->cdns; in intel_stop_bus()
1415 ret = intel_link_power_down(sdw); in intel_stop_bus()
1421 intel_shim_wake(sdw, wake_enable); in intel_stop_bus()
1495 struct sdw_intel *sdw; in intel_link_probe() local
1500 sdw = devm_kzalloc(dev, sizeof(*sdw), GFP_KERNEL); in intel_link_probe()
1501 if (!sdw) in intel_link_probe()
1504 cdns = &sdw->cdns; in intel_link_probe()
1507 sdw->instance = auxdev->id; in intel_link_probe()
1508 sdw->link_res = &ldev->link_res; in intel_link_probe()
1510 cdns->registers = sdw->link_res->registers; in intel_link_probe()
1511 cdns->instance = sdw->instance; in intel_link_probe()
1527 sdw->cdns.bus.compute_params = sdw_compute_params; in intel_link_probe()
1555 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_link_startup() local
1565 sdw->instance); in intel_link_startup()
1585 ret = intel_link_power_up(sdw); in intel_link_startup()
1590 ret = intel_register_dai(sdw); in intel_link_startup()
1596 intel_debugfs_init(sdw); in intel_link_startup()
1599 ret = intel_start_bus(sdw); in intel_link_startup()
1616 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_link_startup()
1646 sdw->startup_done = true; in intel_link_startup()
1650 intel_link_power_down(sdw); in intel_link_startup()
1658 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_link_remove() local
1667 intel_debugfs_exit(sdw); in intel_link_remove()
1676 struct sdw_intel *sdw; in intel_link_process_wakeen_event() local
1679 sdw = auxiliary_get_drvdata(auxdev); in intel_link_process_wakeen_event()
1680 bus = &sdw->cdns.bus; in intel_link_process_wakeen_event()
1682 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_link_process_wakeen_event()
1688 if (!intel_shim_check_wake(sdw)) in intel_link_process_wakeen_event()
1692 intel_shim_wake(sdw, false); in intel_link_process_wakeen_event()
1734 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_pm_prepare() local
1739 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_pm_prepare()
1745 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_pm_prepare()
1794 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_suspend() local
1799 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_suspend()
1808 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend()
1820 intel_shim_wake(sdw, false); in intel_suspend()
1827 ret = intel_stop_bus(sdw, false); in intel_suspend()
1839 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_suspend_runtime() local
1844 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_suspend_runtime()
1850 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_suspend_runtime()
1853 ret = intel_stop_bus(sdw, false); in intel_suspend_runtime()
1860 ret = intel_stop_bus(sdw, true); in intel_suspend_runtime()
1878 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_resume() local
1883 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_resume()
1906 ret = intel_link_power_up(sdw); in intel_resume()
1918 ret = intel_start_bus(sdw); in intel_resume()
1921 intel_link_power_down(sdw); in intel_resume()
1943 struct sdw_intel *sdw = cdns_to_intel(cdns); in intel_resume_runtime() local
1948 if (bus->prop.hw_disabled || !sdw->startup_done) { in intel_resume_runtime()
1955 intel_shim_wake(sdw, false); in intel_resume_runtime()
1957 clock_stop_quirks = sdw->link_res->clock_stop_quirks; in intel_resume_runtime()
1960 ret = intel_link_power_up(sdw); in intel_resume_runtime()
1972 ret = intel_start_bus(sdw); in intel_resume_runtime()
1975 intel_link_power_down(sdw); in intel_resume_runtime()
1981 ret = intel_link_power_up(sdw); in intel_resume_runtime()
1987 ret = intel_start_bus_after_reset(sdw); in intel_resume_runtime()
1990 intel_link_power_down(sdw); in intel_resume_runtime()
1995 intel_check_clock_stop(sdw); in intel_resume_runtime()
1997 ret = intel_link_power_up(sdw); in intel_resume_runtime()
2003 ret = intel_start_bus_after_clock_stop(sdw); in intel_resume_runtime()
2006 intel_link_power_down(sdw); in intel_resume_runtime()