|
@@ -142,22 +142,28 @@ void reconfigure_pll(u32 new_cpu_freq)
|
|
* modify it.
|
|
* modify it.
|
|
*/
|
|
*/
|
|
if (temp == 1) {
|
|
if (temp == 1) {
|
|
- mfcpr(CPR0_PLLD, reg);
|
|
|
|
- /* Get current value of fbdv. */
|
|
|
|
- temp = (reg & PLLD_FBDV_MASK) >> 24;
|
|
|
|
- fbdv = temp ? temp : 32;
|
|
|
|
- /* Get current value of lfbdv. */
|
|
|
|
- temp = (reg & PLLD_LFBDV_MASK);
|
|
|
|
- lfbdv = temp ? temp : 64;
|
|
|
|
/*
|
|
/*
|
|
* Load register that contains current boot strapping option.
|
|
* Load register that contains current boot strapping option.
|
|
*/
|
|
*/
|
|
mfcpr(CPR0_ICFG, reg);
|
|
mfcpr(CPR0_ICFG, reg);
|
|
- /* Shift strapping option into low 3 bits.*/
|
|
|
|
- reg = (reg >> 28);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Strapping option bits (ICS) are already in correct position,
|
|
|
|
+ * only masking needed.
|
|
|
|
+ */
|
|
|
|
+ reg &= CPR0_ICFG_ICS_MASK;
|
|
|
|
|
|
if ((reg == BOOT_STRAP_OPTION_A) || (reg == BOOT_STRAP_OPTION_B) ||
|
|
if ((reg == BOOT_STRAP_OPTION_A) || (reg == BOOT_STRAP_OPTION_B) ||
|
|
(reg == BOOT_STRAP_OPTION_D) || (reg == BOOT_STRAP_OPTION_E)) {
|
|
(reg == BOOT_STRAP_OPTION_D) || (reg == BOOT_STRAP_OPTION_E)) {
|
|
|
|
+ mfcpr(CPR0_PLLD, reg);
|
|
|
|
+
|
|
|
|
+ /* Get current value of fbdv. */
|
|
|
|
+ temp = (reg & PLLD_FBDV_MASK) >> 24;
|
|
|
|
+ fbdv = temp ? temp : 32;
|
|
|
|
+
|
|
|
|
+ /* Get current value of lfbdv. */
|
|
|
|
+ temp = (reg & PLLD_LFBDV_MASK);
|
|
|
|
+ lfbdv = temp ? temp : 64;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Get current value of FWDVA. Assign current FWDVA to
|
|
* Get current value of FWDVA. Assign current FWDVA to
|
|
* new FWDVB.
|
|
* new FWDVB.
|
|
@@ -165,12 +171,14 @@ void reconfigure_pll(u32 new_cpu_freq)
|
|
mfcpr(CPR0_PLLD, reg);
|
|
mfcpr(CPR0_PLLD, reg);
|
|
target_fwdvb = (reg & PLLD_FWDVA_MASK) >> 16;
|
|
target_fwdvb = (reg & PLLD_FWDVA_MASK) >> 16;
|
|
fwdvb = target_fwdvb ? target_fwdvb : 8;
|
|
fwdvb = target_fwdvb ? target_fwdvb : 8;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Get current value of FWDVB. Assign current FWDVB to
|
|
* Get current value of FWDVB. Assign current FWDVB to
|
|
* new FWDVA.
|
|
* new FWDVA.
|
|
*/
|
|
*/
|
|
target_fwdva = (reg & PLLD_FWDVB_MASK) >> 8;
|
|
target_fwdva = (reg & PLLD_FWDVB_MASK) >> 8;
|
|
fwdva = target_fwdva ? target_fwdva : 16;
|
|
fwdva = target_fwdva ? target_fwdva : 16;
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Update CPR0_PLLD with switched FWDVA and FWDVB.
|
|
* Update CPR0_PLLD with switched FWDVA and FWDVB.
|
|
*/
|
|
*/
|
|
@@ -181,6 +189,7 @@ void reconfigure_pll(u32 new_cpu_freq)
|
|
((fbdv == 32 ? 0 : fbdv) << 24) |
|
|
((fbdv == 32 ? 0 : fbdv) << 24) |
|
|
(lfbdv == 64 ? 0 : lfbdv);
|
|
(lfbdv == 64 ? 0 : lfbdv);
|
|
mtcpr(CPR0_PLLD, reg);
|
|
mtcpr(CPR0_PLLD, reg);
|
|
|
|
+
|
|
/* Acknowledge that a reset is required. */
|
|
/* Acknowledge that a reset is required. */
|
|
reset_needed = 1;
|
|
reset_needed = 1;
|
|
}
|
|
}
|