script: Add additional mux support for DRA72x SoCs
authorNikhil Devshatwar <nikhil.nd@ti.com>
Tue, 16 Feb 2016 13:16:16 +0000 (18:46 +0530)
committerNikhil Devshatwar <nikhil.nd@ti.com>
Wed, 16 Mar 2016 17:41:13 +0000 (23:11 +0530)
Signed-off-by: Nikhil Devshatwar <nikhil.nd@ti.com>
iodelay-autogen.py

index 21bec3a993b386739d1da39e56fe3b36ba24b52b..f345702c7b6ca6c0c498646094e9ff1f5500c683 100755 (executable)
@@ -168,7 +168,29 @@ def xml_pad_get_slew(offset):
                else:
                        return int(bitlist[0].get("resetval"), 16)
 
-def xml_pad_get_pin(offset, muxmode):
+# For DRA72x SoC, for "ball compatibility" purpose, some signals have same muxmode.
+# CTRL_CORE_ALT_SELECT_MUX register allows to select between one of the signals
+# Its like a board mux has been added inside the SoC, except it uses same muxmode.
+def resolve_group(muxmode_str):
+       mmlist = muxmode_str.split(" ")
+       mmlen = len(mmlist)
+       if (mmlen == 1):
+               def_mode = mmlist[0]
+               return mmlist[0]
+       elif (mmlen == 2):
+               def_mode = mmlist[0]
+               grp1_mode = mmlist[1]
+       elif (mmlen == 3):
+               def_mode = mmlist[0]
+               grp1_mode = mmlist[1]
+               grp2_mode = mmlist[2]
+       else:
+               print "ERR: Cannot resolve muxmode group for '%s'" % muxmode_str
+
+       #HACK for now
+       return def_mode
+
+def xml_model_get_signal(offset, muxmode):
        padlist = pad_xml.findall("register[@offset='0x%X']" % offset)
        if (len(padlist) == 0):
                return "Unknown"
@@ -179,7 +201,7 @@ def xml_pad_get_pin(offset, muxmode):
                modes = mux_field[0].findall("./bitenum[@value='%d']" % muxmode)
                if (len(modes) == 0):
                        return "Unknown"
-               return modes[0].get("id")
+               return resolve_group(modes[0].get("id"))
 
 def xml_iodelay_get_reg(name):
        delaylist = iod_xml.findall("register[@id='%s']" % name)
@@ -373,7 +395,7 @@ def pad_dump_gpio(padconf, per_padconf):
                (pad_name, pin_name, addr, val, mode, delayinfo) = i
 
                offset = addr - 0x4a002000
-               gpio_name = xml_pad_get_pin(offset, 14)
+               gpio_name = xml_model_get_signal(offset, 14)
                matchlist = re.match("GPIO(.)_(.*)", gpio_name)
                if (matchlist == None):
                        print "ERR: No GPIO for pad %s" % pad_name
@@ -642,12 +664,12 @@ for i in range(0, 260):
 
        # Find out the pin based on the muxmode
        pad_name = xml_pad_get_name(offset)
-       pin_name = xml_pad_get_pin(offset, muxmode)
+       pin_name = xml_model_get_signal(offset, muxmode)
        if (pad_name == "Unknown" or pin_name == "Unknown"):
                print "WARN: Cannot find out Pad/Pin name for PAD address 0x%X (%s[%s] = %s)" \
                % (addr, pad_name, muxmode, pin_name)
                continue
-       if (pin_name == "DRIVER OFF"):
+       if (pin_name == "DRIVER"):
                continue
 
        # Find out if the delaymode for this module is already selected
@@ -668,8 +690,11 @@ for i in range(0, 260):
        # Find out all the possible virtual, manual modes fot the specific pad -> pin combination
        (virt, man) = xml_find_delaymodes(pad_name, muxmode)
 
-       # Need to select one out of allowed modes
-       mode = select_mode(pad_name, pin_name, module, virt, man, modehelp, sel)
+       if (args.gpio == True):
+               mode = "LEGACY"
+       else:
+               # Need to select one out of allowed modes
+               mode = select_mode(pad_name, pin_name, module, virt, man, modehelp, sel)
 
        # Remember the selection for that module, for later reuse
        if (args.strict == False and module not in sel.keys()):