cancel
Showing results for 
Search instead for 
Did you mean: 

error at PMIC I2C

manishee
Associate

We have set PB7 and PE15 for  I2c4 communication for PMIC in op-tee stm32mp135f-dk.dts.

but we keep getting pmic error like this -

I/TC: Embedded DTB found
I/TC: OP-TEE version: Unknown_3.19 (gcc version 12.2.0 (GCC)) #23 Mon Jan 8 10:50:26 UTC 2024 arm
I/TC: WARNING: This OP-TEE configuration might be insecure!
I/TC: WARNING: Please check https://optee.readthedocs.io/en/latest/architecture/porting_guidelines.html
I/TC: Primary CPU initializing
I/TC: WARNING: All debug access are allowed
E/TC:0 0 Panic at core/arch/arm/plat-stm32mp1/drivers/stm32mp1_pmic.c:183 <initialize_pmic_i2c>
E/TC:0 0 TEE load address @ 0xde000000
E/TC:0 0 Call stack:
E/TC:0 0 0xde0030f9
E/TC:0 0 0xde0193a7
E/TC:0 0 0xde006735
E/TC:0 0 0xde017fb9
E/TC:0 0 0xde018089
E/TC:0 0 0xde018773
E/TC:0 0 0xde01a095
E/TC:0 0 0xde002fbb
E/TC:0 0 0xde00019c

4 REPLIES 4
arifbalik
Associate II

I have the exact same issue with PB7 and PE15. Have you been able to solve this issue?

skarayigit
Associate III

Here is the PMIC and power related DeviceTree parts that works for me.

optee-os dts:

(Use this part same in tf-a dts file.)

/ { /* root */
    vin: vin {
        compatible = "regulator-fixed";
        regulator-name = "vin";
        regulator-min-microvolt = <5000000>;
        regulator-max-microvolt = <5000000>;
        regulator-always-on;
    };

    v3v3_ao: v3v3_ao {
        compatible = "regulator-fixed";
        regulator-name = "v3v3_ao";
        regulator-min-microvolt = <3300000>;
        regulator-max-microvolt = <3300000>;
        regulator-always-on;
    };
};

Check that under &etzpc node you have I2C4 secured

DECPROT(STM32MP1_ETZPC_I2C4_ID, DECPROT_S_RW, DECPROT_UNLOCK)

(Use this part (i2c4 node) same in tf-a dts file.)

