Discussion:
What can cause error STATUS_DEVICE_POWER_FAILURE?
(too old to reply)
quyq
2010-02-04 20:04:01 UTC
Permalink
I didn't find much clue from Internet about this error code.
I'm working on a driver for a PCIe device. The driver works fine on our
setup but it does not work on two setup at remote sites. The scenario is:
The host is a HP XW4600 with Windows XP SP3 installed.
The driver is able to be installed without any problem.
However, our test code can only correctly access the device in a very short
period right after the driver installed.
Farther more, I did a test like this: from device manager, disable the PCIe
device, then enable it. For IRP_MN_START_DEVICE, my driver will setup a
complete routine and then invoke IoCallDriver to forward this Irp to bus
driver. But the returned Irp status is 0xC000009E, i.e.
STATUS_DEVICE_POWER_FAILURE. The device will disappear from the control panel
device list right after I enable it. If I do a scan for hardware then it will
show up in the device list again. And this time, there is no power failure
error returned. As I mentioned above, test code can access the device right
at this point but will not work after a short period.
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
I'm suspecting this is a hardware defect. Our remote site already tried to
test it with same model PC as we used. They also tried two PCIe device setup
but the result is same.
Any suggestion for what could go wrong? BTW, the PCIe device has it own
power supply, so current should not be a problem. The device is a FPGA with
3rd party's IP.
Thanks in advance.
Maxim S. Shatskih
2010-02-04 20:15:36 UTC
Permalink
Post by quyq
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
Is it a KMDF driver?
--
Maxim S. Shatskih
Windows DDK MVP
***@storagecraft.com
http://www.storagecraft.com
quyq
2010-02-05 21:04:01 UTC
Permalink
No, it's not. The driver is updated from an old WDM driver that we developed
about five years ago. The driver basically just provide user space
application to access resource on the PCIe device. Here is psedu log when the
device is enabled:
DriverEntry -begin
DriverEntry -end
AddDevice -begin
AddDevice -end
DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
DispatchPnp end with STATUS_NOT_SUPPORTED
DispatchPnp begin, MinorFunction IRP_MN_FILTER_RESOURCE_REQUIREMENTS:
DispatchPnp end with STATUS_SUCCESS
DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
IrpCompleteRoutine return
Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE

