From: Luke Kenneth Casson Leighton Date: Fri, 3 Aug 2018 09:18:39 +0000 (+0100) Subject: do config start addresses X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=af003c6988cda83dd677e6ff8ff2b609e1f7312e;p=pinmux.git do config start addresses --- diff --git a/src/bsv/peripheral_gen/base.py b/src/bsv/peripheral_gen/base.py index 609e821..e6f9a53 100644 --- a/src/bsv/peripheral_gen/base.py +++ b/src/bsv/peripheral_gen/base.py @@ -20,9 +20,56 @@ def li(txt, indent): return res -class PBase(object): +class MMapConfig(object): + + def get_mmap_configs(self): + res = [] + for cfg in self.peripheral.configs: + res.append(cfg.get('mmap', None)) + # XXX HACK! assume all configs same for each peripheral! + return res[0] + + def map_to_idx(self, cfg, idx): + if isinstance(idx, int): + return idx + for (i, c) in enumerate(cfg): + if c[0] == idx: + return i + assert "config name %s not found" % s + + def get_mmap_cfg_start(self, idx): + cfg = self.get_mmap_configs() + if cfg is None: + nregs = self.num_axi_regs32() + if isinstance(nregs, int) or len(nregs) == 1: + return 0 + return "_%d_" % idx + idx = self.map_to_idx(cfg, idx) + return cfg[idx][1] + + def get_mmap_cfg_name(self, idx): + cfg = self.get_mmap_configs() + if cfg is None: + nregs = self.num_axi_regs32() + if isinstance(nregs, int) or len(nregs) == 1: + return "" + return "_%d_" % idx + return cfg[idx][0] + + def num_axi_regs32cfg(self): + cfg = self.get_mmap_configs() + if cfg is None: + return self.num_axi_regs32() + regs = [] + for c in cfg: + regs.append(c[2]) + return regs + + +class PBase(MMapConfig): def __init__(self, name): self.name = name + MMapConfig.__init__(self) def extifdecl(self, name, count): sname = self.get_iname(count) @@ -76,31 +123,6 @@ class PBase(object): def slowimport(self): return '' - def get_mmap_configs(self): - res = [] - for cfg in self.peripheral.configs: - res.append(cfg.get('mmap', None)) - # XXX HACK! assume all configs same for each peripheral! - return res[0] - - def get_mmap_cfg_name(self, idx): - cfg = self.get_mmap_configs() - if cfg is None: - nregs = self.num_axi_regs32() - if isinstance(nregs, int) or len(nregs) == 1: - return "" - return "_%d_" % idx - return cfg[idx][0] - - def num_axi_regs32cfg(self): - cfg = self.get_mmap_configs() - if cfg is None: - return self.num_axi_regs32() - regs = [] - for c in cfg: - regs.append(c[2]) - return regs - def num_axi_regs32(self): return 0 @@ -123,7 +145,13 @@ class PBase(object): offs = numregs * 4 * 16 if offs == 0: return ('', 0) - end = start + offs - 1 + cfgstart = self.get_mmap_cfg_start(idx) + if cfgstart: + start = cfgstart + end = start + offs - 1 + offs = 0 # don't do contiguous addressing + else: + end = start + offs - 1 bname = self.axibase(name, ifacenum, idx) bend = self.axiend(name, ifacenum, idx) comment = "%d 32-bit regs" % numregs diff --git a/src/spec/i_class.py b/src/spec/i_class.py index 9f890f3..117d797 100644 --- a/src/spec/i_class.py +++ b/src/spec/i_class.py @@ -67,8 +67,8 @@ def pinspec(): 'jtag': {'bus': 'fastbus'}, 'fb': {'bus': 'fastbus'}, 'sdr': {'bus': 'fastbus', - 'mmap': [['Mem', 0x50000000, 0x400000], - ['Cfg', 0x21000, 12] + 'mmap': [['Mem', 0x70000000, 0x400000], + ['Cfg', 0x17000, 12] ]}, })