added NV40 arch specific engine init stuff (not finished, not working yet).

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10593 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Rudolf Cornelissen 2005-01-06 16:17:11 +00:00
parent 73bcca6b32
commit cc3ced500f

View File

@ -322,8 +322,62 @@ status_t nv_acc_init()
}
/*** PGRAPH ***/
if (si->ps.card_arch != NV04A)
switch (si->ps.card_arch)
{
case NV40A:
/* set resetstate for most function blocks */
ACCW(DEBUG0, 0x0003ffff);//?
/* init some function blocks */
ACCW(DEBUG1, 0x401287c0);
ACCW(DEBUG2, 0x24f82ad9);//?
ACCW(DEBUG3, 0x60de8051);
/* end resetstate for the function blocks */
ACCW(DEBUG0, 0x00000000);//?
/* disable specific functions, but enable SETUP_SPARE2 register */
ACCW(NV10_DEBUG4, 0x00008000);
/* set limit_viol_pix_adress(?): more likely something unknown.. */
ACCW(NV4X_WHAT2, 0x00be3c5f);
/* unknown.. */
switch (si->ps.card_type)
{
case NV40:
ACCW(NV40_WHAT0, 0x83280fff);
ACCW(NV40_WHAT1, 0x000000a0);
ACCW(NV40_WHAT2, 0x0078e366);
ACCW(NV40_WHAT3, 0x0000014c);
break;
case NV41:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
ACCW(NV40P_WHAT2, 0x007596ff);
ACCW(NV40P_WHAT3, 0x00000108);
break;
case NV43:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
ACCW(NV40P_WHAT2, 0x0072cb77);
ACCW(NV40P_WHAT3, 0x00000108);
break;
case NV45: //fixme, checkout: this is cardID 0x016x at least!
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
ACCW(NV45_WHAT2, 0x00000000);
ACCW(NV45_WHAT3, 0x00000000);
break;
default:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
break;
}
break;
case NV04A:
/* init some function blocks */
ACCW(DEBUG0, 0x1231c001);
ACCW(DEBUG1, 0x72111101);
ACCW(DEBUG2, 0x11d5f071);
ACCW(DEBUG3, 0x10d4ff31);
break;
default:
/* set resetstate for most function blocks */
ACCW(DEBUG0, 0x0003ffff);
/* init some function blocks */
@ -334,14 +388,7 @@ status_t nv_acc_init()
ACCW(DEBUG0, 0x00000000);
/* disable specific functions */
ACCW(NV10_DEBUG4, 0);
}
else
{
/* init some function blocks */
ACCW(DEBUG0, 0x1231c001);
ACCW(DEBUG1, 0x72111101);
ACCW(DEBUG2, 0x11d5f071);
ACCW(DEBUG3, 0x10d4ff31);
break;
}
/* reset all cache sets */
@ -702,8 +749,16 @@ status_t nv_acc_init()
/* tile 3: */
ACCW(NV10_TIL3AD, ACCR(NV10_FBTIL3AD));
ACCW(NV10_TIL3ED, ACCR(NV10_FBTIL3ED));
ACCW(NV10_TIL3PT, ACCR(NV10_FBTIL3PT));
ACCW(NV10_TIL3ST, ACCR(NV10_FBTIL3ST));
if (si->ps.card_arch >= NV40A)
{
ACCW(NV10_TIL3PT, 0x2ffff800);
ACCW(NV10_TIL3ST, 0x00006000);
}
else
{
ACCW(NV10_TIL3PT, ACCR(NV10_FBTIL3PT));
ACCW(NV10_TIL3ST, ACCR(NV10_FBTIL3ST));
}
/* tile 4: */
ACCW(NV10_TIL4AD, ACCR(NV10_FBTIL4AD));
ACCW(NV10_TIL4ED, ACCR(NV10_FBTIL4ED));
@ -725,6 +780,13 @@ status_t nv_acc_init()
ACCW(NV10_TIL7PT, ACCR(NV10_FBTIL7PT));
ACCW(NV10_TIL7ST, ACCR(NV10_FBTIL7ST));
/* unknown.. */
if (si->ps.card_arch >= NV40A)
{
ACCW(NV4X_WHAT1, 0x01000000);
ACCW(NV4X_WHAT0, 0x00001200);
}
/* setup (clear) pipe */
/* set eyetype to local, lightning is off */
ACCW(NV10_XFMOD0, 0x10000000);