External Debug Support
----------------------

Freescale's e500v1 and e500v2 cores (used in mpc85xx chips) have some
restrictions on external debugging (JTAG).  In particular, for the debugger to
be able to receive control after a single step or breakpoint:
	- MSR[DE] must be set
	- A valid opcode must be fetchable, through the MMU, from the debug
	  exception vector (IVPR + IVOR15).

To maximize the time during which this requirement is met, U-Boot sets MSR[DE]
immediately on entry and keeps it set. It also uses a temporary TLB to keep a
mapping to a valid opcode at the debug exception vector, even if we normally
don't support exception vectors being used that early, and that's not the area
where U-Boot currently executes from.

Note that there may still be some small windows where debugging will not work,
such as in between updating IVPR and IVOR15.

Config Switches:
----------------

Please refer README section "MPC85xx External Debug Support"

Major Config Switches during various boot Modes
----------------------------------------------

NOR boot
                !defined(CONFIG_SYS_RAMBOOT)
NOR boot Secure
                !defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SECURE_BOOT)
RAMBOOT(SD, SPI & NAND boot)
                 defined(CONFIG_SYS_RAMBOOT)
RAMBOOT Secure (SD, SPI & NAND)
                 defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_SECURE_BOOT)
NAND SPL BOOT
                 defined(CONFIG_SYS_RAMBOOT) && defined(CONFIG_NAND_SPL)


TLB Entries during u-boot execution
-----------------------------------

Note: Sequence number is in order of execution

A) defined(CONFIG_SYS_RAMBOOT) i.e. SD, SPI, NAND RAMBOOT & NAND_SPL boot

   1) TLB entry to overcome e500 v1/v2 debug restriction
       Location   : Label "_start_e500"
       TLB Entry  : CONFIG_SYS_PPC_E500_DEBUG_TLB
       EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_MONITOR_BASE
       Properties : 256K, AS0, I, IPROT

   2) TLB entry for working in AS1
       Location   : Label "create_init_ram_area"
       TLB Entry  : 15
       EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_MONITOR_BASE
       Properties : 1M, AS1, I, G, IPROT

   3) TLB entry for the stack during AS1
       Location   : Lable "create_init_ram_area"
       TLB Entry  : 14
       EPN -->RPN : CONFIG_SYS_INIT_RAM_ADDR --> CONFIG_SYS_INIT_RAM_ADDR
       Properties : 16K, AS1, IPROT

   4) TLB entry for CCSRBAR during AS1 execution
       Location   : cpu_init_early_f
       TLB Entry  : 13
       EPN -->RPN : CONFIG_SYS_CCSRBAR --> CONFIG_SYS_CCSRBAR
       Properties : 1M, AS1, I, G

   5) Invalidate unproctected TLB Entries
       Location   : cpu_init_early_f
       Invalidated: 13

   6) Create TLB entries as per boards/freescale/<board>/tlb.c
       Location   : cpu_init_early_f --> init_tlbs()
       Properties : ..., AS0, ...
      Please note It can overwrites previous TLB Entries.

   7) Disable TLB Entries of AS1
       Location   : cpu_init_f --> disable_tlb()
       Disable    : 15, 14

   8) Update Flash's TLB entry
       Location   : Board_init_r
       TLB entry  : Search from TLB entries
       EPN -->RPN : CONFIG_SYS_FLASH_BASE --> CONFIG_SYS_FLASH_BASE_PHYS
       Properties : Board specific size, AS0, I, G, IPROT


B) !defined(CONFIG_SYS_RAMBOOT) i.e. NOR boot

   1) TLB entry to overcome e500 v1/v2 debug restriction
       Location   : Label "_start_e500"
       TLB Entry  : CONFIG_SYS_PPC_E500_DEBUG_TLB
#if defined(CONFIG_SECURE_BOOT)
       EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_PBI_FLASH_WINDOW
       Properties : 1M, AS1, I, G, IPROT
#else
       EPN -->RPN : CONFIG_SYS_MONITOR_BASE & 0xffc00000 --> 0xffc00000
       Properties : 4M, AS0, I, G, IPROT
#endif

   2) TLB entry for working in AS1
       Location   : Label "create_init_ram_area"
       TLB Entry  : 15
#if defined(CONFIG_SECURE_BOOT)
       EPN -->RPN : CONFIG_SYS_MONITOR_BASE --> CONFIG_SYS_PBI_FLASH_WINDOW
       Properties : 1M, AS1, I, G, IPROT
#else
       EPN -->RPN : CONFIG_SYS_MONITOR_BASE & 0xffc00000 --> 0xffc00000
       Properties : 4M, AS1, I, G, IPROT
#endif

   3) TLB entry for the stack during AS1
       Location   : Lable "create_init_ram_area"
       TLB Entry  : 14
       EPN -->RPN : CONFIG_SYS_INIT_RAM_ADDR --> CONFIG_SYS_INIT_RAM_ADDR
       Properties : 16K, AS1, IPROT

   4) TLB entry for CCSRBAR during AS1 execution
       Location   : cpu_init_early_f
       TLB Entry  : 13
       EPN -->RPN : CONFIG_SYS_CCSRBAR --> CONFIG_SYS_CCSRBAR
       Properties : 1M, AS1, I, G

   5) TLB entry for Errata workaround CONFIG_SYS_FSL_ERRATUM_IFC_A003399
       Location   : cpu_init_early_f
       TLB Entry  : 9
       EPN -->RPN : SRAM_BASE_ADDR --> SRAM_BASE_ADDR
       Properties : 1M, AS1, I

   6) CONFIG_SYS_FSL_ERRATUM_IFC_A003399 Adjust flash's phys addr
       Location   : cpu_init_early_f --> setup_ifc
       TLB Entry  : Get Flash TLB
       EPN -->RPN : Adjusted flash_phys --> Adjusted flash_phys
       Properties : 4M, AS1, I, G, IPROT

   7) CONFIG_SYS_FSL_ERRATUM_IFC_A003399: E500 v1,v2 debug restriction
       Location   : cpu_init_early_f --> setup_ifc
       TLB Entry  : CONFIG_SYS_PPC_E500_DEBUG_TLB
       EPN -->RPN : Adjusted flash_phys --> Adjusted flash_phys
       Properties : 4M, AS0, I, G, IPROT

   8) Invalidate unproctected TLB Entries
       Location   : cpu_init_early_f
       Invalidated: 13, 9

   9) Create TLB entries as per boards/freescale/<board>/tlb.c
       Location   : cpu_init_early_f --> init_tlbs()
       Properties : ..., AS0, ...
      Note: It can overwrites previous TLB Entries

   10) Disable TLB Entries of AS1
       Location   : cpu_init_f --> disable_tlb()
       Disable    : 15, 14

   11) Create DDR's TLB entriy
       Location   : Board_init_f -> init_func_ram -> initdram
       TLB entry  : Search free TLB entry

   12) Update Flash's TLB entry
       Location   : Board_init_r
       TLB entry  : Search from TLB entries
       EPN -->RPN : CONFIG_SYS_FLASH_BASE --> CONFIG_SYS_FLASH_BASE_PHYS
       Properties : Board specific size, AS0, I, G, IPROT
