mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-20 08:10:11 +01:00
Commit hacking from a while back. Don't be surprised if this breaks it...
This commit is contained in:
parent
22d6dd2b29
commit
996eeb8ed8
8 changed files with 468 additions and 80 deletions
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
#define DRIVER_NAME "mach64"
|
#define DRIVER_NAME "mach64"
|
||||||
#define DRIVER_DESC "DRM module for the ATI Rage Pro"
|
#define DRIVER_DESC "DRM module for the ATI Rage Pro"
|
||||||
#define DRIVER_DATE "20001218"
|
#define DRIVER_DATE "20010107"
|
||||||
|
|
||||||
#define DRIVER_MAJOR 1
|
#define DRIVER_MAJOR 1
|
||||||
#define DRIVER_MINOR 0
|
#define DRIVER_MINOR 0
|
||||||
|
|
@ -52,8 +52,8 @@ static drm_ioctl_desc_t mach64_ioctls[] = {
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { drm_block, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { drm_block, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = { drm_unblock, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = { drm_unblock, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = { drm_addmap, 1, 1 },
|
|
||||||
|
|
||||||
|
[DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = { drm_addmap, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = { mach64_addbufs, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = { mach64_addbufs, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = { drm_markbufs, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = { drm_markbufs, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { drm_infobufs, 1, 0 },
|
[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { drm_infobufs, 1, 0 },
|
||||||
|
|
@ -100,6 +100,11 @@ static drm_ioctl_desc_t mach64_ioctls[] = {
|
||||||
|
|
||||||
#define DRIVER_IOCTL_COUNT DRM_ARRAY_SIZE( mach64_ioctls )
|
#define DRIVER_IOCTL_COUNT DRM_ARRAY_SIZE( mach64_ioctls )
|
||||||
|
|
||||||
|
#define HAVE_AGP 1
|
||||||
|
#define MUST_HAVE_AGP 1
|
||||||
|
|
||||||
|
#define HAVE_MTRR 1
|
||||||
|
|
||||||
#define HAVE_CTX_BITMAP 1
|
#define HAVE_CTX_BITMAP 1
|
||||||
|
|
||||||
#define HAVE_DMA 1
|
#define HAVE_DMA 1
|
||||||
|
|
|
||||||
|
|
@ -386,6 +386,7 @@ int TAG(mapbufs)( struct inode *inode, struct file *filp,
|
||||||
{
|
{
|
||||||
drm_file_t *priv = filp->private_data;
|
drm_file_t *priv = filp->private_data;
|
||||||
drm_device_t *dev = priv->dev;
|
drm_device_t *dev = priv->dev;
|
||||||
|
DRIVER_DEVICE_PRIVATE *dev_priv = dev->dev_private;
|
||||||
drm_device_dma_t *dma = dev->dma;
|
drm_device_dma_t *dma = dev->dma;
|
||||||
int retcode = 0;
|
int retcode = 0;
|
||||||
const int zero = 0;
|
const int zero = 0;
|
||||||
|
|
|
||||||
|
|
@ -31,10 +31,12 @@
|
||||||
#include "mach64_drv.h"
|
#include "mach64_drv.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define DRIVER_DEVICE_PRIVATE drm_mach64_private_t
|
||||||
#define DRIVER_BUFFER_PRIVATE drm_mach64_buf_priv_t
|
#define DRIVER_BUFFER_PRIVATE drm_mach64_buf_priv_t
|
||||||
|
|
||||||
#define HAVE_PCI_DMA 1
|
#define HAVE_AGP 1
|
||||||
|
|
||||||
|
#define DRIVER_AGP_BUFFER_MAP dev_priv->buffers
|
||||||
|
|
||||||
#define TAG(x) mach64_##x
|
#define TAG(x) mach64_##x
|
||||||
#include "bufs_tmp.h"
|
#include "bufs_tmp.h"
|
||||||
|
|
|
||||||
|
|
@ -34,9 +34,9 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
|
||||||
|
|
||||||
#define DO_REMAP(_m) (_m)->handle = drm_ioremap( (_m)->offset, (_m)->size )
|
#define DO_IOREMAP(_m) (_m)->handle = drm_ioremap( (_m)->offset, (_m)->size )
|
||||||
|
|
||||||
#define DO_REMAPFREE(_m) \
|
#define DO_IOREMAPFREE(_m) \
|
||||||
do { \
|
do { \
|
||||||
if ( (_m)->handle && (_m)->size ) \
|
if ( (_m)->handle && (_m)->size ) \
|
||||||
drm_ioremapfree( (_m)->handle, (_m)->size ); \
|
drm_ioremapfree( (_m)->handle, (_m)->size ); \
|
||||||
|
|
@ -54,31 +54,59 @@
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static unsigned long mach64_alloc_page( void )
|
||||||
|
{
|
||||||
|
unsigned long address;
|
||||||
|
|
||||||
|
address = __get_free_page( GFP_KERNEL );
|
||||||
|
if ( address == 0UL ) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
atomic_inc( &virt_to_page(address)->count );
|
||||||
|
set_bit( PG_reserved, &virt_to_page(address)->flags );
|
||||||
|
|
||||||
|
return address;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mach64_free_page( unsigned long address )
|
||||||
|
{
|
||||||
|
if ( !address ) return;
|
||||||
|
|
||||||
|
atomic_dec( &virt_to_page(address)->count );
|
||||||
|
clear_bit( PG_reserved, &virt_to_page(address)->flags );
|
||||||
|
free_page( address );
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* ================================================================
|
/* ================================================================
|
||||||
* Engine control
|
* Engine control
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int mach64_do_wait_for_fifo( drm_mach64_private_t *dev_priv, int entries )
|
int mach64_do_wait_for_fifo( drm_mach64_private_t *dev_priv, int entries )
|
||||||
{
|
{
|
||||||
int i;
|
int slots = 0, i;
|
||||||
|
|
||||||
for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
|
for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
|
||||||
int slots = (MACH64_READ( MACH64_FIFO_STAT ) &
|
slots = (MACH64_READ( MACH64_FIFO_STAT ) &
|
||||||
MACH64_FIFO_SLOT_MASK);
|
MACH64_FIFO_SLOT_MASK);
|
||||||
if ( slots <= (0x8000 >> entries) ) return 0;
|
if ( slots <= (0x8000 >> entries) ) return 0;
|
||||||
udelay( 1 );
|
udelay( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
DRM_ERROR( "%s failed!\n", __FUNCTION__ );
|
DRM_ERROR( "failed! slots=%d entries=%d\n", slots, entries );
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int mach64_do_wait_for_idle( drm_mach64_private_t *dev_priv )
|
int mach64_do_wait_for_idle( drm_mach64_private_t *dev_priv )
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
|
||||||
ret = mach64_do_wait_for_fifo( dev_priv, 16 );
|
ret = mach64_do_wait_for_fifo( dev_priv, 16 );
|
||||||
if ( ret ) return ret;
|
if ( ret < 0 ) return ret;
|
||||||
|
|
||||||
for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
|
for ( i = 0 ; i < dev_priv->usec_timeout ; i++ ) {
|
||||||
if ( !(MACH64_READ( MACH64_GUI_STAT ) & MACH64_GUI_ACTIVE) ) {
|
if ( !(MACH64_READ( MACH64_GUI_STAT ) & MACH64_GUI_ACTIVE) ) {
|
||||||
|
|
@ -87,10 +115,36 @@ static int mach64_do_wait_for_idle( drm_mach64_private_t *dev_priv )
|
||||||
udelay( 1 );
|
udelay( 1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
DRM_ERROR( "%s failed!\n", __FUNCTION__ );
|
DRM_ERROR( "failed! GUI_STAT=0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_GUI_STAT ) );
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mach64_do_engine_reset( drm_mach64_private_t *dev_priv )
|
||||||
|
{
|
||||||
|
u32 bus_cntl, gen_test_cntl;
|
||||||
|
|
||||||
|
/* Kill off any outstanding DMA transfers.
|
||||||
|
*/
|
||||||
|
bus_cntl = MACH64_READ( MACH64_BUS_CNTL );
|
||||||
|
MACH64_WRITE( MACH64_BUS_CNTL,
|
||||||
|
bus_cntl | MACH64_BUS_MASTER_DIS );
|
||||||
|
|
||||||
|
/* Reset the GUI engine (high to low transition).
|
||||||
|
*/
|
||||||
|
gen_test_cntl = MACH64_READ( MACH64_GEN_TEST_CNTL );
|
||||||
|
MACH64_WRITE( MACH64_GEN_TEST_CNTL,
|
||||||
|
gen_test_cntl | MACH64_GUI_ENGINE_ENABLE );
|
||||||
|
|
||||||
|
gen_test_cntl = MACH64_READ( MACH64_GEN_TEST_CNTL );
|
||||||
|
MACH64_WRITE( MACH64_GEN_TEST_CNTL,
|
||||||
|
gen_test_cntl & ~MACH64_GUI_ENGINE_ENABLE );
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static int mach64_do_dma_init( drm_device_t *dev, drm_mach64_init_t *init )
|
static int mach64_do_dma_init( drm_device_t *dev, drm_mach64_init_t *init )
|
||||||
{
|
{
|
||||||
drm_mach64_private_t *dev_priv;
|
drm_mach64_private_t *dev_priv;
|
||||||
|
|
@ -130,6 +184,9 @@ static int mach64_do_dma_init( drm_device_t *dev, drm_mach64_init_t *init )
|
||||||
|
|
||||||
DO_FIND_MAP( dev_priv->fb, init->fb_offset );
|
DO_FIND_MAP( dev_priv->fb, init->fb_offset );
|
||||||
DO_FIND_MAP( dev_priv->mmio, init->mmio_offset );
|
DO_FIND_MAP( dev_priv->mmio, init->mmio_offset );
|
||||||
|
DO_FIND_MAP( dev_priv->buffers, init->buffers_offset );
|
||||||
|
|
||||||
|
DO_IOREMAP( dev_priv->buffers );
|
||||||
|
|
||||||
/* FIXME: Do the scratch register test for now, can remove
|
/* FIXME: Do the scratch register test for now, can remove
|
||||||
* later on.
|
* later on.
|
||||||
|
|
@ -151,6 +208,237 @@ static int mach64_do_dma_init( drm_device_t *dev, drm_mach64_init_t *init )
|
||||||
|
|
||||||
MACH64_WRITE( MACH64_SCRATCH_REG0, tmp );
|
MACH64_WRITE( MACH64_SCRATCH_REG0, tmp );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ( 1 ) {
|
||||||
|
u32 *table = (u32 *) mach64_alloc_page();
|
||||||
|
u32 *data = (u32 *) mach64_alloc_page();
|
||||||
|
int i;
|
||||||
|
u32 bus_cntl, src_cntl;
|
||||||
|
|
||||||
|
mach64_do_engine_reset( dev_priv );
|
||||||
|
|
||||||
|
bus_cntl = 0x7b33a010;
|
||||||
|
src_cntl = 0x00000000;
|
||||||
|
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
MACH64_WRITE( MACH64_BUS_CNTL, 0x7b33a010 );
|
||||||
|
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
MACH64_WRITE( MACH64_DST_CNTL, 0x00000003 );
|
||||||
|
MACH64_WRITE( MACH64_DST_OFF_PITCH, 0x19000000 );
|
||||||
|
MACH64_WRITE( MACH64_Z_OFF_PITCH, 0x0a023280 );
|
||||||
|
MACH64_WRITE( MACH64_Z_CNTL, 0x00000100 );
|
||||||
|
MACH64_WRITE( MACH64_ALPHA_TST_CNTL, 0x00000000 );
|
||||||
|
MACH64_WRITE( MACH64_SRC_CNTL, 0x00000000 );
|
||||||
|
MACH64_WRITE( MACH64_SRC_OFF_PITCH, 0x19000000 );
|
||||||
|
MACH64_WRITE( MACH64_DP_PIX_WIDTH, 0x00040404 );
|
||||||
|
MACH64_WRITE( MACH64_DP_SRC, 0x00000100 );
|
||||||
|
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
MACH64_WRITE( MACH64_SCALE_3D_CNTL, 0x00000000 );
|
||||||
|
MACH64_WRITE( MACH64_TEX_SIZE_PITCH, 0x05555555 );
|
||||||
|
MACH64_WRITE( MACH64_TEX_CNTL, 0x00000000 );
|
||||||
|
MACH64_WRITE( MACH64_SETUP_CNTL, 0x00000000 );
|
||||||
|
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
MACH64_WRITE( MACH64_AGP_BASE, 0x00000000 );
|
||||||
|
MACH64_WRITE( MACH64_AGP_CNTL, 0x00000000 );
|
||||||
|
|
||||||
|
MACH64_WRITE( MACH64_DST_CNTL, 0x00000003 );
|
||||||
|
MACH64_WRITE( MACH64_GUI_TRAJ_CNTL, 0x00000003 );
|
||||||
|
|
||||||
|
MACH64_WRITE( MACH64_PAT_REG0, 0x11111111 );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 1
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " AGP_BASE = 0x%08x\n", MACH64_READ( MACH64_AGP_BASE ) );
|
||||||
|
DRM_INFO( " AGP_CNTL = 0x%08x\n", MACH64_READ( MACH64_AGP_CNTL ) );
|
||||||
|
DRM_INFO( " ALPHA_TST_CNTL = 0x%08x\n", MACH64_READ( MACH64_ALPHA_TST_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " BM_COMMAND = 0x%08x\n", MACH64_READ( MACH64_BM_COMMAND ) );
|
||||||
|
DRM_INFO( "BM_FRAME_BUF_OFFSET = 0x%08x\n", MACH64_READ( MACH64_BM_FRAME_BUF_OFFSET ) );
|
||||||
|
DRM_INFO( " BM_GUI_TABLE = 0x%08x\n", MACH64_READ( MACH64_BM_GUI_TABLE ) );
|
||||||
|
DRM_INFO( " BM_STATUS = 0x%08x\n", MACH64_READ( MACH64_BM_STATUS ) );
|
||||||
|
DRM_INFO( " BM_SYSTEM_MEM_ADDR = 0x%08x\n", MACH64_READ( MACH64_BM_SYSTEM_MEM_ADDR ) );
|
||||||
|
DRM_INFO( " BM_SYSTEM_TABLE = 0x%08x\n", MACH64_READ( MACH64_BM_SYSTEM_TABLE ) );
|
||||||
|
DRM_INFO( " BUS_CNTL = 0x%08x\n", MACH64_READ( MACH64_BUS_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
/* DRM_INFO( " CLOCK_CNTL = 0x%08x\n", MACH64_READ( MACH64_CLOCK_CNTL ) ); */
|
||||||
|
DRM_INFO( " CLR_CMP_CLR = 0x%08x\n", MACH64_READ( MACH64_CLR_CMP_CLR ) );
|
||||||
|
DRM_INFO( " CLR_CMP_CNTL = 0x%08x\n", MACH64_READ( MACH64_CLR_CMP_CNTL ) );
|
||||||
|
/* DRM_INFO( " CLR_CMP_MSK = 0x%08x\n", MACH64_READ( MACH64_CLR_CMP_MSK ) ); */
|
||||||
|
DRM_INFO( " CONFIG_CHIP_ID = 0x%08x\n", MACH64_READ( MACH64_CONFIG_CHIP_ID ) );
|
||||||
|
DRM_INFO( " CONFIG_CNTL = 0x%08x\n", MACH64_READ( MACH64_CONFIG_CNTL ) );
|
||||||
|
DRM_INFO( " CONFIG_STAT0 = 0x%08x\n", MACH64_READ( MACH64_CONFIG_STAT0 ) );
|
||||||
|
DRM_INFO( " CONFIG_STAT1 = 0x%08x\n", MACH64_READ( MACH64_CONFIG_STAT1 ) );
|
||||||
|
DRM_INFO( " CONFIG_STAT2 = 0x%08x\n", MACH64_READ( MACH64_CONFIG_STAT2 ) );
|
||||||
|
DRM_INFO( " CRC_SIG = 0x%08x\n", MACH64_READ( MACH64_CRC_SIG ) );
|
||||||
|
DRM_INFO( " CUSTOM_MACRO_CNTL = 0x%08x\n", MACH64_READ( MACH64_CUSTOM_MACRO_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
/* DRM_INFO( " DAC_CNTL = 0x%08x\n", MACH64_READ( MACH64_DAC_CNTL ) ); */
|
||||||
|
/* DRM_INFO( " DAC_REGS = 0x%08x\n", MACH64_READ( MACH64_DAC_REGS ) ); */
|
||||||
|
DRM_INFO( " DP_BKGD_CLR = 0x%08x\n", MACH64_READ( MACH64_DP_BKGD_CLR ) );
|
||||||
|
DRM_INFO( " DP_FRGD_CLR = 0x%08x\n", MACH64_READ( MACH64_DP_FRGD_CLR ) );
|
||||||
|
DRM_INFO( " DP_MIX = 0x%08x\n", MACH64_READ( MACH64_DP_MIX ) );
|
||||||
|
DRM_INFO( " DP_PIX_WIDTH = 0x%08x\n", MACH64_READ( MACH64_DP_PIX_WIDTH ) );
|
||||||
|
DRM_INFO( " DP_SRC = 0x%08x\n", MACH64_READ( MACH64_DP_SRC ) );
|
||||||
|
DRM_INFO( " DP_WRITE_MASK = 0x%08x\n", MACH64_READ( MACH64_DP_WRITE_MASK ) );
|
||||||
|
DRM_INFO( " DSP_CONFIG = 0x%08x\n", MACH64_READ( MACH64_DSP_CONFIG ) );
|
||||||
|
DRM_INFO( " DSP_ON_OFF = 0x%08x\n", MACH64_READ( MACH64_DSP_ON_OFF ) );
|
||||||
|
DRM_INFO( " DST_CNTL = 0x%08x\n", MACH64_READ( MACH64_DST_CNTL ) );
|
||||||
|
DRM_INFO( " DST_OFF_PITCH = 0x%08x\n", MACH64_READ( MACH64_DST_OFF_PITCH ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
/* DRM_INFO( " EXT_DAC_REGS = 0x%08x\n", MACH64_READ( MACH64_EXT_DAC_REGS ) ); */
|
||||||
|
DRM_INFO( " EXT_MEM_CNTL = 0x%08x\n", MACH64_READ( MACH64_EXT_MEM_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " FIFO_STAT = 0x%08x\n", MACH64_READ( MACH64_FIFO_STAT ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " GEN_TEST_CNTL = 0x%08x\n", MACH64_READ( MACH64_GEN_TEST_CNTL ) );
|
||||||
|
/* DRM_INFO( " GP_IO = 0x%08x\n", MACH64_READ( MACH64_GP_IO ) ); */
|
||||||
|
DRM_INFO( " GUI_CMDFIFO_DATA = 0x%08x\n", MACH64_READ( MACH64_GUI_CMDFIFO_DATA ) );
|
||||||
|
DRM_INFO( " GUI_CMDFIFO_DEBUG = 0x%08x\n", MACH64_READ( MACH64_GUI_CMDFIFO_DEBUG ) );
|
||||||
|
DRM_INFO( " GUI_CNTL = 0x%08x\n", MACH64_READ( MACH64_GUI_CNTL ) );
|
||||||
|
DRM_INFO( " GUI_STAT = 0x%08x\n", MACH64_READ( MACH64_GUI_STAT ) );
|
||||||
|
DRM_INFO( " GUI_TRAJ_CNTL = 0x%08x\n", MACH64_READ( MACH64_GUI_TRAJ_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " HOST_CNTL = 0x%08x\n", MACH64_READ( MACH64_HOST_CNTL ) );
|
||||||
|
DRM_INFO( " HW_DEBUG = 0x%08x\n", MACH64_READ( MACH64_HW_DEBUG ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " MEM_ADDR_CONFIG = 0x%08x\n", MACH64_READ( MACH64_MEM_ADDR_CONFIG ) );
|
||||||
|
DRM_INFO( " MEM_BUF_CNTL = 0x%08x\n", MACH64_READ( MACH64_MEM_BUF_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " SCALE_3D_CNTL = 0x%08x\n", MACH64_READ( MACH64_SCALE_3D_CNTL ) );
|
||||||
|
DRM_INFO( " SCRATCH_REG0 = 0x%08x\n", MACH64_READ( MACH64_SCRATCH_REG0 ) );
|
||||||
|
DRM_INFO( " SCRATCH_REG1 = 0x%08x\n", MACH64_READ( MACH64_SCRATCH_REG1 ) );
|
||||||
|
DRM_INFO( " SETUP_CNTL = 0x%08x\n", MACH64_READ( MACH64_SETUP_CNTL ) );
|
||||||
|
DRM_INFO( " SRC_CNTL = 0x%08x\n", MACH64_READ( MACH64_SRC_CNTL ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " TEX_CNTL = 0x%08x\n", MACH64_READ( MACH64_TEX_CNTL ) );
|
||||||
|
DRM_INFO( " TEX_SIZE_PITCH = 0x%08x\n", MACH64_READ( MACH64_TEX_SIZE_PITCH ) );
|
||||||
|
DRM_INFO( " TIMER_CONFIG = 0x%08x\n", MACH64_READ( MACH64_TIMER_CONFIG ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( " Z_CNTL = 0x%08x\n", MACH64_READ( MACH64_Z_CNTL ) );
|
||||||
|
DRM_INFO( " Z_OFF_PITCH = 0x%08x\n", MACH64_READ( MACH64_Z_OFF_PITCH ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data[0] = 0x000000a0;
|
||||||
|
data[1] = 0x22222222;
|
||||||
|
data[2] = 0x000000a0;
|
||||||
|
data[3] = 0x22222222;
|
||||||
|
data[4] = 0x000000a0;
|
||||||
|
data[5] = 0x22222222;
|
||||||
|
data[6] = 0x0000006d;
|
||||||
|
data[7] = 0x00000000;
|
||||||
|
|
||||||
|
table[0] = MACH64_BM_ADDR + APERTURE_OFFSET;
|
||||||
|
table[1] = virt_to_phys(data);
|
||||||
|
table[2] = 8 * sizeof(u32) | 0xc0000000;
|
||||||
|
table[3] = 0x00000000;
|
||||||
|
|
||||||
|
DRM_INFO( "table[0] = 0x%08x\n", table[0] );
|
||||||
|
DRM_INFO( "table[1] = 0x%08x\n", table[1] );
|
||||||
|
DRM_INFO( "table[2] = 0x%08x\n", table[2] );
|
||||||
|
DRM_INFO( "table[3] = 0x%08x\n", table[3] );
|
||||||
|
|
||||||
|
for ( i = 0 ; i < 8 ; i++) {
|
||||||
|
DRM_INFO( " data[%d] = 0x%08x\n", i, data[i] );
|
||||||
|
}
|
||||||
|
|
||||||
|
mb();
|
||||||
|
|
||||||
|
DRM_INFO( "waiting for idle...\n" );
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
DRM_INFO( "waiting for idle... done.\n" );
|
||||||
|
|
||||||
|
DRM_INFO( "BUS_CNTL = 0x%08x\n", bus_cntl );
|
||||||
|
DRM_INFO( "SRC_CNTL = 0x%08x\n", src_cntl );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( "data = 0x%08x\n", virt_to_phys(data) );
|
||||||
|
DRM_INFO( "table = 0x%08x\n", virt_to_phys(table) );
|
||||||
|
|
||||||
|
DRM_INFO( "starting DMA transfer...\n" );
|
||||||
|
MACH64_READ( MACH64_BUS_CNTL );
|
||||||
|
MACH64_WRITE( MACH64_BUS_CNTL, bus_cntl );
|
||||||
|
|
||||||
|
MACH64_WRITE( MACH64_BM_GUI_TABLE_CMD, virt_to_phys(table) );
|
||||||
|
|
||||||
|
MACH64_READ( MACH64_SRC_CNTL );
|
||||||
|
MACH64_WRITE( MACH64_SRC_CNTL, 0x00000f00 );
|
||||||
|
|
||||||
|
DRM_INFO( "waiting for idle...\n" );
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
|
||||||
|
/* Kick off the transfer */
|
||||||
|
MACH64_WRITE( MACH64_DST_HEIGHT_WIDTH, 0 );
|
||||||
|
DRM_INFO( "starting DMA transfer... done.\n" );
|
||||||
|
|
||||||
|
|
||||||
|
for ( i = 0 ; i < 1000 ; i++ ) {
|
||||||
|
udelay( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
DRM_INFO( "waiting for idle 0...\n" );
|
||||||
|
mach64_do_wait_for_idle( dev_priv );
|
||||||
|
|
||||||
|
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( "BUS_CNTL = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BUS_CNTL ) );
|
||||||
|
DRM_INFO( "SRC_CNTL = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_SRC_CNTL ) );
|
||||||
|
DRM_INFO( "PAT_REG0 = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_PAT_REG0 ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( "GUI_CMDFIFO_DEBUG = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_GUI_CMDFIFO_DEBUG ) );
|
||||||
|
DRM_INFO( "GUI_CMDFIFO_DATA = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_GUI_CMDFIFO_DATA ) );
|
||||||
|
DRM_INFO( "FIFO_STAT = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_FIFO_STAT ) );
|
||||||
|
DRM_INFO( "\n" );
|
||||||
|
DRM_INFO( "BM_FRAME_BUF_OFFSET = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_FRAME_BUF_OFFSET ) );
|
||||||
|
DRM_INFO( "BM_SYSTEM_MEM_ADDR = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_SYSTEM_MEM_ADDR ) );
|
||||||
|
DRM_INFO( "BM_COMMAND = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_COMMAND ) );
|
||||||
|
DRM_INFO( "BM_STATUS = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_STATUS ) );
|
||||||
|
DRM_INFO( "BM_SYSTEM_TABLE = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_SYSTEM_TABLE ) );
|
||||||
|
DRM_INFO( "BM_HOSTDATA = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_HOSTDATA ) );
|
||||||
|
DRM_INFO( "BM_ADDR/BM_DATA = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_ADDR ) );
|
||||||
|
DRM_INFO( "BM_GUI_TABLE = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_GUI_TABLE ) );
|
||||||
|
DRM_INFO( "BM_GUI_TABLE_CMD = 0x%08x\n",
|
||||||
|
MACH64_READ( MACH64_BM_GUI_TABLE_CMD ) );
|
||||||
|
|
||||||
|
DRM_INFO( "freeing memory.\n" );
|
||||||
|
mach64_free_page( (unsigned long)data );
|
||||||
|
mach64_free_page( (unsigned long)table );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -161,6 +449,8 @@ static int mach64_do_dma_cleanup( drm_device_t *dev )
|
||||||
if ( dev->dev_private ) {
|
if ( dev->dev_private ) {
|
||||||
drm_mach64_private_t *dev_priv = dev->dev_private;
|
drm_mach64_private_t *dev_priv = dev->dev_private;
|
||||||
|
|
||||||
|
DO_IOREMAPFREE( dev_priv->buffers );
|
||||||
|
|
||||||
drm_free( dev_priv, sizeof(drm_mach64_private_t),
|
drm_free( dev_priv, sizeof(drm_mach64_private_t),
|
||||||
DRM_MEM_DRIVER );
|
DRM_MEM_DRIVER );
|
||||||
dev->dev_private = NULL;
|
dev->dev_private = NULL;
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,7 @@ typedef struct drm_mach64_init {
|
||||||
|
|
||||||
unsigned int fb_offset;
|
unsigned int fb_offset;
|
||||||
unsigned int mmio_offset;
|
unsigned int mmio_offset;
|
||||||
|
unsigned int buffers_offset;
|
||||||
} drm_mach64_init_t;
|
} drm_mach64_init_t;
|
||||||
|
|
||||||
typedef struct drm_mach64_clear {
|
typedef struct drm_mach64_clear {
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
|
|
||||||
#define DRIVER_NAME "mach64"
|
#define DRIVER_NAME "mach64"
|
||||||
#define DRIVER_DESC "DRM module for the ATI Rage Pro"
|
#define DRIVER_DESC "DRM module for the ATI Rage Pro"
|
||||||
#define DRIVER_DATE "20001218"
|
#define DRIVER_DATE "20010107"
|
||||||
|
|
||||||
#define DRIVER_MAJOR 1
|
#define DRIVER_MAJOR 1
|
||||||
#define DRIVER_MINOR 0
|
#define DRIVER_MINOR 0
|
||||||
|
|
@ -52,8 +52,8 @@ static drm_ioctl_desc_t mach64_ioctls[] = {
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { drm_block, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_BLOCK)] = { drm_block, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = { drm_unblock, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_UNBLOCK)] = { drm_unblock, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_AUTH_MAGIC)] = { drm_authmagic, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = { drm_addmap, 1, 1 },
|
|
||||||
|
|
||||||
|
[DRM_IOCTL_NR(DRM_IOCTL_ADD_MAP)] = { drm_addmap, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = { mach64_addbufs, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_ADD_BUFS)] = { mach64_addbufs, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = { drm_markbufs, 1, 1 },
|
[DRM_IOCTL_NR(DRM_IOCTL_MARK_BUFS)] = { drm_markbufs, 1, 1 },
|
||||||
[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { drm_infobufs, 1, 0 },
|
[DRM_IOCTL_NR(DRM_IOCTL_INFO_BUFS)] = { drm_infobufs, 1, 0 },
|
||||||
|
|
@ -100,6 +100,11 @@ static drm_ioctl_desc_t mach64_ioctls[] = {
|
||||||
|
|
||||||
#define DRIVER_IOCTL_COUNT DRM_ARRAY_SIZE( mach64_ioctls )
|
#define DRIVER_IOCTL_COUNT DRM_ARRAY_SIZE( mach64_ioctls )
|
||||||
|
|
||||||
|
#define HAVE_AGP 1
|
||||||
|
#define MUST_HAVE_AGP 1
|
||||||
|
|
||||||
|
#define HAVE_MTRR 1
|
||||||
|
|
||||||
#define HAVE_CTX_BITMAP 1
|
#define HAVE_CTX_BITMAP 1
|
||||||
|
|
||||||
#define HAVE_DMA 1
|
#define HAVE_DMA 1
|
||||||
|
|
|
||||||
|
|
@ -45,11 +45,10 @@ typedef struct drm_mach64_private {
|
||||||
|
|
||||||
int usec_timeout;
|
int usec_timeout;
|
||||||
|
|
||||||
u32 *buffers;
|
|
||||||
|
|
||||||
drm_map_t *sarea;
|
drm_map_t *sarea;
|
||||||
drm_map_t *fb;
|
drm_map_t *fb;
|
||||||
drm_map_t *mmio;
|
drm_map_t *mmio;
|
||||||
|
drm_map_t *buffers;
|
||||||
} drm_mach64_private_t;
|
} drm_mach64_private_t;
|
||||||
|
|
||||||
typedef struct drm_mach64_buf_priv {
|
typedef struct drm_mach64_buf_priv {
|
||||||
|
|
@ -102,6 +101,8 @@ extern int mach64_dma_idle( struct inode *inode, struct file *filp,
|
||||||
|
|
||||||
extern int mach64_do_wait_for_fifo( drm_mach64_private_t *dev_priv,
|
extern int mach64_do_wait_for_fifo( drm_mach64_private_t *dev_priv,
|
||||||
int entries );
|
int entries );
|
||||||
|
extern int mach64_do_wait_for_idle( drm_mach64_private_t *dev_priv );
|
||||||
|
extern int mach64_do_engine_reset( drm_mach64_private_t *dev_priv );
|
||||||
|
|
||||||
/* r128_state.c */
|
/* r128_state.c */
|
||||||
extern int mach64_dma_clear( struct inode *inode, struct file *filp,
|
extern int mach64_dma_clear( struct inode *inode, struct file *filp,
|
||||||
|
|
@ -114,21 +115,55 @@ extern int mach64_dma_swap( struct inode *inode, struct file *filp,
|
||||||
* Registers
|
* Registers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define MACH64_AGP_BASE 0x0148
|
||||||
|
#define MACH64_AGP_CNTL 0x014c
|
||||||
#define MACH64_ALPHA_TST_CNTL 0x0550
|
#define MACH64_ALPHA_TST_CNTL 0x0550
|
||||||
|
|
||||||
|
|
||||||
|
#define MACH64_DSP_CONFIG 0x0420
|
||||||
|
#define MACH64_DSP_ON_OFF 0x0424
|
||||||
|
#define MACH64_EXT_MEM_CNTL 0x04ac
|
||||||
|
#define MACH64_GEN_TEST_CNTL 0x04d0
|
||||||
|
#define MACH64_HW_DEBUG 0x047c
|
||||||
|
#define MACH64_MEM_ADDR_CONFIG 0x0434
|
||||||
|
#define MACH64_MEM_BUF_CNTL 0x042c
|
||||||
|
#define MACH64_MEM_CNTL 0x04b0
|
||||||
|
|
||||||
|
|
||||||
|
#define MACH64_BM_ADDR 0x0648
|
||||||
|
#define MACH64_BM_COMMAND 0x0188
|
||||||
|
#define MACH64_BM_DATA 0x0648
|
||||||
|
#define MACH64_BM_FRAME_BUF_OFFSET 0x0180
|
||||||
|
#define MACH64_BM_GUI_TABLE 0x01b8
|
||||||
|
#define MACH64_BM_GUI_TABLE_CMD 0x064c
|
||||||
|
# define MACH64_CIRCULAR_BUF_SIZE_16KB (0 << 0)
|
||||||
|
# define MACH64_CIRCULAR_BUF_SIZE_32KB (1 << 0)
|
||||||
|
# define MACH64_CIRCULAR_BUF_SIZE_64KB (2 << 0)
|
||||||
|
# define MACH64_CIRCULAR_BUF_SIZE_128KB (3 << 0)
|
||||||
|
# define MACH64_LAST_DESCRIPTOR (1 << 31)
|
||||||
|
#define MACH64_BM_HOSTDATA 0x0644
|
||||||
|
#define MACH64_BM_STATUS 0x018c
|
||||||
|
#define MACH64_BM_SYSTEM_MEM_ADDR 0x0184
|
||||||
|
#define MACH64_BM_SYSTEM_TABLE 0x01bc
|
||||||
#define MACH64_BUS_CNTL 0x04a0
|
#define MACH64_BUS_CNTL 0x04a0
|
||||||
# define MACH64_BUS_MSTR_RESET (1 << 1)
|
# define MACH64_BUS_MSTR_RESET (1 << 1)
|
||||||
# define MACH64_BUS_FLUSH_BUF (1 << 2)
|
# define MACH64_BUS_FLUSH_BUF (1 << 2)
|
||||||
# define MACH64_BUS_MASTER_DIS (1 << 6)
|
# define MACH64_BUS_MASTER_DIS (1 << 6)
|
||||||
# define MACH64_BUS_EXT_REG_EN (1 << 27)
|
# define MACH64_BUS_EXT_REG_EN (1 << 27)
|
||||||
|
|
||||||
#define MACH64_COMPOSITE_SHADOW_ID 0x0798
|
|
||||||
#define MACH64_CONTEXT_LOAD_CNTL 0x072c
|
|
||||||
#define MACH64_CONTEXT_MASK 0x0720
|
|
||||||
|
|
||||||
#define MACH64_CLR_CMP_CLR 0x0700
|
#define MACH64_CLR_CMP_CLR 0x0700
|
||||||
#define MACH64_CLR_CMP_CNTL 0x0708
|
#define MACH64_CLR_CMP_CNTL 0x0708
|
||||||
#define MACH64_CLR_CMP_MASK 0x0704
|
#define MACH64_CLR_CMP_MASK 0x0704
|
||||||
|
#define MACH64_CONFIG_CHIP_ID 0x04e0
|
||||||
|
#define MACH64_CONFIG_CNTL 0x04dc
|
||||||
|
#define MACH64_CONFIG_STAT0 0x04e4
|
||||||
|
#define MACH64_CONFIG_STAT1 0x0494
|
||||||
|
#define MACH64_CONFIG_STAT2 0x0498
|
||||||
|
#define MACH64_CONTEXT_LOAD_CNTL 0x072c
|
||||||
|
#define MACH64_CONTEXT_MASK 0x0720
|
||||||
|
#define MACH64_COMPOSITE_SHADOW_ID 0x0798
|
||||||
|
#define MACH64_CRC_SIG 0x04e8
|
||||||
|
#define MACH64_CUSTOM_MACRO_CNTL 0x04d4
|
||||||
|
|
||||||
#define MACH64_DP_BKGD_CLR 0x06c0
|
#define MACH64_DP_BKGD_CLR 0x06c0
|
||||||
#define MACH64_DP_FOG_CLR 0x06c4
|
#define MACH64_DP_FOG_CLR 0x06c4
|
||||||
|
|
@ -220,23 +255,34 @@ extern int mach64_dma_swap( struct inode *inode, struct file *filp,
|
||||||
# define MACH64_FIFO_SLOT_MASK 0x0000ffff
|
# define MACH64_FIFO_SLOT_MASK 0x0000ffff
|
||||||
# define MACH64_FIFO_ERR (1 << 31)
|
# define MACH64_FIFO_ERR (1 << 31)
|
||||||
|
|
||||||
|
#define MACH64_GEN_TEST_CNTL 0x04d0
|
||||||
|
# define MACH64_GUI_ENGINE_ENABLE (1 << 8)
|
||||||
#define MACH64_GUI_CMDFIFO_DEBUG 0x0170
|
#define MACH64_GUI_CMDFIFO_DEBUG 0x0170
|
||||||
#define MACH64_GUI_CMDFIFO_DATA 0x0174
|
#define MACH64_GUI_CMDFIFO_DATA 0x0174
|
||||||
#define MACH64_GUI_CNTL 0x0178
|
#define MACH64_GUI_CNTL 0x0178
|
||||||
#define MACH64_GUI_STAT 0x0738
|
#define MACH64_GUI_STAT 0x0738
|
||||||
# define MACH64_GUI_ACTIVE (1 << 0)
|
# define MACH64_GUI_ACTIVE (1 << 0)
|
||||||
#define MACH64_GUI_TRAJ_CNTL 0x0730
|
#define MACH64_GUI_TRAJ_CNTL 0x0730
|
||||||
|
|
||||||
#define MACH64_HOST_CNTL 0x0640
|
#define MACH64_HOST_CNTL 0x0640
|
||||||
#define MACH64_HOST_DATA0 0x0600
|
#define MACH64_HOST_DATA0 0x0600
|
||||||
|
|
||||||
#define MACH64_ONE_OVER_AREA 0x029c
|
#define MACH64_ONE_OVER_AREA 0x029c
|
||||||
#define MACH64_ONE_OVER_AREA_UC 0x0300
|
#define MACH64_ONE_OVER_AREA_UC 0x0300
|
||||||
|
|
||||||
|
#define MACH64_PAT_REG0 0x0680
|
||||||
|
|
||||||
#define MACH64_SCALE_3D_CNTL 0x05fc
|
#define MACH64_SCALE_3D_CNTL 0x05fc
|
||||||
#define MACH64_SCRATCH_REG0 0x0480
|
#define MACH64_SCRATCH_REG0 0x0480
|
||||||
#define MACH64_SCRATCH_REG1 0x0484
|
#define MACH64_SCRATCH_REG1 0x0484
|
||||||
#define MACH64_SETUP_CNTL 0x0304
|
#define MACH64_SETUP_CNTL 0x0304
|
||||||
#define MACH64_SRC_CNTL 0x05b4
|
#define MACH64_SRC_CNTL 0x05b4
|
||||||
|
# define MACH64_SRC_BM_ENABLE (1 << 8)
|
||||||
|
# define MACH64_SRC_BM_SYNC (1 << 9)
|
||||||
|
# define MACH64_SRC_BM_OP_FRAME_TO_SYSTEM (0 << 10)
|
||||||
|
# define MACH64_SRC_BM_OP_SYSTEM_TO_FRAME (1 << 10)
|
||||||
|
# define MACH64_SRC_BM_OP_REG_TO_SYSTEM (2 << 10)
|
||||||
|
# define MACH64_SRC_BM_OP_SYSTEM_TO_REG (3 << 10)
|
||||||
#define MACH64_SRC_HEIGHT1 0x0594
|
#define MACH64_SRC_HEIGHT1 0x0594
|
||||||
#define MACH64_SRC_HEIGHT2 0x05ac
|
#define MACH64_SRC_HEIGHT2 0x05ac
|
||||||
#define MACH64_SRC_HEIGHT1_WIDTH1 0x0598
|
#define MACH64_SRC_HEIGHT1_WIDTH1 0x0598
|
||||||
|
|
@ -245,6 +291,10 @@ extern int mach64_dma_swap( struct inode *inode, struct file *filp,
|
||||||
#define MACH64_SRC_WIDTH1 0x0590
|
#define MACH64_SRC_WIDTH1 0x0590
|
||||||
#define MACH64_SRC_Y_X 0x058c
|
#define MACH64_SRC_Y_X 0x058c
|
||||||
|
|
||||||
|
#define MACH64_TEX_CNTL 0x0774
|
||||||
|
#define MACH64_TEX_SIZE_PITCH 0x0770
|
||||||
|
#define MACH64_TIMER_CONFIG 0x0428
|
||||||
|
|
||||||
#define MACH64_VERTEX_1_ARGB 0x0254
|
#define MACH64_VERTEX_1_ARGB 0x0254
|
||||||
#define MACH64_VERTEX_1_S 0x0240
|
#define MACH64_VERTEX_1_S 0x0240
|
||||||
#define MACH64_VERTEX_1_SECONDARY_S 0x0328
|
#define MACH64_VERTEX_1_SECONDARY_S 0x0328
|
||||||
|
|
@ -300,6 +350,35 @@ extern int mach64_dma_swap( struct inode *inode, struct file *filp,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#define DWMREG0 0x0400
|
||||||
|
#define DWMREG0_END 0x07ff
|
||||||
|
#define DWMREG1 0x0000
|
||||||
|
#define DWMREG1_END 0x03ff
|
||||||
|
|
||||||
|
#define ISREG0(r) (((r) >= DWMREG0) && ((r) <= DWMREG0_END))
|
||||||
|
#define DMAREG0(r) (((r) - DWMREG0) >> 2)
|
||||||
|
#define DMAREG1(r) ((((r) - DWMREG1) >> 2 ) | 0x0100)
|
||||||
|
#define DMAREG(r) (ISREG0(r) ? DMAREG0(r) : DMAREG1(r))
|
||||||
|
|
||||||
|
#define MMREG0 0x0000
|
||||||
|
#define MMREG0_END 0x00ff
|
||||||
|
|
||||||
|
#define ISMMREG0(r) (((r) >= MMREG0) && ((r) <= MMREG0_END))
|
||||||
|
#define MMSELECT0(r) (((r) << 2) + DWMREG0)
|
||||||
|
#define MMSELECT1(r) (((((r) & 0xff) << 2) + DWMREG1))
|
||||||
|
#define MMSELECT(r) (ISMMREG0(r) ? MMSELECT0(r) : MMSELECT1(r))
|
||||||
|
|
||||||
|
|
||||||
|
#define DMA_FRAME_BUF_OFFSET 0
|
||||||
|
#define DMA_SYS_MEM_ADDR 1
|
||||||
|
#define DMA_COMMAND 2
|
||||||
|
#define DMA_RESERVED 3
|
||||||
|
|
||||||
|
#define DMA_CHUNKSIZE 0x1000
|
||||||
|
#define APERTURE_OFFSET 0x7ff800
|
||||||
|
|
||||||
|
|
||||||
#define MACH64_VERBOSE 0
|
#define MACH64_VERBOSE 0
|
||||||
|
|
||||||
#define DMALOCALS
|
#define DMALOCALS
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,7 @@ static void mach64_dma_dispatch_clear( drm_device_t *dev,
|
||||||
DMALOCALS;
|
DMALOCALS;
|
||||||
DRM_DEBUG( "%s\n", __FUNCTION__ );
|
DRM_DEBUG( "%s\n", __FUNCTION__ );
|
||||||
|
|
||||||
|
#if 0
|
||||||
switch ( dev_priv->fb_bpp ) {
|
switch ( dev_priv->fb_bpp ) {
|
||||||
case 16:
|
case 16:
|
||||||
fb_bpp = MACH64_DATATYPE_RGB565;
|
fb_bpp = MACH64_DATATYPE_RGB565;
|
||||||
|
|
@ -196,6 +197,10 @@ static void mach64_dma_dispatch_clear( drm_device_t *dev,
|
||||||
DMAADVANCE( dev_priv );
|
DMAADVANCE( dev_priv );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void mach64_dma_dispatch_swap( drm_device_t *dev )
|
static void mach64_dma_dispatch_swap( drm_device_t *dev )
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue