TAMP device tree configuration

1 Article purpose[edit]

This article explains how to configure TAMP internal peripheral.
This article describes the TAMP configuration performed using the device tree mechanism, which provides an hardware description of the TAMP peripheral.

2 DT bindings documentation[edit]

The following binding-related documentation explains how to write device tree files for TAMP:

  • TF-A: Tamper related part: tf-a/docs/devicetree/bindings/soc/st,stm32-tamp.txt"[1]
  • Linux Kernel: Backup register management: Documentation/devicetree/bindings/power/reset/syscon-reboot-mode.txt'[2]

3 DT configuration[edit]

This hardware description is a combination of the STM32 microprocessor device tree files (.dtsi extension) and board device tree files (.dts extension). See the Device tree for an explanation of the device-tree file split.

STM32CubeMX can be used to generate the board device tree. Refer to How to configure the DT using STM32CubeMX for more details.

3.1 DT configuration (STM32 level)[edit]

The STM32MP1 TAMP node is located in the file stm32mp151.dtsi[3] (see Device tree for further explanation). TAMP is used in the Linux context to access to the backup registers.

  / {
  ...
  	soc {
  ...
  		tamp: tamp@5c00a000 {
			compatible = "simple-bus", "syscon", "simple-mfd";
			reg = <0x5c00a000 0x400>;

                                reboot-mode {
				        compatible = "syscon-reboot-mode";
				        offset = <0x150>; /* reg20 */
				        mask = <0xff>;
				        mode-normal = <0>;
				        mode-fastboot = <0x1>;
				        mode-recovery = <0x2>;
				        mode-stm32cubeprogrammer = <0x3>;
				        mode-ums_mmc0 = <0x10>;
				        mode-ums_mmc1 = <0x11>;
				        mode-ums_mmc2 = <0x12>;
                                };
		};
  ...
  	};
  ...
  };

3.2 DT configuration (board level)[edit]

3.2.1 STM32MP1 TAMP node append[edit]

The board definition in the device tree may include some additional board-specific pin control management.

Warning.png By default, no pinctrl description is required for tamper, the associated GPIO pin is reserved for the tamper usage, preempting the current GPIO pin configuration. Despite of the hardware management, It may be better to describe the pinctrl to avoid any software double pin request.
 &tamp {
            pinctrl-0 = <&tamp1_pins_a>;              // Must be defined in the pinctrl corresponding to the board
            wakeup-source;                            // Enable the tamper as wake up source
 };

3.2.2 STM32MP1 TAMP node append (bootloader specific)[edit]

The bootloader-specific STM32MP1 TAMP node append data is located in the file stm32mp151.dtsi [4] for TF-A (see Device tree for further explanation).

tamp: tamp@5c00a000 {
     compatible = "st,stm32-tamp", "simple-bus", "syscon", "simple-mfd";
     reg = <0x5c00a000 0x400>;
     secure-interrupts = <GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>;
     clocks = <&rcc RTCAPB>;
};

4 How to configure the DT using STM32CubeMX[edit]

The STM32CubeMX tool can be used to configure the STM32MPU device and get the corresponding platform configuration device tree files.
STM32CubeMX may not support all the properties described in the documents listed in DT bindings documentation above. If so, the tool inserts user sections in the generated device tree. These sections can then be edited to add some properties that are preserved from one generation to another. Refer to the STM32CubeMX user manual for further information.

5 References[edit]

Please refer to the following links for additional information: