Correct pitch so that accelerator can run on 1400x1050 screens. Add a few
more register sets for cursors.
This commit is contained in:
parent
67dbad6b3b
commit
9565d9e0cf
|
@ -291,12 +291,37 @@ ATICardFini(KdCardInfo *card)
|
|||
static void
|
||||
ATISetOffscreen (KdScreenInfo *screen)
|
||||
{
|
||||
#if defined(USE_DRI) && defined(GLXEXT)
|
||||
ATICardInfo(screen);
|
||||
#if defined(USE_DRI) && defined(GLXEXT)
|
||||
ATIScreenInfo *atis = (ATIScreenInfo *)screen->driver;
|
||||
int l;
|
||||
#endif
|
||||
int screen_size = screen->fb[0].byteStride * screen->height;
|
||||
int screen_size;
|
||||
char *mmio = atic->reg_base;
|
||||
|
||||
/* check (and adjust) pitch */
|
||||
if (mmio)
|
||||
{
|
||||
int byteStride = screen->fb[0].byteStride;
|
||||
int bitStride;
|
||||
int pixelStride;
|
||||
int bpp = screen->fb[0].bitsPerPixel;
|
||||
|
||||
/*
|
||||
* Ensure frame buffer is correctly aligned
|
||||
*/
|
||||
if (byteStride & 0x3f)
|
||||
{
|
||||
byteStride = (byteStride + 0x3f) & ~0x3f;
|
||||
bitStride = byteStride * 8;
|
||||
pixelStride = bitStride / bpp;
|
||||
|
||||
screen->fb[0].byteStride = byteStride;
|
||||
screen->fb[0].pixelStride = pixelStride;
|
||||
}
|
||||
}
|
||||
|
||||
screen_size = screen->fb[0].byteStride * screen->height;
|
||||
|
||||
screen->off_screen_base = screen_size;
|
||||
|
||||
|
@ -350,6 +375,62 @@ ATISetOffscreen (KdScreenInfo *screen)
|
|||
#endif /* USE_DRI && GLXEXT */
|
||||
}
|
||||
|
||||
static void
|
||||
ATISetPitch (KdScreenInfo *screen)
|
||||
{
|
||||
ATICardInfo(screen);
|
||||
#if defined(USE_DRI) && defined(GLXEXT)
|
||||
ATIScreenInfo *atis = (ATIScreenInfo *)screen->driver;
|
||||
int l;
|
||||
#endif
|
||||
char *mmio = atic->reg_base;
|
||||
|
||||
/* check (and adjust) pitch for radeon */
|
||||
if (mmio)
|
||||
{
|
||||
int byteStride = screen->fb[0].byteStride;
|
||||
int bitStride;
|
||||
int pixelStride;
|
||||
int bpp = screen->fb[0].bitsPerPixel;
|
||||
CARD32 crtc_pitch;
|
||||
CARD32 crtc2_pitch;
|
||||
#if 0
|
||||
CARD32 crtc_ext_cntl;
|
||||
CARD32 dac_cntl;
|
||||
#endif
|
||||
bitStride = byteStride * 8;
|
||||
pixelStride = bitStride / bpp;
|
||||
|
||||
crtc_pitch = (pixelStride >> 3);
|
||||
crtc_pitch |= crtc_pitch << 16;
|
||||
crtc2_pitch = (pixelStride >> 3);
|
||||
crtc2_pitch |= crtc2_pitch << 16;
|
||||
#if 0
|
||||
crtc_ext_cntl = MMIO_IN32 (mmio, ATI_REG_CRTC_EXT_CNTL);
|
||||
dac_cntl = MMIO_IN32 (mmio, ATI_REG_DAC_CNTL);
|
||||
/* Turn off the screen */
|
||||
MMIO_OUT32 (mmio, ATI_REG_CRTC_EXT_CNTL,
|
||||
crtc_ext_cntl |
|
||||
ATI_CRTC_VSYNC_DIS |
|
||||
ATI_CRTC_HSYNC_DIS |
|
||||
ATI_CRTC_DISPLAY_DIS);
|
||||
MMIO_OUT32 (mmio, ATI_REG_DAC_CNTL,
|
||||
dac_cntl |
|
||||
ATI_DAC_RANGE_CNTL |
|
||||
ATI_DAC_BLANKING);
|
||||
#endif
|
||||
MMIO_OUT32 (mmio, ATI_REG_CRTC_PITCH, crtc_pitch);
|
||||
MMIO_OUT32 (mmio, ATI_REG_CRTC2_PITCH, crtc2_pitch);
|
||||
#if 0
|
||||
/* Turn the screen back on */
|
||||
MMIO_OUT32 (mmio, ATI_REG_CRTC_EXT_CNTL,
|
||||
crtc_ext_cntl);
|
||||
MMIO_OUT32 (mmio, ATI_REG_DAC_CNTL,
|
||||
dac_cntl);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
static Bool
|
||||
ATIScreenInit(KdScreenInfo *screen)
|
||||
{
|
||||
|
@ -406,6 +487,18 @@ ATIRandRSetConfig (ScreenPtr pScreen,
|
|||
ATIDrawDisable (pScreen);
|
||||
ret = atic->backend_funcs.randrSetConfig(pScreen, randr, rate, pSize);
|
||||
ATISetOffscreen (screen);
|
||||
ATISetPitch (screen);
|
||||
/*
|
||||
* Set frame buffer mapping
|
||||
*/
|
||||
(*pScreen->ModifyPixmapHeader) (fbGetScreenPixmap (pScreen),
|
||||
pScreen->width,
|
||||
pScreen->height,
|
||||
screen->fb[0].depth,
|
||||
screen->fb[0].bitsPerPixel,
|
||||
screen->fb[0].byteStride,
|
||||
screen->fb[0].frameBuffer);
|
||||
|
||||
ATIDrawEnable (pScreen);
|
||||
return ret;
|
||||
}
|
||||
|
@ -502,15 +595,25 @@ static void
|
|||
ATIPreserve(KdCardInfo *card)
|
||||
{
|
||||
ATICardInfo *atic = card->driver;
|
||||
char *mmio = atic->reg_base;
|
||||
|
||||
atic->backend_funcs.preserve(card);
|
||||
if (atic->is_radeon && mmio)
|
||||
{
|
||||
atic->crtc_pitch = MMIO_IN32(mmio, ATI_REG_CRTC_PITCH);
|
||||
atic->crtc2_pitch = MMIO_IN32(mmio, ATI_REG_CRTC2_PITCH);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ATIRestore(KdCardInfo *card)
|
||||
{
|
||||
ATICardInfo *atic = card->driver;
|
||||
char *mmio = atic->reg_base;
|
||||
|
||||
MMIO_OUT32(mmio, ATI_REG_CRTC_PITCH, atic->crtc_pitch);
|
||||
MMIO_OUT32(mmio, ATI_REG_CRTC2_PITCH, atic->crtc2_pitch);
|
||||
ATIUnmapReg(card, atic);
|
||||
|
||||
atic->backend_funcs.restore(card);
|
||||
|
@ -534,13 +637,13 @@ ATIEnable(ScreenPtr pScreen)
|
|||
if (!atic->backend_funcs.enable(pScreen))
|
||||
return FALSE;
|
||||
|
||||
ATISetOffscreen (pScreenPriv->screen);
|
||||
|
||||
if ((atic->reg_base == NULL) && !ATIMapReg(pScreenPriv->screen->card,
|
||||
atic))
|
||||
return FALSE;
|
||||
|
||||
ATIDPMS(pScreen, KD_DPMS_NORMAL);
|
||||
ATISetOffscreen (pScreenPriv->screen);
|
||||
|
||||
ATISetPitch (pScreenPriv->screen);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -146,6 +146,8 @@ typedef struct _ATICardInfo {
|
|||
Bool is_r300;
|
||||
Bool is_agp;
|
||||
char *busid;
|
||||
CARD32 crtc_pitch;
|
||||
CARD32 crtc2_pitch;
|
||||
#ifdef USE_DRI
|
||||
int drmFd;
|
||||
#endif /* USE_DRI */
|
||||
|
|
|
@ -256,9 +256,14 @@ RadeonLoadCursor(ScreenPtr pScreen)
|
|||
h = bits->height;
|
||||
if (h > ATI_CURSOR_HEIGHT)
|
||||
h = ATI_CURSOR_HEIGHT;
|
||||
|
||||
tmp = MMIO_IN32(mmio, 0x7c);
|
||||
tmp = 0x00010f80;
|
||||
MMIO_OUT32 (mmio, 0x7c, tmp);
|
||||
|
||||
tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL);
|
||||
MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp & ~ATI_CRTC_CUR_EN);
|
||||
tmp &= ~(ATI_CRTC_CUR_EN | ATI_CRTC_ICON_EN | ATI_CRTC_ARGB_EN);
|
||||
MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp);
|
||||
|
||||
/* Stick new image into cursor memory */
|
||||
ram = (CARD32 *)(pScreenPriv->screen->memory_base +
|
||||
|
@ -336,7 +341,7 @@ RadeonLoadCursor(ScreenPtr pScreen)
|
|||
|
||||
/* Enable the cursor */
|
||||
tmp &= ~(ATI_CRTC_ICON_EN);
|
||||
tmp |= (ATI_CRTC_ARGB_EN);
|
||||
tmp |= ATI_CRTC_ARGB_EN;
|
||||
tmp |= ATI_CRTC_CUR_EN;
|
||||
MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp);
|
||||
}
|
||||
|
@ -349,7 +354,8 @@ ATIUnloadCursor(ScreenPtr pScreen)
|
|||
CARD8 *mmio = atic->reg_base;
|
||||
CARD32 tmp;
|
||||
|
||||
tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL) & ~ATI_CRTC_CUR_EN;
|
||||
tmp = MMIO_IN32(mmio, ATI_REG_GEN_CNTL);
|
||||
tmp &= ~(ATI_CRTC_CUR_EN | ATI_CRTC_ICON_EN | ATI_CRTC_ARGB_EN);
|
||||
MMIO_OUT32(mmio, ATI_REG_GEN_CNTL, tmp);
|
||||
}
|
||||
|
||||
|
@ -471,11 +477,11 @@ ATICursorEnable(ScreenPtr pScreen)
|
|||
if (atic->is_radeon)
|
||||
pCurPriv->area = KdOffscreenAlloc(pScreen,
|
||||
ATI_CURSOR_HEIGHT * ATI_CURSOR_WIDTH * 4,
|
||||
1, TRUE, ATICursorSave, atis);
|
||||
128, TRUE, ATICursorSave, atis);
|
||||
else
|
||||
pCurPriv->area = KdOffscreenAlloc(pScreen,
|
||||
ATI_CURSOR_HEIGHT * ATI_CURSOR_PITCH * 2,
|
||||
1, TRUE, ATICursorSave, atis);
|
||||
32, TRUE, ATICursorSave, atis);
|
||||
}
|
||||
if (pCurPriv->area == NULL)
|
||||
FatalError("Couldn't allocate offscreen memory for cursor.\n");
|
||||
|
|
|
@ -42,17 +42,17 @@
|
|||
#define ATI_REG_GEN_INT_CNTL 0x0040
|
||||
|
||||
#define ATI_REG_GEN_CNTL 0x0050
|
||||
# define ATI_CRTC_DBL_SCAN_EN (1 << 0)
|
||||
# define ATI_CRTC_INTERLACE_EN (1 << 1)
|
||||
# define ATI_CRTC_CSYNC_EN (1 << 4)
|
||||
# define ATI_CRTC_PIX_WIDTH_MASK (7 << 8)
|
||||
# define ATI_CRTC_CUR_EN (1 << 16)
|
||||
# define ATI_CRTC_CUR_MODE_MASK (7 << 17)
|
||||
# define ATI_CRTC_ICON_EN (1 << 20)
|
||||
# define ATI_CRTC_ARGB_EN (2 << 20)
|
||||
# define ATI_CRTC_EXT_DISP_EN (1 << 24)
|
||||
# define ATI_CRTC_EN (1 << 25)
|
||||
# define ATI_CRTC_DISP_REQ_EN_B (1 << 26)
|
||||
# define ATI_CRTC_DBL_SCAN_EN (1 << 0) /* 0x00000001 */
|
||||
# define ATI_CRTC_INTERLACE_EN (1 << 1) /* 0x00000002 */
|
||||
# define ATI_CRTC_CSYNC_EN (1 << 4) /* 0x00000010 */
|
||||
# define ATI_CRTC_PIX_WIDTH_MASK (7 << 8) /* 0x00000700 */
|
||||
# define ATI_CRTC_CUR_EN (1 << 16) /* 0x00010000 */
|
||||
# define ATI_CRTC_CUR_MODE_MASK (7 << 17) /* 0x000e0000 */
|
||||
# define ATI_CRTC_ICON_EN (1 << 20) /* 0x00100000 */
|
||||
# define ATI_CRTC_ARGB_EN (2 << 20) /* 0x00200000 */
|
||||
# define ATI_CRTC_EXT_DISP_EN (1 << 24) /* 0x01000000 */
|
||||
# define ATI_CRTC_EN (1 << 25) /* 0x02000000 */
|
||||
# define ATI_CRTC_DISP_REQ_EN_B (1 << 26) /* 0x04000000 */
|
||||
|
||||
#define ATI_REG_CRTC_EXT_CNTL 0x0054
|
||||
# define ATI_CRTC_EN (1 << 25)
|
||||
|
|
Loading…
Reference in New Issue
Block a user