summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJone Chou <jonechou@google.com>2021-01-28 20:40:33 +0800
committerJone Chou <jonechou@google.com>2021-01-29 16:42:05 +0800
commit9f9fe69619f7bc1da514982ce49d3b35da432563 (patch)
treedc9b182f6522295d4bec54a08efd983b9e4b9b6e
parentec3b7dd30ad9eaee7b145115341506b43879e0f2 (diff)
downloadreset-9f9fe69619f7bc1da514982ce49d3b35da432563.tar.gz
power: reset: exynos-reboot: fix warning message
determine rsbm_supported early to avoid bms i2c access in restart flow. warning message as below: - [ 67.646691][ T1] No atomic I2C transfer handler for 'i2c-5' Bug: 178541305 Bug: 178609337 Bug: 178741285 Signed-off-by: Jone Chou <jonechou@google.com> Change-Id: I42e116130460e8db2c91a3dbc8a5f06ced369310
-rw-r--r--exynos-reboot.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/exynos-reboot.c b/exynos-reboot.c
index 58842d0..310c052 100644
--- a/exynos-reboot.c
+++ b/exynos-reboot.c
@@ -38,6 +38,7 @@ static u32 cold_reboot_offset, cold_reboot_trigger;
static u32 reboot_cmd_offset;
static u32 shutdown_offset, shutdown_trigger;
static phys_addr_t pmu_alive_base;
+static bool rsbm_supported;
static void exynos_power_off(void)
{
@@ -104,14 +105,6 @@ static void exynos_power_off(void)
#define REBOOT_MODE_FACTORY (0xFD)
#define REBOOT_MODE_RECOVERY (0xFF)
-static bool target_bms_rsbm_supported(void)
-{
- u32 data;
- int ret = gbms_storage_read(GBMS_TAG_RSBM, &data, sizeof(data));
-
- return (ret != -ENOENT);
-}
-
static void exynos_reboot_mode_set(u32 val)
{
int ret;
@@ -126,7 +119,7 @@ static void exynos_reboot_mode_set(u32 val)
regmap_write(pmureg, reboot_cmd_offset, val);
}
- if (s2mpg10_get_rev_id() > S2MPG10_EVT0 && target_bms_rsbm_supported()) {
+ if (s2mpg10_get_rev_id() > S2MPG10_EVT0 && rsbm_supported) {
reboot_mode = val | BMS_RSBM_VALID;
ret = gbms_storage_write(GBMS_TAG_RSBM, &reboot_mode, sizeof(reboot_mode));
if (ret < 0)
@@ -158,6 +151,16 @@ static void exynos_reboot_parse(const char *cmd)
static int exynos_reboot_handler(struct notifier_block *nb,
unsigned long mode, void *cmd)
{
+ u32 data;
+ int ret;
+
+ ret = gbms_storage_read(GBMS_TAG_RSBM, &data, sizeof(data));
+ if (ret < 0)
+ pr_err("%s(): failed to read gbms storage: %d(%d)\n", __func__,
+ GBMS_TAG_RSBM, ret);
+
+ rsbm_supported = ret != -ENOENT;
+
exynos_reboot_parse(cmd);
return NOTIFY_DONE;
@@ -179,7 +182,7 @@ static int exynos_restart_handler(struct notifier_block *this, unsigned long mod
pr_emerg("%s: Exynos SoC reset right now\n", __func__);
if (s2mpg10_get_rev_id() == S2MPG10_EVT0 ||
- !target_bms_rsbm_supported() ||
+ !rsbm_supported ||
dbg_snapshot_get_panic_status()) {
ret = set_priv_reg(pmu_alive_base + warm_reboot_offset, warm_reboot_trigger);