mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2026-05-08 12:48:05 +02:00
- Reintegrate PPC support from old pcigart branch
This commit is contained in:
parent
5c2aa063b6
commit
2673fcbaae
11 changed files with 122 additions and 45 deletions
|
|
@ -53,7 +53,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/smp_lock.h> /* For (un)lock_kernel */
|
||||
#include <linux/mm.h>
|
||||
#ifdef __alpha__
|
||||
#if defined(__alpha__) || defined(__powerpc__)
|
||||
#include <asm/pgtable.h> /* For pte_wrprotect */
|
||||
#endif
|
||||
#include <asm/io.h>
|
||||
|
|
@ -287,12 +287,43 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
|||
return old;
|
||||
}
|
||||
|
||||
#elif defined(__powerpc__)
|
||||
extern void __cmpxchg_called_with_bad_pointer(void);
|
||||
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, int size)
|
||||
{
|
||||
unsigned long prev;
|
||||
|
||||
switch (size) {
|
||||
case 4:
|
||||
__asm__ __volatile__(
|
||||
"sync;"
|
||||
"0: lwarx %0,0,%1 ;"
|
||||
" cmpl 0,%0,%3;"
|
||||
" bne 1f;"
|
||||
" stwcx. %2,0,%1;"
|
||||
" bne- 0b;"
|
||||
"1: "
|
||||
"sync;"
|
||||
: "=&r"(prev)
|
||||
: "r"(ptr), "r"(new), "r"(old)
|
||||
: "cr0", "memory");
|
||||
return prev;
|
||||
}
|
||||
__cmpxchg_called_with_bad_pointer();
|
||||
return old;
|
||||
}
|
||||
|
||||
#endif /* i386, powerpc & alpha */
|
||||
|
||||
#ifndef __alpha__
|
||||
#define cmpxchg(ptr,o,n) \
|
||||
((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o), \
|
||||
(unsigned long)(n),sizeof(*(ptr))))
|
||||
#endif /* i386 & alpha */
|
||||
#endif
|
||||
|
||||
#endif /* !__HAVE_ARCH_CMPXCHG */
|
||||
|
||||
/* Macros to make printk easier */
|
||||
#define DRM_ERROR(fmt, arg...) \
|
||||
printk(KERN_ERR "[" DRM_NAME ":" __FUNCTION__ "] *ERROR* " fmt , ##arg)
|
||||
|
|
|
|||
|
|
@ -424,7 +424,10 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
|
|||
}
|
||||
#elif defined(__ia64__)
|
||||
if (map->type != _DRM_AGP)
|
||||
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
|
||||
vma->vm_page_prot =
|
||||
pgprot_writecombine(vma->vm_page_prot);
|
||||
#elif defined(__powerpc__)
|
||||
pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE | _PAGE_GUARDED;
|
||||
#endif
|
||||
vma->vm_flags |= VM_IO; /* not in core dump */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,11 +39,11 @@
|
|||
|
||||
#define DRIVER_NAME "r128"
|
||||
#define DRIVER_DESC "ATI Rage 128"
|
||||
#define DRIVER_DATE "20010308"
|
||||
#define DRIVER_DATE "20010405"
|
||||
|
||||
#define DRIVER_MAJOR 2
|
||||
#define DRIVER_MINOR 1
|
||||
#define DRIVER_PATCHLEVEL 5
|
||||
#define DRIVER_PATCHLEVEL 6
|
||||
|
||||
#define DRIVER_IOCTLS \
|
||||
[DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { r128_cce_buffers, 1, 0 }, \
|
||||
|
|
|
|||
|
|
@ -37,11 +37,11 @@
|
|||
|
||||
#define DRIVER_NAME "radeon"
|
||||
#define DRIVER_DESC "ATI Radeon"
|
||||
#define DRIVER_DATE "20010308"
|
||||
#define DRIVER_DATE "20010405"
|
||||
|
||||
#define DRIVER_MAJOR 1
|
||||
#define DRIVER_MINOR 0
|
||||
#define DRIVER_PATCHLEVEL 1
|
||||
#define DRIVER_PATCHLEVEL 2
|
||||
|
||||
#define DRIVER_IOCTLS \
|
||||
[DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { radeon_cp_buffers, 1, 0 }, \
|
||||
|
|
|
|||
35
linux/drmP.h
35
linux/drmP.h
|
|
@ -53,7 +53,7 @@
|
|||
#include <linux/sched.h>
|
||||
#include <linux/smp_lock.h> /* For (un)lock_kernel */
|
||||
#include <linux/mm.h>
|
||||
#ifdef __alpha__
|
||||
#if defined(__alpha__) || defined(__powerpc__)
|
||||
#include <asm/pgtable.h> /* For pte_wrprotect */
|
||||
#endif
|
||||
#include <asm/io.h>
|
||||
|
|
@ -287,12 +287,43 @@ static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
|||
return old;
|
||||
}
|
||||
|
||||
#elif defined(__powerpc__)
|
||||
extern void __cmpxchg_called_with_bad_pointer(void);
|
||||
static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old,
|
||||
unsigned long new, int size)
|
||||
{
|
||||
unsigned long prev;
|
||||
|
||||
switch (size) {
|
||||
case 4:
|
||||
__asm__ __volatile__(
|
||||
"sync;"
|
||||
"0: lwarx %0,0,%1 ;"
|
||||
" cmpl 0,%0,%3;"
|
||||
" bne 1f;"
|
||||
" stwcx. %2,0,%1;"
|
||||
" bne- 0b;"
|
||||
"1: "
|
||||
"sync;"
|
||||
: "=&r"(prev)
|
||||
: "r"(ptr), "r"(new), "r"(old)
|
||||
: "cr0", "memory");
|
||||
return prev;
|
||||
}
|
||||
__cmpxchg_called_with_bad_pointer();
|
||||
return old;
|
||||
}
|
||||
|
||||
#endif /* i386, powerpc & alpha */
|
||||
|
||||
#ifndef __alpha__
|
||||
#define cmpxchg(ptr,o,n) \
|
||||
((__typeof__(*(ptr)))__cmpxchg((ptr),(unsigned long)(o), \
|
||||
(unsigned long)(n),sizeof(*(ptr))))
|
||||
#endif /* i386 & alpha */
|
||||
#endif
|
||||
|
||||
#endif /* !__HAVE_ARCH_CMPXCHG */
|
||||
|
||||
/* Macros to make printk easier */
|
||||
#define DRM_ERROR(fmt, arg...) \
|
||||
printk(KERN_ERR "[" DRM_NAME ":" __FUNCTION__ "] *ERROR* " fmt , ##arg)
|
||||
|
|
|
|||
|
|
@ -424,7 +424,10 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
|
|||
}
|
||||
#elif defined(__ia64__)
|
||||
if (map->type != _DRM_AGP)
|
||||
vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
|
||||
vma->vm_page_prot =
|
||||
pgprot_writecombine(vma->vm_page_prot);
|
||||
#elif defined(__powerpc__)
|
||||
pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE | _PAGE_GUARDED;
|
||||
#endif
|
||||
vma->vm_flags |= VM_IO; /* not in core dump */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -210,7 +210,7 @@ int r128_do_cce_idle( drm_r128_private_t *dev_priv )
|
|||
int i;
|
||||
|
||||
for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
|
||||
if ( *dev_priv->ring.head == dev_priv->ring.tail ) {
|
||||
if ( GET_RING_HEAD( &dev_priv->ring ) == dev_priv->ring.tail ) {
|
||||
int pm4stat = R128_READ( R128_PM4_STAT );
|
||||
if ( ( (pm4stat & R128_PM4_FIFOCNT_MASK) >=
|
||||
dev_priv->cce_fifo_size ) &&
|
||||
|
|
@ -251,7 +251,7 @@ static void r128_do_cce_reset( drm_r128_private_t *dev_priv )
|
|||
{
|
||||
R128_WRITE( R128_PM4_BUFFER_DL_WPTR, 0 );
|
||||
R128_WRITE( R128_PM4_BUFFER_DL_RPTR, 0 );
|
||||
*dev_priv->ring.head = 0;
|
||||
SET_RING_HEAD( &dev_priv->ring, 0 );
|
||||
dev_priv->ring.tail = 0;
|
||||
}
|
||||
|
||||
|
|
@ -332,7 +332,7 @@ static void r128_cce_init_ring_buffer( drm_device_t *dev )
|
|||
R128_WRITE( R128_PM4_BUFFER_DL_RPTR, 0 );
|
||||
|
||||
/* DL_RPTR_ADDR is a physical address in AGP space. */
|
||||
*dev_priv->ring.head = 0;
|
||||
SET_RING_HEAD( &dev_priv->ring, 0 );
|
||||
|
||||
if ( !dev_priv->is_pci ) {
|
||||
R128_WRITE( R128_PM4_BUFFER_DL_RPTR_ADDR,
|
||||
|
|
|
|||
|
|
@ -39,11 +39,11 @@
|
|||
|
||||
#define DRIVER_NAME "r128"
|
||||
#define DRIVER_DESC "ATI Rage 128"
|
||||
#define DRIVER_DATE "20010308"
|
||||
#define DRIVER_DATE "20010405"
|
||||
|
||||
#define DRIVER_MAJOR 2
|
||||
#define DRIVER_MINOR 1
|
||||
#define DRIVER_PATCHLEVEL 5
|
||||
#define DRIVER_PATCHLEVEL 6
|
||||
|
||||
#define DRIVER_IOCTLS \
|
||||
[DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { r128_cce_buffers, 1, 0 }, \
|
||||
|
|
|
|||
|
|
@ -28,11 +28,15 @@
|
|||
* Rickard E. (Rik) Faith <faith@valinux.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
* Michel Dänzer <daenzerm@student.ethz.ch>
|
||||
*/
|
||||
|
||||
#ifndef __R128_DRV_H__
|
||||
#define __R128_DRV_H__
|
||||
|
||||
#define GET_RING_HEAD( ring ) le32_to_cpu( *(ring)->head )
|
||||
#define SET_RING_HEAD( ring, val ) *(ring)->head = cpu_to_le32( val )
|
||||
|
||||
typedef struct drm_r128_freelist {
|
||||
unsigned int age;
|
||||
drm_buf_t *buf;
|
||||
|
|
@ -136,7 +140,7 @@ extern int r128_wait_ring( drm_r128_private_t *dev_priv, int n );
|
|||
static inline void
|
||||
r128_update_ring_snapshot( drm_r128_ring_buffer_t *ring )
|
||||
{
|
||||
ring->space = (*(volatile int *)ring->head - ring->tail) * sizeof(u32);
|
||||
ring->space = (GET_RING_HEAD( ring ) - ring->tail) * sizeof(u32);
|
||||
if ( ring->space <= 0 )
|
||||
ring->space += ring->size;
|
||||
}
|
||||
|
|
@ -368,7 +372,7 @@ extern int r128_cce_indirect( struct inode *inode, struct file *filp,
|
|||
|
||||
#define R128_LAST_FRAME_REG R128_GUI_SCRATCH_REG0
|
||||
#define R128_LAST_DISPATCH_REG R128_GUI_SCRATCH_REG1
|
||||
#define R128_MAX_VB_AGE 0xffffffff
|
||||
#define R128_MAX_VB_AGE 0x7fffffff
|
||||
#define R128_MAX_VB_VERTS (0xffff)
|
||||
|
||||
#define R128_RING_HIGH_MARK 128
|
||||
|
|
@ -389,8 +393,8 @@ static inline u32 _R128_READ(u32 *addr) {
|
|||
#define R128_WRITE(reg,val) \
|
||||
do { wmb(); R128_DEREF(reg) = val; } while (0)
|
||||
#else
|
||||
#define R128_READ(reg) R128_DEREF( reg )
|
||||
#define R128_WRITE(reg,val) do { R128_DEREF( reg ) = val; } while (0)
|
||||
#define R128_READ(reg) le32_to_cpu( R128_DEREF( reg ) )
|
||||
#define R128_WRITE(reg,val) do { R128_DEREF( reg ) = cpu_to_le32( val ); } while (0)
|
||||
#endif
|
||||
|
||||
#define R128_DEREF8(reg) *(volatile u8 *)R128_ADDR( reg )
|
||||
|
|
@ -525,7 +529,7 @@ do { \
|
|||
DRM_INFO( " OUT_RING( 0x%08x ) at 0x%x\n", \
|
||||
(unsigned int)(x), write ); \
|
||||
} \
|
||||
ring[write++] = (x); \
|
||||
ring[write++] = cpu_to_le32( x ); \
|
||||
write &= tail_mask; \
|
||||
} while (0)
|
||||
|
||||
|
|
|
|||
|
|
@ -660,7 +660,7 @@ static void r128_cce_dispatch_indirect( drm_device_t *dev,
|
|||
u32 *data = (u32 *)
|
||||
((char *)dev_priv->buffers->handle
|
||||
+ buf->offset + start);
|
||||
data[dwords++] = R128_CCE_PACKET2;
|
||||
data[dwords++] = cpu_to_le32( R128_CCE_PACKET2 );
|
||||
}
|
||||
|
||||
buf_priv->dispatched = 1;
|
||||
|
|
@ -727,16 +727,21 @@ static void r128_cce_dispatch_indices( drm_device_t *dev,
|
|||
data = (u32 *)((char *)dev_priv->buffers->handle
|
||||
+ buf->offset + start);
|
||||
|
||||
data[0] = CCE_PACKET3( R128_3D_RNDR_GEN_INDX_PRIM, dwords-2 );
|
||||
data[0] = cpu_to_le32( CCE_PACKET3( R128_3D_RNDR_GEN_INDX_PRIM,
|
||||
dwords-2 ) );
|
||||
|
||||
data[1] = offset;
|
||||
data[2] = R128_MAX_VB_VERTS;
|
||||
data[3] = format;
|
||||
data[4] = (prim | R128_CCE_VC_CNTL_PRIM_WALK_IND |
|
||||
(count << 16));
|
||||
data[1] = cpu_to_le32( offset );
|
||||
data[2] = cpu_to_le32( R128_MAX_VB_VERTS );
|
||||
data[3] = cpu_to_le32( format );
|
||||
data[4] = cpu_to_le32( (prim | R128_CCE_VC_CNTL_PRIM_WALK_IND |
|
||||
(count << 16)) );
|
||||
|
||||
if ( count & 0x1 ) {
|
||||
#ifdef __LITTLE_ENDIAN
|
||||
data[dwords-1] &= 0x0000ffff;
|
||||
#else
|
||||
data[dwords-1] &= 0xffff0000;
|
||||
#endif
|
||||
}
|
||||
|
||||
do {
|
||||
|
|
@ -842,23 +847,23 @@ static int r128_cce_dispatch_blit( drm_device_t *dev,
|
|||
|
||||
data = (u32 *)((char *)dev_priv->buffers->handle + buf->offset);
|
||||
|
||||
data[0] = CCE_PACKET3( R128_CNTL_HOSTDATA_BLT, dwords + 6 );
|
||||
data[1] = (R128_GMC_DST_PITCH_OFFSET_CNTL |
|
||||
R128_GMC_BRUSH_NONE |
|
||||
(blit->format << 8) |
|
||||
R128_GMC_SRC_DATATYPE_COLOR |
|
||||
R128_ROP3_S |
|
||||
R128_DP_SRC_SOURCE_HOST_DATA |
|
||||
R128_GMC_CLR_CMP_CNTL_DIS |
|
||||
R128_GMC_AUX_CLIP_DIS |
|
||||
R128_GMC_WR_MSK_DIS);
|
||||
data[0] = cpu_to_le32( CCE_PACKET3( R128_CNTL_HOSTDATA_BLT, dwords + 6 ) );
|
||||
data[1] = cpu_to_le32( (R128_GMC_DST_PITCH_OFFSET_CNTL |
|
||||
R128_GMC_BRUSH_NONE |
|
||||
(blit->format << 8) |
|
||||
R128_GMC_SRC_DATATYPE_COLOR |
|
||||
R128_ROP3_S |
|
||||
R128_DP_SRC_SOURCE_HOST_DATA |
|
||||
R128_GMC_CLR_CMP_CNTL_DIS |
|
||||
R128_GMC_AUX_CLIP_DIS |
|
||||
R128_GMC_WR_MSK_DIS) );
|
||||
|
||||
data[2] = (blit->pitch << 21) | (blit->offset >> 5);
|
||||
data[3] = 0xffffffff;
|
||||
data[4] = 0xffffffff;
|
||||
data[5] = (blit->y << 16) | blit->x;
|
||||
data[6] = (blit->height << 16) | blit->width;
|
||||
data[7] = dwords;
|
||||
data[2] = cpu_to_le32( (blit->pitch << 21) | (blit->offset >> 5) );
|
||||
data[3] = cpu_to_le32( 0xffffffff );
|
||||
data[4] = cpu_to_le32( 0xffffffff );
|
||||
data[5] = cpu_to_le32( (blit->y << 16) | blit->x );
|
||||
data[6] = cpu_to_le32( (blit->height << 16) | blit->width );
|
||||
data[7] = cpu_to_le32( dwords );
|
||||
|
||||
buf->used = (dwords + 8) * sizeof(u32);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,11 +37,11 @@
|
|||
|
||||
#define DRIVER_NAME "radeon"
|
||||
#define DRIVER_DESC "ATI Radeon"
|
||||
#define DRIVER_DATE "20010308"
|
||||
#define DRIVER_DATE "20010405"
|
||||
|
||||
#define DRIVER_MAJOR 1
|
||||
#define DRIVER_MINOR 0
|
||||
#define DRIVER_PATCHLEVEL 1
|
||||
#define DRIVER_PATCHLEVEL 2
|
||||
|
||||
#define DRIVER_IOCTLS \
|
||||
[DRM_IOCTL_NR(DRM_IOCTL_DMA)] = { radeon_cp_buffers, 1, 0 }, \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue