On Mon, Apr 12, 2021 at 10:05:14AM +0100, Matthew Auld wrote: > From: Mohammed Khajapasha <mohammed.khajapasha@xxxxxxxxx> > > use local memory io BAR address for fbdev's fb_mmap() operation on > discrete, fbdev uses the physical address of our framebuffer for its > fb_mmap() fn. > > Signed-off-by: Mohammed Khajapasha <mohammed.khajapasha@xxxxxxxxx> Sob missing (I didn't check all previous patches), but also I think we should aim more to reuse drm fbdev helpers and retire our owns here. Eventually, long-term, and all that. -Daniel > --- > drivers/gpu/drm/i915/display/intel_fbdev.c | 29 +++++++++++++++++----- > 1 file changed, 23 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c > index ccd00e65a5fe..2b37959da747 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbdev.c > +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c > @@ -41,6 +41,8 @@ > #include <drm/drm_fb_helper.h> > #include <drm/drm_fourcc.h> > > +#include "gem/i915_gem_lmem.h" > + > #include "i915_drv.h" > #include "intel_display_types.h" > #include "intel_fbdev.h" > @@ -178,6 +180,7 @@ static int intelfb_create(struct drm_fb_helper *helper, > unsigned long flags = 0; > bool prealloc = false; > void __iomem *vaddr; > + struct drm_i915_gem_object *obj; > int ret; > > if (intel_fb && > @@ -232,13 +235,27 @@ static int intelfb_create(struct drm_fb_helper *helper, > info->fbops = &intelfb_ops; > > /* setup aperture base/size for vesafb takeover */ > - info->apertures->ranges[0].base = ggtt->gmadr.start; > - info->apertures->ranges[0].size = ggtt->mappable_end; > + obj = intel_fb_obj(&intel_fb->base); > + if (i915_gem_object_is_lmem(obj)) { > + struct intel_memory_region *mem = obj->mm.region; > + > + info->apertures->ranges[0].base = mem->io_start; > + info->apertures->ranges[0].size = mem->total; > + > + /* Use fbdev's framebuffer from lmem for discrete */ > + info->fix.smem_start = > + (unsigned long)(mem->io_start + > + i915_gem_object_get_dma_address(obj, 0)); > + info->fix.smem_len = obj->base.size; > + } else { > + info->apertures->ranges[0].base = ggtt->gmadr.start; > + info->apertures->ranges[0].size = ggtt->mappable_end; > > - /* Our framebuffer is the entirety of fbdev's system memory */ > - info->fix.smem_start = > - (unsigned long)(ggtt->gmadr.start + vma->node.start); > - info->fix.smem_len = vma->node.size; > + /* Our framebuffer is the entirety of fbdev's system memory */ > + info->fix.smem_start = > + (unsigned long)(ggtt->gmadr.start + vma->node.start); > + info->fix.smem_len = vma->node.size; > + } > > vaddr = i915_vma_pin_iomap(vma); > if (IS_ERR(vaddr)) { > -- > 2.26.3 > > _______________________________________________ > dri-devel mailing list > dri-devel@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx