tspi              227 drivers/spi/spi-tegra114.c static inline u32 tegra_spi_readl(struct tegra_spi_data *tspi,
tspi              230 drivers/spi/spi-tegra114.c 	return readl(tspi->base + reg);
tspi              233 drivers/spi/spi-tegra114.c static inline void tegra_spi_writel(struct tegra_spi_data *tspi,
tspi              236 drivers/spi/spi-tegra114.c 	writel(val, tspi->base + reg);
tspi              240 drivers/spi/spi-tegra114.c 		readl(tspi->base + SPI_COMMAND1);
tspi              243 drivers/spi/spi-tegra114.c static void tegra_spi_clear_status(struct tegra_spi_data *tspi)
tspi              248 drivers/spi/spi-tegra114.c 	val = tegra_spi_readl(tspi, SPI_TRANS_STATUS);
tspi              249 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_TRANS_STATUS);
tspi              252 drivers/spi/spi-tegra114.c 	val = tegra_spi_readl(tspi, SPI_FIFO_STATUS);
tspi              254 drivers/spi/spi-tegra114.c 		tegra_spi_writel(tspi, SPI_ERR | SPI_FIFO_ERROR,
tspi              259 drivers/spi/spi-tegra114.c 	struct spi_device *spi, struct tegra_spi_data *tspi,
tspi              262 drivers/spi/spi-tegra114.c 	unsigned remain_len = t->len - tspi->cur_pos;
tspi              268 drivers/spi/spi-tegra114.c 	tspi->bytes_per_word = DIV_ROUND_UP(bits_per_word, 8);
tspi              272 drivers/spi/spi-tegra114.c 		tspi->is_packed = 1;
tspi              273 drivers/spi/spi-tegra114.c 		tspi->words_per_32bit = 32/bits_per_word;
tspi              275 drivers/spi/spi-tegra114.c 		tspi->is_packed = 0;
tspi              276 drivers/spi/spi-tegra114.c 		tspi->words_per_32bit = 1;
tspi              279 drivers/spi/spi-tegra114.c 	if (tspi->is_packed) {
tspi              280 drivers/spi/spi-tegra114.c 		max_len = min(remain_len, tspi->max_buf_size);
tspi              281 drivers/spi/spi-tegra114.c 		tspi->curr_dma_words = max_len/tspi->bytes_per_word;
tspi              284 drivers/spi/spi-tegra114.c 		max_word = (remain_len - 1) / tspi->bytes_per_word + 1;
tspi              285 drivers/spi/spi-tegra114.c 		max_word = min(max_word, tspi->max_buf_size/4);
tspi              286 drivers/spi/spi-tegra114.c 		tspi->curr_dma_words = max_word;
tspi              293 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi, struct spi_transfer *t)
tspi              302 drivers/spi/spi-tegra114.c 	u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;
tspi              304 drivers/spi/spi-tegra114.c 	fifo_status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);
tspi              307 drivers/spi/spi-tegra114.c 	if (tspi->is_packed) {
tspi              308 drivers/spi/spi-tegra114.c 		fifo_words_left = tx_empty_count * tspi->words_per_32bit;
tspi              309 drivers/spi/spi-tegra114.c 		written_words = min(fifo_words_left, tspi->curr_dma_words);
tspi              310 drivers/spi/spi-tegra114.c 		nbytes = written_words * tspi->bytes_per_word;
tspi              317 drivers/spi/spi-tegra114.c 			tegra_spi_writel(tspi, x, SPI_TX_FIFO);
tspi              320 drivers/spi/spi-tegra114.c 		tspi->cur_tx_pos += written_words * tspi->bytes_per_word;
tspi              323 drivers/spi/spi-tegra114.c 		max_n_32bit = min(tspi->curr_dma_words,  tx_empty_count);
tspi              325 drivers/spi/spi-tegra114.c 		nbytes = written_words * tspi->bytes_per_word;
tspi              326 drivers/spi/spi-tegra114.c 		if (nbytes > t->len - tspi->cur_pos)
tspi              327 drivers/spi/spi-tegra114.c 			nbytes = t->len - tspi->cur_pos;
tspi              332 drivers/spi/spi-tegra114.c 			for (i = 0; nbytes && (i < tspi->bytes_per_word);
tspi              335 drivers/spi/spi-tegra114.c 			tegra_spi_writel(tspi, x, SPI_TX_FIFO);
tspi              338 drivers/spi/spi-tegra114.c 		tspi->cur_tx_pos += write_bytes;
tspi              345 drivers/spi/spi-tegra114.c 		struct tegra_spi_data *tspi, struct spi_transfer *t)
tspi              352 drivers/spi/spi-tegra114.c 	u8 *rx_buf = (u8 *)t->rx_buf + tspi->cur_rx_pos;
tspi              354 drivers/spi/spi-tegra114.c 	fifo_status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);
tspi              356 drivers/spi/spi-tegra114.c 	if (tspi->is_packed) {
tspi              357 drivers/spi/spi-tegra114.c 		len = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              359 drivers/spi/spi-tegra114.c 			u32 x = tegra_spi_readl(tspi, SPI_RX_FIFO);
tspi              364 drivers/spi/spi-tegra114.c 		read_words += tspi->curr_dma_words;
tspi              365 drivers/spi/spi-tegra114.c 		tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
tspi              368 drivers/spi/spi-tegra114.c 		u8 bytes_per_word = tspi->bytes_per_word;
tspi              372 drivers/spi/spi-tegra114.c 		if (len > t->len - tspi->cur_pos)
tspi              373 drivers/spi/spi-tegra114.c 			len = t->len - tspi->cur_pos;
tspi              376 drivers/spi/spi-tegra114.c 			u32 x = tegra_spi_readl(tspi, SPI_RX_FIFO) & rx_mask;
tspi              382 drivers/spi/spi-tegra114.c 		tspi->cur_rx_pos += read_bytes;
tspi              389 drivers/spi/spi-tegra114.c 		struct tegra_spi_data *tspi, struct spi_transfer *t)
tspi              392 drivers/spi/spi-tegra114.c 	dma_sync_single_for_cpu(tspi->dev, tspi->tx_dma_phys,
tspi              393 drivers/spi/spi-tegra114.c 				tspi->dma_buf_size, DMA_TO_DEVICE);
tspi              395 drivers/spi/spi-tegra114.c 	if (tspi->is_packed) {
tspi              396 drivers/spi/spi-tegra114.c 		unsigned len = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              398 drivers/spi/spi-tegra114.c 		memcpy(tspi->tx_dma_buf, t->tx_buf + tspi->cur_pos, len);
tspi              399 drivers/spi/spi-tegra114.c 		tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
tspi              403 drivers/spi/spi-tegra114.c 		u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;
tspi              404 drivers/spi/spi-tegra114.c 		unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              407 drivers/spi/spi-tegra114.c 		if (consume > t->len - tspi->cur_pos)
tspi              408 drivers/spi/spi-tegra114.c 			consume = t->len - tspi->cur_pos;
tspi              410 drivers/spi/spi-tegra114.c 		for (count = 0; count < tspi->curr_dma_words; count++) {
tspi              413 drivers/spi/spi-tegra114.c 			for (i = 0; consume && (i < tspi->bytes_per_word);
tspi              416 drivers/spi/spi-tegra114.c 			tspi->tx_dma_buf[count] = x;
tspi              419 drivers/spi/spi-tegra114.c 		tspi->cur_tx_pos += write_bytes;
tspi              423 drivers/spi/spi-tegra114.c 	dma_sync_single_for_device(tspi->dev, tspi->tx_dma_phys,
tspi              424 drivers/spi/spi-tegra114.c 				tspi->dma_buf_size, DMA_TO_DEVICE);
tspi              428 drivers/spi/spi-tegra114.c 		struct tegra_spi_data *tspi, struct spi_transfer *t)
tspi              431 drivers/spi/spi-tegra114.c 	dma_sync_single_for_cpu(tspi->dev, tspi->rx_dma_phys,
tspi              432 drivers/spi/spi-tegra114.c 		tspi->dma_buf_size, DMA_FROM_DEVICE);
tspi              434 drivers/spi/spi-tegra114.c 	if (tspi->is_packed) {
tspi              435 drivers/spi/spi-tegra114.c 		unsigned len = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              437 drivers/spi/spi-tegra114.c 		memcpy(t->rx_buf + tspi->cur_rx_pos, tspi->rx_dma_buf, len);
tspi              438 drivers/spi/spi-tegra114.c 		tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
tspi              442 drivers/spi/spi-tegra114.c 		unsigned char *rx_buf = t->rx_buf + tspi->cur_rx_pos;
tspi              444 drivers/spi/spi-tegra114.c 		unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              447 drivers/spi/spi-tegra114.c 		if (consume > t->len - tspi->cur_pos)
tspi              448 drivers/spi/spi-tegra114.c 			consume = t->len - tspi->cur_pos;
tspi              450 drivers/spi/spi-tegra114.c 		for (count = 0; count < tspi->curr_dma_words; count++) {
tspi              451 drivers/spi/spi-tegra114.c 			u32 x = tspi->rx_dma_buf[count] & rx_mask;
tspi              453 drivers/spi/spi-tegra114.c 			for (i = 0; consume && (i < tspi->bytes_per_word);
tspi              458 drivers/spi/spi-tegra114.c 		tspi->cur_rx_pos += read_bytes;
tspi              462 drivers/spi/spi-tegra114.c 	dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,
tspi              463 drivers/spi/spi-tegra114.c 		tspi->dma_buf_size, DMA_FROM_DEVICE);
tspi              473 drivers/spi/spi-tegra114.c static int tegra_spi_start_tx_dma(struct tegra_spi_data *tspi, int len)
tspi              475 drivers/spi/spi-tegra114.c 	reinit_completion(&tspi->tx_dma_complete);
tspi              476 drivers/spi/spi-tegra114.c 	tspi->tx_dma_desc = dmaengine_prep_slave_single(tspi->tx_dma_chan,
tspi              477 drivers/spi/spi-tegra114.c 				tspi->tx_dma_phys, len, DMA_MEM_TO_DEV,
tspi              479 drivers/spi/spi-tegra114.c 	if (!tspi->tx_dma_desc) {
tspi              480 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "Not able to get desc for Tx\n");
tspi              484 drivers/spi/spi-tegra114.c 	tspi->tx_dma_desc->callback = tegra_spi_dma_complete;
tspi              485 drivers/spi/spi-tegra114.c 	tspi->tx_dma_desc->callback_param = &tspi->tx_dma_complete;
tspi              487 drivers/spi/spi-tegra114.c 	dmaengine_submit(tspi->tx_dma_desc);
tspi              488 drivers/spi/spi-tegra114.c 	dma_async_issue_pending(tspi->tx_dma_chan);
tspi              492 drivers/spi/spi-tegra114.c static int tegra_spi_start_rx_dma(struct tegra_spi_data *tspi, int len)
tspi              494 drivers/spi/spi-tegra114.c 	reinit_completion(&tspi->rx_dma_complete);
tspi              495 drivers/spi/spi-tegra114.c 	tspi->rx_dma_desc = dmaengine_prep_slave_single(tspi->rx_dma_chan,
tspi              496 drivers/spi/spi-tegra114.c 				tspi->rx_dma_phys, len, DMA_DEV_TO_MEM,
tspi              498 drivers/spi/spi-tegra114.c 	if (!tspi->rx_dma_desc) {
tspi              499 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "Not able to get desc for Rx\n");
tspi              503 drivers/spi/spi-tegra114.c 	tspi->rx_dma_desc->callback = tegra_spi_dma_complete;
tspi              504 drivers/spi/spi-tegra114.c 	tspi->rx_dma_desc->callback_param = &tspi->rx_dma_complete;
tspi              506 drivers/spi/spi-tegra114.c 	dmaengine_submit(tspi->rx_dma_desc);
tspi              507 drivers/spi/spi-tegra114.c 	dma_async_issue_pending(tspi->rx_dma_chan);
tspi              511 drivers/spi/spi-tegra114.c static int tegra_spi_flush_fifos(struct tegra_spi_data *tspi)
tspi              516 drivers/spi/spi-tegra114.c 	status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);
tspi              519 drivers/spi/spi-tegra114.c 		tegra_spi_writel(tspi, status, SPI_FIFO_STATUS);
tspi              521 drivers/spi/spi-tegra114.c 			status = tegra_spi_readl(tspi, SPI_FIFO_STATUS);
tspi              523 drivers/spi/spi-tegra114.c 				dev_err(tspi->dev,
tspi              536 drivers/spi/spi-tegra114.c 		struct tegra_spi_data *tspi, struct spi_transfer *t)
tspi              544 drivers/spi/spi-tegra114.c 	val = SPI_DMA_BLK_SET(tspi->curr_dma_words - 1);
tspi              545 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_DMA_BLK);
tspi              547 drivers/spi/spi-tegra114.c 	if (tspi->is_packed)
tspi              548 drivers/spi/spi-tegra114.c 		len = DIV_ROUND_UP(tspi->curr_dma_words * tspi->bytes_per_word,
tspi              551 drivers/spi/spi-tegra114.c 		len = tspi->curr_dma_words * 4;
tspi              565 drivers/spi/spi-tegra114.c 	if (!tspi->soc_data->has_intr_mask_reg) {
tspi              566 drivers/spi/spi-tegra114.c 		if (tspi->cur_direction & DATA_DIR_TX)
tspi              569 drivers/spi/spi-tegra114.c 		if (tspi->cur_direction & DATA_DIR_RX)
tspi              573 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_DMA_CTL);
tspi              574 drivers/spi/spi-tegra114.c 	tspi->dma_control_reg = val;
tspi              577 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX) {
tspi              578 drivers/spi/spi-tegra114.c 		dma_sconfig.dst_addr = tspi->phys + SPI_TX_FIFO;
tspi              581 drivers/spi/spi-tegra114.c 		ret = dmaengine_slave_config(tspi->tx_dma_chan, &dma_sconfig);
tspi              583 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi              588 drivers/spi/spi-tegra114.c 		tegra_spi_copy_client_txbuf_to_spi_txbuf(tspi, t);
tspi              589 drivers/spi/spi-tegra114.c 		ret = tegra_spi_start_tx_dma(tspi, len);
tspi              591 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi              597 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_RX) {
tspi              598 drivers/spi/spi-tegra114.c 		dma_sconfig.src_addr = tspi->phys + SPI_RX_FIFO;
tspi              601 drivers/spi/spi-tegra114.c 		ret = dmaengine_slave_config(tspi->rx_dma_chan, &dma_sconfig);
tspi              603 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi              609 drivers/spi/spi-tegra114.c 		dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,
tspi              610 drivers/spi/spi-tegra114.c 				tspi->dma_buf_size, DMA_FROM_DEVICE);
tspi              612 drivers/spi/spi-tegra114.c 		ret = tegra_spi_start_rx_dma(tspi, len);
tspi              614 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi              616 drivers/spi/spi-tegra114.c 			if (tspi->cur_direction & DATA_DIR_TX)
tspi              617 drivers/spi/spi-tegra114.c 				dmaengine_terminate_all(tspi->tx_dma_chan);
tspi              621 drivers/spi/spi-tegra114.c 	tspi->is_curr_dma_xfer = true;
tspi              622 drivers/spi/spi-tegra114.c 	tspi->dma_control_reg = val;
tspi              625 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_DMA_CTL);
tspi              630 drivers/spi/spi-tegra114.c 		struct tegra_spi_data *tspi, struct spi_transfer *t)
tspi              635 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              636 drivers/spi/spi-tegra114.c 		cur_words = tegra_spi_fill_tx_fifo_from_client_txbuf(tspi, t);
tspi              638 drivers/spi/spi-tegra114.c 		cur_words = tspi->curr_dma_words;
tspi              641 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_DMA_BLK);
tspi              644 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              647 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi              650 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_DMA_CTL);
tspi              651 drivers/spi/spi-tegra114.c 	tspi->dma_control_reg = val;
tspi              653 drivers/spi/spi-tegra114.c 	tspi->is_curr_dma_xfer = false;
tspi              655 drivers/spi/spi-tegra114.c 	val = tspi->command1_reg;
tspi              657 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, val, SPI_COMMAND1);
tspi              661 drivers/spi/spi-tegra114.c static int tegra_spi_init_dma_param(struct tegra_spi_data *tspi,
tspi              669 drivers/spi/spi-tegra114.c 	dma_chan = dma_request_slave_channel_reason(tspi->dev,
tspi              674 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi              679 drivers/spi/spi-tegra114.c 	dma_buf = dma_alloc_coherent(tspi->dev, tspi->dma_buf_size,
tspi              682 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, " Not able to allocate the dma buffer\n");
tspi              688 drivers/spi/spi-tegra114.c 		tspi->rx_dma_chan = dma_chan;
tspi              689 drivers/spi/spi-tegra114.c 		tspi->rx_dma_buf = dma_buf;
tspi              690 drivers/spi/spi-tegra114.c 		tspi->rx_dma_phys = dma_phys;
tspi              692 drivers/spi/spi-tegra114.c 		tspi->tx_dma_chan = dma_chan;
tspi              693 drivers/spi/spi-tegra114.c 		tspi->tx_dma_buf = dma_buf;
tspi              694 drivers/spi/spi-tegra114.c 		tspi->tx_dma_phys = dma_phys;
tspi              699 drivers/spi/spi-tegra114.c static void tegra_spi_deinit_dma_param(struct tegra_spi_data *tspi,
tspi              707 drivers/spi/spi-tegra114.c 		dma_buf = tspi->rx_dma_buf;
tspi              708 drivers/spi/spi-tegra114.c 		dma_chan = tspi->rx_dma_chan;
tspi              709 drivers/spi/spi-tegra114.c 		dma_phys = tspi->rx_dma_phys;
tspi              710 drivers/spi/spi-tegra114.c 		tspi->rx_dma_chan = NULL;
tspi              711 drivers/spi/spi-tegra114.c 		tspi->rx_dma_buf = NULL;
tspi              713 drivers/spi/spi-tegra114.c 		dma_buf = tspi->tx_dma_buf;
tspi              714 drivers/spi/spi-tegra114.c 		dma_chan = tspi->tx_dma_chan;
tspi              715 drivers/spi/spi-tegra114.c 		dma_phys = tspi->tx_dma_phys;
tspi              716 drivers/spi/spi-tegra114.c 		tspi->tx_dma_buf = NULL;
tspi              717 drivers/spi/spi-tegra114.c 		tspi->tx_dma_chan = NULL;
tspi              722 drivers/spi/spi-tegra114.c 	dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys);
tspi              729 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master);
tspi              739 drivers/spi/spi-tegra114.c 		spi_cs_timing = SPI_CS_SETUP_HOLD(tspi->spi_cs_timing1,
tspi              742 drivers/spi/spi-tegra114.c 		if (tspi->spi_cs_timing1 != spi_cs_timing) {
tspi              743 drivers/spi/spi-tegra114.c 			tspi->spi_cs_timing1 = spi_cs_timing;
tspi              744 drivers/spi/spi-tegra114.c 			tegra_spi_writel(tspi, spi_cs_timing, SPI_CS_TIMING1);
tspi              752 drivers/spi/spi-tegra114.c 	spi_cs_timing = tspi->spi_cs_timing2;
tspi              757 drivers/spi/spi-tegra114.c 	if (tspi->spi_cs_timing2 != spi_cs_timing) {
tspi              758 drivers/spi/spi-tegra114.c 		tspi->spi_cs_timing2 = spi_cs_timing;
tspi              759 drivers/spi/spi-tegra114.c 		tegra_spi_writel(tspi, spi_cs_timing, SPI_CS_TIMING2);
tspi              768 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master);
tspi              776 drivers/spi/spi-tegra114.c 	if (speed != tspi->cur_speed) {
tspi              777 drivers/spi/spi-tegra114.c 		clk_set_rate(tspi->clk, speed);
tspi              778 drivers/spi/spi-tegra114.c 		tspi->cur_speed = speed;
tspi              781 drivers/spi/spi-tegra114.c 	tspi->cur_spi = spi;
tspi              782 drivers/spi/spi-tegra114.c 	tspi->cur_pos = 0;
tspi              783 drivers/spi/spi-tegra114.c 	tspi->cur_rx_pos = 0;
tspi              784 drivers/spi/spi-tegra114.c 	tspi->cur_tx_pos = 0;
tspi              785 drivers/spi/spi-tegra114.c 	tspi->curr_xfer = t;
tspi              788 drivers/spi/spi-tegra114.c 		tegra_spi_clear_status(tspi);
tspi              790 drivers/spi/spi-tegra114.c 		command1 = tspi->def_command1_reg;
tspi              814 drivers/spi/spi-tegra114.c 		if (tspi->cs_control) {
tspi              815 drivers/spi/spi-tegra114.c 			if (tspi->cs_control != spi)
tspi              816 drivers/spi/spi-tegra114.c 				tegra_spi_writel(tspi, command1, SPI_COMMAND1);
tspi              817 drivers/spi/spi-tegra114.c 			tspi->cs_control = NULL;
tspi              819 drivers/spi/spi-tegra114.c 			tegra_spi_writel(tspi, command1, SPI_COMMAND1);
tspi              826 drivers/spi/spi-tegra114.c 			tspi->use_hw_based_cs = true;
tspi              829 drivers/spi/spi-tegra114.c 			tspi->use_hw_based_cs = false;
tspi              837 drivers/spi/spi-tegra114.c 		if (tspi->last_used_cs != spi->chip_select) {
tspi              844 drivers/spi/spi-tegra114.c 			if (command2 != tspi->def_command2_reg)
tspi              845 drivers/spi/spi-tegra114.c 				tegra_spi_writel(tspi, command2, SPI_COMMAND2);
tspi              846 drivers/spi/spi-tegra114.c 			tspi->last_used_cs = spi->chip_select;
tspi              850 drivers/spi/spi-tegra114.c 		command1 = tspi->command1_reg;
tspi              861 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master);
tspi              865 drivers/spi/spi-tegra114.c 	total_fifo_words = tegra_spi_calculate_curr_xfer_param(spi, tspi, t);
tspi              872 drivers/spi/spi-tegra114.c 	if (tspi->is_packed)
tspi              878 drivers/spi/spi-tegra114.c 	tspi->cur_direction = 0;
tspi              881 drivers/spi/spi-tegra114.c 		tspi->cur_direction |= DATA_DIR_RX;
tspi              885 drivers/spi/spi-tegra114.c 		tspi->cur_direction |= DATA_DIR_TX;
tspi              888 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, command1, SPI_COMMAND1);
tspi              889 drivers/spi/spi-tegra114.c 	tspi->command1_reg = command1;
tspi              891 drivers/spi/spi-tegra114.c 	dev_dbg(tspi->dev, "The def 0x%x and written 0x%x\n",
tspi              892 drivers/spi/spi-tegra114.c 		tspi->def_command1_reg, (unsigned)command1);
tspi              894 drivers/spi/spi-tegra114.c 	ret = tegra_spi_flush_fifos(tspi);
tspi              898 drivers/spi/spi-tegra114.c 		ret = tegra_spi_start_dma_based_transfer(tspi, t);
tspi              900 drivers/spi/spi-tegra114.c 		ret = tegra_spi_start_cpu_based_transfer(tspi, t);
tspi              938 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master);
tspi              955 drivers/spi/spi-tegra114.c 	ret = pm_runtime_get_sync(tspi->dev);
tspi              957 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret);
tspi              963 drivers/spi/spi-tegra114.c 	if (tspi->soc_data->has_intr_mask_reg) {
tspi              964 drivers/spi/spi-tegra114.c 		val = tegra_spi_readl(tspi, SPI_INTR_MASK);
tspi              966 drivers/spi/spi-tegra114.c 		tegra_spi_writel(tspi, val, SPI_INTR_MASK);
tspi              969 drivers/spi/spi-tegra114.c 	spin_lock_irqsave(&tspi->lock, flags);
tspi              974 drivers/spi/spi-tegra114.c 	val = tspi->def_command1_reg;
tspi              979 drivers/spi/spi-tegra114.c 	tspi->def_command1_reg = val;
tspi              980 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1);
tspi              981 drivers/spi/spi-tegra114.c 	spin_unlock_irqrestore(&tspi->lock, flags);
tspi              983 drivers/spi/spi-tegra114.c 	pm_runtime_put(tspi->dev);
tspi             1000 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(spi->master);
tspi             1007 drivers/spi/spi-tegra114.c 	if (!tspi->use_hw_based_cs) {
tspi             1009 drivers/spi/spi-tegra114.c 			tspi->command1_reg |= SPI_CS_SW_VAL;
tspi             1011 drivers/spi/spi-tegra114.c 			tspi->command1_reg &= ~SPI_CS_SW_VAL;
tspi             1012 drivers/spi/spi-tegra114.c 		tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1);
tspi             1015 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1);
tspi             1018 drivers/spi/spi-tegra114.c static void tegra_spi_dump_regs(struct tegra_spi_data *tspi)
tspi             1020 drivers/spi/spi-tegra114.c 	dev_dbg(tspi->dev, "============ SPI REGISTER DUMP ============\n");
tspi             1021 drivers/spi/spi-tegra114.c 	dev_dbg(tspi->dev, "Command1:    0x%08x | Command2:    0x%08x\n",
tspi             1022 drivers/spi/spi-tegra114.c 		tegra_spi_readl(tspi, SPI_COMMAND1),
tspi             1023 drivers/spi/spi-tegra114.c 		tegra_spi_readl(tspi, SPI_COMMAND2));
tspi             1024 drivers/spi/spi-tegra114.c 	dev_dbg(tspi->dev, "DMA_CTL:     0x%08x | DMA_BLK:     0x%08x\n",
tspi             1025 drivers/spi/spi-tegra114.c 		tegra_spi_readl(tspi, SPI_DMA_CTL),
tspi             1026 drivers/spi/spi-tegra114.c 		tegra_spi_readl(tspi, SPI_DMA_BLK));
tspi             1027 drivers/spi/spi-tegra114.c 	dev_dbg(tspi->dev, "TRANS_STAT:  0x%08x | FIFO_STATUS: 0x%08x\n",
tspi             1028 drivers/spi/spi-tegra114.c 		tegra_spi_readl(tspi, SPI_TRANS_STATUS),
tspi             1029 drivers/spi/spi-tegra114.c 		tegra_spi_readl(tspi, SPI_FIFO_STATUS));
tspi             1036 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(master);
tspi             1050 drivers/spi/spi-tegra114.c 		reinit_completion(&tspi->xfer_completion);
tspi             1063 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi             1069 drivers/spi/spi-tegra114.c 		ret = wait_for_completion_timeout(&tspi->xfer_completion,
tspi             1072 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev,
tspi             1074 drivers/spi/spi-tegra114.c 			if (tspi->is_curr_dma_xfer &&
tspi             1075 drivers/spi/spi-tegra114.c 			    (tspi->cur_direction & DATA_DIR_TX))
tspi             1076 drivers/spi/spi-tegra114.c 				dmaengine_terminate_all(tspi->tx_dma_chan);
tspi             1077 drivers/spi/spi-tegra114.c 			if (tspi->is_curr_dma_xfer &&
tspi             1078 drivers/spi/spi-tegra114.c 			    (tspi->cur_direction & DATA_DIR_RX))
tspi             1079 drivers/spi/spi-tegra114.c 				dmaengine_terminate_all(tspi->rx_dma_chan);
tspi             1081 drivers/spi/spi-tegra114.c 			tegra_spi_dump_regs(tspi);
tspi             1082 drivers/spi/spi-tegra114.c 			tegra_spi_flush_fifos(tspi);
tspi             1083 drivers/spi/spi-tegra114.c 			reset_control_assert(tspi->rst);
tspi             1085 drivers/spi/spi-tegra114.c 			reset_control_deassert(tspi->rst);
tspi             1086 drivers/spi/spi-tegra114.c 			tspi->last_used_cs = master->num_chipselect + 1;
tspi             1090 drivers/spi/spi-tegra114.c 		if (tspi->tx_status ||  tspi->rx_status) {
tspi             1091 drivers/spi/spi-tegra114.c 			dev_err(tspi->dev, "Error in Transfer\n");
tspi             1093 drivers/spi/spi-tegra114.c 			tegra_spi_dump_regs(tspi);
tspi             1106 drivers/spi/spi-tegra114.c 				tspi->cs_control = spi;
tspi             1124 drivers/spi/spi-tegra114.c static irqreturn_t handle_cpu_based_xfer(struct tegra_spi_data *tspi)
tspi             1126 drivers/spi/spi-tegra114.c 	struct spi_transfer *t = tspi->curr_xfer;
tspi             1129 drivers/spi/spi-tegra114.c 	spin_lock_irqsave(&tspi->lock, flags);
tspi             1130 drivers/spi/spi-tegra114.c 	if (tspi->tx_status ||  tspi->rx_status) {
tspi             1131 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "CpuXfer ERROR bit set 0x%x\n",
tspi             1132 drivers/spi/spi-tegra114.c 			tspi->status_reg);
tspi             1133 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "CpuXfer 0x%08x:0x%08x\n",
tspi             1134 drivers/spi/spi-tegra114.c 			tspi->command1_reg, tspi->dma_control_reg);
tspi             1135 drivers/spi/spi-tegra114.c 		tegra_spi_dump_regs(tspi);
tspi             1136 drivers/spi/spi-tegra114.c 		tegra_spi_flush_fifos(tspi);
tspi             1137 drivers/spi/spi-tegra114.c 		complete(&tspi->xfer_completion);
tspi             1138 drivers/spi/spi-tegra114.c 		spin_unlock_irqrestore(&tspi->lock, flags);
tspi             1139 drivers/spi/spi-tegra114.c 		reset_control_assert(tspi->rst);
tspi             1141 drivers/spi/spi-tegra114.c 		reset_control_deassert(tspi->rst);
tspi             1145 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi             1146 drivers/spi/spi-tegra114.c 		tegra_spi_read_rx_fifo_to_client_rxbuf(tspi, t);
tspi             1148 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi             1149 drivers/spi/spi-tegra114.c 		tspi->cur_pos = tspi->cur_tx_pos;
tspi             1151 drivers/spi/spi-tegra114.c 		tspi->cur_pos = tspi->cur_rx_pos;
tspi             1153 drivers/spi/spi-tegra114.c 	if (tspi->cur_pos == t->len) {
tspi             1154 drivers/spi/spi-tegra114.c 		complete(&tspi->xfer_completion);
tspi             1158 drivers/spi/spi-tegra114.c 	tegra_spi_calculate_curr_xfer_param(tspi->cur_spi, tspi, t);
tspi             1159 drivers/spi/spi-tegra114.c 	tegra_spi_start_cpu_based_transfer(tspi, t);
tspi             1161 drivers/spi/spi-tegra114.c 	spin_unlock_irqrestore(&tspi->lock, flags);
tspi             1165 drivers/spi/spi-tegra114.c static irqreturn_t handle_dma_based_xfer(struct tegra_spi_data *tspi)
tspi             1167 drivers/spi/spi-tegra114.c 	struct spi_transfer *t = tspi->curr_xfer;
tspi             1174 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX) {
tspi             1175 drivers/spi/spi-tegra114.c 		if (tspi->tx_status) {
tspi             1176 drivers/spi/spi-tegra114.c 			dmaengine_terminate_all(tspi->tx_dma_chan);
tspi             1180 drivers/spi/spi-tegra114.c 				&tspi->tx_dma_complete, SPI_DMA_TIMEOUT);
tspi             1182 drivers/spi/spi-tegra114.c 				dmaengine_terminate_all(tspi->tx_dma_chan);
tspi             1183 drivers/spi/spi-tegra114.c 				dev_err(tspi->dev, "TxDma Xfer failed\n");
tspi             1189 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_RX) {
tspi             1190 drivers/spi/spi-tegra114.c 		if (tspi->rx_status) {
tspi             1191 drivers/spi/spi-tegra114.c 			dmaengine_terminate_all(tspi->rx_dma_chan);
tspi             1195 drivers/spi/spi-tegra114.c 				&tspi->rx_dma_complete, SPI_DMA_TIMEOUT);
tspi             1197 drivers/spi/spi-tegra114.c 				dmaengine_terminate_all(tspi->rx_dma_chan);
tspi             1198 drivers/spi/spi-tegra114.c 				dev_err(tspi->dev, "RxDma Xfer failed\n");
tspi             1204 drivers/spi/spi-tegra114.c 	spin_lock_irqsave(&tspi->lock, flags);
tspi             1206 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "DmaXfer: ERROR bit set 0x%x\n",
tspi             1207 drivers/spi/spi-tegra114.c 			tspi->status_reg);
tspi             1208 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "DmaXfer 0x%08x:0x%08x\n",
tspi             1209 drivers/spi/spi-tegra114.c 			tspi->command1_reg, tspi->dma_control_reg);
tspi             1210 drivers/spi/spi-tegra114.c 		tegra_spi_dump_regs(tspi);
tspi             1211 drivers/spi/spi-tegra114.c 		tegra_spi_flush_fifos(tspi);
tspi             1212 drivers/spi/spi-tegra114.c 		complete(&tspi->xfer_completion);
tspi             1213 drivers/spi/spi-tegra114.c 		spin_unlock_irqrestore(&tspi->lock, flags);
tspi             1214 drivers/spi/spi-tegra114.c 		reset_control_assert(tspi->rst);
tspi             1216 drivers/spi/spi-tegra114.c 		reset_control_deassert(tspi->rst);
tspi             1220 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi             1221 drivers/spi/spi-tegra114.c 		tegra_spi_copy_spi_rxbuf_to_client_rxbuf(tspi, t);
tspi             1223 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi             1224 drivers/spi/spi-tegra114.c 		tspi->cur_pos = tspi->cur_tx_pos;
tspi             1226 drivers/spi/spi-tegra114.c 		tspi->cur_pos = tspi->cur_rx_pos;
tspi             1228 drivers/spi/spi-tegra114.c 	if (tspi->cur_pos == t->len) {
tspi             1229 drivers/spi/spi-tegra114.c 		complete(&tspi->xfer_completion);
tspi             1234 drivers/spi/spi-tegra114.c 	total_fifo_words = tegra_spi_calculate_curr_xfer_param(tspi->cur_spi,
tspi             1235 drivers/spi/spi-tegra114.c 							tspi, t);
tspi             1237 drivers/spi/spi-tegra114.c 		err = tegra_spi_start_dma_based_transfer(tspi, t);
tspi             1239 drivers/spi/spi-tegra114.c 		err = tegra_spi_start_cpu_based_transfer(tspi, t);
tspi             1242 drivers/spi/spi-tegra114.c 	spin_unlock_irqrestore(&tspi->lock, flags);
tspi             1248 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = context_data;
tspi             1250 drivers/spi/spi-tegra114.c 	if (!tspi->is_curr_dma_xfer)
tspi             1251 drivers/spi/spi-tegra114.c 		return handle_cpu_based_xfer(tspi);
tspi             1252 drivers/spi/spi-tegra114.c 	return handle_dma_based_xfer(tspi);
tspi             1257 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = context_data;
tspi             1259 drivers/spi/spi-tegra114.c 	tspi->status_reg = tegra_spi_readl(tspi, SPI_FIFO_STATUS);
tspi             1260 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi             1261 drivers/spi/spi-tegra114.c 		tspi->tx_status = tspi->status_reg &
tspi             1264 drivers/spi/spi-tegra114.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi             1265 drivers/spi/spi-tegra114.c 		tspi->rx_status = tspi->status_reg &
tspi             1267 drivers/spi/spi-tegra114.c 	tegra_spi_clear_status(tspi);
tspi             1302 drivers/spi/spi-tegra114.c 	struct tegra_spi_data	*tspi;
tspi             1307 drivers/spi/spi-tegra114.c 	master = spi_alloc_master(&pdev->dev, sizeof(*tspi));
tspi             1313 drivers/spi/spi-tegra114.c 	tspi = spi_master_get_devdata(master);
tspi             1334 drivers/spi/spi-tegra114.c 	tspi->master = master;
tspi             1335 drivers/spi/spi-tegra114.c 	tspi->dev = &pdev->dev;
tspi             1336 drivers/spi/spi-tegra114.c 	spin_lock_init(&tspi->lock);
tspi             1338 drivers/spi/spi-tegra114.c 	tspi->soc_data = of_device_get_match_data(&pdev->dev);
tspi             1339 drivers/spi/spi-tegra114.c 	if (!tspi->soc_data) {
tspi             1346 drivers/spi/spi-tegra114.c 	tspi->base = devm_ioremap_resource(&pdev->dev, r);
tspi             1347 drivers/spi/spi-tegra114.c 	if (IS_ERR(tspi->base)) {
tspi             1348 drivers/spi/spi-tegra114.c 		ret = PTR_ERR(tspi->base);
tspi             1351 drivers/spi/spi-tegra114.c 	tspi->phys = r->start;
tspi             1354 drivers/spi/spi-tegra114.c 	tspi->irq = spi_irq;
tspi             1356 drivers/spi/spi-tegra114.c 	tspi->clk = devm_clk_get(&pdev->dev, "spi");
tspi             1357 drivers/spi/spi-tegra114.c 	if (IS_ERR(tspi->clk)) {
tspi             1359 drivers/spi/spi-tegra114.c 		ret = PTR_ERR(tspi->clk);
tspi             1363 drivers/spi/spi-tegra114.c 	tspi->rst = devm_reset_control_get_exclusive(&pdev->dev, "spi");
tspi             1364 drivers/spi/spi-tegra114.c 	if (IS_ERR(tspi->rst)) {
tspi             1366 drivers/spi/spi-tegra114.c 		ret = PTR_ERR(tspi->rst);
tspi             1370 drivers/spi/spi-tegra114.c 	tspi->max_buf_size = SPI_FIFO_DEPTH << 2;
tspi             1371 drivers/spi/spi-tegra114.c 	tspi->dma_buf_size = DEFAULT_SPI_DMA_BUF_LEN;
tspi             1373 drivers/spi/spi-tegra114.c 	ret = tegra_spi_init_dma_param(tspi, true);
tspi             1376 drivers/spi/spi-tegra114.c 	ret = tegra_spi_init_dma_param(tspi, false);
tspi             1379 drivers/spi/spi-tegra114.c 	tspi->max_buf_size = tspi->dma_buf_size;
tspi             1380 drivers/spi/spi-tegra114.c 	init_completion(&tspi->tx_dma_complete);
tspi             1381 drivers/spi/spi-tegra114.c 	init_completion(&tspi->rx_dma_complete);
tspi             1383 drivers/spi/spi-tegra114.c 	init_completion(&tspi->xfer_completion);
tspi             1398 drivers/spi/spi-tegra114.c 	reset_control_assert(tspi->rst);
tspi             1400 drivers/spi/spi-tegra114.c 	reset_control_deassert(tspi->rst);
tspi             1401 drivers/spi/spi-tegra114.c 	tspi->def_command1_reg  = SPI_M_S;
tspi             1402 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, tspi->def_command1_reg, SPI_COMMAND1);
tspi             1403 drivers/spi/spi-tegra114.c 	tspi->spi_cs_timing1 = tegra_spi_readl(tspi, SPI_CS_TIMING1);
tspi             1404 drivers/spi/spi-tegra114.c 	tspi->spi_cs_timing2 = tegra_spi_readl(tspi, SPI_CS_TIMING2);
tspi             1405 drivers/spi/spi-tegra114.c 	tspi->def_command2_reg = tegra_spi_readl(tspi, SPI_COMMAND2);
tspi             1406 drivers/spi/spi-tegra114.c 	tspi->last_used_cs = master->num_chipselect + 1;
tspi             1408 drivers/spi/spi-tegra114.c 	ret = request_threaded_irq(tspi->irq, tegra_spi_isr,
tspi             1410 drivers/spi/spi-tegra114.c 				   dev_name(&pdev->dev), tspi);
tspi             1413 drivers/spi/spi-tegra114.c 			tspi->irq);
tspi             1426 drivers/spi/spi-tegra114.c 	free_irq(spi_irq, tspi);
tspi             1431 drivers/spi/spi-tegra114.c 	tegra_spi_deinit_dma_param(tspi, false);
tspi             1433 drivers/spi/spi-tegra114.c 	tegra_spi_deinit_dma_param(tspi, true);
tspi             1442 drivers/spi/spi-tegra114.c 	struct tegra_spi_data	*tspi = spi_master_get_devdata(master);
tspi             1444 drivers/spi/spi-tegra114.c 	free_irq(tspi->irq, tspi);
tspi             1446 drivers/spi/spi-tegra114.c 	if (tspi->tx_dma_chan)
tspi             1447 drivers/spi/spi-tegra114.c 		tegra_spi_deinit_dma_param(tspi, false);
tspi             1449 drivers/spi/spi-tegra114.c 	if (tspi->rx_dma_chan)
tspi             1450 drivers/spi/spi-tegra114.c 		tegra_spi_deinit_dma_param(tspi, true);
tspi             1470 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(master);
tspi             1478 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, tspi->command1_reg, SPI_COMMAND1);
tspi             1479 drivers/spi/spi-tegra114.c 	tegra_spi_writel(tspi, tspi->def_command2_reg, SPI_COMMAND2);
tspi             1480 drivers/spi/spi-tegra114.c 	tspi->last_used_cs = master->num_chipselect + 1;
tspi             1490 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(master);
tspi             1493 drivers/spi/spi-tegra114.c 	tegra_spi_readl(tspi, SPI_COMMAND1);
tspi             1495 drivers/spi/spi-tegra114.c 	clk_disable_unprepare(tspi->clk);
tspi             1502 drivers/spi/spi-tegra114.c 	struct tegra_spi_data *tspi = spi_master_get_devdata(master);
tspi             1505 drivers/spi/spi-tegra114.c 	ret = clk_prepare_enable(tspi->clk);
tspi             1507 drivers/spi/spi-tegra114.c 		dev_err(tspi->dev, "clk_prepare failed: %d\n", ret);
tspi              210 drivers/spi/spi-tegra20-slink.c static inline u32 tegra_slink_readl(struct tegra_slink_data *tspi,
tspi              213 drivers/spi/spi-tegra20-slink.c 	return readl(tspi->base + reg);
tspi              216 drivers/spi/spi-tegra20-slink.c static inline void tegra_slink_writel(struct tegra_slink_data *tspi,
tspi              219 drivers/spi/spi-tegra20-slink.c 	writel(val, tspi->base + reg);
tspi              223 drivers/spi/spi-tegra20-slink.c 		readl(tspi->base + SLINK_MAS_DATA);
tspi              226 drivers/spi/spi-tegra20-slink.c static void tegra_slink_clear_status(struct tegra_slink_data *tspi)
tspi              230 drivers/spi/spi-tegra20-slink.c 	tegra_slink_readl(tspi, SLINK_STATUS);
tspi              234 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, val_write, SLINK_STATUS);
tspi              237 drivers/spi/spi-tegra20-slink.c static u32 tegra_slink_get_packed_size(struct tegra_slink_data *tspi,
tspi              240 drivers/spi/spi-tegra20-slink.c 	switch (tspi->bytes_per_word) {
tspi              255 drivers/spi/spi-tegra20-slink.c 	struct spi_device *spi, struct tegra_slink_data *tspi,
tspi              258 drivers/spi/spi-tegra20-slink.c 	unsigned remain_len = t->len - tspi->cur_pos;
tspi              265 drivers/spi/spi-tegra20-slink.c 	tspi->bytes_per_word = DIV_ROUND_UP(bits_per_word, 8);
tspi              268 drivers/spi/spi-tegra20-slink.c 		tspi->is_packed = true;
tspi              269 drivers/spi/spi-tegra20-slink.c 		tspi->words_per_32bit = 32/bits_per_word;
tspi              271 drivers/spi/spi-tegra20-slink.c 		tspi->is_packed = false;
tspi              272 drivers/spi/spi-tegra20-slink.c 		tspi->words_per_32bit = 1;
tspi              274 drivers/spi/spi-tegra20-slink.c 	tspi->packed_size = tegra_slink_get_packed_size(tspi, t);
tspi              276 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              277 drivers/spi/spi-tegra20-slink.c 		max_len = min(remain_len, tspi->max_buf_size);
tspi              278 drivers/spi/spi-tegra20-slink.c 		tspi->curr_dma_words = max_len/tspi->bytes_per_word;
tspi              281 drivers/spi/spi-tegra20-slink.c 		max_word = (remain_len - 1) / tspi->bytes_per_word + 1;
tspi              282 drivers/spi/spi-tegra20-slink.c 		max_word = min(max_word, tspi->max_buf_size/4);
tspi              283 drivers/spi/spi-tegra20-slink.c 		tspi->curr_dma_words = max_word;
tspi              290 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi, struct spi_transfer *t)
tspi              299 drivers/spi/spi-tegra20-slink.c 	u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;
tspi              301 drivers/spi/spi-tegra20-slink.c 	fifo_status = tegra_slink_readl(tspi, SLINK_STATUS2);
tspi              304 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              305 drivers/spi/spi-tegra20-slink.c 		fifo_words_left = tx_empty_count * tspi->words_per_32bit;
tspi              306 drivers/spi/spi-tegra20-slink.c 		written_words = min(fifo_words_left, tspi->curr_dma_words);
tspi              307 drivers/spi/spi-tegra20-slink.c 		nbytes = written_words * tspi->bytes_per_word;
tspi              313 drivers/spi/spi-tegra20-slink.c 			tegra_slink_writel(tspi, x, SLINK_TX_FIFO);
tspi              316 drivers/spi/spi-tegra20-slink.c 		max_n_32bit = min(tspi->curr_dma_words,  tx_empty_count);
tspi              318 drivers/spi/spi-tegra20-slink.c 		nbytes = written_words * tspi->bytes_per_word;
tspi              321 drivers/spi/spi-tegra20-slink.c 			for (i = 0; nbytes && (i < tspi->bytes_per_word);
tspi              324 drivers/spi/spi-tegra20-slink.c 			tegra_slink_writel(tspi, x, SLINK_TX_FIFO);
tspi              327 drivers/spi/spi-tegra20-slink.c 	tspi->cur_tx_pos += written_words * tspi->bytes_per_word;
tspi              332 drivers/spi/spi-tegra20-slink.c 		struct tegra_slink_data *tspi, struct spi_transfer *t)
tspi              339 drivers/spi/spi-tegra20-slink.c 	u8 *rx_buf = (u8 *)t->rx_buf + tspi->cur_rx_pos;
tspi              341 drivers/spi/spi-tegra20-slink.c 	fifo_status = tegra_slink_readl(tspi, SLINK_STATUS2);
tspi              343 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              344 drivers/spi/spi-tegra20-slink.c 		len = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              346 drivers/spi/spi-tegra20-slink.c 			u32 x = tegra_slink_readl(tspi, SLINK_RX_FIFO);
tspi              350 drivers/spi/spi-tegra20-slink.c 		tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
tspi              351 drivers/spi/spi-tegra20-slink.c 		read_words += tspi->curr_dma_words;
tspi              354 drivers/spi/spi-tegra20-slink.c 			u32 x = tegra_slink_readl(tspi, SLINK_RX_FIFO);
tspi              355 drivers/spi/spi-tegra20-slink.c 			for (i = 0; (i < tspi->bytes_per_word); i++)
tspi              358 drivers/spi/spi-tegra20-slink.c 		tspi->cur_rx_pos += rx_full_count * tspi->bytes_per_word;
tspi              365 drivers/spi/spi-tegra20-slink.c 		struct tegra_slink_data *tspi, struct spi_transfer *t)
tspi              368 drivers/spi/spi-tegra20-slink.c 	dma_sync_single_for_cpu(tspi->dev, tspi->tx_dma_phys,
tspi              369 drivers/spi/spi-tegra20-slink.c 				tspi->dma_buf_size, DMA_TO_DEVICE);
tspi              371 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              372 drivers/spi/spi-tegra20-slink.c 		unsigned len = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              373 drivers/spi/spi-tegra20-slink.c 		memcpy(tspi->tx_dma_buf, t->tx_buf + tspi->cur_pos, len);
tspi              377 drivers/spi/spi-tegra20-slink.c 		u8 *tx_buf = (u8 *)t->tx_buf + tspi->cur_tx_pos;
tspi              378 drivers/spi/spi-tegra20-slink.c 		unsigned consume = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              380 drivers/spi/spi-tegra20-slink.c 		for (count = 0; count < tspi->curr_dma_words; count++) {
tspi              382 drivers/spi/spi-tegra20-slink.c 			for (i = 0; consume && (i < tspi->bytes_per_word);
tspi              385 drivers/spi/spi-tegra20-slink.c 			tspi->tx_dma_buf[count] = x;
tspi              388 drivers/spi/spi-tegra20-slink.c 	tspi->cur_tx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
tspi              391 drivers/spi/spi-tegra20-slink.c 	dma_sync_single_for_device(tspi->dev, tspi->tx_dma_phys,
tspi              392 drivers/spi/spi-tegra20-slink.c 				tspi->dma_buf_size, DMA_TO_DEVICE);
tspi              396 drivers/spi/spi-tegra20-slink.c 		struct tegra_slink_data *tspi, struct spi_transfer *t)
tspi              401 drivers/spi/spi-tegra20-slink.c 	dma_sync_single_for_cpu(tspi->dev, tspi->rx_dma_phys,
tspi              402 drivers/spi/spi-tegra20-slink.c 		tspi->dma_buf_size, DMA_FROM_DEVICE);
tspi              404 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              405 drivers/spi/spi-tegra20-slink.c 		len = tspi->curr_dma_words * tspi->bytes_per_word;
tspi              406 drivers/spi/spi-tegra20-slink.c 		memcpy(t->rx_buf + tspi->cur_rx_pos, tspi->rx_dma_buf, len);
tspi              410 drivers/spi/spi-tegra20-slink.c 		unsigned char *rx_buf = t->rx_buf + tspi->cur_rx_pos;
tspi              413 drivers/spi/spi-tegra20-slink.c 		for (count = 0; count < tspi->curr_dma_words; count++) {
tspi              414 drivers/spi/spi-tegra20-slink.c 			u32 x = tspi->rx_dma_buf[count] & rx_mask;
tspi              415 drivers/spi/spi-tegra20-slink.c 			for (i = 0; (i < tspi->bytes_per_word); i++)
tspi              419 drivers/spi/spi-tegra20-slink.c 	tspi->cur_rx_pos += tspi->curr_dma_words * tspi->bytes_per_word;
tspi              422 drivers/spi/spi-tegra20-slink.c 	dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,
tspi              423 drivers/spi/spi-tegra20-slink.c 		tspi->dma_buf_size, DMA_FROM_DEVICE);
tspi              433 drivers/spi/spi-tegra20-slink.c static int tegra_slink_start_tx_dma(struct tegra_slink_data *tspi, int len)
tspi              435 drivers/spi/spi-tegra20-slink.c 	reinit_completion(&tspi->tx_dma_complete);
tspi              436 drivers/spi/spi-tegra20-slink.c 	tspi->tx_dma_desc = dmaengine_prep_slave_single(tspi->tx_dma_chan,
tspi              437 drivers/spi/spi-tegra20-slink.c 				tspi->tx_dma_phys, len, DMA_MEM_TO_DEV,
tspi              439 drivers/spi/spi-tegra20-slink.c 	if (!tspi->tx_dma_desc) {
tspi              440 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev, "Not able to get desc for Tx\n");
tspi              444 drivers/spi/spi-tegra20-slink.c 	tspi->tx_dma_desc->callback = tegra_slink_dma_complete;
tspi              445 drivers/spi/spi-tegra20-slink.c 	tspi->tx_dma_desc->callback_param = &tspi->tx_dma_complete;
tspi              447 drivers/spi/spi-tegra20-slink.c 	dmaengine_submit(tspi->tx_dma_desc);
tspi              448 drivers/spi/spi-tegra20-slink.c 	dma_async_issue_pending(tspi->tx_dma_chan);
tspi              452 drivers/spi/spi-tegra20-slink.c static int tegra_slink_start_rx_dma(struct tegra_slink_data *tspi, int len)
tspi              454 drivers/spi/spi-tegra20-slink.c 	reinit_completion(&tspi->rx_dma_complete);
tspi              455 drivers/spi/spi-tegra20-slink.c 	tspi->rx_dma_desc = dmaengine_prep_slave_single(tspi->rx_dma_chan,
tspi              456 drivers/spi/spi-tegra20-slink.c 				tspi->rx_dma_phys, len, DMA_DEV_TO_MEM,
tspi              458 drivers/spi/spi-tegra20-slink.c 	if (!tspi->rx_dma_desc) {
tspi              459 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev, "Not able to get desc for Rx\n");
tspi              463 drivers/spi/spi-tegra20-slink.c 	tspi->rx_dma_desc->callback = tegra_slink_dma_complete;
tspi              464 drivers/spi/spi-tegra20-slink.c 	tspi->rx_dma_desc->callback_param = &tspi->rx_dma_complete;
tspi              466 drivers/spi/spi-tegra20-slink.c 	dmaengine_submit(tspi->rx_dma_desc);
tspi              467 drivers/spi/spi-tegra20-slink.c 	dma_async_issue_pending(tspi->rx_dma_chan);
tspi              472 drivers/spi/spi-tegra20-slink.c 		struct tegra_slink_data *tspi, struct spi_transfer *t)
tspi              480 drivers/spi/spi-tegra20-slink.c 	status = tegra_slink_readl(tspi, SLINK_STATUS);
tspi              482 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev, "Rx/Tx fifo are not empty status 0x%08x\n",
tspi              487 drivers/spi/spi-tegra20-slink.c 	val = SLINK_DMA_BLOCK_SIZE(tspi->curr_dma_words - 1);
tspi              488 drivers/spi/spi-tegra20-slink.c 	val |= tspi->packed_size;
tspi              489 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed)
tspi              490 drivers/spi/spi-tegra20-slink.c 		len = DIV_ROUND_UP(tspi->curr_dma_words * tspi->bytes_per_word,
tspi              493 drivers/spi/spi-tegra20-slink.c 		len = tspi->curr_dma_words * 4;
tspi              503 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              506 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi              509 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              510 drivers/spi/spi-tegra20-slink.c 	tspi->dma_control_reg = val;
tspi              512 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX) {
tspi              513 drivers/spi/spi-tegra20-slink.c 		tegra_slink_copy_client_txbuf_to_spi_txbuf(tspi, t);
tspi              515 drivers/spi/spi-tegra20-slink.c 		ret = tegra_slink_start_tx_dma(tspi, len);
tspi              517 drivers/spi/spi-tegra20-slink.c 			dev_err(tspi->dev,
tspi              523 drivers/spi/spi-tegra20-slink.c 		status = tegra_slink_readl(tspi, SLINK_STATUS);
tspi              525 drivers/spi/spi-tegra20-slink.c 			status = tegra_slink_readl(tspi, SLINK_STATUS);
tspi              528 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX) {
tspi              530 drivers/spi/spi-tegra20-slink.c 		dma_sync_single_for_device(tspi->dev, tspi->rx_dma_phys,
tspi              531 drivers/spi/spi-tegra20-slink.c 				tspi->dma_buf_size, DMA_FROM_DEVICE);
tspi              533 drivers/spi/spi-tegra20-slink.c 		ret = tegra_slink_start_rx_dma(tspi, len);
tspi              535 drivers/spi/spi-tegra20-slink.c 			dev_err(tspi->dev,
tspi              537 drivers/spi/spi-tegra20-slink.c 			if (tspi->cur_direction & DATA_DIR_TX)
tspi              538 drivers/spi/spi-tegra20-slink.c 				dmaengine_terminate_all(tspi->tx_dma_chan);
tspi              542 drivers/spi/spi-tegra20-slink.c 	tspi->is_curr_dma_xfer = true;
tspi              543 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              545 drivers/spi/spi-tegra20-slink.c 		tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              549 drivers/spi/spi-tegra20-slink.c 	tspi->dma_control_reg = val;
tspi              552 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              557 drivers/spi/spi-tegra20-slink.c 		struct tegra_slink_data *tspi, struct spi_transfer *t)
tspi              562 drivers/spi/spi-tegra20-slink.c 	val = tspi->packed_size;
tspi              563 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              566 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi              569 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              570 drivers/spi/spi-tegra20-slink.c 	tspi->dma_control_reg = val;
tspi              572 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              573 drivers/spi/spi-tegra20-slink.c 		cur_words = tegra_slink_fill_tx_fifo_from_client_txbuf(tspi, t);
tspi              575 drivers/spi/spi-tegra20-slink.c 		cur_words = tspi->curr_dma_words;
tspi              577 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              578 drivers/spi/spi-tegra20-slink.c 	tspi->dma_control_reg = val;
tspi              580 drivers/spi/spi-tegra20-slink.c 	tspi->is_curr_dma_xfer = false;
tspi              581 drivers/spi/spi-tegra20-slink.c 	if (tspi->is_packed) {
tspi              583 drivers/spi/spi-tegra20-slink.c 		tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              587 drivers/spi/spi-tegra20-slink.c 	tspi->dma_control_reg = val;
tspi              589 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, val, SLINK_DMA_CTL);
tspi              593 drivers/spi/spi-tegra20-slink.c static int tegra_slink_init_dma_param(struct tegra_slink_data *tspi,
tspi              602 drivers/spi/spi-tegra20-slink.c 	dma_chan = dma_request_slave_channel_reason(tspi->dev,
tspi              607 drivers/spi/spi-tegra20-slink.c 			dev_err(tspi->dev,
tspi              612 drivers/spi/spi-tegra20-slink.c 	dma_buf = dma_alloc_coherent(tspi->dev, tspi->dma_buf_size,
tspi              615 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev, " Not able to allocate the dma buffer\n");
tspi              621 drivers/spi/spi-tegra20-slink.c 		dma_sconfig.src_addr = tspi->phys + SLINK_RX_FIFO;
tspi              625 drivers/spi/spi-tegra20-slink.c 		dma_sconfig.dst_addr = tspi->phys + SLINK_TX_FIFO;
tspi              634 drivers/spi/spi-tegra20-slink.c 		tspi->rx_dma_chan = dma_chan;
tspi              635 drivers/spi/spi-tegra20-slink.c 		tspi->rx_dma_buf = dma_buf;
tspi              636 drivers/spi/spi-tegra20-slink.c 		tspi->rx_dma_phys = dma_phys;
tspi              638 drivers/spi/spi-tegra20-slink.c 		tspi->tx_dma_chan = dma_chan;
tspi              639 drivers/spi/spi-tegra20-slink.c 		tspi->tx_dma_buf = dma_buf;
tspi              640 drivers/spi/spi-tegra20-slink.c 		tspi->tx_dma_phys = dma_phys;
tspi              645 drivers/spi/spi-tegra20-slink.c 	dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys);
tspi              650 drivers/spi/spi-tegra20-slink.c static void tegra_slink_deinit_dma_param(struct tegra_slink_data *tspi,
tspi              658 drivers/spi/spi-tegra20-slink.c 		dma_buf = tspi->rx_dma_buf;
tspi              659 drivers/spi/spi-tegra20-slink.c 		dma_chan = tspi->rx_dma_chan;
tspi              660 drivers/spi/spi-tegra20-slink.c 		dma_phys = tspi->rx_dma_phys;
tspi              661 drivers/spi/spi-tegra20-slink.c 		tspi->rx_dma_chan = NULL;
tspi              662 drivers/spi/spi-tegra20-slink.c 		tspi->rx_dma_buf = NULL;
tspi              664 drivers/spi/spi-tegra20-slink.c 		dma_buf = tspi->tx_dma_buf;
tspi              665 drivers/spi/spi-tegra20-slink.c 		dma_chan = tspi->tx_dma_chan;
tspi              666 drivers/spi/spi-tegra20-slink.c 		dma_phys = tspi->tx_dma_phys;
tspi              667 drivers/spi/spi-tegra20-slink.c 		tspi->tx_dma_buf = NULL;
tspi              668 drivers/spi/spi-tegra20-slink.c 		tspi->tx_dma_chan = NULL;
tspi              673 drivers/spi/spi-tegra20-slink.c 	dma_free_coherent(tspi->dev, tspi->dma_buf_size, dma_buf, dma_phys);
tspi              680 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(spi->master);
tspi              690 drivers/spi/spi-tegra20-slink.c 	if (speed != tspi->cur_speed) {
tspi              691 drivers/spi/spi-tegra20-slink.c 		clk_set_rate(tspi->clk, speed * 4);
tspi              692 drivers/spi/spi-tegra20-slink.c 		tspi->cur_speed = speed;
tspi              695 drivers/spi/spi-tegra20-slink.c 	tspi->cur_spi = spi;
tspi              696 drivers/spi/spi-tegra20-slink.c 	tspi->cur_pos = 0;
tspi              697 drivers/spi/spi-tegra20-slink.c 	tspi->cur_rx_pos = 0;
tspi              698 drivers/spi/spi-tegra20-slink.c 	tspi->cur_tx_pos = 0;
tspi              699 drivers/spi/spi-tegra20-slink.c 	tspi->curr_xfer = t;
tspi              700 drivers/spi/spi-tegra20-slink.c 	total_fifo_words = tegra_slink_calculate_curr_xfer_param(spi, tspi, t);
tspi              702 drivers/spi/spi-tegra20-slink.c 	command = tspi->command_reg;
tspi              706 drivers/spi/spi-tegra20-slink.c 	command2 = tspi->command2_reg;
tspi              709 drivers/spi/spi-tegra20-slink.c 	tspi->cur_direction = 0;
tspi              712 drivers/spi/spi-tegra20-slink.c 		tspi->cur_direction |= DATA_DIR_RX;
tspi              716 drivers/spi/spi-tegra20-slink.c 		tspi->cur_direction |= DATA_DIR_TX;
tspi              724 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, command2, SLINK_COMMAND2);
tspi              725 drivers/spi/spi-tegra20-slink.c 	tspi->command2_reg = command2;
tspi              727 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, command, SLINK_COMMAND);
tspi              728 drivers/spi/spi-tegra20-slink.c 	tspi->command_reg = command;
tspi              731 drivers/spi/spi-tegra20-slink.c 		ret = tegra_slink_start_dma_based_transfer(tspi, t);
tspi              733 drivers/spi/spi-tegra20-slink.c 		ret = tegra_slink_start_cpu_based_transfer(tspi, t);
tspi              746 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(spi->master);
tspi              757 drivers/spi/spi-tegra20-slink.c 	ret = pm_runtime_get_sync(tspi->dev);
tspi              759 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev, "pm runtime failed, e = %d\n", ret);
tspi              763 drivers/spi/spi-tegra20-slink.c 	spin_lock_irqsave(&tspi->lock, flags);
tspi              764 drivers/spi/spi-tegra20-slink.c 	val = tspi->def_command_reg;
tspi              769 drivers/spi/spi-tegra20-slink.c 	tspi->def_command_reg = val;
tspi              770 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->def_command_reg, SLINK_COMMAND);
tspi              771 drivers/spi/spi-tegra20-slink.c 	spin_unlock_irqrestore(&tspi->lock, flags);
tspi              773 drivers/spi/spi-tegra20-slink.c 	pm_runtime_put(tspi->dev);
tspi              780 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
tspi              783 drivers/spi/spi-tegra20-slink.c 	tegra_slink_clear_status(tspi);
tspi              785 drivers/spi/spi-tegra20-slink.c 	tspi->command_reg = tspi->def_command_reg;
tspi              786 drivers/spi/spi-tegra20-slink.c 	tspi->command_reg |= SLINK_CS_SW | SLINK_CS_VALUE;
tspi              788 drivers/spi/spi-tegra20-slink.c 	tspi->command2_reg = tspi->def_command2_reg;
tspi              789 drivers/spi/spi-tegra20-slink.c 	tspi->command2_reg |= SLINK_SS_EN_CS(spi->chip_select);
tspi              791 drivers/spi/spi-tegra20-slink.c 	tspi->command_reg &= ~SLINK_MODES;
tspi              793 drivers/spi/spi-tegra20-slink.c 		tspi->command_reg |= SLINK_CK_SDA;
tspi              796 drivers/spi/spi-tegra20-slink.c 		tspi->command_reg |= SLINK_IDLE_SCLK_DRIVE_HIGH;
tspi              798 drivers/spi/spi-tegra20-slink.c 		tspi->command_reg |= SLINK_IDLE_SCLK_DRIVE_LOW;
tspi              807 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
tspi              810 drivers/spi/spi-tegra20-slink.c 	reinit_completion(&tspi->xfer_completion);
tspi              813 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev,
tspi              818 drivers/spi/spi-tegra20-slink.c 	ret = wait_for_completion_timeout(&tspi->xfer_completion,
tspi              821 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev,
tspi              826 drivers/spi/spi-tegra20-slink.c 	if (tspi->tx_status)
tspi              827 drivers/spi/spi-tegra20-slink.c 		return tspi->tx_status;
tspi              828 drivers/spi/spi-tegra20-slink.c 	if (tspi->rx_status)
tspi              829 drivers/spi/spi-tegra20-slink.c 		return tspi->rx_status;
tspi              837 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
tspi              839 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->def_command_reg, SLINK_COMMAND);
tspi              840 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->def_command2_reg, SLINK_COMMAND2);
tspi              845 drivers/spi/spi-tegra20-slink.c static irqreturn_t handle_cpu_based_xfer(struct tegra_slink_data *tspi)
tspi              847 drivers/spi/spi-tegra20-slink.c 	struct spi_transfer *t = tspi->curr_xfer;
tspi              850 drivers/spi/spi-tegra20-slink.c 	spin_lock_irqsave(&tspi->lock, flags);
tspi              851 drivers/spi/spi-tegra20-slink.c 	if (tspi->tx_status ||  tspi->rx_status ||
tspi              852 drivers/spi/spi-tegra20-slink.c 				(tspi->status_reg & SLINK_BSY)) {
tspi              853 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev,
tspi              854 drivers/spi/spi-tegra20-slink.c 			"CpuXfer ERROR bit set 0x%x\n", tspi->status_reg);
tspi              855 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev,
tspi              856 drivers/spi/spi-tegra20-slink.c 			"CpuXfer 0x%08x:0x%08x:0x%08x\n", tspi->command_reg,
tspi              857 drivers/spi/spi-tegra20-slink.c 				tspi->command2_reg, tspi->dma_control_reg);
tspi              858 drivers/spi/spi-tegra20-slink.c 		reset_control_assert(tspi->rst);
tspi              860 drivers/spi/spi-tegra20-slink.c 		reset_control_deassert(tspi->rst);
tspi              861 drivers/spi/spi-tegra20-slink.c 		complete(&tspi->xfer_completion);
tspi              865 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi              866 drivers/spi/spi-tegra20-slink.c 		tegra_slink_read_rx_fifo_to_client_rxbuf(tspi, t);
tspi              868 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              869 drivers/spi/spi-tegra20-slink.c 		tspi->cur_pos = tspi->cur_tx_pos;
tspi              871 drivers/spi/spi-tegra20-slink.c 		tspi->cur_pos = tspi->cur_rx_pos;
tspi              873 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_pos == t->len) {
tspi              874 drivers/spi/spi-tegra20-slink.c 		complete(&tspi->xfer_completion);
tspi              878 drivers/spi/spi-tegra20-slink.c 	tegra_slink_calculate_curr_xfer_param(tspi->cur_spi, tspi, t);
tspi              879 drivers/spi/spi-tegra20-slink.c 	tegra_slink_start_cpu_based_transfer(tspi, t);
tspi              881 drivers/spi/spi-tegra20-slink.c 	spin_unlock_irqrestore(&tspi->lock, flags);
tspi              885 drivers/spi/spi-tegra20-slink.c static irqreturn_t handle_dma_based_xfer(struct tegra_slink_data *tspi)
tspi              887 drivers/spi/spi-tegra20-slink.c 	struct spi_transfer *t = tspi->curr_xfer;
tspi              894 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX) {
tspi              895 drivers/spi/spi-tegra20-slink.c 		if (tspi->tx_status) {
tspi              896 drivers/spi/spi-tegra20-slink.c 			dmaengine_terminate_all(tspi->tx_dma_chan);
tspi              900 drivers/spi/spi-tegra20-slink.c 				&tspi->tx_dma_complete, SLINK_DMA_TIMEOUT);
tspi              902 drivers/spi/spi-tegra20-slink.c 				dmaengine_terminate_all(tspi->tx_dma_chan);
tspi              903 drivers/spi/spi-tegra20-slink.c 				dev_err(tspi->dev, "TxDma Xfer failed\n");
tspi              909 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX) {
tspi              910 drivers/spi/spi-tegra20-slink.c 		if (tspi->rx_status) {
tspi              911 drivers/spi/spi-tegra20-slink.c 			dmaengine_terminate_all(tspi->rx_dma_chan);
tspi              915 drivers/spi/spi-tegra20-slink.c 				&tspi->rx_dma_complete, SLINK_DMA_TIMEOUT);
tspi              917 drivers/spi/spi-tegra20-slink.c 				dmaengine_terminate_all(tspi->rx_dma_chan);
tspi              918 drivers/spi/spi-tegra20-slink.c 				dev_err(tspi->dev, "RxDma Xfer failed\n");
tspi              924 drivers/spi/spi-tegra20-slink.c 	spin_lock_irqsave(&tspi->lock, flags);
tspi              926 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev,
tspi              927 drivers/spi/spi-tegra20-slink.c 			"DmaXfer: ERROR bit set 0x%x\n", tspi->status_reg);
tspi              928 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev,
tspi              929 drivers/spi/spi-tegra20-slink.c 			"DmaXfer 0x%08x:0x%08x:0x%08x\n", tspi->command_reg,
tspi              930 drivers/spi/spi-tegra20-slink.c 				tspi->command2_reg, tspi->dma_control_reg);
tspi              931 drivers/spi/spi-tegra20-slink.c 		reset_control_assert(tspi->rst);
tspi              933 drivers/spi/spi-tegra20-slink.c 		reset_control_assert(tspi->rst);
tspi              934 drivers/spi/spi-tegra20-slink.c 		complete(&tspi->xfer_completion);
tspi              935 drivers/spi/spi-tegra20-slink.c 		spin_unlock_irqrestore(&tspi->lock, flags);
tspi              939 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi              940 drivers/spi/spi-tegra20-slink.c 		tegra_slink_copy_spi_rxbuf_to_client_rxbuf(tspi, t);
tspi              942 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              943 drivers/spi/spi-tegra20-slink.c 		tspi->cur_pos = tspi->cur_tx_pos;
tspi              945 drivers/spi/spi-tegra20-slink.c 		tspi->cur_pos = tspi->cur_rx_pos;
tspi              947 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_pos == t->len) {
tspi              948 drivers/spi/spi-tegra20-slink.c 		complete(&tspi->xfer_completion);
tspi              953 drivers/spi/spi-tegra20-slink.c 	total_fifo_words = tegra_slink_calculate_curr_xfer_param(tspi->cur_spi,
tspi              954 drivers/spi/spi-tegra20-slink.c 							tspi, t);
tspi              956 drivers/spi/spi-tegra20-slink.c 		err = tegra_slink_start_dma_based_transfer(tspi, t);
tspi              958 drivers/spi/spi-tegra20-slink.c 		err = tegra_slink_start_cpu_based_transfer(tspi, t);
tspi              961 drivers/spi/spi-tegra20-slink.c 	spin_unlock_irqrestore(&tspi->lock, flags);
tspi              967 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = context_data;
tspi              969 drivers/spi/spi-tegra20-slink.c 	if (!tspi->is_curr_dma_xfer)
tspi              970 drivers/spi/spi-tegra20-slink.c 		return handle_cpu_based_xfer(tspi);
tspi              971 drivers/spi/spi-tegra20-slink.c 	return handle_dma_based_xfer(tspi);
tspi              976 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = context_data;
tspi              978 drivers/spi/spi-tegra20-slink.c 	tspi->status_reg = tegra_slink_readl(tspi, SLINK_STATUS);
tspi              979 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_TX)
tspi              980 drivers/spi/spi-tegra20-slink.c 		tspi->tx_status = tspi->status_reg &
tspi              983 drivers/spi/spi-tegra20-slink.c 	if (tspi->cur_direction & DATA_DIR_RX)
tspi              984 drivers/spi/spi-tegra20-slink.c 		tspi->rx_status = tspi->status_reg &
tspi              986 drivers/spi/spi-tegra20-slink.c 	tegra_slink_clear_status(tspi);
tspi             1009 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data	*tspi;
tspi             1022 drivers/spi/spi-tegra20-slink.c 	master = spi_alloc_master(&pdev->dev, sizeof(*tspi));
tspi             1038 drivers/spi/spi-tegra20-slink.c 	tspi = spi_master_get_devdata(master);
tspi             1039 drivers/spi/spi-tegra20-slink.c 	tspi->master = master;
tspi             1040 drivers/spi/spi-tegra20-slink.c 	tspi->dev = &pdev->dev;
tspi             1041 drivers/spi/spi-tegra20-slink.c 	tspi->chip_data = cdata;
tspi             1042 drivers/spi/spi-tegra20-slink.c 	spin_lock_init(&tspi->lock);
tspi             1044 drivers/spi/spi-tegra20-slink.c 	if (of_property_read_u32(tspi->dev->of_node, "spi-max-frequency",
tspi             1054 drivers/spi/spi-tegra20-slink.c 	tspi->phys = r->start;
tspi             1055 drivers/spi/spi-tegra20-slink.c 	tspi->base = devm_ioremap_resource(&pdev->dev, r);
tspi             1056 drivers/spi/spi-tegra20-slink.c 	if (IS_ERR(tspi->base)) {
tspi             1057 drivers/spi/spi-tegra20-slink.c 		ret = PTR_ERR(tspi->base);
tspi             1062 drivers/spi/spi-tegra20-slink.c 	tspi->clk = devm_clk_get(&pdev->dev, NULL);
tspi             1063 drivers/spi/spi-tegra20-slink.c 	if (IS_ERR(tspi->clk)) {
tspi             1064 drivers/spi/spi-tegra20-slink.c 		ret = PTR_ERR(tspi->clk);
tspi             1068 drivers/spi/spi-tegra20-slink.c 	ret = clk_prepare(tspi->clk);
tspi             1073 drivers/spi/spi-tegra20-slink.c 	ret = clk_enable(tspi->clk);
tspi             1080 drivers/spi/spi-tegra20-slink.c 	tspi->irq = spi_irq;
tspi             1081 drivers/spi/spi-tegra20-slink.c 	ret = request_threaded_irq(tspi->irq, tegra_slink_isr,
tspi             1083 drivers/spi/spi-tegra20-slink.c 			dev_name(&pdev->dev), tspi);
tspi             1086 drivers/spi/spi-tegra20-slink.c 					tspi->irq);
tspi             1090 drivers/spi/spi-tegra20-slink.c 	tspi->rst = devm_reset_control_get_exclusive(&pdev->dev, "spi");
tspi             1091 drivers/spi/spi-tegra20-slink.c 	if (IS_ERR(tspi->rst)) {
tspi             1093 drivers/spi/spi-tegra20-slink.c 		ret = PTR_ERR(tspi->rst);
tspi             1097 drivers/spi/spi-tegra20-slink.c 	tspi->max_buf_size = SLINK_FIFO_DEPTH << 2;
tspi             1098 drivers/spi/spi-tegra20-slink.c 	tspi->dma_buf_size = DEFAULT_SPI_DMA_BUF_LEN;
tspi             1100 drivers/spi/spi-tegra20-slink.c 	ret = tegra_slink_init_dma_param(tspi, true);
tspi             1103 drivers/spi/spi-tegra20-slink.c 	ret = tegra_slink_init_dma_param(tspi, false);
tspi             1106 drivers/spi/spi-tegra20-slink.c 	tspi->max_buf_size = tspi->dma_buf_size;
tspi             1107 drivers/spi/spi-tegra20-slink.c 	init_completion(&tspi->tx_dma_complete);
tspi             1108 drivers/spi/spi-tegra20-slink.c 	init_completion(&tspi->rx_dma_complete);
tspi             1110 drivers/spi/spi-tegra20-slink.c 	init_completion(&tspi->xfer_completion);
tspi             1124 drivers/spi/spi-tegra20-slink.c 	tspi->def_command_reg  = SLINK_M_S;
tspi             1125 drivers/spi/spi-tegra20-slink.c 	tspi->def_command2_reg = SLINK_CS_ACTIVE_BETWEEN;
tspi             1126 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->def_command_reg, SLINK_COMMAND);
tspi             1127 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->def_command2_reg, SLINK_COMMAND2);
tspi             1142 drivers/spi/spi-tegra20-slink.c 	tegra_slink_deinit_dma_param(tspi, false);
tspi             1144 drivers/spi/spi-tegra20-slink.c 	tegra_slink_deinit_dma_param(tspi, true);
tspi             1146 drivers/spi/spi-tegra20-slink.c 	free_irq(spi_irq, tspi);
tspi             1148 drivers/spi/spi-tegra20-slink.c 	clk_disable(tspi->clk);
tspi             1150 drivers/spi/spi-tegra20-slink.c 	clk_unprepare(tspi->clk);
tspi             1159 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data	*tspi = spi_master_get_devdata(master);
tspi             1161 drivers/spi/spi-tegra20-slink.c 	free_irq(tspi->irq, tspi);
tspi             1163 drivers/spi/spi-tegra20-slink.c 	clk_disable(tspi->clk);
tspi             1164 drivers/spi/spi-tegra20-slink.c 	clk_unprepare(tspi->clk);
tspi             1166 drivers/spi/spi-tegra20-slink.c 	if (tspi->tx_dma_chan)
tspi             1167 drivers/spi/spi-tegra20-slink.c 		tegra_slink_deinit_dma_param(tspi, false);
tspi             1169 drivers/spi/spi-tegra20-slink.c 	if (tspi->rx_dma_chan)
tspi             1170 drivers/spi/spi-tegra20-slink.c 		tegra_slink_deinit_dma_param(tspi, true);
tspi             1190 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
tspi             1198 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->command_reg, SLINK_COMMAND);
tspi             1199 drivers/spi/spi-tegra20-slink.c 	tegra_slink_writel(tspi, tspi->command2_reg, SLINK_COMMAND2);
tspi             1209 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
tspi             1212 drivers/spi/spi-tegra20-slink.c 	tegra_slink_readl(tspi, SLINK_MAS_DATA);
tspi             1214 drivers/spi/spi-tegra20-slink.c 	clk_disable_unprepare(tspi->clk);
tspi             1221 drivers/spi/spi-tegra20-slink.c 	struct tegra_slink_data *tspi = spi_master_get_devdata(master);
tspi             1224 drivers/spi/spi-tegra20-slink.c 	ret = clk_prepare_enable(tspi->clk);
tspi             1226 drivers/spi/spi-tegra20-slink.c 		dev_err(tspi->dev, "clk_prepare failed: %d\n", ret);