Module Name: src Committed By: riastradh Date: Sun Dec 19 11:38:46 UTC 2021
Modified Files: src/sys/external/bsd/drm2/dist/drm/i915/display: intel_fbdev.c src/sys/external/bsd/drm2/i915drm: intelfb.c intelfb.h Log Message: Have i915_vma_pin_iomap map us the framebuffer Rather than passing bus space arguments around. Also fixes build. Author: Maya Rashish <m...@netbsd.org> Committer: Taylor R Campbell <riastr...@netbsd.org> To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 \ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c cvs rdiff -u -r1.20 -r1.21 src/sys/external/bsd/drm2/i915drm/intelfb.c cvs rdiff -u -r1.2 -r1.3 src/sys/external/bsd/drm2/i915drm/intelfb.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c diff -u src/sys/external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c:1.3 src/sys/external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c:1.4 --- src/sys/external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c:1.3 Sun Dec 19 10:46:43 2021 +++ src/sys/external/bsd/drm2/dist/drm/i915/display/intel_fbdev.c Sun Dec 19 11:38:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intel_fbdev.c,v 1.3 2021/12/19 10:46:43 riastradh Exp $ */ +/* $NetBSD: intel_fbdev.c,v 1.4 2021/12/19 11:38:46 riastradh Exp $ */ /* * Copyright © 2007 David Airlie @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intel_fbdev.c,v 1.3 2021/12/19 10:46:43 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intel_fbdev.c,v 1.4 2021/12/19 11:38:46 riastradh Exp $"); #include <linux/async.h> #include <linux/console.h> @@ -172,6 +172,10 @@ static int intelfb_alloc(struct drm_fb_h return 0; } +#ifdef __NetBSD__ +# define __iomem __i915_vma_iomem +#endif + static int intelfb_create(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes) { @@ -238,14 +242,23 @@ static int intelfb_create(struct drm_fb_ static const struct intelfb_attach_args zero_ifa; struct intelfb_attach_args ifa = zero_ifa; + __USE(ggtt); + __USE(pdev); + + vaddr = i915_vma_pin_iomap(vma); + if (IS_ERR(vaddr)) { + DRM_ERROR("Failed to remap framebuffer into virtual memory\n"); + ret = PTR_ERR(vaddr); + goto out_unpin; + } + + if (vma->obj->stolen && !prealloc) + memset_io(vaddr, 0, vma->node.size); + ifa.ifa_drm_dev = dev; ifa.ifa_fb_helper = helper; ifa.ifa_fb_sizes = *sizes; - ifa.ifa_fb_bst = dev->pdev->pd_pa.pa_memt; - ifa.ifa_fb_addr = (dev_priv->gtt.mappable_base + - i915_gem_obj_ggtt_offset(obj)); - ifa.ifa_fb_size = size; - ifa.ifa_fb_zero = (ifbdev->fb->obj->stolen && !prealloc); + ifa.ifa_fb_vaddr = vaddr; /* * XXX Should do this asynchronously, since we hold @@ -258,8 +271,7 @@ static int intelfb_create(struct drm_fb_ ret = -ENXIO; goto out_unpin; } - fb = &ifbdev->fb->base; - ifbdev->helper.fb = fb; + ifbdev->helper.fb = &ifbdev->fb->base; } #else info = drm_fb_helper_alloc_fbi(helper); @@ -321,6 +333,9 @@ out_unlock: intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref); return ret; } +#ifdef __NetBSD__ +# undef __iomem +#endif static const struct drm_fb_helper_funcs intel_fb_helper_funcs = { .fb_probe = intelfb_create, Index: src/sys/external/bsd/drm2/i915drm/intelfb.c diff -u src/sys/external/bsd/drm2/i915drm/intelfb.c:1.20 src/sys/external/bsd/drm2/i915drm/intelfb.c:1.21 --- src/sys/external/bsd/drm2/i915drm/intelfb.c:1.20 Sun Dec 19 11:02:12 2021 +++ src/sys/external/bsd/drm2/i915drm/intelfb.c Sun Dec 19 11:38:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intelfb.c,v 1.20 2021/12/19 11:02:12 riastradh Exp $ */ +/* $NetBSD: intelfb.c,v 1.21 2021/12/19 11:38:46 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 1.20 2021/12/19 11:02:12 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 1.21 2021/12/19 11:38:46 riastradh Exp $"); #include <sys/types.h> #include <sys/bus.h> @@ -60,7 +60,6 @@ struct intelfb_softc { struct intelfb_attach_args sc_ifa; bus_space_handle_t sc_fb_bsh; struct i915drmkms_task sc_attach_task; - bool sc_mapped:1; bool sc_scheduled:1; bool sc_attached:1; }; @@ -92,25 +91,12 @@ intelfb_attach(device_t parent, device_t sc->sc_dev = self; sc->sc_ifa = *ifa; - sc->sc_mapped = false; sc->sc_scheduled = false; sc->sc_attached = false; aprint_naive("\n"); aprint_normal("\n"); - /* XXX Defer this too? */ - error = bus_space_map(ifa->ifa_fb_bst, ifa->ifa_fb_addr, - ifa->ifa_fb_size, - BUS_SPACE_MAP_LINEAR|BUS_SPACE_MAP_PREFETCHABLE, - &sc->sc_fb_bsh); - if (error) { - aprint_error_dev(self, "unable to map framebuffer: %d\n", - error); - goto fail0; - } - sc->sc_mapped = true; - i915drmkms_task_init(&sc->sc_attach_task, &intelfb_attach_task); error = i915drmkms_task_schedule(parent, &sc->sc_attach_task); if (error) { @@ -124,8 +110,6 @@ intelfb_attach(device_t parent, device_t /* Success! */ return; -fail1: bus_space_unmap(ifa->ifa_fb_bst, sc->sc_fb_bsh, ifa->ifa_fb_size); - sc->sc_mapped = false; fail0: return; } @@ -150,12 +134,6 @@ intelfb_detach(device_t self, int flags) sc->sc_attached = false; } - if (sc->sc_mapped) { - bus_space_unmap(sc->sc_ifa.ifa_fb_bst, sc->sc_fb_bsh, - sc->sc_ifa.ifa_fb_size); - sc->sc_mapped = false; - } - return 0; } @@ -169,7 +147,7 @@ intelfb_attach_task(struct i915drmkms_ta .da_dev = sc->sc_dev, .da_fb_helper = ifa->ifa_fb_helper, .da_fb_sizes = &ifa->ifa_fb_sizes, - .da_fb_vaddr = bus_space_vaddr(ifa->ifa_fb_bst, sc->sc_fb_bsh), + .da_fb_vaddr = ifa->ifa_fb_vaddr, .da_fb_linebytes = ifa->ifa_fb_helper->fb->pitches[0], .da_params = &intelfb_drmfb_params, }; Index: src/sys/external/bsd/drm2/i915drm/intelfb.h diff -u src/sys/external/bsd/drm2/i915drm/intelfb.h:1.2 src/sys/external/bsd/drm2/i915drm/intelfb.h:1.3 --- src/sys/external/bsd/drm2/i915drm/intelfb.h:1.2 Sun Dec 19 10:32:59 2021 +++ src/sys/external/bsd/drm2/i915drm/intelfb.h Sun Dec 19 11:38:46 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: intelfb.h,v 1.2 2021/12/19 10:32:59 riastradh Exp $ */ +/* $NetBSD: intelfb.h,v 1.3 2021/12/19 11:38:46 riastradh Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -42,10 +42,7 @@ struct intelfb_attach_args { struct drm_device *ifa_drm_dev; struct drm_fb_helper *ifa_fb_helper; struct drm_fb_helper_surface_size ifa_fb_sizes; - bus_space_tag_t ifa_fb_bst; - bus_addr_t ifa_fb_addr; - bus_size_t ifa_fb_size; - bool ifa_fb_zero; + void* ifa_fb_vaddr; }; #endif /* _I915DRM_INTELFB_H_ */