Alex,

>
> (II) resource ranges after probing:
> DRI broken:
>        [33] 0  0       0x000003b0 - 0x000003bb (0xc) IS[B]
>        [34] 0  0       0x000003c0 - 0x000003df (0x20) IS[B]
> ...
> fglrx:
>        [34] 0  0       0xb01203b0 - 0xb01203bb (0xc) IS[B]
>        [35] 0  0       0xb01203c0 - 0xb01203df (0x20) IS[B]
>
> 1) What are these mappings used for?

Not sure.  Possibly something for PCIE GART?  What apertures does the
XPRESS chip expose?

How do I check that?  Here's what lspci exposes:

 01:05.0 VGA compatible controller: ATI Technologies Inc ATI Radeon XPRESS 200M 5955 (PCIE) (prog-if 00 [VGA])
        Subsystem: Hewlett-Packard Company Unknown device 30a4
        Flags: bus master, 66MHz, medium devsel, latency 66, IRQ 201
        Memory at c0000000 (32-bit, prefetchable) [size=256M]
        I/O ports at 9000 [size=256]
        Memory at b0100000 (32-bit, non-prefetchable) [size=64K]
        [virtual] Expansion ROM at b0120000 [disabled] [size=128K]
        Capabilities: [50] Power Management version 2


> 3) What part of radeon probe would be responsible for adding these?
>

RADEONMapMMIO() and RADEONMapFB() set up the register and FB maps and
RADEONInitMemoryMap() and friends handle chip side stuff for the
memory controller, etc.

Ok.  I'll check those out.  I'm having a little difficultly figuring out what exactly these mappings mean.   (So, this is just basic stuff..)

Does it indicate where the various components of the graphics card are mapped into the Xorg server address space?
 
(I've read http://ftp.x.org/pub/X11R6.9.0/doc/html/DESIGN9.html. It has details, but the not a high-level overview.)


Sorry I can't be more helpful.

Alex

As an aside, I figured out why the CPU time jumps to 100%.
 
RADEONLoadCursorImage calls RADEONWaitForIdleCP and we loop infinitely in it.  Since this calls into the kernel DRM module, I turned on debugging.

The X server calls: drmCommandNone(info->drmFD, DRM_RADEON_CP_IDLE);

Which then calls -> [drm:radeon_cp_idle] -> [drm:radeon_do_cp_idle] -> [drm:radeon_do_wait_for_idle]

This fails, returns back up the stack, and then the call happens again.
...

So, the CPU is spinning waiting for the card to be idle.  I turned on debugging so that I can see the status register.

messages:Oct 26 23:53:57 localhost kernel: RBBM_STATUS = 0x80010140
[Repeated 10 more times.]
messages:Oct 26 23:54:03 localhost kernel: RBBM_STATUS = 0x88030140
messages:Oct 26 23:54:03 localhost kernel: RBBM_STATUS = 0x8803613f
messages:Oct 26 23:54:04 localhost kernel: RBBM_STATUS = 0x88036139
messages:Oct 26 23:54:04 localhost kernel: RBBM_STATUS = 0x88036133
messages:Oct 26 23:54:04 localhost kernel: RBBM_STATUS = 0x8803612d
messages:Oct 26 23:54:04 localhost kernel: RBBM_STATUS = 0x88036127
messages:Oct 26 23:54:05 localhost kernel: RBBM_STATUS = 0x88036121
messages:Oct 26 23:54:05 localhost kernel: RBBM_STATUS = 0x8803611b
messages:Oct 26 23:54:05 localhost kernel: RBBM_STATUS = 0x88036115
messages:Oct 26 23:54:06 localhost kernel: RBBM_STATUS = 0x8803610f
messages:Oct 26 23:54:06 localhost kernel: RBBM_STATUS = 0x88036109
messages:Oct 26 23:54:06 localhost kernel: RBBM_STATUS = 0x88036103
messages:Oct 26 23:54:06 localhost kernel: RBBM_STATUS = 0x8001c100
[Repeated forever..]
 
I can see from the include that the 1<<31 bit being set means that the card is active.

I found a reference on the net which said that the other bits of the register actually tell WHAT part of the card is busy.  However, I can't find any place that actually defines what they mean.  What does a status of "0x8001c100" mean? (ie, what parts are busy?  That might help me figure out what is misconfigured... )

(On the plus side, it actually looks like DRM is reading the proper memory for the status register. I can see the number of free FIFO entries decreasing...)

Thanks,
--Phil

FWIW: Here's a full debug state when it gets stuck (These repeat, but the CP_RB_WTPR  increases by 6. ):

[drm:drm_ioctl] pid=2392, cmd=0x6444, nr=0x44, dev 0xe200, auth=1
[drm:radeon_cp_idle]
[drm:radeon_do_cp_idle]
[drm:radeon_do_wait_for_fifo] *ERROR* failed!
radeon_status:
RBBM_STATUS = 0x8001c100
CP_RB_RTPR = 0x000000f7
CP_RB_WTPR = 0x0000a895
AIC_CNTL = 0x000007e1
AIC_STAT = 0x00000000
AIC_PT_BASE = 0x35428000
TLB_ADDR = 0x00000000
TLB_DATA = 0x00000000
[drm:drm_ioctl] ret = fffffff0

[drm:drm_ioctl] pid=2392, cmd=0x6444, nr=0x44, dev 0xe200, auth=1
[drm:radeon_cp_idle]
[drm:radeon_do_cp_idle]
[drm:radeon_do_wait_for_fifo] *ERROR* failed!
radeon_status:
RBBM_STATUS = 0x8001c100
CP_RB_RTPR = 0x000000f7
CP_RB_WTPR = 0x0000a89b
AIC_CNTL = 0x000007e1
AIC_STAT = 0x00000000
AIC_PT_BASE = 0x35428000
TLB_ADDR = 0x00000000
TLB_DATA = 0x00000000
[drm:drm_ioctl] ret = fffffff0

[drm:drm_ioctl] pid=2392, cmd=0x6444, nr=0x44, dev 0xe200, auth=1
[drm:radeon_cp_idle]
[drm:radeon_do_cp_idle]
[drm:radeon_do_wait_for_fifo] *ERROR* failed!
radeon_status:
RBBM_STATUS = 0x8001c100
CP_RB_RTPR = 0x000000f7
CP_RB_WTPR = 0x0000a8a1
AIC_CNTL = 0x000007e1
AIC_STAT = 0x00000000
AIC_PT_BASE = 0x35428000
TLB_ADDR = 0x00000000
TLB_DATA = 0x00000000
[drm:drm_ioctl] ret = fffffff0
....