X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fspec%2Fifaceprint.py;h=55b820d2bf376c5d9d908204177845b4d7f3e3ef;hb=ced272e94680ee5a055b0e67107a6284d16f1333;hp=d8008c7feb14734786ca6ce8bf7456289bec5cc3;hpb=c34740c39c4747c0472dec67ae09dffa1336eed1;p=pinmux.git diff --git a/src/spec/ifaceprint.py b/src/spec/ifaceprint.py index d8008c7..55b820d 100644 --- a/src/spec/ifaceprint.py +++ b/src/spec/ifaceprint.py @@ -3,21 +3,32 @@ from copy import deepcopy -def display(pins): - print "| Pin | Mux0 | Mux1 | Mux2 | Mux3 |" - print "| --- | ----------- | ----------- | ----------- | ----------- |" - pinidx = pins.keys() - pinidx.sort() +def display(of, pins, banksel=None, muxwidth=4): + of.write("""\ +| Pin | Mux0 | Mux1 | Mux2 | Mux3 | +| --- | ----------- | ----------- | ----------- | ----------- | +""") + pinidx = sorted(pins.keys()) for pin in pinidx: pdata = pins.get(pin) + if banksel: + skip = False + for mux in range(muxwidth): + if mux not in pdata: + continue + name, bank = pdata[mux] + if banksel != bank: + skip = True + if skip: + continue res = '| %3d |' % pin - for mux in range(4): - if not pdata.has_key(mux): + for mux in range(muxwidth): + if mux not in pdata: res += " |" continue name, bank = pdata[mux] res += " %s %-9s |" % (bank, name) - print res + of.write("%s\n" % res) def fnsplit(f): @@ -51,57 +62,57 @@ def find_fn(fname, names): return n -def display_fns(bankspec, pins, function_names): +def display_fns(of, bankspec, pins, function_names): fn_names = function_names.keys() fns = {} for (pin, pdata) in pins.items(): for mux in range(1, 4): # skip GPIO for now - if not pdata.has_key(mux): + if mux not in pdata: continue name, bank = pdata[mux] - assert name != None, str(bank) - if not fns.has_key(name): + assert name is not None, str(bank) + if name not in fns: fns[name] = [] - fns[name].append((pin-bankspec[bank], mux, bank)) + fns[name].append((pin - bankspec[bank], mux, bank)) - fnidx = fns.keys() - fnidx.sort(fnsort) + fnidx = list(fns.keys()) + fnidx.sort(key=fnsplit) current_fn = None for fname in fnidx: fnbase = find_fn(fname, fn_names) + assert fnbase in function_names, "fn %s not in descriptions %s" % \ + (fname, str(function_names.keys())) #print "name", fname, fnbase if fnbase != current_fn: if current_fn is not None: - print - print "## %s" % fnbase - print - print function_names[fnbase] - print + of.write('\n') + of.write("## %s\n\n%s\n\n" % (fnbase, function_names[fnbase])) current_fn = fnbase - print "* %-9s :" % fname, + of.write("* %-9s :" % fname) for (pin, mux, bank) in fns[fname]: - print "%s%d/%d" % (bank, pin, mux), - print + of.write(" %s%d/%d" % (bank, pin, mux)) + of.write('\n') return fns -def check_functions(title, bankspec, fns, pins, required, eint, pwm, +def check_functions(of, title, bankspec, fns, pins, required, eint, pwm, descriptions=None): fns = deepcopy(fns) pins = deepcopy(pins) if descriptions is None: descriptions = {} + fnidx = fns.keys() + + #print dir(fns) + #print dir(pins) - print "# Pinmap for %s" % title - print + of.write("# Pinmap for %s\n\n" % title) for name in required: - print "## %s" % name - print - if descriptions and descriptions.has_key(name): - print descriptions[name] - print + of.write("## %s\n\n" % name) + if descriptions and name in descriptions: + of.write("%s\n\n" % descriptions[name]) name = name.split(':') if len(name) == 2: @@ -118,13 +129,21 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm, else: count = 100000 name = name[0] + #print name found = set() - fnidx = fns.keys() - # fnidx.sort(fnsort) pinfound = {} + located = set() for fname in fnidx: if not fname.startswith(name): continue + for k in pins.fnspec.keys(): + if fname.startswith(k): + fk = list(pins.fnspec[k].keys()) + fn = pins.fnspec[k] + fn = fn[fk[0]] + #print fname, fn, dir(fn) + if count == 100000: + count = len(fn.pingroup) for pin, mux, bank in fns[fname]: if findbank is not None: if findbank != bank: @@ -132,12 +151,12 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm, if findmux != mux: continue pin_ = pin + bankspec[bank] - if pins.has_key(pin_): + if pin_ in pins: pinfound[pin_] = (fname, pin_, bank, pin, mux) - pinidx = pinfound.keys() - pinidx.sort() + pinidx = sorted(pinfound.keys()) + removedcount = 0 for pin_ in pinidx: fname, pin_, bank, pin, mux = pinfound[pin_] if fname in found: @@ -146,9 +165,16 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm, if len(found) > count: continue del pins[pin_] - print "* %s %d %s%d/%d" % (fname, pin_, bank, pin, mux) + removedcount += 1 + of.write("* %s %d %s%d/%d\n" % (fname, pin_, bank, pin, mux)) + + if removedcount != count: + print ("not all found", name, removedcount, count, title, found, + fns[fname]) + print ("pins found", pinfound) - print + # fnidx.sort(fnsort) + of.write('\n') # gpios gpios = [] @@ -161,49 +187,45 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm, gpios.sort() if gpios: - print "## GPIO" - print + of.write("## GPIO\n\n") for fname in gpios: if fname in found: continue desc = '' - if descriptions and descriptions.has_key(fname): + if descriptions and fname in descriptions: desc = ': %s' % descriptions[fname] bank = fname[4] - pin = int(fname[5:]) + pin = int(fname[7:]) pin_ = pin + bankspec[bank] - if not pins.has_key(pin_): + if pin_ not in pins: continue del pins[pin_] found.add(fname) - print "* %-8s %d %s%-2d %s" % (fname, pin_, bank, pin, desc) - print + of.write("* %-8s %d %s%-2d %s\n" % (fname, pin_, bank, pin, desc)) + of.write('\n') if eint: - display_group(bankspec, "EINT", eint, fns, pins, descriptions) + display_group(of, bankspec, "EINT", eint, fns, pins, descriptions) if pwm: - display_group(bankspec, "PWM", pwm, fns, pins, descriptions) + display_group(of, bankspec, "PWM", pwm, fns, pins, descriptions) - print "## Unused Pinouts (spare as GPIO) for '%s'" % title - print - if descriptions and descriptions.has_key('GPIO'): - print descriptions['GPIO'] - print - display(pins) - print + of.write("## Unused Pinouts (spare as GPIO) for '%s'\n\n" % title) + if descriptions and 'GPIO' in descriptions: + of.write("%s\n\n" % descriptions['GPIO']) + display(of, pins) + of.write('\n') return pins # unused -def display_group(bankspec, title, todisplay, fns, pins, descriptions): - print "## %s" % title - print +def display_group(of, bankspec, title, todisplay, fns, pins, descriptions): + of.write("## %s\n\n" % title) found = set() for fname in todisplay: desc = '' - if descriptions and descriptions.has_key(fname): + if descriptions and fname in descriptions: desc = ': %s' % descriptions[fname] fname = fname.split(':') if len(fname) == 2: @@ -223,38 +245,42 @@ def display_group(bankspec, title, todisplay, fns, pins, descriptions): if fname in found: continue pin_ = pin + bankspec[bank] - if not pins.has_key(pin_): + if pin_ not in pins: continue del pins[pin_] found.add(fname) - print "* %s %d %s%d/%d %s" % (fname, pin_, bank, pin, mux, desc) - print + of.write("* %s %d %s%d/%d %s\n" % + (fname, pin_, bank, pin, mux, desc)) + of.write('\n') -def display_fixed(fixed, offs): +def display_fixed(of, fixed, offs): - fkeys = fixed.keys() - fkeys.sort() + fkeys = sorted(fixed.keys()) pin_ = offs + res = [] for pin, k in enumerate(fkeys): - print "## %s" % k - print + of.write("## %s\n\n" % k) prevname = '' linecount = 0 for name in fixed[k]: if linecount == 4: linecount = 0 - print + of.write('\n') if prevname[:2] == name[:2] and linecount != 0: - print name, + of.write(" %s" % name) linecount += 1 else: if linecount != 0: - print - print "* %d: %d %s" % (pin_, pin, name), + of.write('\n') + of.write("* %d: %d %s" % (pin_, pin, name)) linecount = 1 + res.append((pin_, name)) + prevname = name pin_ += 1 if linecount != 0: - print - print + of.write('\n') + of.write('\n') + + return res