[PATCH 1/3] OMAP2+: UART: Remove cpu checks for populating errata flags

Raja, Govindraj govindraj.raja at ti.com
Wed Mar 28 07:09:37 EDT 2012


On Wed, Mar 28, 2012 at 2:38 AM, Jon Hunter <jon-hunter at ti.com> wrote:
> Hi Govindraj,
>
>
> On 3/21/2012 5:24, Govindraj.R wrote:
>>
>> From: "Govindraj.R"<govindraj.raja at ti.com>
>>
>> Currently the errata is populated based on cpu checks this can
>> be removed and replaced with module version check of uart ip block.
>> MVR reg is provided within the uart reg map use the same
>> to populate the errata and thus now errata population and handling
>> can be managed within the driver itself.
>>
>> Cc: Paul Walmsley<paul at pwsan.com>
>> Cc: Kevin Hilman<khilman at ti.com>
>> Signed-off-by: Felipe Balbi<balbi at ti.com>
>> Signed-off-by: Govindraj.R<govindraj.raja at ti.com>
>> ---
>>  arch/arm/mach-omap2/serial.c                  |    8 ---
>>  arch/arm/plat-omap/include/plat/omap-serial.h |    1 -
>>  drivers/tty/serial/omap-serial.c              |   62
>> ++++++++++++++++++++++++-
>>  3 files changed, 61 insertions(+), 10 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
>> index f590afc..330ee04 100644
>> --- a/arch/arm/mach-omap2/serial.c
>> +++ b/arch/arm/mach-omap2/serial.c
>> @@ -357,14 +357,6 @@ void __init omap_serial_init_port(struct
>> omap_board_data *bdata,
>>        omap_up.dma_rx_poll_rate = info->dma_rx_poll_rate;
>>        omap_up.autosuspend_timeout = info->autosuspend_timeout;
>>
>> -       /* Enable the MDR1 Errata i202 for OMAP2430/3xxx/44xx */
>> -       if (!cpu_is_omap2420()&&  !cpu_is_ti816x())
>>
>> -               omap_up.errata |= UART_ERRATA_i202_MDR1_ACCESS;
>> -
>> -       /* Enable DMA Mode Force Idle Errata i291 for omap34xx/3630 */
>> -       if (cpu_is_omap34xx() || cpu_is_omap3630())
>> -               omap_up.errata |= UART_ERRATA_i291_DMA_FORCEIDLE;
>> -
>>        pdata =&omap_up;
>>        pdata_size = sizeof(struct omap_uart_port_info);
>>
>> diff --git a/arch/arm/plat-omap/include/plat/omap-serial.h
>> b/arch/arm/plat-omap/include/plat/omap-serial.h
>> index 9ff4444..1a52725 100644
>> --- a/arch/arm/plat-omap/include/plat/omap-serial.h
>> +++ b/arch/arm/plat-omap/include/plat/omap-serial.h
>> @@ -65,7 +65,6 @@ struct omap_uart_port_info {
>>        bool                    dma_enabled;    /* To specify DMA Mode */
>>        unsigned int            uartclk;        /* UART clock rate */
>>        upf_t                   flags;          /* UPF_* flags */
>> -       u32                     errata;
>>        unsigned int            dma_rx_buf_size;
>>        unsigned int            dma_rx_timeout;
>>        unsigned int            autosuspend_timeout;
>> diff --git a/drivers/tty/serial/omap-serial.c
>> b/drivers/tty/serial/omap-serial.c
>> index f809041..c7666d6 100644
>> --- a/drivers/tty/serial/omap-serial.c
>> +++ b/drivers/tty/serial/omap-serial.c
>> @@ -44,6 +44,13 @@
>>  #include<plat/dmtimer.h>
>>  #include<plat/omap-serial.h>
>>
>> +#define UART_BUILD_REVISION(x, y)      (((x)<<  8) | (y))
>> +
>> +#define OMAP_UART_REV_42 0x0402
>> +#define OMAP_UART_REV_46 0x0406
>> +#define OMAP_UART_REV_52 0x0502
>> +#define OMAP_UART_REV_63 0x0603
>> +
>>  #define DEFAULT_CLK_SPEED 48000000 /* 48Mhz*/
>>
>>  /* SCR register bitmasks */
>> @@ -1346,6 +1353,58 @@ static void uart_tx_dma_callback(int lch, u16
>> ch_status, void *data)
>>        return;
>>  }
>>
>> +static void omap_serial_fill_features_erratas(struct uart_omap_port *up)
>> +{
>> +       u32 mvr, scheme;
>> +       u16 revision, major, minor;
>> +
>> +       mvr = serial_in(up, UART_OMAP_MVER);
>> +
>> +       /* Check revision register scheme */
>> +       scheme = mvr&  (0x03<<  30);
>> +       scheme>>= 30;
>
>
> Minor nit-pick, why not ...
>
>        scheme = mvr >> 30;
>

yes will correct it.

>
>> +       switch (scheme) {
>> +       case 0: /* Legacy Scheme: OMAP2/3 */
>> +               /* MINOR_REV[0:4], MAJOR_REV[4:7] */
>
>
> This scheme is also true from OMAP1 devices. Maybe we could include in the
> comment.

No omap1 from $SUBJECT also reason,

mach-omap1/serial.c => 8250.c
mach-omap2/serial.c => omap-serial.c

>
>> +               major = (mvr&  0xf0)>>  4;
>> +               minor = (mvr&  0x0f);
>>
>> +               break;
>> +       case 1:
>> +               /* New Scheme: OMAP4+ */
>> +               /* MINOR_REV[0:5], MAJOR_REV[8:10] */
>> +               major = (mvr&  0x7<<  8)>>  8;
>
>
> Nit-pick ...
>
>        major = (mvr >> 8) & 0x7;

yes fine will correct this.

--
Thanks,
Govindraj.R



More information about the linux-arm-kernel mailing list