^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) ARM Versatile Express system registers
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) --------------------------------------
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) This is a system control registers block, providing multiple low level
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) platform functions like board detection and identification, software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) interrupt generation, MMC and NOR Flash control etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) Required node properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) - compatible value : = "arm,vexpress,sysreg";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) - reg : physical base address and the size of the registers window
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) Deprecated properties, replaced by GPIO subnodes (see below):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) - gpio-controller : specifies that the node is a GPIO controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) - #gpio-cells : size of the GPIO specifier, should be 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) - first cell is the pseudo-GPIO line number:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 0 - MMC CARDIN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 1 - MMC WPROT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 2 - NOR FLASH WPn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) - second cell can take standard GPIO flags (currently ignored).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) Control registers providing pseudo-GPIO lines must be represented
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) by subnodes, each of them requiring the following properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) - compatible value : one of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) "arm,vexpress-sysreg,sys_led"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) "arm,vexpress-sysreg,sys_mci"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) "arm,vexpress-sysreg,sys_flash"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) - gpio-controller : makes the node a GPIO controller
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) - #gpio-cells : size of the GPIO specifier, must be 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) - first cell is the function number:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) - for sys_led : 0..7 = LED 0..7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) - for sys_mci : 0 = MMC CARDIN, 1 = MMC WPROT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) - for sys_flash : 0 = NOR FLASH WPn
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) - second cell can take standard GPIO flags (currently ignored).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) Example:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) v2m_sysreg: sysreg@10000000 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) compatible = "arm,vexpress-sysreg";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) reg = <0x10000000 0x1000>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) v2m_led_gpios: sys_led@8 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) compatible = "arm,vexpress-sysreg,sys_led";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) gpio-controller;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) #gpio-cells = <2>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) v2m_mmc_gpios: sys_mci@48 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) compatible = "arm,vexpress-sysreg,sys_mci";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) gpio-controller;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #gpio-cells = <2>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) v2m_flash_gpios: sys_flash@4c {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) compatible = "arm,vexpress-sysreg,sys_flash";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) gpio-controller;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #gpio-cells = <2>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) This block also can also act a bridge to the platform's configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) bus via "system control" interface, addressing devices with site number,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) position in the board stack, config controller, function and device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) numbers - see motherboard's TRM for more details. All configuration
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) controller accessible via this interface must reference the sysreg
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) node via "arm,vexpress,config-bridge" phandle and define appropriate
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) topology properties - see main vexpress node documentation for more
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) details. Each child of such node describes one function and must
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) define the following properties:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) - compatible value : must be one of (corresponding to the TRM):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) "arm,vexpress-amp"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) "arm,vexpress-dvimode"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) "arm,vexpress-energy"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) "arm,vexpress-muxfpga"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) "arm,vexpress-osc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) "arm,vexpress-power"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) "arm,vexpress-reboot"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) "arm,vexpress-reset"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) "arm,vexpress-scc"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) "arm,vexpress-shutdown"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) "arm,vexpress-temp"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) "arm,vexpress-volt"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) - arm,vexpress-sysreg,func : must contain a set of two cells long groups:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) - first cell of each group defines the function number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) (eg. 1 for clock generator, 2 for voltage regulators etc.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) - second cell of each group defines device number (eg. osc 0,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) osc 1 etc.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) - some functions (eg. energy meter, with its 64 bit long counter)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) are using more than one function/device number pair
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) Example:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) mcc {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) compatible = "arm,vexpress,config-bus";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) arm,vexpress,config-bridge = <&v2m_sysreg>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) osc@0 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) compatible = "arm,vexpress-osc";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) arm,vexpress-sysreg,func = <1 0>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) energy@0 {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) compatible = "arm,vexpress-energy";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) arm,vexpress-sysreg,func = <13 0>, <13 1>;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) };