summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShamile Khan <shamile.khan@intel.com>2015-11-24 13:27:01 -0800
committerchrome-bot <chrome-bot@chromium.org>2015-12-01 18:52:53 -0800
commitf748a7fbd5c72c659b60d772db1c3d398a746455 (patch)
tree92bc49f36b53b26ac1a91cec920200334b4c994c
parent9167ce023260fa089e9aa741eb36902484c33154 (diff)
downloadchrome-ec-f748a7fbd5c72c659b60d772db1c3d398a746455.tar.gz
common: adc/i2c: Mark task_waiting volatile
When Link Time Optimization is turned on, functions that set task_waiting multiple times have one of the sets removed by the linker leading to undesired results. Marking task_waiting volatile alleviates this issue. BUG=chrome-os-partner:46063 TEST=Manually tested on Kunimitsu. Console command adc shows correct value of approx 20000 mV for VBUS. BRANCH=none Change-Id: I85a6e5c9688ae72c45d90fb58296f94b74a301aa Signed-off-by: Shamile Khan <shamile.khan@intel.com> Reviewed-on: https://chromium-review.googlesource.com/314233 Reviewed-by: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--board/kunimitsu/board.h4
-rw-r--r--chip/it83xx/i2c.c2
-rw-r--r--chip/lm4/adc.c2
-rw-r--r--chip/lm4/i2c.c2
-rw-r--r--chip/mec1322/adc.c6
-rw-r--r--chip/mec1322/i2c.c2
-rw-r--r--chip/npcx/adc.c2
7 files changed, 9 insertions, 11 deletions
diff --git a/board/kunimitsu/board.h b/board/kunimitsu/board.h
index b32b851d2f..dd50bcb86b 100644
--- a/board/kunimitsu/board.h
+++ b/board/kunimitsu/board.h
@@ -52,11 +52,7 @@
#define CONFIG_LED_COMMON
#define CONFIG_LID_SWITCH
#define CONFIG_LOW_POWER_IDLE
-/*
- * TODO: Issue is seen with LTO feature, further debug is needed.
- *
#define CONFIG_LTO
- */
#define CONFIG_POWER_BUTTON
#define CONFIG_POWER_BUTTON_X86
#define CONFIG_POWER_COMMON
diff --git a/chip/it83xx/i2c.c b/chip/it83xx/i2c.c
index d2aac92604..bc10a5970f 100644
--- a/chip/it83xx/i2c.c
+++ b/chip/it83xx/i2c.c
@@ -137,7 +137,7 @@ struct i2c_port_data {
enum i2c_ch_status i2ccs;
/* Task waiting on port, or TASK_ID_INVALID if none. */
- int task_waiting;
+ volatile int task_waiting;
};
static struct i2c_port_data pdata[I2C_PORT_COUNT];
diff --git a/chip/lm4/adc.c b/chip/lm4/adc.c
index 69338c61b0..40d5b3770d 100644
--- a/chip/lm4/adc.c
+++ b/chip/lm4/adc.c
@@ -21,7 +21,7 @@
/* Maximum time we allow for an ADC conversion */
#define ADC_TIMEOUT_US SECOND
-static task_id_t task_waiting_on_ss[LM4_ADC_SEQ_COUNT];
+static volatile task_id_t task_waiting_on_ss[LM4_ADC_SEQ_COUNT];
static void configure_gpio(void)
{
diff --git a/chip/lm4/i2c.c b/chip/lm4/i2c.c
index 9f3db7426f..6f3efb700e 100644
--- a/chip/lm4/i2c.c
+++ b/chip/lm4/i2c.c
@@ -65,7 +65,7 @@ struct i2c_port_data {
uint32_t timeout_us; /* Transaction timeout, or 0 to use default */
/* Task waiting on port, or TASK_ID_INVALID if none. */
- int task_waiting;
+ volatile int task_waiting;
};
static struct i2c_port_data pdata[I2C_PORT_COUNT];
diff --git a/chip/mec1322/adc.c b/chip/mec1322/adc.c
index 037f270428..841c3c7e32 100644
--- a/chip/mec1322/adc.c
+++ b/chip/mec1322/adc.c
@@ -21,7 +21,7 @@
struct mutex adc_lock;
-static task_id_t task_waiting;
+static volatile task_id_t task_waiting;
static int start_single_and_wait(int timeout)
{
@@ -69,8 +69,10 @@ int adc_read_all_channels(int *data)
for (i = 0; i < ADC_CH_COUNT; ++i)
MEC1322_ADC_SINGLE |= 1 << adc_channels[i].channel;
- if (!start_single_and_wait(ADC_SINGLE_READ_TIME * ADC_CH_COUNT))
+ if (!start_single_and_wait(ADC_SINGLE_READ_TIME * ADC_CH_COUNT)) {
+ ret = EC_ERROR_TIMEOUT;
goto exit_all_channels;
+ }
for (i = 0; i < ADC_CH_COUNT; ++i) {
adc = adc_channels + i;
diff --git a/chip/mec1322/i2c.c b/chip/mec1322/i2c.c
index a800e9e780..5a0cc850cb 100644
--- a/chip/mec1322/i2c.c
+++ b/chip/mec1322/i2c.c
@@ -55,7 +55,7 @@ struct {
/* Transaction timeout, or 0 to use default. */
uint32_t timeout_us;
/* Task waiting on port, or TASK_ID_INVALID if none. */
- task_id_t task_waiting;
+ volatile task_id_t task_waiting;
} cdata[I2C_CONTROLLER_COUNT];
static void configure_controller_speed(int controller, int kbps)
diff --git a/chip/npcx/adc.c b/chip/npcx/adc.c
index ba80162f45..24a866c2a9 100644
--- a/chip/npcx/adc.c
+++ b/chip/npcx/adc.c
@@ -34,7 +34,7 @@ enum npcx_adc_conversion_mode {
};
/* Global variables */
-static task_id_t task_waiting;
+static volatile task_id_t task_waiting;
/**
* Preset ADC operation clock.