diff --git a/src/rhd.h b/src/rhd.h index 708e4d6..8471f33 100644 --- a/src/rhd.h +++ b/src/rhd.h @@ -355,7 +355,7 @@ extern unsigned int RHDReadPCIBios(RHDPtr rhdPtr, unsigned char **prt); extern Bool RHDScalePolicy(struct rhdMonitor *Monitor, struct rhdConnector *Connector); extern void RHDPrepareMode(RHDPtr rhdPtr); extern Bool RHDUseAtom(RHDPtr rhdPtr, enum RHD_CHIPSETS *BlackList, enum atomSubSystem subsys); - +extern CARD32 RHDGetVideoRamSize(RHDPtr rhdPtr); extern CARD32 _RHDRegRead(int scrnIndex, CARD16 offset); #define RHDRegRead(ptr, offset) _RHDRegRead((ptr)->scrnIndex, (offset)) extern void _RHDRegWrite(int scrnIndex, CARD16 offset, CARD32 value); diff --git a/src/rhd_atombios.c b/src/rhd_atombios.c index b515427..8b9d6c2 100644 --- a/src/rhd_atombios.c +++ b/src/rhd_atombios.c @@ -2762,7 +2762,8 @@ rhdAtomInit(atomBiosHandlePtr unused1, AtomBiosRequestID unused2, AtomBiosArgPtr data) { int scrnIndex = data->val; - RHDPtr rhdPtr = RHDPTR(xf86Screens[scrnIndex]); + ScrnInfoPtr pScrn = xf86Screens[scrnIndex]; + RHDPtr rhdPtr = RHDPTR(pScrn); unsigned char *ptr; atomDataTablesPtr atomDataPtr; atomBiosHandlePtr handle = NULL; @@ -2785,9 +2786,14 @@ rhdAtomInit(atomBiosHandlePtr unused1, AtomBiosRequestID unused2, return ATOM_FAILED; } } else { - if (xf86IsEntityPrimary(rhdPtr->entityIndex)) { + CARD32 videoRam = RHDGetVideoRamSize(rhdPtr); + + if (videoRam > 0) { int read_len; unsigned char tmp[32]; + + if (!pScrn->videoRam) + pScrn->videoRam = videoRam; xf86DrvMsg(scrnIndex,X_INFO,"Getting BIOS copy from legacy VBIOS location\n"); if (xf86ReadBIOS(legacyBIOSLocation, 0, tmp, 32) < 0) { xf86DrvMsg(scrnIndex,X_ERROR, diff --git a/src/rhd_driver.c b/src/rhd_driver.c index 0ef3612..d64610d 100644 --- a/src/rhd_driver.c +++ b/src/rhd_driver.c @@ -164,7 +164,6 @@ static Bool rhdMapMMIO(RHDPtr rhdPtr); static void rhdUnmapMMIO(RHDPtr rhdPtr); static Bool rhdMapFB(RHDPtr rhdPtr); static void rhdUnmapFB(RHDPtr rhdPtr); -static CARD32 rhdGetVideoRamSize(RHDPtr rhdPtr); static void rhdFbOffscreenGrab(ScrnInfoPtr pScrn); static void rhdGetIGPNorthBridgeInfo(RHDPtr rhdPtr); static enum rhdCardType rhdGetCardType(RHDPtr rhdPtr); @@ -531,6 +530,7 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags) goto error0; } + /* do this before AtomBIOS init as it will be set there if not preset */ pScrn->videoRam = rhdPtr->pEnt->device->videoRam; rhdPtr->entityIndex = rhdPtr->pEnt->index; @@ -715,7 +715,7 @@ RHDPreInit(ScrnInfoPtr pScrn, int flags) /* We can use a register which is programmed by the BIOS to find out the size of our framebuffer */ if (!pScrn->videoRam) { - pScrn->videoRam = rhdGetVideoRamSize(rhdPtr); + pScrn->videoRam = RHDGetVideoRamSize(rhdPtr); if (!pScrn->videoRam) { xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "No Video RAM detected.\n"); goto error1; @@ -1678,8 +1678,8 @@ rhdUnmapMMIO(RHDPtr rhdPtr) /* * */ -static CARD32 -rhdGetVideoRamSize(RHDPtr rhdPtr) +CARD32 +RHDGetVideoRamSize(RHDPtr rhdPtr) { CARD32 RamSize, BARSize;