summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorge Lee <geolee@google.com>2021-07-07 15:11:29 -0700
committerGeorge Lee <geolee@google.com>2021-07-07 16:43:37 -0700
commit393f516340ee24138a1ce819416ae9875c3090e3 (patch)
treeb07eb338d6c54520161b7ec72962dd4b8d62b672
parent418bcd71862114b9c810d326c53917a885d24b15 (diff)
downloadjaneiro-393f516340ee24138a1ce819416ae9875c3090e3.tar.gz
edgetpu: janeiro bcl port tpu clock divider ratio
Bug: 192615175 Signed-off-by: George Lee <geolee@google.com> Change-Id: I30449656504551a6cb684dc0c30f8031bc608010
-rw-r--r--drivers/edgetpu/janeiro-platform.h4
-rw-r--r--drivers/edgetpu/janeiro-pm.c12
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/edgetpu/janeiro-platform.h b/drivers/edgetpu/janeiro-platform.h
index 196bf75..a051f44 100644
--- a/drivers/edgetpu/janeiro-platform.h
+++ b/drivers/edgetpu/janeiro-platform.h
@@ -11,6 +11,7 @@
#include <linux/io.h>
#include <linux/mutex.h>
#include <linux/types.h>
+#include <soc/google/bcl.h>
#include "edgetpu-internal.h"
#include "janeiro-pm.h"
@@ -42,6 +43,9 @@ struct janeiro_platform_dev {
void __iomem *ssmt_base;
struct edgetpu_coherent_mem log_mem;
struct edgetpu_coherent_mem trace_mem;
+#if IS_ENABLED(CONFIG_GOOGLE_BCL)
+ struct bcl_device *bcl_dev;
+#endif
};
#endif /* __JANEIRO_PLATFORM_H__ */
diff --git a/drivers/edgetpu/janeiro-pm.c b/drivers/edgetpu/janeiro-pm.c
index ae1938f..acccf9e 100644
--- a/drivers/edgetpu/janeiro-pm.c
+++ b/drivers/edgetpu/janeiro-pm.c
@@ -10,6 +10,7 @@
#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/pm_runtime.h>
+#include <soc/google/bcl.h>
#include <linux/version.h>
#include "edgetpu-config.h"
@@ -233,6 +234,7 @@ static int janeiro_set_lpm(struct edgetpu_dev *etdev)
static int janeiro_power_up(struct edgetpu_pm *etpm)
{
struct edgetpu_dev *etdev = etpm->etdev;
+ struct janeiro_platform_dev *edgetpu_pdev = to_janeiro_dev(etdev);
int ret = 0;
ret = janeiro_pwr_state_set(
@@ -291,8 +293,16 @@ static int janeiro_power_up(struct edgetpu_pm *etpm)
break;
}
- if (ret)
+ if (ret) {
janeiro_power_down(etpm);
+ } else {
+#if IS_ENABLED(CONFIG_GOOGLE_BCL)
+ if (!edgetpu_pdev->bcl_dev)
+ edgetpu_pdev->bcl_dev = google_retrieve_bcl_handle();
+ if (edgetpu_pdev->bcl_dev)
+ google_init_tpu_ratio(edgetpu_pdev->bcl_dev);
+#endif
+ }
return ret;
}