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

DOE PAMS Specialties

September 5, 2020

Good Link for HOWTO Bring an Off-Screen Window Back Onto Screen for Windows 10, 8, 7, and Vista

September 5, 2020

Connect to and Control a Synaccess NPC-22 netCommander from Ubuntu 16.04.3 Running in a VirtualBox VM via a Prolific Technology Inc. USB to Serial Port Converter to Turn a Target On and Off

September 4, 2020

Please reload


Please reload


©2020 by Zach Pfeffer