dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: mroos@linux.ee
To: Dave Airlie <airlied@gmail.com>
Cc: sparclinux@vger.kernel.org, michel@daenzer.net,
	David Miller <davem@davemloft.net>,
	dri-devel@lists.freedesktop.org
Subject: Re: PCI Radeon RV100 detection hang on sparc64
Date: Mon, 23 Sep 2013 16:48:32 +0300 (EEST)	[thread overview]
Message-ID: <alpine.SOC.1.00.1309231638330.9952@math.ut.ee> (raw)
In-Reply-To: <CAPM=9ty87-kP1QJjgJKQUVkJxg8yN6ZQ5qy+pVYRnrDoa_VqBQ@mail.gmail.com>

Resurrecting an old thread...

> On Fri, Sep 7, 2012 at 4:18 AM, David Miller <davem@davemloft.net> wrote:
> > From: Michel Dänzer <michel@daenzer.net>
> > Date: Thu, 06 Sep 2012 18:55:51 +0200
> >
> >> On Don, 2012-09-06 at 17:41 +0300, Meelis Roos wrote:
> >>> This is with initialyy unmodified 3.6.0-rc4-00101-g0809095 kernel in
> >>> Ultra 10 (clean, without my "Video RAM" hack that I talked in other
> >>> sparclinux posts). When I saw that Sun XVR-100 was detected fine by the
> >>> kernel, I compiled radeon drm driver with modesetting enabled and tried
> >>> it:
> >>>
> >>> [drm] radeon defaulting to kernel modesetting.
> >>> [drm] radeon kernel modesetting enabled.
> >>> PCI: Enabling device: (0000:02:02.0), cmd 82
> >>> [drm] initializing kernel modesetting (RV100 0x1002:0x5159 0x1002:0x0908).
> >>> [drm] register mmio base: 0x10000000
> >>> [drm] register mmio size: 32768
> >>> [drm:radeon_device_init] *ERROR* Unable to find PCI I/O BAR
> >>>
> >>> And here the machine hangs. Debugging printk-s reveal that it does not
> >>> find any active I/O port resources and then continues into initializing
> >>> the card. Down in igp_read_bios_from_vram() it successfully ioremaps
> >>> memory region 0 (vram_base=1ff08000000 and size=40000) and tries to read
> >>> 2 bytes from there and hangs on reading bios[0].
> >>
> >> Is the card initialized by OpenFirmware? E.g., does it display anything
> >> before the kernel boots?
> >
> > I think Meelis gave you every single detail you need to know to
> > analyze and fix this bug.
> >
> > He says it crashes on reading bios[0].
> >
> > If you look at the function he tells you the crash occurs in, you'll
> > see clearly that bios is an ioremap()'d pointer.
> >
> > You cannot dereference ioremap()'d pointers, you must use the proper
> > accessors such as readl().
> 
> we should just skip the igp reading function on not-x86, since IGP on
> not x86 makes no sense.
> 
> the other option is to readl out the whole bios from vram instead.

I made several changes.

1. In igp_read_bios_from_vram():

+#ifndef CONFIG_X86
+       /* IGP only exists on X86 (32- and 64-bit) */
+       return false;
+#endif

This gets me further.

2. Since "bios" is __iomem pointer, changed its dereferences to 
readb(bios) and readb(bios+1). Maybe relevant, maybe not.

3. Next it got stuck in radeon_read_bios() trying to do
kmemdup(bios, size, GFP_KERNEL);

This I changed to mydup for test:

+static void *mydup(uint8_t __iomem *src, size_t len, gfp_t gfp)
+{
+       unsigned char *p;
+       int i;
+
+       p = kmalloc(len, gfp);
+       if (p) {
+               for (i=0; i<len; i++) {
+                       p[i] = readb(src+i);
+               }
+       }
+       return p;
+}

And this copying crashes Adaptec scsi driver in different ways.

Investigating this, I found that it makes BAR 6 of the PCI radeon and 
gets bios=000001ff00000000 assigned. There is also some "Unable to find 
PCI I/O BAR" before - seesm that firmware does not map this ROM...
To make things worse, the 2 first bytes at 000001ff00000000 actually do 
contain the ROM marker, so it goes on to copying.

