[PATCH v3] serial: samsung: use dma_ops of DMA if attached

Dan Carpenter dan.carpenter at oracle.com
Mon Jun 28 01:40:10 PDT 2021


Hi Tamseel,

url:    https://github.com/0day-ci/linux/commits/Tamseel-Shams/serial-samsung-use-dma_ops-of-DMA-if-attached/20210622-195936
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-testing
config: parisc-randconfig-m031-20210625 (attached as .config)
compiler: hppa-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp at intel.com>
Reported-by: Dan Carpenter <dan.carpenter at oracle.com>

New smatch warnings:
drivers/tty/serial/samsung_tty.c:347 s3c24xx_serial_tx_dma_complete() error: we previously assumed 'dma' could be null (see line 344)
drivers/tty/serial/samsung_tty.c:347 s3c24xx_serial_tx_dma_complete() error: we previously assumed 'dma->tx_chan' could be null (see line 344)
drivers/tty/serial/samsung_tty.c:458 s3c24xx_serial_start_tx_dma() error: we previously assumed 'dma' could be null (see line 452)
drivers/tty/serial/samsung_tty.c:538 s3c24xx_uart_copy_rx_to_tty() error: we previously assumed 'dma' could be null (see line 532)
drivers/tty/serial/samsung_tty.c:664 s3c64xx_start_rx_dma() error: we previously assumed 'dma' could be null (see line 661)
drivers/tty/serial/samsung_tty.c:1132 s3c24xx_serial_request_dma() warn: variable dereferenced before check 'dma' (see line 1077)

Old smatch warnings:
drivers/tty/serial/samsung_tty.c:2129 s3c24xx_serial_init_port() warn: missing error code 'ret'

vim +/dma +347 drivers/tty/serial/samsung_tty.c