With good setup, the last line of above log should be STATUS_SUCCESS.
Note, for above IRP, our driver only handle the START_DEVICE one. So I don't
think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
Thanks.
Post by Maxim S. Shatskih
Post by quyq
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
Is it a KMDF driver?
--
Maxim S. Shatskih
Windows DDK MVP
http://www.storagecraft.com
.
Pavel A.
2010-02-06 21:16:55 UTC
Permalink
Do you get this status from some driver below yours, after passing the
IRP_MN_START_DEVICE down the stack?
WinXP does not know what is PCIe, so it should not be something specific to
PCIe.
Except if this indeed is a hardware failure, which the pci bus driver
detects in a generic way.
For example, _if_ it tries to set the power state register in the config
space to D0,
but the read-back value is unexpected.
--pa
Post by quyq
No, it's not. The driver is updated from an old WDM driver that we developed
about five years ago. The driver basically just provide user space
application to access resource on the PCIe device. Here is psedu log when the
DriverEntry -begin
DriverEntry -end
AddDevice -begin
AddDevice -end
DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
DispatchPnp end with STATUS_NOT_SUPPORTED
DispatchPnp end with STATUS_SUCCESS
DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
IrpCompleteRoutine return
Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE
With good setup, the last line of above log should be STATUS_SUCCESS.
Note, for above IRP, our driver only handle the START_DEVICE one. So I don't
think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
Thanks.
Post by Maxim S. Shatskih
Post by quyq
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
Is it a KMDF driver?
--
Maxim S. Shatskih
Windows DDK MVP
http://www.storagecraft.com
.
quyq
2010-02-08 20:06:10 UTC
Permalink
Yes, the status is returned from driver below ours. I guess it is Microsoft's
PCI bus driver. I also studied some Microsoft document(white paper) that
claimed windows XP will treat PCIe device same way as PCI. AFAIK, our PCIe
device does not need any special configuration for power state. The weird
thing is sometimes the windows XP bus driver can successfully start the
device without any error returned, but after several seconds our application
will lost the accessibility to the device. We are also suspecting some float
hardware pin is causing problem. I'm trying to get the h/w from our remote
site.
Post by Pavel A.
Do you get this status from some driver below yours, after passing the
IRP_MN_START_DEVICE down the stack?
WinXP does not know what is PCIe, so it should not be something specific to
PCIe.
Except if this indeed is a hardware failure, which the pci bus driver
detects in a generic way.
For example, _if_ it tries to set the power state register in the config
space to D0,
but the read-back value is unexpected.
--pa
Post by quyq
No, it's not. The driver is updated from an old WDM driver that we developed
about five years ago. The driver basically just provide user space
application to access resource on the PCIe device. Here is psedu log when the
DriverEntry -begin
DriverEntry -end
AddDevice -begin
AddDevice -end
DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
DispatchPnp end with STATUS_NOT_SUPPORTED
DispatchPnp end with STATUS_SUCCESS
DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
IrpCompleteRoutine return
Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE
With good setup, the last line of above log should be STATUS_SUCCESS.
Note, for above IRP, our driver only handle the START_DEVICE one. So I don't
think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
Thanks.
Post by Maxim S. Shatskih
Post by quyq
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
Is it a KMDF driver?
--
Maxim S. Shatskih
Windows DDK MVP
http://www.storagecraft.com
.
Sergey Login
2010-09-21 10:00:17 UTC
Permalink
Hi, we have the same problem with our device and our WDM driver. Did you find solution? Thank you.
I did not find much clue from Internet about this error code.
I am working on a driver for a PCIe device. The driver works fine on our
The host is a HP XW4600 with Windows XP SP3 installed.
The driver is able to be installed without any problem.
However, our test code can only correctly access the device in a very short
period right after the driver installed.
Farther more, I did a test like this: from device manager, disable the PCIe
device, then enable it. For IRP_MN_START_DEVICE, my driver will setup a
complete routine and then invoke IoCallDriver to forward this Irp to bus
driver. But the returned Irp status is 0xC000009E, i.e.
STATUS_DEVICE_POWER_FAILURE. The device will disappear from the control panel
device list right after I enable it. If I do a scan for hardware then it will
show up in the device list again. And this time, there is no power failure
error returned. As I mentioned above, test code can access the device right
at this point but will not work after a short period.
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
I am suspecting this is a hardware defect. Our remote site already tried to
test it with same model PC as we used. They also tried two PCIe device setup
but the result is same.
Any suggestion for what could go wrong? BTW, the PCIe device has it own
power supply, so current should not be a problem. The device is a FPGA with
3rd party's IP.
Thanks in advance.
Post by Maxim S. Shatskih
bus.
Is it a KMDF driver?
--=20
Maxim S. Shatskih
Windows DDK MVP
http://www.storagecraft.com
No, it is not. The driver is updated from an old WDM driver that we developed
about five years ago. The driver basically just provide user space
application to access resource on the PCIe device. Here is psedu log when the
DriverEntry -begin
DriverEntry -end
AddDevice -begin
AddDevice -end
DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
DispatchPnp end with STATUS_NOT_SUPPORTED
DispatchPnp end with STATUS_SUCCESS
DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
IrpCompleteRoutine return
Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE
With good setup, the last line of above log should be STATUS_SUCCESS.
Note, for above IRP, our driver only handle the START_DEVICE one. So I do not
think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
Thanks.
Post by Pavel A.
Do you get this status from some driver below yours, after passing the
IRP_MN_START_DEVICE down the stack?
WinXP does not know what is PCIe, so it should not be something specific to
PCIe.
Except if this indeed is a hardware failure, which the pci bus driver
detects in a generic way.
For example, _if_ it tries to set the power state register in the config
space to D0,
but the read-back value is unexpected.
--pa
Post by quyq
Yes, the status is returned from driver below ours. I guess it is Microsoft's
PCI bus driver. I also studied some Microsoft document(white paper) that
claimed windows XP will treat PCIe device same way as PCI. AFAIK, our PCIe
device does not need any special configuration for power state. The weird
thing is sometimes the windows XP bus driver can successfully start the
device without any error returned, but after several seconds our application
will lost the accessibility to the device. We are also suspecting some float
hardware pin is causing problem. I am trying to get the h/w from our remote
site.
Submitted via EggHeadCafe - Software Developer Portal of Choice
Silverlight Binary Serialization and Compression with WCF Services
http://www.eggheadcafe.com/tutorials/aspnet/96487d4c-d92f-4ca5-85b7-0fef6f42d6c3/silverlight-binary-serialization-and-compression-with-wcf-services.aspx
Pavel A.
2010-09-21 11:35:00 UTC
Permalink
Is your device also an FPGA? If yes, is it a demo/evaluation
board provided by FPGA vendor, or your own brew?
-- pa
Post by Sergey Login
Hi, we have the same problem with our device and our WDM driver. Did you
find solution? Thank you.
I did not find much clue from Internet about this error code.
I am working on a driver for a PCIe device. The driver works fine on our
The host is a HP XW4600 with Windows XP SP3 installed.
The driver is able to be installed without any problem.
However, our test code can only correctly access the device in a very short
period right after the driver installed.
Farther more, I did a test like this: from device manager, disable the PCIe
device, then enable it. For IRP_MN_START_DEVICE, my driver will setup a
complete routine and then invoke IoCallDriver to forward this Irp to bus
driver. But the returned Irp status is 0xC000009E, i.e.
STATUS_DEVICE_POWER_FAILURE. The device will disappear from the control panel
device list right after I enable it. If I do a scan for hardware then it will
show up in the device list again. And this time, there is no power failure
error returned. As I mentioned above, test code can access the device right
at this point but will not work after a short period.
Our PCIe driver is really simple, it does not directly handle any IRP
related to power management. All such IRP will be forward to low level bus.
I am suspecting this is a hardware defect. Our remote site already tried to
test it with same model PC as we used. They also tried two PCIe device setup
but the result is same.
Any suggestion for what could go wrong? BTW, the PCIe device has it own
power supply, so current should not be a problem. The device is a FPGA with
3rd party's IP.
Thanks in advance.
Post by Maxim S. Shatskih
bus.
Is it a KMDF driver?
--=20
Maxim S. Shatskih
Windows DDK MVP
http://www.storagecraft.com
No, it is not. The driver is updated from an old WDM driver that we developed
about five years ago. The driver basically just provide user space
application to access resource on the PCIe device. Here is psedu log when the
DriverEntry -begin
DriverEntry -end
AddDevice -begin
AddDevice -end
DispatchPnp begin, MinorFunction IRP_MN_QUERYLEGACY_BUS_INFORMATION
DispatchPnp end with STATUS_NOT_SUPPORTED
DispatchPnp end with STATUS_SUCCESS
DispatchPnp begin, MinorFunction IRP_MN_START_DEVICE
IrpCompleteRoutine return
Return status is 0xc000009e: STATUS_DEVICE_POWER_FAILURE
With good setup, the last line of above log should be STATUS_SUCCESS.
Note, for above IRP, our driver only handle the START_DEVICE one. So I do not
think the STATUS_NOT_SUPPORTED for the query IRP is a problem.
Thanks.
Post by Pavel A.
Do you get this status from some driver below yours, after passing the
IRP_MN_START_DEVICE down the stack?
WinXP does not know what is PCIe, so it should not be something specific to
PCIe.
Except if this indeed is a hardware failure, which the pci bus driver
detects in a generic way.
For example, _if_ it tries to set the power state register in the config
space to D0,
but the read-back value is unexpected.
--pa
Post by quyq
Yes, the status is returned from driver below ours. I guess it is Microsoft's
PCI bus driver. I also studied some Microsoft document(white paper) that
claimed windows XP will treat PCIe device same way as PCI. AFAIK, our PCIe
device does not need any special configuration for power state. The weird
thing is sometimes the windows XP bus driver can successfully start the
device without any error returned, but after several seconds our application
will lost the accessibility to the device. We are also suspecting some float
hardware pin is causing problem. I am trying to get the h/w from our remote
site.
Submitted via EggHeadCafe - Software Developer Portal of Choice
Silverlight Binary Serialization and Compression with WCF Services
http://www.eggheadcafe.com/tutorials/aspnet/96487d4c-d92f-4ca5-85b7-0fef6f42d6c3/silverlight-binary-serialization-and-compression-with-wcf-services.aspx
eagersh
2010-09-23 15:56:28 UTC
Permalink
Post by Sergey Login
Hi, we have the same problem with our device and our WDM driver. Did you find solution? Thank you.
You should provide more information. Did you debug the driver by using
WinDng?
If you suspect that it is a hardware problem try to use a PCI bus
analyzer.

Igor Sharovar

Loading...