[drm] radeon kernel modesetting enabled.
PCI: Enabling device: (0000:02:02.0), cmd 82
[drm] initializing kernel modesetting (RV100 0x1002:0x5159 0x1002:0x0908).
[drm] register mmio base: 0x000001FF10000000
[drm] register mmio size: 32768
[drm:radeon_device_init] *ERROR* Unable to find PCI I/O BAR
[drm] radeon_read_bios 1
radeon 0000:02:02.0: BAR 6: assigned [mem 0x1ff00000000-0x1ff0001ffff]
[drm] radeon_read_bios: found ROM signature at 000001ff00000000
[drm] radeon_read_bios 7: bios=000001ff00000000, size=46592

However, this is where aic7xxx is mapped - /proc/iomem contains this 
(yes, the machine has ffb graphics and 2 ATI magc64 graphics heads too):

1fc00400000-1fc0040000f : ffb dac
1fc00600000-1fc00600983 : ffb fbc
1ff00000000-1ffffffffff : /pci@1f,0
  1ff00002000-1ff00002fff : aic7xxx
  1ff000a0000-1ff000bffff : Video RAM area
  1ff000c0000-1ff000c7fff : Video ROM
  1ff000f0000-1ff000fffff : System ROM
  1ff11000000-1ff11ffffff : atyfb
  1ffc0000000-1ffdfffffff : IOMMU
  1ffe0000000-1ffe000701f : sunhme
  1ffe1000000-1ffe1ffffff : atyfb
  1fff1000000-1fff1001fff : eeprom
  1fff1200000-1fff120000f : cs4231
  1fff13062f8-1fff13062ff : su
  1fff13083f8-1fff13083ff : su
  1fff1400000-1fff140003f : sab
  1fff1400040-1fff140007f : sab
  1fff1702000-1fff170200f : cs4231_pdma
  1fff1704000-1fff170400f : cs4231_cdma
  1fff1724000-1fff1724003 : power
  1fff1726000-1fff1726003 : auxio


Where do I go from here?

-- 
Meelis Roos (mroos@linux.ee)

  parent reply	other threads:[~2013-09-23 13:48 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-06 14:41 PCI Radeon RV100 detection hang on sparc64 Meelis Roos
2012-09-06 16:51 ` Adam Jackson
2012-09-06 18:15   ` David Miller
2012-09-06 16:55 ` Michel Dänzer
2012-09-06 18:18   ` David Miller
2012-09-07  7:18     ` Dave Airlie
2012-09-19  7:51       ` mroos
2013-09-23 13:48       ` mroos [this message]
2013-09-23 19:06         ` Kjetil Oftedal
2013-09-23 20:36           ` David Miller
2013-09-23 21:14             ` mroos
2013-09-23 21:33               ` David Miller
2013-09-24 11:06                 ` Meelis Roos
2013-09-25 23:26                   ` Meelis Roos
2013-10-01  8:43               ` Meelis Roos
2014-04-04 20:52                 ` David Miller
2014-08-13  6:30                   ` David Miller
2014-08-19 11:17                     ` Meelis Roos
2014-08-25 14:48                       ` Meelis Roos
2014-08-26  2:46                         ` Michel Dänzer
2014-08-26  7:07                           ` Meelis Roos
2014-08-27  2:24                             ` Michel Dänzer
2014-08-30 19:20                               ` Kjetil Oftedal
2014-08-31  5:59                                 ` Meelis Roos
2013-09-23 21:18           ` Meelis Roos
2013-10-10 11:51           ` [PATCH] only try to find radeon IGP ROM on X86 Meelis Roos
2013-10-10 14:38             ` Alex Deucher
2013-10-10 15:26               ` Meelis Roos
2013-10-10 17:02                 ` David Miller
2013-10-10 17:10                 ` Alex Deucher
2012-09-06 18:08 ` PCI Radeon RV100 detection hang on sparc64 David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=alpine.SOC.1.00.1309231638330.9952@math.ut.ee \
    --to=mroos@linux.ee \
    --cc=airlied@gmail.com \
    --cc=davem@davemloft.net \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=michel@daenzer.net \
    --cc=sparclinux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox