[Nouveau] [Bug 88868] New: PowerPC e5500, kernel crash, GT520, GT610

bugzilla-daemon at freedesktop.org bugzilla-daemon at freedesktop.org
Thu Jan 29 07:06:00 PST 2015


https://bugs.freedesktop.org/show_bug.cgi?id=88868

            Bug ID: 88868
           Summary: PowerPC e5500, kernel crash, GT520, GT610
           Product: xorg
           Version: unspecified
          Hardware: PowerPC
                OS: Linux (All)
            Status: NEW
          Severity: normal
          Priority: medium
         Component: Driver/nouveau
          Assignee: nouveau at lists.freedesktop.org
          Reporter: oboturoff at gmail.com
        QA Contact: xorg-team at lists.x.org

Created attachment 112941
  --> https://bugs.freedesktop.org/attachment.cgi?id=112941&action=edit
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:
1. 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.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/nouveau/attachments/20150129/94575466/attachment.html>


More information about the Nouveau mailing list