ampere_emag.cfg 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. # SPDX-License-Identifier: GPL-2.0-or-later
  2. #
  3. # OpenOCD Target Configuration for eMAG ARMv8 Processor
  4. #
  5. # Copyright (c) 2019-2021, Ampere Computing LLC
  6. #
  7. #
  8. # Configure defaults for target
  9. # Can be overriden in board configuration file
  10. #
  11. if { [info exists CHIPNAME] } {
  12. set _CHIPNAME $CHIPNAME
  13. } else {
  14. set _CHIPNAME emag
  15. }
  16. if { [info exists NUMCORES] } {
  17. set _NUMCORES $NUMCORES
  18. } else {
  19. set _NUMCORES 32
  20. }
  21. if { [info exists ENDIAN] } {
  22. set _ENDIAN $ENDIAN
  23. } else {
  24. set _ENDIAN little
  25. }
  26. if { [info exists CPUTAPID ] } {
  27. set _CPUTAPID $CPUTAPID
  28. } else {
  29. set _CPUTAPID 0x4BA00477
  30. }
  31. #
  32. # Configure JTAG TAP
  33. #
  34. jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0x3 -expected-id $_CPUTAPID
  35. set _TAPNAME $_CHIPNAME.cpu
  36. set _DAPNAME ${_TAPNAME}_dap
  37. set _APNUM 1
  38. dap create $_DAPNAME -chain-position $_TAPNAME
  39. $_DAPNAME apsel $_APNUM
  40. # Create the DAP AP0 MEM-AP AHB-AP target
  41. target create AHB mem_ap -endian $_ENDIAN -dap $_DAPNAME -ap-num 0
  42. # Create the DAP AP1 MEM-AP APB-AP target
  43. target create APB mem_ap -endian $_ENDIAN -dap $_DAPNAME -ap-num 1
  44. #
  45. # Configure target CPUs
  46. #
  47. # Build string used to enable smp mode
  48. set _SMP_STR "target smp"
  49. for {set _i 0} {$_i < $_NUMCORES} {incr _i} {
  50. # Format a string to reference which CPU target to use
  51. set _TARGETNAME [format "${_TAPNAME}_%02d" $_i]
  52. # Create and configure Cross Trigger Interface (CTI) - required for halt and resume
  53. set _CTINAME $_TARGETNAME.cti
  54. cti create $_CTINAME -dap $_DAPNAME -ap-num $_APNUM -baseaddr [expr {0xFC020000 + ($_i << 20)}]
  55. # Create the target
  56. target create $_TARGETNAME aarch64 -endian $_ENDIAN -dap $_DAPNAME -ap-num $_APNUM -cti $_CTINAME -coreid $_i
  57. set _SMP_STR "$_SMP_STR $_TARGETNAME"
  58. # Clear CTI output/input enables that are not configured by OpenOCD for aarch64
  59. $_TARGETNAME configure -event examine-start [subst {
  60. $_CTINAME write INEN0 0x00000000
  61. $_CTINAME write INEN1 0x00000000
  62. $_CTINAME write INEN2 0x00000000
  63. $_CTINAME write INEN3 0x00000000
  64. $_CTINAME write INEN4 0x00000000
  65. $_CTINAME write INEN5 0x00000000
  66. $_CTINAME write INEN6 0x00000000
  67. $_CTINAME write INEN7 0x00000000
  68. $_CTINAME write INEN8 0x00000000
  69. $_CTINAME write OUTEN2 0x00000000
  70. $_CTINAME write OUTEN3 0x00000000
  71. $_CTINAME write OUTEN4 0x00000000
  72. $_CTINAME write OUTEN5 0x00000000
  73. $_CTINAME write OUTEN6 0x00000000
  74. $_CTINAME write OUTEN7 0x00000000
  75. $_CTINAME write OUTEN8 0x00000000
  76. }]
  77. # Enable OpenOCD HWTHREAD RTOS feature for GDB thread (CPU) selection support
  78. # This feature presents CPU cores ("hardware threads") in an SMP system as threads to GDB
  79. $_TARGETNAME configure -rtos hwthread
  80. }
  81. eval $_SMP_STR