/* radeon_cp.c -- CP support for Radeon -*- linux-c -*- */
/*
* Copyright 2000 Precision Insight, Inc., Cedar Park, Texas.
* Copyright 2000 VA Linux Systems, Inc., Fremont, California.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*
* Authors:
* Kevin E. Martin <martin@valinux.com>
* Gareth Hughes <gareth@valinux.com>
*/
#include "drmP.h"
#include "drm.h"
#include "radeon_drm.h"
#include "radeon_drv.h"
#include "r300_reg.h"
#define RADEON_FIFO_DEBUG 0
static int radeon_do_cleanup_cp(drm_device_t * dev);
/* CP microcode (from ATI) */
static const u32 R200_cp_microcode[][2] = {
{0x21007000, 0000000000},
{0x20007000, 0000000000},
{0x000000ab, 0x00000004},
{0x000000af, 0x00000004},
{0x66544a49, 0000000000},
{0x49494174, 0000000000},
{0x54517d83, 0000000000},
{0x498d8b64, 0000000000},
{0x49494949, 0000000000},
{0x49da493c, 0000000000},
{0x49989898, 0000000000},
{0xd34949d5, 0000000000},
{0x9dc90e11, 0000000000},
{0xce9b9b9b, 0000000000},
{0x000f0000, 0x00000016},
{0x352e232c, 0000000000},
{0x00000013, 0x00000004},
{0x000f0000, 0x00000016},
{0x352e272c, 0000000000},
{0x000f0001, 0x00000016},
{0x3239362f, 0000000000},
{0x000077ef, 0x00000002},
{0x00061000, 0x00000002},
{0x00000020, 0x0000001a},
{0x00004000, 0x0000001e},
{0x00061000, 0x00000002},
{0x00000020, 0x0000001a},
{0x00004000, 0x0000001e},
{0x00061000, 0x00000002},
{0x00000020, 0x0000001a},
{0x00004000, 0x0000001e},
{0x00000016, 0x00000004},
{0x0003802a, 0x00000002},
{0x040067e0, 0x00000002},
{0x00000016, 0x00000004},
{0x000077e0, 0x00000002},
{0x00065000, 0x00000002},
{0x000037e1, 0x00000002},
{0x040067e1, 0x00000006},
{0x000077e0, 0x00000002},
{0x000077e1, 0x00000002},
{0x000077e1, 0x00000006},
{0xffffffff, 0000000000},
{0x10000000, 0000000000},
{0x0003802a, 0x00000002},
{0x040067e0, 0x00000006},
{0x00007675, 0x00000002},
{0x00007676, 0x00000002},
{0x00007677, 0x00000002},
{0x00007678, 0x00000006},
{0x0003802b, 0x00000002},
{0x04002676, 0x00000002},
{0x00007677, 0x00000002},
{0x00007678, 0x00000006},
{0x0000002e, 0x00000018},
{0x0000002e, 0x00000018},
{0000000000, 0x00000006},
{0x0000002f, 0x00000018},
{0x0000002f, 0x00000018},
{0000000000, 0x00000006},
{0x01605000, 0x00000002},
{0x00065000, 0x00000002},
{0x00098000, 0x00000002},
{0x00061000, 0x00000002},
{0x64c0603d, 0x00000004},
{0x00080000, 0x00000016},
{0000000000, 0000000000},
{0x0400251d, 0x00000002},
{0x00007580, 0x00000002},
{0x00067581, 0x00000002},
{0x04002580, 0x00000002},
{0x00067581, 0x00000002},
{0x00000046, 0x00000004},
{0x00005000, 0000000000},
{0x00061000, 0x00000002},
{0x0000750e, 0x00000002},
{0x00019000, 0x00000002},
{0x00011055, 0x00000014},
{0x00000055, 0x00000012},
{0x0400250f, 0x00000002},
{0x0000504a, 0x00000004},
{0x00007565, 0x00000002},
{0x00007566, 0x00000002},
{0x00000051, 0x00000004},
{0x01e655b4, 0x00000002},
{0x4401b0dc, 0x00000002},
{0x01c110dc, 0x00000002},
{0x2666705d, 0x00000018},
{0x040c2565, 0x00000002},
{0x0000005d, 0x00000018},
{0x04002564, 0x00000002},
{0x00007566, 0x00000002},
{0x00000054, 0x00000004},
{0x00401060, 0x00000008},
{0x00101000, 0x00000002},
{0x000d80ff, 0x00000002},
{0x00800063, 0x00000008},
{0x000f9000, 0x00000002},
{0x000e00ff, 0x00000002},
{0000000000, 0x00000006},
{0x00000080, 0x00000018},
{0x00000054, 0x00000004},
{0x00007576, 0x00000002},
{0x00065000, 0x00000002},
{0x00009000, 0x00000002},
{0x00041000, 0x00000002},
{0x0c00350e, 0x00000002},
{0x00049000, 0x00000002},
{0x00051000, 0x00000002},
{0x01e785f8, 0x00000002},
{0x00200000, 0x00000002},
{0x00600073, 0x0000000c},
{0x00007563, 0x00000002},
{0x006075f0, 0x00000021},
{0x20007068, 0x00000004},
{0x00005068, 0x00000004},
{0x00007576, 0x00000002},
{0x00007577, 0x00000002},
{0x0000750e, 0x00000002},
{0x0000750f, 0x00000002},
{0x00a05000, 0x00000002},
{0x00600076, 0x0000000c},
{0x006075f0, 0x00000021},
{0x000075f8, 0x00000002},
{0x00000076, 0x00000004},
{0x000a750e, 0x00000002},
{0x0020750f, 0x00000002},
{0x00600079, 0x00000004},
{0x00007570, 0x00000002},
{0x00007571, 0x00000002},
{0x00007572, 0x00000006},
{0x00005000, 0x00000002},
{0x00a05000, 0x00000002},
{0x00007568, 0x00000002},
{0x00061000, 0x00000002},
{0x00000084, 0x0000000c},
{0x00058000, 0x00000002},
{0x0c607562, 0x00000002},
{0x00000086, 0x00000004},
{0x00600085, 0x00000004},
{0x400070dd, 0000000000},
{0x000380dd, 0x00000002},
{0x00000093, 0x0000001c},
{0x00065095, 0x00000018},
{0x040025bb, 0x00000002},
{0x00061096, 0x00000018},
{0x040075bc, 0000000000},
{0x000075bb, 0x00000002},
{0x000075bc, 0000000000},
{0x00090000, 0x00000006},
{0x00090000, 0x00000002},
{0x000d8002, 0x00000006},
{0x00005000, 0x00000002},
{0x00007821, 0x00000002},
{0x00007800, 0000000000},
{0x00007821, 0x00000002},
{0x00007800, 0000000000},
{0x01665000, 0x00000002},
{0x000a0000, 0x00000002},
{0x000671cc, 0x00000002},
{0x0286f1cd, 0x00000002},
{0x000000a3, 0x00000010},
{0x21007000, 0000000000},
{0x000000aa, 0x0000001c},
{0x00065000, 0x00000002},
{0x000a0000, 0x00000002},
{0x00061000, 0x00000002},
{0x000b0000, 0x00000002},
{0x38067000, 0x00000002},
{0x000a00a6, 0x00000004},
{0x20007000, 0000000000},
{0x01200000, 0x00000002},
{0x20077000, 0x00000002},
{0x01200000, 0x00000002},
{0x20007000, 0000000000},
{0x00061000, 0x00000002},
{0x0120751b, 0x00000002},
{0x8040750a, 0x00000002},
{0x8040750b, 0x00000002},
{0x00110000, 0x00000002},
{0x000380dd, 0x00000002},
{0x000000bd, 0x0000001c},
{0x00061096, 0x00000018},
{0x844075bd, 0x00000002},
{0x00061095, 0x00000018},
{0x840075bb, 0x00000002},
{0x00061096, 0x00000018},
{0x844075bc, 0x00000002},
{0x000000c0, 0x00000004},
{0x804075bd, 0x00000002},
{0x800075bb, 0x00000002},
{0x804075bc, 0x00000002},
{0x00108000, 0x00000002},
{0x01400000, 0x00000002},
{0x006000c4, 0x0000000c},
{0x20c07000, 0x00000020},
{0x000000c6, 0x00000012},
{0x00800000, 0x00000006},
{0x0080751d, 0x00000006},
{0x000025bb, 0x00000002},
{0x000040c0, 0x00000004},
{0x0000775c, 0x00000002},
{0x00a05000, 0x00000002},
{0x00661000, 0x00000002},
{0x0460275d, 0x00000020},
{0x00004000, 0000000000},
{0x00007999, 0x00000002},
{0x00a05000, 0x00000002},
{0x00661000, 0x00000002},
{0x0460299b, 0x00000020},
{0x00004000, 0000000000},
{0x01e00830, 0x00000002},
{0x21007000, 0000000000},
{0x00005000, 0x00000002},
{0x00038042, 0x00000002},
{0x040025e0, 0x00000002},
{0x000075e1, 0000000000},
{0x00000001, 0000000000},
{0x000380d9, 0x00000002},
{0x04007394, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
{0000000000, 0000000000},
};
static const u32 radeon_cp_microcode[][2] = {
{0x21007000, 0000000000},
{0x20007000, 0000000000},
{0x000000b4, 0x00000004},
{0x000000b8, 0x00000004},
{0x6f5b4d4c, 0000000000},
{0x4c4c427f, 0000000000},
{0x5b568a92, 0000000000},
{0x4ca09c6d, 0000000000},
{0xad4c4c4c, 0000000000},
{0x4ce1af3d, 0000000000},
{0xd8afafaf, 0000000000},
{0xd64c4cdc, 0000000000},
{0x4cd10d10, 0000000000},
{0x000f0000, 0x00000016},
{0x362f242d, 0000000000},
{0x00000012, 0x00000004},
{0x000f0000, 0x00000016},
{0x362f282d, 0000000000},
{0x000380e7, 0x00000002},
{0x04002c97, 0x00000002},
{0x000f0001, 0x00000016},
{0x333a3730, 0000000000},
{0x000077ef, 0x00000002},
{0x00061000, 0x00000002},
{0x00000021, 0x0000001a},
{0x00004000, 0x0000001e},
{0x00061000, 0x00000002},
{0x00000021, 0x0000001a},
{0x00004000, 0x0000001e},
{0x00061000, 0x00000002},
{0x00000021, 0x0000001a},
{0x00004000, 0x0000001e},
{0x00000017, 0x00000004},
{0x0003802b, 0x00000002},
{0x040067e0, 0x00000002},
{0x00000017, 0x00000004},
{0x000077e0, 0x00000002},
{0x00065000, 0x00000002},
{0x000037e1, 0x00000002},
{0x040067e1, 0x00000006},
{0x000077e0, 0x00000002},
{0x000077e1, 0x00000002},
{0x000077e1, 0x00000006},
{0xffffffff, 0000000000},
{0x10000000, 0000000000},
{0x0003802b, 0x00000002},
{0x040067e0, 0x00000006},
{0x00007675, 0x00000002},
{0x00007676, 0x00000002},
{0x00007677, 0x00000002},
{0x00007678, 0x00000006},
{0x0003802c, 0x00000002},
{0x04002676, 0x00000002},
{0x00007677, 0x00000002},
{0x00007678, 0x00000006},
{0x0000002f, 0x00000018},
{0x0000002f, 0x00000018},
{0000000000, 0x00000006},
{0x00000030, 0x00000018},
{0x00000030, 0x00000018},
{0000000000, 0x00000006},
{0x01605000, 0x00000002},
{0x00065000, 0x00000002},
{0x00098000, 0x00000002},
{0x00061000, 0x00000002},
{0x64c0603e, 0x00000004},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00080000, 0x00000016},
{0000000000, 0000000000},
{0x0400251d, 0x00000002},
{0x00007580, 0x00000002},
{0x00067581, 0x00000002},
{0x04002580, 0x00000002},
{0x00067581, 0x00000002},
{0x00000049, 0x00000004},
{0x00005000, 0000000000},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00061000, 0x00000002},
{0x0000750e, 0x00000002},
{0x00019000, 0x00000002},
{0x00011055, 0x00000014},
{0x00000055, 0x00000012},
{0x0400250f, 0x00000002},
{0x0000504f, 0x00000004},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00007565, 0x00000002},
{0x00007566, 0x00000002},
{0x00000058, 0x00000004},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x01e655b4, 0x00000002},
{0x4401b0e4, 0x00000002},
{0x01c110e4, 0x00000002},
{0x26667066, 0x00000018},
{0x040c2565, 0x00000002},
{0x00000066, 0x00000018},
{0x04002564, 0x00000002},
{0x00007566, 0x00000002},
{0x0000005d, 0x00000004},
{0x00401069, 0x00000008},
{0x00101000, 0x00000002},
{0x000d80ff, 0x00000002},
{0x0080006c, 0x00000008},
{0x000f9000, 0x00000002},
{0x000e00ff, 0x00000002},
{0000000000, 0x00000006},
{0x0000008f, 0x00000018},
{0x0000005b, 0x00000004},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00007576, 0x00000002},
{0x00065000, 0x00000002},
{0x00009000, 0x00000002},
{0x00041000, 0x00000002},
{0x0c00350e, 0x00000002},
{0x00049000, 0x00000002},
{0x00051000, 0x00000002},
{0x01e785f8, 0x00000002},
{0x00200000, 0x00000002},
{0x0060007e, 0x0000000c},
{0x00007563, 0x00000002},
{0x006075f0, 0x00000021},
{0x20007073, 0x00000004},
{0x00005073, 0x00000004},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00007576, 0x00000002},
{0x00007577, 0x00000002},
{0x0000750e, 0x00000002},
{0x0000750f, 0x00000002},
{0x00a05000, 0x00000002},
{0x00600083, 0x0000000c},
{0x006075f0, 0x00000021},
{0x000075f8, 0x00000002},
{0x00000083, 0x00000004},
{0x000a750e, 0x00000002},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x0020750f, 0x00000002},
{0x00600086, 0x00000004},
{0x00007570, 0x00000002},
{0x00007571, 0x00000002},
{0x00007572, 0x00000006},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00005000, 0x00000002},
{0x00a05000, 0x00000002},
{0x00007568, 0x00000002},
{0x00061000, 0x00000002},
{0x00000095, 0x0000000c},
{0x00058000, 0x00000002},
{0x0c607562, 0x00000002},
{0x00000097, 0x00000004},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x00600096, 0x00000004},
{0x400070e5, 0000000000},
{0x000380e6, 0x00000002},
{0x040025c5, 0x00000002},
{0x000380e5, 0x00000002},
{0x000000a8, 0x0000001c},
{0x000650aa, 0x00000018},
{0x040025bb, 0x00000002},
{0x000610ab, 0x00000018},
{0x040075bc, 0000000000},
{0x000075bb, 0x00000002},
{0x000075bc, 0000000000},
{0x00090000, 0x00000006},
{0x00090000, 0x00000002},
{0x000d8002, 0x00000006},
{0x00007832, 0x00000002},
{0x00005000, 0x00000002},
{0x000380e7, 0x00000002},
{0x04002c97, 0x00000002},
{0x00007820, 0x00000002},
{0x00007821, 0x00000002},
{0x00007800, 0000000000},
{0x01200000, 0x00000002},
{0x20077000, 0x00000002},
{0x01200000, 0x00000002},
{0x20007000, 0x00000002},
{0x00061000, 0x00000002},
{0x0120751b, 0x00000002},
{0x8040750a, 0x00000002},
{0x8040750b, 0x00000002},
{0x00110000, 0x00000002},
|