| ; dt-macro is the top level nonterminal. It defines the possible |
| ; macros generated by gen_defines.py. |
| ; |
| ; A dt-macro starts with uppercase "DT_" followed by either: |
| ; |
| ; - a property-macro, generated for a particular node |
| ; property |
| ; - some other-macro, a catch-all for other types of macros, |
| ; which contain either global information about the tree or |
| ; are special cases |
| ; |
| ; This does *not* cover macros pulled out of DT via Kconfig, |
| ; like CONFIG_SRAM_BASE_ADDRESS, etc. |
| dt-macro = %s"DT_" ( property-macro / other-macro ) |
| |
| ; -------------------------------------------------------------------- |
| ; A property-macro is a sequence of: |
| ; |
| ; - node-id: a way to identify a node |
| ; - property-id: a way to identify one of the node's properties |
| ; - property-suf: an optional property-specific suffix |
| property-macro = node-id "_" property-id ["_" property-suf] |
| |
| ; A node-id is a way to refer to a node within the devicetree. |
| ; There are a few different flavors. |
| |
| node-id = compat-unit-id / inst-id / alias-id |
| |
| compat-unit-id = [bus-id-part "_"] compat-id-part "_" unit-addr-id-part |
| inst-id = %s"INST_" 1*DIGIT "_" compat-id-part |
| alias-id = %s"ALIAS_" alias-id-part |
| |
| ; Various components of a property-macro are just c-idents, |
| ; which are made of uppercase letters, numbers, and underscores. |
| ; |
| ; This is a problem, because it makes it possible for different nodes |
| ; or properties in a devicetree to generate the same macro twice |
| ; with different values. |
| |
| bus-id-part = c-ident ; ID for information about a node's bus |
| compat-id-part = c-ident ; ID for a node's compatible |
| unit-addr-id-part = c-ident ; ID for a node's unit-address |
| alias-id-part = c-ident ; ID for an /aliases node property |
| property-id = c-ident ; ID for a node property -- this also |
| ; covers special cases like "reg", |
| ; "interrupts", and "cs-gpios" for now, |
| ; as they all collide with non-special |
| ; cases. |
| property-suf = c-ident ; a suffix for part of a property value, |
| ; like an array index or a phandle |
| ; specifier name converted to a c-ident |
| |
| ; -------------------------------------------------------------------- |
| ; An other-macro is a grab bag for everything that isn't a |
| ; property-macro. It reuses some of the nonterminals (namely node-id |
| ; and compat-id-part) defined above. |
| other-macro = existence-flag / bus-macro / flash-macro / chosen-macro |
| |
| existence-flag = compat-existence-flag / inst-existence-flag |
| compat-flag = %s"COMPAT_" c-ident |
| inst-flag = %s"INST_" 1*DIGIT "_" c-ident |
| |
| bus-macro = bus-name-macro / on-bus-macro |
| bus-name-macro = node-id %s"_BUS_NAME" |
| on-bus-macro = compat-id-part %s"_BUS_" bus-name |
| bus-name = c-ident ; a bus name ("i2c") to a DT C |
| ; identifier ("I2C") |
| |
| flash-macro = %s"FLASH_AREA_" node-label-ident "_" flash-suf |
| flash-suf = %s"ID" / %s"READ_ONLY" / (%s"OFFSET" ["_" 1*DIGIT]) / |
| (%s"SIZE" ["_" 1*DIGIT]) / %s"DEV" |
| |
| ; Macros generated from /chosen node properties. |
| chosen-macro = chosen-flash / |
| %s"CODE_PARTITION_OFFSET" / %s"CODE_PARTITION_SIZE" / |
| %s"CCM_BASE_ADDRESS" / %s"CCM_SIZE" / |
| %s"DTCM_BASE_ADDRESS" / %s"DTCM_SIZE" / |
| %s"IPC_SHM_BASE_ADDRESS" / %s"IPC_SHM_SIZE" |
| ; These come from the /chosen/zephyr,flash property. |
| chosen-flash = %s"FLASH_BASE_ADDRESS" / |
| %s"FLASH_SIZE" / |
| %s"FLASH_ERASE_BLOCK_SIZE" / |
| %s"FLASH_WRITE_BLOCK_SIZE" |
| |
| ; -------------------------------------------------------------------- |
| ; Helper definitions. |
| |
| ; A c-ident is one or more: |
| ; - uppercase letters (A-Z) |
| ; - numbers (0-9) |
| ; - underscores ("_") |
| ; |
| ; They are the result of converting names or combinations of names |
| ; from devicetree to a valid component of a C identifier by |
| ; uppercasing letters and converting non-alphanumeric characters to |
| ; underscores. |
| c-ident = 1*( UPPER / DIGIT / "_" ) |
| |
| ; a node's "label" property value, as an identifier |
| node-label-ident = c-ident |
| |
| ; "uppercase ASCII letter" turns out to be pretty annoying to specify |
| ; in RFC-7405 syntax. |
| ; |
| ; This is just ASCII letters A (0x41) through Z (0x5A). |
| UPPER = %x41-5A |