initial commit
authorBrad Griffis <bgriffis@ti.com>
Thu, 15 May 2014 15:20:34 +0000 (10:20 -0500)
committerBrad Griffis <bgriffis@ti.com>
Thu, 15 May 2014 15:20:34 +0000 (10:20 -0500)
.project [new file with mode: 0644]
am335x-ctt.dss [new file with mode: 0644]
am335x-ddr-analysis.dss [new file with mode: 0644]

diff --git a/.project b/.project
new file mode 100644 (file)
index 0000000..f531543
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+       <name>am335x-dss-scripts</name>\r
+       <comment></comment>\r
+       <projects>\r
+       </projects>\r
+       <buildSpec>\r
+       </buildSpec>\r
+       <natures>\r
+       </natures>\r
+</projectDescription>\r
diff --git a/am335x-ctt.dss b/am335x-ctt.dss
new file mode 100644 (file)
index 0000000..b46b51d
--- /dev/null
@@ -0,0 +1,181 @@
+\r
+var ctt_registers = [\r
+       0x44e00000,\r
+       0x44e00004,\r
+       0x44e00008,\r
+       0x44e0000c,\r
+       0x44e00014,\r
+       0x44e00018,\r
+       0x44e0001c,\r
+       0x44e00024,\r
+       0x44e00028,\r
+       0x44e0002c,\r
+       0x44e00030,\r
+       0x44e00034,\r
+       0x44e00038,\r
+       0x44e0003c,\r
+       0x44e00040,\r
+       0x44e00044,\r
+       0x44e00048,\r
+       0x44e0004c,\r
+       0x44e00050,\r
+       0x44e00060,\r
+       0x44e00064,\r
+       0x44e00068,\r
+       0x44e0006c,\r
+       0x44e00070,\r
+       0x44e00074,\r
+       0x44e00078,\r
+       0x44e0007c,\r
+       0x44e00080,\r
+       0x44e00084,\r
+       0x44e00088,\r
+       0x44e000ac,\r
+       0x44e000b0,\r
+       0x44e000b4,\r
+       0x44e000bc,\r
+       0x44e000c0,\r
+       0x44e000c4,\r
+       0x44e000c8,\r
+       0x44e000cc,\r
+       0x44e000d0,\r
+       0x44e000d4,\r
+       0x44e000d8,\r
+       0x44e000dc,\r
+       0x44e000e0,\r
+       0x44e000e4,\r
+       0x44e000e8,\r
+       0x44e000ec,\r
+       0x44e000f0,\r
+       0x44e000f4,\r
+       0x44e000f8,\r
+       0x44e000fc,\r
+       0x44e00100,\r
+       0x44e0010c,\r
+       0x44e00110,\r
+       0x44e0011c,\r
+       0x44e00120,\r
+       0x44e00140,\r
+       0x44e00144,\r
+       0x44e00148,\r
+       0x44e0014c,\r
+       0x44e00150,\r
+       0x44e00400,\r
+       0x44e00404,\r
+       0x44e00408,\r
+       0x44e0040c,\r
+       0x44e00410,\r
+       0x44e00414,\r
+       0x44e00418,\r
+       0x44e0042c,\r
+       0x44e00440,\r
+       0x44e00454,\r
+       0x44e00468,\r
+       0x44e00480,\r
+       0x44e00484,\r
+       0x44e00488,\r
+       0x44e0048c,\r
+       0x44e00490,\r
+       0x44e00494,\r
+       0x44e00498,\r
+       0x44e0049c,\r
+       0x44e004a0,\r
+       0x44e004a4,\r
+       0x44e004a8,\r
+       0x44e004ac,\r
+       0x44e004b0,\r
+       0x44e004b4,\r
+       0x44e004b8,\r
+       0x44e004bc,\r
+       0x44e004c0,\r
+       0x44e004c4,\r
+       0x44e004c8,\r
+       0x44e004cc,\r
+       0x44e004d0,\r
+       0x44e004d4,\r
+       0x44e00504,\r
+       0x44e00508,\r
+       0x44e0050c,\r
+       0x44e00510,\r
+       0x44e00514,\r
+       0x44e00518,\r
+       0x44e0051c,\r
+       0x44e00520,\r
+       0x44e00528,\r
+       0x44e0052c,\r
+       0x44e00530,\r
+       0x44e00534,\r
+       0x44e00538,\r
+       0x44e0053c,\r
+       0x44e00600,\r
+       0x44e00604,\r
+       0x44e00700,\r
+       0x44e00800,\r
+       0x44e00804,\r
+       0x44e00900,\r
+       0x44e00904,\r
+       0x44e0090c,\r
+       0x44e00910,\r
+       0x44e00914,\r
+       0x44e10040];\r
+\r
+// Check if we're connected to the A8\r
+var debugTarget = activeDS.getName();\r
+var debugTargetA8 = false;\r
+if (debugTarget.indexOf('A8') >= 0) {\r
+       var debugTargetA8 = true;\r
+       print("Connected to Cortex A8");\r
+}\r
+\r
+// Check if MMU is enabled\r
+var mmuEnabled = false;\r
+if (debugTargetA8 == true) {\r
+       print("Getting MMU Status.");\r
+       mmuEnabled = activeDS.armAdvancedFeatures.options.getBoolean("MMUEnabled");\r
+}\r
+\r
+//Build a filename that includes date/time\r
+var today = new Date();\r
+var year4digit = today.getFullYear();\r
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
+var day2digit = ("0" + today.getDate()).slice(-2);\r
+var hour2digit = ("0" + today.getHours()).slice(-2);\r
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
+var userHomeFolder = System.getProperty("user.home");\r
+var filename = userHomeFolder + '/Desktop/' + 'am335x-ctt' + filename_date + '.rd1';\r
+\r
+file = new java.io.FileWriter(filename);\r
+file.write("DeviceName AM335x1.0\n");\r
+\r
+// helper function to create 8-digit hex numbers in ascii format\r
+function d2h(d) {return ("00000000" + (+d).toString(16)).slice(-8);}\r
+\r
+// If connected to the Cortex A8 then make sure the MMU is off\r
+// so we can read physical addresses\r
+if (mmuEnabled == true) {\r
+       print("MMU was originally enabled.");\r
+       activeDS.armAdvancedFeatures.options.setBoolean("MMUEnabled",false);\r
+       print("MMU now disabled.");\r
+}\r
+\r
+// read CTT data from physical addresses\r
+for(i=0; i<ctt_registers.length; i++)\r
+{\r
+       value_array = readWord(ctt_registers[i],0,1,false);\r
+       value = d2h(value_array[0]);\r
+       file.write('0x' + ("0000" + ctt_registers[i].toString(16)).slice(-8) + " 0x" + value + "\n");\r
+}\r
+print("Data collection complete.");\r
+\r
+// Restore the status of the MMU\r
+if (mmuEnabled == true) {\r
+       activeDS.armAdvancedFeatures.options.setBoolean("MMUEnabled",true);\r
+       print("MMU now re-enabled.");\r
+}\r
+\r
+\r
+file.close();\r
+print("Created file " + filename);\r
+\r
diff --git a/am335x-ddr-analysis.dss b/am335x-ddr-analysis.dss
new file mode 100644 (file)
index 0000000..048613a
--- /dev/null
@@ -0,0 +1,192 @@
+function d2h(d) {return ("00000000" + (d).toString(16)).slice(-8);}\r
+\r
+function printRegisterValue(ds, name, addr)\r
+{\r
+       value = debugSessionDAP.memory.readWord(0,addr,false);\r
+       value_string = d2h(value);\r
+       file.write(name + " = 0x" + value_string + "\n");\r
+       return value; // return the register value for interrogation\r
+}\r
+\r
+// Build a filename that includes date/time\r
+var today = new Date();\r
+var year4digit = today.getFullYear();\r
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);\r
+var day2digit = ("0" + today.getDate()).slice(-2);\r
+var hour2digit = ("0" + today.getHours()).slice(-2);\r
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);\r
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);\r
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; \r
+var userHomeFolder = System.getProperty("user.home");\r
+var filename = userHomeFolder + '/Desktop/' + 'am335x-ddr-analysis' + filename_date + '.txt';\r
+\r
+file = new java.io.FileWriter(filename);\r
+\r
+debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");\r
+debugSessionDAP.target.connect();\r
+\r
+var reg_val;\r
+\r
+// EMIF: SDRAM_CONFIG\r
+reg_val = printRegisterValue(debugSessionDAP, "EMIF: SDRAM_CONFIG", 0x4C000008);\r
+var is_ddr3=0;\r
+var is_ddr2=0;\r
+var is_lpddr=0;\r
+if ( (reg_val & 0xE0000000) == (0 << 29) ) {file.write("  * ERROR! Unsupported memory type (DDR1)\n");}\r
+if ( (reg_val & 0xE0000000) == (1 << 29) ) {is_lpddr=1;}\r
+if ( (reg_val & 0xE0000000) == (2 << 29) ) {is_ddr2=1;}\r
+if ( (reg_val & 0xE0000000) == (3 << 29) ) {is_ddr3=1;}\r
+if (is_ddr3 == 1) {\r
+       file.write("  * Bits 26:24 (reg_ddr_term) set for ");\r
+       if ( (reg_val & 0x07000000) == (0 << 24) ) {file.write("termination disabled (000b)\n");}\r
+       if ( (reg_val & 0x07000000) == (1 << 24) ) {file.write("RZQ/4 (001b)\n");}\r
+       if ( (reg_val & 0x07000000) == (2 << 24) ) {file.write("RZQ/2 (010b)\n");}\r
+       if ( (reg_val & 0x07000000) == (3 << 24) ) {file.write("RZQ/6 (011b)\n");}\r
+       if ( (reg_val & 0x07000000) == (4 << 24) ) {file.write("RZQ/12 (100b)\n");}\r
+       if ( (reg_val & 0x07000000) == (5 << 24) ) {file.write("RZQ/8  (101b)\n");}\r
+       if ( (reg_val & 0x07000000) == (6 << 24) ) {file.write("ERROR\n");}\r
+       if ( (reg_val & 0x07000000) == (7 << 24) ) {file.write("ERROR\n");}\r
+}\r
+if (is_ddr2 == 1) {\r
+       file.write("  * Bits 26:24 (reg_ddr_term) set for ");\r
+       if ( (reg_val & 0x07000000) == (0 << 24) ) {file.write("termination disabled (000b)\n");}\r
+       if ( (reg_val & 0x07000000) == (1 << 24) ) {file.write("75 Ohm (001b)\n");}\r
+       if ( (reg_val & 0x07000000) == (2 << 24) ) {file.write("150 Ohm (010b)\n");}\r
+       if ( (reg_val & 0x07000000) == (3 << 24) ) {file.write("50 Ohm (011b)\n");}\r
+       if ( (reg_val & 0x07000000) == (4 << 24) ) {file.write("ERROR\n");}\r
+       if ( (reg_val & 0x07000000) == (5 << 24) ) {file.write("ERROR\n");}\r
+       if ( (reg_val & 0x07000000) == (6 << 24) ) {file.write("ERROR\n");}\r
+       if ( (reg_val & 0x07000000) == (7 << 24) ) {file.write("ERROR\n");}\r
+}\r
+if (is_ddr3 == 1) {\r
+       file.write("  * Bits 19:18 (reg_sdram_drive) set for ");\r
+       if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("RZQ/6 (00b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("RZQ/7 (01b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("ERROR (10b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("ERROR (11b)\n");}\r
+}\r
+if (is_ddr2 == 1) {\r
+       file.write("  * Bits 19:18 (reg_sdram_drive) set for ");\r
+       if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("normal drive (00b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("weak drive (01b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("ERROR (10b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("ERROR (11b)\n");}\r
+}\r
+if (is_lpddr == 1) {\r
+       file.write("  * Bits 19:18 (reg_sdram_drive) set for ");\r
+       if ( (reg_val & 0x000C0000) == (0 << 18) ) {file.write("full strength (00b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (1 << 18) ) {file.write("half strength (01b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (2 << 18) ) {file.write("quarter strength (10b)\n");}\r
+       if ( (reg_val & 0x000C0000) == (3 << 18) ) {file.write("eighth strength (11b)\n");}\r
+}\r
+\r
+// EMIF: PWR_MGMT_CTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "EMIF: PWR_MGMT_CTRL", 0x4C000038);\r
+\r
+// DDR PHY: DDR_PHY_CTRL_1\r
+reg_val = printRegisterValue(debugSessionDAP, "DDR PHY: DDR_PHY_CTRL_1", 0x4C0000E4);\r
+file.write("  * Bits 9:8 (reg_phy_rd_local_odt) configured as ");\r
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("no termination (00b)\n");}\r
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("no termination (01b)\n");}\r
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("full thevenin termination\n");}\r
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("half thevenin termination\n");}\r
+\r
+// CONTROL: DDR_CMD0_IOCTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD0_IOCTRL", 0x44E11404);\r
+file.write("  * Bits 9:5 control ddr_ck and ddr_ckn\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+file.write("  * Bits 4:0 control ddr_ba0, ddr_ba2, ddr_wen, ddr_a[9:8], ddr_a[6:3]\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+\r
+// CONTROL: DDR_CMD1_IOCTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD1_IOCTRL", 0x44E11408);\r
+file.write("  * Bits 4:0 control ddr_15, ddr_a[12:10], ddr_a7, ddr_a2, ddr_a0, ddr_ba1, ddr_casn, ddr_rasn\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+\r
+// CONTROL: DDR_CMD2_IOCTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CMD2_IOCTRL", 0x44E1140C);\r
+file.write("  * Bits 4:0 control ddr_cke, ddr_resetn, ddr_odt, ddr_csn0, ddr_[a14:13], ddr_a1\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+\r
+// CONTROL: DDR_DATA0_IOCTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_DATA0_IOCTRL", 0x44E11440);\r
+file.write("  * Bits 9:5 control ddr_dqs1, ddr_dqsn1\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+file.write("  * Bits 4:0 control ddr_d[15:8], ddr_dqm1\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+\r
+// CONTROL: DDR_DATA1_IOCTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_DATA1_IOCTRL", 0x44E11444);\r
+file.write("  * Bits 9:5 control ddr_dqs0, ddr_dqsn0\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x300) == (0 << 8) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x300) == (1 << 8) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x300) == (2 << 8) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x300) == (3 << 8) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0xE0) >> 5) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+file.write("  * Bits 4:0 control ddr_d[7:0], dqm0\n");\r
+file.write("    - Slew ");\r
+if ( (reg_val & 0x18) == (0 << 3) ) {file.write("fastest\n");}\r
+if ( (reg_val & 0x18) == (1 << 3) ) {file.write("slow\n");}\r
+if ( (reg_val & 0x18) == (2 << 3) ) {file.write("fast\n");}\r
+if ( (reg_val & 0x18) == (3 << 3) ) {file.write("slowest\n");}\r
+var drive_strength_mA = ((reg_val & 0x07) >> 0) + 5;\r
+file.write("    - Drive Strength " + drive_strength_mA + " mA\n");\r
+\r
+// CONTROL: DDR_IO_CTRL\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_IO_CTRL", 0x44E10E04);\r
+if ( (reg_val & (1 << 28)) == 0) {\r
+       file.write("  * Bit 28 (mddr_sel) configured for SSTL, i.e. DDR2/DDR3/DDR3L operation.\n");\r
+       if (is_lpddr == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}\r
+}\r
+else {\r
+       file.write("  * Bit 28 (mddr_sel) configured for LVCMOS, i.e. LPDDR/mDDR operation.\n");\r
+       if (is_ddr2 == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}\r
+       if (is_ddr3 == 1) {file.write("ERROR!  Mismatch with SDRAM_CONFIG.\n");}\r
+}\r
+\r
+\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: VTP_CTRL", 0x44E10E0C);\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: VREF_CTRL", 0x44E10E14);\r
+reg_val = printRegisterValue(debugSessionDAP, "CONTROL: DDR_CKE_CTRL", 0x44E1131C);\r
+\r
+file.close();\r
+debugSessionDAP.target.disconnect();\r
+\r