Module Name:    src
Committed By:   macallan
Date:           Tue Jan 14 01:35:13 UTC 2014

Modified Files:
        src/sys/dev/pci: radeonfb.c

Log Message:
- move cursor area to the end of each display's chunk of fb RAM
- use memory between display and cursor as glyph cache instead of blindly
  trying to use 8MB
should fix PR 48492


To generate a diff of this commit:
cvs rdiff -u -r1.79 -r1.80 src/sys/dev/pci/radeonfb.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/dev/pci/radeonfb.c
diff -u src/sys/dev/pci/radeonfb.c:1.79 src/sys/dev/pci/radeonfb.c:1.80
--- src/sys/dev/pci/radeonfb.c:1.79	Wed Oct  9 17:18:23 2013
+++ src/sys/dev/pci/radeonfb.c	Tue Jan 14 01:35:13 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: radeonfb.c,v 1.79 2013/10/09 17:18:23 macallan Exp $ */
+/*	$NetBSD: radeonfb.c,v 1.80 2014/01/14 01:35:13 macallan Exp $ */
 
 /*-
  * Copyright (c) 2006 Itronix Inc.
@@ -70,7 +70,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.79 2013/10/09 17:18:23 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: radeonfb.c,v 1.80 2014/01/14 01:35:13 macallan Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -816,7 +816,8 @@ radeonfb_attach(device_t parent, device_
 		aprint_normal("%s: display %d: "
 		    "initial virtual resolution %dx%d at %d bpp\n",
 		    XNAME(sc), i, dp->rd_virtx, dp->rd_virty, dp->rd_bpp);
-
+		aprint_normal_dev(sc->sc_dev, "using %d MB per display\n",
+		    sc->sc_fboffset >> 20);
 		/* now select the *video mode* that we will use */
 		for (j = 0; j < dp->rd_ncrtcs; j++) {
 			const struct videomode *vmp;
@@ -848,7 +849,7 @@ radeonfb_attach(device_t parent, device_
 		dp->rd_offset = sc->sc_fboffset * i;
 		dp->rd_fbptr = (vaddr_t)bus_space_vaddr(sc->sc_memt,
 		    sc->sc_memh) + dp->rd_offset;
-		dp->rd_curoff = sc->sc_fbsize;
+		dp->rd_curoff = sc->sc_fboffset - 4096;	/* 4KB cursor space */
 		dp->rd_curptr = dp->rd_fbptr + dp->rd_curoff;
 
 		DPRINTF(("fpbtr = %p\n", (void *)dp->rd_fbptr));
@@ -924,8 +925,13 @@ radeonfb_attach(device_t parent, device_
 		dp->rd_gc.gc_rectfill = radeonfb_rectfill_a;
 		dp->rd_gc.gc_rop = RADEON_ROP3_S;
 		dp->rd_gc.gc_blitcookie = dp;
+		/*
+		 * use memory between framebuffer and cursor area as glyph
+		 * cache, cap at 4096 lines
+		 */
 		glyphcache_init(&dp->rd_gc, dp->rd_virty + 4,
-		    (0x800000 / dp->rd_stride) - (dp->rd_virty + 4),
+		    min(4096, 
+		        (dp->rd_curoff / dp->rd_stride) - (dp->rd_virty + 4)),
 		    dp->rd_virtx,
 		    ri->ri_font->fontwidth,
 		    ri->ri_font->fontheight,

Reply via email to