View Issue Details

IDProjectCategoryView StatusLast Update
0002289NBootiMX6PowerManagementpublic2021-03-29 15:19
ReporterKeller Assigned To 
PrioritynormalSeveritycrashReproducibilityalways
Status closedResolutionwon't fix 
Product VersionV1.00 
Target VersionV1.00 
Summary0002289: Reset PMIC to full power after reset
DescriptionIf the CPU is throttled down to a lower frequency (e.g. in Linux when the system is idle), the core voltage is also reduced. If the CPU gets a reset when in this state, the voltage is *not* automatically reset to the highest possible voltage by hardware. Then running NBoot after the reset is deasserted will fail and the system hangs.
Steps To ReproduceFor example on armStoneA9, start Linux, wait a while until everything is up and running, then check speed with

  cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq

If it shows 396000, press the reset button. The system will hang because the core voltage is still at 0.95V instead of 1.25V.
Additional InformationWe could either do a hardware modification to toggle the PWRON pad on reset. For example pulling pin 53 of the armStoneA9 feature connector low will perfectly work as a reset, the voltage is automatically restored to 1.25V.

Or we can try to do this by software. In NBoot we should reset PMIC by writing 0xFF to register 0x84 in Extended Page 1. This will reload and activate all settings anew. This requires I2C access to PMIC in NBoot and it has to be done *before* the speed is set to full speed!

However to be able to set this value, NBoot must be running in the first place. So we have to make sure that NBoot starts with 396MHz and not with 796MHz. As far as I know this can be set via a fuse. But maybe this can already be done by writing to the appropriate fuse shadow register, so that the next reset will use 396MHz. The first start after power-on is OK, because then the PMIC is starting with the maximum voltage (even 1.38V instead of 1.25V), so 796MHz is OK here. Only the next start must use 396MHz.

However if the shadow register is overwritten by a reset, we might actually have to blow the appropriate fuse. Then the system will always start at 396MHz.

Activities

There are no notes attached to this issue.