PowerPC e5500, kernel crash, GT520, GT610
Submitted by Dmitriy
Assigned to Nouveau Project
Description
Created attachment 112941
kernel_log for GT610 with debug info
Hi,
We use devices on the base of PowerPC series e5500 and try to use the driver nouveau. But by starting of nouveau driver we get kernel crash.
We used several kernels ver. 3.x but on all kernels we have same error. And try to test several nvidia card GT520, GT610 and other.
I tryed to solve the problem by myself and added some debug codes:
- I added the following debug codes into the file base.c
/* read boot0 and strapping information */
boot0 = ioread32_native(map + 0x000000);
strap = ioread32_native(map + 0x101000);
iounmap(map);
printk ("##boot0=%x\n",boot0);
printk ("##strap=%x\n",strap);
The result you can see in the log_gt610 attachment file. The value of the variable "boot0" for this video card is to be of the value 0x0d90a0a1, in the log it is value in the reverse order. The value of the variable "strap" is to be of the value 0x80406892, in the log it isn't reversed but there is no msd. What does the fact depend on that 2 registers are readed and one of them is reversed, but the other are not in the same time?
2. kernel crash happens by running of the code from the file base.c
if (nv_rd08(bios, 0x700000) != 0x55 ||
nv_rd08(bios, 0x700001) != 0xaa) {
It means that the address reading of 0x700000 results the kernel crash. Why does it happen? The result of the address reading of 0x619f04 is shown for the information.
static void
nouveau_bios_shadow_pramin(struct nouveau_bios *bios)
{
struct nouveau_device *device = nv_device(bios);
u32 bar0 = 0;
int i;
unsigned int tmp_val;
if (device->card_type >= NV_50) {
u64 addr = (u64)(nv_rd32(bios, 0x619f04) & 0xffffff00) << 8;
if (!addr) {
addr = (u64)nv_rd32(bios, 0x001700) << 16;
addr += 0xf0000;
}
bar0 = nv_mask(bios, 0x001700, 0xffffffff, addr >> 16);
}
tmp_val = nv_rd32(bios, 0x619f04);
printk ("##val=%x\n", tmp_val);
In the log we can see the variable value of tmp_val. It is evident that it isn't correct too. Why is the address 0x619f04 not readed correctly and what happens with kernel crash by reading of the addresses of 0x700000 and of 0x700001.
**Attachment 112941**, "kernel_log for GT610 with debug info":
log_gt610