©2018 by Zach Pfeffer


Why don't I see PMUFW XPfw_Printfs: A Debug Story

June 5, 2018

 This post list my debug of why I don't see XPfw_Print() output from PMUFW included in PetaLinux Tools 2017.4.




There's no UART output because the PS UART is not on when I load PMUFW.




Rebuild PMUFW and load it





I don't see this print from XPfw_Main():




Hypothesis 1

I don't see XPfw_Printf because there's a missing DEBUG define



Where is XPfw_Printf?




Relevant Lines in xpfw_debug.h:


Test Hypothesis 1




Use #error's in the code and recompile. See link for how to recompile PMUFW.


Compile Output



Who defines XPFW_PRINT?


Its not defined on the command line, no -DXPFW_PRINT




Defined in xpfw_config.h

Which is included in xpfw_default.h as seen here




...which was referenced in the debug output.


Hypothesis 1 Conclusion

Hypothesis 1 is not true. There is a define that should allow me to see DEBUG_PRINT_ALWAYS.



Hypothesis 2

I never get to the print. 



Use an infinite loop before the print and break in with xsct over JTAG.





Add the path to it to PATH in a local window:

Check it:

 Run it, look at xsct output

 Find XPfw_Main 


In xsct


Run targets

Read the registers

The PC matches the bri line from above. So that shows we can get to this line of code.



Do I get into the print, does the print do anything?


Look for  any XPfw_Printf's

 Empty! Weird.


If I remove the spin loop, will the XPfw_Printf's still be present?




Start stepping into prints


Set a breakpoint on 0xffdc7270


To set the breakpoint:


Enumerate targets


Select the PMU and dump registers


Set the breakpoint


Hmm... can't set a hardware breakpoint, set a software breakpoint instead:

Reset unit via external power suppy



Continue setting breakpoints until the the UART FIFO gets written


See the breakpoint on 0xffdc7270, the call to xil_printf, get hit


Step one instruction


Look at the backtrace


Step one instruction and disassemble


Correlate addresses with instructions


Set a breakpoint on outbyte, continued, dissemble, look at the backtrace


Correlate addresses with instructions



Get the address


Set a breakpoint on the instruction that actually writes to the UART hardware ands continue until you get to that line



Decode swi r6, r5, 48 with the Registers








r6 (rD) is 0x50

r5 (rA) is 0xff000000

IMM is 48 or 0x30


Replacing text: Store 0x50 (Ascii 'P') to 0xff000030

The P comes from "PMU Firm...":

0xff000030 is the TX FIFO of UART 0


Try reading and writing to of ff000030 from xsct



There is no output because the UART is not on at this point! I'm loading the PMUFW first with:


And the other systems are reporting:

So I either need to wait longer to see these prints, print them to UART1 or figure out something else. 




  • The Xilinx graphic is from link

  • MicroBlaze Processor Reference Guide UG984 (v2018.1) April 4, 2018 @ link

  • ASCII Table @ link

  • UART0 register spec @ link



Please reload

Our Recent Posts

A Fix for "You don't have permission to create items on this site: https://yoursite.sharepoint.com/sites/pwa"

September 25, 2019

Create a Tree-View of a Directory on Linux with 'tree'

August 17, 2019

Use draw.io in Google Drive (and Get Rid of draw.io )

June 30, 2019

Please reload


Please reload