diff options
author | Zuma copybara merger <zuma-automerger@google.com> | 2022-12-01 14:22:45 +0800 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-12-01 19:01:30 -0800 |
commit | 281d60c6af15345f0b4b19174cbbc5bd853d498c (patch) | |
tree | 7979fb75b469771fec124350e288c72bf5ac0e62 | |
parent | 6d4c0dabf332947d505368ae5aef2ca2e2768416 (diff) | |
download | rio-281d60c6af15345f0b4b19174cbbc5bd853d498c.tar.gz |
[Copybara Auto Merge] Merge branch zuma into android13-gs-pixel-5.15
edgetpu: Use thermal throttling KCI instead of set_policy
Bug: 258427511
edgetpu: Add a static debug pointer to driver state
Bug: 260768055
Signed-off-by: Zuma copybara merger <zuma-automerger@google.com>
GitOrigin-RevId: aaa7370d2eb6b4505495736b461a21736d449b59
Change-Id: Ib14b0b31209169197c2f507b82c55cf5f1e2825d
-rw-r--r-- | drivers/edgetpu/edgetpu-firmware.c | 7 | ||||
-rw-r--r-- | drivers/edgetpu/edgetpu-mobile-platform.c | 7 | ||||
-rw-r--r-- | drivers/edgetpu/edgetpu-soc.h | 3 | ||||
-rw-r--r-- | drivers/edgetpu/edgetpu-thermal.h | 7 | ||||
-rw-r--r-- | drivers/edgetpu/mobile-pm.c | 3 | ||||
-rw-r--r-- | drivers/edgetpu/mobile-soc-gsx01.c | 5 | ||||
-rw-r--r-- | drivers/edgetpu/mobile-thermal.c | 45 |
7 files changed, 45 insertions, 32 deletions
diff --git a/drivers/edgetpu/edgetpu-firmware.c b/drivers/edgetpu/edgetpu-firmware.c index fc26c2f..4d5d853 100644 --- a/drivers/edgetpu/edgetpu-firmware.c +++ b/drivers/edgetpu/edgetpu-firmware.c @@ -176,6 +176,13 @@ static int edgetpu_firmware_handshake(struct edgetpu_firmware *et_fw) ret = edgetpu_telemetry_kci(etdev); if (ret) etdev_warn(etdev, "telemetry KCI error: %d", ret); + + if (etdev->thermal->cooling_state) { + ret = edgetpu_thermal_resume(etdev->dev); + if (ret) + etdev_warn(etdev, "Thermal resume error: %d", ret); + } + /* Set debug dump buffer in FW */ edgetpu_get_debug_dump(etdev, 0); return 0; diff --git a/drivers/edgetpu/edgetpu-mobile-platform.c b/drivers/edgetpu/edgetpu-mobile-platform.c index 3ee70af..3c7e302 100644 --- a/drivers/edgetpu/edgetpu-mobile-platform.c +++ b/drivers/edgetpu/edgetpu-mobile-platform.c @@ -23,6 +23,8 @@ #include "mobile-firmware.h" #include "mobile-pm.h" +static struct edgetpu_dev *edgetpu_debug_pointer; + static void set_telemetry_mem(struct edgetpu_mobile_platform_dev *etmdev, enum gcip_telemetry_type type, struct edgetpu_coherent_mem *mem) { @@ -426,6 +428,8 @@ static int edgetpu_mobile_platform_probe(struct platform_device *pdev, /* Turn the device off unless a client request is already received. */ edgetpu_pm_shutdown(etdev, false); + edgetpu_debug_pointer = etdev; + return 0; out_destroy_fw: edgetpu_mobile_firmware_destroy(etdev); @@ -460,5 +464,8 @@ static int edgetpu_mobile_platform_remove(struct platform_device *pdev) edgetpu_pm_put(etdev->pm); edgetpu_pm_shutdown(etdev, true); edgetpu_mobile_pm_destroy(etdev); + + edgetpu_debug_pointer = NULL; + return 0; } diff --git a/drivers/edgetpu/edgetpu-soc.h b/drivers/edgetpu/edgetpu-soc.h index 53d06d2..98b1f3d 100644 --- a/drivers/edgetpu/edgetpu-soc.h +++ b/drivers/edgetpu/edgetpu-soc.h @@ -32,9 +32,6 @@ long edgetpu_soc_pm_get_rate(struct edgetpu_dev *etdev, int flags); /* Power management set TPU clock rate */ int edgetpu_soc_pm_set_rate(unsigned long rate); -/* Set PM policy */ -int edgetpu_soc_pm_set_policy(u64 val); - /* Power down */ void edgetpu_soc_pm_power_down(struct edgetpu_dev *etdev); diff --git a/drivers/edgetpu/edgetpu-thermal.h b/drivers/edgetpu/edgetpu-thermal.h index dbd283f..bcfed04 100644 --- a/drivers/edgetpu/edgetpu-thermal.h +++ b/drivers/edgetpu/edgetpu-thermal.h @@ -56,6 +56,13 @@ int edgetpu_thermal_suspend(struct device *dev); int edgetpu_thermal_resume(struct device *dev); /* + * Sends the thermal throttling KCI if the device is powered. + * + * Returns the return value of KCI if the device is powered, otherwise 0. + */ +int edgetpu_thermal_kci_if_powered(struct edgetpu_dev *etdev, u32 state); + +/* * Holds thermal->lock. * * Does nothing if the thermal management is not supported. diff --git a/drivers/edgetpu/mobile-pm.c b/drivers/edgetpu/mobile-pm.c index 9a6a21e..aaf6a2f 100644 --- a/drivers/edgetpu/mobile-pm.c +++ b/drivers/edgetpu/mobile-pm.c @@ -18,6 +18,7 @@ #include "edgetpu-mailbox.h" #include "edgetpu-mobile-platform.h" #include "edgetpu-pm.h" +#include "edgetpu-thermal.h" #include "mobile-firmware.h" #include "mobile-pm.h" @@ -148,7 +149,7 @@ static int mobile_pwr_policy_set(void *data, u64 val) int ret; mutex_lock(&platform_pwr->policy_lock); - ret = edgetpu_soc_pm_set_policy(val); + ret = edgetpu_thermal_kci_if_powered(etdev, val); if (ret) { dev_err(etmdev->edgetpu_dev.dev, diff --git a/drivers/edgetpu/mobile-soc-gsx01.c b/drivers/edgetpu/mobile-soc-gsx01.c index 104cf46..baefb33 100644 --- a/drivers/edgetpu/mobile-soc-gsx01.c +++ b/drivers/edgetpu/mobile-soc-gsx01.c @@ -358,11 +358,6 @@ int edgetpu_soc_pm_set_rate(unsigned long rate) return -EOPNOTSUPP; } -int edgetpu_soc_pm_set_policy(u64 val) -{ - return 0; -} - static int edgetpu_core_rate_get(void *data, u64 *val) { struct edgetpu_dev *etdev = (typeof(etdev))data; diff --git a/drivers/edgetpu/mobile-thermal.c b/drivers/edgetpu/mobile-thermal.c index c8fb0a2..73b68d3 100644 --- a/drivers/edgetpu/mobile-thermal.c +++ b/drivers/edgetpu/mobile-thermal.c @@ -30,26 +30,6 @@ #define OF_DATA_NUM_MAX (MAX_NUM_TPU_STATES * 2) static struct edgetpu_state_pwr state_pwr_map[MAX_NUM_TPU_STATES] = {0}; -/* - * Sends the thermal throttling KCI if the device is powered. - * - * Returns the return value of KCI if the device is powered, otherwise 0. - */ -static int edgetpu_thermal_kci_if_powered(struct edgetpu_dev *etdev, enum edgetpu_pwr_state state) -{ - int ret = 0; - - if (edgetpu_pm_get_if_powered(etdev->pm)) { - ret = edgetpu_kci_notify_throttling(etdev, state); - if (ret) - etdev_err_ratelimited(etdev, - "Failed to notify FW about power state %u, error:%d", - state, ret); - edgetpu_pm_put(etdev->pm); - } - return ret; -} - static int edgetpu_get_max_state(struct thermal_cooling_device *cdev, unsigned long *state) { struct edgetpu_thermal *thermal = cdev->devdata; @@ -71,7 +51,7 @@ static int edgetpu_set_thermal_policy(struct edgetpu_dev *etdev, unsigned long p if (edgetpu_is_powered(etdev)) edgetpu_kci_block_bus_speed_control(etdev, true); - ret = edgetpu_soc_pm_set_policy(pwr_state); + ret = edgetpu_thermal_kci_if_powered(etdev, pwr_state); if (edgetpu_is_powered(etdev)) edgetpu_kci_block_bus_speed_control(etdev, false); @@ -140,7 +120,7 @@ static int edgetpu_get_cur_state(struct thermal_cooling_device *cdev, unsigned l dev_warn(cooling->dev, "Unknown cooling state: %lu, resetting\n", *state); mutex_lock(&cooling->lock); - ret = edgetpu_soc_pm_set_policy(TPU_ACTIVE_NOM); + ret = edgetpu_thermal_kci_if_powered(cooling->etdev, TPU_ACTIVE_NOM); if (ret) { dev_err(cooling->dev, "error setting tpu policy: %d\n", ret); mutex_unlock(&cooling->lock); @@ -443,7 +423,11 @@ int edgetpu_thermal_resume(struct device *dev) if (IS_ERR(cooling)) return PTR_ERR(cooling); mutex_lock(&cooling->lock); - ret = edgetpu_thermal_kci_if_powered(etdev, state_pwr_map[0].state); + + if (cooling->cooling_state >= cooling->tpu_num_states) + cooling->cooling_state = 0; + + ret = edgetpu_thermal_kci_if_powered(etdev, state_pwr_map[cooling->cooling_state].state); /* * Unlike edgetpu_thermal_suspend(), only set the device is resumed if the FW handled the * KCI request. @@ -453,3 +437,18 @@ int edgetpu_thermal_resume(struct device *dev) mutex_unlock(&cooling->lock); return ret; } + +int edgetpu_thermal_kci_if_powered(struct edgetpu_dev *etdev, u32 state) +{ + int ret = 0; + + if (edgetpu_pm_get_if_powered(etdev->pm)) { + ret = edgetpu_kci_notify_throttling(etdev, state); + if (ret) + etdev_err_ratelimited(etdev, + "Failed to notify FW about power state %u, error:%d", + state, ret); + edgetpu_pm_put(etdev->pm); + } + return ret; +} |