linux/drivers/tty/serial/serial-tegra.c
<<
>>
Prefs
   1/*
   2 * serial_tegra.c
   3 *
   4 * High-speed serial driver for NVIDIA Tegra SoCs
   5 *
   6 * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
   7 *
   8 * Author: Laxman Dewangan <ldewangan@nvidia.com>
   9 *
  10 * This program is free software; you can redistribute it and/or modify it
  11 * under the terms and conditions of the GNU General Public License,
  12 * version 2, as published by the Free Software Foundation.
  13 *
  14 * This program is distributed in the hope it will be useful, but WITHOUT
  15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  16 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  17 * more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  21 */
  22
  23#include <linux/clk.h>
  24#include <linux/debugfs.h>
  25#include <linux/delay.h>
  26#include <linux/dmaengine.h>
  27#include <linux/dma-mapping.h>
  28#include <linux/dmapool.h>
  29#include <linux/err.h>
  30#include <linux/io.h>
  31#include <linux/irq.h>
  32#include <linux/module.h>
  33#include <linux/of.h>
  34#include <linux/of_device.h>
  35#include <linux/pagemap.h>
  36#include <linux/platform_device.h>
  37#include <linux/reset.h>
  38#include <linux/serial.h>
  39#include <linux/serial_8250.h>
  40#include <linux/serial_core.h>
  41#include <linux/serial_reg.h>
  42#include <linux/slab.h>
  43#include <linux/string.h>
  44#include <linux/termios.h>
  45#include <linux/tty.h>
  46#include <linux/tty_flip.h>
  47
  48#define TEGRA_UART_TYPE                         "TEGRA_UART"
  49#define TX_EMPTY_STATUS                         (UART_LSR_TEMT | UART_LSR_THRE)
  50#define BYTES_TO_ALIGN(x)                       ((unsigned long)(x) & 0x3)
  51
  52#define TEGRA_UART_RX_DMA_BUFFER_SIZE           4096
  53#define TEGRA_UART_LSR_TXFIFO_FULL              0x100
  54#define TEGRA_UART_IER_EORD                     0x20
  55#define TEGRA_UART_MCR_RTS_EN                   0x40
  56#define TEGRA_UART_MCR_CTS_EN                   0x20
  57#define TEGRA_UART_LSR_ANY                      (UART_LSR_OE | UART_LSR_BI | \
  58                                                UART_LSR_PE | UART_LSR_FE)
  59#define TEGRA_UART_IRDA_CSR                     0x08
  60#define TEGRA_UART_SIR_ENABLED                  0x80
  61
  62#define TEGRA_UART_TX_PIO                       1
  63#define TEGRA_UART_TX_DMA                       2
  64#define TEGRA_UART_MIN_DMA                      16
  65#define TEGRA_UART_FIFO_SIZE                    32
  66
  67/*
  68 * Tx fifo trigger level setting in tegra uart is in
  69 * reverse way then conventional uart.
  70 */
  71#define TEGRA_UART_TX_TRIG_16B                  0x00
  72#define TEGRA_UART_TX_TRIG_8B                   0x10
  73#define TEGRA_UART_TX_TRIG_4B                   0x20
  74#define TEGRA_UART_TX_TRIG_1B                   0x30
  75
  76#define TEGRA_UART_MAXIMUM                      5
  77
  78/* Default UART setting when started: 115200 no parity, stop, 8 data bits */
  79#define TEGRA_UART_DEFAULT_BAUD                 115200
  80#define TEGRA_UART_DEFAULT_LSR                  UART_LCR_WLEN8
  81
  82/* Tx transfer mode */
  83#define TEGRA_TX_PIO                            1
  84#define TEGRA_TX_DMA                            2
  85
  86/**
  87 * tegra_uart_chip_data: SOC specific data.
  88 *
  89 * @tx_fifo_full_status: Status flag available for checking tx fifo full.
  90 * @allow_txfifo_reset_fifo_mode: allow_tx fifo reset with fifo mode or not.
  91 *                      Tegra30 does not allow this.
  92 * @support_clk_src_div: Clock source support the clock divider.
  93 */
  94struct tegra_uart_chip_data {
  95        bool    tx_fifo_full_status;
  96        bool    allow_txfifo_reset_fifo_mode;
  97        bool    support_clk_src_div;
  98};
  99
 100struct tegra_uart_port {
 101        struct uart_port                        uport;
 102        const struct tegra_uart_chip_data       *cdata;
 103
 104        struct clk                              *uart_clk;
 105        struct reset_control                    *rst;
 106        unsigned int                            current_baud;
 107
 108        /* Register shadow */
 109        unsigned long                           fcr_shadow;
 110        unsigned long                           mcr_shadow;
 111        unsigned long                           lcr_shadow;
 112        unsigned long                           ier_shadow;
 113        bool                                    rts_active;
 114
 115        int                                     tx_in_progress;
 116        unsigned int                            tx_bytes;
 117
 118        bool                                    enable_modem_interrupt;
 119
 120        bool                                    rx_timeout;
 121        int                                     rx_in_progress;
 122        int                                     symb_bit;
 123
 124        struct dma_chan                         *rx_dma_chan;
 125        struct dma_chan                         *tx_dma_chan;
 126        dma_addr_t                              rx_dma_buf_phys;
 127        dma_addr_t                              tx_dma_buf_phys;
 128        unsigned char                           *rx_dma_buf_virt;
 129        unsigned char                           *tx_dma_buf_virt;
 130        struct dma_async_tx_descriptor          *tx_dma_desc;
 131        struct dma_async_tx_descriptor          *rx_dma_desc;
 132        dma_cookie_t                            tx_cookie;
 133        dma_cookie_t                            rx_cookie;
 134        unsigned int                            tx_bytes_requested;
 135        unsigned int                            rx_bytes_requested;
 136};
 137
 138static void tegra_uart_start_next_tx(struct tegra_uart_port *tup);
 139static int tegra_uart_start_rx_dma(struct tegra_uart_port *tup);
 140
 141static inline unsigned long tegra_uart_read(struct tegra_uart_port *tup,
 142                unsigned long reg)
 143{
 144        return readl(tup->uport.membase + (reg << tup->uport.regshift));
 145}
 146
 147static inline void tegra_uart_write(struct tegra_uart_port *tup, unsigned val,
 148        unsigned long reg)
 149{
 150        writel(val, tup->uport.membase + (reg << tup->uport.regshift));
 151}
 152
 153static inline struct tegra_uart_port *to_tegra_uport(struct uart_port *u)
 154{
 155        return container_of(u, struct tegra_uart_port, uport);
 156}
 157
 158static unsigned int tegra_uart_get_mctrl(struct uart_port *u)
 159{
 160        struct tegra_uart_port *tup = to_tegra_uport(u);
 161
 162        /*
 163         * RI - Ring detector is active
 164         * CD/DCD/CAR - Carrier detect is always active. For some reason
 165         *      linux has different names for carrier detect.
 166         * DSR - Data Set ready is active as the hardware doesn't support it.
 167         *      Don't know if the linux support this yet?
 168         * CTS - Clear to send. Always set to active, as the hardware handles
 169         *      CTS automatically.
 170         */
 171        if (tup->enable_modem_interrupt)
 172                return TIOCM_RI | TIOCM_CD | TIOCM_DSR | TIOCM_CTS;
 173        return TIOCM_CTS;
 174}
 175
 176static void set_rts(struct tegra_uart_port *tup, bool active)
 177{
 178        unsigned long mcr;
 179
 180        mcr = tup->mcr_shadow;
 181        if (active)
 182                mcr |= TEGRA_UART_MCR_RTS_EN;
 183        else
 184                mcr &= ~TEGRA_UART_MCR_RTS_EN;
 185        if (mcr != tup->mcr_shadow) {
 186                tegra_uart_write(tup, mcr, UART_MCR);
 187                tup->mcr_shadow = mcr;
 188        }
 189}
 190
 191static void set_dtr(struct tegra_uart_port *tup, bool active)
 192{
 193        unsigned long mcr;
 194
 195        mcr = tup->mcr_shadow;
 196        if (active)
 197                mcr |= UART_MCR_DTR;
 198        else
 199                mcr &= ~UART_MCR_DTR;
 200        if (mcr != tup->mcr_shadow) {
 201                tegra_uart_write(tup, mcr, UART_MCR);
 202                tup->mcr_shadow = mcr;
 203        }
 204}
 205
 206static void tegra_uart_set_mctrl(struct uart_port *u, unsigned int mctrl)
 207{
 208        struct tegra_uart_port *tup = to_tegra_uport(u);
 209        int dtr_enable;
 210
 211        tup->rts_active = !!(mctrl & TIOCM_RTS);
 212        set_rts(tup, tup->rts_active);
 213
 214        dtr_enable = !!(mctrl & TIOCM_DTR);
 215        set_dtr(tup, dtr_enable);
 216}
 217
 218static void tegra_uart_break_ctl(struct uart_port *u, int break_ctl)
 219{
 220        struct tegra_uart_port *tup = to_tegra_uport(u);
 221        unsigned long lcr;
 222
 223        lcr = tup->lcr_shadow;
 224        if (break_ctl)
 225                lcr |= UART_LCR_SBC;
 226        else
 227                lcr &= ~UART_LCR_SBC;
 228        tegra_uart_write(tup, lcr, UART_LCR);
 229        tup->lcr_shadow = lcr;
 230}
 231
 232/**
 233 * tegra_uart_wait_cycle_time: Wait for N UART clock periods
 234 *
 235 * @tup:        Tegra serial port data structure.
 236 * @cycles:     Number of clock periods to wait.
 237 *
 238 * Tegra UARTs are clocked at 16X the baud/bit rate and hence the UART
 239 * clock speed is 16X the current baud rate.
 240 */
 241static void tegra_uart_wait_cycle_time(struct tegra_uart_port *tup,
 242                                       unsigned int cycles)
 243{
 244        if (tup->current_baud)
 245                udelay(DIV_ROUND_UP(cycles * 1000000, tup->current_baud * 16));
 246}
 247
 248/* Wait for a symbol-time. */
 249static void tegra_uart_wait_sym_time(struct tegra_uart_port *tup,
 250                unsigned int syms)
 251{
 252        if (tup->current_baud)
 253                udelay(DIV_ROUND_UP(syms * tup->symb_bit * 1000000,
 254                        tup->current_baud));
 255}
 256
 257static void tegra_uart_fifo_reset(struct tegra_uart_port *tup, u8 fcr_bits)
 258{
 259        unsigned long fcr = tup->fcr_shadow;
 260
 261        if (tup->cdata->allow_txfifo_reset_fifo_mode) {
 262                fcr |= fcr_bits & (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
 263                tegra_uart_write(tup, fcr, UART_FCR);
 264        } else {
 265                fcr &= ~UART_FCR_ENABLE_FIFO;
 266                tegra_uart_write(tup, fcr, UART_FCR);
 267                udelay(60);
 268                fcr |= fcr_bits & (UART_FCR_CLEAR_RCVR | UART_FCR_CLEAR_XMIT);
 269                tegra_uart_write(tup, fcr, UART_FCR);
 270                fcr |= UART_FCR_ENABLE_FIFO;
 271                tegra_uart_write(tup, fcr, UART_FCR);
 272        }
 273
 274        /* Dummy read to ensure the write is posted */
 275        tegra_uart_read(tup, UART_SCR);
 276
 277        /*
 278         * For all tegra devices (up to t210), there is a hardware issue that
 279         * requires software to wait for 32 UART clock periods for the flush
 280         * to propagate, otherwise data could be lost.
 281         */
 282        tegra_uart_wait_cycle_time(tup, 32);
 283}
 284
 285static int tegra_set_baudrate(struct tegra_uart_port *tup, unsigned int baud)
 286{
 287        unsigned long rate;
 288        unsigned int divisor;
 289        unsigned long lcr;
 290        int ret;
 291
 292        if (tup->current_baud == baud)
 293                return 0;
 294
 295        if (tup->cdata->support_clk_src_div) {
 296                rate = baud * 16;
 297                ret = clk_set_rate(tup->uart_clk, rate);
 298                if (ret < 0) {
 299                        dev_err(tup->uport.dev,
 300                                "clk_set_rate() failed for rate %lu\n", rate);
 301                        return ret;
 302                }
 303                divisor = 1;
 304        } else {
 305                rate = clk_get_rate(tup->uart_clk);
 306                divisor = DIV_ROUND_CLOSEST(rate, baud * 16);
 307        }
 308
 309        lcr = tup->lcr_shadow;
 310        lcr |= UART_LCR_DLAB;
 311        tegra_uart_write(tup, lcr, UART_LCR);
 312
 313        tegra_uart_write(tup, divisor & 0xFF, UART_TX);
 314        tegra_uart_write(tup, ((divisor >> 8) & 0xFF), UART_IER);
 315
 316        lcr &= ~UART_LCR_DLAB;
 317        tegra_uart_write(tup, lcr, UART_LCR);
 318
 319        /* Dummy read to ensure the write is posted */
 320        tegra_uart_read(tup, UART_SCR);
 321
 322        tup->current_baud = baud;
 323
 324        /* wait two character intervals at new rate */
 325        tegra_uart_wait_sym_time(tup, 2);
 326        return 0;
 327}
 328
 329static char tegra_uart_decode_rx_error(struct tegra_uart_port *tup,
 330                        unsigned long lsr)
 331{
 332        char flag = TTY_NORMAL;
 333
 334        if (unlikely(lsr & TEGRA_UART_LSR_ANY)) {
 335                if (lsr & UART_LSR_OE) {
 336                        /* Overrrun error */
 337                        flag = TTY_OVERRUN;
 338                        tup->uport.icount.overrun++;
 339                        dev_err(tup->uport.dev, "Got overrun errors\n");
 340                } else if (lsr & UART_LSR_PE) {
 341                        /* Parity error */
 342                        flag = TTY_PARITY;
 343                        tup->uport.icount.parity++;
 344                        dev_err(tup->uport.dev, "Got Parity errors\n");
 345                } else if (lsr & UART_LSR_FE) {
 346                        flag = TTY_FRAME;
 347                        tup->uport.icount.frame++;
 348                        dev_err(tup->uport.dev, "Got frame errors\n");
 349                } else if (lsr & UART_LSR_BI) {
 350                        dev_err(tup->uport.dev, "Got Break\n");
 351                        tup->uport.icount.brk++;
 352                        /* If FIFO read error without any data, reset Rx FIFO */
 353                        if (!(lsr & UART_LSR_DR) && (lsr & UART_LSR_FIFOE))
 354                                tegra_uart_fifo_reset(tup, UART_FCR_CLEAR_RCVR);
 355                }
 356        }
 357        return flag;
 358}
 359
 360static int tegra_uart_request_port(struct uart_port *u)
 361{
 362        return 0;
 363}
 364
 365static void tegra_uart_release_port(struct uart_port *u)
 366{
 367        /* Nothing to do here */
 368}
 369
 370static void tegra_uart_fill_tx_fifo(struct tegra_uart_port *tup, int max_bytes)
 371{
 372        struct circ_buf *xmit = &tup->uport.state->xmit;
 373        int i;
 374
 375        for (i = 0; i < max_bytes; i++) {
 376                BUG_ON(uart_circ_empty(xmit));
 377                if (tup->cdata->tx_fifo_full_status) {
 378                        unsigned long lsr = tegra_uart_read(tup, UART_LSR);
 379                        if ((lsr & TEGRA_UART_LSR_TXFIFO_FULL))
 380                                break;
 381                }
 382                tegra_uart_write(tup, xmit->buf[xmit->tail], UART_TX);
 383                xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
 384                tup->uport.icount.tx++;
 385        }
 386}
 387
 388static void tegra_uart_start_pio_tx(struct tegra_uart_port *tup,
 389                unsigned int bytes)
 390{
 391        if (bytes > TEGRA_UART_MIN_DMA)
 392                bytes = TEGRA_UART_MIN_DMA;
 393
 394        tup->tx_in_progress = TEGRA_UART_TX_PIO;
 395        tup->tx_bytes = bytes;
 396        tup->ier_shadow |= UART_IER_THRI;
 397        tegra_uart_write(tup, tup->ier_shadow, UART_IER);
 398}
 399
 400static void tegra_uart_tx_dma_complete(void *args)
 401{
 402        struct tegra_uart_port *tup = args;
 403        struct circ_buf *xmit = &tup->uport.state->xmit;
 404        struct dma_tx_state state;
 405        unsigned long flags;
 406        unsigned int count;
 407
 408        dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
 409        count = tup->tx_bytes_requested - state.residue;
 410        async_tx_ack(tup->tx_dma_desc);
 411        spin_lock_irqsave(&tup->uport.lock, flags);
 412        xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
 413        tup->tx_in_progress = 0;
 414        if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 415                uart_write_wakeup(&tup->uport);
 416        tegra_uart_start_next_tx(tup);
 417        spin_unlock_irqrestore(&tup->uport.lock, flags);
 418}
 419
 420static int tegra_uart_start_tx_dma(struct tegra_uart_port *tup,
 421                unsigned long count)
 422{
 423        struct circ_buf *xmit = &tup->uport.state->xmit;
 424        dma_addr_t tx_phys_addr;
 425
 426        dma_sync_single_for_device(tup->uport.dev, tup->tx_dma_buf_phys,
 427                                UART_XMIT_SIZE, DMA_TO_DEVICE);
 428
 429        tup->tx_bytes = count & ~(0xF);
 430        tx_phys_addr = tup->tx_dma_buf_phys + xmit->tail;
 431        tup->tx_dma_desc = dmaengine_prep_slave_single(tup->tx_dma_chan,
 432                                tx_phys_addr, tup->tx_bytes, DMA_MEM_TO_DEV,
 433                                DMA_PREP_INTERRUPT);
 434        if (!tup->tx_dma_desc) {
 435                dev_err(tup->uport.dev, "Not able to get desc for Tx\n");
 436                return -EIO;
 437        }
 438
 439        tup->tx_dma_desc->callback = tegra_uart_tx_dma_complete;
 440        tup->tx_dma_desc->callback_param = tup;
 441        tup->tx_in_progress = TEGRA_UART_TX_DMA;
 442        tup->tx_bytes_requested = tup->tx_bytes;
 443        tup->tx_cookie = dmaengine_submit(tup->tx_dma_desc);
 444        dma_async_issue_pending(tup->tx_dma_chan);
 445        return 0;
 446}
 447
 448static void tegra_uart_start_next_tx(struct tegra_uart_port *tup)
 449{
 450        unsigned long tail;
 451        unsigned long count;
 452        struct circ_buf *xmit = &tup->uport.state->xmit;
 453
 454        tail = (unsigned long)&xmit->buf[xmit->tail];
 455        count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
 456        if (!count)
 457                return;
 458
 459        if (count < TEGRA_UART_MIN_DMA)
 460                tegra_uart_start_pio_tx(tup, count);
 461        else if (BYTES_TO_ALIGN(tail) > 0)
 462                tegra_uart_start_pio_tx(tup, BYTES_TO_ALIGN(tail));
 463        else
 464                tegra_uart_start_tx_dma(tup, count);
 465}
 466
 467/* Called by serial core driver with u->lock taken. */
 468static void tegra_uart_start_tx(struct uart_port *u)
 469{
 470        struct tegra_uart_port *tup = to_tegra_uport(u);
 471        struct circ_buf *xmit = &u->state->xmit;
 472
 473        if (!uart_circ_empty(xmit) && !tup->tx_in_progress)
 474                tegra_uart_start_next_tx(tup);
 475}
 476
 477static unsigned int tegra_uart_tx_empty(struct uart_port *u)
 478{
 479        struct tegra_uart_port *tup = to_tegra_uport(u);
 480        unsigned int ret = 0;
 481        unsigned long flags;
 482
 483        spin_lock_irqsave(&u->lock, flags);
 484        if (!tup->tx_in_progress) {
 485                unsigned long lsr = tegra_uart_read(tup, UART_LSR);
 486                if ((lsr & TX_EMPTY_STATUS) == TX_EMPTY_STATUS)
 487                        ret = TIOCSER_TEMT;
 488        }
 489        spin_unlock_irqrestore(&u->lock, flags);
 490        return ret;
 491}
 492
 493static void tegra_uart_stop_tx(struct uart_port *u)
 494{
 495        struct tegra_uart_port *tup = to_tegra_uport(u);
 496        struct circ_buf *xmit = &tup->uport.state->xmit;
 497        struct dma_tx_state state;
 498        unsigned int count;
 499
 500        if (tup->tx_in_progress != TEGRA_UART_TX_DMA)
 501                return;
 502
 503        dmaengine_terminate_all(tup->tx_dma_chan);
 504        dmaengine_tx_status(tup->tx_dma_chan, tup->tx_cookie, &state);
 505        count = tup->tx_bytes_requested - state.residue;
 506        async_tx_ack(tup->tx_dma_desc);
 507        xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
 508        tup->tx_in_progress = 0;
 509}
 510
 511static void tegra_uart_handle_tx_pio(struct tegra_uart_port *tup)
 512{
 513        struct circ_buf *xmit = &tup->uport.state->xmit;
 514
 515        tegra_uart_fill_tx_fifo(tup, tup->tx_bytes);
 516        tup->tx_in_progress = 0;
 517        if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
 518                uart_write_wakeup(&tup->uport);
 519        tegra_uart_start_next_tx(tup);
 520}
 521
 522static void tegra_uart_handle_rx_pio(struct tegra_uart_port *tup,
 523                struct tty_port *tty)
 524{
 525        do {
 526                char flag = TTY_NORMAL;
 527                unsigned long lsr = 0;
 528                unsigned char ch;
 529
 530                lsr = tegra_uart_read(tup, UART_LSR);
 531                if (!(lsr & UART_LSR_DR))
 532                        break;
 533
 534                flag = tegra_uart_decode_rx_error(tup, lsr);
 535                ch = (unsigned char) tegra_uart_read(tup, UART_RX);
 536                tup->uport.icount.rx++;
 537
 538                if (!uart_handle_sysrq_char(&tup->uport, ch) && tty)
 539                        tty_insert_flip_char(tty, ch, flag);
 540        } while (1);
 541}
 542
 543static void tegra_uart_copy_rx_to_tty(struct tegra_uart_port *tup,
 544                                      struct tty_port *tty,
 545                                      unsigned int count)
 546{
 547        int copied;
 548
 549        /* If count is zero, then there is no data to be copied */
 550        if (!count)
 551                return;
 552
 553        tup->uport.icount.rx += count;
 554        if (!tty) {
 555                dev_err(tup->uport.dev, "No tty port\n");
 556                return;
 557        }
 558        dma_sync_single_for_cpu(tup->uport.dev, tup->rx_dma_buf_phys,
 559                                TEGRA_UART_RX_DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
 560        copied = tty_insert_flip_string(tty,
 561                        ((unsigned char *)(tup->rx_dma_buf_virt)), count);
 562        if (copied != count) {
 563                WARN_ON(1);
 564                dev_err(tup->uport.dev, "RxData copy to tty layer failed\n");
 565        }
 566        dma_sync_single_for_device(tup->uport.dev, tup->rx_dma_buf_phys,
 567                                TEGRA_UART_RX_DMA_BUFFER_SIZE, DMA_TO_DEVICE);
 568}
 569
 570static void tegra_uart_rx_buffer_push(struct tegra_uart_port *tup,
 571                                      unsigned int residue)
 572{
 573        struct tty_port *port = &tup->uport.state->port;
 574        struct tty_struct *tty = tty_port_tty_get(port);
 575        unsigned int count;
 576
 577        async_tx_ack(tup->rx_dma_desc);
 578        count = tup->rx_bytes_requested - residue;
 579
 580        /* If we are here, DMA is stopped */
 581        tegra_uart_copy_rx_to_tty(tup, port, count);
 582
 583        tegra_uart_handle_rx_pio(tup, port);
 584        if (tty) {
 585                tty_flip_buffer_push(port);
 586                tty_kref_put(tty);
 587        }
 588}
 589
 590static void tegra_uart_rx_dma_complete(void *args)
 591{
 592        struct tegra_uart_port *tup = args;
 593        struct uart_port *u = &tup->uport;
 594        unsigned long flags;
 595        struct dma_tx_state state;
 596        enum dma_status status;
 597
 598        spin_lock_irqsave(&u->lock, flags);
 599
 600        status = dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
 601
 602        if (status == DMA_IN_PROGRESS) {
 603                dev_dbg(tup->uport.dev, "RX DMA is in progress\n");
 604                goto done;
 605        }
 606
 607        /* Deactivate flow control to stop sender */
 608        if (tup->rts_active)
 609                set_rts(tup, false);
 610
 611        tegra_uart_rx_buffer_push(tup, 0);
 612        tegra_uart_start_rx_dma(tup);
 613
 614        /* Activate flow control to start transfer */
 615        if (tup->rts_active)
 616                set_rts(tup, true);
 617
 618done:
 619        spin_unlock_irqrestore(&u->lock, flags);
 620}
 621
 622static void tegra_uart_handle_rx_dma(struct tegra_uart_port *tup)
 623{
 624        struct dma_tx_state state;
 625
 626        /* Deactivate flow control to stop sender */
 627        if (tup->rts_active)
 628                set_rts(tup, false);
 629
 630        dmaengine_terminate_all(tup->rx_dma_chan);
 631        dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
 632        tegra_uart_rx_buffer_push(tup, state.residue);
 633        tegra_uart_start_rx_dma(tup);
 634
 635        if (tup->rts_active)
 636                set_rts(tup, true);
 637}
 638
 639static int tegra_uart_start_rx_dma(struct tegra_uart_port *tup)
 640{
 641        unsigned int count = TEGRA_UART_RX_DMA_BUFFER_SIZE;
 642
 643        tup->rx_dma_desc = dmaengine_prep_slave_single(tup->rx_dma_chan,
 644                                tup->rx_dma_buf_phys, count, DMA_DEV_TO_MEM,
 645                                DMA_PREP_INTERRUPT);
 646        if (!tup->rx_dma_desc) {
 647                dev_err(tup->uport.dev, "Not able to get desc for Rx\n");
 648                return -EIO;
 649        }
 650
 651        tup->rx_dma_desc->callback = tegra_uart_rx_dma_complete;
 652        tup->rx_dma_desc->callback_param = tup;
 653        dma_sync_single_for_device(tup->uport.dev, tup->rx_dma_buf_phys,
 654                                count, DMA_TO_DEVICE);
 655        tup->rx_bytes_requested = count;
 656        tup->rx_cookie = dmaengine_submit(tup->rx_dma_desc);
 657        dma_async_issue_pending(tup->rx_dma_chan);
 658        return 0;
 659}
 660
 661static void tegra_uart_handle_modem_signal_change(struct uart_port *u)
 662{
 663        struct tegra_uart_port *tup = to_tegra_uport(u);
 664        unsigned long msr;
 665
 666        msr = tegra_uart_read(tup, UART_MSR);
 667        if (!(msr & UART_MSR_ANY_DELTA))
 668                return;
 669
 670        if (msr & UART_MSR_TERI)
 671                tup->uport.icount.rng++;
 672        if (msr & UART_MSR_DDSR)
 673                tup->uport.icount.dsr++;
 674        /* We may only get DDCD when HW init and reset */
 675        if (msr & UART_MSR_DDCD)
 676                uart_handle_dcd_change(&tup->uport, msr & UART_MSR_DCD);
 677        /* Will start/stop_tx accordingly */
 678        if (msr & UART_MSR_DCTS)
 679                uart_handle_cts_change(&tup->uport, msr & UART_MSR_CTS);
 680}
 681
 682static irqreturn_t tegra_uart_isr(int irq, void *data)
 683{
 684        struct tegra_uart_port *tup = data;
 685        struct uart_port *u = &tup->uport;
 686        unsigned long iir;
 687        unsigned long ier;
 688        bool is_rx_int = false;
 689        unsigned long flags;
 690
 691        spin_lock_irqsave(&u->lock, flags);
 692        while (1) {
 693                iir = tegra_uart_read(tup, UART_IIR);
 694                if (iir & UART_IIR_NO_INT) {
 695                        if (is_rx_int) {
 696                                tegra_uart_handle_rx_dma(tup);
 697                                if (tup->rx_in_progress) {
 698                                        ier = tup->ier_shadow;
 699                                        ier |= (UART_IER_RLSI | UART_IER_RTOIE |
 700                                                TEGRA_UART_IER_EORD);
 701                                        tup->ier_shadow = ier;
 702                                        tegra_uart_write(tup, ier, UART_IER);
 703                                }
 704                        }
 705                        spin_unlock_irqrestore(&u->lock, flags);
 706                        return IRQ_HANDLED;
 707                }
 708
 709                switch ((iir >> 1) & 0x7) {
 710                case 0: /* Modem signal change interrupt */
 711                        tegra_uart_handle_modem_signal_change(u);
 712                        break;
 713
 714                case 1: /* Transmit interrupt only triggered when using PIO */
 715                        tup->ier_shadow &= ~UART_IER_THRI;
 716                        tegra_uart_write(tup, tup->ier_shadow, UART_IER);
 717                        tegra_uart_handle_tx_pio(tup);
 718                        break;
 719
 720                case 4: /* End of data */
 721                case 6: /* Rx timeout */
 722                case 2: /* Receive */
 723                        if (!is_rx_int) {
 724                                is_rx_int = true;
 725                                /* Disable Rx interrupts */
 726                                ier = tup->ier_shadow;
 727                                ier |= UART_IER_RDI;
 728                                tegra_uart_write(tup, ier, UART_IER);
 729                                ier &= ~(UART_IER_RDI | UART_IER_RLSI |
 730                                        UART_IER_RTOIE | TEGRA_UART_IER_EORD);
 731                                tup->ier_shadow = ier;
 732                                tegra_uart_write(tup, ier, UART_IER);
 733                        }
 734                        break;
 735
 736                case 3: /* Receive error */
 737                        tegra_uart_decode_rx_error(tup,
 738                                        tegra_uart_read(tup, UART_LSR));
 739                        break;
 740
 741                case 5: /* break nothing to handle */
 742                case 7: /* break nothing to handle */
 743                        break;
 744                }
 745        }
 746}
 747
 748static void tegra_uart_stop_rx(struct uart_port *u)
 749{
 750        struct tegra_uart_port *tup = to_tegra_uport(u);
 751        struct dma_tx_state state;
 752        unsigned long ier;
 753
 754        if (tup->rts_active)
 755                set_rts(tup, false);
 756
 757        if (!tup->rx_in_progress)
 758                return;
 759
 760        tegra_uart_wait_sym_time(tup, 1); /* wait a character interval */
 761
 762        ier = tup->ier_shadow;
 763        ier &= ~(UART_IER_RDI | UART_IER_RLSI | UART_IER_RTOIE |
 764                                        TEGRA_UART_IER_EORD);
 765        tup->ier_shadow = ier;
 766        tegra_uart_write(tup, ier, UART_IER);
 767        tup->rx_in_progress = 0;
 768        dmaengine_terminate_all(tup->rx_dma_chan);
 769        dmaengine_tx_status(tup->rx_dma_chan, tup->rx_cookie, &state);
 770        tegra_uart_rx_buffer_push(tup, state.residue);
 771}
 772
 773static void tegra_uart_hw_deinit(struct tegra_uart_port *tup)
 774{
 775        unsigned long flags;
 776        unsigned long char_time = DIV_ROUND_UP(10000000, tup->current_baud);
 777        unsigned long fifo_empty_time = tup->uport.fifosize * char_time;
 778        unsigned long wait_time;
 779        unsigned long lsr;
 780        unsigned long msr;
 781        unsigned long mcr;
 782
 783        /* Disable interrupts */
 784        tegra_uart_write(tup, 0, UART_IER);
 785
 786        lsr = tegra_uart_read(tup, UART_LSR);
 787        if ((lsr & UART_LSR_TEMT) != UART_LSR_TEMT) {
 788                msr = tegra_uart_read(tup, UART_MSR);
 789                mcr = tegra_uart_read(tup, UART_MCR);
 790                if ((mcr & TEGRA_UART_MCR_CTS_EN) && (msr & UART_MSR_CTS))
 791                        dev_err(tup->uport.dev,
 792                                "Tx Fifo not empty, CTS disabled, waiting\n");
 793
 794                /* Wait for Tx fifo to be empty */
 795                while ((lsr & UART_LSR_TEMT) != UART_LSR_TEMT) {
 796                        wait_time = min(fifo_empty_time, 100lu);
 797                        udelay(wait_time);
 798                        fifo_empty_time -= wait_time;
 799                        if (!fifo_empty_time) {
 800                                msr = tegra_uart_read(tup, UART_MSR);
 801                                mcr = tegra_uart_read(tup, UART_MCR);
 802                                if ((mcr & TEGRA_UART_MCR_CTS_EN) &&
 803                                        (msr & UART_MSR_CTS))
 804                                        dev_err(tup->uport.dev,
 805                                                "Slave not ready\n");
 806                                break;
 807                        }
 808                        lsr = tegra_uart_read(tup, UART_LSR);
 809                }
 810        }
 811
 812        spin_lock_irqsave(&tup->uport.lock, flags);
 813        /* Reset the Rx and Tx FIFOs */
 814        tegra_uart_fifo_reset(tup, UART_FCR_CLEAR_XMIT | UART_FCR_CLEAR_RCVR);
 815        tup->current_baud = 0;
 816        spin_unlock_irqrestore(&tup->uport.lock, flags);
 817
 818        clk_disable_unprepare(tup->uart_clk);
 819}
 820
 821static int tegra_uart_hw_init(struct tegra_uart_port *tup)
 822{
 823        int ret;
 824
 825        tup->fcr_shadow = 0;
 826        tup->mcr_shadow = 0;
 827        tup->lcr_shadow = 0;
 828        tup->ier_shadow = 0;
 829        tup->current_baud = 0;
 830
 831        clk_prepare_enable(tup->uart_clk);
 832
 833        /* Reset the UART controller to clear all previous status.*/
 834        reset_control_assert(tup->rst);
 835        udelay(10);
 836        reset_control_deassert(tup->rst);
 837
 838        tup->rx_in_progress = 0;
 839        tup->tx_in_progress = 0;
 840
 841        /*
 842         * Set the trigger level
 843         *
 844         * For PIO mode:
 845         *
 846         * For receive, this will interrupt the CPU after that many number of
 847         * bytes are received, for the remaining bytes the receive timeout
 848         * interrupt is received. Rx high watermark is set to 4.
 849         *
 850         * For transmit, if the trasnmit interrupt is enabled, this will
 851         * interrupt the CPU when the number of entries in the FIFO reaches the
 852         * low watermark. Tx low watermark is set to 16 bytes.
 853         *
 854         * For DMA mode:
 855         *
 856         * Set the Tx trigger to 16. This should match the DMA burst size that
 857         * programmed in the DMA registers.
 858         */
 859        tup->fcr_shadow = UART_FCR_ENABLE_FIFO;
 860        tup->fcr_shadow |= UART_FCR_R_TRIG_01;
 861        tup->fcr_shadow |= TEGRA_UART_TX_TRIG_16B;
 862        tegra_uart_write(tup, tup->fcr_shadow, UART_FCR);
 863
 864        /* Dummy read to ensure the write is posted */
 865        tegra_uart_read(tup, UART_SCR);
 866
 867        /*
 868         * For all tegra devices (up to t210), there is a hardware issue that
 869         * requires software to wait for 3 UART clock periods after enabling
 870         * the TX fifo, otherwise data could be lost.
 871         */
 872        tegra_uart_wait_cycle_time(tup, 3);
 873
 874        /*
 875         * Initialize the UART with default configuration
 876         * (115200, N, 8, 1) so that the receive DMA buffer may be
 877         * enqueued
 878         */
 879        tup->lcr_shadow = TEGRA_UART_DEFAULT_LSR;
 880        tegra_set_baudrate(tup, TEGRA_UART_DEFAULT_BAUD);
 881        tup->fcr_shadow |= UART_FCR_DMA_SELECT;
 882        tegra_uart_write(tup, tup->fcr_shadow, UART_FCR);
 883
 884        ret = tegra_uart_start_rx_dma(tup);
 885        if (ret < 0) {
 886                dev_err(tup->uport.dev, "Not able to start Rx DMA\n");
 887                return ret;
 888        }
 889        tup->rx_in_progress = 1;
 890
 891        /*
 892         * Enable IE_RXS for the receive status interrupts like line errros.
 893         * Enable IE_RX_TIMEOUT to get the bytes which cannot be DMA'd.
 894         *
 895         * If using DMA mode, enable EORD instead of receive interrupt which
 896         * will interrupt after the UART is done with the receive instead of
 897         * the interrupt when the FIFO "threshold" is reached.
 898         *
 899         * EORD is different interrupt than RX_TIMEOUT - RX_TIMEOUT occurs when
 900         * the DATA is sitting in the FIFO and couldn't be transferred to the
 901         * DMA as the DMA size alignment(4 bytes) is not met. EORD will be
 902         * triggered when there is a pause of the incomming data stream for 4
 903         * characters long.
 904         *
 905         * For pauses in the data which is not aligned to 4 bytes, we get
 906         * both the EORD as well as RX_TIMEOUT - SW sees RX_TIMEOUT first
 907         * then the EORD.
 908         */
 909        tup->ier_shadow = UART_IER_RLSI | UART_IER_RTOIE | TEGRA_UART_IER_EORD;
 910        tegra_uart_write(tup, tup->ier_shadow, UART_IER);
 911        return 0;
 912}
 913
 914static void tegra_uart_dma_channel_free(struct tegra_uart_port *tup,
 915                bool dma_to_memory)
 916{
 917        if (dma_to_memory) {
 918                dmaengine_terminate_all(tup->rx_dma_chan);
 919                dma_release_channel(tup->rx_dma_chan);
 920                dma_free_coherent(tup->uport.dev, TEGRA_UART_RX_DMA_BUFFER_SIZE,
 921                                tup->rx_dma_buf_virt, tup->rx_dma_buf_phys);
 922                tup->rx_dma_chan = NULL;
 923                tup->rx_dma_buf_phys = 0;
 924                tup->rx_dma_buf_virt = NULL;
 925        } else {
 926                dmaengine_terminate_all(tup->tx_dma_chan);
 927                dma_release_channel(tup->tx_dma_chan);
 928                dma_unmap_single(tup->uport.dev, tup->tx_dma_buf_phys,
 929                        UART_XMIT_SIZE, DMA_TO_DEVICE);
 930                tup->tx_dma_chan = NULL;
 931                tup->tx_dma_buf_phys = 0;
 932                tup->tx_dma_buf_virt = NULL;
 933        }
 934}
 935
 936static int tegra_uart_dma_channel_allocate(struct tegra_uart_port *tup,
 937                        bool dma_to_memory)
 938{
 939        struct dma_chan *dma_chan;
 940        unsigned char *dma_buf;
 941        dma_addr_t dma_phys;
 942        int ret;
 943        struct dma_slave_config dma_sconfig;
 944
 945        dma_chan = dma_request_slave_channel_reason(tup->uport.dev,
 946                                                dma_to_memory ? "rx" : "tx");
 947        if (IS_ERR(dma_chan)) {
 948                ret = PTR_ERR(dma_chan);
 949                dev_err(tup->uport.dev,
 950                        "DMA channel alloc failed: %d\n", ret);
 951                return ret;
 952        }
 953
 954        if (dma_to_memory) {
 955                dma_buf = dma_alloc_coherent(tup->uport.dev,
 956                                TEGRA_UART_RX_DMA_BUFFER_SIZE,
 957                                 &dma_phys, GFP_KERNEL);
 958                if (!dma_buf) {
 959                        dev_err(tup->uport.dev,
 960                                "Not able to allocate the dma buffer\n");
 961                        dma_release_channel(dma_chan);
 962                        return -ENOMEM;
 963                }
 964                dma_sconfig.src_addr = tup->uport.mapbase;
 965                dma_sconfig.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
 966                dma_sconfig.src_maxburst = 4;
 967                tup->rx_dma_chan = dma_chan;
 968                tup->rx_dma_buf_virt = dma_buf;
 969                tup->rx_dma_buf_phys = dma_phys;
 970        } else {
 971                dma_phys = dma_map_single(tup->uport.dev,
 972                        tup->uport.state->xmit.buf, UART_XMIT_SIZE,
 973                        DMA_TO_DEVICE);
 974                if (dma_mapping_error(tup->uport.dev, dma_phys)) {
 975                        dev_err(tup->uport.dev, "dma_map_single tx failed\n");
 976                        dma_release_channel(dma_chan);
 977                        return -ENOMEM;
 978                }
 979                dma_buf = tup->uport.state->xmit.buf;
 980                dma_sconfig.dst_addr = tup->uport.mapbase;
 981                dma_sconfig.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
 982                dma_sconfig.dst_maxburst = 16;
 983                tup->tx_dma_chan = dma_chan;
 984                tup->tx_dma_buf_virt = dma_buf;
 985                tup->tx_dma_buf_phys = dma_phys;
 986        }
 987
 988        ret = dmaengine_slave_config(dma_chan, &dma_sconfig);
 989        if (ret < 0) {
 990                dev_err(tup->uport.dev,
 991                        "Dma slave config failed, err = %d\n", ret);
 992                tegra_uart_dma_channel_free(tup, dma_to_memory);
 993                return ret;
 994        }
 995
 996        return 0;
 997}
 998
 999static int tegra_uart_startup(struct uart_port *u)
1000{
1001        struct tegra_uart_port *tup = to_tegra_uport(u);
1002        int ret;
1003
1004        ret = tegra_uart_dma_channel_allocate(tup, false);
1005        if (ret < 0) {
1006                dev_err(u->dev, "Tx Dma allocation failed, err = %d\n", ret);
1007                return ret;
1008        }
1009
1010        ret = tegra_uart_dma_channel_allocate(tup, true);
1011        if (ret < 0) {
1012                dev_err(u->dev, "Rx Dma allocation failed, err = %d\n", ret);
1013                goto fail_rx_dma;
1014        }
1015
1016        ret = tegra_uart_hw_init(tup);
1017        if (ret < 0) {
1018                dev_err(u->dev, "Uart HW init failed, err = %d\n", ret);
1019                goto fail_hw_init;
1020        }
1021
1022        ret = request_irq(u->irq, tegra_uart_isr, 0,
1023                                dev_name(u->dev), tup);
1024        if (ret < 0) {
1025                dev_err(u->dev, "Failed to register ISR for IRQ %d\n", u->irq);
1026                goto fail_hw_init;
1027        }
1028        return 0;
1029
1030fail_hw_init:
1031        tegra_uart_dma_channel_free(tup, true);
1032fail_rx_dma:
1033        tegra_uart_dma_channel_free(tup, false);
1034        return ret;
1035}
1036
1037/*
1038 * Flush any TX data submitted for DMA and PIO. Called when the
1039 * TX circular buffer is reset.
1040 */
1041static void tegra_uart_flush_buffer(struct uart_port *u)
1042{
1043        struct tegra_uart_port *tup = to_tegra_uport(u);
1044
1045        tup->tx_bytes = 0;
1046        if (tup->tx_dma_chan)
1047                dmaengine_terminate_all(tup->tx_dma_chan);
1048}
1049
1050static void tegra_uart_shutdown(struct uart_port *u)
1051{
1052        struct tegra_uart_port *tup = to_tegra_uport(u);
1053
1054        tegra_uart_hw_deinit(tup);
1055
1056        tup->rx_in_progress = 0;
1057        tup->tx_in_progress = 0;
1058
1059        tegra_uart_dma_channel_free(tup, true);
1060        tegra_uart_dma_channel_free(tup, false);
1061        free_irq(u->irq, tup);
1062}
1063
1064static void tegra_uart_enable_ms(struct uart_port *u)
1065{
1066        struct tegra_uart_port *tup = to_tegra_uport(u);
1067
1068        if (tup->enable_modem_interrupt) {
1069                tup->ier_shadow |= UART_IER_MSI;
1070                tegra_uart_write(tup, tup->ier_shadow, UART_IER);
1071        }
1072}
1073
1074static void tegra_uart_set_termios(struct uart_port *u,
1075                struct ktermios *termios, struct ktermios *oldtermios)
1076{
1077        struct tegra_uart_port *tup = to_tegra_uport(u);
1078        unsigned int baud;
1079        unsigned long flags;
1080        unsigned int lcr;
1081        int symb_bit = 1;
1082        struct clk *parent_clk = clk_get_parent(tup->uart_clk);
1083        unsigned long parent_clk_rate = clk_get_rate(parent_clk);
1084        int max_divider = (tup->cdata->support_clk_src_div) ? 0x7FFF : 0xFFFF;
1085
1086        max_divider *= 16;
1087        spin_lock_irqsave(&u->lock, flags);
1088
1089        /* Changing configuration, it is safe to stop any rx now */
1090        if (tup->rts_active)
1091                set_rts(tup, false);
1092
1093        /* Clear all interrupts as configuration is going to be change */
1094        tegra_uart_write(tup, tup->ier_shadow | UART_IER_RDI, UART_IER);
1095        tegra_uart_read(tup, UART_IER);
1096        tegra_uart_write(tup, 0, UART_IER);
1097        tegra_uart_read(tup, UART_IER);
1098
1099        /* Parity */
1100        lcr = tup->lcr_shadow;
1101        lcr &= ~UART_LCR_PARITY;
1102
1103        /* CMSPAR isn't supported by this driver */
1104        termios->c_cflag &= ~CMSPAR;
1105
1106        if ((termios->c_cflag & PARENB) == PARENB) {
1107                symb_bit++;
1108                if (termios->c_cflag & PARODD) {
1109                        lcr |= UART_LCR_PARITY;
1110                        lcr &= ~UART_LCR_EPAR;
1111                        lcr &= ~UART_LCR_SPAR;
1112                } else {
1113                        lcr |= UART_LCR_PARITY;
1114                        lcr |= UART_LCR_EPAR;
1115                        lcr &= ~UART_LCR_SPAR;
1116                }
1117        }
1118
1119        lcr &= ~UART_LCR_WLEN8;
1120        switch (termios->c_cflag & CSIZE) {
1121        case CS5:
1122                lcr |= UART_LCR_WLEN5;
1123                symb_bit += 5;
1124                break;
1125        case CS6:
1126                lcr |= UART_LCR_WLEN6;
1127                symb_bit += 6;
1128                break;
1129        case CS7:
1130                lcr |= UART_LCR_WLEN7;
1131                symb_bit += 7;
1132                break;
1133        default:
1134                lcr |= UART_LCR_WLEN8;
1135                symb_bit += 8;
1136                break;
1137        }
1138
1139        /* Stop bits */
1140        if (termios->c_cflag & CSTOPB) {
1141                lcr |= UART_LCR_STOP;
1142                symb_bit += 2;
1143        } else {
1144                lcr &= ~UART_LCR_STOP;
1145                symb_bit++;
1146        }
1147
1148        tegra_uart_write(tup, lcr, UART_LCR);
1149        tup->lcr_shadow = lcr;
1150        tup->symb_bit = symb_bit;
1151
1152        /* Baud rate. */
1153        baud = uart_get_baud_rate(u, termios, oldtermios,
1154                        parent_clk_rate/max_divider,
1155                        parent_clk_rate/16);
1156        spin_unlock_irqrestore(&u->lock, flags);
1157        tegra_set_baudrate(tup, baud);
1158        if (tty_termios_baud_rate(termios))
1159                tty_termios_encode_baud_rate(termios, baud, baud);
1160        spin_lock_irqsave(&u->lock, flags);
1161
1162        /* Flow control */
1163        if (termios->c_cflag & CRTSCTS) {
1164                tup->mcr_shadow |= TEGRA_UART_MCR_CTS_EN;
1165                tup->mcr_shadow &= ~TEGRA_UART_MCR_RTS_EN;
1166                tegra_uart_write(tup, tup->mcr_shadow, UART_MCR);
1167                /* if top layer has asked to set rts active then do so here */
1168                if (tup->rts_active)
1169                        set_rts(tup, true);
1170        } else {
1171                tup->mcr_shadow &= ~TEGRA_UART_MCR_CTS_EN;
1172                tup->mcr_shadow &= ~TEGRA_UART_MCR_RTS_EN;
1173                tegra_uart_write(tup, tup->mcr_shadow, UART_MCR);
1174        }
1175
1176        /* update the port timeout based on new settings */
1177        uart_update_timeout(u, termios->c_cflag, baud);
1178
1179        /* Make sure all write has completed */
1180        tegra_uart_read(tup, UART_IER);
1181
1182        /* Reenable interrupt */
1183        tegra_uart_write(tup, tup->ier_shadow, UART_IER);
1184        tegra_uart_read(tup, UART_IER);
1185
1186        spin_unlock_irqrestore(&u->lock, flags);
1187}
1188
1189static const char *tegra_uart_type(struct uart_port *u)
1190{
1191        return TEGRA_UART_TYPE;
1192}
1193
1194static const struct uart_ops tegra_uart_ops = {
1195        .tx_empty       = tegra_uart_tx_empty,
1196        .set_mctrl      = tegra_uart_set_mctrl,
1197        .get_mctrl      = tegra_uart_get_mctrl,
1198        .stop_tx        = tegra_uart_stop_tx,
1199        .start_tx       = tegra_uart_start_tx,
1200        .stop_rx        = tegra_uart_stop_rx,
1201        .flush_buffer   = tegra_uart_flush_buffer,
1202        .enable_ms      = tegra_uart_enable_ms,
1203        .break_ctl      = tegra_uart_break_ctl,
1204        .startup        = tegra_uart_startup,
1205        .shutdown       = tegra_uart_shutdown,
1206        .set_termios    = tegra_uart_set_termios,
1207        .type           = tegra_uart_type,
1208        .request_port   = tegra_uart_request_port,
1209        .release_port   = tegra_uart_release_port,
1210};
1211
1212static struct uart_driver tegra_uart_driver = {
1213        .owner          = THIS_MODULE,
1214        .driver_name    = "tegra_hsuart",
1215        .dev_name       = "ttyTHS",
1216        .cons           = NULL,
1217        .nr             = TEGRA_UART_MAXIMUM,
1218};
1219
1220static int tegra_uart_parse_dt(struct platform_device *pdev,
1221        struct tegra_uart_port *tup)
1222{
1223        struct device_node *np = pdev->dev.of_node;
1224        int port;
1225
1226        port = of_alias_get_id(np, "serial");
1227        if (port < 0) {
1228                dev_err(&pdev->dev, "failed to get alias id, errno %d\n", port);
1229                return port;
1230        }
1231        tup->uport.line = port;
1232
1233        tup->enable_modem_interrupt = of_property_read_bool(np,
1234                                        "nvidia,enable-modem-interrupt");
1235        return 0;
1236}
1237
1238static struct tegra_uart_chip_data tegra20_uart_chip_data = {
1239        .tx_fifo_full_status            = false,
1240        .allow_txfifo_reset_fifo_mode   = true,
1241        .support_clk_src_div            = false,
1242};
1243
1244static struct tegra_uart_chip_data tegra30_uart_chip_data = {
1245        .tx_fifo_full_status            = true,
1246        .allow_txfifo_reset_fifo_mode   = false,
1247        .support_clk_src_div            = true,
1248};
1249
1250static const struct of_device_id tegra_uart_of_match[] = {
1251        {
1252                .compatible     = "nvidia,tegra30-hsuart",
1253                .data           = &tegra30_uart_chip_data,
1254        }, {
1255                .compatible     = "nvidia,tegra20-hsuart",
1256                .data           = &tegra20_uart_chip_data,
1257        }, {
1258        },
1259};
1260MODULE_DEVICE_TABLE(of, tegra_uart_of_match);
1261
1262static int tegra_uart_probe(struct platform_device *pdev)
1263{
1264        struct tegra_uart_port *tup;
1265        struct uart_port *u;
1266        struct resource *resource;
1267        int ret;
1268        const struct tegra_uart_chip_data *cdata;
1269        const struct of_device_id *match;
1270
1271        match = of_match_device(tegra_uart_of_match, &pdev->dev);
1272        if (!match) {
1273                dev_err(&pdev->dev, "Error: No device match found\n");
1274                return -ENODEV;
1275        }
1276        cdata = match->data;
1277
1278        tup = devm_kzalloc(&pdev->dev, sizeof(*tup), GFP_KERNEL);
1279        if (!tup) {
1280                dev_err(&pdev->dev, "Failed to allocate memory for tup\n");
1281                return -ENOMEM;
1282        }
1283
1284        ret = tegra_uart_parse_dt(pdev, tup);
1285        if (ret < 0)
1286                return ret;
1287
1288        u = &tup->uport;
1289        u->dev = &pdev->dev;
1290        u->ops = &tegra_uart_ops;
1291        u->type = PORT_TEGRA;
1292        u->fifosize = 32;
1293        tup->cdata = cdata;
1294
1295        platform_set_drvdata(pdev, tup);
1296        resource = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1297        if (!resource) {
1298                dev_err(&pdev->dev, "No IO memory resource\n");
1299                return -ENODEV;
1300        }
1301
1302        u->mapbase = resource->start;
1303        u->membase = devm_ioremap_resource(&pdev->dev, resource);
1304        if (IS_ERR(u->membase))
1305                return PTR_ERR(u->membase);
1306
1307        tup->uart_clk = devm_clk_get(&pdev->dev, NULL);
1308        if (IS_ERR(tup->uart_clk)) {
1309                dev_err(&pdev->dev, "Couldn't get the clock\n");
1310                return PTR_ERR(tup->uart_clk);
1311        }
1312
1313        tup->rst = devm_reset_control_get_exclusive(&pdev->dev, "serial");
1314        if (IS_ERR(tup->rst)) {
1315                dev_err(&pdev->dev, "Couldn't get the reset\n");
1316                return PTR_ERR(tup->rst);
1317        }
1318
1319        u->iotype = UPIO_MEM32;
1320        ret = platform_get_irq(pdev, 0);
1321        if (ret < 0) {
1322                dev_err(&pdev->dev, "Couldn't get IRQ\n");
1323                return ret;
1324        }
1325        u->irq = ret;
1326        u->regshift = 2;
1327        ret = uart_add_one_port(&tegra_uart_driver, u);
1328        if (ret < 0) {
1329                dev_err(&pdev->dev, "Failed to add uart port, err %d\n", ret);
1330                return ret;
1331        }
1332        return ret;
1333}
1334
1335static int tegra_uart_remove(struct platform_device *pdev)
1336{
1337        struct tegra_uart_port *tup = platform_get_drvdata(pdev);
1338        struct uart_port *u = &tup->uport;
1339
1340        uart_remove_one_port(&tegra_uart_driver, u);
1341        return 0;
1342}
1343
1344#ifdef CONFIG_PM_SLEEP
1345static int tegra_uart_suspend(struct device *dev)
1346{
1347        struct tegra_uart_port *tup = dev_get_drvdata(dev);
1348        struct uart_port *u = &tup->uport;
1349
1350        return uart_suspend_port(&tegra_uart_driver, u);
1351}
1352
1353static int tegra_uart_resume(struct device *dev)
1354{
1355        struct tegra_uart_port *tup = dev_get_drvdata(dev);
1356        struct uart_port *u = &tup->uport;
1357
1358        return uart_resume_port(&tegra_uart_driver, u);
1359}
1360#endif
1361
1362static const struct dev_pm_ops tegra_uart_pm_ops = {
1363        SET_SYSTEM_SLEEP_PM_OPS(tegra_uart_suspend, tegra_uart_resume)
1364};
1365
1366static struct platform_driver tegra_uart_platform_driver = {
1367        .probe          = tegra_uart_probe,
1368        .remove         = tegra_uart_remove,
1369        .driver         = {
1370                .name   = "serial-tegra",
1371                .of_match_table = tegra_uart_of_match,
1372                .pm     = &tegra_uart_pm_ops,
1373        },
1374};
1375
1376static int __init tegra_uart_init(void)
1377{
1378        int ret;
1379
1380        ret = uart_register_driver(&tegra_uart_driver);
1381        if (ret < 0) {
1382                pr_err("Could not register %s driver\n",
1383                        tegra_uart_driver.driver_name);
1384                return ret;
1385        }
1386
1387        ret = platform_driver_register(&tegra_uart_platform_driver);
1388        if (ret < 0) {
1389                pr_err("Uart platform driver register failed, e = %d\n", ret);
1390                uart_unregister_driver(&tegra_uart_driver);
1391                return ret;
1392        }
1393        return 0;
1394}
1395
1396static void __exit tegra_uart_exit(void)
1397{
1398        pr_info("Unloading tegra uart driver\n");
1399        platform_driver_unregister(&tegra_uart_platform_driver);
1400        uart_unregister_driver(&tegra_uart_driver);
1401}
1402
1403module_init(tegra_uart_init);
1404module_exit(tegra_uart_exit);
1405
1406MODULE_ALIAS("platform:serial-tegra");
1407MODULE_DESCRIPTION("High speed UART driver for tegra chipset");
1408MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
1409MODULE_LICENSE("GPL v2");
1410