When EM module is enabled, it is recommended to enable SCHEDULER also. During FSBL
execution of psu_init
, it is expected to get the PLL lock errors.
To avoid these errors during EM module initialization, PMU firmware will not enable
PLL Lock errors. It waits for psu_init
completion by FSBL using a
scheduler task. After FSBL completes execution of psu_init, PMU firmware will enable
all PLL Lock errors.
In xpfw_error_management.c, you can see the following default behavior of the PMU firmware for PLL Lock Errors:
[EM_ERR_ID_PLL_LOCK] = { .Type = EM_ERR_TYPE_2, .RegMask =
PMU_GLOBAL_ERROR_STATUS_2_PLL_LOCK_MASK, .Action = EM_ACTION_NONE, .Handler =
NullHandler},
where, PMU_GLOBAL_ERROR_STATUS_2_PLL_LOCK_MASK is #defined with
0X00001F00
value, which means that all the PLL Lock Errors are
enabled. Hence, if the design do not use any PLL/PLLs that are not locked, this
triggers the PS_ERROR_OUT
signal. It means that the
PMU_GLOBAL.ERROR_STATUS_2 register (bits [12:8]) signals that one or more PLLs are
NOT locked and that triggers the PS_ERROR_OUT
signal.
To analyze further and see if this is really an issue is to fully understand the
status of the PLL in the design. For example, if the design only uses IO_PLL and
DDR_PLL and PMU_GLOBAL.ERROR_STATUS_2 register signals 0x1600
value, it means that the RPU_PLL, APU_PLL, and Video_PLL Lock errors have occurred.
Looking at a few more registers, you can really understand the status of the
PLLs.
PLL_STATUS
- PLL_STATUS (CRL_APB) = FF5E0040: 00000019
- PLL_STATUS (CRF_APB) = FD1A0044: 0000003A
PLL STATUS | ERROR_STATUS_2 |
---|---|
IOPLL is locked and stable | Bit [8] is for IO_PLL = 0 |
RPLL is stabled and NOT locked (which means bypassed) | Bit [9] is for RPU_PLL = 1 |
APPL is stabled and NOT locked (which means bypassed) | Bit [10] is for APU_PLL = 1 |
DPLL is locked and stable | Bit [11] is for DDR_PLL = 0 |
VPLL is stabled and NOT locked (which means bypassed) | Bit [12] is for Video_PLL = 1 |
Hence, if the design only uses IO_PLL and DDR_PLL, then it is not really an error to have RPU_PLL, APU_PLL and Video_PLL in NOT locked status.
Xilinx recommends you to customize the PMU_GLOBAL_ERROR_STATUS_2_PLL_LOCK_MASK to
cover only the PLL of interest so that you can have a meaningful
PS_ERROR_OUT
signal.
Example:
#define PMU_GLOBAL_ERROR_STATUS_2_PLL_LOCK_MASK ((u32)0X00000900U) will only
signal on PS_ERROR_OUT IO_PLL and DDR_PLL errors.