#2257: gsm0710muxd: "Modem does not respond to AT commands" -----------------------------+---------------------------------------------- Reporter: lindi | Owner: openmoko-kernel Type: defect | Status: new Priority: high | Milestone: stable-kernel-2009.1 Component: System Software | Version: unspecified Severity: major | Keywords: Haspatch: 0 | Blockedby: Estimated: | Patchreview: Blocking: | Reproducible: sometimes -----------------------------+----------------------------------------------
Comment(by arhuaco): I tested with your setup. The shr-testing kernel I flashed is recent enough. - flash http://build.shr-project.org/shr-testing/images/om-gta02/shr-lite- image-om-gta02.jffs2 - flash http://build.shr-project.org/shr-testing/images/om- gta02/uImage-2.6.29-oe10+gitr81c61a7d1abb03aecd13f5395aba355e996a1641-r3.4 -om-gta02.bin - boot - install http://www.opkg.org/packages/socat_1.3.2.1-r1_armv4t.ipk - reboot r...@om-gta02 ~ $ fuser /dev/ttySAC0 1540 r...@om-gta02 ~ $ kill -9 1540 r...@om-gta02 ~ $ fuser /dev/ttySAC0 You might want to move /usr/sbin/gsm0710muxd out of the way while you make this test because it can be started while you are testing (it happened to me). r...@om-gta02 ~ $ cd /sys/class/i2c-adapter/i2c-0/0-0073/neo1973-pm- gsm.0/ ; echo 0 > power_on ; sleep 3 ; echo 1 > power_on ; echo 1 > reset ; socat - file:/dev/ttySAC0,crtscts,crnl,b115200 AT-Command Interpreter ready (Last command worked in the same way 5 times). Relevant kernel messages after you execute the command (once): modem wakeup interrupt rxerr: port=0 ch=0x00, rxs=0x0000000c I tried latest andy-tracking and I think the later rxerr message is OK when you start using the port. I enabled dbg in samsung.h (and a few other messages, see diffs at the end) and I got this: [21474677.270000] modem wakeup interrupt [21474834.305000] dbg:s3c24xx_serial_stop_rx: port=c04a06fc [ 32.630000] modem wakeup interrupt [ 34.010000] dbg:s3c24xx_serial_startup: port=50000000 (f5000000,c04a09b4) [ 34.015000] rxerr: port=0 ch=0x00, rxs=0x0000000c [ 34.015000] dbg:break! [ 34.015000] dbg:S3C2410_UERSTAT_FRAME [ 34.015000] dbg:flag=0 [ 34.020000] dbg:requesting tx irq... [ 34.025000] dbg:s3c24xx_serial_startup ok [ 34.030000] dbg:config: 8bits/char [ 34.035000] dbg:setting ulcon to 00000003, brddiv to 26, udivslot 00000000 [ 34.035000] dbg:uart: ulcon = 0x00000003, ucon = 0x000003c5, ufcon = 0x00000011 Could you repeat the same test? (without the kernel modifications), just make sure that /usr/sbin/gsm0710muxd doesn't interrupt your tests. Now I guess even when this is working we might get interruptions once in a while and that is the problem that was originally reported. gsm0710muxd has a watchdog. I assume that if "echo 0 > power_on; sleep 3; echo 1 > power_on; echo 1 > reset" is working then the watchdog could do exactly the same? (It already resets the modem but there could be a timing issue, perhaps a longer delay is needed before the power_on?). --- a/drivers/serial/samsung.c +++ b/drivers/serial/samsung.c @@ -250,10 +250,14 @@ s3c24xx_serial_rx_chars(int irq, void *dev_id) goto ignore_char; } - if (uerstat & S3C2410_UERSTAT_FRAME) + if (uerstat & S3C2410_UERSTAT_FRAME) { + dbg("S3C2410_UERSTAT_FRAME\n"); port->icount.frame++; - if (uerstat & S3C2410_UERSTAT_OVERRUN) + } + if (uerstat & S3C2410_UERSTAT_OVERRUN) { + dbg("S3C2410_UERSTAT_OVERRUN\n"); port->icount.overrun++; + } uerstat &= port->read_status_mask; @@ -264,6 +268,7 @@ s3c24xx_serial_rx_chars(int irq, void *dev_id) else if (uerstat & (S3C2410_UERSTAT_FRAME | S3C2410_UERSTAT_OVERRUN)) flag = TTY_FRAME; + dbg("flag=%d\n", flag); } --- a/drivers/serial/samsung.h +++ b/drivers/serial/samsung.h @@ -98,10 +98,6 @@ console_initcall(s3c_serial_console_init) #define s3c24xx_console_init(drv, inf) extern void no_console(void) #endif -#ifdef CONFIG_SERIAL_SAMSUNG_DEBUG - -extern void printascii(const char *); - static void dbg(const char *fmt, ...) { va_list va; @@ -111,9 +107,5 @@ static void dbg(const char *fmt, ...) vsprintf(buff, fmt, va); va_end(va); - printascii(buff); + printk(KERN_ERR "dbg:%s", buff); } - -#else -#define dbg(x...) do { } while (0) -#endif -- Ticket URL: <https://docs.openmoko.org/trac/ticket/2257#comment:24> docs.openmoko.org <http://docs.openmoko.org/trac/> openmoko trac