29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  332  static void s3c24xx_serial_tx_dma_complete(void *args)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  333  {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  334  	struct s3c24xx_uart_port *ourport = args;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  335  	struct uart_port *port = &ourport->port;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  336  	struct circ_buf *xmit = &port->state->xmit;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  337  	struct s3c24xx_uart_dma *dma = ourport->dma;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  338  	struct dma_tx_state state;
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  339  	struct device *dma_map_ops_dev = ourport->port.dev;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  340  	unsigned long flags;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  341  	int count;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  342  
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  343  	/* Null pointer check for "dma" and "dma->tx_chan" */
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22 @344  	if (dma && dma->tx_chan)
                                                                                            ^^^
Check for NULL

36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  345  		dma_map_ops_dev = dma->tx_chan->device->dev;
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  346  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10 @347  	dmaengine_tx_status(dma->tx_chan, dma->tx_cookie, &state);
                                                                                                            ^^^^^^^^^^^^
Unchecked dereference

29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  348  	count = dma->tx_bytes_requested - state.residue;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  349  	async_tx_ack(dma->tx_desc);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  350  
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  351  	dma_sync_single_for_cpu(dma_map_ops_dev, dma->tx_transfer_addr,
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  352  				dma->tx_size, DMA_TO_DEVICE);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  353  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  354  	spin_lock_irqsave(&port->lock, flags);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  355  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  356  	xmit->tail = (xmit->tail + count) & (UART_XMIT_SIZE - 1);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  357  	port->icount.tx += count;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  358  	ourport->tx_in_progress = 0;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  359  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  360  	if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  361  		uart_write_wakeup(port);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  362  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  363  	s3c24xx_serial_start_next_tx(ourport);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  364  	spin_unlock_irqrestore(&port->lock, flags);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  365  }
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  366  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  367  static void enable_tx_dma(struct s3c24xx_uart_port *ourport)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  368  {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  369  	struct uart_port *port = &ourport->port;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  370  	u32 ucon;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  371  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  372  	/* Mask Tx interrupt */
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  373  	switch (ourport->info->type) {
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  374  	case TYPE_S3C6400:
bbb5ff91225dfb drivers/tty/serial/samsung.c     Matthew Leach       2016-06-22  375  		s3c24xx_set_bit(port, S3C64XX_UINTM_TXD, S3C64XX_UINTM);
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  376  		break;
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  377  	case TYPE_APPLE_S5L:
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  378  		WARN_ON(1); // No DMA
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  379  		break;
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  380  	default:
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  381  		disable_irq_nosync(ourport->tx_irq);
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  382  		break;
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  383  	}
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  384  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  385  	/* Enable tx dma mode */
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  386  	ucon = rd_regl(port, S3C2410_UCON);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  387  	ucon &= ~(S3C64XX_UCON_TXBURST_MASK | S3C64XX_UCON_TXMODE_MASK);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  388  	ucon |= (dma_get_cache_alignment() >= 16) ?
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  389  		S3C64XX_UCON_TXBURST_16 : S3C64XX_UCON_TXBURST_1;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  390  	ucon |= S3C64XX_UCON_TXMODE_DMA;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  391  	wr_regl(port,  S3C2410_UCON, ucon);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  392  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  393  	ourport->tx_mode = S3C24XX_TX_DMA;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  394  }
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  395  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  396  static void enable_tx_pio(struct s3c24xx_uart_port *ourport)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  397  {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  398  	struct uart_port *port = &ourport->port;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  399  	u32 ucon, ufcon;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  400  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  401  	/* Set ufcon txtrig */
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  402  	ourport->tx_in_progress = S3C24XX_TX_PIO;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  403  	ufcon = rd_regl(port, S3C2410_UFCON);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  404  	wr_regl(port,  S3C2410_UFCON, ufcon);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  405  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  406  	/* Enable tx pio mode */
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  407  	ucon = rd_regl(port, S3C2410_UCON);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  408  	ucon &= ~(S3C64XX_UCON_TXMODE_MASK);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  409  	ucon |= S3C64XX_UCON_TXMODE_CPU;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  410  	wr_regl(port,  S3C2410_UCON, ucon);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  411  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  412  	/* Unmask Tx interrupt */
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  413  	switch (ourport->info->type) {
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  414  	case TYPE_S3C6400:
bbb5ff91225dfb drivers/tty/serial/samsung.c     Matthew Leach       2016-06-22  415  		s3c24xx_clear_bit(port, S3C64XX_UINTM_TXD,
bbb5ff91225dfb drivers/tty/serial/samsung.c     Matthew Leach       2016-06-22  416  				  S3C64XX_UINTM);
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  417  		break;
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  418  	case TYPE_APPLE_S5L:
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  419  		ucon |= APPLE_S5L_UCON_TXTHRESH_ENA_MSK;
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  420  		wr_regl(port, S3C2410_UCON, ucon);
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  421  		break;
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  422  	default:
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  423  		enable_irq(ourport->tx_irq);
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  424  		break;
aaf144059ba474 drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  425  	}
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  426  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  427  	ourport->tx_mode = S3C24XX_TX_PIO;
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  428  
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  429  	/*
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  430  	 * The Apple version only has edge triggered TX IRQs, so we need
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  431  	 * to kick off the process by sending some characters here.
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  432  	 */
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  433  	if (ourport->info->type == TYPE_APPLE_S5L)
fcbba344907afe drivers/tty/serial/samsung_tty.c Hector Martin       2021-03-05  434  		s3c24xx_serial_tx_chars(ourport);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  435  }
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  436  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  437  static void s3c24xx_serial_start_tx_pio(struct s3c24xx_uart_port *ourport)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  438  {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  439  	if (ourport->tx_mode != S3C24XX_TX_PIO)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  440  		enable_tx_pio(ourport);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  441  }
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  442  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  443  static int s3c24xx_serial_start_tx_dma(struct s3c24xx_uart_port *ourport,
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  444  				      unsigned int count)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  445  {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  446  	struct uart_port *port = &ourport->port;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  447  	struct circ_buf *xmit = &port->state->xmit;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  448  	struct s3c24xx_uart_dma *dma = ourport->dma;
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  449  	struct device *dma_map_ops_dev = ourport->port.dev;
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  450  
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  451  	/* Null pointer check for "dma" and "dma->tx_chan" */
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22 @452  	if (dma && dma->tx_chan)
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  453  		dma_map_ops_dev = dma->tx_chan->device->dev;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  454  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  455  	if (ourport->tx_mode != S3C24XX_TX_DMA)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  456  		enable_tx_dma(ourport);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  457  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10 @458  	dma->tx_size = count & ~(dma_get_cache_alignment() - 1);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  459  	dma->tx_transfer_addr = dma->tx_addr + xmit->tail;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  460  
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  461  	dma_sync_single_for_device(dma_map_ops_dev, dma->tx_transfer_addr,
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  462  				dma->tx_size, DMA_TO_DEVICE);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  463  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  464  	dma->tx_desc = dmaengine_prep_slave_single(dma->tx_chan,
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  465  				dma->tx_transfer_addr, dma->tx_size,
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  466  				DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  467  	if (!dma->tx_desc) {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  468  		dev_err(ourport->port.dev, "Unable to get desc for Tx\n");
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  469  		return -EIO;
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  470  	}
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  471  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  472  	dma->tx_desc->callback = s3c24xx_serial_tx_dma_complete;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  473  	dma->tx_desc->callback_param = ourport;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  474  	dma->tx_bytes_requested = dma->tx_size;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  475  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  476  	ourport->tx_in_progress = S3C24XX_TX_DMA;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  477  	dma->tx_cookie = dmaengine_submit(dma->tx_desc);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  478  	dma_async_issue_pending(dma->tx_chan);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  479  	return 0;
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  480  }
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  481  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  482  static void s3c24xx_serial_start_next_tx(struct s3c24xx_uart_port *ourport)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  483  {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  484  	struct uart_port *port = &ourport->port;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  485  	struct circ_buf *xmit = &port->state->xmit;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  486  	unsigned long count;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  487  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  488  	/* Get data size up to the end of buffer */
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  489  	count = CIRC_CNT_TO_END(xmit->head, xmit->tail, UART_XMIT_SIZE);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  490  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  491  	if (!count) {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  492  		s3c24xx_serial_stop_tx(port);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  493  		return;
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  494  	}
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  495  
81ccb2a69f76b8 drivers/tty/serial/samsung.c     Marek Szyprowski    2015-07-31  496  	if (!ourport->dma || !ourport->dma->tx_chan ||
736cd79f483fd7 drivers/tty/serial/samsung.c     Robert Baldyga      2015-07-31  497  	    count < ourport->min_dma_size ||
736cd79f483fd7 drivers/tty/serial/samsung.c     Robert Baldyga      2015-07-31  498  	    xmit->tail & (dma_get_cache_alignment() - 1))
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  499  		s3c24xx_serial_start_tx_pio(ourport);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  500  	else
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  501  		s3c24xx_serial_start_tx_dma(ourport, count);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  502  }
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  503  
75781979f8d33e drivers/tty/serial/samsung.c     Krzysztof Kozlowski 2015-05-02  504  static void s3c24xx_serial_start_tx(struct uart_port *port)
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  505  {
b73c289cc90138 drivers/serial/samsung.c         Ben Dooks           2008-10-21  506  	struct s3c24xx_uart_port *ourport = to_ourport(port);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  507  	struct circ_buf *xmit = &port->state->xmit;
b73c289cc90138 drivers/serial/samsung.c         Ben Dooks           2008-10-21  508  
8336240ebb248b drivers/tty/serial/samsung_tty.c Greg Kroah-Hartman  2019-12-17  509  	if (!ourport->tx_enabled) {
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  510  		if (port->flags & UPF_CONS_FLOW)
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  511  			s3c24xx_serial_rx_disable(port);
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  512  
8336240ebb248b drivers/tty/serial/samsung_tty.c Greg Kroah-Hartman  2019-12-17  513  		ourport->tx_enabled = 1;
ba019a3e2ad53d drivers/tty/serial/samsung.c     Robert Baldyga      2015-01-28  514  		if (!ourport->dma || !ourport->dma->tx_chan)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  515  			s3c24xx_serial_start_tx_pio(ourport);
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  516  	}
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  517  
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  518  	if (ourport->dma && ourport->dma->tx_chan) {
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  519  		if (!uart_circ_empty(xmit) && !ourport->tx_in_progress)
29bef79908459d drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  520  			s3c24xx_serial_start_next_tx(ourport);
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  521  	}
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  522  }
b497549a035c2a drivers/serial/samsung.c         Ben Dooks           2008-07-03  523  
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  524  static void s3c24xx_uart_copy_rx_to_tty(struct s3c24xx_uart_port *ourport,
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  525  		struct tty_port *tty, int count)
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  526  {
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  527  	struct s3c24xx_uart_dma *dma = ourport->dma;
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  528  	struct device *dma_map_ops_dev = ourport->port.dev;
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  529  	int copied;
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  530  
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  531  	/* Null pointer check for "dma" and "dma->rx_chan" */
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22 @532  	if (dma && dma->rx_chan)
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  533  		dma_map_ops_dev = dma->rx_chan->device->dev;
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22  534  
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  535  	if (!count)
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  536  		return;
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  537  
36f392dcc64c96 drivers/tty/serial/samsung_tty.c Tamseel Shams       2021-06-22 @538  	dma_sync_single_for_cpu(dma_map_ops_dev, dma->rx_addr,
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  539  				dma->rx_size, DMA_FROM_DEVICE);
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  540  
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  541  	ourport->port.icount.rx += count;
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  542  	if (!tty) {
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  543  		dev_err(ourport->port.dev, "No tty port\n");
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  544  		return;
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  545  	}
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  546  	copied = tty_insert_flip_string(tty,
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  547  			((unsigned char *)(ourport->dma->rx_buf)), count);
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  548  	if (copied != count) {
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  549  		WARN_ON(1);
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  550  		dev_err(ourport->port.dev, "RxData copy to tty layer failed\n");
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  551  	}
b543c301c2c5fb drivers/tty/serial/samsung.c     Robert Baldyga      2014-12-10  552  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org




More information about the linux-arm-kernel mailing list