diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2013-11-25 23:22:28 +0000 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2013-11-26 00:29:48 +0100 |
commit | f04d3c518a3c26def9a003a108bec254499c7c90 (patch) | |
tree | a32a8022ad9c7d6de94bc031dcbd0e12278a1e57 | |
parent | ef2b6db066dc1b25863887eec0b65dadc8e54bb3 (diff) | |
download | rockbox-f04d3c5.tar.gz rockbox-f04d3c5.zip |
regtools: add shortcut notation for simple register in the desc files
Change-Id: I2745287844ad0a47dd41ba4dae5e1f7218ae5814
Reviewed-on: http://gerrit.rockbox.org/679
Reviewed-by: Amaury Pouly <amaury.pouly@gmail.com>
-rw-r--r-- | utils/regtools/desc/XML.txt | 13 | ||||
-rw-r--r-- | utils/regtools/lib/soc_desc.cpp | 15 |
2 files changed, 26 insertions, 2 deletions
diff --git a/utils/regtools/desc/XML.txt b/utils/regtools/desc/XML.txt index d4dc73cc64..15164a43b9 100644 --- a/utils/regtools/desc/XML.txt +++ b/utils/regtools/desc/XML.txt @@ -61,12 +61,25 @@ The following properties are defined: - "name" (mandatory,string): the mnemonic of the register. - "sct" (optional,"yes" or "no"): STMP specific attribute to specify the existence of the SCT variants of this register. +As a shortcut, in the case the register has a single address, one can add one more +property: +- "addr" (optional,integer): base address of this instance of the register. Example: <reg name="TIMCTRLn" sct="yes"> <!-- reg desc --> </reg> +The address shortcut has the following standard translation: +<reg name="GPIO_PADR" addr="0x00"> +<!-- bla --> +</reg> +is equivalent to: +<reg name="GPIO_PADR"> +<addr name="GPIO_PADR" addr="0x00"> +<!-- bla --> +</reg> + Element: soc.dev.reg.addr ------------------------- Each device can have one or more addresses associated with it. Each address diff --git a/utils/regtools/lib/soc_desc.cpp b/utils/regtools/lib/soc_desc.cpp index 413c30936f..4b9f51b9ae 100644 --- a/utils/regtools/lib/soc_desc.cpp +++ b/utils/regtools/lib/soc_desc.cpp @@ -102,8 +102,8 @@ bool validate_uint32_hook(const std::string& str, uint32_t& s) { unsigned long u; if(!validate_unsigned_long_hook(str, u)) return false; -#if ULONG_MAX > UINT32_MAX - if(u > UINT32_MAX) return false; +#if ULONG_MAX > 0xffffffff + if(u > 0xffffffff) return false; #endif s = u; return true; @@ -177,12 +177,23 @@ bool parse_reg_formula_elem(xmlNode *node, soc_reg_formula_t& formula) return true; } +bool parse_add_trivial_addr(const std::string& str, soc_reg_t& reg) +{ + soc_reg_addr_t a; + a.name = reg.name; + if(!validate_uint32_hook(str, a.addr)) + return false; + reg.addr.push_back(a); + return true; +} + bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) { std::vector< soc_reg_formula_t > formulas; BEGIN_ATTR_MATCH(node->properties) MATCH_TEXT_ATTR("name", reg.name) SOFT_MATCH_SCT_ATTR("sct", reg.flags) + SOFT_MATCH_X_ATTR("addr", parse_add_trivial_addr, reg) END_ATTR_MATCH() BEGIN_NODE_MATCH(node->children) |