mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-02 23:41:56 +00:00
Syntax highlight all the DTS fragments, add more internal cross-referencing to making jumping around the HTML easier, and tweak the language, filling in a missing piece here and there. Fix a couple of DTS syntax errors caught by adding highlighting. Add an ABNF grammar for the macros generated by DT, along with some comments about why the current grammar is not ideal from a generality point of view. Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
107 lines
4.3 KiB
BNF
107 lines
4.3 KiB
BNF
; 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
|