cy_get_set_device_param.cfg 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. #
  2. # Copyright (C) <2019-2021>
  3. # <Cypress Semiconductor Corporation (an Infineon company)>
  4. #
  5. source [find target/mxs40/psoc6_detect_geometry.cfg]
  6. source [find target/mxs40/traveo2_detect_geometry.cfg]
  7. #
  8. # shows flash boot version
  9. #
  10. # arguments:
  11. # target_arch - the target architecture - psoc6 or traveo2
  12. #
  13. proc show_flash_boot_ver { target_arch } {
  14. set fb_ver_str ""
  15. set fb_ver_hi_addr ""
  16. set fb_ver_lo_addr ""
  17. switch $target_arch {
  18. "psoc6" -
  19. "psoc6_2m" {
  20. set fb_ver_hi_addr 0x16002004
  21. set fb_ver_lo_addr 0x16002018
  22. set sflash_svn_ver_addr 0x16000028
  23. }
  24. "traveo21" -
  25. "traveo22" {
  26. set fb_ver_hi_addr 0x17002004
  27. set fb_ver_lo_addr 0x17002018
  28. set sflash_svn_ver_addr 0x170000A8
  29. }
  30. default {
  31. puts stderr "Error: Invalid Target passed into 'show_flash_boot_ver'"
  32. return
  33. }
  34. }
  35. set fb_ver_lo ""
  36. set fb_ver_hi ""
  37. catch { set fb_ver_hi [mrw $fb_ver_hi_addr] }
  38. if {$fb_ver_hi eq "" || !$fb_ver_hi} {
  39. puts stderr "Error: Invalid FlashBoot: High version word of Flash Boot is zero"
  40. return
  41. }
  42. catch { set fb_ver_lo [mrw $fb_ver_lo_addr] }
  43. set b0 [expr { $fb_ver_hi >> 28 } ]
  44. set b1 [expr {($fb_ver_hi >> 24) & 0xF } ]
  45. set b2 [expr {($fb_ver_hi >> 16) & 0xFF} ]
  46. set b3 [expr {$fb_ver_hi & 0x0000FFFF}]
  47. if {$b0 > 2} {
  48. puts stderr "Error: Unsupported Flash Boot Version - Flash Boot Version \[31:28] = $b0"
  49. return
  50. }
  51. if {$b3 != 0x8001} {
  52. puts stderr "Error: Flash Boot is corrupted or non Flash Boot image programmed"
  53. return
  54. }
  55. if { $b0 == 0 } { ; # Versioning scheme #1 or #2, PSoC6A-BLE-2 device family
  56. if { $b1 == 1 } { ; # Versioning scheme #1, ** or *A
  57. set fb_ver_str [format "1.%02d" $b2]
  58. } elseif { $b1 == 2 } {
  59. if { $b2 < 20 } {
  60. set fb_ver_str [format "1.0.0.%d" $b2]
  61. } elseif { $b2 < 29 } {
  62. set fb_ver_str [format "1.0.1.%d" $b2]
  63. } else {
  64. set fb_ver_str [format "1.20.1.%d" $b2]
  65. }
  66. }
  67. } elseif { $b0 == 1 } { ;# TVII-BE-1M **
  68. set fb_ver_str [format "2.0.0.%d" $b2]
  69. } elseif { $b0 == 2 } { ;# Versioning scheme #3
  70. set patch [expr { $fb_ver_lo >> 24} ]
  71. set build [expr { $fb_ver_lo & 0xFFFF } ]
  72. set fb_ver_str [format "%d.%d.%d.%d" $b1 $b2 $patch $build ]
  73. }
  74. echo "** Flash Boot version: $fb_ver_str"
  75. set sflash_svn_ver 0
  76. catch {
  77. set sflash_svn_ver [mrw $sflash_svn_ver_addr]
  78. }
  79. if { $sflash_svn_ver != 0 && $sflash_svn_ver != 0xFFFFFFFF } {
  80. echo "** SFlash version: $sflash_svn_ver"
  81. }
  82. return $fb_ver_str
  83. }
  84. #
  85. # shows chip protection
  86. #
  87. # arguments:
  88. # target_arch - the target architecture - psoc6 or traveo2
  89. #
  90. proc show_chip_protection {target_arch} {
  91. switch $target_arch {
  92. "psoc6" {
  93. set cpuss_prot_reg 0x40210500
  94. }
  95. "psoc6_2m" -
  96. "traveo21" -
  97. "traveo22" {
  98. set cpuss_prot_reg 0x402020C4
  99. }
  100. default {
  101. puts stderr "Error: Invalid Target passed into 'show_chip_protection'"
  102. return
  103. }
  104. }
  105. set protection [ mrw $cpuss_prot_reg ]
  106. set ret "X"
  107. switch $protection {
  108. 1 { set ret "VIRGIN" }
  109. 2 { set ret "NORMAL" }
  110. 3 { set ret "SECURE" }
  111. 4 { set ret "DEAD" }
  112. default { set ret "UNKNOWN" }
  113. }
  114. echo "** Chip Protection: $ret"
  115. }
  116. #
  117. # shows and set device specific parameters
  118. #
  119. # arguments:
  120. # target_arch - the target architecture - psoc6, psoc6_2m or traveo2
  121. # main_reg_name - the name of main region to be set
  122. # work_reg_name - the name of work region to be set
  123. #
  124. proc cy_get_set_device_param {target_arch {main_reg_name ""} {work_reg_name ""}} {
  125. set tgt [target current]
  126. set CHIPNAME [string range ${tgt} 0 [expr {[string first "." ${tgt}] - 1}]]
  127. global ${CHIPNAME}::info_runned
  128. global ${CHIPNAME}::wrong_cfg_msg
  129. if { ![info exist ${CHIPNAME}::info_runned] } {
  130. echo "***************************************"
  131. switch $target_arch {
  132. "psoc6" -
  133. "psoc6_2m" {
  134. psoc6_detect_geometry $target_arch $main_reg_name
  135. }
  136. "traveo21" -
  137. "traveo22" {
  138. traveo2_detect_geometry $target_arch $main_reg_name $work_reg_name
  139. }
  140. default {
  141. puts stderr [format "Error: Invalid target architecture '%s' is passed into 'cy_get_set_device_param' API" $target_arch]
  142. return
  143. }
  144. }
  145. show_flash_boot_ver $target_arch
  146. show_chip_protection $target_arch
  147. echo "***************************************"
  148. if { [info exist ${CHIPNAME}::wrong_cfg_msg] && [set ${CHIPNAME}::wrong_cfg_msg] != "" } {
  149. set cfg_file [set ${CHIPNAME}::wrong_cfg_msg]
  150. puts stderr "*******************************************************************************"
  151. if {[using_jtag]} {
  152. puts stderr "* JTAG CHIPNAME: ${CHIPNAME}"
  153. }
  154. puts stderr "* The detected device does not match the configuration file in use."
  155. puts stderr "* Flash programming will not work. Please use the $cfg_file"
  156. puts stderr "* configuration file, or attach a kit that matches the configuration file."
  157. puts stderr "*******************************************************************************"
  158. terminate
  159. }
  160. set ${CHIPNAME}::info_runned true
  161. }
  162. }