From 80316c829d0c56b67eb60c39fe3fd6266b314860 Mon Sep 17 00:00:00 2001 From: Konstantin Porotchkin Date: Thu, 23 Mar 2017 17:22:55 +0200 Subject: scripts: Add XDB debugger scripts for A7K/A8K platforms Add XDB scripts for A7K/A8K platforms Change-Id: I43577d83fe252a0a72f98df8bbd224a5091b189f Signed-off-by: Haim Boot Signed-off-by: Konstantin Porotchkin Reviewed-on: http://vgitil04.il.marvell.com:8080/37919 --- scripts/debugger/xdb_debug.xdb | 53 ++++++++++++++++++++ scripts/debugger/xdb_scripts/atf.xdb | 53 ++++++++++++++++++++ scripts/debugger/xdb_scripts/axi-dap-a8k.xdb | 5 ++ scripts/debugger/xdb_scripts/binary_extension.xdb | 60 +++++++++++++++++++++++ scripts/debugger/xdb_scripts/bootloader.xdb | 28 +++++++++++ 5 files changed, 199 insertions(+) create mode 100644 scripts/debugger/xdb_debug.xdb create mode 100644 scripts/debugger/xdb_scripts/atf.xdb create mode 100644 scripts/debugger/xdb_scripts/axi-dap-a8k.xdb create mode 100644 scripts/debugger/xdb_scripts/binary_extension.xdb create mode 100644 scripts/debugger/xdb_scripts/bootloader.xdb diff --git a/scripts/debugger/xdb_debug.xdb b/scripts/debugger/xdb_debug.xdb new file mode 100644 index 00000000..3baf6934 --- /dev/null +++ b/scripts/debugger/xdb_debug.xdb @@ -0,0 +1,53 @@ +! The scripts assume that the scripts is located under the ATF scripts directory +! Need to update the path of the images (With full path) +set val /size=byte @ATF_FIB_BIN_PATH="EMPTY" +set val /size=byte @ATF_BL1_ELF_PATH="EMPTY" +set val /size=byte @BIN_EXT_ELF_PATH="EMPTY" +set val /size=byte @BL_ELF_PATH="EMPTY" + +! Init bin_ext_run variable to check if the user run BLE init or not (the BLE script update the value to 1) +! if not, when run the ATF init, the script will stop at the beginning of ATF code +set val @bin_ext_run = 0 + +! Init atf_run variable to check if the user run ATF init or not (the ATF script update the value to 1) +! if not, when run the U-Boot init, the script will stop at the beginning of the U-Boot code +set val @atf_run = 0 + +! Set the flash is empty the breakpoints will be changed accordingly. +set val @flash_empty = 0 + +! if the flash empty - run the BLE script to load BLE code, then ATF code, and U-Boot code. +define macro /OVERWRITE /button restore_empty_flash "set val @flash_empty = 1; @binary_extension; @atf; @bootloader;" +! restore u-boot with one button +define macro /OVERWRITE /button restore_flash "@binary_extension; @atf; @bootloader;" + +define macro /OVERWRITE /button binary_extension "batch \"scripts/debugger/xdb_scripts/binary_extension.xdb\"\n" +define macro /OVERWRITE /button atf "batch \"scripts/debugger/xdb_scripts/atf.xdb\"\n" +define macro /OVERWRITE /button bootloader "batch \"scripts/debugger/xdb_scripts/bootloader.xdb\"\n" +define macro /OVERWRITE /button help_message "\ +MESSAGE \" HELP MESSAGE\\n\ +This help is relevant for Armada-7k/8k SoC debug and recovery\\n\ +To recovery the board from scratch (empty flash), run empty_flash flash button.\\n\ +- The empty_flash button will run the BootRom until it stuck in boot from UART mode.\\n\ + then load binary extension, ATF, and bootloader images and run them.\\n\\n\ +To debug the Binary extension, ATF, and Bootloader need to run the buttons separately:\\n\ +- binary_extension:\\n\ + will stop at the beginning of the binary extension,\\n\ + load the binary extension code and stop at the end of it,\\n\ + jump back to BootRom to clean the flash and MMU\\n\ +- atf:\\n\ + if the binary_extension not run, the button will reset the SoC\\n\ + stop at the beginning of the ATF,\\n\ + load the fib binary and BL1 elf file\\n\ +- Bootloader:\\n\ + if the atf not run, the button will reset the SoC\\n\ + stop at the beginning of the Bootloader\\n\ + load the Bootloader elf image and stop\\n\ +\\n\ +Please note - if you run Armda-8040-RZ board, need to press on Armada-8040-RZ button\\n\ +\"" + +define macro /OVERWRITE /button armada_8040_rz "set val @armada_8040_rz = 1;" + +! Stop the CPU before run any button +STOP diff --git a/scripts/debugger/xdb_scripts/atf.xdb b/scripts/debugger/xdb_scripts/atf.xdb new file mode 100644 index 00000000..2c8a4cdc --- /dev/null +++ b/scripts/debugger/xdb_scripts/atf.xdb @@ -0,0 +1,53 @@ +if (@strcmp(@ATF_FIB_BIN_PATH,"EMPTY")==0) then + set value @ATF_FIB_BIN_PATH = @queryinputfile("select FIB bin file", "all files (*.*)|*.*"); + if @strlen(@bin_ext_elf_path) == 0 then + !user hit cancel button + print "user abort\n" + MESSAGE "Update the path of the ATF FIB binary, and reload the script" + EXIT + end +end +if (@strcmp(@ATF_BL1_ELF_PATH,"EMPTY")==0) then + set value @ATF_BL1_ELF_PATH = @queryinputfile("select BL1 ELF file", "all files (*.*)|*.*|elf files (*.afx;*.elf)|*.afx;*.elf||"); + if @strlen(@ATF_BL1_ELF_PATH) == 0 then + !user hit cancel button + print "user abort\n" + MESSAGE "Update the path of the BL1 ELF, and reload the script" + EXIT + end +end + +! Set value atf_run = 1 if the user run this script +set val @atf_run = 1 + +! if the bin_ext script is not run, reset the board and stop at 0xffff0000 +IF @bin_ext_run != 1 THEN +TCI TRESET +RESTART +END + +DELETE BREAKPOINT /ALL +! break at bl1 +SET BREAKPOINT AT (0x4100000) HARD + +! If the SPL script run, it already run the bootrom code. +IF @bin_ext_run != 1 THEN +RUN +END + +! load fip.bin (loaded by BL1 from 0x4120000) +LOAD /BINARY /ADDRESS=0x4120000 OF @ATF_FIB_BIN_PATH + +! load BL1.elf (run from 0x4100000) +LOAD /SEGMENT /DEBUG /GLOBAL /INIT="" OF @ATF_BL1_ELF_PATH + +! break at call to bl2_main function +SET BREAKPOINT AT (0x4017000) HARD + +! break at bl31 function +SET BREAKPOINT AT (0x4023000) HARD + +! break at U-Boot +SET BREAKPOINT AT (0x0) HARD + +RUN diff --git a/scripts/debugger/xdb_scripts/axi-dap-a8k.xdb b/scripts/debugger/xdb_scripts/axi-dap-a8k.xdb new file mode 100644 index 00000000..a95aae34 --- /dev/null +++ b/scripts/debugger/xdb_scripts/axi-dap-a8k.xdb @@ -0,0 +1,5 @@ +define macro /button /overwrite axi_dap_enable "custom \"lowlevel=on\";TCI APSCAN /SELECT=0 4\n" +define macro /button /overwrite axi_dap_disable "tci apscan /select=1 4; custom \"lowlevel=off\"\n" +define macro /button /overwrite axi_dap_read "TCI AP /silent 0x4=@1;TCI AP 0xC\n" +define macro /button /overwrite axi_dap_write "TCI AP /silent 0x4=@1;TCI AP 0xC=@2\n" +define macro /button /overwrite axi_dap_read_loop "for @idx =0 to @2 step 4 then TCI AP /silent 0x4=@1+@idx;TCI AP 0xC end" diff --git a/scripts/debugger/xdb_scripts/binary_extension.xdb b/scripts/debugger/xdb_scripts/binary_extension.xdb new file mode 100644 index 00000000..7de2155c --- /dev/null +++ b/scripts/debugger/xdb_scripts/binary_extension.xdb @@ -0,0 +1,60 @@ +if (@strcmp(@BIN_EXT_ELF_PATH,"EMPTY")==0) then + SET VALUE @BIN_EXT_ELF_PATH = @queryinputfile("Select BLE elf file", "All Files (*.*)|*.*|ELF Files (*.afx;*.elf)|*.afx;*.elf||"); + IF @strlen(@BIN_EXT_ELF_PATH) == 0 then + !User hit cancel button + print "USER ABORT\n" + MESSAGE "Update the path of the binary extension, and reload the script" + EXIT + END +end + +! Set value bin_ext_run = 1 if the user run this script +set val @bin_ext_run = 1 + +! Reset the board +TCI TRESET +RESTART + +IF @flash_empty != 1 THEN + ! break at start of bin_ext_run + SET BREAKPOINT AT (0xFFE1C048) HARD +ELSE + ! break at UART error of Bootrom + IF @armada_8040_rz != 1 THEN + ! not Armada-8040-RZ(include AP-806-Z) + SET BREAKPOINT AT (0xFFFF0D14) HARD + RUN + SET BREAKPOINT AT (0xffff23d4) HARD + ELSE + SET BREAKPOINT AT (0xffff2270) HARD + RUN + SET BREAKPOINT AT (0xffff3244) HARD + END +END + +! Run till the breakpoint +RUN +DELETE BREAKPOINT /ALL + + +IF @flash_empty != 1 THEN +! load BLE elf file (run from 0xFFE1C048) +LOAD /SEGMENT /DEBUG /GLOBAL OF @BIN_EXT_ELF_PATH +ELSE +! load BLE elf file and update the PC to the start of the BLE +LOAD /SEGMENT /DEBUG /GLOBAL /INIT="" OF @BIN_EXT_ELF_PATH +END + +! Break at the end of bin_ext_run before jumping back top BootROM +SET BREAKPOINT AT (0xFFE1C08C) HARD +RUN +DELETE BREAKPOINT /ALL + +! DRAM should be ready now. +! Jump to BootRom to disable MMU and clean caches +SET REGISTER X1=0x0 +SET REGISTER PC=0xffff0668 + +! Before run the BootRom, set breakpoint before jump to image execution +SET BREAKPOINT AT (0xffff068c) HARD +RUN diff --git a/scripts/debugger/xdb_scripts/bootloader.xdb b/scripts/debugger/xdb_scripts/bootloader.xdb new file mode 100644 index 00000000..9cc912ee --- /dev/null +++ b/scripts/debugger/xdb_scripts/bootloader.xdb @@ -0,0 +1,28 @@ +if (@strcmp(@BL_ELF_PATH,"EMPTY")==0) then + set value @BL_ELF_PATH = @queryinputfile("select Bootloader binary file", "all files (*.*)|*.*"); + if @strlen(BL_ELF_PATH) == 0 then + !user hit cancel button + print "user abort\n" + MESSAGE "Update the path of the Bootloader binary, and reload the script" + EXIT + end +end + +! if the ATF script is not run, reset the board and stop at 0xffff0000 +IF @atf_run != 1 THEN +TCI TRESET +RESTART +END + +DELETE BREAKPOINT /ALL +! break at U-Boot +SET BREAKPOINT AT (0x0) HARD +! Run till the U-boot +RUN + +DELETE BREAKPOINT /ALL + +! load U-Boot ELF image +LOAD /SEGMENT /DEBUG /GLOBAL /INIT="" OF @BL_ELF_PATH + +! RUN -- cgit