Last active
June 19, 2019 17:40
-
-
Save lategoodbye/bbd8165be409b62aec28f9f43f20b5ec to your computer and use it in GitHub Desktop.
Add more debug to BCM2835 power drivers
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 1be26a8b6e87266f50751f1cfed3fe54b71d75db Mon Sep 17 00:00:00 2001 | |
From: Stefan Wahren <wahrenst@gmx.net> | |
Date: Fri, 14 Jun 2019 10:36:23 +0200 | |
Subject: [PATCH] soc: bcm: Add more debug to power drivers | |
Signed-off-by: Stefan Wahren <wahrenst@gmx.net> | |
--- | |
drivers/soc/bcm/bcm2835-power.c | 14 ++++++++++++++ | |
drivers/soc/bcm/raspberrypi-power.c | 4 ++++ | |
2 files changed, 18 insertions(+) | |
diff --git a/drivers/soc/bcm/bcm2835-power.c b/drivers/soc/bcm/bcm2835-power.c | |
index 1e0041e..555092a 100644 | |
--- a/drivers/soc/bcm/bcm2835-power.c | |
+++ b/drivers/soc/bcm/bcm2835-power.c | |
@@ -148,6 +148,17 @@ struct bcm2835_power { | |
struct reset_controller_dev reset; | |
}; | |
+static void bcm2835_dump_register(struct bcm2835_power *power, const char *prefix) | |
+{ | |
+ struct device *dev = power->dev; | |
+ | |
+ dev_info(dev, "%s: GRAFX %08x V3D_S_CTRL %08x V3D_M_CTRL %08x\n", | |
+ prefix, | |
+ PM_READ(PM_GRAFX), | |
+ ASB_READ(ASB_V3D_S_CTRL), | |
+ ASB_READ(ASB_V3D_M_CTRL)); | |
+} | |
+ | |
static int bcm2835_asb_enable(struct bcm2835_power *power, u32 reg) | |
{ | |
u64 start; | |
@@ -362,8 +373,11 @@ static int bcm2835_power_pd_power_on(struct generic_pm_domain *domain) | |
container_of(domain, struct bcm2835_power_domain, base); | |
struct bcm2835_power *power = pd->power; | |
+ dev_info(power->dev, "%s: %u\n", __func__, pd->domain); | |
+ | |
switch (pd->domain) { | |
case BCM2835_POWER_DOMAIN_GRAFX: | |
+ bcm2835_dump_register(power, "Before"); | |
return bcm2835_power_power_on(pd, PM_GRAFX); | |
case BCM2835_POWER_DOMAIN_GRAFX_V3D: | |
diff --git a/drivers/soc/bcm/raspberrypi-power.c b/drivers/soc/bcm/raspberrypi-power.c | |
index 5d1aacd..05c341b 100644 | |
--- a/drivers/soc/bcm/raspberrypi-power.c | |
+++ b/drivers/soc/bcm/raspberrypi-power.c | |
@@ -74,6 +74,8 @@ static int rpi_domain_on(struct generic_pm_domain *domain) | |
struct rpi_power_domain *rpi_domain = | |
container_of(domain, struct rpi_power_domain, base); | |
+ pr_info("%s: %u\n", __func__, rpi_domain->domain); | |
+ | |
return rpi_firmware_set_power(rpi_domain, true); | |
} | |
@@ -148,6 +150,8 @@ rpi_has_new_domain_support(struct rpi_power_domains *rpi_domains) | |
RPI_FIRMWARE_GET_DOMAIN_STATE, | |
&packet, sizeof(packet)); | |
+ pr_info("%s: ret %d, on %08x\n", __func__, ret, packet.on); | |
+ | |
return ret == 0 && packet.on != ~0; | |
} | |
-- | |
2.7.4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From bcf168668a78f229cfc6a3a04707a096b642205d Mon Sep 17 00:00:00 2001 | |
From: Stefan Wahren <wahrenst@gmx.net> | |
Date: Fri, 14 Jun 2019 13:07:26 +0200 | |
Subject: [PATCH 2/2] soc: bcm2835-power: Make timeout handling in ramp-up more | |
verbose | |
Signed-off-by: Stefan Wahren <wahrenst@gmx.net> | |
--- | |
drivers/soc/bcm/bcm2835-power.c | 18 +++++++++++++++--- | |
1 file changed, 15 insertions(+), 3 deletions(-) | |
diff --git a/drivers/soc/bcm/bcm2835-power.c b/drivers/soc/bcm/bcm2835-power.c | |
index 555092a..4a63623 100644 | |
--- a/drivers/soc/bcm/bcm2835-power.c | |
+++ b/drivers/soc/bcm/bcm2835-power.c | |
@@ -242,13 +242,25 @@ static int bcm2835_power_power_on(struct bcm2835_power_domain *pd, u32 pm_reg) | |
start = ktime_get_ns(); | |
while (!(powok = !!(PM_READ(pm_reg) & PM_POWOK))) { | |
cpu_relax(); | |
- if (ktime_get_ns() - start >= 3000) | |
+ if (ktime_get_ns() - start >= 3000) { | |
+ dev_err(dev, "Timeout #1 waiting for %s inrush %d\n", | |
+ pd->base.name, inrush); | |
break; | |
+ } | |
+ } | |
+ if (powok) | |
+ dev_info(dev, "For %s inrush %d finished after %llu ns\n", | |
+ pd->base.name, inrush, ktime_get_ns() - start); | |
+ while (!(powok = !!(PM_READ(pm_reg) & PM_POWOK))) { | |
+ cpu_relax(); | |
+ if (ktime_get_ns() - start >= 20000) { | |
+ dev_err(dev, "Timeout #2 waiting for %s inrush %d\n", | |
+ pd->base.name, inrush); | |
+ break; | |
+ } | |
} | |
} | |
if (!powok) { | |
- dev_err(dev, "Timeout waiting for %s power OK\n", | |
- pd->base.name); | |
ret = -ETIMEDOUT; | |
goto err_disable_powup; | |
} | |
-- | |
2.7.4 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From cc38d8a2ea388e275b0c9a16e83317a09b83adf5 Mon Sep 17 00:00:00 2001 | |
From: Stefan Wahren <wahrenst@gmx.net> | |
Date: Wed, 19 Jun 2019 18:49:04 +0200 | |
Subject: [PATCH 3/3] soc: bcm2835-power: Try to dump all relevant registers | |
Signed-off-by: Stefan Wahren <wahrenst@gmx.net> | |
--- | |
drivers/soc/bcm/bcm2835-power.c | 46 +++++++++++++++++++++++++++++++++++------ | |
1 file changed, 40 insertions(+), 6 deletions(-) | |
diff --git a/drivers/soc/bcm/bcm2835-power.c b/drivers/soc/bcm/bcm2835-power.c | |
index 4a63623..577c32c 100644 | |
--- a/drivers/soc/bcm/bcm2835-power.c | |
+++ b/drivers/soc/bcm/bcm2835-power.c | |
@@ -151,12 +151,46 @@ struct bcm2835_power { | |
static void bcm2835_dump_register(struct bcm2835_power *power, const char *prefix) | |
{ | |
struct device *dev = power->dev; | |
- | |
- dev_info(dev, "%s: GRAFX %08x V3D_S_CTRL %08x V3D_M_CTRL %08x\n", | |
- prefix, | |
- PM_READ(PM_GRAFX), | |
- ASB_READ(ASB_V3D_S_CTRL), | |
- ASB_READ(ASB_V3D_M_CTRL)); | |
+ static bool once = false; | |
+ | |
+ if (once) | |
+ return; | |
+ | |
+ once = true; | |
+ | |
+ dev_info(dev, "%s: PM_GNRIC %08x\n", prefix, PM_READ(PM_GNRIC)); | |
+ dev_info(dev, "%s: PM_AUDIO %08x\n", prefix, PM_READ(PM_AUDIO)); | |
+ dev_info(dev, "%s: PM_STATUS %08x\n", prefix, PM_READ(PM_STATUS)); | |
+ dev_info(dev, "%s: PM_RSTC %08x\n", prefix, PM_READ(PM_RSTC)); | |
+ dev_info(dev, "%s: PM_RSTS %08x\n", prefix, PM_READ(PM_RSTS)); | |
+ dev_info(dev, "%s: PM_PADS0 %08x\n", prefix, PM_READ(PM_PADS0)); | |
+ dev_info(dev, "%s: PM_PADS2 %08x\n", prefix, PM_READ(PM_PADS2)); | |
+ dev_info(dev, "%s: PM_PADS3 %08x\n", prefix, PM_READ(PM_PADS3)); | |
+ dev_info(dev, "%s: PM_PADS4 %08x\n", prefix, PM_READ(PM_PADS4)); | |
+ dev_info(dev, "%s: PM_PADS5 %08x\n", prefix, PM_READ(PM_PADS5)); | |
+ dev_info(dev, "%s: PM_PADS6 %08x\n", prefix, PM_READ(PM_PADS6)); | |
+ dev_info(dev, "%s: PM_CAM0 %08x\n", prefix, PM_READ(PM_CAM0)); | |
+ dev_info(dev, "%s: PM_CAM1 %08x\n", prefix, PM_READ(PM_CAM1)); | |
+ dev_info(dev, "%s: PM_CCP2TX %08x\n", prefix, PM_READ(PM_CCP2TX)); | |
+ dev_info(dev, "%s: PM_DSI0 %08x\n", prefix, PM_READ(PM_DSI0)); | |
+ dev_info(dev, "%s: PM_DSI1 %08x\n", prefix, PM_READ(PM_DSI1)); | |
+ dev_info(dev, "%s: PM_HDMI %08x\n", prefix, PM_READ(PM_HDMI)); | |
+ dev_info(dev, "%s: PM_USB %08x\n", prefix, PM_READ(PM_USB)); | |
+ dev_info(dev, "%s: PM_PXLDO %08x\n", prefix, PM_READ(PM_PXLDO)); | |
+ dev_info(dev, "%s: PM_PXBG %08x\n", prefix, PM_READ(PM_PXBG)); | |
+ dev_info(dev, "%s: PM_DFT %08x\n", prefix, PM_READ(PM_DFT)); | |
+ dev_info(dev, "%s: PM_SMPS %08x\n", prefix, PM_READ(PM_SMPS)); | |
+ dev_info(dev, "%s: PM_XOSC %08x\n", prefix, PM_READ(PM_XOSC)); | |
+ dev_info(dev, "%s: PM_SPAREW %08x\n", prefix, PM_READ(PM_SPAREW)); | |
+ dev_info(dev, "%s: PM_SPARER %08x\n", prefix, PM_READ(PM_SPARER)); | |
+ dev_info(dev, "%s: PM_AVS_RSTDR %08x\n", prefix, PM_READ(PM_AVS_RSTDR)); | |
+ dev_info(dev, "%s: PM_AVS_STAT %08x\n", prefix, PM_READ(PM_AVS_STAT)); | |
+ dev_info(dev, "%s: PM_AVS_EVENT %08x\n", prefix, PM_READ(PM_AVS_EVENT)); | |
+ dev_info(dev, "%s: PM_AVS_INTEN %08x\n", prefix, PM_READ(PM_AVS_INTEN)); | |
+ dev_info(dev, "%s: PM_DUMMY %08x\n", prefix, PM_READ(PM_DUMMY)); | |
+ dev_info(dev, "%s: PM_IMAGE %08x\n", prefix, PM_READ(PM_IMAGE)); | |
+ dev_info(dev, "%s: PM_GRAFX %08x\n", prefix, PM_READ(PM_GRAFX)); | |
+ dev_info(dev, "%s: PM_PROC %08x\n", prefix, PM_READ(PM_PROC)); | |
} | |
static int bcm2835_asb_enable(struct bcm2835_power *power, u32 reg) | |
-- | |
2.7.4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment