void gsc_hw_set_input_buf_mask_all(struct gsc_dev *dev) { u32 cfg; cfg = readl(dev->regs + GSC_IN_BASE_ADDR_Y_MASK); cfg |= GSC_IN_BASE_ADDR_MASK; cfg |= GSC_IN_BASE_ADDR_PINGPONG(dev->variant->in_buf_cnt); writel(cfg, dev->regs + GSC_IN_BASE_ADDR_Y_MASK); writel(cfg, dev->regs + GSC_IN_BASE_ADDR_CB_MASK); writel(cfg, dev->regs + GSC_IN_BASE_ADDR_CR_MASK); }
static int gsc_sw_reset(struct gsc_context *ctx) { u32 cfg; int count = GSC_RESET_TIMEOUT; /* s/w reset */ cfg = (GSC_SW_RESET_SRESET); gsc_write(cfg, GSC_SW_RESET); /* wait s/w reset complete */ while (count--) { cfg = gsc_read(GSC_SW_RESET); if (!cfg) break; usleep_range(1000, 2000); } if (cfg) { DRM_ERROR("failed to reset gsc h/w.\n"); return -EBUSY; } /* reset sequence */ cfg = gsc_read(GSC_IN_BASE_ADDR_Y_MASK); cfg |= (GSC_IN_BASE_ADDR_MASK | GSC_IN_BASE_ADDR_PINGPONG(0)); gsc_write(cfg, GSC_IN_BASE_ADDR_Y_MASK); gsc_write(cfg, GSC_IN_BASE_ADDR_CB_MASK); gsc_write(cfg, GSC_IN_BASE_ADDR_CR_MASK); cfg = gsc_read(GSC_OUT_BASE_ADDR_Y_MASK); cfg |= (GSC_OUT_BASE_ADDR_MASK | GSC_OUT_BASE_ADDR_PINGPONG(0)); gsc_write(cfg, GSC_OUT_BASE_ADDR_Y_MASK); gsc_write(cfg, GSC_OUT_BASE_ADDR_CB_MASK); gsc_write(cfg, GSC_OUT_BASE_ADDR_CR_MASK); return 0; }