soc/integration/export: Add parameter to enable/disable fields access function generation.

Fields access function have been contributed and probably used by a few project but not really
by LiteX projects or cores itselves.

This generates complex code and compilation warnings, so it can be useful to disable them by default (but still allow used to enable them).
This commit is contained in:
Florent Kermarrec 2024-05-14 11:17:54 +02:00
parent 9f4bd5cec8
commit 29bb397bb6
1 changed files with 7 additions and 6 deletions

View File

@ -297,7 +297,7 @@ def _generate_csr_base_define_c(csr_base, with_csr_base_define):
return f"\n#ifndef CSR_BASE\n#define CSR_BASE {hex(csr_base)}L\n#endif\n" return f"\n#ifndef CSR_BASE\n#define CSR_BASE {hex(csr_base)}L\n#endif\n"
return "" return ""
def _generate_field_definitions_c(csr, name): def _generate_field_definitions_c(csr, name, with_fields_access_functions):
""" """
Generate definitions for CSR fields. Generate definitions for CSR fields.
""" """
@ -307,7 +307,8 @@ def _generate_field_definitions_c(csr, name):
size = str(field.size) size = str(field.size)
field_defs += f"#define CSR_{name.upper()}_{csr.name.upper()}_{field.name.upper()}_OFFSET {offset}\n" field_defs += f"#define CSR_{name.upper()}_{csr.name.upper()}_{field.name.upper()}_OFFSET {offset}\n"
field_defs += f"#define CSR_{name.upper()}_{csr.name.upper()}_{field.name.upper()}_SIZE {size}\n" field_defs += f"#define CSR_{name.upper()}_{csr.name.upper()}_{field.name.upper()}_SIZE {size}\n"
field_defs += _generate_field_accessors_c(name, csr, field) if with_fields_access_functions:
field_defs += _generate_field_accessors_c(name, csr, field)
return field_defs return field_defs
def _generate_field_accessors_c(name, csr, field): def _generate_field_accessors_c(name, csr, field):
@ -336,7 +337,7 @@ def _generate_field_accessors_c(name, csr, field):
accessors += f"\t{reg_name}_write(newword);\n}}\n" accessors += f"\t{reg_name}_write(newword);\n}}\n"
return accessors return accessors
def _generate_csr_region_definitions_c(name, region, origin, alignment, csr_base, with_csr_base_define, with_access_functions): def _generate_csr_region_definitions_c(name, region, origin, alignment, csr_base, with_csr_base_define, with_access_functions, with_fields_access_functions):
""" """
Generate CSR address and size definitions for a region. Generate CSR address and size definitions for a region.
""" """
@ -360,10 +361,10 @@ def _generate_csr_region_definitions_c(name, region, origin, alignment, csr_base
) )
origin += alignment // 8 * nr origin += alignment // 8 * nr
if hasattr(csr, "fields"): if hasattr(csr, "fields"):
region_defs += _generate_field_definitions_c(csr, name) region_defs += _generate_field_definitions_c(csr, name, with_access_functions and with_fields_access_functions)
return region_defs return region_defs
def get_csr_header(regions, constants, csr_base=None, with_csr_base_define=True, with_access_functions=True): def get_csr_header(regions, constants, csr_base=None, with_csr_base_define=True, with_access_functions=True, with_fields_access_functions=True):
""" """
Generate the CSR header file content. Generate the CSR header file content.
""" """
@ -379,7 +380,7 @@ def get_csr_header(regions, constants, csr_base=None, with_csr_base_define=True,
for name, region in regions.items(): for name, region in regions.items():
origin = region.origin - _csr_base origin = region.origin - _csr_base
r += _generate_csr_region_definitions_c(name, region, origin, alignment, csr_base, with_csr_base_define, with_access_functions) r += _generate_csr_region_definitions_c(name, region, origin, alignment, csr_base, with_csr_base_define, with_access_functions, with_fields_access_functions)
r += "\n#endif\n" r += "\n#endif\n"
return r return r