Lines Matching refs:ctx

65 #define gsc_read(offset)		readl(ctx->regs + (offset))
66 #define gsc_write(cfg, offset) writel(cfg, ctx->regs + (offset))
379 static int gsc_sw_reset(struct gsc_context *ctx)
397 DRM_DEV_ERROR(ctx->dev, "failed to reset gsc h/w.\n");
419 static void gsc_handle_irq(struct gsc_context *ctx, bool enable,
424 DRM_DEV_DEBUG_KMS(ctx->dev, "enable[%d]overflow[%d]level[%d]\n",
449 static void gsc_src_set_fmt(struct gsc_context *ctx, u32 fmt, bool tiled)
453 DRM_DEV_DEBUG_KMS(ctx->dev, "fmt[0x%x]\n", fmt);
521 static void gsc_src_set_transf(struct gsc_context *ctx, unsigned int rotation)
561 ctx->rotation = (cfg & GSC_IN_ROT_90) ? 1 : 0;
564 static void gsc_src_set_size(struct gsc_context *ctx,
567 struct gsc_scaler *sc = &ctx->sc;
607 static void gsc_src_set_buf_seq(struct gsc_context *ctx, u32 buf_id,
625 static void gsc_src_set_addr(struct gsc_context *ctx, u32 buf_id,
633 gsc_src_set_buf_seq(ctx, buf_id, true);
636 static void gsc_dst_set_fmt(struct gsc_context *ctx, u32 fmt, bool tiled)
640 DRM_DEV_DEBUG_KMS(ctx->dev, "fmt[0x%x]\n", fmt);
708 static int gsc_get_ratio_shift(struct gsc_context *ctx, u32 src, u32 dst,
711 DRM_DEV_DEBUG_KMS(ctx->dev, "src[%d]dst[%d]\n", src, dst);
714 DRM_DEV_ERROR(ctx->dev, "failed to make ratio and shift.\n");
743 static int gsc_set_prescaler(struct gsc_context *ctx, struct gsc_scaler *sc,
754 if (ctx->rotation) {
762 ret = gsc_get_ratio_shift(ctx, src_w, dst_w, &sc->pre_hratio);
764 DRM_DEV_ERROR(ctx->dev, "failed to get ratio horizontal.\n");
768 ret = gsc_get_ratio_shift(ctx, src_h, dst_h, &sc->pre_vratio);
770 DRM_DEV_ERROR(ctx->dev, "failed to get ratio vertical.\n");
774 DRM_DEV_DEBUG_KMS(ctx->dev, "pre_hratio[%d]pre_vratio[%d]\n",
780 DRM_DEV_DEBUG_KMS(ctx->dev, "main_hratio[%ld]main_vratio[%ld]\n",
786 DRM_DEV_DEBUG_KMS(ctx->dev, "pre_shfactor[%d]\n", sc->pre_shfactor);
796 static void gsc_set_h_coef(struct gsc_context *ctx, unsigned long main_hratio)
822 static void gsc_set_v_coef(struct gsc_context *ctx, unsigned long main_vratio)
848 static void gsc_set_scaler(struct gsc_context *ctx, struct gsc_scaler *sc)
852 DRM_DEV_DEBUG_KMS(ctx->dev, "main_hratio[%ld]main_vratio[%ld]\n",
855 gsc_set_h_coef(ctx, sc->main_hratio);
859 gsc_set_v_coef(ctx, sc->main_vratio);
864 static void gsc_dst_set_size(struct gsc_context *ctx,
867 struct gsc_scaler *sc = &ctx->sc;
876 if (ctx->rotation)
908 static int gsc_dst_get_buf_seq(struct gsc_context *ctx)
919 DRM_DEV_DEBUG_KMS(ctx->dev, "buf_num[%d]\n", buf_num);
924 static void gsc_dst_set_buf_seq(struct gsc_context *ctx, u32 buf_id,
942 if (enqueue && gsc_dst_get_buf_seq(ctx) >= GSC_BUF_START)
943 gsc_handle_irq(ctx, true, false, true);
946 if (!enqueue && gsc_dst_get_buf_seq(ctx) <= GSC_BUF_STOP)
947 gsc_handle_irq(ctx, false, false, true);
950 static void gsc_dst_set_addr(struct gsc_context *ctx,
958 gsc_dst_set_buf_seq(ctx, buf_id, true);
961 static int gsc_get_src_buf_index(struct gsc_context *ctx)
966 DRM_DEV_DEBUG_KMS(ctx->dev, "gsc id[%d]\n", ctx->id);
978 DRM_DEV_DEBUG_KMS(ctx->dev, "cfg[0x%x]curr_index[%d]buf_id[%d]\n", cfg,
982 DRM_DEV_ERROR(ctx->dev, "failed to get in buffer index.\n");
986 gsc_src_set_buf_seq(ctx, buf_id, false);
991 static int gsc_get_dst_buf_index(struct gsc_context *ctx)
996 DRM_DEV_DEBUG_KMS(ctx->dev, "gsc id[%d]\n", ctx->id);
1009 DRM_DEV_ERROR(ctx->dev, "failed to get out buffer index.\n");
1013 gsc_dst_set_buf_seq(ctx, buf_id, false);
1015 DRM_DEV_DEBUG_KMS(ctx->dev, "cfg[0x%x]curr_index[%d]buf_id[%d]\n", cfg,
1023 struct gsc_context *ctx = dev_id;
1027 DRM_DEV_DEBUG_KMS(ctx->dev, "gsc id[%d]\n", ctx->id);
1031 dev_err(ctx->dev, "occurred overflow at %d, status 0x%x.\n",
1032 ctx->id, status);
1039 dev_dbg(ctx->dev, "occurred frame done at %d, status 0x%x.\n",
1040 ctx->id, status);
1042 src_buf_id = gsc_get_src_buf_index(ctx);
1043 dst_buf_id = gsc_get_dst_buf_index(ctx);
1045 DRM_DEV_DEBUG_KMS(ctx->dev, "buf_id_src[%d]buf_id_dst[%d]\n",
1052 if (ctx->task) {
1053 struct exynos_drm_ipp_task *task = ctx->task;
1055 ctx->task = NULL;
1056 pm_runtime_mark_last_busy(ctx->dev);
1057 pm_runtime_put_autosuspend(ctx->dev);
1064 static int gsc_reset(struct gsc_context *ctx)
1066 struct gsc_scaler *sc = &ctx->sc;
1070 ret = gsc_sw_reset(ctx);
1072 dev_err(ctx->dev, "failed to reset hardware.\n");
1077 memset(&ctx->sc, 0x0, sizeof(ctx->sc));
1083 static void gsc_start(struct gsc_context *ctx)
1087 gsc_handle_irq(ctx, true, false, true);
1107 gsc_set_scaler(ctx, &ctx->sc);
1117 struct gsc_context *ctx = container_of(ipp, struct gsc_context, ipp);
1120 ret = pm_runtime_resume_and_get(ctx->dev);
1122 dev_err(ctx->dev, "failed to enable GScaler device.\n");
1126 ctx->task = task;
1128 ret = gsc_reset(ctx);
1130 pm_runtime_put_autosuspend(ctx->dev);
1131 ctx->task = NULL;
1135 gsc_src_set_fmt(ctx, task->src.buf.fourcc, task->src.buf.modifier);
1136 gsc_src_set_transf(ctx, task->transform.rotation);
1137 gsc_src_set_size(ctx, &task->src);
1138 gsc_src_set_addr(ctx, 0, &task->src);
1139 gsc_dst_set_fmt(ctx, task->dst.buf.fourcc, task->dst.buf.modifier);
1140 gsc_dst_set_size(ctx, &task->dst);
1141 gsc_dst_set_addr(ctx, 0, &task->dst);
1142 gsc_set_prescaler(ctx, &ctx->sc, &task->src.rect, &task->dst.rect);
1143 gsc_start(ctx);
1151 struct gsc_context *ctx =
1154 gsc_reset(ctx);
1155 if (ctx->task) {
1156 struct exynos_drm_ipp_task *task = ctx->task;
1158 ctx->task = NULL;
1159 pm_runtime_mark_last_busy(ctx->dev);
1160 pm_runtime_put_autosuspend(ctx->dev);
1172 struct gsc_context *ctx = dev_get_drvdata(dev);
1174 struct exynos_drm_ipp *ipp = &ctx->ipp;
1176 ctx->drm_dev = drm_dev;
1177 ctx->drm_dev = drm_dev;
1178 exynos_drm_register_dma(drm_dev, dev, &ctx->dma_priv);
1183 ctx->formats, ctx->num_formats, "gsc");
1193 struct gsc_context *ctx = dev_get_drvdata(dev);
1195 struct exynos_drm_ipp *ipp = &ctx->ipp;
1198 exynos_drm_unregister_dma(drm_dev, dev, &ctx->dma_priv);
1223 struct gsc_context *ctx;
1226 ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL);
1227 if (!ctx)
1231 ctx->dev = dev;
1232 ctx->num_clocks = driver_data->num_clocks;
1233 ctx->clk_names = driver_data->clk_names;
1260 ctx->formats = formats;
1261 ctx->num_formats = num_formats;
1264 for (i = 0; i < ctx->num_clocks; i++) {
1265 ctx->clocks[i] = devm_clk_get(dev, ctx->clk_names[i]);
1266 if (IS_ERR(ctx->clocks[i])) {
1268 ctx->clk_names[i]);
1269 return PTR_ERR(ctx->clocks[i]);
1273 ctx->regs = devm_platform_ioremap_resource(pdev, 0);
1274 if (IS_ERR(ctx->regs))
1275 return PTR_ERR(ctx->regs);
1278 ctx->irq = platform_get_irq(pdev, 0);
1279 if (ctx->irq < 0)
1280 return ctx->irq;
1282 ret = devm_request_irq(dev, ctx->irq, gsc_irq_handler, 0,
1283 dev_name(dev), ctx);
1290 ctx->id = pdev->id;
1292 platform_set_drvdata(pdev, ctx);
1323 struct gsc_context *ctx = get_gsc_context(dev);
1326 DRM_DEV_DEBUG_KMS(dev, "id[%d]\n", ctx->id);
1328 for (i = ctx->num_clocks - 1; i >= 0; i--)
1329 clk_disable_unprepare(ctx->clocks[i]);
1336 struct gsc_context *ctx = get_gsc_context(dev);
1339 DRM_DEV_DEBUG_KMS(dev, "id[%d]\n", ctx->id);
1341 for (i = 0; i < ctx->num_clocks; i++) {
1342 ret = clk_prepare_enable(ctx->clocks[i]);
1345 clk_disable_unprepare(ctx->clocks[i]);