PCIe device cannot start (Code 10) on Windows 7

xxxxx@yahoo.com.cn wrote:

It seems that system does not return the “256M-64M” device.
Just because PC BIOS start before uboot?
BAR 4 size is determined by PC BIOS,and can not be changed after PC BIOS started??

The BIOS creates a “description” of the device tree at boot time,
through ACPI, and passes it along to Windows.

Your results shouldn’t surprise you. A PCI-derived device cannot change
its BARs unless it gets re-enumerated, and that’s only going to happen
if it gets unplugged and replugged. The bus driver doesn’t go along
periodically rescanning the bus to see if any BARs have changed.

The newer systems support PCIe hot-plugging, and the PnP manager should
go rebalance the resources to make it fit. Do you have a way to have
your device drop off the bus, but still remember the new BAR size?


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

>>Do you have a way to have
your device drop off the bus, but still remember the new BAR size?

3ks.Do you mean that our device remember the new BAR size when PC restart?
I think this is difficult because PCIe device is been reset when PC restart.

I used four PCIe device in my system.
Memory RAM I used is 4GB.
I found only 1.49GB memory can be used.
Even if I unplug the four PCIe device,
and scan for hardware changes in device manager.
The four PCIe devices disappeared in device manager.
But it is only 1.49GB memory can be used also.

>>XP and 2003 are not pcie aware. Vista, 2008 and w7 are.
Pretty clear it is a pcie specific problem.

Doron,I’m sorry to trouble again.
Hope you will help me.
1 I’m not quite understand this.Could you please give me more talk about this?

2 Pcie specific problem involves a very wide range of things.
Which direction should I check?

3 IoCallDriver failed,status is 0xC0000001(STATUS_UNSUCCESSFUL).
When function driver do IoCallDriver and IRP to the Next Lower Driver(bus driver).
What will be checked when bus driver handled the IRP_MN_START_DEVICE PnP request?
What operation will be taked by hw at the same time?

There isn’t much more I can help you with. You need to debug this. Basically before vista,the OS was on PCI aware so the PCI (not pcie) parts of your hardware appear to be fine. Some piece of your pcie implementation is not correct or windows does not like. It is a wide range of things that can go wrong, it is your hw though. You need to debug it.

d

-----Original Message-----
From: xxxxx@lists.osr.com [mailto:xxxxx@lists.osr.com] On Behalf Of xxxxx@yahoo.com.cn
Sent: Thursday, June 30, 2011 9:23 AM
To: Windows System Software Devs Interest List
Subject: RE:[ntdev] PCIe device cannot start (Code 10) on Windows 7

>XP and 2003 are not pcie aware. Vista, 2008 and w7 are.
Pretty clear it is a pcie specific problem.

Doron,I’m sorry to trouble again.
Hope you will help me.
1 I’m not quite understand this.Could you please give me more talk about this?

2 Pcie specific problem involves a very wide range of things.
Which direction should I check?

3 IoCallDriver failed,status is 0xC0000001(STATUS_UNSUCCESSFUL).
When function driver do IoCallDriver and IRP to the Next Lower Driver(bus driver).
What will be checked when bus driver handled the IRP_MN_START_DEVICE PnP request?
What operation will be taked by hw at the same time?


NTDEV is sponsored by OSR

For our schedule of WDF, WDM, debugging and other seminars visit:
http://www.osr.com/seminars

To unsubscribe, visit the List Server section of OSR Online at http://www.osronline.com/page.cfm?name=ListServer

xxxxx@yahoo.com.cn wrote:

>> Do you have a way to have your device drop off the bus, but still remember the new BAR size?
3ks.Do you mean that our device remember the new BAR size when PC restart?
I think this is difficult because PCIe device is been reset when PC restart.

Then how do you expect this to work? A PCI BAR cannot change size
dynamically. (Actually, the standard does have a mechanism for that,
but it is not commonly implemented in hardware). In order to have your
new BAR size acknowledged, your device must be re-enumerated. It can do
that without rebooting if it disconnects itself from the bus, and then
reconnects.

I used four PCIe device in my system.
Memory RAM I used is 4GB.
I found only 1.49GB memory can be used.

What do you mean by that? The amount of virtual memory available to
applications is completely unrelated to the layout of your devices and
physical memory. Do you mean only 1.49GB of physical address space is
available for devices? That’s a decision made by your BIOS, and again
is not related to the devices that are plugged in.

Even if I unplug the four PCIe device,
and scan for hardware changes in device manager.
The four PCIe devices disappeared in device manager.
But it is only 1.49GB memory can be used also.

Again, if you are talking about application memory, then of course this
is true. There is no relation between the two.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.

>>if it disconnects itself from the bus, and then
reconnects.
how realize this?

>What do you mean by that?

I clicked “computer->system properties->system”,and see
“Install Memory(RAM) 4GB(1.49G usable)”

xxxxx@yahoo.com.cn wrote:

>> if it disconnects itself from the bus, and then reconnects.
how realize this?

It’s a PCIExpress bus operation. Your hardware would have to do this.

>> What do you mean by that?
I clicked “computer->system properties->system”,and see
“Install Memory(RAM) 4GB(1.49G usable)”

That value is not going to change as the system runs. Some of the
server versions of Windows support dynamic memory resizing, but the
consumer versions do not. The “usable” level is decided at boot time.

This would be different on Windows 7 64-bit, by the way. The reason the
“usable” level is so small is that the 32-bit systems do not handle any
physical addresses above 4GB. Because you need a 2.5GB “hole” to hold
your PCI devices, the BIOS had to move 2.5GB of your RAM above the 4GB
mark, where it is now invisible. It would be visible in a 64-bit system.


Tim Roberts, xxxxx@probo.com
Providenza & Boekelheide, Inc.