summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Wilson <evan@oliodevices.com>2016-04-20 11:54:30 -0700
committerEvan Wilson <evan@oliodevices.com>2016-04-20 11:54:30 -0700
commit96bc9e68d7c5a767e8867bbca690e3ef5b0ad69f (patch)
tree2ea99e35b54ab23f6db5d0672477ca598813c082
parent3ac52dc5b41a29ca68713ff15655836299152f5a (diff)
downloadolio-linux-3.10-evan-suspend-again.tar.xz
olio-linux-3.10-evan-suspend-again.zip
Changes to debug suspend_again crashesevan-suspend-again
Change-Id: I2df8d17791bba5205ca1e50d37dd44a8a3b92bd9
-rw-r--r--arch/arm/configs/omap3_h1_defconfig7
-rw-r--r--drivers/base/power/main.c1
-rw-r--r--drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c10
-rw-r--r--kernel/printk.c9
-rw-r--r--kernel/time/timekeeping.c5
5 files changed, 23 insertions, 9 deletions
diff --git a/arch/arm/configs/omap3_h1_defconfig b/arch/arm/configs/omap3_h1_defconfig
index 3a29d2c74d3..13f6c674f17 100644
--- a/arch/arm/configs/omap3_h1_defconfig
+++ b/arch/arm/configs/omap3_h1_defconfig
@@ -92,7 +92,7 @@ CONFIG_PREEMPT_RCU=y
# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
-CONFIG_LOG_BUF_SHIFT=17
+CONFIG_LOG_BUF_SHIFT=20
# CONFIG_CGROUPS is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_NAMESPACES is not set
@@ -548,6 +548,7 @@ CONFIG_PM_CLK=y
CONFIG_CPU_PM=y
CONFIG_SUSPEND_TIME=y
# CONFIG_HAS_AMBIENTMODE is not set
+CONFIG_PM_SUSPEND_AGAIN_OPS=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARM_CPU_SUSPEND=y
CONFIG_NET=y
@@ -1851,11 +1852,9 @@ CONFIG_SND_SOC_DMAENGINE_PCM=y
# CONFIG_SND_DESIGNWARE_I2S is not set
CONFIG_SND_OMAP_SOC=y
# CONFIG_SND_OMAP_SOC_C55 is not set
-CONFIG_SND_OMAP_SOC_MCBSP=y
-CONFIG_SND_OMAP_SOC_OMAP3_H1=y
+# CONFIG_SND_OMAP_SOC_OMAP3_H1 is not set
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
-CONFIG_SND_SOC_DMIC=y
# CONFIG_SND_SIMPLE_CARD is not set
# CONFIG_SOUND_PRIME is not set
diff --git a/drivers/base/power/main.c b/drivers/base/power/main.c
index bf6d932d996..8dec3728b25 100644
--- a/drivers/base/power/main.c
+++ b/drivers/base/power/main.c
@@ -343,6 +343,7 @@ static char *pm_verb(int event)
static void pm_dev_dbg(struct device *dev, pm_message_t state, char *info)
{
+ return;
dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event),
((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
", may wakeup" : "");
diff --git a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
index 08038b4821e..d54279219e6 100644
--- a/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
+++ b/drivers/iio/imu/st_lsm6ds3/st_lsm6ds3_trigger.c
@@ -59,10 +59,10 @@ irqreturn_t st_lsm6ds3_save_timestamp(int irq, void *private)
cdata->irq_timestamp = ts.tv_sec;
if(cdata->first_irq_from_resume && cdata->last_wakeup_source == LSM6DS3_WAKEUP_OTHER) {
- dev_info(cdata->dev, "No valid wakeup. Ignoring IRQ.");
+ //dev_info(cdata->dev, "No valid wakeup. Ignoring IRQ.");
cdata->first_irq_from_resume = 0;
} else {
- dev_info(cdata->dev, "IRQ handled. Scheduling work.");
+ //dev_info(cdata->dev, "IRQ handled. Scheduling work.");
queue_work(st_lsm6ds3_wq, &cdata->data_work);
disable_irq_nosync(irq);
}
@@ -206,9 +206,9 @@ static void st_lsm6ds3_irq_management(struct work_struct *data_work)
cdata->tf->read(cdata, ST_LSM6DS3_FIFO_DATA_AVL_ADDR, 1,
&src_fifo, true);
- dev_info(cdata->dev, "IRQ scheduled work running.");
- dev_info(cdata->dev, "ST irq start: src_value: 0x%x, 6d: 0x%x, tap: 0x%x, wakeup: 0x%x",
- src_value, d6d_src_reg, tap_src_reg, wake_up_src_reg);
+ //dev_info(cdata->dev, "IRQ scheduled work running.");
+ //dev_info(cdata->dev, "ST irq start: src_value: 0x%x, 6d: 0x%x, tap: 0x%x, wakeup: 0x%x",
+// src_value, d6d_src_reg, tap_src_reg, wake_up_src_reg);
if(d6d_src_reg & ST_LSM6DS3_6D_SRC_DETECTED_MASK){
#ifdef WAKE_STATS_DEBUG_INFO
diff --git a/kernel/printk.c b/kernel/printk.c
index 1b76b38986b..e97b94be00d 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -259,6 +259,11 @@ static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN);
static char *log_buf = __log_buf;
static u32 log_buf_len = __LOG_BUF_LEN;
+
+static char __olio_log_buf[__LOG_BUF_LEN*4] __aligned(LOG_ALIGN);
+static char *olio_log_buf = __olio_log_buf;
+static u32 olio_log_buf_len = __LOG_BUF_LEN*4;
+
/* cpu currently holding logbuf_lock */
static volatile unsigned int logbuf_cpu = UINT_MAX;
@@ -1585,6 +1590,10 @@ asmlinkage int vprintk_emit(int facility, int level,
#ifdef CONFIG_EARLY_PRINTK_DIRECT
printascii(text);
#endif
+ if(olio_log_buf + text_len - __olio_log_buf < __LOG_BUF_LEN){
+ memcpy(olio_log_buf, text, text_len);
+ olio_log_buf += text_len;
+ }
if (level == -1)
level = default_message_loglevel;
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c
index baeeb5c87cf..3644ba5c7d9 100644
--- a/kernel/time/timekeeping.c
+++ b/kernel/time/timekeeping.c
@@ -904,6 +904,7 @@ static void timekeeping_resume(void)
raw_spin_lock_irqsave(&timekeeper_lock, flags);
write_seqcount_begin(&timekeeper_seq);
+ printk(KERN_DEBUG "TIME: calc suspend time.");
/*
* After system resumes, we need to calculate the suspended time and
@@ -920,6 +921,7 @@ static void timekeeping_resume(void)
cycle_now = clock->read(clock);
if ((clock->flags & CLOCK_SOURCE_SUSPEND_NONSTOP) &&
cycle_now > clock->cycle_last) {
+ printk(KERN_DEBUG "TIME: Use nonstop clk source.");
u64 num, max = ULLONG_MAX;
u32 mult = clock->mult;
u32 shift = clock->shift;
@@ -943,6 +945,7 @@ static void timekeeping_resume(void)
ts_delta = ns_to_timespec(nsec);
suspendtime_found = true;
} else if (timespec_compare(&ts_new, &timekeeping_suspend_time) > 0) {
+ printk(KERN_DEBUG "TIME: Using other time source.");
ts_delta = timespec_sub(ts_new, timekeeping_suspend_time);
suspendtime_found = true;
}
@@ -950,6 +953,7 @@ static void timekeeping_resume(void)
if (suspendtime_found)
__timekeeping_inject_sleeptime(tk, &ts_delta);
+ printk(KERN_DEBUG "TIME: Rebase the last cycle value");
/* Re-base the last cycle value */
tk->cycle_last = clock->cycle_last = cycle_now;
tk->ntp_error = 0;
@@ -958,6 +962,7 @@ static void timekeeping_resume(void)
write_seqcount_end(&timekeeper_seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
+ printk(KERN_DEBUG "TIME: Touch softlockup watchdog");
touch_softlockup_watchdog();
clockevents_notify(CLOCK_EVT_NOTIFY_RESUME, NULL);