Add files for decoding pinmux data
authorBrad Griffis <bgriffis@ti.com>
Thu, 10 Jan 2019 19:43:38 +0000 (13:43 -0600)
committerBrad Griffis <bgriffis@ti.com>
Thu, 10 Jan 2019 19:43:38 +0000 (13:43 -0600)
padconf/README [new file with mode: 0644]
padconf/am335x-padconf-decoder.py [new file with mode: 0644]
padconf/am335x-padconf-rd1.sh [new file with mode: 0644]
padconf/am335x-padconf.dss [new file with mode: 0644]
padconf/am335x-pinmux.data [new file with mode: 0644]

diff --git a/padconf/README b/padconf/README
new file mode 100644 (file)
index 0000000..87d545c
--- /dev/null
@@ -0,0 +1,68 @@
+Introduction
+============
+
+This padconf subdirectory contains various files related to dumping
+padconf-related registers and then parsing those registers to decode
+a given device's pinmux configuration.
+
+This is a 2 step process:
+
+1. The registers are saved as a *.rd1 file.  There are two ways to do this:
+   a. Linux command line using am335x-padconf-rd1.sh.
+   b. CCS+JTAG using am335x-padconf.dss.
+2. The *.rd1 file is parsed using the am335x-padconf-decoder.py python script.
+
+am335x-padconf-rd1.sh
+=====================
+
+This is a shell script intended to be executed from a Linux command line on
+the am335x device. Note that under the hood, several other Linux commands
+are utilized:
+
+1. date: This is for generating a unique file name.  If your date/time are
+   not correct you might want to set them before running this code.  For
+   example, you can run "ntpd -s" to set the time with NTP.  You might
+   need to update /etc/ntpd.conf or you might need to configure proxies
+   for that to work if for example you are behind a firewall.
+2. devmem2: This is used for reading from physical memory locations.
+3. sed: This is used for formatting the output of devmem2.
+
+The generated output of this script should be a file with a name like this:
+
+am335x-padconf_yyyy-mm-dd_hhmmss.rd1
+
+The file itself consists of a header line followed by all the data.
+The data is very simple, consisting of the register address followed by
+the data.  Here is an example taken from a file:
+
+PadConf AM335x
+0x44E10800 0x00000031
+0x44E10804 0x00000031
+0x44E10808 0x00000031
+0x44E1080C 0x00000031
+0x44E10810 0x00000031
+
+am335x-padconf.dss
+==================
+
+For am335x users that don't have Linux available, you can also use JTAG
+for dumping the registers in the appropriate *.rd1 file format. Please see
+the README in the root directory:
+
+http://git.ti.com/sitara-dss-files/am335x-dss-files/blobs/master/README
+
+The resulting output will align with what was described for the bash script.
+
+am335x-padconf-decoder.py
+=========================
+
+This is a perl script that takes the *.rd1 file as an input, and produces
+a *.csv file as an output.  It utilizes the *.data file to decode the
+pinmuxing of the various registers.  It can be run on your host PC or even
+on the target if Python is part of the OS image (which is the case if you
+are using the TI Linux Image).  It can be run like this:
+
+./am335x-padconf-decoder.py am335x-padconf_yyyy-mm-dd_hhmmss.rd1
+
+It will correspondingly produce am335x-padconf_yyyy-mm-dd_hhmmss.csv.
+
diff --git a/padconf/am335x-padconf-decoder.py b/padconf/am335x-padconf-decoder.py
new file mode 100644 (file)
index 0000000..3d5c273
--- /dev/null
@@ -0,0 +1,135 @@
+#!/usr/bin/python
+#
+# Copyright (c) 2019, Texas Instruments Incorporated
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# *  Redistributions of source code must retain the above copyright
+#    notice, this list of conditions and the following disclaimer.
+#
+# *  Redistributions in binary form must reproduce the above copyright
+#    notice, this list of conditions and the following disclaimer in the
+#    documentation and/or other materials provided with the distribution.
+#
+# *  Neither the name of Texas Instruments Incorporated nor the names of
+#    its contributors may be used to endorse or promote products derived
+#    from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+# EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+
+import xml.etree.ElementTree as ET
+import re
+import sys
+
+if len(sys.argv) != 2:
+    print  # Empty line
+    print sys.argv[0], "help:\n"
+    print "Please pass the rd1 file to this script, e.g.:"
+    print "", sys.argv[0], "am335x-padconf_yyyy-mm-dd_hhmmss.rd1\n"
+    print("Output file will have same base name as input, "
+          "but csv file type.\n")
+    sys.exit(1)
+
+try:
+    rd1 = open(sys.argv[1], "rt")
+except IOError:
+    print "Error: input file", sys.argv[1], "not accessible."
+    sys.exit(1)
+
+try:
+    csv_filename = sys.argv[1]
+    csv_filename = csv_filename.replace(".rd1", ".csv")
+    csv = open(csv_filename, "w+")
+except IOError:
+    print "Error creating file", csv_filename
+
+# CSV files must use \r\n for all line endings
+# Create header row
+csv.write("Reg Name,Reg Address,Reg Value,Slew,InputEnable,Pull Config,"
+          "Muxmode,Mux Description,Comments\r\n")
+csv_string = "%s,0x%08X,0x%08X,%s,%s,%s,%d,%s,%s\r\n"
+
+# Determine device family based on header
+header = rd1.readline()
+m = re.match(r'.*AM335x.*', header, 0);
+if m is None:
+    print "Unrecognized device family in header:"
+    print header
+    sys.exit(1)
+
+# Open pinmux data file
+try:
+    data_file = open("am335x-pinmux.data", "rt")
+except IOError:
+    print "Error: Could not open am335x-pinmux.data."
+    sys.exit(1)
+
+# Read header row from pinmux data file (throw away)
+data_file.readline()
+
+for lines in rd1:
+    # Use regular expression to extract address and data from rd1
+    m = re.match(r'(0x[0-9a-fA-F]{8})\s+(0x[0-9a-fA-F]{8})', lines, 0)
+    if m:
+        alphanum1 = m.group(1)  # address (string)
+        alphanum2 = m.group(2)  # data (string)
+        address = int(alphanum1, 16)  # convert from string to number
+        offset = address - 0x44E10000
+        register_value = int(alphanum2, 16)  # convert from string
+        comments = ""  # Start new for each line
+
+        # Extract slewcontrol field
+        if (register_value & 0x00000040) == 0x00000040:
+            slewstring = "slow"
+            comments += "Slow slew not allowed"
+        else:
+            slewstring = "fast"
+
+        # Extract inputenable and pullup/pulldown info
+        if (register_value & 0x00000020) == 0x00000020:
+            inputenable_string = "input enabled"
+        else:
+            inputenable_string = "output-only"
+        if (register_value & 0x00000008) == 0x00000008:
+            pullstring = "no pull"
+        else:
+            if (register_value & 0x00000010) == 0x00000010:
+                pullstring = "pullup"
+            else:
+                pullstring = "pulldown"
+
+        # Extract muxmode and associated description
+        muxmode = register_value & 0x7
+       mux_data = data_file.readline()
+        m = re.match(r'(.*),(0x[0-9a-fA-F]{8}),(.*),(.*),(.*),(.*),(.*),(.*),(.*),(\S*)', mux_data, 0)
+        if m:
+            register_name = m.group(1)
+            data_file_address = int(m.group(2), 16)
+            if data_file_address != address:
+                print "Address mismatch error. Address %08X from rd1 doesn't match %08X from data file." % (address, data_file_address)
+            muxmode_description = m.group(muxmode + 3)
+        else:
+            print "Could not find matching mux mode for address %08X muxmode %d" % (address, muxmode)
+
+        # Write a line of the CSV file
+        csv.write(csv_string % (register_name, address,
+                  register_value, slewstring, inputenable_string,
+                  pullstring, muxmode, muxmode_description, comments))
+
+rd1.close()
+csv.close()
+
diff --git a/padconf/am335x-padconf-rd1.sh b/padconf/am335x-padconf-rd1.sh
new file mode 100644 (file)
index 0000000..0a08330
--- /dev/null
@@ -0,0 +1,136 @@
+#!/bin/bash
+today=`date '+%Y-%m-%d_%H%M%S'`;
+OUTPUT_FILE=am335x-padconf_$today.rd1
+
+# Create new file
+echo "PadConf AM335x" > $OUTPUT_FILE
+
+# Append to file
+while IFS='' read -r line || [[ -n "$line" ]]; do
+    devmem2 $line | sed '1d2ds/.*\s\(0x[0-9a-fA-F]*\)\s.*: \(0x[0-9a-fA-F]*\)*/\1 \2/' >> $OUTPUT_FILE
+done << EOM
+0x44E10800
+0x44E10804
+0x44E10808
+0x44E1080C
+0x44E10810
+0x44E10814
+0x44E10818
+0x44E1081C
+0x44E10820
+0x44E10824
+0x44E10828
+0x44E1082C
+0x44E10830
+0x44E10834
+0x44E10838
+0x44E1083C
+0x44E10840
+0x44E10844
+0x44E10848
+0x44E1084C
+0x44E10850
+0x44E10854
+0x44E10858
+0x44E1085C
+0x44E10860
+0x44E10864
+0x44E10868
+0x44E1086C
+0x44E10870
+0x44E10874
+0x44E10878
+0x44E1087C
+0x44E10880
+0x44E10884
+0x44E10888
+0x44E1088C
+0x44E10890
+0x44E10894
+0x44E10898
+0x44E1089C
+0x44E108A0
+0x44E108A4
+0x44E108A8
+0x44E108AC
+0x44E108B0
+0x44E108B4
+0x44E108B8
+0x44E108BC
+0x44E108C0
+0x44E108C4
+0x44E108C8
+0x44E108CC
+0x44E108D0
+0x44E108D4
+0x44E108D8
+0x44E108DC
+0x44E108E0
+0x44E108E4
+0x44E108E8
+0x44E108EC
+0x44E108F0
+0x44E108F4
+0x44E108F8
+0x44E108FC
+0x44E10900
+0x44E10904
+0x44E10908
+0x44E1090C
+0x44E10910
+0x44E10914
+0x44E10918
+0x44E1091C
+0x44E10920
+0x44E10924
+0x44E10928
+0x44E1092C
+0x44E10930
+0x44E10934
+0x44E10938
+0x44E1093C
+0x44E10940
+0x44E10944
+0x44E10948
+0x44E1094C
+0x44E10950
+0x44E10954
+0x44E10958
+0x44E1095C
+0x44E10960
+0x44E10964
+0x44E10968
+0x44E1096C
+0x44E10970
+0x44E10974
+0x44E10978
+0x44E1097C
+0x44E10980
+0x44E10984
+0x44E10988
+0x44E1098C
+0x44E10990
+0x44E10994
+0x44E10998
+0x44E1099C
+0x44E109A0
+0x44E109A4
+0x44E109A8
+0x44E109AC
+0x44E109B0
+0x44E109B4
+0x44E109B8
+0x44E109C0
+0x44E109D0
+0x44E109D4
+0x44E109D8
+0x44E109DC
+0x44E109E0
+0x44E109E4
+0x44E109E8
+0x44E109F8
+0x44E109FC
+0x44E10A00
+0x44E10A1C
+0x44E10A34
+EOM
diff --git a/padconf/am335x-padconf.dss b/padconf/am335x-padconf.dss
new file mode 100644 (file)
index 0000000..13970f6
--- /dev/null
@@ -0,0 +1,213 @@
+/*
+ * Copyright (c) 2017, Texas Instruments Incorporated
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * *  Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *
+ * *  Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * *  Neither the name of Texas Instruments Incorporated nor the names of
+ *    its contributors may be used to endorse or promote products derived
+ *    from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+ * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+
+var padconf_registers = [
+       0x44E10800,
+       0x44E10804,
+       0x44E10808,
+       0x44E1080C,
+       0x44E10810,
+       0x44E10814,
+       0x44E10818,
+       0x44E1081C,
+       0x44E10820,
+       0x44E10824,
+       0x44E10828,
+       0x44E1082C,
+       0x44E10830,
+       0x44E10834,
+       0x44E10838,
+       0x44E1083C,
+       0x44E10840,
+       0x44E10844,
+       0x44E10848,
+       0x44E1084C,
+       0x44E10850,
+       0x44E10854,
+       0x44E10858,
+       0x44E1085C,
+       0x44E10860,
+       0x44E10864,
+       0x44E10868,
+       0x44E1086C,
+       0x44E10870,
+       0x44E10874,
+       0x44E10878,
+       0x44E1087C,
+       0x44E10880,
+       0x44E10884,
+       0x44E10888,
+       0x44E1088C,
+       0x44E10890,
+       0x44E10894,
+       0x44E10898,
+       0x44E1089C,
+       0x44E108A0,
+       0x44E108A4,
+       0x44E108A8,
+       0x44E108AC,
+       0x44E108B0,
+       0x44E108B4,
+       0x44E108B8,
+       0x44E108BC,
+       0x44E108C0,
+       0x44E108C4,
+       0x44E108C8,
+       0x44E108CC,
+       0x44E108D0,
+       0x44E108D4,
+       0x44E108D8,
+       0x44E108DC,
+       0x44E108E0,
+       0x44E108E4,
+       0x44E108E8,
+       0x44E108EC,
+       0x44E108F0,
+       0x44E108F4,
+       0x44E108F8,
+       0x44E108FC,
+       0x44E10900,
+       0x44E10904,
+       0x44E10908,
+       0x44E1090C,
+       0x44E10910,
+       0x44E10914,
+       0x44E10918,
+       0x44E1091C,
+       0x44E10920,
+       0x44E10924,
+       0x44E10928,
+       0x44E1092C,
+       0x44E10930,
+       0x44E10934,
+       0x44E10938,
+       0x44E1093C,
+       0x44E10940,
+       0x44E10944,
+       0x44E10948,
+       0x44E1094C,
+       0x44E10950,
+       0x44E10954,
+       0x44E10958,
+       0x44E1095C,
+       0x44E10960,
+       0x44E10964,
+       0x44E10968,
+       0x44E1096C,
+       0x44E10970,
+       0x44E10974,
+       0x44E10978,
+       0x44E1097C,
+       0x44E10980,
+       0x44E10984,
+       0x44E10988,
+       0x44E1098C,
+       0x44E10990,
+       0x44E10994,
+       0x44E10998,
+       0x44E1099C,
+       0x44E109A0,
+       0x44E109A4,
+       0x44E109A8,
+       0x44E109AC,
+       0x44E109B0,
+       0x44E109B4,
+       0x44E109B8,
+       0x44E109C0,
+       0x44E109D0,
+       0x44E109D4,
+       0x44E109D8,
+       0x44E109DC,
+       0x44E109E0,
+       0x44E109E4,
+       0x44E109E8,
+       0x44E109F8,
+       0x44E109FC,
+       0x44E10A00,
+       0x44E10A1C,
+       0x44E10A34,
+];
+
+debugSessionDAP = ds.openSession("*","CS_DAP_M3");
+debugSessionDAP.target.connect();
+
+// Check connection by reading a location known to be non-zero (CM_WKUP_DEBUGSS_CLKCTRL)
+value = debugSessionDAP.memory.readWord(0,0x44e00414,false);
+if (value == 0) {
+       // Use DebugSS instead
+       debugSessionDAP.target.disconnect();
+       debugSessionDAP = ds.openSession("*","CS_DAP_DebugSS");
+       debugSessionDAP.target.connect();
+       value = debugSessionDAP.memory.readWord(0,0x44e00414,false);
+       if (value == 0) {
+               print("ERROR: Trouble reading sane values from memory.");
+               print("CM_WKUP_DEBUGSS_CLKCTRL = 0x" + d2h(value));
+       }
+}
+
+
+//Build a filename that includes date/time
+var today = new Date();
+var year4digit = today.getFullYear();
+var month2digit = ("0" + (today.getMonth()+1)).slice(-2);
+var day2digit = ("0" + today.getDate()).slice(-2);
+var hour2digit = ("0" + today.getHours()).slice(-2);
+var minutes2digit = ("0" + today.getMinutes()).slice(-2);
+var seconds2digit = ("0" + today.getSeconds()).slice(-2);
+var filename_date = '_' + year4digit + '-' + month2digit + '-' + day2digit + '_' + hour2digit + minutes2digit + seconds2digit; 
+var userHomeFolder = System.getProperty("user.home");
+var filename = userHomeFolder + '/Desktop/' + 'am335x-padconf' + filename_date + '.rd1';
+
+file = new java.io.FileWriter(filename);
+file.write("PadConf AM335x\n");
+
+// helper function to create 8-digit hex numbers in ascii format
+function d2h(d) {return ("00000000" + (+d).toString(16)).slice(-8);}
+
+// read CTT data from physical addresses
+for(i=0; i<padconf_registers.length; i++)
+{
+       try {
+               value = debugSessionDAP.memory.readWord(0,padconf_registers[i],false);
+               value_string = d2h(value);
+               file.write('0x' + ("0000" + padconf_registers[i].toString(16)).slice(-8) + " 0x" + value_string + "\n");
+       } catch (ex) {
+               print("\n Trouble reading address 0x" + d2h(padconf_registers[i]) + ". Skipping register.\n");
+       }
+}
+print("Data collection complete.");
+
+file.close();
+debugSessionDAP.target.disconnect();
+print("Created file " + filename);
+
diff --git a/padconf/am335x-pinmux.data b/padconf/am335x-pinmux.data
new file mode 100644 (file)
index 0000000..12f625c
--- /dev/null
@@ -0,0 +1,125 @@
+Register,Address,Mode 0,Mode 1,Mode 2,Mode 3,Mode 4,Mode 5,Mode 6,Mode 7
+conf_gpmc_ad0,0x44E10800,gpmc_ad0,mmc1_dat0,,,,,,gpio1_0
+conf_gpmc_ad1,0x44E10804,gpmc_ad1,mmc1_dat1,,,,,,gpio1_1
+conf_gpmc_ad2,0x44E10808,gpmc_ad2,mmc1_dat2,,,,,,gpio1_2
+conf_gpmc_ad3,0x44E1080C,gpmc_ad3,mmc1_dat3,,,,,,gpio1_3
+conf_gpmc_ad4,0x44E10810,gpmc_ad4,mmc1_dat4,,,,,,gpio1_4
+conf_gpmc_ad5,0x44E10814,gpmc_ad5,mmc1_dat5,,,,,,gpio1_5
+conf_gpmc_ad6,0x44E10818,gpmc_ad6,mmc1_dat6,,,,,,gpio1_6
+conf_gpmc_ad7,0x44E1081C,gpmc_ad7,mmc1_dat7,,,,,,gpio1_7
+conf_gpmc_ad8,0x44E10820,gpmc_ad8,lcd_data23,mmc1_dat0,mmc2_dat4,ehrpwm2A,pr1_mii_mt0_clk,,gpio0_22
+conf_gpmc_ad9,0x44E10824,gpmc_ad9,lcd_data22,mmc1_dat1,mmc2_dat5,ehrpwm2B,pr1_mii0_col,,gpio0_23
+conf_gpmc_ad10,0x44E10828,gpmc_ad10,lcd_data21,mmc1_dat2,mmc2_dat6,ehrpwm2_tripzone_input,pr1_mii0_txen,,gpio0_26
+conf_gpmc_ad11,0x44E1082C,gpmc_ad11,lcd_data20,mmc1_dat3,mmc2_dat7,ehrpwm0_synco,pr1_mii0_txd3,,gpio0_27
+conf_gpmc_ad12,0x44E10830,gpmc_ad12,lcd_data19,mmc1_dat4,mmc2_dat0,eQEP2A_in,pr1_mii0_txd2,pr1_pru0_pru_r30_14,gpio1_12
+conf_gpmc_ad13,0x44E10834,gpmc_ad13,lcd_data18,mmc1_dat5,mmc2_dat1,eQEP2B_in,pr1_mii0_txd1,pr1_pru0_pru_r30_15,gpio1_13
+conf_gpmc_ad14,0x44E10838,gpmc_ad14,lcd_data17,mmc1_dat6,mmc2_dat2,eQEP2_index,pr1_mii0_txd0,pr1_pru0_pru_r31_14,gpio1_14
+conf_gpmc_ad15,0x44E1083C,gpmc_ad15,lcd_data16,mmc1_dat7,mmc2_dat3,eQEP2_strobe,pr1_ecap0_ecap_capin_apwm_o,pr1_pru0_pru_r31_15,gpio1_15
+conf_gpmc_a0,0x44E10840,gpmc_a0,gmii2_txen,rgmii2_tctl,rmii2_txen,gpmc_a16,pr1_mii_mt1_clk,ehrpwm1_tripzone_input,gpio1_16
+conf_gpmc_a1,0x44E10844,gpmc_a1,gmii2_rxdv,rgmii2_rctl,mmc2_dat0,gpmc_a17,pr1_mii1_txd3,ehrpwm0_synco,gpio1_17
+conf_gpmc_a2,0x44E10848,gpmc_a2,gmii2_txd3,rgmii2_td3,mmc2_dat1,gpmc_a18,pr1_mii1_txd2,ehrpwm1A,gpio1_18
+conf_gpmc_a3,0x44E1084C,gpmc_a3,gmii2_txd2,rgmii2_td2,mmc2_dat2,gpmc_a19,pr1_mii1_txd1,ehrpwm1B,gpio1_19
+conf_gpmc_a4,0x44E10850,gpmc_a4,gmii2_txd1,rgmii2_td1,rmii2_txd1,gpmc_a20,pr1_mii1_txd0,eQEP1A_in,gpio1_20
+conf_gpmc_a5,0x44E10854,gpmc_a5,gmii2_txd0,rgmii2_td0,rmii2_txd0,gpmc_a21,pr1_mii1_rxd3,eQEP1B_in,gpio1_21
+conf_gpmc_a6,0x44E10858,gpmc_a6,gmii2_txclk,rgmii2_tclk,mmc2_dat4,gpmc_a22,pr1_mii1_rxd2,eQEP1_index,gpio1_22
+conf_gpmc_a7,0x44E1085C,gpmc_a7,gmii2_rxclk,rgmii2_rclk,mmc2_dat5,gpmc_a23,pr1_mii1_rxd1,eQEP1_strobe,gpio1_23
+conf_gpmc_a8,0x44E10860,gpmc_a8,gmii2_rxd3,rgmii2_rd3,mmc2_dat6,gpmc_a24,pr1_mii1_rxd0,mcasp0_aclkx,gpio1_24
+conf_gpmc_a9,0x44E10864,gpmc_a9,gmii2_rxd2,rgmii2_rd2,mmc2_dat7,gpmc_a25,pr1_mii_mr1_clk,mcasp0_fsx,gpio1_25
+conf_gpmc_a10,0x44E10868,gpmc_a10,gmii2_rxd1,rgmii2_rd1,rmii2_rxd1,gpmc_a26,pr1_mii1_rxdv,mcasp0_axr0,gpio1_26
+conf_gpmc_a11,0x44E1086C,gpmc_a11,gmii2_rxd0,rgmii2_rd0,rmii2_rxd0,gpmc_a27,pr1_mii1_rxer,mcasp0_axr1,gpio1_27
+conf_gpmc_wait0,0x44E10870,gpmc_wait0,gmii2_crs,gpmc_csn4,rmii2_crs_dv,mmc1_sdcd,pr1_mii1_col,uart4_rxd,gpio0_30
+conf_gpmc_wpn,0x44E10874,gpmc_wpn,gmii2_rxerr,gpmc_csn5,rmii2_rxerr,mmc2_sdcd,pr1_mii1_txen,uart4_txd,gpio0_31
+conf_gpmc_ben1,0x44E10878,gpmc_be1n,gmii2_col,gpmc_csn6,mmc2_dat3,gpmc_dir,pr1_mii1_rxlink,mcasp0_aclkr,gpio1_28
+conf_gpmc_csn0,0x44E1087C,gpmc_csn0,,,,,,,gpio1_29
+conf_gpmc_csn1,0x44E10880,gpmc_csn1,gpmc_clk,mmc1_clk,pr1_edio_data_in6,pr1_edio_data_out6,pr1_pru1_pru_r30_12,pr1_pru1_pru_r31_12,gpio1_30
+conf_gpmc_csn2,0x44E10884,gpmc_csn2,gpmc_be1n,mmc1_cmd,pr1_edio_data_in7,pr1_edio_data_out7,pr1_pru1_pru_r30_13,pr1_pru1_pru_r31_13,gpio1_31
+conf_gpmc_csn3,0x44E10888,gpmc_csn3,,,mmc2_cmd,pr1_mii0_crs,pr1_mdio_data,EMU4,gpio2_0
+conf_gpmc_clk,0x44E1088C,gpmc_clk,lcd_memory_clk,gpmc_wait1,mmc2_clk,pr1_mii1_crs,pr1_mdio_mdclk,mcasp0_fsr,gpio2_1
+conf_gpmc_advn_ale,0x44E10890,gpmc_advn_ale,,timer4,,,,,gpio2_2
+conf_gpmc_oen_ren,0x44E10894,gpmc_oen_ren,,timer7,,,,,gpio2_3
+conf_gpmc_wen,0x44E10898,gpmc_wen,,timer6,,,,,gpio2_4
+conf_gpmc_ben0_cle,0x44E1089C,gpmc_be0n_cle,,timer5,,,,,gpio2_5
+conf_lcd_data0,0x44E108A0,lcd_data0,gpmc_a0,pr1_mii_mt0_clk,ehrpwm2A,,pr1_pru1_pru_r30_0,pr1_pru1_pru_r31_0,gpio2_6
+conf_lcd_data1,0x44E108A4,lcd_data1,gpmc_a1,pr1_mii0_txen,ehrpwm2B,,pr1_pru1_pru_r30_1,pr1_pru1_pru_r31_1,gpio2_7
+conf_lcd_data2,0x44E108A8,lcd_data2,gpmc_a2,pr1_mii0_txd3,ehrpwm2_tripzone_input,,pr1_pru1_pru_r30_2,pr1_pru1_pru_r31_2,gpio2_8
+conf_lcd_data3,0x44E108AC,lcd_data3,gpmc_a3,pr1_mii0_txd2,ehrpwm0_synco,,pr1_pru1_pru_r30_3,pr1_pru1_pru_r31_3,gpio2_9
+conf_lcd_data4,0x44E108B0,lcd_data4,gpmc_a4,pr1_mii0_txd1,eQEP2A_in,,pr1_pru1_pru_r30_4,pr1_pru1_pru_r31_4,gpio2_10
+conf_lcd_data5,0x44E108B4,lcd_data5,gpmc_a5,pr1_mii0_txd0,eQEP2B_in,,pr1_pru1_pru_r30_5,pr1_pru1_pru_r31_5,gpio2_11
+conf_lcd_data6,0x44E108B8,lcd_data6,gpmc_a6,pr1_edio_data_in6,eQEP2_index,pr1_edio_data_out6,pr1_pru1_pru_r30_6,pr1_pru1_pru_r31_6,gpio2_12
+conf_lcd_data7,0x44E108BC,lcd_data7,gpmc_a7,pr1_edio_data_in7,eQEP2_strobe,pr1_edio_data_out7,pr1_pru1_pru_r30_7,pr1_pru1_pru_r31_7,gpio2_13
+conf_lcd_data8,0x44E108C0,lcd_data8,gpmc_a12,ehrpwm1_tripzone_input,mcasp0_aclkx,uart5_txd,pr1_mii0_rxd3,uart2_ctsn,gpio2_14
+conf_lcd_data9,0x44E108C4,lcd_data9,gpmc_a13,ehrpwm0_synco,mcasp0_fsx,uart5_rxd,pr1_mii0_rxd2,uart2_rtsn,gpio2_15
+conf_lcd_data10,0x44E108C8,lcd_data10,gpmc_a14,ehrpwm1A,mcasp0_axr0,,pr1_mii0_rxd1,uart3_ctsn,gpio2_16
+conf_lcd_data11,0x44E108CC,lcd_data11,gpmc_a15,ehrpwm1B,mcasp0_ahclkr,mcasp0_axr2,pr1_mii0_rxd0,uart3_rtsn,gpio2_17
+conf_lcd_data12,0x44E108D0,lcd_data12,gpmc_a16,eQEP1A_in,mcasp0_aclkr,mcasp0_axr2,pr1_mii0_rxlink,uart4_ctsn,gpio0_8
+conf_lcd_data13,0x44E108D4,lcd_data13,gpmc_a17,eQEP1B_in,mcasp0_fsr,mcasp0_axr3,pr1_mii0_rxer,uart4_rtsn,gpio0_9
+conf_lcd_data14,0x44E108D8,lcd_data14,gpmc_a18,eQEP1_index,mcasp0_axr1,uart5_rxd,pr1_mii_mr0_clk,uart5_ctsn,gpio0_10
+conf_lcd_data15,0x44E108DC,lcd_data15,gpmc_a19,eQEP1_strobe,mcasp0_ahclkx,mcasp0_axr3,pr1_mii0_rxdv,uart5_rtsn,gpio0_11
+conf_lcd_vsync,0x44E108E0,lcd_vsync,gpmc_a8,,pr1_edio_data_in2,pr1_edio_data_out2,pr1_pru1_pru_r30_8,pr1_pru1_pru_r31_8,gpio2_22
+conf_lcd_hsync,0x44E108E4,lcd_hsync,gpmc_a9,,pr1_edio_data_in3,pr1_edio_data_out3,pr1_pru1_pru_r30_9,pr1_pru1_pru_r31_9,gpio2_23
+conf_lcd_pclk,0x44E108E8,lcd_pclk,gpmc_a10,pr1_mii0_crs,pr1_edio_data_in4,pr1_edio_data_out4,pr1_pru1_pru_r30_10,pr1_pru1_pru_r31_10,gpio2_24
+conf_lcd_ac_bias_en,0x44E108EC,lcd_ac_bias_en,gpmc_a11,pr1_mii1_crs,pr1_edio_data_in5,pr1_edio_data_out5,pr1_pru1_pru_r30_11,pr1_pru1_pru_r31_11,gpio2_25
+conf_mmc0_dat3,0x44E108F0,mmc0_dat3,gpmc_a20,uart4_ctsn,timer5,uart1_dcdn,pr1_pru0_pru_r30_8,pr1_pru0_pru_r31_8,gpio2_26
+conf_mmc0_dat2,0x44E108F4,mmc0_dat2,gpmc_a21,uart4_rtsn,timer6,uart1_dsrn,pr1_pru0_pru_r30_9,pr1_pru0_pru_r31_9,gpio2_27
+conf_mmc0_dat1,0x44E108F8,mmc0_dat1,gpmc_a22,uart5_ctsn,uart3_rxd,uart1_dtrn,pr1_pru0_pru_r30_10,pr1_pru0_pru_r31_10,gpio2_28
+conf_mmc0_dat0,0x44E108FC,mmc0_dat0,gpmc_a23,uart5_rtsn,uart3_txd,uart1_rin,pr1_pru0_pru_r30_11,pr1_pru0_pru_r31_11,gpio2_29
+conf_mmc0_clk,0x44E10900,mmc0_clk,gpmc_a24,uart3_ctsn,uart2_rxd,dcan1_tx,pr1_pru0_pru_r30_12,pr1_pru0_pru_r31_12,gpio2_30
+conf_mmc0_cmd,0x44E10904,mmc0_cmd,gpmc_a25,uart3_rtsn,uart2_txd,dcan1_rx,pr1_pru0_pru_r30_13,pr1_pru0_pru_r31_13,gpio2_31
+conf_mii1_col,0x44E10908,gmii1_col,rmii2_refclk,spi1_sclk,uart5_rxd,mcasp1_axr2,mmc2_dat3,mcasp0_axr2,gpio3_0
+conf_mii1_crs,0x44E1090C,gmii1_crs,rmii1_crs_dv,spi1_d0,I2C1_SDA,mcasp1_aclkx,uart5_ctsn,uart2_rxd,gpio3_1
+conf_mii1_rx_er,0x44E10910,gmii1_rxerr,rmii1_rxerr,spi1_d1,I2C1_SCL,mcasp1_fsx,uart5_rtsn,uart2_txd,gpio3_2
+conf_mii1_tx_en,0x44E10914,gmii1_txen,rmii1_txen,rgmii1_tctl,timer4,mcasp1_axr0,eQEP0_index,mmc2_cmd,gpio3_3
+conf_mii1_rx_dv,0x44E10918,gmii1_rxdv,lcd_memory_clk,rgmii1_rctl,uart5_txd,mcasp1_aclkx,mmc2_dat0,mcasp0_aclkr,gpio3_4
+conf_mii1_txd3,0x44E1091C,gmii1_txd3,dcan0_tx,rgmii1_td3,uart4_rxd,mcasp1_fsx,mmc2_dat1,mcasp0_fsr,gpio0_16
+conf_mii1_txd2,0x44E10920,gmii1_txd2,dcan0_rx,rgmii1_td2,uart4_txd,mcasp1_axr0,mmc2_dat2,mcasp0_ahclkx,gpio0_17
+conf_mii1_txd1,0x44E10924,gmii1_txd1,rmii1_txd1,rgmii1_td1,mcasp1_fsr,mcasp1_axr1,eQEP0A_in,mmc1_cmd,gpio0_21
+conf_mii1_txd0,0x44E10928,gmii1_txd0,rmii1_txd0,rgmii1_td0,mcasp1_axr2,mcasp1_aclkr,eQEP0B_in,mmc1_clk,gpio0_28
+conf_mii1_tx_clk,0x44E1092C,gmii1_txclk,uart2_rxd,rgmii1_tclk,mmc0_dat7,mmc1_dat0,uart1_dcdn,mcasp0_aclkx,gpio3_9
+conf_mii1_rx_clk,0x44E10930,gmii1_rxclk,uart2_txd,rgmii1_rclk,mmc0_dat6,mmc1_dat1,uart1_dsrn,mcasp0_fsx,gpio3_10
+conf_mii1_rxd3,0x44E10934,gmii1_rxd3,uart3_rxd,rgmii1_rd3,mmc0_dat5,mmc1_dat2,uart1_dtrn,mcasp0_axr0,gpio2_18
+conf_mii1_rxd2,0x44E10938,gmii1_rxd2,uart3_txd,rgmii1_rd2,mmc0_dat4,mmc1_dat3,uart1_rin,mcasp0_axr1,gpio2_19
+conf_mii1_rxd1,0x44E1093C,gmii1_rxd1,rmii1_rxd1,rgmii1_rd1,mcasp1_axr3,mcasp1_fsr,eQEP0_strobe,mmc2_clk,gpio2_20
+conf_mii1_rxd0,0x44E10940,gmii1_rxd0,rmii1_rxd0,rgmii1_rd0,mcasp1_ahclkx,mcasp1_ahclkr,mcasp1_aclkr,mcasp0_axr3,gpio2_21
+conf_rmii1_ref_clk,0x44E10944,rmii1_refclk,xdma_event_intr2,spi1_cs0,uart5_txd,mcasp1_axr3,mmc0_pow,mcasp1_ahclkx,gpio0_29
+conf_mdio,0x44E10948,mdio_data,timer6,uart5_rxd,uart3_ctsn,mmc0_sdcd,mmc1_cmd,mmc2_cmd,gpio0_0
+conf_mdc,0x44E1094C,mdio_clk,timer5,uart5_txd,uart3_rtsn,mmc0_sdwp,mmc1_clk,mmc2_clk,gpio0_1
+conf_spi0_sclk,0x44E10950,spi0_sclk,uart2_rxd,I2C2_SDA,ehrpwm0A,pr1_uart0_cts_n,pr1_edio_sof,EMU2,gpio0_2
+conf_spi0_d0,0x44E10954,spi0_d0,uart2_txd,I2C2_SCL,ehrpwm0B,pr1_uart0_rts_n,pr1_edio_latch_in,EMU3,gpio0_3
+conf_spi0_d1,0x44E10958,spi0_d1,mmc1_sdwp,I2C1_SDA,ehrpwm0_tripzone_input,pr1_uart0_rxd,pr1_edio_data_in0,pr1_edio_data_out0,gpio0_4
+conf_spi0_cs0,0x44E1095C,spi0_cs0,mmc2_sdwp,I2C1_SCL,ehrpwm0_synci,pr1_uart0_txd,pr1_edio_data_in1,pr1_edio_data_out1,gpio0_5
+conf_spi0_cs1,0x44E10960,spi0_cs1,uart3_rxd,eCAP1_in_PWM1_out,mmc0_pow,xdma_event_intr2,mmc0_sdcd,EMU4,gpio0_6
+conf_ecap0_in_pwm0_out,0x44E10964,eCAP0_in_PWM0_out,uart3_txd,spi1_cs1,pr1_ecap0_ecap_capin_apwm_o,spi1_sclk,mmc0_sdwp,xdma_event_intr2,gpio0_7
+conf_uart0_ctsn,0x44E10968,uart0_ctsn,uart4_rxd,dcan1_tx,I2C1_SDA,spi1_d0,timer7,pr1_edc_sync0_out,gpio1_8
+conf_uart0_rtsn,0x44E1096C,uart0_rtsn,uart4_txd,dcan1_rx,I2C1_SCL,spi1_d1,spi1_cs0,pr1_edc_sync1_out,gpio1_9
+conf_uart0_rxd,0x44E10970,uart0_rxd,spi1_cs0,dcan0_tx,I2C2_SDA,eCAP2_in_PWM2_out,pr1_pru1_pru_r30_14,pr1_pru1_pru_r31_14,gpio1_10
+conf_uart0_txd,0x44E10974,uart0_txd,spi1_cs1,dcan0_rx,I2C2_SCL,eCAP1_in_PWM1_out,pr1_pru1_pru_r30_15,pr1_pru1_pru_r31_15,gpio1_11
+conf_uart1_ctsn,0x44E10978,uart1_ctsn,timer6,dcan0_tx,I2C2_SDA,spi1_cs0,pr1_uart0_cts_n,pr1_edc_latch0_in,gpio0_12
+conf_uart1_rtsn,0x44E1097C,uart1_rtsn,timer5,dcan0_rx,I2C2_SCL,spi1_cs1,pr1_uart0_rts_n,pr1_edc_latch1_in,gpio0_13
+conf_uart1_rxd,0x44E10980,uart1_rxd,mmc1_sdwp,dcan1_tx,I2C1_SDA,,pr1_uart0_rxd,pr1_pru1_pru_r31_16,gpio0_14
+conf_uart1_txd,0x44E10984,uart1_txd,mmc2_sdwp,dcan1_rx,I2C1_SCL,,pr1_uart0_txd,pr1_pru0_pru_r31_16,gpio0_15
+conf_i2c0_sda,0x44E10988,I2C0_SDA,timer4,uart2_ctsn,eCAP2_in_PWM2_out,,,,gpio3_5
+conf_i2c0_scl,0x44E1098C,I2C0_SCL,timer7,uart2_rtsn,eCAP1_in_PWM1_out,,,,gpio3_6
+conf_mcasp0_aclkx,0x44E10990,mcasp0_aclkx,ehrpwm0A,,spi1_sclk,mmc0_sdcd,pr1_pru0_pru_r30_0,pr1_pru0_pru_r31_0,gpio3_14
+conf_mcasp0_fsx,0x44E10994,mcasp0_fsx,ehrpwm0B,,spi1_d0,mmc1_sdcd,pr1_pru0_pru_r30_1,pr1_pru0_pru_r31_1,gpio3_15
+conf_mcasp0_axr0,0x44E10998,mcasp0_axr0,ehrpwm0_tripzone_input,,spi1_d1,mmc2_sdcd,pr1_pru0_pru_r30_2,pr1_pru0_pru_r31_2,gpio3_16
+conf_mcasp0_ahclkr,0x44E1099C,mcasp0_ahclkr,ehrpwm0_synci,mcasp0_axr2,spi1_cs0,eCAP2_in_PWM2_out,pr1_pru0_pru_r30_3,pr1_pru0_pru_r31_3,gpio3_17
+conf_mcasp0_aclkr,0x44E109A0,mcasp0_aclkr,eQEP0A_in,mcasp0_axr2,mcasp1_aclkx,mmc0_sdwp,pr1_pru0_pru_r30_4,pr1_pru0_pru_r31_4,gpio3_18
+conf_mcasp0_fsr,0x44E109A4,mcasp0_fsr,eQEP0B_in,mcasp0_axr3,mcasp1_fsx,EMU2,pr1_pru0_pru_r30_5,pr1_pru0_pru_r31_5,gpio3_19
+conf_mcasp0_axr1,0x44E109A8,mcasp0_axr1,eQEP0_index,,mcasp1_axr0,EMU3,pr1_pru0_pru_r30_6,pr1_pru0_pru_r31_6,gpio3_20
+conf_mcasp0_ahclkx,0x44E109AC,mcasp0_ahclkx,eQEP0_strobe,mcasp0_axr3,mcasp1_axr1,EMU4,pr1_pru0_pru_r30_7,pr1_pru0_pru_r31_7,gpio3_21
+conf_xdma_event_intr0,0x44E109B0,xdma_event_intr0,,timer4,clkout1,spi1_cs1,pr1_pru1_pru_r31_16,EMU2,gpio0_19
+conf_xdma_event_intr1,0x44E109B4,xdma_event_intr1,,tclkin,clkout2,timer7,pr1_pru0_pru_r31_16,EMU3,gpio0_20
+conf_warmrstn,0x44E109B8,nRESETIN_OUT,,,,,,,
+conf_nnmi,0x44E109C0,nNMI,,,,,,,
+conf_tms,0x44E109D0,TMS,,,,,,,
+conf_tdi,0x44E109D4,TDI,,,,,,,
+conf_tdo,0x44E109D8,TDO,,,,,,,
+conf_tck,0x44E109DC,TCK,,,,,,,
+conf_trstn,0x44E109E0,nTRST,,,,,,,
+conf_emu0,0x44E109E4,EMU0,,,,,,,gpio3_7
+conf_emu1,0x44E109E8,EMU1,,,,,,,gpio3_8
+conf_rtc_pwronrstn,0x44E109F8,RTC_PORz,,,,,,,
+conf_pmic_power_en,0x44E109FC,EXT_WAKEUP,,,,,,,
+conf_ext_wakeup,0x44E10A00,ENZ_KALDO_1P8V,,,,,,,
+conf_usb0_drvvbus,0x44E10A1C,USB0_DRVVBUS,,,,,,,gpio0_18
+conf_usb1_drvvbus,0x44E10A34,USB1_DRVVBUS,,,,,,,gpio3_13