|
@@ -234,7 +234,7 @@ static inline int set_voltage(u8 vid)
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
-static int adjust_vdd(void)
|
|
|
|
|
|
+static int adjust_vdd(ulong vdd_override)
|
|
{
|
|
{
|
|
int re_enable = disable_interrupts();
|
|
int re_enable = disable_interrupts();
|
|
ccsr_gur_t __iomem *gur =
|
|
ccsr_gur_t __iomem *gur =
|
|
@@ -243,6 +243,8 @@ static int adjust_vdd(void)
|
|
u8 vid, vid_current;
|
|
u8 vid, vid_current;
|
|
int vdd_target, vdd_current, vdd_last;
|
|
int vdd_target, vdd_current, vdd_last;
|
|
int ret;
|
|
int ret;
|
|
|
|
+ unsigned long vdd_string_override;
|
|
|
|
+ char *vdd_string;
|
|
static const uint16_t vdd[32] = {
|
|
static const uint16_t vdd[32] = {
|
|
0, /* unused */
|
|
0, /* unused */
|
|
9875, /* 0.9875V */
|
|
9875, /* 0.9875V */
|
|
@@ -292,6 +294,19 @@ static int adjust_vdd(void)
|
|
FSL_CORENET_DCFG_FUSESR_ALTVID_MASK;
|
|
FSL_CORENET_DCFG_FUSESR_ALTVID_MASK;
|
|
}
|
|
}
|
|
vdd_target = vdd[vid];
|
|
vdd_target = vdd[vid];
|
|
|
|
+
|
|
|
|
+ /* check override variable for overriding VDD */
|
|
|
|
+ vdd_string = getenv("t4240qds_vdd_mv");
|
|
|
|
+ if (vdd_override == 0 && vdd_string &&
|
|
|
|
+ !strict_strtoul(vdd_string, 10, &vdd_string_override))
|
|
|
|
+ vdd_override = vdd_string_override;
|
|
|
|
+ if (vdd_override >= 819 && vdd_override <= 1212) {
|
|
|
|
+ vdd_target = vdd_override * 10; /* convert to 1/10 mV */
|
|
|
|
+ debug("VDD override is %lu\n", vdd_override);
|
|
|
|
+ } else if (vdd_override != 0) {
|
|
|
|
+ printf("Invalid value.\n");
|
|
|
|
+ }
|
|
|
|
+
|
|
if (vdd_target == 0) {
|
|
if (vdd_target == 0) {
|
|
debug("VID: VID not used\n");
|
|
debug("VID: VID not used\n");
|
|
ret = 0;
|
|
ret = 0;
|
|
@@ -511,7 +526,7 @@ int board_early_init_r(void)
|
|
* Adjust core voltage according to voltage ID
|
|
* Adjust core voltage according to voltage ID
|
|
* This function changes I2C mux to channel 2.
|
|
* This function changes I2C mux to channel 2.
|
|
*/
|
|
*/
|
|
- if (adjust_vdd())
|
|
|
|
|
|
+ if (adjust_vdd(0))
|
|
printf("Warning: Adjusting core voltage failed.\n");
|
|
printf("Warning: Adjusting core voltage failed.\n");
|
|
|
|
|
|
/* Configure board SERDES ports crossbar */
|
|
/* Configure board SERDES ports crossbar */
|
|
@@ -801,3 +816,23 @@ void qixis_dump_switch(void)
|
|
i + 1, byte_to_binary_mask(sw[i], mask[i], buf), sw[i]);
|
|
i + 1, byte_to_binary_mask(sw[i], mask[i], buf), sw[i]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+static int do_vdd_adjust(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
|
|
|
|
+{
|
|
|
|
+ ulong override;
|
|
|
|
+
|
|
|
|
+ if (argc < 2)
|
|
|
|
+ return CMD_RET_USAGE;
|
|
|
|
+ if (!strict_strtoul(argv[1], 10, &override))
|
|
|
|
+ adjust_vdd(override); /* the value is checked by callee */
|
|
|
|
+ else
|
|
|
|
+ return CMD_RET_USAGE;
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+U_BOOT_CMD(
|
|
|
|
+ vdd_override, 2, 0, do_vdd_adjust,
|
|
|
|
+ "Override VDD",
|
|
|
|
+ "- override with the voltage specified in mV, eg. 1050"
|
|
|
|
+);
|