| Home | Register | Members | Search | Windows Vista Tips | File Database | Links |
![]() |
| Thread Tools | Display Modes |
|
|
|
| |
|
Tim Roberts
Guest
Posts: n/a
|
Pat <> wrote:
> > I need some help. I've a graphic device which allocates 3 bars. I am >trying to allocate the largest aperture to above 4Gig. > > It should reside in 0xFF0000000. This is simply not under your control. At boot time, it's the BIOS's job to assign this region. Once the system loads, it's the Plug-and-Play manager's job. You do not get to decide this. Remember that whatever PCI bridge you are behind also has to allow this. -- Tim Roberts, Providenza & Boekelheide, Inc. |
|
|
|
|
|||
|
|||
|
RossettoeCioccolato
Guest
Posts: n/a
|
Tim,
> Using Linux, it seems that I can write to the address (and see it fill up > the video screen). So at least the hardware seems to be mapped to the > correct address. < Assuming that the author meant "using Linux on the same box," the defect would have to be with Windows 7 and not with the bios or the PCI bridge. It is becoming pretty difficult to fit video memory at < 4 GiB, particularly if you have multiple cards. Regards, RossetoeCioccolato. "Tim Roberts" <> wrote in message news:... > Pat <> wrote: >> >> I need some help. I've a graphic device which allocates 3 bars. I am >>trying to allocate the largest aperture to above 4Gig. >> >> It should reside in 0xFF0000000. > > This is simply not under your control. At boot time, it's the BIOS's job > to assign this region. Once the system loads, it's the Plug-and-Play > manager's job. You do not get to decide this. Remember that whatever PCI > bridge you are behind also has to allow this. > -- > Tim Roberts, > Providenza & Boekelheide, Inc. |
|
|
|
|
|||
|
|||
|
Pat
Guest
Posts: n/a
|
Hello all,
[additional info] I tested the same video card in the same box (linux and Vista64). From looking at the PCI config space on both Vista and Linux, at least all the values in the bar seems correct. When I said 0x0000F F0000000, it's the starting range for the address that BIOs allocates. That address seems to be the same for both Linux and Vista64 (at least in initial testing). I am running Vista64 debug version. Is there anything I can enable/set so that I can use WinDbg to get some debug messages to try to isolate the issue ? I had enabled WinDbg, but I don't see to get any messages related to the issue. - Pat |
|
|
|
|
|||
|
|||
|
Pat
Guest
Posts: n/a
|
Additional info from Pci.sys ... PciMemoryArbiter_PreprocessEntry for arbiter 0x85eb010 PCI: Allocation State after preprocessing PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) PCI: Current Alternative: PCI: Type - 3 PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff PCI: Length - 0x10000000 Alignment - 0x1 PCI: Flags - 0x2 PCI: Current State: PCI: Start - 0x1 End - 0x0 PCI: Min - 0x0 Max - 0xffffffffffffffff PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 PCI: PciMemoryArbiter_GetNextAllocationRange for arbiter 0x85eb010 PCI: Next Allocation range found PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) PCI: Current Alternative: PCI: Type - 3 PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff PCI: Length - 0x10000000 Alignment - 0x1 PCI: Flags - 0x2 PCI: Current State: PCI: Start - 0x1 End - 0x0 PCI: Min - 0xff0000000 Max - 0xfffffffff PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 PCI: PciMemoryArbiter_OverrideConflict for arbiter 0x85eb010 PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) PCI: Current Alternative: PCI: Type - 3 PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff PCI: Length - 0x10000000 Alignment - 0x1 PCI: Flags - 0x2 PCI: Current State: PCI: Start - 0x1 End - 0x0 PCI: Min - 0xff0000000 Max - 0xfffffffff PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 PCI: PciMemoryArbiter_FindSuitableRange returning 0 PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) PCI: Current Alternative: PCI: Type - 3 PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff PCI: Length - 0x10000000 Alignment - 0x1 PCI: Flags - 0x2 PCI: Current State: PCI: Start - 0x1 End - 0x0 PCI: Min - 0xff0000000 Max - 0xfffffffff PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 PCI: :: [repeat 5x] { ...nextAllocation ....OverrideCOnflict ...FindSoutiableRange returning 0 } So it would seem that pci.sys is "trying" the address but always gets 0 back in FindSuitableRange. Anybody know what "PciMemoryArbiter_OverrideConflict" means ? - Pat "Pat" wrote: > Hi everyone, > > I need some help. I've a graphic device which allocates 3 bars. I am > trying to allocate the largest aperture to above 4Gig. > > It should reside in 0xFF0000000. > > When Vista boots up, it seems that pci.sys allocates the other 2 bars > which are below 4Gig, but will refuse to allocate the bar which is above > 4Gig. In the device manager, I see > > the frame buffer aperture : > [0x0000000F F0000000 - 0x0000000F FFFFFFFF PCI standard PCI-to-Pci Bridge > > but it has a yellow ! mark on it. If you open the properties, it says "this > device > cannot find enough free resource that it can use". > > Can someone give me some pointers as to what to look or try ? > > Using Linux, it seems that I can write to the address (and see it fill up > the video > screen). So at least the hardware seems to be mapped to the correct address. > > Using Windbg, I can't seem to read the FrameBuffer when it's mapped at > 0x0000000F F0000000, but I can read it ok, when it's mapped below 4Gig. I am > not sure whether this is a clue, or whether WinDbg doesn't work well above > 4Gig. > > Any help would be greatly appeciated. Thanks in advance. |
|
|
|
|
|||
|
|||
|
Pat
Guest
Posts: n/a
|
Hello Alberto,
The bar looks correct .. and since the address works fine from Linux, I think would presume that the device is working. Vista64 detects the correct settings (address and size) but it "fails" to allocate the resource if it is above 4Gigs. (You can see it from the logs from pci.sys). If I do-not- allow the device to be remapped below 4Gig, the Pci bridge fails with a yellow (!), the device is non visible (meaning I don't even see a vga display device in the device manager) ... but strangely enough it comes up as a 640x480 (?) 4bit display but I cannot change any settings. This is a log of a very good run PCI.sys. You can see for the device, that it pci.sys (1) Allocates and maps 0xA0000 successfully (2) Allocates and maps 0xd8000000 successfully (3) Trying to allocate 256Mbyte prefetch a. Tries Min - 0x000f f0000000 Max - 0x000f ffffffff but fails b. Retries Min - 0x0001 00000000 Max - 0x000f fffffffffffffff but fails c. Retries Min - 0x100000 Max - 0xffefffff , passes. Gets 0xC0000000, and maps the Video card there. Video comes up ok, BUT the bar is in < 4Gig range, which is not what I want. -- Pci.sys logs -- • PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 • PCI: Next Allocation range found • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xa0000 Maximum - 0xbffff • PCI: Length - 0x20000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0xa0000 Max - 0xbffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_FindSuitableRange returning 1 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xa0000 Maximum - 0xbffff • PCI: Length - 0x20000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0xa0000 End - 0xbffff • PCI: Min - 0xa0000 Max - 0xbffff • PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_PreprocessEntry for arbiter 0x94f5010 • PCI: Allocation State after preprocessing • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xd8000000 Maximum - 0xd83fffff • PCI: Length - 0x400000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0x0 Max - 0x0 • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 • PCI: Next Allocation range found • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xd8000000 Maximum - 0xd83fffff • PCI: Length - 0x400000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0xd8000000 Max - 0xd83fffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_FindSuitableRange returning 1 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xd8000000 Maximum - 0xd83fffff • PCI: Length - 0x400000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0xd8000000 End - 0xd83fffff • PCI: Min - 0xd8000000 Max - 0xd83fffff • PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_PreprocessEntry for arbiter 0x94f5010 • PCI: Allocation State after preprocessing • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff • PCI: Length - 0x10000000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0x0 Max - 0x0 • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 • PCI: Next Allocation range found • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff • PCI: Length - 0x10000000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0xff0000000 Max - 0xfffffffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_OverrideConflict for arbiter 0x94f5010 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff • PCI: Length - 0x10000000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0xff0000000 Max - 0xfffffffff • PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_FindSuitableRange returning 0 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff • PCI: Length - 0x10000000 Alignment - 0x1 • PCI: Flags - 0x2 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0xff0000000 Max - 0xfffffffff • PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 • PCI: Next Allocation range found • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff • PCI: Length - 0x10000000 Alignment - 0x100000 • PCI: Flags - 0x0 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0x100000000 Max - 0xffffffffffffffff • PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_OverrideConflict for arbiter 0x94f5010 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff • PCI: Length - 0x10000000 Alignment - 0x100000 • PCI: Flags - 0x0 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0x100000000 Max - 0xffffffffffffffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_FindSuitableRange returning 0 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff • PCI: Length - 0x10000000 Alignment - 0x100000 • PCI: Flags - 0x0 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0x100000000 Max - 0xffffffffffffffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 • PCI: Next Allocation range found • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff • PCI: Length - 0x10000000 Alignment - 0x100000 • PCI: Flags - 0x0 • PCI: Current State: • PCI: Start - 0x1 End - 0x0 • PCI: Min - 0x100000 Max - 0xffefffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: • PciMemoryArbiter_FindSuitableRange returning 1 • PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) • PCI: Current Alternative: • PCI: Type - 3 • PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff • PCI: Length - 0x10000000 Alignment - 0x100000 • PCI: Flags - 0x0 • PCI: Current State: • PCI: Start - 0xc0000000 End - 0xcfffffff • PCI: Min - 0x100000 Max - 0xffefffff • PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 • PCI: Config Write - (0,1,0) offset 3c length 1 buffer FFFFFA60005AF1F8 // PCI config from my video device PCI Configuration Space (Segment:0000 Bus:06 Device:00 Function:00) Common Header: 00: VendorID xxxx 02: DeviceID yyyy 04: Command 0007 IOSpaceEn MemSpaceEn BusInitiate 06: Status 0010 CapList 08: RevisionID 01 09: ProgIF 00 VGA 0a: SubClass 00 VGA Compatible Controller 0b: BaseClass 03 Display Controller 0c: CacheLineSize 0008 Burst4DW 0d: LatencyTimer 00 0e: HeaderType 00 0f: BIST 00 10: BAR0 d8000000 << 32bit bar of 0xd8000000 14: BAR1 f000000c << 18: BAR2 0000000f << 64bit bar of 0x0000000F F0000000 1c: BAR3 00000000 20: BAR4 00000000 24: BAR5 00000000 28: CBCISPtr 00000000 2c: SubSysVenID 1649 2e: SubSysID 2002 30: ROMBAR 00000000 34: CapPtr dc 3c: IntLine 0b 3d: IntPin 01 3e: MinGnt 00 3f: MaxLat 00 Device Private: 40: 0002c010 00648f20 00010830 0002c102 50: 10420000 00000000 00000000 00000000 60: 00000000 00000000 00000000 00000000 70: 00000002 00000000 00000000 00000000 80: 00000000 00000000 00000000 00000000 90: 00000000 00000000 00000000 00000000 a0: 00000000 00000000 00000000 00000000 b0: 00000000 00000000 00000000 00000000 c0: 00800005 00000000 00000000 00000000 d0: 00000000 00000000 00000000 06234001 e0: 00000008 00000000 00000000 00000000 f0: 00000000 00000000 00000000 00000000 Capabilities: dc: CapID 01 PwrMgmt Capability dd: NextPtr 40 de: PwrMgmtCap 0623 DSI D1Support D2Support Version=3 e0: PwrMgmtCtrl 0008 DataScale:0 DataSel:0 D0 40: CapID 10 PCI Express Capability 41: NextPtr c0 42: Express Caps 0002 Type:Endpoint 44: Device Caps 00648f20 48: Device Control 0830 MRR:128 NS ap pf et MP:256 RO ur fe nf ce 4a: Device Status 0001 tp ap ur fe nf CE 4c: Link Caps 0002c102 50: Link Control 0000 es cc rl ld RCB:64 ASPM:None 52: Link Status 1042 SCC lt lte NLW:x4 LS:2.5 54: Slot Caps 00000000 58: Slot Control 0000 pcc PI:?? AI:?? hpi cc pde mrls pfd ab 5a: Slot Status 0000 pds hpi cc pdc ms pfd ab 5c: Root Control 0000 pmei fs nfs cs 5e: Reserved 0000 60: Root Status 00000000 pmep pmes ID:0 c0: CapID 05 MSI Capability c1: NextPtr 00 c2: MsgCtrl 64BitCapable MultipleMsgEnable:0 (0x1) MultipleMsgCapable:0 (0x1) << 64bit capable c4: MsgAddr 0 c8: MsgAddrHi 0 cc: MsData 0 "alberto" wrote: > Hi, Pat, > > One thing to check first, are you sure your chip's BAR is a 64-bit > BAR ? A 32-bit BAR register cannot see beyond 4Gb. > > Also, I'm not sure I can recommend you do this in a production > environment, but it should be ok as a proof of concept and to make > sure that you don't have an underlying hardware issue. In fact, if you > connect a bus analyzer to your machine while you do this exercise, and > set it to trigger on a write to your BAR, a hardware-savvy engineer > should be able to diagnose the problem by looking at the analyzer's > trace. > > You can try to do the arbitration yourself, using the I/O level PCI > Express configuration mechanisms. Chapter 22 of the PCIe Mindshare > book explains it: you write all ones to the BAR and read it back: that > will give you the size of the memory space by clearing the bits > corresponding to the available address space to zero. After that you > can write the physical address to the BAR, and it should stick - well, > of course you will need to allocate the physical address range > yourself before you do this, or the OS will reuse that space and write > all over your memory. > > One thing to watch out is that some hardware don't like to operate > across a 4Gb boundary. I have had bad experiences with that kind of > thing. User beware! > > > Alberto. > > > > On Oct 28, 6:54 pm, Pat <P...@discussions.microsoft.com> wrote: > > Additional info from Pci.sys ... > > > > PciMemoryArbiter_PreprocessEntry for arbiter 0x85eb010 > > PCI: Allocation State after preprocessing > > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) > > PCI: Current Alternative: > > PCI: Type - 3 > > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > > PCI: Length - 0x10000000 Alignment - 0x1 > > PCI: Flags - 0x2 > > PCI: Current State: > > PCI: Start - 0x1 End - 0x0 > > PCI: Min - 0x0 Max - 0xffffffffffffffff > > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > > PCI: > > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x85eb010 > > PCI: Next Allocation range found > > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) > > PCI: Current Alternative: > > PCI: Type - 3 > > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > > PCI: Length - 0x10000000 Alignment - 0x1 > > PCI: Flags - 0x2 > > PCI: Current State: > > PCI: Start - 0x1 End - 0x0 > > PCI: Min - 0xff0000000 Max - 0xfffffffff > > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > > PCI: > > PciMemoryArbiter_OverrideConflict for arbiter 0x85eb010 > > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) > > PCI: Current Alternative: > > PCI: Type - 3 > > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > > PCI: Length - 0x10000000 Alignment - 0x1 > > PCI: Flags - 0x2 > > PCI: Current State: > > PCI: Start - 0x1 End - 0x0 > > PCI: Min - 0xff0000000 Max - 0xfffffffff > > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > > PCI: > > PciMemoryArbiter_FindSuitableRange returning 0 > > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) > > PCI: Current Alternative: > > PCI: Type - 3 > > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > > PCI: Length - 0x10000000 Alignment - 0x1 > > PCI: Flags - 0x2 > > PCI: Current State: > > PCI: Start - 0x1 End - 0x0 > > PCI: Min - 0xff0000000 Max - 0xfffffffff > > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > > PCI: > > :: > > [repeat 5x] > > > > { > > ...nextAllocation > > ....OverrideCOnflict > > ...FindSoutiableRange returning 0 > > > > } > > > > So it would seem that pci.sys is "trying" the address but always gets 0 > > back in FindSuitableRange. Anybody know what > > "PciMemoryArbiter_OverrideConflict" means ? > > > > - Pat > > > > > > > > "Pat" wrote: > > > Hi everyone, > > > > > I need some help. I've a graphic device which allocates 3 bars. I am > > > trying to allocate the largest aperture to above 4Gig. > > > > > It should reside in 0xFF0000000. > > > > > When Vista boots up, it seems that pci.sys allocates the other 2 bars > > > which are below 4Gig, but will refuse to allocate the bar which is above > > > 4Gig. In the device manager, I see > > > > > the frame buffer aperture : > > > [0x0000000F F0000000 - 0x0000000F FFFFFFFF PCI standard PCI-to-Pci Bridge > > > > > but it has a yellow ! mark on it. If you open the properties, it says "this > > > device > > > cannot find enough free resource that it can use". > > > > > Can someone give me some pointers as to what to look or try ? > > > > > Using Linux, it seems that I can write to the address (and see it fill up > > > the video > > > screen). So at least the hardware seems to be mapped to the correct address. > > > > > Using Windbg, I can't seem to read the FrameBuffer when it's mapped at > > > 0x0000000F F0000000, but I can read it ok, when it's mapped below 4Gig. I am > > > not sure whether this is a clue, or whether WinDbg doesn't work well above > > > 4Gig. > > > > > Any help would be greatly appeciated. Thanks in advance.- Hide quoted text - > > > > - Show quoted text - > > . > |
|
|
|
|
|||
|
|||
|
Alexander Grigoriev
Guest
Posts: n/a
|
I don't think you're running x64 system, your PDO address (0x94f7070) is
typical for x86. x86 client OS (Vista) won't use physical addresses above 4GB. Server-class OS will do. See http://download.microsoft.com/downlo...4a/PCI-rsc.doc "Pat" <> wrote in message news:618C6F1E-A1F6-4DDB-9537-... > Hello Alberto, > > The bar looks correct .. and since the address works fine from Linux, > I > think would presume that the device is working. > > > Vista64 detects the correct settings (address and size) but it "fails" > to allocate the resource if it is above 4Gigs. (You can see it from the > logs > from pci.sys). If I do-not- allow the device to be remapped below 4Gig, > the > Pci bridge fails with a yellow (!), the device is non visible (meaning I > don't even see a vga display device in the device manager) ... but > strangely > enough it comes up as a 640x480 (?) 4bit display but I cannot change any > settings. > > > > This is a log of a very good run PCI.sys. You can see for the device, > that it pci.sys > (1) Allocates and maps 0xA0000 successfully > (2) Allocates and maps 0xd8000000 successfully > (3) Trying to allocate 256Mbyte prefetch > a. Tries Min - 0x000f f0000000 Max - 0x000f ffffffff but > fails > b. Retries Min - 0x0001 00000000 Max - 0x000f fffffffffffffff but fails> > c. Retries Min - 0x100000 Max - 0xffefffff , passes. Gets 0xC0000000, and > maps the Video card there. Video comes up ok, BUT the bar is in < 4Gig > range, > which is not what I want. > > -- Pci.sys logs -- > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 > PCI: Next Allocation range found > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xa0000 Maximum - 0xbffff > PCI: Length - 0x20000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0xa0000 Max - 0xbffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_FindSuitableRange returning 1 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xa0000 Maximum - 0xbffff > PCI: Length - 0x20000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0xa0000 End - 0xbffff > PCI: Min - 0xa0000 Max - 0xbffff > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_PreprocessEntry for arbiter 0x94f5010 > PCI: Allocation State after preprocessing > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xd8000000 Maximum - 0xd83fffff > PCI: Length - 0x400000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0x0 Max - 0x0 > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 > PCI: Next Allocation range found > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xd8000000 Maximum - 0xd83fffff > PCI: Length - 0x400000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0xd8000000 Max - 0xd83fffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_FindSuitableRange returning 1 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xd8000000 Maximum - 0xd83fffff > PCI: Length - 0x400000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0xd8000000 End - 0xd83fffff > PCI: Min - 0xd8000000 Max - 0xd83fffff > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_PreprocessEntry for arbiter 0x94f5010 > PCI: Allocation State after preprocessing > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > PCI: Length - 0x10000000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0x0 Max - 0x0 > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 > PCI: Next Allocation range found > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > PCI: Length - 0x10000000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0xff0000000 Max - 0xfffffffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_OverrideConflict for arbiter 0x94f5010 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > PCI: Length - 0x10000000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0xff0000000 Max - 0xfffffffff > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_FindSuitableRange returning 0 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff > PCI: Length - 0x10000000 Alignment - 0x1 > PCI: Flags - 0x2 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0xff0000000 Max - 0xfffffffff > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 > PCI: Next Allocation range found > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff > PCI: Length - 0x10000000 Alignment - 0x100000 > PCI: Flags - 0x0 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0x100000000 Max - 0xffffffffffffffff > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_OverrideConflict for arbiter 0x94f5010 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff > PCI: Length - 0x10000000 Alignment - 0x100000 > PCI: Flags - 0x0 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0x100000000 Max - 0xffffffffffffffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_FindSuitableRange returning 0 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff > PCI: Length - 0x10000000 Alignment - 0x100000 > PCI: Flags - 0x0 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0x100000000 Max - 0xffffffffffffffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x94f5010 > PCI: Next Allocation range found > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff > PCI: Length - 0x10000000 Alignment - 0x100000 > PCI: Flags - 0x0 > PCI: Current State: > PCI: Start - 0x1 End - 0x0 > PCI: Min - 0x100000 Max - 0xffefffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: > PciMemoryArbiter_FindSuitableRange returning 1 > PCI: Arbiter Allocation State for PDO 0x94f7070 (bus 0, slot 1) > PCI: Current Alternative: > PCI: Type - 3 > PCI: Minimum - 0x0 Maximum - 0xffffffffffffffff > PCI: Length - 0x10000000 Alignment - 0x100000 > PCI: Flags - 0x0 > PCI: Current State: > PCI: Start - 0xc0000000 End - 0xcfffffff > PCI: Min - 0x100000 Max - 0xffefffff > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 > PCI: Config Write - (0,1,0) offset 3c length 1 buffer FFFFFA60005AF1F8 > > // PCI config from my video device > PCI Configuration Space (Segment:0000 Bus:06 Device:00 Function:00) > Common Header: > 00: VendorID xxxx > 02: DeviceID yyyy > 04: Command 0007 IOSpaceEn MemSpaceEn BusInitiate > 06: Status 0010 CapList > 08: RevisionID 01 > 09: ProgIF 00 VGA > 0a: SubClass 00 VGA Compatible Controller > 0b: BaseClass 03 Display Controller > 0c: CacheLineSize 0008 Burst4DW > 0d: LatencyTimer 00 > 0e: HeaderType 00 > 0f: BIST 00 > 10: BAR0 d8000000 << 32bit bar of 0xd8000000 > 14: BAR1 f000000c << > 18: BAR2 0000000f << 64bit bar of 0x0000000F > F0000000 > 1c: BAR3 00000000 > 20: BAR4 00000000 > 24: BAR5 00000000 > 28: CBCISPtr 00000000 > 2c: SubSysVenID 1649 > 2e: SubSysID 2002 > 30: ROMBAR 00000000 > 34: CapPtr dc > 3c: IntLine 0b > 3d: IntPin 01 > 3e: MinGnt 00 > 3f: MaxLat 00 > Device Private: > 40: 0002c010 00648f20 00010830 0002c102 > 50: 10420000 00000000 00000000 00000000 > 60: 00000000 00000000 00000000 00000000 > 70: 00000002 00000000 00000000 00000000 > 80: 00000000 00000000 00000000 00000000 > 90: 00000000 00000000 00000000 00000000 > a0: 00000000 00000000 00000000 00000000 > b0: 00000000 00000000 00000000 00000000 > c0: 00800005 00000000 00000000 00000000 > d0: 00000000 00000000 00000000 06234001 > e0: 00000008 00000000 00000000 00000000 > f0: 00000000 00000000 00000000 00000000 > Capabilities: > dc: CapID 01 PwrMgmt Capability > dd: NextPtr 40 > de: PwrMgmtCap 0623 DSI D1Support D2Support Version=3 > e0: PwrMgmtCtrl 0008 DataScale:0 DataSel:0 D0 > > 40: CapID 10 PCI Express Capability > 41: NextPtr c0 > 42: Express Caps 0002 Type:Endpoint > 44: Device Caps 00648f20 > 48: Device Control 0830 MRR:128 NS ap pf et MP:256 RO ur fe nf ce > 4a: Device Status 0001 tp ap ur fe nf CE > 4c: Link Caps 0002c102 > 50: Link Control 0000 es cc rl ld RCB:64 ASPM:None > 52: Link Status 1042 SCC lt lte NLW:x4 LS:2.5 > 54: Slot Caps 00000000 > 58: Slot Control 0000 pcc PI:?? AI:?? hpi cc pde mrls pfd ab > 5a: Slot Status 0000 pds hpi cc pdc ms pfd ab > 5c: Root Control 0000 pmei fs nfs cs > 5e: Reserved 0000 > 60: Root Status 00000000 pmep pmes ID:0 > > c0: CapID 05 MSI Capability > c1: NextPtr 00 > c2: MsgCtrl 64BitCapable MultipleMsgEnable:0 (0x1) > MultipleMsgCapable:0 (0x1) << 64bit capable > c4: MsgAddr 0 > c8: MsgAddrHi 0 > cc: MsData 0 > > > > > > "alberto" wrote: > >> Hi, Pat, >> >> One thing to check first, are you sure your chip's BAR is a 64-bit >> BAR ? A 32-bit BAR register cannot see beyond 4Gb. >> >> Also, I'm not sure I can recommend you do this in a production >> environment, but it should be ok as a proof of concept and to make >> sure that you don't have an underlying hardware issue. In fact, if you >> connect a bus analyzer to your machine while you do this exercise, and >> set it to trigger on a write to your BAR, a hardware-savvy engineer >> should be able to diagnose the problem by looking at the analyzer's >> trace. >> >> You can try to do the arbitration yourself, using the I/O level PCI >> Express configuration mechanisms. Chapter 22 of the PCIe Mindshare >> book explains it: you write all ones to the BAR and read it back: that >> will give you the size of the memory space by clearing the bits >> corresponding to the available address space to zero. After that you >> can write the physical address to the BAR, and it should stick - well, >> of course you will need to allocate the physical address range >> yourself before you do this, or the OS will reuse that space and write >> all over your memory. >> >> One thing to watch out is that some hardware don't like to operate >> across a 4Gb boundary. I have had bad experiences with that kind of >> thing. User beware! >> >> >> Alberto. >> >> >> >> On Oct 28, 6:54 pm, Pat <P...@discussions.microsoft.com> wrote: >> > Additional info from Pci.sys ... >> > >> > PciMemoryArbiter_PreprocessEntry for arbiter 0x85eb010 >> > PCI: Allocation State after preprocessing >> > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) >> > PCI: Current Alternative: >> > PCI: Type - 3 >> > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff >> > PCI: Length - 0x10000000 Alignment - 0x1 >> > PCI: Flags - 0x2 >> > PCI: Current State: >> > PCI: Start - 0x1 End - 0x0 >> > PCI: Min - 0x0 Max - 0xffffffffffffffff >> > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 >> > PCI: >> > PciMemoryArbiter_GetNextAllocationRange for arbiter 0x85eb010 >> > PCI: Next Allocation range found >> > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) >> > PCI: Current Alternative: >> > PCI: Type - 3 >> > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff >> > PCI: Length - 0x10000000 Alignment - 0x1 >> > PCI: Flags - 0x2 >> > PCI: Current State: >> > PCI: Start - 0x1 End - 0x0 >> > PCI: Min - 0xff0000000 Max - 0xfffffffff >> > PCI: Flags - 0x0 RangeAttr - 0x0 RangeAvailAttr - 0x0 >> > PCI: >> > PciMemoryArbiter_OverrideConflict for arbiter 0x85eb010 >> > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) >> > PCI: Current Alternative: >> > PCI: Type - 3 >> > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff >> > PCI: Length - 0x10000000 Alignment - 0x1 >> > PCI: Flags - 0x2 >> > PCI: Current State: >> > PCI: Start - 0x1 End - 0x0 >> > PCI: Min - 0xff0000000 Max - 0xfffffffff >> > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 >> > PCI: >> > PciMemoryArbiter_FindSuitableRange returning 0 >> > PCI: Arbiter Allocation State for PDO 0x85ed9e0 (bus 0, slot 3) >> > PCI: Current Alternative: >> > PCI: Type - 3 >> > PCI: Minimum - 0xff0000000 Maximum - 0xfffffffff >> > PCI: Length - 0x10000000 Alignment - 0x1 >> > PCI: Flags - 0x2 >> > PCI: Current State: >> > PCI: Start - 0x1 End - 0x0 >> > PCI: Min - 0xff0000000 Max - 0xfffffffff >> > PCI: Flags - 0x0 RangeAttr - 0x4 RangeAvailAttr - 0x0 >> > PCI: >> > :: >> > [repeat 5x] >> > >> > { >> > ...nextAllocation >> > ....OverrideCOnflict >> > ...FindSoutiableRange returning 0 >> > >> > } >> > >> > So it would seem that pci.sys is "trying" the address but always >> > gets 0 >> > back in FindSuitableRange. Anybody know what >> > "PciMemoryArbiter_OverrideConflict" means ? >> > >> > - Pat >> > >> > >> > >> > "Pat" wrote: >> > > Hi everyone, >> > >> > > I need some help. I've a graphic device which allocates 3 bars. I >> > > am >> > > trying to allocate the largest aperture to above 4Gig. >> > >> > > It should reside in 0xFF0000000. >> > >> > > When Vista boots up, it seems that pci.sys allocates the other 2 >> > > bars >> > > which are below 4Gig, but will refuse to allocate the bar which is >> > > above >> > > 4Gig. In the device manager, I see >> > >> > > the frame buffer aperture : >> > > [0x0000000F F0000000 - 0x0000000F FFFFFFFF PCI standard PCI-to-Pci >> > > Bridge >> > >> > > but it has a yellow ! mark on it. If you open the properties, it >> > > says "this >> > > device >> > > cannot find enough free resource that it can use". >> > >> > > Can someone give me some pointers as to what to look or try ? >> > >> > > Using Linux, it seems that I can write to the address (and see it >> > > fill up >> > > the video >> > > screen). So at least the hardware seems to be mapped to the correct >> > > address. >> > >> > > Using Windbg, I can't seem to read the FrameBuffer when it's mapped >> > > at >> > > 0x0000000F F0000000, but I can read it ok, when it's mapped below >> > > 4Gig. I am >> > > not sure whether this is a clue, or whether WinDbg doesn't work well >> > > above >> > > 4Gig. >> > >> > > Any help would be greatly appeciated. Thanks in advance.- Hide quoted >> > > text - >> > >> > - Show quoted text - >> >> . >> |
|
|
|
|
|||
|
|||
|
|
|
| |
![]() |
| Thread Tools | |
| Display Modes | |
|
|
Similar Threads
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Run Vista legally for at least one year/ Vista Activation doesn't stop Piracy | Chad Harris | Windows Vista Installation | 56 | 12-25-2008 02:34 PM |
| dual boot xp and vista...with vista recovery dvd | VS | Windows Vista Installation | 16 | 05-05-2007 12:05 PM |
| Can Vista be installed on top of itsself? | Jeff Ingram | Windows Vista Installation | 5 | 03-20-2007 08:48 PM |
| Installing Vista on top of Vista - and then getting an Installation Error (Sony Vaio VGC-RB38G) | Chris Hagler | Windows Vista Installation | 4 | 02-16-2007 02:42 AM |
| For Dual or Single Booting With Vista | Jan Il | Windows Vista Installation | 0 | 11-03-2006 09:41 PM |
Forum Software Powered by vBulletin®, Copyright Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.2 ©2009, Crawlability, Inc. |



Linear Mode