&i2c4{
    pinctrl-names = "default";
    pinctrl-0 = <&i2c4_pins_mx>;
    status = "okay";
    /* USER CODE BEGIN i2c4 */
    clock-frequency = <400000>;
    i2c-scl-rising-time-ns = <185>;
    i2c-scl-falling-time-ns = <20>;
    pmic: stpmic@33 {
        compatible = "st,stpmic1";
        reg = <0x33>;
        status = "okay";
        st,wakeup-pin-number = <1>;
        st,notif-it-id = <0>;
        wakeup-source;
        regulators {
            compatible = "st,stpmic1-regulators";
            buck1-supply = <&vin>;
            buck2-supply = <&vin>;
            buck3-supply = <&vin>;
            buck4-supply = <&vin>;
            ldo1-supply = <&vin>;
            ldo4-supply = <&vin>;
            ldo5-supply = <&vin>;
            ldo6-supply = <&vin>;
            vref_ddr-supply = <&vin>;
            pwr_sw1-supply = <&bst_out>;
            pwr_sw2-supply = <&v3v3_ao>;
            vddcpu: buck1 {
                regulator-name = "vddcpu";
                regulator-min-microvolt = <1250000>;
                regulator-max-microvolt = <1350000>;
                regulator-always-on;
                regulator-over-current-protection;
                lp-stop {
                    regulator-suspend-microvolt = <1250000>;
                };
                lplv-stop {
                    regulator-suspend-microvolt = <900000>;
                };
                lplv-stop2 {
                    regulator-off-in-suspend;
                };
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            vdd_ddr: buck2 {
                regulator-name = "vdd_ddr";
                regulator-min-microvolt = <1350000>;
                regulator-max-microvolt = <1350000>;
                regulator-always-on;
                regulator-over-current-protection;
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            vdd: buck3 {
                regulator-name = "vdd";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-always-on;
                st,mask-reset;
                regulator-over-current-protection;
            };
            vddcore: buck4 {
                regulator-name = "vddcore";
                regulator-min-microvolt = <1250000>;
                regulator-max-microvolt = <1250000>;
                regulator-always-on;
                regulator-over-current-protection;
                lplv-stop {
                    regulator-suspend-microvolt = <900000>;
                };
                lplv-stop2 {
                    regulator-suspend-microvolt = <900000>;
                };
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            vdd_adc: ldo1 {
                regulator-name = "vdd_adc";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            unused1: ldo2 {
                regulator-name = "ldo2";
            };
            unused2: ldo3 {
                regulator-name = "ldo3";
            };
            vdd_usb: ldo4 {
                regulator-name = "vdd_usb";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            vdd_sd: ldo5 {
                regulator-name = "vdd_sd";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
                regulator-boot-on;
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            v1v8_periph: ldo6 {
                regulator-name = "v1v8_periph";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <1800000>;
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            vref_ddr: vref_ddr {
                regulator-name = "vref_ddr";
                regulator-always-on;
                standby-ddr-sr {
                    regulator-off-in-suspend;
                };
                standby-ddr-off {
                    regulator-off-in-suspend;
                };
            };
            bst_out: boost {
                regulator-name = "bst_out";
            };
            v3v3_sw: pwr_sw2 {
                regulator-name = "v3v3_sw";
                regulator-active-discharge = <1>;
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;
            };
        };
    };
    /* USER CODE END i2c4 */
};

I also have this node added but I don't think you need it to PMIC work:

&pwr_regulators{
    status = "okay";
    /* USER CODE BEGIN pwr_regulators */
    system_suspend_supported_soc_modes = <
        STM32_PM_CSLEEP_RUN
        STM32_PM_CSTOP_ALLOW_LP_STOP
        STM32_PM_CSTOP_ALLOW_LPLV_STOP
        STM32_PM_CSTOP_ALLOW_LPLV_STOP2
        STM32_PM_CSTOP_ALLOW_STANDBY_DDR_SR
    >;
    system_off_soc_mode = <STM32_PM_SHUTDOWN>;
    vdd-supply = <&vdd>;
    vdd_3v3_usbfs-supply = <&vdd_usb>;
    /* USER CODE END pwr_regulators */
};

and make sure you have secured you I2C4 pins. For me:

&gpiob {
    st,protreg = < (TZPROT(9)|TZPROT(13)) >;
};

but for you it shoud be something like this:

&gpiob { /* PB7 */
    st, protreg = < (TZPROT(7))>;
};
&gpioe { /* PE15 */
    st, protreg = < (TZPROT(15))>;
};
/* Add this part also under the u-boot and kernel dts file /*
&scmi_regu {
    scmi_vddcpu: voltd-vddcpu {
        reg = <VOLTD_SCMI_STPMIC1_BUCK1>;
        voltd-supply = <&vddcpu>;
    };
    scmi_vdd: voltd-vdd {
        reg = <VOLTD_SCMI_STPMIC1_BUCK3>;
        voltd-supply = <&vdd>;
    };
    scmi_vddcore: voltd-vddcore {
        reg = <VOLTD_SCMI_STPMIC1_BUCK4>;
        voltd-supply = <&vddcore>;
    };
    scmi_vdd_adc: voltd-vdd_adc {
        reg = <VOLTD_SCMI_STPMIC1_LDO1>;
        voltd-supply = <&vdd_adc>;
    };
    scmi_vdd_usb: voltd-vdd_usb {
        reg = <VOLTD_SCMI_STPMIC1_LDO4>;
        voltd-supply = <&vdd_usb>;
    };
    scmi_vdd_sd: voltd-vdd_sd {
        reg = <VOLTD_SCMI_STPMIC1_LDO5>;
        voltd-supply = <&vdd_sd>;
    };
    scmi_v1v8_periph: voltd-v1v8_periph {
        reg = <VOLTD_SCMI_STPMIC1_LDO6>;
        voltd-supply = <&v1v8_periph>;
    };
    scmi_v3v3_sw: voltd-v3v3_sw {
        reg = <VOLTD_SCMI_STPMIC1_PWR_SW2>;
        voltd-supply = <&v3v3_sw>;
    };
};

I hope it would solve your problem with PMIC.

skarayigit
Associate III

@manishee and @arifbalik  did you guys solved your issues?

Yes, it turns out the pin should be inside the secure context. Changing this solved the issue for me

&gpiob{
    st,protreg = < (TZPROT(9) | TZPROT(7)) >;
};