• Join
  • Sign In with my.TI Login
Texas Instruments
  • Products
  • Applications
  • Tools & Software
  • Support & Community
  • Sample & Buy
  • About TI
Sample & Purchase Cart Sample & Purchase Cart
  • Search
  • Advanced
TI E2E™ Community
  • Support Forums
  • Blogs
  • Groups
  • Videos
  • 简体中文
  • More ...
TI Home » TI E2E Community » Support Forums » Digital Signal Processors (DSP) » C6000 Single Core DSP » C64x Single Core DSP Forum » C6454 PCI autoinitialization and PCI bus hang
Share
C6000 Single Core DSP
  • Forums
  • Announcements
Options
  • Subscribe via RSS

C6454 PCI autoinitialization and PCI bus hang

C6454 PCI autoinitialization and PCI bus hang

This question is not answered
Torbjorn Bakke
Posted by Torbjorn Bakke
on Mar 26 2012 12:18 PM
Prodigy20 points

Hi,

we are currently struggling with an issue related to PCI autoinitialization using an external 24C1024 eeprom connected to the C6454.  The C6454 is connected through an XIO2001 PCIe bridge to a Patsburg (Sandy bridge) chipset on the other end.  What we observe is that when the eeprom is correctly programmed with a correct checksum according to SPRUE60 chapter 12.4, then autoinitalization works correctly, and the device appears on the PC side with our SubVEN + SubDID as intended and the Vendor+ Device is also correct as 0x104C / 0xB000.  The bootmode used is 14 (for PCI boot). 

Reading out the JTAG device registers, we see Mfg ID=0x0017,Part=0x008A, variant=0x0002, which according to the SPRZ234 table 3 corresponds to silicon revision 2.1.  The PCI bus is clocked at 66 MHz.

Now, before the eeprom has been programmed, it normally contains all FF (or random data) which means that the checksum of the PCI autoinitialization data will be wrong, and the DSP will reread the eeprom contents 50 (!) times before loading the default PCI configuration into the PCI config space.  In our application, CLKIN1=50 MHz, and according to SPRUEC6G this means that the I2C bus is clocked at CLKIN1/6600 = 7.57 kHz.  At 50 retries, the default PCI configuration will not be loaded until close to 10 seconds has passed !!! 

During those 10 seconds, any attempt to access the PCI config space over the PCI bus (during BIOS enumeration of PCI devices) will lock up the PCI bus causing the PC to hang indefinitely - i.e. beyond those 10 seconds.  No BIOS will (or should) wait for 10 seconds before trying to enumerate PCI devices, thus this is a major problem for the PCI boot mode.

Again, according to SPRUEC6G, table 8, it seems the I2C clock was clocked at a more reasonable 113 kHz (at CLKIN=50 MHz) for silicon revision 1.1 when using bootmode 14, but that this was changed when making silicon revision 2.1.

What we would like to do is to detect a "default PCI config" during PC enumeration, and then download a small program to configure the eeprom with the correct values to be used for autoinitilization.  This currently seems impossible, unless there is a way to increase the default speed of the I2C bus for PCI init (bootmode 14) or reduce the number of retries from 50 to something more reasonable, like 0, 1 or 2.  So, to my questions:

How can we reduce the time before the default PCI configuration is loaded upon PCI eeprom checksum failure?

How can we avoid the PCI and the PCIe buses being hung when the DSP does not respond to config space accesses while the eeprom is being re-read by the builtin bootloader?

Thanks ,
Torbjorn

