diff --git a/drivers/soc/qcom/lge/lge_handle_panic.c b/drivers/soc/qcom/lge/lge_handle_panic.c
index e2d1d43d229a8580c7710fd9d02cfbe835cf7070..75958e7f4d8e336b05c60b0942c6a75d1a7ad3fc 100644
--- a/drivers/soc/qcom/lge/lge_handle_panic.c
+++ b/drivers/soc/qcom/lge/lge_handle_panic.c
@@ -402,7 +402,7 @@ extern void __iomem *wdt_timer_get_timer0_base(void);
 
 static int gen_wdt_bark(const char *val, struct kernel_param *kp)
 {
-	void __iomem *msm_tmr0_base;
+	/*void __iomem *msm_tmr0_base;
 	msm_tmr0_base = wdt_timer_get_timer0_base();
 
 	pr_info("%s\n", __func__);
@@ -416,14 +416,15 @@ static int gen_wdt_bark(const char *val, struct kernel_param *kp)
 
 	pr_err("%s failed\n", __func__);
 
-	return -EIO;
+	return -EIO;*/
+	return 0;
 }
 module_param_call(gen_wdt_bark, gen_wdt_bark, param_get_bool,
 		&dummy_arg, S_IWUSR | S_IRUGO);
 
 static int gen_wdt_bite(const char *val, struct kernel_param *kp)
 {
-	void __iomem *msm_tmr0_base;
+	/*void __iomem *msm_tmr0_base;
 	msm_tmr0_base = wdt_timer_get_timer0_base();
 
 	pr_info("%s\n", __func__);
@@ -437,7 +438,8 @@ static int gen_wdt_bite(const char *val, struct kernel_param *kp)
 
 	pr_err("%s failed\n", __func__);
 
-	return -EIO;
+	return -EIO;*/
+	return 0;
 }
 module_param_call(gen_wdt_bite, gen_wdt_bite, param_get_bool,
 		&dummy_arg, S_IWUSR | S_IRUGO);
@@ -583,7 +585,7 @@ module_param_call(gen_unknown_reset, gen_unknown_reset, param_get_bool,
 
 void lge_disable_watchdog(void)
 {
-	static int once = 1;
+	/*static int once = 1;
 	void __iomem *msm_tmr0_base;
 
 	if (once > 1)
@@ -597,7 +599,7 @@ void lge_disable_watchdog(void)
 	mb();
 	once++;
 
-	pr_info("%s\n", __func__);
+	pr_info("%s\n", __func__);*/
 }
 
 void lge_panic_handler_fb_free_page(unsigned long mem_addr, unsigned long size)
diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c
index 10020547c60b5735d4cbf667956c911aa06a1030..1c8cf79165f2e5c86314b0107ebd597064003687 100644
--- a/drivers/tty/serial/kgdboc.c
+++ b/drivers/tty/serial/kgdboc.c
@@ -29,6 +29,7 @@ static struct kgdb_io		kgdboc_io_ops;
 static int configured		= -1;
 
 static char config[MAX_CONFIG_LEN];
+static int config_retry_time = 0;
 static struct kparam_string kps = {
 	.string			= config,
 	.maxlen			= MAX_CONFIG_LEN,
@@ -153,6 +154,28 @@ static void cleanup_kgdboc(void)
 		kgdb_unregister_io_module(&kgdboc_io_ops);
 }
 
+static int kgdbretry_option_setup(char *opt)
+{
+	if (strlen(opt) > MAX_CONFIG_LEN) {
+		printk(KERN_ERR "kgdbretry: config string too long\n");
+		return -ENOSPC;
+	}
+	config_retry_time = simple_strtoul(opt, NULL, 10);
+
+	return 0;
+}
+
+__setup("kgdbretry=", kgdbretry_option_setup);
+
+static int configure_kgdboc(void);
+static void ttycheck_func(struct work_struct *work)
+{
+	config_retry_time = 0;
+	configure_kgdboc();
+}
+
+static DECLARE_DELAYED_WORK(ttycheck_work, ttycheck_func);
+
 static int configure_kgdboc(void)
 {
 	struct tty_driver *p;
@@ -179,8 +202,15 @@ static int configure_kgdboc(void)
 		goto do_register;
 
 	p = tty_find_polling_driver(cptr, &tty_line);
-	if (!p)
+	if (!p) {
+		printk(KERN_INFO "kgdb will retry in %d secs\n", config_retry_time);
+		if (config_retry_time > 0) {
+			INIT_DELAYED_WORK(&ttycheck_work, ttycheck_func);
+			schedule_delayed_work(&ttycheck_work, config_retry_time * HZ);
+			return -ENODEV;
+		}
 		goto noconfig;
+	}
 
 	cons = console_drivers;
 	while (cons) {
@@ -212,6 +242,7 @@ do_register:
 nmi_con_failed:
 	kgdb_unregister_io_module(&kgdboc_io_ops);
 noconfig:
+	printk(KERN_ERR "kgdb failed to initialise\n");
 	kgdboc_unregister_kbd();
 	config[0] = 0;
 	configured = 0;
@@ -335,5 +366,6 @@ module_init(init_kgdboc);
 module_exit(cleanup_kgdboc);
 module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644);
 MODULE_PARM_DESC(kgdboc, "<serial_device>[,baud]");
+MODULE_PARM_DESC(kgdbretry, "<delay in seconds> before retrying tty");
 MODULE_DESCRIPTION("KGDB Console TTY Driver");
 MODULE_LICENSE("GPL");
diff --git a/drivers/tty/serial/msm_serial_hs_lite.c b/drivers/tty/serial/msm_serial_hs_lite.c
index f570cff5a0bcca6eb870bd654d5065f4f623b604..de8fd06c68729a4ec613e6a0aa4bfbe0d2fb08a0 100644
--- a/drivers/tty/serial/msm_serial_hs_lite.c
+++ b/drivers/tty/serial/msm_serial_hs_lite.c
@@ -821,6 +821,9 @@ static void msm_hsl_reset(struct uart_port *port)
 	msm_hsl_write(port, RESET_BREAK_INT, regmap[vid][UARTDM_CR]);
 	msm_hsl_write(port, RESET_CTS, regmap[vid][UARTDM_CR]);
 	msm_hsl_write(port, RFR_LOW, regmap[vid][UARTDM_CR]);
+
+	/* Disable DM modes */
+	msm_hsl_write(port, 0, regmap[vid][UARTDM_DMEN]);
 }
 
 static unsigned int msm_hsl_get_mctrl(struct uart_port *port)
@@ -1372,7 +1375,7 @@ static int msm_poll_init(struct uart_port *port)
 
 	/* Enable single character mode on RX FIFO */
 	/* A later patch from David Boyd suggests this causes problems... */
-	/* msm_hsl_write(port, UARTDM_DMEN_RX_SC_ENABLE, regmap[vid][UARTDM_DMEN]); */
+	//msm_hsl_write(port, UARTDM_DMEN_RX_SC_ENABLE, regmap[vid][UARTDM_DMEN]);
 
 	return 0;
 }
