UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 29236

Endpoint Block Plus Wrapper for PCI Express - How should the user application respond to requests targeting Expansion ROM? System hangs during Boot process

Description


The Block Plus Wrapper implements a 1 MB Expansion ROM by default. The user cannot disable this Expansion ROM.

How should the user application respond to system read requests when not using the Expansion ROM?

Solution


How should accesses to this Expansion ROM be addressed by the back end user application?

By default, the Xilinx Endpoint Block Plus for PCI Express v1.9.1 solution implements a 1 MB Expansion ROM BAR. During enumeration, System software often sends memory read requests down to the endpoint targeting this BAR. These requests must be completed by the user application. If a completion is not generated, system software might lock up or produce an error in the console. Below is an example of one common error that is reported by the BIOS:

"I/O card parity interrupt at XXXX Type (S)hut off NMI, (R)eboot, other keys to continue"


The recommended way to handle Expansion ROM accesses is described in the core's User Guide (UG341) on page 43:

"Accesses to the Expansion ROM BAR are indicated by trn_rbar_hit[6] assertion. Xilinx recommends that users return a Completion with Data of all zeroes if the Expansion ROM is not in use. Xilinx has found that some system BIOSs will probe the Expansion ROM BAR during boot. Not returning a completion results in a completion timeout on the requesting device, which may lead to a system hang."


Revision History

09/07/2007 - Initial Release.
01/12/2009 - Updated for v1.9.1 core.
AR# 29236
Date Created 10/28/2007
Last Updated 12/15/2012
Status Active
Type General Article
IP
  • Virtex-5 Integrated Endpoint Block