Lines Matching full:mutex
13 #include <linux/soc/mediatek/mtk-mutex.h>
342 struct mtk_mutex mutex[MTK_MUTEX_MAX_HANDLES]; member
681 * So that MUTEX can not only send a STREAM_DONE event to GCE
814 if (!mtx->mutex[i].claimed) { in mtk_mutex_get()
815 mtx->mutex[i].claimed = true; in mtk_mutex_get()
816 return &mtx->mutex[i]; in mtk_mutex_get()
823 void mtk_mutex_put(struct mtk_mutex *mutex) in mtk_mutex_put() argument
825 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_put()
826 mutex[mutex->id]); in mtk_mutex_put()
828 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_put()
830 mutex->claimed = false; in mtk_mutex_put()
834 int mtk_mutex_prepare(struct mtk_mutex *mutex) in mtk_mutex_prepare() argument
836 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_prepare()
837 mutex[mutex->id]); in mtk_mutex_prepare()
842 void mtk_mutex_unprepare(struct mtk_mutex *mutex) in mtk_mutex_unprepare() argument
844 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_unprepare()
845 mutex[mutex->id]); in mtk_mutex_unprepare()
850 void mtk_mutex_add_comp(struct mtk_mutex *mutex, in mtk_mutex_add_comp() argument
853 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_add_comp()
854 mutex[mutex->id]); in mtk_mutex_add_comp()
859 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_add_comp()
889 mutex->id); in mtk_mutex_add_comp()
894 offset = DISP_REG_MUTEX_MOD2(mutex->id); in mtk_mutex_add_comp()
904 DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id)); in mtk_mutex_add_comp()
908 void mtk_mutex_remove_comp(struct mtk_mutex *mutex, in mtk_mutex_remove_comp() argument
911 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_remove_comp()
912 mutex[mutex->id]); in mtk_mutex_remove_comp()
916 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_remove_comp()
930 mutex->id)); in mtk_mutex_remove_comp()
935 mutex->id); in mtk_mutex_remove_comp()
940 offset = DISP_REG_MUTEX_MOD2(mutex->id); in mtk_mutex_remove_comp()
950 void mtk_mutex_enable(struct mtk_mutex *mutex) in mtk_mutex_enable() argument
952 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_enable()
953 mutex[mutex->id]); in mtk_mutex_enable()
955 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_enable()
957 writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id)); in mtk_mutex_enable()
961 int mtk_mutex_enable_by_cmdq(struct mtk_mutex *mutex, void *pkt) in mtk_mutex_enable_by_cmdq() argument
963 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_enable_by_cmdq()
964 mutex[mutex->id]); in mtk_mutex_enable_by_cmdq()
967 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_enable_by_cmdq()
975 mtx->addr + DISP_REG_MUTEX_EN(mutex->id), 1); in mtk_mutex_enable_by_cmdq()
980 void mtk_mutex_disable(struct mtk_mutex *mutex) in mtk_mutex_disable() argument
982 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_disable()
983 mutex[mutex->id]); in mtk_mutex_disable()
985 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_disable()
987 writel(0, mtx->regs + DISP_REG_MUTEX_EN(mutex->id)); in mtk_mutex_disable()
991 void mtk_mutex_acquire(struct mtk_mutex *mutex) in mtk_mutex_acquire() argument
993 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_acquire()
994 mutex[mutex->id]); in mtk_mutex_acquire()
997 writel(1, mtx->regs + DISP_REG_MUTEX_EN(mutex->id)); in mtk_mutex_acquire()
998 writel(1, mtx->regs + DISP_REG_MUTEX(mutex->id)); in mtk_mutex_acquire()
999 if (readl_poll_timeout_atomic(mtx->regs + DISP_REG_MUTEX(mutex->id), in mtk_mutex_acquire()
1001 pr_err("could not acquire mutex %d\n", mutex->id); in mtk_mutex_acquire()
1005 void mtk_mutex_release(struct mtk_mutex *mutex) in mtk_mutex_release() argument
1007 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_release()
1008 mutex[mutex->id]); in mtk_mutex_release()
1010 writel(0, mtx->regs + DISP_REG_MUTEX(mutex->id)); in mtk_mutex_release()
1014 int mtk_mutex_write_mod(struct mtk_mutex *mutex, in mtk_mutex_write_mod() argument
1017 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_write_mod()
1018 mutex[mutex->id]); in mtk_mutex_write_mod()
1022 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_write_mod()
1040 * mutex ID bit accordingly. in mtk_mutex_write_mod()
1044 mutex->id); in mtk_mutex_write_mod()
1047 mutex->id); in mtk_mutex_write_mod()
1063 int mtk_mutex_write_sof(struct mtk_mutex *mutex, in mtk_mutex_write_sof() argument
1066 struct mtk_mutex_ctx *mtx = container_of(mutex, struct mtk_mutex_ctx, in mtk_mutex_write_sof()
1067 mutex[mutex->id]); in mtk_mutex_write_sof()
1069 WARN_ON(&mtx->mutex[mutex->id] != mutex); in mtk_mutex_write_sof()
1078 DISP_REG_MUTEX_SOF(mtx->data->mutex_sof_reg, mutex->id)); in mtk_mutex_write_sof()
1096 mtx->mutex[i].id = i; in mtk_mutex_probe()
1108 dev_err(dev, "Failed to map mutex registers\n"); in mtk_mutex_probe()
1124 { .compatible = "mediatek,mt2701-disp-mutex", .data = &mt2701_mutex_driver_data },
1125 { .compatible = "mediatek,mt2712-disp-mutex", .data = &mt2712_mutex_driver_data },
1126 { .compatible = "mediatek,mt6795-disp-mutex", .data = &mt6795_mutex_driver_data },
1127 { .compatible = "mediatek,mt8167-disp-mutex", .data = &mt8167_mutex_driver_data },
1128 { .compatible = "mediatek,mt8173-disp-mutex", .data = &mt8173_mutex_driver_data },
1129 { .compatible = "mediatek,mt8183-disp-mutex", .data = &mt8183_mutex_driver_data },
1130 { .compatible = "mediatek,mt8186-disp-mutex", .data = &mt8186_mutex_driver_data },
1131 { .compatible = "mediatek,mt8186-mdp3-mutex", .data = &mt8186_mdp_mutex_driver_data },
1132 { .compatible = "mediatek,mt8188-disp-mutex", .data = &mt8188_mutex_driver_data },
1133 { .compatible = "mediatek,mt8188-vpp-mutex", .data = &mt8188_vpp_mutex_driver_data },
1134 { .compatible = "mediatek,mt8192-disp-mutex", .data = &mt8192_mutex_driver_data },
1135 { .compatible = "mediatek,mt8195-disp-mutex", .data = &mt8195_mutex_driver_data },
1136 { .compatible = "mediatek,mt8195-vpp-mutex", .data = &mt8195_vpp_mutex_driver_data },
1137 { .compatible = "mediatek,mt8365-disp-mutex", .data = &mt8365_mutex_driver_data },
1145 .name = "mediatek-mutex",
1152 MODULE_DESCRIPTION("MediaTek SoC MUTEX driver");