Lines Matching +full:mt8173 +full:- +full:disp
1 // SPDX-License-Identifier: GPL-2.0-only
12 #include <linux/soc/mediatek/mtk-mmsys.h>
13 #include <linux/soc/mediatek/mtk-mutex.h>
284 if (!mtx->mutex[i].claimed) { in mtk_mutex_get()
285 mtx->mutex[i].claimed = true; in mtk_mutex_get()
286 return &mtx->mutex[i]; in mtk_mutex_get()
289 return ERR_PTR(-EBUSY); in mtk_mutex_get()
296 mutex[mutex->id]); in mtk_mutex_put()
298 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_put()
300 mutex->claimed = false; in mtk_mutex_put()
307 mutex[mutex->id]); in mtk_mutex_prepare()
308 return clk_prepare_enable(mtx->clk); in mtk_mutex_prepare()
315 mutex[mutex->id]); in mtk_mutex_unprepare()
316 clk_disable_unprepare(mtx->clk); in mtk_mutex_unprepare()
324 mutex[mutex->id]); in mtk_mutex_add_comp()
329 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_add_comp()
351 if (mtx->data->mutex_mod[id] < 32) { in mtk_mutex_add_comp()
352 offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg, in mtk_mutex_add_comp()
353 mutex->id); in mtk_mutex_add_comp()
354 reg = readl_relaxed(mtx->regs + offset); in mtk_mutex_add_comp()
355 reg |= 1 << mtx->data->mutex_mod[id]; in mtk_mutex_add_comp()
356 writel_relaxed(reg, mtx->regs + offset); in mtk_mutex_add_comp()
358 offset = DISP_REG_MUTEX_MOD2(mutex->id); in mtk_mutex_add_comp()
359 reg = readl_relaxed(mtx->regs + offset); in mtk_mutex_add_comp()
360 reg |= 1 << (mtx->data->mutex_mod[id] - 32); in mtk_mutex_add_comp()
361 writel_relaxed(reg, mtx->regs + offset); in mtk_mutex_add_comp()
366 writel_relaxed(mtx->data->mutex_sof[sof_id], in mtk_mutex_add_comp()
367 mtx->regs + in mtk_mutex_add_comp()
368 DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id)); in mtk_mutex_add_comp()
376 mutex[mutex->id]); in mtk_mutex_remove_comp()
380 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_remove_comp()
390 mtx->regs + in mtk_mutex_remove_comp()
391 DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, in mtk_mutex_remove_comp()
392 mutex->id)); in mtk_mutex_remove_comp()
395 if (mtx->data->mutex_mod[id] < 32) { in mtk_mutex_remove_comp()
396 offset = DISP_REG_MUTEX_MOD(mtx->data->mutex_mod_reg, in mtk_mutex_remove_comp()
397 mutex->id); in mtk_mutex_remove_comp()
398 reg = readl_relaxed(mtx->regs + offset); in mtk_mutex_remove_comp()
399 reg &= ~(1 << mtx->data->mutex_mod[id]); in mtk_mutex_remove_comp()
400 writel_relaxed(reg, mtx->regs + offset); in mtk_mutex_remove_comp()
402 offset = DISP_REG_MUTEX_MOD2(mutex->id); in mtk_mutex_remove_comp()
403 reg = readl_relaxed(mtx->regs + offset); in mtk_mutex_remove_comp()
404 reg &= ~(1 << (mtx->data->mutex_mod[id] - 32)); in mtk_mutex_remove_comp()
405 writel_relaxed(reg, mtx->regs + offset); in mtk_mutex_remove_comp()
415 mutex[mutex->id]); in mtk_mutex_enable()
417 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_enable()
419 writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id)); in mtk_mutex_enable()
426 mutex[mutex->id]); in mtk_mutex_disable()
428 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_disable()
430 writel(0, mtx->regs + DISP_REG_MUTEX_EN(mutex->id)); in mtk_mutex_disable()
437 mutex[mutex->id]); in mtk_mutex_acquire()
440 writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id)); in mtk_mutex_acquire()
441 writel(1, mtx->regs + DISP_REG_MUTEX(mutex->id)); in mtk_mutex_acquire()
442 if (readl_poll_timeout_atomic(mtx->regs + DISP_REG_MUTEX(mutex->id), in mtk_mutex_acquire()
444 pr_err("could not acquire mutex %d\n", mutex->id); in mtk_mutex_acquire()
451 mutex[mutex->id]); in mtk_mutex_release()
453 writel(0, mtx->regs + DISP_REG_MUTEX(mutex->id)); in mtk_mutex_release()
459 struct device *dev = &pdev->dev; in mtk_mutex_probe()
466 return -ENOMEM; in mtk_mutex_probe()
469 mtx->mutex[i].id = i; in mtk_mutex_probe()
471 mtx->data = of_device_get_match_data(dev); in mtk_mutex_probe()
473 if (!mtx->data->no_clk) { in mtk_mutex_probe()
474 mtx->clk = devm_clk_get(dev, NULL); in mtk_mutex_probe()
475 if (IS_ERR(mtx->clk)) { in mtk_mutex_probe()
476 if (PTR_ERR(mtx->clk) != -EPROBE_DEFER) in mtk_mutex_probe()
478 return PTR_ERR(mtx->clk); in mtk_mutex_probe()
483 mtx->regs = devm_ioremap_resource(dev, regs); in mtk_mutex_probe()
484 if (IS_ERR(mtx->regs)) { in mtk_mutex_probe()
486 return PTR_ERR(mtx->regs); in mtk_mutex_probe()
500 { .compatible = "mediatek,mt2701-disp-mutex",
502 { .compatible = "mediatek,mt2712-disp-mutex",
504 { .compatible = "mediatek,mt8167-disp-mutex",
506 { .compatible = "mediatek,mt8173-disp-mutex",
508 { .compatible = "mediatek,mt8183-disp-mutex",
518 .name = "mediatek-mutex",