summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenny Ho <hsiufangho@google.com>2023-03-24 12:34:23 +0800
committerTreeHugger Robot <treehugger-gerrit@google.com>2023-03-24 21:42:10 +0000
commit1cf4358ae03f755700eeda342ffce68c6c9878ab (patch)
tree675d10844153fc4c6cb5cf579b5b7c64d144fef3
parentae3657e0ab9c65b577fd6cdb9e804dcabb0c43eb (diff)
downloadbms-android-gs-raviole-5.10-android13-qpr3.tar.gz
Add more conditions to check for plausible data. Prevent loading incorrect values from causing inaccurate calculation results Bug: 275009537 Change-Id: I02a656a1ace1f582cac9295651e7aec7f37f5df8 Signed-off-by: Jenny Ho <hsiufangho@google.com>
-rw-r--r--max_m5.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/max_m5.c b/max_m5.c
index 02d8279..4532e8c 100644
--- a/max_m5.c
+++ b/max_m5.c
@@ -591,9 +591,13 @@ static bool memtst(void *buf, char c, size_t count)
return same;
}
-static int max_m5_check_state_data(struct model_state_save *state)
+/* TODO: make it adjustable, set 10% tolerance here */
+#define MAX_M5_CAP_MAX_RATIO 110
+static int max_m5_check_state_data(struct model_state_save *state,
+ struct max_m5_custom_parameters *ini)
{
bool bad_residual, empty;
+ int max_cap = ini->designcap * MAX_M5_CAP_MAX_RATIO / 100;
empty = memtst(state, 0xff, sizeof(*state));
if (empty)
@@ -613,6 +617,12 @@ static int max_m5_check_state_data(struct model_state_save *state)
if (bad_residual)
return -EINVAL;
+ if (state->fullcaprep > max_cap)
+ return -ERANGE;
+
+ if (state->fullcapnom > max_cap)
+ return -ERANGE;
+
return 0;
}
@@ -661,7 +671,7 @@ int max_m5_load_state_data(struct max_m5_data *m5_data)
return ret;
}
- ret = max_m5_check_state_data(&m5_data->model_save);
+ ret = max_m5_check_state_data(&m5_data->model_save, cp);
if (ret < 0)
return ret;