@@ -1465,8 +1468,9 @@ static void msm_poll_put_char(struct uart_port *port, unsigned char c)
 	imr = msm_hsl_read(port, regmap[vid][UARTDM_IMR]);
 	msm_hsl_write(port, 0, regmap[vid][UARTDM_IMR]);
 
-	/*if (msm_port->is_uartdm)*/
-		reset_dm_count(port, 1);
+	//if (UART_TO_MSM(port)->is_uartdm)
+	//	reset_dm_count(port, 1);
+	reset_dm_count(port, 1);
 
 	/* Wait until FIFO is empty */
 	while (!(msm_hsl_read(port, regmap[vid][UARTDM_SR]) & UARTDM_SR_TXRDY_BMSK))
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index ba0266c65054d229d05037140dcb29b63fd5c144..ccfe1e9c9eeb32e7ab33a1e83ebc4ebe580b7f29 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -371,6 +371,8 @@ struct tty_driver *tty_find_polling_driver(char *name, int *line)
 	mutex_lock(&tty_mutex);
 	/* Search through the tty devices to look for a match */
 	list_for_each_entry(p, &tty_drivers, tty_drivers) {
+		pr_info("name: %s p->name: %s p->driver_name: %s\n", name, p->name, p->driver_name);
+		
 		if (strncmp(name, p->name, len) != 0)
 			continue;
 		stp = str;
diff --git a/kernel/debug/debug_core.c b/kernel/debug/debug_core.c
index d9e098df2ef31cb65087ce26c28d5e1e28b73e9b..cff5d31a9862c570331282c6e23000d40f9a92be 100644
--- a/kernel/debug/debug_core.c
+++ b/kernel/debug/debug_core.c
@@ -1020,11 +1020,15 @@ int dbg_io_get_char(void)
  */
 void kgdb_breakpoint(void)
 {
+	printk("Enter KGDB breakpoint.\n");
+
 	atomic_inc(&kgdb_setting_breakpoint);
 	wmb(); /* Sync point before breakpoint */
 	arch_kgdb_breakpoint();
 	wmb(); /* Sync point after breakpoint */
 	atomic_dec(&kgdb_setting_breakpoint);
+
+	printk("Exit KGDB breakpoint.\n");
 }
 EXPORT_SYMBOL_GPL(kgdb_breakpoint);