test: rockchip: improve regulator test

1. dump all regulator fdt configure and current status;
2. only adjudst voltage for bucks;

Change-Id: Ib1b1730e0eb8157a9c979e3552932b2c80f40458
Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
Joseph Chen 2018-07-12 09:26:28 +08:00 committed by Kever Yang
parent 3403638a65
commit 0b4606ef44
1 changed files with 34 additions and 31 deletions

View File

@ -6,7 +6,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <common.h> #include <common.h>
#include <common.h> #include <console.h>
#include <dm.h> #include <dm.h>
#include <power/pmic.h> #include <power/pmic.h>
#include <power/regulator.h> #include <power/regulator.h>
@ -15,36 +15,44 @@
static void regulator_show_dt(struct udevice *dev) static void regulator_show_dt(struct udevice *dev)
{ {
struct dm_regulator_uclass_platdata *uc_pdata; struct dm_regulator_uclass_platdata *uc_pdata;
int uV;
uc_pdata = dev_get_uclass_platdata(dev); uc_pdata = dev_get_uclass_platdata(dev);
uV = regulator_get_value(dev);
printf("\t%s@%s: \t[", dev->name, uc_pdata->name); printf("%25s@%15s: ", dev->name, uc_pdata->name);
if (uc_pdata->flags & REGULATOR_FLAG_AUTOSET_UV) printf("%7duV <-> %7duV, set %7duV, %s",
printf("%d uV", uc_pdata->min_uV); uc_pdata->min_uV, uc_pdata->max_uV, uV,
else (uc_pdata->always_on || uc_pdata->boot_on) ?
printf("%d ~ %d uV", uc_pdata->min_uV, uc_pdata->max_uV); "enabling" : "disabled");
printf(" | supsend %7duV, %s",
uc_pdata->suspend_uV,
uc_pdata->suspend_on ? "enabling" : "disabled");
if (uc_pdata->init_uV != -ENODATA)
printf("; init %7duV", uc_pdata->init_uV);
printf("\n");
printf("; %s]\n", uc_pdata->boot_on ? "enable" : "disabled");
} }
static void regulator_show_state(struct udevice *dev) static void regulator_show_state(struct udevice *dev)
{ {
struct dm_regulator_uclass_platdata *uc_pdata; struct dm_regulator_uclass_platdata *uc_pdata;
int enable, uV; int enable, uV, suspend_enable, suspend_uV;
int same = 1;
uc_pdata = dev_get_uclass_platdata(dev); uc_pdata = dev_get_uclass_platdata(dev);
enable = regulator_get_enable(dev); enable = regulator_get_enable(dev);
uV = regulator_get_value(dev); uV = regulator_get_value(dev);
if (uc_pdata->flags & REGULATOR_FLAG_AUTOSET_UV) suspend_enable = regulator_get_suspend_enable(dev);
same = (enable == uc_pdata->boot_on) && suspend_uV = regulator_get_suspend_value(dev);
(uV == uc_pdata->min_uV);
printf("\t%s@%s: \t[", dev->name, uc_pdata->name); printf("%25s@%15s: set %7duV, %s | suspend %7duV, %s\n",
printf("%d uV", uV); dev->name, uc_pdata->name, uV,
printf("; %s] <%s>\n", enable ? "enable" : "disabled", enable ? "enabling" : "disabled", suspend_uV,
same ? "same" : "Not same"); suspend_enable ? "enabling" : "disabled");
} }
static int regulator_confirm_dt(void) static int regulator_confirm_dt(void)
@ -57,25 +65,21 @@ static int regulator_confirm_dt(void)
if (ret) if (ret)
return ret; return ret;
printf("<FDT config>:\n"); printf("<Board dts config>:\n");
for (uclass_first_device(UCLASS_REGULATOR, &dev); for (uclass_first_device(UCLASS_REGULATOR, &dev);
dev; dev;
uclass_next_device(&dev)) { uclass_next_device(&dev)) {
regulator_show_dt(dev); regulator_show_dt(dev);
} }
printf("\n\n\n<NOW state>:\n"); printf("\n<Board current status>:\n");
for (uclass_first_device(UCLASS_REGULATOR, &dev); for (uclass_first_device(UCLASS_REGULATOR, &dev);
dev; dev;
uclass_next_device(&dev)) { uclass_next_device(&dev)) {
regulator_show_state(dev); regulator_show_state(dev);
} }
printf("\n\n\n"); printf("\n");
printf("1. Please compare <NOW state> and <FDT config>.\n");
printf("2. Please measure the volatge of all regulators "
"and compare with <Now state> voltage.\n\n");
printf("After above done, you can hit any key to continue test case2...\n\n\n\n");
while (!getc()) while (!getc())
; ;
@ -92,7 +96,7 @@ static int regulator_adjust_voltage(struct udevice *dev)
/* only not fix voltage regulator will be tested! */ /* only not fix voltage regulator will be tested! */
if ((uc_pdata->max_uV == uc_pdata->min_uV) || if ((uc_pdata->max_uV == uc_pdata->min_uV) ||
!regulator_get_enable(dev)) !regulator_get_enable(dev) || strncmp("DCDC", dev->name, 4))
return 0; return 0;
/* save for restore after test done */ /* save for restore after test done */
@ -100,13 +104,12 @@ static int regulator_adjust_voltage(struct udevice *dev)
for (i = 1; i < 4; i++) { for (i = 1; i < 4; i++) {
uV = regulator_get_value(dev); uV = regulator_get_value(dev);
printf("[%s] ", uc_pdata->name); printf("[%s@%s] set: %d uV -> %d uV; ",
printf("Try: %d uV --> %d uV; ", uV, uV + step_uV * i); dev->name, uc_pdata->name, uV, uV + step_uV * i);
uV += (step_uV * i); uV += (step_uV * i);
regulator_set_value(dev, uV); regulator_set_value(dev, uV);
printf("Now: %d uV.\n\n", regulator_get_value(dev)); printf("ReadBack: %d uV\n\n", regulator_get_value(dev));
printf("Please measure voltage of [%s].\n" printf("Confirm '%s' voltage, then hit any key to continue...\n\n",
"After done, hit any key to continue...\n\n\n\n",
uc_pdata->name); uc_pdata->name);
while (!getc()) while (!getc())
@ -141,12 +144,12 @@ static int regulator_confirm_voltage_accuracy(void)
int board_regulator_test(int argc, char * const argv[]) int board_regulator_test(int argc, char * const argv[])
{ {
printf("----------------------------------------------------\n"); printf("----------------------------------------------------\n");
printf("REGULATOR test case 1: regulator fdt config confirm\n"); printf("REGULATOR: status show\n");
printf("----------------------------------------------------\n\n"); printf("----------------------------------------------------\n\n");
regulator_confirm_dt(); regulator_confirm_dt();
printf("----------------------------------------------------\n"); printf("----------------------------------------------------\n");
printf("REGULATOR test case 2: regulator voltage accuracy confirm\n"); printf("REGULATOR: voltage accuracy confirm\n");
printf("----------------------------------------------------\n\n"); printf("----------------------------------------------------\n\n");
regulator_confirm_voltage_accuracy(); regulator_confirm_voltage_accuracy();