Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/flash/awr2944-snor.cmm
2025-10-14 09:52:32 +09:00

335 lines
10 KiB
Plaintext

; --------------------------------------------------------------------------------
; @Title: AWR2944(TI) EVM QSPI FLASH Program script
; @Description:
;
; FLASH: (8MBytes)
; GD25B64C (GigaDevice)
; QSPI Memory Base Address : 0xC6000000 , CS0
; QSPI Controller Base Address : 0xC8000000
; SRAM: 0x00020000 (TCMA_RAM_CR5A 0x00020000, TCMB_RAM_CR5A 0x00080000)
;
; @Keywords: QSPI
; @Author: JIM, CMO
; @Board:
; @Chip: AWR2944
; @Copyright: (C) 1989-2024 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: awr2944-snor.cmm 12944 2024-01-17 11:15:41Z cmorgenstern $
; --------------------------------------------------------------------------------
; Set up helper variables
LOCAL &SCRIPT_DIR &AUX_SCRIPT_DIR &PRESENT_SCRIPT
&SCRIPT_DIR=OS.PPD()
&AUX_SCRIPT_DIR="&SCRIPT_DIR/../hardware/awr2944evm/scripts"
&PRESENT_SCRIPT=OS.PPF()
; --------------------------------------------------------------------------------
; Setup target specific callback functions and variables for device setup and HS unlock
; Global variable for Secure-AP base address
LOCAL &TI_SETUP_GLOBALVAR_SECAPBASE
IF VERSION.BUILD()<153938.
&TI_SETUP_GLOBALVAR_SECAPBASE=EDBG:(0x40000000+0x100*8.)
ELSE
&TI_SETUP_GLOBALVAR_SECAPBASE=DP:(0x100*8.)
; Global variable for Power-AP base address
LOCAL &TI_SETUP_GLOBALVAR_PWRAPBASE
IF VERSION.BUILD()<153938.
&TI_SETUP_GLOBALVAR_PWRAPBASE=EDBG:(0x40000000+0x100*7.)
ELSE
&TI_SETUP_GLOBALVAR_PWRAPBASE=DP:(0x100*7.)
; Callback function for handling DSMC core
LOCAL &TI_SETUP_CALLBACKFUNC_DSMC_HANDLING
&TI_SETUP_CALLBACKFUNC_DSMC_HANDLING="TI_SETUP_CALLBACKFUNC_DSMC_HANDLING"
SUBROUTINE TI_SETUP_CALLBACKFUNC_DSMC_HANDLING
(
; Currently nothing to be done
RETURN
)
; Callback function to disable WIR after an early HS device unlock via 'SETUPMODE=JTAG'
LOCAL &TI_SETUP_CALLBACKFUNC_EARLYUNLOCK_WIRRELEASE
&TI_SETUP_CALLBACKFUNC_EARLYUNLOCK_WIRRELEASE="TI_SETUP_CALLBACKFUNC_EARLYUNLOCK_WIRRELEASE"
SUBROUTINE TI_SETUP_CALLBACKFUNC_EARLYUNLOCK_WIRRELEASE
(
; TBD?
; Data.Set (&TI_SETUP_GLOBALVAR_PWRAPBASE)+0xXX %LE %Long 0yxxxxxxxxxxxxxx0000xxxxxxxxxxxxxx ; Disable WIR mode AWR2944
RETURN
)
; --------------------------------------------------------------------------------
; Extract script arguments and set default values
LOCAL &ARGS &GUIMODE &DEVICETYPE &SETUPMODE &SYSFWFILE &SCICLIENTFILE &CERTIFICATEFILE
ENTRY %LINE &ARGS
DO "&AUX_SCRIPT_DIR/ti_setup_parser.cmm" &ARGS "CALLSCRIPT=&PRESENT_SCRIPT" "CPU=AWR2944"
RETURNVALUES &GUIMODE &DEVICETYPE &SETUPMODE &SYSFWFILE &SCICLIENTFILE &CERTIFICATEFILE
; Exit here if the setup dialog was executed
&GUIMODE=&GUIMODE
IF (&GUIMODE!=0.)
ENDDO
; File global variables
LOCAL &TI_SETUP_GLOBALVAR_SYSFWFILE
&TI_SETUP_GLOBALVAR_SYSFWFILE="&SYSFWFILE"
LOCAL &TI_SETUP_GLOBALVAR_SCICLIENTFILE
&TI_SETUP_GLOBALVAR_SCICLIENTFILE="&SCICLIENTFILE"
LOCAL &TI_SETUP_GLOBALVAR_CERTIFICATEFILE
&TI_SETUP_GLOBALVAR_CERTIFICATEFILE="&CERTIFICATEFILE"
; Setup global variables
LOCAL &TI_SETUP_GLOBALVAR_DEVICETYPE
&TI_SETUP_GLOBALVAR_DEVICETYPE="&DEVICETYPE"
LOCAL &TI_SETUP_GLOBALVAR_SETUPMODE
&TI_SETUP_GLOBALVAR_SETUPMODE="&SETUPMODE"
; --------------------------------------------------------------------------------
; Setup and parse flash specific parameters
LOCAL &QSPI_MEMORY_BASE &OSPI_MEMORY_SIZE &QSPI_Ctrl_BASE &RAM_BASE
&QSPI_MEMORY_BASE=0xC6000000
&OSPI_MEMORY_SIZE=0x800000 // 8 MBytes
&QSPI_Ctrl_BASE=0xC8000000
&RAM_BASE=0x00020000
LOCAL &FLASH_PARAM_PREPAREONLY
&FLASH_PARAM_PREPAREONLY=(STRing.SCAN(STRing.UPpeR("&ARGS"),"PREPAREONLY",0)!=-1)
LOCAL &FLASH_PARAM_TARGETSETUP
&FLASH_PARAM_TARGETSETUP=(STRing.SCAN(STRing.UPpeR("&ARGS"),"TARGETSETUP",0)!=-1)
; Check for illegal parameter combinations
IF ((&FLASH_PARAM_TARGETSETUP&&("&SETUPMODE"!="JTAG"))||(!&FLASH_PARAM_TARGETSETUP&&("&SETUPMODE"!="ATTACH")))
(
PRIVATE &targetsetup
&targetsetup="<no target setup>"
IF (&FLASH_PARAM_TARGETSETUP)
&targetsetup="TARGETSETUP"
AREA
PRINT %ERROR "Illegal combination of flash script parameters: &targetsetup + SETUPMODE=&SETUPMODE"
PRINT %ERROR "Exiting flash setup..."
ENDDO
)
; --------------------------------------------------------------------------------
; Set up helper variables
PRIVATE &BARE_METAL_SETUP &RET
&BARE_METAL_SETUP=FALSE()
; --------------------------------------------------------------------------------
; Target device initialization setup based on '&DEVICETYPE' and '&SETUPMODE'
; Cross check device type
(
PRIVATE &isHS
Do "&AUX_SCRIPT_DIR/ti_setup_generic.cmm" DETECT_HS_DEVICE
RETURNVALUES &isHS
IF ((!STRing.ComPare("&TI_SETUP_GLOBALVAR_DEVICETYPE","HS*"))&&(&isHS))
(
; Essentially: GP was selected, HS detected.
PRINT %WARNING "Specified device type was '&TI_SETUP_GLOBALVAR_DEVICETYPE' but detected device type is 'HS'. Continuing as '&TI_SETUP_GLOBALVAR_DEVICETYPE' device."
)
)
; Perform initialization
Do "&AUX_SCRIPT_DIR/ti_setup_generic.cmm" DEVICE_INIT
RETURNVALUES &RET &BARE_METAL_SETUP
&RET=0.
IF (&RET!=0.)
(
PRINT %ERROR "Device initialization failed. Exiting ..."
AREA
ENDDO
)
; --------------------------------------------------------------------------------
; Basic debugger setup
TITLE "TRACE32 for ARM - AWR2944" ; set GUI title
SYStem.RESet
SYStem.CPU AWR2944
CORE.ASSIGN 1. ; Connect only to first Cortex-R5
SYStem.CONFIG CORE 1. 1.
SYStem.Option EnReset OFF
Trace.METHOD NONE ; Trace components should not be accessed until fully set up
ETM.OFF
SYSTEM.JTAGCLOCK CTCK 25MHz
IF COMBIPROBE()||UTRACE()
(
IF (ID.WHISKER(0.)==0x12)
SYStem.CONFIG.CONNECTOR MIPI20T
ELSE
SYStem.CONFIG.CONNECTOR MIPI34
)
; --------------------------------------------------------------------------------
; Basic target setup
IF ((STRing.ComPare("&TI_SETUP_GLOBALVAR_DEVICETYPE","HS*"))&&("&SETUPMODE"=="JTAG"))
(
; Unlock and stop secure watchdog
; TBD?
)
IF (&FLASH_PARAM_TARGETSETUP)
(
; "Development mode (SOP 2 mode)"
; Requires full target setup by the debugger
SYStem.Mode.Prepare
; Basic PLL and module setup
DO "&AUX_SCRIPT_DIR/common_setup.cmm" WARM_RESET
DO "&AUX_SCRIPT_DIR/configure_pll.cmm" ALL
DO "&AUX_SCRIPT_DIR/common_setup.cmm" ALL
; Enable CortexR5: Single core, lockstep operation mode
Data.Set EAHB:0x02100014 %Long 0x0 ; RST2ASSERTDLY
Data.Set EAHB:0x02100018 %Long 0x00000707 ; RST_WFICHECK
Data.Set EAHB:0x02120624 %Long 0x7 ; MSS_STC_CONTROL
Data.Set EAHB:0x02120804 %Long 0x7 ; R5_ROM_ECLIPSE
Data.Set EAHB:0x02120808 %Long 0x0 ; R5_COREA_HALT
Data.Set EAHB:0x0212080C %Long 0x0 ; R5_COREB_HALT
; Connect to first Cortex-R5
SYStem.Down
SYStem.Attach
Break
; Try to cleanup the core state - Supervisor, enable TCMA, MPU off
Register.Init
PER.Set.Field C15:0x119 %Long 0x00000001 1.
GOSUB CACHE_MMU_INIT
; QSPI Controller CLK Enable
Data.Set A:0x02100000+0x024 %Long 0x222 ; MSS_QSPI_CLK_SRC_SEL, SYS_CLK 200Mhz
Data.Set A:0x02100000+0x05C %Long 0x555 ; MSS_QSPI_CLK_DIV_VAL
Data.Set A:0x02100000+0x0A4 %Long 0x7 ; MSS_QSPI_CLK_GATE, b2:b0 = "111"
Data.Set A:0x02100000+0x17C %Long 0x0 ; MSS_QSPI_RST_CTRL, b2:b0 = "000"
; IOMUX for QSPI flash
Data.Set A:0x020C002C %LE %Long 0x81 ;QSPI[0], PAD_AL
Data.Set A:0x020C0030 %LE %Long 0x81 ;QSPI[1], PAD_AM
Data.Set A:0x020C0034 %LE %Long 0x281 ;QSPI[2], PAD_AN
Data.Set A:0x020C0038 %LE %Long 0x281 ;QSPI[3], PAD_AO
Data.Set A:0x020C003C %LE %Long 0x081 ;QSPI_CLK, PAD_AP
Data.Set A:0x020C0040 %LE %Long 0x281 ;QSPI_CS, PAD_AQ
)
ELSE
(
; "Functional mode (SOP 4 mode, QSPI boot mode)"
; The script assumes that the target is already pre-configured for the use of QSPI flash,
; e.g. by the first stage bootloader.
SYStem.Attach
Break
GOSUB CACHE_MMU_INIT
)
; QSPI controller setup
Data.Set A:&QSPI_Ctrl_BASE+0x040 %LE %Long 0x80000009;SPI_CLOCK_CNTRL, SPI Clock Control Register
Data.Set A:&QSPI_Ctrl_BASE+0x054 %LE %Long 0x20203 ;SPI_SETUP0, Memory Mapped SPI Setup0
Data.Set A:&QSPI_Ctrl_BASE+0x058 %LE %Long 0x20203 ;SPI_SETUP1
Data.Set A:&QSPI_Ctrl_BASE+0x05C %LE %Long 0x20203 ;SPI_SETUP2
Data.Set A:&QSPI_Ctrl_BASE+0x060 %LE %Long 0x20203 ;SPI_SETUP3
Data.Set A:&QSPI_Ctrl_BASE+0x064 %LE %Long 0x1 ;SPI_SWITCH, Enabled the Memory mapped the QSPI at 0xC000_0000
GOSUB READ_ID_TEST
; ------------------------------------------------------------------------------
; Flash declaration
FLASH.RESet
GOSUB FlashDeclaration
; Flash script ends here if called with parameter PREPAREONLY
IF &FLASH_PARAM_PREPAREONLY
ENDDO PREPAREDONE
; ------------------------------------------------------------------------------
; Flash programming example
DIALOG.YESNO "Program flash memory?"
LOCAL &progflash
ENTRY &progflash
IF &progflash
(
FLASH.ReProgram.ALL
Data.LOAD.auto *
;Data.LOAD.Binary * &QSPI_MEMORY_BASE
FLASH.ReProgram.off
; Reset device
PRINT "Please power-cycle the board after flash program is complete"
)
ENDDO
; ------------------------------------------------------------------------------
; Helper functions
READ_ID_TEST:
(
&QSPI_CMD_REG=&QSPI_Ctrl_BASE+0x48
&QSPI_DAT_REG=&QSPI_Ctrl_BASE+0x50
&QSPI_STAT_REG=&QSPI_Ctrl_BASE+0x4C
&RE=(0x1<<16.) ; read
&WR=(0x2<<16.) ; write
&END=(0x4<<16.) ;
&cmd_reg_def=0x0|(0x7<<19.)|(0x0<<28.)|0xFFF ;
Data.Set A:&QSPI_DAT_REG %Long 0x9F ;write data reg
Data.Set A:&QSPI_CMD_REG %Long (&cmd_reg_def|&WR);cmd reg
//print "status 0x" data.long(A:&QSPI_STAT_REG) ;read status reg
Data.Set A:&QSPI_CMD_REG %Long (&cmd_reg_def|&RE) ;cmd reg
PRINT "read 1st 0x" Data.Long(A:&QSPI_DAT_REG) " (manufacture ID)" ; read data reg
Data.Set A:&QSPI_CMD_REG %Long (&cmd_reg_def|&RE) ;cmd reg
PRINT "read 2nd 0x" Data.Long(A:&QSPI_DAT_REG) " (device ID)" ; read data reg
Data.Set A:&QSPI_CMD_REG %Long (&cmd_reg_def|&RE);cmd reg
PRINT "read 3rd 0x" Data.Long(A:&QSPI_DAT_REG) ; read data reg
Data.Set A:&QSPI_Ctrl_BASE+0x48 %Long (&cmd_reg_def|&END)
WAIT 100.ms
RETURN
)
FlashDeclaration:
(
FLASH.Create &QSPI_MEMORY_BASE++(&OSPI_MEMORY_SIZE-0x1) 0x10000 TARGET Byte
FLASH.TARGET &RAM_BASE &RAM_BASE+0x2000 0x1000 ~~/demo/arm/flash/byte/snor3b_awr2944.bin
RETURN
)
CACHE_MMU_INIT:
(
PRIVATE &tmpReg
; MPU must be disabled for the flash process to succeed!
; Also, disable I and D caches
&tmpReg=Data.Long(C15:0x1)
&tmpReg=(&tmpReg&(~(0x1<<0.))) ; disable MPU
&tmpReg=(&tmpReg&(~(0x1<<2.))) ; disable D cache
&tmpReg=(&tmpReg&(~(0x1<<12.))) ; disable I cache
Data.Set C15:0x1 %long &tmpReg
RETURN
)