staticint
calc_bias(struct nvkm_fb *fb, int k, int i, int j)
{ struct nvkm_device *device = fb->subdev.device; int b = (device->chipset > 0x30 ?
nvkm_rd32(device, 0x122c + 0x10 * k + 0x4 * j) >>
(4 * (i ^ 1)) : 0) & 0xf;
return2 * (b & 0x8 ? b - 0x10 : b);
}
staticint
calc_ref(struct nvkm_fb *fb, int l, int k, int i)
{ int j, x = 0;
for (j = 0; j < 4; j++) { int m = (l >> (8 * i) & 0xff) + calc_bias(fb, k, i, j);
x |= (0x80 | clamp(m, 0, 0x1f)) << (8 * j);
}
return x;
}
void
nv30_fb_init(struct nvkm_fb *fb)
{ struct nvkm_device *device = fb->subdev.device; int i, j;
/* Init the memory timing regs at 0x10037c/0x1003ac */ if (device->chipset == 0x30 ||
device->chipset == 0x31 ||
device->chipset == 0x35) { /* Related to ROP count */ int n = (device->chipset == 0x31 ? 2 : 4); int l = nvkm_rd32(device, 0x1003d0);
for (i = 0; i < n; i++) { for (j = 0; j < 3; j++)
nvkm_wr32(device, 0x10037c + 0xc * i + 0x4 * j,
calc_ref(fb, l, 0, j));
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.