diff options
author | Jone Chou <jonechou@google.com> | 2021-01-28 20:40:33 +0800 |
---|---|---|
committer | Jone Chou <jonechou@google.com> | 2021-01-29 16:42:05 +0800 |
commit | 9f9fe69619f7bc1da514982ce49d3b35da432563 (patch) | |
tree | dc9b182f6522295d4bec54a08efd983b9e4b9b6e | |
parent | ec3b7dd30ad9eaee7b145115341506b43879e0f2 (diff) | |
download | reset-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.c | 23 |
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); |