C64+ 6455 C6455 Boot Mode bootloader PCI boot I2C TMS320C6455 C6454 booting TMS320C64x enumeration autoinitialization hung hang
Report Abuse
  • Reply
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
All Replies
  • Brad Griffis
    Posted by Brad Griffis
    on Mar 28 2012 21:33 PM
    Guru57425 points

    Torbjorn Bakke
    How can we reduce the time before the default PCI configuration is loaded upon PCI eeprom checksum failure?

    I've been reading through the bootloader documentation trying to figure out something to help you.  I'm not positive, but I think I may have found a way.

    1. Switch to I2C boot mode.
    2. You'll need a boot parameter table at the start of the EEPROM formatted like Tables 5 and 6.
    3. In particular you will setup "boot mode" in your table as "host boot".  I believe "options" should be "boot parameter mode".  You will be able to specify a faster I2C speed, e.g. 400 kHz, in this table.

    Based on my reading of the doc (sorry, I have not actually tried a "fancy" boot like this one) it appears that it should start with I2C boot, reconfigure I2C for 400 kHz, and then reboot to the PCI auto-init mode but now with 400 kHz I2C.

    Hopefully I'm not steering you wrong here -- I was hesitant to reply but since you've not gotten any other replies I thought I would go for it...  Another option would be to use the I2C to directly load a small, simple bootloader to memory.  Your bootloader code could then configure the I2C at the appropriate speed and setup the PCI in a more timely manner.

    ---------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.
    --------------------------------------------------------------------------------------------------------- 

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Torbjorn Bakke
    Posted by Torbjorn Bakke
    on Mar 29 2012 04:32 AM
    Prodigy20 points

    Thank you for getting back to me on this, it is much appreciated.

    I agree that if we switch to I2C boot mode for the initial boot, it may perhaps be possible to increase the I2C  frequency for a subsequent pci boot.  However, getting back to the initial issue which was related to starting with an unprogrammed eeprom and downloading a software snippet to program it, it wouldn't help much.  The only difference would really be that we would have to pre-program the eeprom with the I2C bootloader instead of the PCI config space data. 

    I guess this means that the programming of the I2C eeprom will have to be done during boundary scan testing and that it cannot be deferred to a later test stage by downloading a "eeprom-initialization" program to the dsp.  In that case, we might as well program the PCI config space data directly instead of making a more complex boot sequence.

    If the eeprom is corrupted for some reason (however unlikely), the resulting PCI hang will limit our ability to detect the root cause of booting errors in our end product (at a customer site), but it will be manageable.

    It seems to me that this should have been working fine on silicon revision 1.1, but that the mechanism was broken with the updated bootloader that was introduced with silicon revisions 2.1 and 3.1 (because of the reduced I2C clock frequency in PCI boot mode).

    In my opinion, the C6454/C6455 errata (SPRZ234) should be updated to describe this behaviour, and that PCI / PCIe hangs may occur on the host as a result.

    Thank you for your support :) 

     

    6455 C6455 Boot Mode bootloader PCI C645x boot I2C TMS320C6455 C6454 booting C64x+
    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
  • Brad Griffis
    Posted by Brad Griffis
    on Mar 29 2012 06:44 AM
    Guru57425 points

    Ok, now your scenario makes more sense to me.  I was a bit confused by why the EEPROM was blank in the first place, but now I get it.  I agree that it would be best to avoid the scenario altogether by programming the PCI init values into the EEPROM during manufacturing.  That should also make the complex bootloader unnecessary.

    ---------------------------------------------------------------------------------------------------------

    Please click the Verify Answer button on this post if it answers your question.
    --------------------------------------------------------------------------------------------------------- 

    Report Abuse
    • Reply
    You have posted to a forum that requires a moderator to approve posts before they are publicly available.
TI E2E™ Community
  • Support Forums
  • Blogs
  • Videos
  • Groups
  • Site Support & Feedback
  • Settings
TI E2E™ Community Groups
  • TI University Program
  • Make the Switch
  • Microcontroller Projects
  • Motor Drive & Control
Other Communities
  • Deyisupport
  • Designsomething.org
  • beagleboard.org
  • TI on Element 14
  • TI on TechXchangeSM
Other Technical & Support Resources
  • WEBENCH® Design Center
  • Product Information Centers
  • Technical Documents
  • TI Design Network
  • TI Technical Articles
  • TI Training

All content and materials on this site are provided "as is". TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with regard to these materials, including but not limited to all implied warranties and conditions of merchantability, fitness for a particular purpose, title and non-infringement of any third party intellectual property right. TI and its respective suppliers and providers of content make no representations about the suitability of these materials for any purpose and disclaim all warranties and conditions with respect to these materials. No license, either express or implied, by estoppel or otherwise, is granted by TI. Use of the information on this site may require a license from a third party, or a license from TI.

Content on this site may contain or be subject to specific guidelines or limitations on use. All postings and use of the content on this site are subject to the Terms of Use of the site; third parties using this content agree to abide by any limitations or guidelines and to comply with the Terms of Use of this site. TI, its suppliers and providers of content reserve the right to make corrections, deletions, modifications, enhancements, improvements and other changes to the content and materials, its products, programs and services at any time or to move or discontinue any content, products, programs, or services without notice.

Follow Us Texas Instruments on Facebook Texas Instruments on Twitter Texas Instruments on LinkedIn Texas Instruments on Google+
TI Worldwide | Contact Us | my.TI Login | Site Map | Corporate Citizenship | mobile m.ti.com (Mobile Version)

TI is a global semiconductor design and manufacturing company. Innovate with 100,000+ analog ICs and
embedded processors, along with software, tools and the industry’s largest sales/support staff.

© Copyright 1995-2013 Texas Instruments Incorporated. All rights reserved.
Trademarks | Privacy Policy | Terms of Use