[RFC/WIP] drm/rockchip: Support CRTC gamma LUT
Ezequiel Garcia
ezequiel at collabora.com
Tue Jun 18 13:38:10 UTC 2019
On Fri, 2019-06-14 at 13:05 -0700, Doug Anderson wrote:
> Hi,
>
> On Thu, Jun 13, 2019 at 12:23 PM Ezequiel Garcia <ezequiel at collabora.com> wrote:
> > @@ -1744,6 +1793,41 @@ int rockchip_drm_wait_vact_end(struct drm_crtc *crtc, unsigned int mstimeout)
> > }
> > EXPORT_SYMBOL(rockchip_drm_wait_vact_end);
> >
> > +static int vop_gamma_lut_request(struct device *dev,
> > + struct resource *res, struct vop *vop)
> > +{
> > + resource_size_t offset = vop->data->gamma_lut_addr_off;
> > + resource_size_t size = VOP_GAMMA_LUT_SIZE * 4;
> > +
> > + /*
> > + * Some SoCs (e.g. RK3288) have the gamma LUT address after
> > + * the MMU registers, which means we can't request and ioremap
> > + * the entire register set. Other (e.g. RK3399) have gamma LUT
> > + * address before MMU.
> > + *
> > + * Therefore, we need to request and ioremap those that haven't
> > + * been already.
> > + */
> > + if (vop->len >= (offset + size)) {
> > + vop->lut_regs = vop->regs + offset;
> > + return 0;
> > + }
> > +
> > + if (!devm_request_mem_region(dev, res->start + offset,
> > + size, dev_name(dev))) {
> > + dev_warn(dev, "can't request gamma lut region\n");
> > + return -EBUSY;
> > + }
> > +
> > + vop->lut_regs = devm_ioremap(dev, res->start + offset, size);
> > + if (!vop->lut_regs) {
> > + dev_err(dev, "can't ioremap gamma lut address\n");
> > + devm_release_mem_region(dev, res->start + offset, size);
> > + return -ENOMEM;
> > + }
>
> I'm curious here. I was always under the impression that you were
> supposed to specify all of your memory regions in the device tree.
> ...but here the device tree on rk3288 says:
>
> vopb: vop at ff930000 {
> compatible = "rockchip,rk3288-vop";
> reg = <0x0 0xff930000 0x0 0x19c>;
> ...
> };
>
> ...and we're now mapping 4096 bytes starting at 0xff931000. Is that
> really legit? Wouldn't it be better to put this extra memory range in
> the dts?
>
> Hrm, but then I guess you need to figure out what to do about older
> device trees. Do you disable the gamma LUT feature? ...or do you do
> exactly what the code here is doing and just map it anyway? I guess
> you could just keep the code here (and it'll work fine), but maybe in
> parallel we should add it to the .dts file and bindings?
>
Maybe we can see how it would look adding the LUT as a separate
(optional) resource in the devicetree, and dropping support for RK3399,
which doesn't seem to work.
I'm taking a look at Jacopo's question on atomic_flush vs.
atomic_commit_tail, and will prepare a v2.
> ---
>
> I will say that, though I don't know much (anything?) about gamma
> LUTs, I ran the Chrome OS "gamma_test" program and saw a pretty RGB
> gradient on the both the internal screen and HDMI monitor on my
> rk3288-veyron-jerry. Thus:
>
> Tested-by: Douglas Anderson <dianders at chromium.org>
Thanks,
Ezequiel
More information about the dri-devel
mailing list