Make R200 PDMA work -- primary queue sizes are now 9 bits, not 8.
This commit is contained in:
parent
9bd876768b
commit
7775506534
@ -271,8 +271,12 @@ ATIGetAvailPrimary(ATIScreenInfo *atis)
|
||||
int csq_stat, diff;
|
||||
|
||||
csq_stat = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_STAT);
|
||||
diff = ((csq_stat & RADEON_CSQ_WPTR_PRIMARY_MASK) >> 8) -
|
||||
(csq_stat & RADEON_CSQ_RPTR_PRIMARY_MASK);
|
||||
if (atic->is_r200)
|
||||
diff = ((csq_stat & R200_CSQ_WPTR_PRIMARY_MASK) >> 9) -
|
||||
(csq_stat & R200_CSQ_RPTR_PRIMARY_MASK);
|
||||
else
|
||||
diff = ((csq_stat & RADEON_CSQ_WPTR_PRIMARY_MASK) >> 8) -
|
||||
(csq_stat & RADEON_CSQ_RPTR_PRIMARY_MASK);
|
||||
|
||||
if (diff < 0)
|
||||
return -diff;
|
||||
@ -762,13 +766,19 @@ ATIPseudoDMAInit(ScreenPtr pScreen)
|
||||
ATICardInfo(pScreenPriv);
|
||||
char *mmio = atic->reg_base;
|
||||
|
||||
if (atic->is_r200 || atic->is_r300)
|
||||
if (atic->is_r300)
|
||||
return FALSE;
|
||||
|
||||
ATIUploadMicrocode(atis);
|
||||
ATIEngineReset(atis);
|
||||
|
||||
if (atic->is_radeon) {
|
||||
if (atic->is_r200) {
|
||||
MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
|
||||
RADEON_CSQ_PRIPIO_INDDIS);
|
||||
atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
|
||||
R200_CSQ_CNT_PRIMARY_MASK;
|
||||
MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN);
|
||||
} if (atic->is_radeon) {
|
||||
MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
|
||||
RADEON_CSQ_PRIPIO_INDDIS);
|
||||
atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
|
||||
@ -863,7 +873,13 @@ ATIDMAInit(ScreenPtr pScreen, Bool use_agp)
|
||||
MMIO_OUT32(mmio, ATI_REG_CCE_RPTR, atis->ring_read);
|
||||
MMIO_OUT32(mmio, ATI_REG_CCE_RPTR_ADDR, 0 /* XXX? */);
|
||||
|
||||
if (atic->is_radeon) {
|
||||
if (atic->is_r200) {
|
||||
MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
|
||||
RADEON_CSQ_PRIBM_INDBM);
|
||||
atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
|
||||
R200_CSQ_CNT_PRIMARY_MASK;
|
||||
MMIO_OUT32(mmio, RADEON_REG_ME_CNTL, RADEON_ME_MODE_FREE_RUN);
|
||||
} else if (atic->is_radeon) {
|
||||
MMIO_OUT32(mmio, RADEON_REG_CP_CSQ_CNTL,
|
||||
RADEON_CSQ_PRIBM_INDBM);
|
||||
atis->cce_pri_size = MMIO_IN32(mmio, RADEON_REG_CP_CSQ_CNTL) &
|
||||
|
@ -244,6 +244,8 @@
|
||||
#define RADEON_REG_CP_CSQ_CNTL 0x0740
|
||||
# define RADEON_CSQ_CNT_PRIMARY_MASK 0x000000ff
|
||||
# define RADEON_CSQ_CNT_INDIRECT_MASK 0x0000ff00
|
||||
# define R200_CSQ_CNT_PRIMARY_MASK 0x000001ff
|
||||
# define R200_CSQ_CNT_INDIRECT_MASK 0x0003fe00
|
||||
# define RADEON_CSQ_PRIDIS_INDDIS (0 << 28)
|
||||
# define RADEON_CSQ_PRIPIO_INDDIS (1 << 28)
|
||||
# define RADEON_CSQ_PRIBM_INDDIS (2 << 28)
|
||||
@ -274,6 +276,8 @@
|
||||
# define RADEON_CSQ_WPTR_PRIMARY_MASK (0xff << 8)
|
||||
# define RADEON_CSQ_RPTR_INDIRECT_MASK (0xff << 16)
|
||||
# define RADEON_CSQ_WPTR_INDIRECT_MASK (0xff << 24)
|
||||
# define R200_CSQ_RPTR_PRIMARY_MASK (0x1ff << 0)
|
||||
# define R200_CSQ_WPTR_PRIMARY_MASK (0x1ff << 9)
|
||||
|
||||
#define R128_REG_PM4_MICRO_CNTL 0x07fc
|
||||
# define R128_PM4_MICRO_FREERUN (1 << 30)
|
||||
|
Loading…
Reference in New Issue
Block a user