From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tony Lindgren Subject: Re: [PATCH 6/6] tty: serial: Add 8250-core based omap driver Date: Thu, 10 Jul 2014 00:09:48 -0700 Message-ID: <20140710070948.GH28884@atomide.com> References: <1404928177-26554-1-git-send-email-bigeasy@linutronix.de> <1404928177-26554-7-git-send-email-bigeasy@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Return-path: Content-Disposition: inline In-Reply-To: <1404928177-26554-7-git-send-email-bigeasy@linutronix.de> Sender: linux-kernel-owner@vger.kernel.org To: Sebastian Andrzej Siewior Cc: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Felipe Balbi , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org List-Id: linux-serial@vger.kernel.org * Sebastian Andrzej Siewior [140709 10:52]: >=20 > v1=E2=80=A6v2: > - added runtime PM. Could somebody could plese double check > this? I seems to be enabled and nothing explodes. However > serial_omap_get_context_loss_count() & enable_wakeup() are > NULL pointer (in the omap-serial driver). So I am not sure how > this supposed to work :) > - added omap_8250_set_termios() You can test this pretty easily on beagleboard xm for example using v3.16-r4: 1. Compile the kernel using omap2plus_defconfig and enable your driver. USB EHCI needs to be disabled and OTG port should not have a USB cable connected. 2. Boot with init=3D/bin/sh to keep user space timers to minimum at least until you have verified to hit off-idle 3. Enable UART timeouts with something like this. You may need to update it for ttyS, I just changed ttyO to ttyS here: #!/bin/bash uarts=3D$(find /sys/class/tty/ttyS*/device/power/ -type d) for uart in $uarts; do echo 3000 > $uart/autosuspend_delay_ms done uarts=3D$(find /sys/class/tty/ttyS*/power/ -type d) for uart in $uarts; do echo enabled > $uart/wakeup echo auto > $uart/control done echo 1 > /sys/kernel/debug/pm_debug/enable_off_mode 4. Wait for UART to time out and verify you hit off-idle by looking at the debugfs entry: # cat /sys/kernel/debug/pm_debug/count ... core_pwrdm (ON),OFF:6,RET:0,INA:0,ON:7,RET-LOGIC-OFF:0,RET-MEMBANK1-= OFF:0,RET-MEMBANK2-OFF:0 ... =20 I just tried testing this, but did not get far on my omap3 evm: [ 5.445953] Unhandled fault: external abort on non-linefetch (0x1028= ) at 0xfb020000 [ 5.453674] Internal error: : 1028 [#1] SMP ARM [ 5.458221] Modules linked in: [ 5.461334] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.16.0-rc4-000= 06-gaab2c6a #98 [ 5.469024] task: ce058b00 ti: ce05a000 task.ti: ce05a000 [ 5.474456] PC is at mem32_serial_in+0xc/0x1c [ 5.478851] LR is at serial8250_do_startup+0xc8/0x89c [ 5.483917] pc : [] lr : [] psr: 60000113 [ 5.483917] sp : ce05bd10 ip : c0a0aba8 fp : ce275400 [ 5.495452] r10: 00000000 r9 : cda7a680 r8 : ce27568c [ 5.500701] r7 : ce275400 r6 : 00000000 r5 : ce280408 r4 : c10b62= 34 [ 5.507263] r3 : fb020000 r2 : 00000002 r1 : fb020000 r0 : c10b62= 34 [ 5.513854] Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Seg= ment kernel [ 5.521179] Control: 10c5387d Table: 80004019 DAC: 00000015 [ 5.526977] Process swapper/0 (pid: 1, stack limit =3D 0xce05a248) [ 5.532989] Stack: (0xce05bd10 to 0xce05c000) =2E.. [ 5.734771] [] (mem32_serial_in) from [] (serial= 8250_do_startup+0xc8/0x89c) [ 5.743530] [] (serial8250_do_startup) from [] (= uart_startup.part.3+0x7c/0x1dc) [ 5.752624] [] (uart_startup.part.3) from [] (ua= rt_open+0xe4/0x124) [ 5.760681] [] (uart_open) from [] (tty_open+0x1= 30/0x58c) [ 5.767852] [] (tty_open) from [] (chrdev_open+0= x9c/0x174) [ 5.775115] [] (chrdev_open) from [] (do_dentry_= open+0x1d0/0x310) [ 5.783020] [] (do_dentry_open) from [] (finish_= open+0x34/0x4c) [ 5.790710] [] (finish_open) from [] (do_last.is= ra.27+0x5a4/0xb98) [ 5.798675] [] (do_last.isra.27) from [] (path_o= penat+0xb4/0x5e4) [ 5.806549] [] (path_openat) from [] (do_filp_op= en+0x2c/0x80) [ 5.814086] [] (do_filp_open) from [] (do_sys_op= en+0x100/0x1d0) [ 5.821777] [] (do_sys_open) from [] (kernel_ini= t_freeable+0x124/0x1c8) [ 5.830200] [] (kernel_init_freeable) from [] (k= ernel_init+0x8/0xe4) [ 5.838348] [] (kernel_init) from [] (ret_from_f= ork+0x14/0x2c) Sounds like the clocks are not enabled properly? Regards, Tony