Lines Matching refs:ctx
83 #define gsc_read(offset) readl(ctx->regs + (offset))
84 #define gsc_write(cfg, offset) writel(cfg, ctx->regs + (offset))
398 static int gsc_sw_reset(struct gsc_context *ctx) in gsc_sw_reset() argument
438 static void gsc_set_gscblk_fimd_wb(struct gsc_context *ctx, bool enable) in gsc_set_gscblk_fimd_wb() argument
445 gscblk_cfg |= GSC_BLK_DISP1WB_DEST(ctx->id) | in gsc_set_gscblk_fimd_wb()
446 GSC_BLK_GSCL_WB_IN_SRC_SEL(ctx->id) | in gsc_set_gscblk_fimd_wb()
447 GSC_BLK_SW_RESET_WB_DEST(ctx->id); in gsc_set_gscblk_fimd_wb()
449 gscblk_cfg |= GSC_BLK_PXLASYNC_LO_MASK_WB(ctx->id); in gsc_set_gscblk_fimd_wb()
454 static void gsc_handle_irq(struct gsc_context *ctx, bool enable, in gsc_handle_irq() argument
486 struct gsc_context *ctx = get_gsc_context(dev); in gsc_src_set_fmt() local
487 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_src_set_fmt()
559 struct gsc_context *ctx = get_gsc_context(dev); in gsc_src_set_transf() local
560 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_src_set_transf()
596 ctx->rotation = cfg & in gsc_src_set_transf()
598 *swap = ctx->rotation; in gsc_src_set_transf()
606 struct gsc_context *ctx = get_gsc_context(dev); in gsc_src_set_size() local
608 struct gsc_scaler *sc = &ctx->sc; in gsc_src_set_size()
662 static int gsc_src_set_buf_seq(struct gsc_context *ctx, u32 buf_id, in gsc_src_set_buf_seq() argument
665 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_src_set_buf_seq()
701 struct gsc_context *ctx = get_gsc_context(dev); in gsc_src_set_addr() local
702 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_src_set_addr()
741 return gsc_src_set_buf_seq(ctx, buf_id, buf_type); in gsc_src_set_addr()
753 struct gsc_context *ctx = get_gsc_context(dev); in gsc_dst_set_fmt() local
754 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_dst_set_fmt()
823 struct gsc_context *ctx = get_gsc_context(dev); in gsc_dst_set_transf() local
824 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_dst_set_transf()
860 ctx->rotation = cfg & in gsc_dst_set_transf()
862 *swap = ctx->rotation; in gsc_dst_set_transf()
901 static int gsc_set_prescaler(struct gsc_context *ctx, struct gsc_scaler *sc, in gsc_set_prescaler() argument
904 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_set_prescaler()
912 if (ctx->rotation) { in gsc_set_prescaler()
954 static void gsc_set_h_coef(struct gsc_context *ctx, unsigned long main_hratio) in gsc_set_h_coef() argument
980 static void gsc_set_v_coef(struct gsc_context *ctx, unsigned long main_vratio) in gsc_set_v_coef() argument
1006 static void gsc_set_scaler(struct gsc_context *ctx, struct gsc_scaler *sc) in gsc_set_scaler() argument
1013 gsc_set_h_coef(ctx, sc->main_hratio); in gsc_set_scaler()
1017 gsc_set_v_coef(ctx, sc->main_vratio); in gsc_set_scaler()
1025 struct gsc_context *ctx = get_gsc_context(dev); in gsc_dst_set_size() local
1027 struct gsc_scaler *sc = &ctx->sc; in gsc_dst_set_size()
1078 static int gsc_dst_get_buf_seq(struct gsc_context *ctx) in gsc_dst_get_buf_seq() argument
1094 static int gsc_dst_set_buf_seq(struct gsc_context *ctx, u32 buf_id, in gsc_dst_set_buf_seq() argument
1097 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_dst_set_buf_seq()
1105 mutex_lock(&ctx->lock); in gsc_dst_set_buf_seq()
1132 gsc_dst_get_buf_seq(ctx) >= GSC_BUF_START) in gsc_dst_set_buf_seq()
1133 gsc_handle_irq(ctx, true, false, true); in gsc_dst_set_buf_seq()
1137 gsc_dst_get_buf_seq(ctx) <= GSC_BUF_STOP) in gsc_dst_set_buf_seq()
1138 gsc_handle_irq(ctx, false, false, true); in gsc_dst_set_buf_seq()
1141 mutex_unlock(&ctx->lock); in gsc_dst_set_buf_seq()
1149 struct gsc_context *ctx = get_gsc_context(dev); in gsc_dst_set_addr() local
1150 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_dst_set_addr()
1189 return gsc_dst_set_buf_seq(ctx, buf_id, buf_type); in gsc_dst_set_addr()
1199 static int gsc_clk_ctrl(struct gsc_context *ctx, bool enable) in gsc_clk_ctrl() argument
1204 clk_enable(ctx->gsc_clk); in gsc_clk_ctrl()
1205 ctx->suspended = false; in gsc_clk_ctrl()
1207 clk_disable(ctx->gsc_clk); in gsc_clk_ctrl()
1208 ctx->suspended = true; in gsc_clk_ctrl()
1214 static int gsc_get_src_buf_index(struct gsc_context *ctx) in gsc_get_src_buf_index() argument
1220 DRM_DEBUG_KMS("gsc id[%d]\n", ctx->id); in gsc_get_src_buf_index()
1237 ret = gsc_src_set_buf_seq(ctx, buf_id, IPP_BUF_DEQUEUE); in gsc_get_src_buf_index()
1249 static int gsc_get_dst_buf_index(struct gsc_context *ctx) in gsc_get_dst_buf_index() argument
1255 DRM_DEBUG_KMS("gsc id[%d]\n", ctx->id); in gsc_get_dst_buf_index()
1272 ret = gsc_dst_set_buf_seq(ctx, buf_id, IPP_BUF_DEQUEUE); in gsc_get_dst_buf_index()
1286 struct gsc_context *ctx = dev_id; in gsc_irq_handler() local
1287 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_irq_handler()
1294 DRM_DEBUG_KMS("gsc id[%d]\n", ctx->id); in gsc_irq_handler()
1299 ctx->id, status); in gsc_irq_handler()
1305 ctx->id, status); in gsc_irq_handler()
1307 buf_id[EXYNOS_DRM_OPS_SRC] = gsc_get_src_buf_index(ctx); in gsc_irq_handler()
1311 buf_id[EXYNOS_DRM_OPS_DST] = gsc_get_dst_buf_index(ctx); in gsc_irq_handler()
1375 struct gsc_context *ctx = get_gsc_context(dev); in gsc_ippdrv_check_property() local
1376 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_ippdrv_check_property()
1488 struct gsc_context *ctx = get_gsc_context(dev); in gsc_ippdrv_reset() local
1489 struct gsc_scaler *sc = &ctx->sc; in gsc_ippdrv_reset()
1493 ret = gsc_sw_reset(ctx); in gsc_ippdrv_reset()
1500 memset(&ctx->sc, 0x0, sizeof(ctx->sc)); in gsc_ippdrv_reset()
1508 struct gsc_context *ctx = get_gsc_context(dev); in gsc_ippdrv_start() local
1509 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_ippdrv_start()
1527 gsc_handle_irq(ctx, true, false, true); in gsc_ippdrv_start()
1557 gsc_set_gscblk_fimd_wb(ctx, set_wb.enable); in gsc_ippdrv_start()
1589 ret = gsc_set_prescaler(ctx, &ctx->sc, in gsc_ippdrv_start()
1597 gsc_set_scaler(ctx, &ctx->sc); in gsc_ippdrv_start()
1608 struct gsc_context *ctx = get_gsc_context(dev); in gsc_ippdrv_stop() local
1619 gsc_set_gscblk_fimd_wb(ctx, set_wb.enable); in gsc_ippdrv_stop()
1628 gsc_handle_irq(ctx, false, false, true); in gsc_ippdrv_stop()
1643 struct gsc_context *ctx; in gsc_probe() local
1648 ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); in gsc_probe()
1649 if (!ctx) in gsc_probe()
1653 ctx->gsc_clk = devm_clk_get(dev, "gscl"); in gsc_probe()
1654 if (IS_ERR(ctx->gsc_clk)) { in gsc_probe()
1656 return PTR_ERR(ctx->gsc_clk); in gsc_probe()
1660 ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); in gsc_probe()
1661 ctx->regs = devm_ioremap_resource(dev, ctx->regs_res); in gsc_probe()
1662 if (IS_ERR(ctx->regs)) in gsc_probe()
1663 return PTR_ERR(ctx->regs); in gsc_probe()
1672 ctx->irq = res->start; in gsc_probe()
1673 ret = devm_request_threaded_irq(dev, ctx->irq, NULL, gsc_irq_handler, in gsc_probe()
1674 IRQF_ONESHOT, "drm_gsc", ctx); in gsc_probe()
1681 ctx->id = pdev->id; in gsc_probe()
1683 ippdrv = &ctx->ippdrv; in gsc_probe()
1697 DRM_DEBUG_KMS("id[%d]ippdrv[0x%x]\n", ctx->id, (int)ippdrv); in gsc_probe()
1699 mutex_init(&ctx->lock); in gsc_probe()
1700 platform_set_drvdata(pdev, ctx); in gsc_probe()
1723 struct gsc_context *ctx = get_gsc_context(dev); in gsc_remove() local
1724 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in gsc_remove()
1727 mutex_destroy(&ctx->lock); in gsc_remove()
1738 struct gsc_context *ctx = get_gsc_context(dev); in gsc_suspend() local
1740 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in gsc_suspend()
1745 return gsc_clk_ctrl(ctx, false); in gsc_suspend()
1750 struct gsc_context *ctx = get_gsc_context(dev); in gsc_resume() local
1752 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in gsc_resume()
1755 return gsc_clk_ctrl(ctx, true); in gsc_resume()
1764 struct gsc_context *ctx = get_gsc_context(dev); in gsc_runtime_suspend() local
1766 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in gsc_runtime_suspend()
1768 return gsc_clk_ctrl(ctx, false); in gsc_runtime_suspend()
1773 struct gsc_context *ctx = get_gsc_context(dev); in gsc_runtime_resume() local
1775 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in gsc_runtime_resume()
1777 return gsc_clk_ctrl(ctx, true); in gsc_runtime_resume()