15918273 Xorg dumps core in RADEONPreInit with XVR-300 video card
authorNiveditha Rau <Niveditha.Rau@Oracle.COM>
Thu, 31 Jan 2013 12:37:58 -0800
changeset 1351 e280298f69a7
parent 1350 7179bc555162
child 1352 73868594c422
15918273 Xorg dumps core in RADEONPreInit with XVR-300 video card
open-src/driver/efb/15918273.patch
open-src/driver/efb/Makefile
open-src/driver/efb/disable-xaa.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/driver/efb/15918273.patch	Thu Jan 31 12:37:58 2013 -0800
@@ -0,0 +1,317 @@
+--- src/radeon_output.c	Tue Jan 29 12:13:13 2013
++++ src/radeon_output.c	Tue Jan 29 15:30:36 2013
+@@ -300,7 +300,7 @@
+ 		   INREG(DDCReg) & ~(RADEON_GPIO_EN_0));
+ 	    usleep(15000);
+ 
+-	    MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus);
++	    MonInfo = xf86OutputGetEDID(output, radeon_output->pI2CBus);
+ 
+ 	    OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_1);
+ 	    OUTREG(DDCReg, INREG(DDCReg) | RADEON_GPIO_EN_0);
+@@ -323,7 +323,7 @@
+ 	    if (MonInfo)  break;
+ 	}
+     } else if (radeon_output->pI2CBus && info->ddc2 && ((DDCReg == RADEON_LCD_GPIO_MASK) || (DDCReg == RADEON_MDGPIO_EN_REG))) {
+-         MonInfo = xf86DoEDID_DDC2(pScrn->scrnIndex, radeon_output->pI2CBus);
++         MonInfo = xf86OutputGetEDID(output, radeon_output->pI2CBus);
+     } else {
+ 	xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "DDC2/I2C is not properly initialized\n");
+ 	MonType = MT_NONE;
+
+--- src/radeon_probe.h	Fri Dec 21 14:11:54 2012
++++ src/radeon_probe.h	Mon Jan 28 12:09:29 2013
+@@ -45,7 +45,7 @@
+ #include <X11/extensions/xf86misc.h>
+ 
+ #include "xf86Crtc.h"
+-
++#include "compat-api.h"
+ #ifdef USE_EXA
+ #include "exa.h"
+ #endif
+@@ -577,17 +577,17 @@
+ 
+ /* radeon_driver.c */
+ extern Bool                 RADEONPreInit(ScrnInfoPtr, int);
+-extern Bool                 RADEONScreenInit(int, ScreenPtr, int, char **);
+-extern Bool                 RADEONSwitchMode(int, DisplayModePtr, int);
++extern Bool                 RADEONScreenInit(SCREEN_INIT_ARGS_DECL);
++extern Bool                 RADEONSwitchMode(SWITCH_MODE_ARGS_DECL);
+ #ifdef X_XF86MiscPassMessage
+ extern Bool                 RADEONHandleMessage(int, const char*, const char*,
+ 					        char**);
+ #endif
+-extern void                 RADEONAdjustFrame(int, int, int, int);
+-extern Bool                 RADEONEnterVT(int, int);
+-extern void                 RADEONLeaveVT(int, int);
+-extern void                 RADEONFreeScreen(int, int);
+-extern ModeStatus           RADEONValidMode(int, DisplayModePtr, Bool, int);
++extern void                 RADEONAdjustFrame(ADJUST_FRAME_ARGS_DECL);
++extern Bool                 RADEONEnterVT(VT_FUNC_ARGS_DECL);
++extern void                 RADEONLeaveVT(VT_FUNC_ARGS_DECL);
++extern void                 RADEONFreeScreen(FREE_SCREEN_ARGS_DECL);
++extern ModeStatus           RADEONValidMode(SCRN_ARG_TYPE, DisplayModePtr, Bool, int);
+ 
+ extern const OptionInfoRec *RADEONOptionsWeak(void);
+ 
+--- src/radeon_driver.c	Fri Dec 21 14:11:56 2012
++++ src/radeon_driver.c	Mon Jan 28 12:08:28 2013
+@@ -120,7 +120,7 @@
+ #endif /* __sparc__ */
+ 
+ 				/* Forward definitions for driver functions */
+-static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen);
++static Bool RADEONCloseScreen(CLOSE_SCREEN_ARGS_DECL);
+ static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode);
+ static void RADEONSave(ScrnInfoPtr pScrn);
+ 
+@@ -3037,15 +3037,14 @@
+ #endif
+ }
+ 
+-static void RADEONBlockHandler(int i, pointer blockData,
+-			       pointer pTimeout, pointer pReadmask)
++static void RADEONBlockHandler(BLOCKHANDLER_ARGS_DECL)
+ {
+-    ScreenPtr      pScreen = screenInfo.screens[i];
+-    ScrnInfoPtr    pScrn   = xf86Screens[i];
++    SCREEN_PTR(arg);
++    ScrnInfoPtr    pScrn   = xf86ScreenToScrn(pScreen);
+     RADEONInfoPtr  info    = RADEONPTR(pScrn);
+ 
+     pScreen->BlockHandler = info->BlockHandler;
+-    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
++    (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
+     pScreen->BlockHandler = RADEONBlockHandler;
+ 
+     if (info->VideoTimerCallback)
+@@ -3136,10 +3135,9 @@
+ 
+ 
+ /* Called at the start of each server generation. */
+-Bool RADEONScreenInit(int scrnIndex, ScreenPtr pScreen,
+-                                int argc, char **argv)
++Bool RADEONScreenInit(SCREEN_INIT_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
++    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
+     RADEONInfoPtr  info  = RADEONPTR(pScrn);
+     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+     int            hasDRI = 0;
+@@ -3539,16 +3537,16 @@
+ 	xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
+ 		       "Initializing Acceleration\n");
+ 	if (RADEONAccelInit(pScreen)) {
+-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration enabled\n");
++	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration enabled\n");
+ 	    info->accelOn = TRUE;
+ 	} else {
+-	    xf86DrvMsg(scrnIndex, X_ERROR,
++	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ 		       "Acceleration initialization failed\n");
+-	    xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
++	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
+ 	    info->accelOn = FALSE;
+ 	}
+     } else {
+-	xf86DrvMsg(scrnIndex, X_INFO, "Acceleration disabled\n");
++	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Acceleration disabled\n");
+ 	info->accelOn = FALSE;
+     }
+ 
+@@ -3575,7 +3573,7 @@
+ 
+ 		if (xf86QueryLargestOffscreenArea(pScreen, &width, &height,
+ 					      0, 0, 0)) {
+-		    xf86DrvMsg(scrnIndex, X_INFO,
++		    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+ 			       "Largest offscreen area available: %d x %d\n",
+ 			       width, height);
+ 		}
+@@ -3582,12 +3580,12 @@
+ 	    }
+ #endif /* USE_XAA */
+ 	} else {
+-	    xf86DrvMsg(scrnIndex, X_ERROR,
++	    xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ 		       "Hardware cursor initialization failed\n");
+-	    xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
++	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
+ 	}
+     } else {
+-	xf86DrvMsg(scrnIndex, X_INFO, "Using software cursor\n");
++	xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Using software cursor\n");
+     }
+ 
+     /* DGA setup */
+@@ -3629,8 +3627,10 @@
+ #endif /* __sparc__ */
+ 
+     /* Wrap pointer motion to flip touch screen around */
++#if 0
+     info->PointerMoved = pScrn->PointerMoved;
+     pScrn->PointerMoved = RADEONPointerMoved;
++#endif
+ 
+     /* Colormap setup */
+     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
+@@ -4743,9 +4743,9 @@
+     return TRUE;
+ }
+ 
+-Bool RADEONSwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
++Bool RADEONSwitchMode(SWITCH_MODE_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn       = xf86Screens[scrnIndex];
++    SCRN_INFO_PTR(arg);
+     RADEONInfoPtr  info        = RADEONPTR(pScrn);
+     Bool           tilingOld   = info->tilingEnabled;
+     Bool           ret;
+@@ -4782,9 +4782,9 @@
+ 
+     if (info->tilingEnabled != tilingOld) {
+ 	/* need to redraw front buffer, I guess this can be considered a hack ? */
+-	xf86EnableDisableFBAccess(scrnIndex, FALSE);
++	xf86EnableDisableFBAccess(arg, FALSE);
+ 	RADEONChangeSurfaces(pScrn);
+-	xf86EnableDisableFBAccess(scrnIndex, TRUE);
++	xf86EnableDisableFBAccess(arg, TRUE);
+ 	/* xf86SetRootClip would do, but can't access that here */
+     }
+ 
+@@ -4838,10 +4838,10 @@
+ #endif
+ 
+ /* Used to disallow modes that are not supported by the hardware */
+-ModeStatus RADEONValidMode(int scrnIndex, DisplayModePtr mode,
++ModeStatus RADEONValidMode(SCRN_ARG_TYPE arg, DisplayModePtr mode,
+                                      Bool verbose, int flag)
+ {
+-    ScrnInfoPtr pScrn = xf86Screens[scrnIndex];
++    SCRN_INFO_PTR(arg);
+     RADEONInfoPtr info = RADEONPTR(pScrn);
+     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
+ 
+@@ -4987,9 +4987,9 @@
+     OUTREG(reg, Base);
+ }
+ 
+-void RADEONAdjustFrame(int scrnIndex, int x, int y, int flags)
++void RADEONAdjustFrame(ADJUST_FRAME_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn      = xf86Screens[scrnIndex];
++    SCRN_INFO_PTR(arg);
+     RADEONInfoPtr  info       = RADEONPTR(pScrn);
+     RADEONEntPtr pRADEONEnt = RADEONEntPriv(pScrn);
+     xf86CrtcConfigPtr	config = XF86_CRTC_CONFIG_PTR(pScrn);
+@@ -5021,9 +5021,9 @@
+ /* Called when VT switching back to the X server.  Reinitialize the
+  * video mode.
+  */
+-Bool RADEONEnterVT(int scrnIndex, int flags)
++Bool RADEONEnterVT(VT_FUNC_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
++    SCRN_INFO_PTR(arg);
+     RADEONInfoPtr  info  = RADEONPTR(pScrn);
+     unsigned char *RADEONMMIO = info->MMIO;
+     xf86CrtcConfigPtr   xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
+@@ -5104,9 +5104,9 @@
+ /* Called when VT switching away from the X server.  Restore the
+  * original text mode.
+  */
+-void RADEONLeaveVT(int scrnIndex, int flags)
++void RADEONLeaveVT(VT_FUNC_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
++    SCRN_INFO_PTR(arg);
+     RADEONInfoPtr  info  = RADEONPTR(pScrn);
+ 
+     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
+@@ -5149,9 +5149,9 @@
+  * text mode, unmap video memory, and unwrap and call the saved
+  * CloseScreen function.
+  */
+-static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
++static Bool RADEONCloseScreen(CLOSE_SCREEN_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
++    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
+     RADEONInfoPtr  info  = RADEONPTR(pScrn);
+ 
+     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
+@@ -5240,12 +5240,12 @@
+ 
+     pScreen->BlockHandler = info->BlockHandler;
+     pScreen->CloseScreen = info->CloseScreen;
+-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
++    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
+ }
+ 
+-void RADEONFreeScreen(int scrnIndex, int flags)
++void RADEONFreeScreen(FREE_SCREEN_ARGS_DECL)
+ {
+-    ScrnInfoPtr  pScrn = xf86Screens[scrnIndex];
++    SCRN_INFO_PTR(arg);
+     RADEONInfoPtr  info  = RADEONPTR(pScrn);
+     
+     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
+--- src/radeon_dri.c	Fri Dec 21 14:11:55 2012
++++ src/radeon_dri.c	Mon Jan 28 12:11:57 2013
+@@ -1585,15 +1585,15 @@
+     return TRUE;
+ }
+ 
+-static Bool RADEONDRIDoCloseScreen(int scrnIndex, ScreenPtr pScreen)
++static Bool RADEONDRIDoCloseScreen(CLOSE_SCREEN_ARGS_DECL)
+ {
+-    ScrnInfoPtr    pScrn = xf86Screens[pScreen->myNum];
++    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
+     RADEONInfoPtr  info  = RADEONPTR(pScrn);
+ 
+     RADEONDRICloseScreen(pScreen);
+ 
+     pScreen->CloseScreen = info->DRICloseScreen;
+-    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
++    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
+ }
+ 
+ /* Finish initializing the device-dependent DRI state, and call
+--- src/radeon_dga.c	Mon Jan 28 14:11:08 2013
++++ src/radeon_dga.c	Mon Jan 28 14:12:17 2013
+@@ -295,7 +295,7 @@
+ 
+ 	pScrn->currentMode = info->CurrentLayout.mode;
+ 
+-	RADEONSwitchMode(indx, pScrn->currentMode, 0);
++	RADEONSwitchMode(indx, pScrn->currentMode);
+ #ifdef XF86DRI
+ 	if (info->directRenderingEnabled) {
+ 	    RADEONCP_STOP(pScrn, info);
+@@ -308,7 +308,7 @@
+ 	    RADEONCP_START(pScrn, info);
+ 	}
+ #endif
+-	RADEONAdjustFrame(indx, 0, 0, 0);
++	RADEONAdjustFrame(indx, 0, 0);
+ 	info->DGAactive = FALSE;
+     } else {
+ 	if (!info->DGAactive) {  /* save the old parameters */
+@@ -327,7 +327,7 @@
+ 					    : pMode->depth);
+ 	/* RADEONModeInit() will set the mode field */
+ 
+-	RADEONSwitchMode(indx, pMode->mode, 0);
++	RADEONSwitchMode(indx, pMode->mode);
+ 
+ #ifdef XF86DRI
+ 	if (info->directRenderingEnabled) {
+@@ -357,7 +357,7 @@
+ {
+     RADEONInfoPtr  info = RADEONPTR(pScrn);
+ 
+-    RADEONAdjustFrame(pScrn->pScreen->myNum, x, y, flags);
++    RADEONAdjustFrame(pScrn->pScreen->myNum, x, y);
+     info->DGAViewportStatus = 0;  /* FIXME */
+ }
--- a/open-src/driver/efb/Makefile	Wed Jan 30 11:18:21 2013 -0800
+++ b/open-src/driver/efb/Makefile	Thu Jan 31 12:37:58 2013 -0800
@@ -41,7 +41,8 @@
 	no-modes.patch,-p1 \
 	sparc-efb.patch,-p1 \
 	pciTag.patch \
-	disable-xaa.patch
+	disable-xaa.patch \
+	15918273.patch
 
 # Need to regenerate configure after patching Makefile.am in sparc-efb.patch
 AUTORECONF=yes
--- a/open-src/driver/efb/disable-xaa.patch	Wed Jan 30 11:18:21 2013 -0800
+++ b/open-src/driver/efb/disable-xaa.patch	Thu Jan 31 12:37:58 2013 -0800
@@ -9,77 +9,3 @@
  
  # Properly handle EXA.
  AC_MSG_CHECKING([whether to enable EXA support])
---- src/radeon.h	Fri Oct  5 10:08:43 2012
-+++ src/radeon.h	Fri Oct  5 10:43:28 2012
-@@ -89,6 +89,7 @@
- #include "picturestr.h"
- #endif
- 
-+#include "compat-api.h"
- #include "atipcirename.h"
- 
- #ifndef MAX
-@@ -408,9 +409,9 @@
- 
-     RADEONSavePtr     SavedReg;         /* Original (text) mode              */
-     RADEONSavePtr     ModeReg;          /* Current mode                      */
--    Bool              (*CloseScreen)(int, ScreenPtr);
-+    Bool              (*CloseScreen)(CLOSE_SCREEN_ARGS_DECL);
- 
--    void              (*BlockHandler)(int, pointer, pointer, pointer);
-+    void              (*BlockHandler)(BLOCKHANDLER_ARGS_DECL);
- 
-     Bool              PaletteSavedOnVT; /* Palette saved on last VT switch   */
- 
---- src/radeon_driver.c	Fri Oct  5 10:23:49 2012
-+++ src/radeon_driver.c	Fri Oct  5 10:48:25 2012
-@@ -120,7 +120,7 @@
- #endif /* __sparc__ */
- 
- 				/* Forward definitions for driver functions */
--static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen);
-+static Bool RADEONCloseScreen(CLOSE_SCREEN_ARGS_DECL);
- static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode);
- static void RADEONSave(ScrnInfoPtr pScrn);
- 
-@@ -3037,15 +3037,14 @@
- #endif
- }
- 
--static void RADEONBlockHandler(int i, pointer blockData,
--			       pointer pTimeout, pointer pReadmask)
-+static void RADEONBlockHandler(BLOCKHANDLER_ARGS_DECL)
- {
--    ScreenPtr      pScreen = screenInfo.screens[i];
--    ScrnInfoPtr    pScrn   = xf86Screens[i];
-+    SCREEN_PTR(arg);
-+    ScrnInfoPtr    pScrn   = xf86ScreenToScrn(pScreen);
-     RADEONInfoPtr  info    = RADEONPTR(pScrn);
- 
-     pScreen->BlockHandler = info->BlockHandler;
--    (*pScreen->BlockHandler) (i, blockData, pTimeout, pReadmask);
-+    (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS);
-     pScreen->BlockHandler = RADEONBlockHandler;
- 
-     if (info->VideoTimerCallback)
-@@ -5149,9 +5148,9 @@
-  * text mode, unmap video memory, and unwrap and call the saved
-  * CloseScreen function.
-  */
--static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen)
-+static Bool RADEONCloseScreen(CLOSE_SCREEN_ARGS_DECL)
- {
--    ScrnInfoPtr    pScrn = xf86Screens[scrnIndex];
-+    ScrnInfoPtr    pScrn = xf86ScreenToScrn(pScreen);
-     RADEONInfoPtr  info  = RADEONPTR(pScrn);
- 
-     xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, RADEON_LOGLEVEL_DEBUG,
-@@ -5240,7 +5239,7 @@
- 
-     pScreen->BlockHandler = info->BlockHandler;
-     pScreen->CloseScreen = info->CloseScreen;
--    return (*pScreen->CloseScreen)(scrnIndex, pScreen);
-+    return (*pScreen->CloseScreen)(CLOSE_SCREEN_ARGS);
- }
- 
- void RADEONFreeScreen(int scrnIndex, int flags)