[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2] xen/serial: setup UART idle mode for OMAP



On Tue, Dec 9, 2014 at 4:47 PM, Ian Campbell <Ian.Campbell@xxxxxxxxxx> wrote:
> On Mon, 2014-12-08 at 15:51 +0200, Oleksandr Dmytryshyn wrote:
>> UART is not able to receive bytes when idle mode is not
>> configured properly. When we use Xen with old Linux
>> Kernel (for example 3.8) this kernel configures hwmods
>> for all devices even if the device tree nodes for those
>> devices is absent in device tree. Thus UART idle mode
>> is configured too. The fake node for the UART should
>> be added to the device tree because the MMIO range
>> is not mapped by Xen. So UART works normally in this
>> case. But new Linux Kernel (3.12 and upper) doesn't
>> configure idle mode for UART and UART can not work
>> normally in this case.
>
> I think the focus is too much on the hack done with 3.8 to make this
> work rather than on the fix being made here itself. The hack is only
> really of peripheral/historic interest.
>
> How about instead:
>
>         The UART is not able to receive bytes when idle mode is not
>         configured properly, therefore setup the UART with autoidle and
>         wakeup enabled.
>
> You could stop here or if you really want to cover the old hack you
> could go on to say:
>
>         Older Linux kernels (for example 3.8) configures hwmods for all
>         devices even if the device tree nodes for those devices is
>         absent in device tree, thus UART idle mode is configured too.
>         With such kernels we can workaround the issue by adding a fake
>         node in the UART containing this MMIO range, which is therefore
>         mapped by Xen to dom0, which reconfigures the UART, causing
>         things to work normally.
>
>         Newer Linux Kernels (3.12 and beyond) do not configure idle mode
>         for UART and so this hack no longer works.
>
> If you are happy with the proposed wording (and indicate whether you
> want both bits or just the first) then, subject to Konrad giving a
> release Ack I'd be happy with this for 4.5 and I'll change the commit
> log as I go.
I'm fully happy with proposed wording (and want the both bits to be used)

> Konrad, this is a bug fix for a particular piece of hardware, it can't
> affect anything other than the OMAP ARM platform.
>
>
>> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@xxxxxxxxxxxxxxx>
>
>> ---
>> Changed since v1:
>>  * corrected commit message
>>
>>  xen/drivers/char/omap-uart.c | 3 +++
>>  xen/include/xen/8250-uart.h  | 4 ++++
>>  2 files changed, 7 insertions(+)
>>
>> diff --git a/xen/drivers/char/omap-uart.c b/xen/drivers/char/omap-uart.c
>> index a798b8d..16d1454 100644
>> --- a/xen/drivers/char/omap-uart.c
>> +++ b/xen/drivers/char/omap-uart.c
>> @@ -195,6 +195,9 @@ static void __init omap_uart_init_preirq(struct 
>> serial_port *port)
>>      omap_write(uart, UART_MCR, UART_MCR_DTR|UART_MCR_RTS);
>>
>>      omap_write(uart, UART_OMAP_MDR1, UART_OMAP_MDR1_16X_MODE);
>> +
>> +    /* setup iddle mode */
>> +    omap_write(uart, UART_SYSC, OMAP_UART_SYSC_DEF_CONF);
>>  }
>>
>>  static void __init omap_uart_init_postirq(struct serial_port *port)
>> diff --git a/xen/include/xen/8250-uart.h b/xen/include/xen/8250-uart.h
>> index a682bae..304b9dd 100644
>> --- a/xen/include/xen/8250-uart.h
>> +++ b/xen/include/xen/8250-uart.h
>> @@ -32,6 +32,7 @@
>>  #define UART_MCR          0x04    /* Modem control        */
>>  #define UART_LSR          0x05    /* line status          */
>>  #define UART_MSR          0x06    /* Modem status         */
>> +#define UART_SYSC         0x15    /* System configuration register */
>>  #define UART_USR          0x1f    /* Status register (DW) */
>>  #define UART_DLL          0x00    /* divisor latch (ls) (DLAB=1) */
>>  #define UART_DLM          0x01    /* divisor latch (ms) (DLAB=1) */
>> @@ -145,6 +146,9 @@
>>  /* SCR register bitmasks */
>>  #define OMAP_UART_SCR_RX_TRIG_GRANU1_MASK (1 << 7)
>>
>> +/* System configuration register */
>> +#define OMAP_UART_SYSC_DEF_CONF 0x0d /* autoidle mode, wakeup is enabled */
>> +
>>  #endif /* __XEN_8250_UART_H__ */
>>
>>  /*
>
>

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.