Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Initial instruction

  • Execution after reset starts at 0xfffffffc
    • A branch instruction (either b or ba; 26 bit ramge) to some boot code is loaded here
      • The Xilinx example branches to in block RAM (bram) at 0xffffff00
      • The RTEMS example branches to download_entry (but I'm not sure how)
    • Potentially a sc (system call) instruction could be loaded here? Any advantage to this?
      • Probably not as the corresponding ivor register (PPC 440) is not loaded yet
      • The PPC 405 doesn't have ivor registers, so it would continue executing at the system call vector

...

  1. dlEntry.s

    This is written for the PPC 440 found in Xilinx Virtex 5 parts.
  • In our case, the boot code starts at startup
    • Other names are start, download_entry and __rtems_entry_point
  • Boot code vaguely follows the "Initialization Software Requirements" outlined in the PowerPPC 440x5 Embedded Processor Core User's Manual v7.1 from IBM
    • Why only "vaguely"?
  • Clear MSR
  • Disable debug events
  • Configure instruction and data cache registers
  • Set up decrementer and timer registers
  • Clear exception registers ECR and XER
  • Invalidate instruction and data caches
  • Clear the CPU reservation bit
  • Set up CCR0, CCR1, MMUCR, CRF (question) and CTR
  • Set up TLB pages
  • Set up debug events
  • Set up EABI and SYSV environment
  • Clear out BSS section
  • Load vector offset register
  • Set up TOC ((question) r2 overwritten?)
  • Set up initial stack
  • Set up argument registers r3, r4 and r5
  • Branch to boot_card()

...

  1. boot_card()

  • Command line is in first argument
  • Disable interrupts
  • Store command line
  • Call bsp_start()
  • Determine RTEMS work area and heap
  • Initialize RTEMS data structures
  • Initialize the C library
  • Call bsp_pretasking_hook()
  • Optional: Enable RTEMS debugging capabilities
  • RTEMS initialization before loading device drivers
  • Call bsp_predriver_hook()
  • Initialize device drivers
  • Call bsp_postdriver_hook()
  • Start multitasking
    • Thread with entry point Init runs
    • Not clear how this returns. Perhaps when the last task is deleted?
  • Call bsp_cleanup()
  • Return to start code
    • Not clear what's in the lr at this point, i.e., where do we return to?

...

  1. RTEMS BSP

  • bsp_start()
  • bsp_pretasking_hook()
  • bsp_predriver_hook()
  • bsp_postdriver_hook()
  • bsp_cleanup()