We are debugging u-boot using CodeWarrior on our new processor board with an MPC8572E.
We are currently blocked in our development. We are having problems with CodeWarrior
hardware breakpoints, and we are at a point in our investigation where we need Freescale support.
Here the situation:
We understand that in order to get hardware breakpoints to work we need:
1- A valid address with a valid instruction at IPVR (IVOR15),
2- DE bit enable in MSR register, and
3- To avoid problems; always set breakpoints before or after code which accesses SRR0 and SRR1, and never step through such code.
We are trying to get hw breakpoints to work directly after a processor hard reset.
The processor starts with the default POR processor config, plus the changes done as per our CodeWarrior init script.
Initially HW breakpoint works, but in u-boot we change IVPR from 0x0000_0000 (set to 0 in our init script) to 0xEFF8_0000.
0xEFF8_0000 is not valid at this point. Shortly after setting the interrupt vectors, we create a 4M TLB entry in AS1 for 0xEFF8_0000.
We do this as follow:
/* create a temp mapping in AS1 to the 4M boot window (15) */
lis r6,FSL_BOOKE_MAS0(TLB_1, CONFIG_SYS_TLBN_FLASH, 0)@h --- > CONFIG_SYS_TLBN_FLASH is 15
ori r6,r6,FSL_BOOKE_MAS0(TLB_1, CONFIG_SYS_TLBN_FLASH, 0)@l
lis r7,FSL_BOOKE_MAS1(1, 1, 0, AS1, BOOKE_PAGESZ_4M)@h
ori r7,r7,FSL_BOOKE_MAS1(1, 1, 0, AS1, BOOKE_PAGESZ_4M)@l
lis r8,FSL_BOOKE_MAS2(TEXT_BASE & 0xffc00000, (MAS2_I|MAS2_G))@h ----> TEXT_BASE is 0xEFF8_0000
ori r8,r8,FSL_BOOKE_MAS2(TEXT_BASE & 0xffc00000, (MAS2_I|MAS2_G))@l
/* The 85xx has the default boot window 0xff800000 - 0xffffffff */
lis r9,FSL_BOOKE_MAS3(0xffc00000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@h
ori r9,r9,FSL_BOOKE_MAS3(0xffc00000, 0, (MAS3_SX|MAS3_SW|MAS3_SR))@l
After this point 0xEFF8_0000 should be valid and H/W breakpoint should work… it does not.
We have also verify that:
- Address Space is 1 (MSR IS and DS are both set to 1),
- Debug interrupt is enable (MSR DE is 1), and
- The effect of the TLB update is visible (rfi instruction should cause this to occur).
Some code is actually doing this shortly after setting the TLB entry above…
Still does not work!!
After doing all this, and looking into the forums and documentations, we are still puzzled why hardware breakpoint does not work.
Is our understanding correct? What else should we verify?
We have captured the content of few registers right after the hard reset, in case this info is needed;
Other LAW regs, all 0.