fiq debugger: driver update
authorHuibin Hong <huibin.hong@rock-chips.com>
Wed, 16 Sep 2015 11:28:21 +0000 (19:28 +0800)
committerHuibin Hong <huibin.hong@rock-chips.com>
Wed, 16 Sep 2015 11:45:54 +0000 (19:45 +0800)
1. Change fiq debugger trigger mode, enter “fiq” instead of
F5 with SecureCRT

Change-Id: I3b52ad435af3211675a8416c6e016147886def8d
Signed-off-by: Huibin Hong <huibin.hong@rock-chips.com>
arch/arm/mach-rockchip/rk_fiq_debugger.c

index 56e4d7471b3287e5c1acf086adb838b6b11f6249..105a9a5f4f465b305b89a7da29684b076a6e7084 100755 (executable)
@@ -126,6 +126,9 @@ static int debug_getc(struct platform_device *pdev)
 {
        unsigned int lsr;
        struct rk_fiq_debugger *t;
+       unsigned int temp;
+       static unsigned int n;
+       static char buf[32];
 
        t = container_of(dev_get_platdata(&pdev->dev), typeof(*t), pdata);
 
@@ -133,11 +136,23 @@ static int debug_getc(struct platform_device *pdev)
 
        if (lsr & UART_LSR_BI || t->break_seen) {
                t->break_seen = false;
-               return FIQ_DEBUGGER_BREAK;
+               return FIQ_DEBUGGER_NO_CHAR;
        }
 
-       if (lsr & UART_LSR_DR)
-               return rk_fiq_read(t, UART_RX);
+       if (lsr & UART_LSR_DR) {
+               temp = rk_fiq_read(t, UART_RX);
+               buf[n & 0x1f] = temp;
+               n++;
+               if (temp == 'q' && n > 2) {
+                       if ((buf[(n - 2) & 0x1f] == 'i') &&
+                           (buf[(n - 3) & 0x1f] == 'f'))
+                               return FIQ_DEBUGGER_BREAK;
+                       else
+                               return temp;
+               } else {
+                       return temp;
+               }
+       }
 
        return FIQ_DEBUGGER_NO_CHAR;
 }