cif: do not generate write function for CSRStatus
This commit is contained in:
parent
8e76c960d9
commit
89dbc37ece
25
cif.py
25
cif.py
|
@ -1,6 +1,8 @@
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
from migen.bank.description import CSRStatus
|
||||||
|
|
||||||
def get_macros(filename):
|
def get_macros(filename):
|
||||||
f = open(filename, "r")
|
f = open(filename, "r")
|
||||||
r = {}
|
r = {}
|
||||||
|
@ -10,7 +12,7 @@ def get_macros(filename):
|
||||||
r[match.group(1)] = match.group(2)
|
r[match.group(1)] = match.group(2)
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def _get_rw_functions(reg_name, reg_base, size):
|
def _get_rw_functions(reg_name, reg_base, size, read_only):
|
||||||
r = ""
|
r = ""
|
||||||
if size > 8:
|
if size > 8:
|
||||||
raise NotImplementedError("Register too large")
|
raise NotImplementedError("Register too large")
|
||||||
|
@ -32,15 +34,16 @@ def _get_rw_functions(reg_name, reg_base, size):
|
||||||
else:
|
else:
|
||||||
r += "\treturn MMPTR("+hex(reg_base)+");\n}\n"
|
r += "\treturn MMPTR("+hex(reg_base)+");\n}\n"
|
||||||
|
|
||||||
r += "static inline void "+reg_name+"_write("+ctype+" value) {\n"
|
if not read_only:
|
||||||
for byte in range(size):
|
r += "static inline void "+reg_name+"_write("+ctype+" value) {\n"
|
||||||
shift = (size-byte-1)*8
|
for byte in range(size):
|
||||||
if shift:
|
shift = (size-byte-1)*8
|
||||||
value_shifted = "value >> "+str(shift)
|
if shift:
|
||||||
else:
|
value_shifted = "value >> "+str(shift)
|
||||||
value_shifted = "value"
|
else:
|
||||||
r += "\tMMPTR("+hex(reg_base+4*byte)+") = "+value_shifted+";\n"
|
value_shifted = "value"
|
||||||
r += "}\n"
|
r += "\tMMPTR("+hex(reg_base+4*byte)+") = "+value_shifted+";\n"
|
||||||
|
r += "}\n"
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def get_csr_header(csr_base, bank_array, interrupt_map):
|
def get_csr_header(csr_base, bank_array, interrupt_map):
|
||||||
|
@ -51,7 +54,7 @@ def get_csr_header(csr_base, bank_array, interrupt_map):
|
||||||
r += "#define "+name.upper()+"_BASE "+hex(reg_base)+"\n"
|
r += "#define "+name.upper()+"_BASE "+hex(reg_base)+"\n"
|
||||||
for csr in csrs:
|
for csr in csrs:
|
||||||
nr = (csr.size + 7)//8
|
nr = (csr.size + 7)//8
|
||||||
r += _get_rw_functions(name + "_" + csr.name, reg_base, nr)
|
r += _get_rw_functions(name + "_" + csr.name, reg_base, nr, isinstance(csr, CSRStatus))
|
||||||
reg_base += 4*nr
|
reg_base += 4*nr
|
||||||
try:
|
try:
|
||||||
interrupt_nr = interrupt_map[name]
|
interrupt_nr = interrupt_map[name]
|
||||||
|
|
Loading…
Reference in New Issue