Module Name:    src
Committed By:   rin
Date:           Thu Aug 15 00:27:47 UTC 2019

Modified Files:
        src/sys/external/bsd/drm2/i915drm: intelfb.c

Log Message:
kern/52229

Correct linebytes (stride) for intelfb(4), which fixes screen
corruption on the following machines:

- MacBookAir5,2 (Ivy Bridge, 13-inch, Mid 2012)
- MacBookAir6,1 (Haswell, 11-inch, Early 2014)

Now, wsdisplay(4) console as well as intel(4) driver of Xorg
works fine on these machines.

Also there's no side effects found on another machine:

- ThinkPad T480s (Kaby Lake R)

XXX
pullup to netbsd-9


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/sys/external/bsd/drm2/i915drm/intelfb.c

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/i915drm/intelfb.c
diff -u src/sys/external/bsd/drm2/i915drm/intelfb.c:1.16 src/sys/external/bsd/drm2/i915drm/intelfb.c:1.17
--- src/sys/external/bsd/drm2/i915drm/intelfb.c:1.16	Sat Dec  1 01:56:30 2018
+++ src/sys/external/bsd/drm2/i915drm/intelfb.c	Thu Aug 15 00:27:47 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: intelfb.c,v 1.16 2018/12/01 01:56:30 msaitoh Exp $	*/
+/*	$NetBSD: intelfb.c,v 1.17 2019/08/15 00:27:47 rin Exp $	*/
 
 /*-
  * Copyright (c) 2014 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 1.16 2018/12/01 01:56:30 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: intelfb.c,v 1.17 2019/08/15 00:27:47 rin Exp $");
 
 #include <sys/types.h>
 #include <sys/bus.h>
@@ -166,14 +166,12 @@ intelfb_attach_task(struct i915drmkms_ta
 	struct intelfb_softc *const sc = container_of(task,
 	    struct intelfb_softc, sc_attach_task);
 	const struct intelfb_attach_args *const ifa = &sc->sc_ifa;
-	const struct drm_fb_helper_surface_size *const sizes = &ifa->ifa_fb_sizes;
 	const struct drmfb_attach_args da = {
 		.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_linebytes = roundup2((sizes->surface_width *
-		    howmany(sizes->surface_bpp, 8)), 64),
+		.da_fb_linebytes = ifa->ifa_fb_helper->fb->pitches[0],
 		.da_params = &intelfb_drmfb_params,
 	};
 	int error;

Reply via email to