Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 4 Feb 2011 17:47:34 -0700 (MST)
From:      Warren Block <wblock@wonkity.com>
To:        freebsd-x11@freebsd.org
Subject:   xf86-video-ati 6.14.0
Message-ID:  <alpine.BSF.2.00.1102031950160.23450@wonkity.com>

next in thread | raw e-mail | index | archive | help
A quick update of the 6.13.2 port to build the just-released 6.14.0 ati 
video driver had problems with a Radeon 4650 with VGA, DVI, and HDMI 
ports.

X starts, goes to a black screen... and that's it.  The machine is still 
alive, but video is not working until a reset.  The X log says:

...
(II) RADEON(0): Acceleration enabled
(**) RADEON(0): DPMS enabled
(==) RADEON(0): Silken mouse enabled
(II) RADEON(0): Set up textured video
Output CRT2 disable success
Segmentation fault: 11 at address 0x168

Fatal server error:
Caught signal 11 (Segmentation fault: 11). Server aborting

This happens on line 1840 of atombios_output.c, inside 
atombios_pick_dig_encoder.  The first two outputs are fine, but 
output->crtc is null for the HDMI output.

This happens due to output->crtc being null for the HDMI connector on 
line 1840 of atombios_output.c.  The other two outputs are set first, 
without problems.

A quick hack to check for a null crtc pointer lets X start and work, 
although of course the HDMI output is probably not functional.  Again, 
this is a quick hack that doesn't fail but doesn't fix the problem of 
the crtc being null.  No idea why that's not set correctly, or whether 
it's the fault of FreeBSD, which is why I'm posting this here rather 
than on the x.org bugzilla.  If anyone can help confirm or fix this, I 
can post a bug report in the appropriate place.

--- src/atombios_output.c.orig  2011-01-27 10:05:58.000000000 -0700
+++ src/atombios_output.c       2011-02-04 17:41:32.000000000 -0700
@@ -1836,8 +1836,12 @@
      }

      if (IS_DCE32_VARIANT) {
-        RADEONCrtcPrivatePtr radeon_crtc = output->crtc->driver_private;
-        radeon_output->dig_encoder = radeon_crtc->crtc_id;
+        if (output->crtc) {
+            RADEONCrtcPrivatePtr radeon_crtc = output->crtc->driver_private;
+            radeon_output->dig_encoder = radeon_crtc->crtc_id;
+        } else {
+            ErrorF("WB: crtc for %s output is null!\n", output->name);
+        }
          return;
      }




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.1102031950160.23450>