From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko =?ISO-8859-1?Q?St=FCbner?= Subject: Re: [RFC/WIP] drm/rockchip: Support CRTC gamma LUT Date: Fri, 14 Jun 2019 16:03:28 +0200 Message-ID: <4034618.A4UzVy7svI@diego> References: <20190613192244.5447-1-ezequiel@collabora.com> <20190614155320.348d42af@collabora.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20190614155320.348d42af-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+glpar-linux-rockchip=m.gmane.org-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org To: Boris Brezillon Cc: Sandy Huang , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Douglas Anderson , linux-rockchip-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, Sean Paul , kernel-ZGY8ohtN/8qB+jHODAdFcQ@public.gmane.org, Ezequiel Garcia List-Id: linux-rockchip.vger.kernel.org Hi Boris, Am Freitag, 14. Juni 2019, 15:53:20 CEST schrieb Boris Brezillon: > On Thu, 13 Jun 2019 16:22:44 -0300 > Ezequiel Garcia wrote: > > > > +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; > > + } > > Can't we patch the resource just after calling plaform_get_resource() > (and before calling devm_ioremap_resource()) so we don't have to add > these devm_request_mem_region()+devm_ioremap() calls here? The issue is that on the older rk3288 socs the vops memory map has the mmu registers (which get mapped separately) in between the core and lut registers.