Last edited 4 years ago

PMIC hardware components

1. Article purpose[edit source]

The purpose of this article is to:

  • list the PMIC hardware components that might be integrated in the different boards
  • link these components to the corresponding software framework(s)
  • point to the datasheet(s) of these components
  • explain, when necessary, how to configure these components.

2. Software frameworks[edit source]

Domain Peripheral Software frameworks Comment
Cortex-A7
secure
(OP-TEE)
Cortex-A7
non-secure
(Linux)
Cortex-M4

(STM32Cube)
PMIC STPMIC1 OP-TEE overview Regulator overview Watchdog overview U-Boot overview

3. STPMIC1[edit source]

3.1. Description[edit source]

The STPMIC1 is a device that handles the power supplies for some STM32MP boards. The STPMIC1 main features are:

  • configuration via I²C bus,
  • 10 regulators of different kinds with over-current protection,
  • 3 power switches for USB supplies,
  • a power-on key input,
  • a watchdog,
  • a thermal protection,
  • a NORMAL mode and an ALTERNATE mode that is used for system suspend.

The user manual is available here: NOT YET AVAILABLE

3.2. Support in Linux Kernel[edit source]

The STPMIC1 driver is used to handle STPMIC1 Power Management Integrated Circuit (PMIC). The driver is composed of several parts:

  • The core driver
  • The regulator driver
  • The watchdog driver
  • The input driver

The thermal feature is not supported.

3.2.1. Core driver[edit source]

The core implements the Multi-Function Devices Framework API.

  • It is probed by the I²C framework.
  • It handles communication with the PMIC via I²C.
  • It probes the others STPMIC1 drivers (input, watchdog....).
  • It acts as an interrupt controller for the other drivers.

Source code:

 include/linux/mfd/stpmic1.h  
 drivers/mfd/stpmic1.c  


Bindings are described in:

 Documentation/devicetree/bindings/mfd/st,stpmic1.txt 

3.2.2. Regulator driver[edit source]

The driver implements the Regulator framework API

  • Each BUCK, LDO or POWER SWITCH inside the STPMIC1 device is presented as a voltage regulator.
  • Power switches are presented as fixed voltage sources. Voltage can not be set.
  • The driver does not handle the suspend configuration. This is done by the Secure Monitor.

Source code:

 drivers/regulator/stpmic1_regulator.c  

Bindings are described in:

 Documentation/devicetree/bindings/regulator/st,stpmic1-regulator.txt 

3.2.3. Watchdog driver[edit source]

The driver implements the Watchdog framework API

When enabled, a watchdog device is available for the user-land. As soon as a user has started to write in the watchdog it is armed in the PMIC. When the watchdog timer expires, the PMIC shuts down.

Source code:

 drivers/watchdog/stpmic1_wdt.c  

Bindings are described in:

 Documentation/devicetree/bindings/watchdog/st,stpmic1-wdt.txt 

3.2.4. Input driver[edit source]

The driver implements the Input framework API.

The driver exposes a single key (KEY_POWER) that can be used as any standard input device in /dev/input/eventX

Source code:

 drivers/input/misc/stpmic1_onkey.c 

Bindings are described in:

 Documentation/devicetree/bindings/input/st,stpmic1-onkey.txt 

3.2.5. Kernel Configuration[edit source]

With kernel menuconfig, enable following configurations:

  • core part: MFD_STPMIC1
  • regulator: REGULATOR_STPMIC1
  • watchdog: STPMIC1_WATCHDOG
  • input: INPUT_STPMIC1_ONKEY

3.3. Support in U-BOOT[edit source]

STPMIC1 is used by U-Boot to:

  • Control regulators used by other drivers (mmc-supply for SDCard for example, usb vbus)
  • Trace pmic startup reason

STMPIC is supported with existing uclass of the 'Driver Model' described in doc/driver-model/pmic-framework.txt .

The STPMIC1 is available with the existing commands:

  • pmic (CONFIG_CMD_PMIC)
  • regulator (CONFIG_CMD_REGULATOR)
  • poweroff (CONFIG_CMD_POWEROFF)

SPTMIC1 driver supports configuration via device-tree; the bindings, same as kernel, are described in:

doc/device-tree-bindings/mfd/stpmic1.txt

3.4. Support in Cortex-A7 Secure[edit source]

3.4.1. TF-A[edit source]

STPMIC1 is used by TF-A firmware to:

  • Configure DDR power supplies.
  • Configure the regulators for system suspend and system shutdown.

Driver source code:

 include/drivers/st/stpmic1.h  
 drivers/st/pmic/stpmic1.c  

SPTMIC1 driver supports configuration via device-tree, bindings are described in:

 docs/devicetree/bindings/power/st,stpmic1.txt 

3.4.2. OP-TEE[edit source]

STPMIC1 is used by OP-TEE OS to configure the regulators for system suspend and system shutdown.

Driver source code:

 core/include/drivers/stpmic1.h  
 core/drivers/stpmic1.c