--- linux-2.3.paul/drivers/video/controlfb.c Fri Feb 11 00:20:08 2000 +++ linux-2.3.paul-work/drivers/video/controlfb.c Sun Mar 19 12:36:30 2000 @@ -678,7 +678,7 @@ { struct fb_info_control *p; unsigned long addr, size; - int i, bank1, bank2; + int i, bank1, bank2, m[7]; if(dp->n_addrs != 2) { printk(KERN_ERR "expecting 2 address for control (got %d)", dp->n_addrs); @@ -714,7 +714,70 @@ * - with 2M vram in bank 2, it appears only at offset 6M * - with 4M vram, it appears only as a 4M block at offset 0. */ +#if (1) + /* Let's do the mem test... */ + for (i=0; i<7; i++) m[i]=0; + out_8(&p->frame_buffer[0], 0x5a); + out_8(&p->frame_buffer[1], 0xc7); + asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0]) : "memory" ); + m[0] = (in_8(&p->frame_buffer[0x000000]) == 0x5a) + && (in_8(&p->frame_buffer[0x000001]) == 0xc7); + m[2] = (in_8(&p->frame_buffer[0x200000]) == 0x5a) + && (in_8(&p->frame_buffer[0x200001]) == 0xc7); + m[4] = (in_8(&p->frame_buffer[0x400000]) == 0x5a) + && (in_8(&p->frame_buffer[0x400001]) == 0xc7); + m[6] = (in_8(&p->frame_buffer[0x600000]) == 0x5a) + && (in_8(&p->frame_buffer[0x600001]) == 0xc7); + + printk(KERN_INFO "control: mem at 0x000000: %s", m[0] ? "yes" : "no"); + printk(", mirrored at:%s%s%s\n", m[2]?" 2M":"", m[4]?" 4M":"", m[6]?" 6M":""); + + out_8(&p->frame_buffer[0x200000], 0xa5); + out_8(&p->frame_buffer[0x200001], 0x38); + asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0x200000]) : "memory" ); + m[0] = (in_8(&p->frame_buffer[0x000000]) == 0xa5) + && (in_8(&p->frame_buffer[0x000001]) == 0x38); + m[2] = (in_8(&p->frame_buffer[0x200000]) == 0xa5) + && (in_8(&p->frame_buffer[0x200001]) == 0x38); + m[4] = (in_8(&p->frame_buffer[0x400000]) == 0xa5) + && (in_8(&p->frame_buffer[0x400001]) == 0x38); + m[6] = (in_8(&p->frame_buffer[0x600000]) == 0xa5) + && (in_8(&p->frame_buffer[0x600001]) == 0x38); + + printk(KERN_INFO "control: mem at 0x200000: %s", m[2] ? "yes" : "no"); + printk(", mirrored at:%s%s%s\n", m[0]?" 0M":"", m[4]?" 4M":"", m[6]?" 6M":""); + + out_8(&p->frame_buffer[0x400000], 0xc1); + out_8(&p->frame_buffer[0x400001], 0x02); + asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0x400000]) : "memory" ); + m[0] = (in_8(&p->frame_buffer[0x000000]) == 0xc1) + && (in_8(&p->frame_buffer[0x000001]) == 0x02); + m[2] = (in_8(&p->frame_buffer[0x200000]) == 0xc1) + && (in_8(&p->frame_buffer[0x200001]) == 0x02); + m[4] = (in_8(&p->frame_buffer[0x400000]) == 0xc1) + && (in_8(&p->frame_buffer[0x400001]) == 0x02); + m[6] = (in_8(&p->frame_buffer[0x600000]) == 0xc1) + && (in_8(&p->frame_buffer[0x600001]) == 0x02); + + printk(KERN_INFO "control: mem at 0x400000: %s", m[4] ? "yes" : "no"); + printk(", mirrored at:%s%s%s\n", m[0]?" 0M":"", m[2]?" 2M":"", m[6]?" 6M":""); + + out_8(&p->frame_buffer[0x600000], 0xb3); + out_8(&p->frame_buffer[0x600001], 0x71); + asm volatile("eieio; dcbi 0,%0" : : "r" (&p->frame_buffer[0x600000]) : "memory" ); + m[0] = (in_8(&p->frame_buffer[0x000000]) == 0xb3) + && (in_8(&p->frame_buffer[0x000001]) == 0x71); + m[2] = (in_8(&p->frame_buffer[0x200000]) == 0xb3) + && (in_8(&p->frame_buffer[0x200001]) == 0x71); + m[4] = (in_8(&p->frame_buffer[0x400000]) == 0xb3) + && (in_8(&p->frame_buffer[0x400001]) == 0x71); + m[6] = (in_8(&p->frame_buffer[0x600000]) == 0xb3) + && (in_8(&p->frame_buffer[0x600001]) == 0x71); + + printk(KERN_INFO "control: mem at 0x600000: %s", m[6] ? "yes" : "no"); + printk(", mirrored at:%s%s%s\n", m[0]?" 0M":"", m[2]?" 2M":"", m[4]?" 4M":""); +#endif /* We know there is something at 2M if there is something at 0M. */ out_8(&p->frame_buffer[0x200000], 0xa5); out_8(&p->frame_buffer[0x200001], 0x38);