Subject: port-sparc/2695: cgfour framebuffer will not work with X
To: None <gnats-bugs@NetBSD.ORG>
From: None <perseant@hitl.washington.edu>
List: netbsd-bugs
Date: 08/13/1996 09:28:53
>Number:         2695
>Category:       port-sparc
>Synopsis:       X dies on cgfour
>Confidential:   no
>Severity:       serious
>Priority:       high
>Responsible:    gnats-admin (GNATS administrator)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Aug 13 12:50:05 1996
>Last-Modified:
>Originator:     
>Organization:
-----------------------------------------------------------------------------
  Konrad Schroder           http://www.hitl.washington.edu/people/perseant/
  System Administrator                         perseant@hitl.washington.edu
  Human Interface Technology Lab
  215 Fluke Hall (Box 352142)                         Voice: (206) 616-1478
  University of Washington, 98195                       FAX: (206) 543-5380
-----------------------------------------------------------------------------
>Release:        1.2_BETA (-current tar as of yesterday, 96.08.12)
>Environment:
System: NetBSD brezhnev 1.2_BETA NetBSD 1.2_BETA (HITL_SUN4) #7: Mon Aug 12 16:52:54 PDT 1996     perseant@toast:/usr/src_12/sys/arch/sparc/compile/HITL_SUN4 sparc

>Description:

The problem appears to be that X is allocating "too much" of the cgfour frame
buffer memory; and the current version of cgfour.c does not properly
accommodate its request.  I don't know enough about the frame-buffer itself
to know how high one can actually map it without going too far, but the patch
seems to work.

>How-To-Repeat:

Compile a kernel with cgfour0, boot it, and type

	X :0

>Fix:

These are (two lines') diffs to /usr/src/sys/arch/sparc/dev/cgfour.c:

*** cgfour.c.dist       Tue Apr  2 04:32:39 1996
--- cgfour.c    Tue Aug 13 09:30:02 1996
***************
*** 402,408 ****
                panic("cgfourmap");
  
        if ((u_int)off >= NOOVERLAY) {
!               off =- NOOVERLAY;
  
                /*
                 * X11 maps a huge chunk of the frame buffer; far more than
--- 402,408 ----
                panic("cgfourmap");
  
        if ((u_int)off >= NOOVERLAY) {
!               off -= NOOVERLAY; /* was '=-' a.k.a. '= -' ?! */
  
                /*
                 * X11 maps a huge chunk of the frame buffer; far more than
***************
*** 423,429 ****
                 * in enable plane
                 */
                poff = (off - START_ENABLE) + PFOUR_COLOR_OFF_ENABLE;
!       } else if ((u_int)off < END_COLOR) {
                /*
                 * in colour plane
                 */
--- 423,429 ----
                 * in enable plane
                 */
                poff = (off - START_ENABLE) + PFOUR_COLOR_OFF_ENABLE;
!       } else if ((u_int)off < 0x600000 ) /* more than there is? */ {
                /*
                 * in colour plane
                 */

>Audit-Trail:
>Unformatted: