mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-25 08:20:11 +01:00
Byte swapping for vertex DMA data and DMA descriptors
This commit is contained in:
parent
121100a515
commit
2558b54aa0
3 changed files with 24 additions and 21 deletions
|
|
@ -260,8 +260,9 @@ static void mach64_bm_dma_test( drm_device_t *dev )
|
|||
MACH64_READ( MACH64_VERTEX_1_ARGB ) );
|
||||
DRM_INFO( "(Before DMA Transfer) VERTEX_1_X_Y = 0x%08x\n",
|
||||
MACH64_READ( MACH64_VERTEX_1_X_Y ) );
|
||||
|
||||
data[0] = 0x00060190; /* a0 = PAT_REG0 */
|
||||
/* a0 = PAT_REG0 */
|
||||
/* 1_90 = VERTEX_1_S, setup 7 sequential reg writes */
|
||||
data[0] = cpu_to_le32(0x00060190);
|
||||
data[1] = 0x11111111;
|
||||
data[2] = 0x22222222;
|
||||
data[3] = 0x33333333;
|
||||
|
|
@ -269,13 +270,13 @@ static void mach64_bm_dma_test( drm_device_t *dev )
|
|||
data[5] = 0x55555555;
|
||||
data[6] = 0x66666666;
|
||||
data[7] = 0x77777777;
|
||||
data[8] = 0x0000006d;
|
||||
data[8] = cpu_to_le32(0x0000006d);
|
||||
data[9] = 0x00000000;
|
||||
|
||||
DRM_INFO( "Preparing table ...\n" );
|
||||
table[0] = MACH64_BM_ADDR + APERTURE_OFFSET;
|
||||
table[1] = data_addr;
|
||||
table[2] = 10 * sizeof( u32 ) | 0x80000000 | 0x40000000;
|
||||
table[0] = cpu_to_le32(MACH64_BM_ADDR + APERTURE_OFFSET);
|
||||
table[1] = cpu_to_le32(data_addr);
|
||||
table[2] = cpu_to_le32(10 * sizeof( u32 ) | 0x80000000 | 0x40000000);
|
||||
table[3] = 0;
|
||||
|
||||
DRM_INFO( "table[0] = 0x%08x\n", table[0] );
|
||||
|
|
|
|||
|
|
@ -345,6 +345,9 @@ extern int mach64_dma_vertex( struct inode *inode, struct file *filp,
|
|||
|
||||
#define MACH64_CRTC_INT_CNTL 0x0418
|
||||
|
||||
/* Constants */
|
||||
#define MACH64_LAST_FRAME_REG MACH64_SCRATCH_REG0
|
||||
#define MACH64_LAST_DISPATCH_REG MACH64_SCRATCH_REG1
|
||||
|
||||
|
||||
#define MACH64_BASE(reg) ((u32)(dev_priv->mmio->handle))
|
||||
|
|
|
|||
|
|
@ -447,7 +447,7 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
|
|||
}
|
||||
|
||||
/* SRC_CNTL */
|
||||
p[(size/4) ] = 0x0000006d;
|
||||
p[(size/4) ] = cpu_to_le32(0x0000006d);
|
||||
p[(size/4)+1] = 0x00000000;
|
||||
size += 8;
|
||||
pages = (size + DMA_CHUNKSIZE - 1) / DMA_CHUNKSIZE;
|
||||
|
|
@ -455,9 +455,9 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
|
|||
for ( i = 0 ; i < pages-1 ; i++ ) {
|
||||
page = address + i * DMA_CHUNKSIZE;
|
||||
|
||||
table_ptr[DMA_FRAME_BUF_OFFSET] = MACH64_BM_ADDR + APERTURE_OFFSET;
|
||||
table_ptr[DMA_SYS_MEM_ADDR] = page;
|
||||
table_ptr[DMA_COMMAND] = DMA_CHUNKSIZE | 0x40000000;
|
||||
table_ptr[DMA_FRAME_BUF_OFFSET] = cpu_to_le32(MACH64_BM_ADDR + APERTURE_OFFSET);
|
||||
table_ptr[DMA_SYS_MEM_ADDR] = cpu_to_le32(page);
|
||||
table_ptr[DMA_COMMAND] = cpu_to_le32(DMA_CHUNKSIZE | 0x40000000);
|
||||
table_ptr[DMA_RESERVED] = 0;
|
||||
|
||||
tableDwords += 4;
|
||||
|
|
@ -467,9 +467,9 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
|
|||
/* generate the final descriptor for any remaining commands */
|
||||
page = address + i * DMA_CHUNKSIZE;
|
||||
remainder = size - i * DMA_CHUNKSIZE;
|
||||
table_ptr[DMA_FRAME_BUF_OFFSET] = MACH64_BM_ADDR + APERTURE_OFFSET;
|
||||
table_ptr[DMA_SYS_MEM_ADDR] = page;
|
||||
table_ptr[DMA_COMMAND] = remainder | 0x80000000 | 0x40000000;
|
||||
table_ptr[DMA_FRAME_BUF_OFFSET] = cpu_to_le32(MACH64_BM_ADDR + APERTURE_OFFSET);
|
||||
table_ptr[DMA_SYS_MEM_ADDR] = cpu_to_le32(page);
|
||||
table_ptr[DMA_COMMAND] = cpu_to_le32(remainder | 0x80000000 | 0x40000000);
|
||||
table_ptr[DMA_RESERVED] = 0;
|
||||
|
||||
tableDwords += 4;
|
||||
|
|
@ -527,7 +527,7 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
|
|||
while ( used ) {
|
||||
u32 reg, count;
|
||||
|
||||
reg = *p++;
|
||||
reg = le32_to_cpu(*p++);
|
||||
used--;
|
||||
|
||||
count = (reg >> 16) + 1;
|
||||
|
|
@ -543,8 +543,8 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
|
|||
}
|
||||
|
||||
--fifo;
|
||||
|
||||
MACH64_WRITE( reg, *p++ );
|
||||
/* data is already little-endian */
|
||||
MACH64_DEREF(reg) = *p++;
|
||||
used--;
|
||||
|
||||
reg += 4;
|
||||
|
|
@ -561,12 +561,11 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
|
|||
buf_priv->age = dev_priv->sarea_priv->last_dispatch;
|
||||
|
||||
/* Emit the vertex buffer age */
|
||||
BEGIN_RING( 2 );
|
||||
DMAGETPTR( dev_priv, 1 );
|
||||
|
||||
OUT_RING( CCE_PACKET0( MACH64_LAST_DISPATCH_REG, 0 ) );
|
||||
OUT_RING( buf_priv->age );
|
||||
|
||||
ADVANCE_RING();
|
||||
DMAOUTREG( MACH64_LAST_DISPATCH_REG, buf_priv->age );
|
||||
|
||||
DMAADVANCE( dev_priv );
|
||||
|
||||
buf->pending = 1;
|
||||
buf->used = 0;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue