Lines Matching full:xspi
129 static inline u32 cdns_spi_read(struct cdns_spi *xspi, u32 offset) in cdns_spi_read() argument
131 return readl_relaxed(xspi->regs + offset); in cdns_spi_read()
134 static inline void cdns_spi_write(struct cdns_spi *xspi, u32 offset, u32 val) in cdns_spi_write() argument
136 writel_relaxed(val, xspi->regs + offset); in cdns_spi_write()
141 * @xspi: Pointer to the cdns_spi structure
150 static void cdns_spi_init_hw(struct cdns_spi *xspi) in cdns_spi_init_hw() argument
154 if (xspi->is_decoded_cs) in cdns_spi_init_hw()
157 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE); in cdns_spi_init_hw()
158 cdns_spi_write(xspi, CDNS_SPI_IDR, CDNS_SPI_IXR_ALL); in cdns_spi_init_hw()
161 while (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_RXNEMTY) in cdns_spi_init_hw()
162 cdns_spi_read(xspi, CDNS_SPI_RXD); in cdns_spi_init_hw()
164 cdns_spi_write(xspi, CDNS_SPI_ISR, CDNS_SPI_IXR_ALL); in cdns_spi_init_hw()
165 cdns_spi_write(xspi, CDNS_SPI_CR, ctrl_reg); in cdns_spi_init_hw()
166 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_ENABLE); in cdns_spi_init_hw()
176 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_chipselect() local
179 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR); in cdns_spi_chipselect()
187 if (!(xspi->is_decoded_cs)) in cdns_spi_chipselect()
196 cdns_spi_write(xspi, CDNS_SPI_CR, ctrl_reg); in cdns_spi_chipselect()
207 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_config_clock_mode() local
210 new_ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR); in cdns_spi_config_clock_mode()
227 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE); in cdns_spi_config_clock_mode()
228 cdns_spi_write(xspi, CDNS_SPI_CR, new_ctrl_reg); in cdns_spi_config_clock_mode()
229 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_ENABLE); in cdns_spi_config_clock_mode()
250 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_config_clock_freq() local
254 frequency = xspi->clk_rate; in cdns_spi_config_clock_freq()
256 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR); in cdns_spi_config_clock_freq()
259 if (xspi->speed_hz != transfer->speed_hz) { in cdns_spi_config_clock_freq()
269 xspi->speed_hz = frequency / (2 << baud_rate_val); in cdns_spi_config_clock_freq()
271 cdns_spi_write(xspi, CDNS_SPI_CR, ctrl_reg); in cdns_spi_config_clock_freq()
288 struct cdns_spi *xspi = spi_master_get_devdata(spi->master); in cdns_spi_setup_transfer() local
294 xspi->speed_hz); in cdns_spi_setup_transfer()
301 * @xspi: Pointer to the cdns_spi structure
303 static void cdns_spi_fill_tx_fifo(struct cdns_spi *xspi) in cdns_spi_fill_tx_fifo() argument
308 (xspi->tx_bytes > 0)) { in cdns_spi_fill_tx_fifo()
310 /* When xspi in busy condition, bytes may send failed, in cdns_spi_fill_tx_fifo()
313 if (cdns_spi_read(xspi, CDNS_SPI_ISR) & in cdns_spi_fill_tx_fifo()
317 if (xspi->txbuf) in cdns_spi_fill_tx_fifo()
318 cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++); in cdns_spi_fill_tx_fifo()
320 cdns_spi_write(xspi, CDNS_SPI_TXD, 0); in cdns_spi_fill_tx_fifo()
322 xspi->tx_bytes--; in cdns_spi_fill_tx_fifo()
330 * @dev_id: Pointer to the xspi structure
344 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_irq() local
348 intr_status = cdns_spi_read(xspi, CDNS_SPI_ISR); in cdns_spi_irq()
349 cdns_spi_write(xspi, CDNS_SPI_ISR, intr_status); in cdns_spi_irq()
356 cdns_spi_write(xspi, CDNS_SPI_IDR, CDNS_SPI_IXR_DEFAULT); in cdns_spi_irq()
362 trans_cnt = xspi->rx_bytes - xspi->tx_bytes; in cdns_spi_irq()
368 data = cdns_spi_read(xspi, CDNS_SPI_RXD); in cdns_spi_irq()
369 if (xspi->rxbuf) in cdns_spi_irq()
370 *xspi->rxbuf++ = data; in cdns_spi_irq()
372 xspi->rx_bytes--; in cdns_spi_irq()
376 if (xspi->tx_bytes) { in cdns_spi_irq()
378 cdns_spi_fill_tx_fifo(xspi); in cdns_spi_irq()
381 cdns_spi_write(xspi, CDNS_SPI_IDR, in cdns_spi_irq()
414 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_transfer_one() local
416 xspi->txbuf = transfer->tx_buf; in cdns_transfer_one()
417 xspi->rxbuf = transfer->rx_buf; in cdns_transfer_one()
418 xspi->tx_bytes = transfer->len; in cdns_transfer_one()
419 xspi->rx_bytes = transfer->len; in cdns_transfer_one()
422 cdns_spi_fill_tx_fifo(xspi); in cdns_transfer_one()
425 cdns_spi_write(xspi, CDNS_SPI_IER, CDNS_SPI_IXR_DEFAULT); in cdns_transfer_one()
440 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_prepare_transfer_hardware() local
442 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_ENABLE); in cdns_prepare_transfer_hardware()
458 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_unprepare_transfer_hardware() local
460 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE); in cdns_unprepare_transfer_hardware()
477 struct cdns_spi *xspi; in cdns_spi_probe() local
480 master = spi_alloc_master(&pdev->dev, sizeof(*xspi)); in cdns_spi_probe()
484 xspi = spi_master_get_devdata(master); in cdns_spi_probe()
488 xspi->regs = devm_platform_ioremap_resource(pdev, 0); in cdns_spi_probe()
489 if (IS_ERR(xspi->regs)) { in cdns_spi_probe()
490 ret = PTR_ERR(xspi->regs); in cdns_spi_probe()
494 xspi->pclk = devm_clk_get(&pdev->dev, "pclk"); in cdns_spi_probe()
495 if (IS_ERR(xspi->pclk)) { in cdns_spi_probe()
497 ret = PTR_ERR(xspi->pclk); in cdns_spi_probe()
501 xspi->ref_clk = devm_clk_get(&pdev->dev, "ref_clk"); in cdns_spi_probe()
502 if (IS_ERR(xspi->ref_clk)) { in cdns_spi_probe()
504 ret = PTR_ERR(xspi->ref_clk); in cdns_spi_probe()
508 ret = clk_prepare_enable(xspi->pclk); in cdns_spi_probe()
514 ret = clk_prepare_enable(xspi->ref_clk); in cdns_spi_probe()
533 &xspi->is_decoded_cs); in cdns_spi_probe()
535 xspi->is_decoded_cs = 0; in cdns_spi_probe()
538 cdns_spi_init_hw(xspi); in cdns_spi_probe()
563 xspi->clk_rate = clk_get_rate(xspi->ref_clk); in cdns_spi_probe()
565 master->max_speed_hz = xspi->clk_rate / 4; in cdns_spi_probe()
566 xspi->speed_hz = master->max_speed_hz; in cdns_spi_probe()
584 clk_disable_unprepare(xspi->ref_clk); in cdns_spi_probe()
586 clk_disable_unprepare(xspi->pclk); in cdns_spi_probe()
605 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_remove() local
607 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE); in cdns_spi_remove()
609 clk_disable_unprepare(xspi->ref_clk); in cdns_spi_remove()
610 clk_disable_unprepare(xspi->pclk); in cdns_spi_remove()
646 struct cdns_spi *xspi = spi_master_get_devdata(master); in cdns_spi_resume() local
648 cdns_spi_init_hw(xspi); in cdns_spi_resume()
663 struct cdns_spi *xspi = spi_master_get_devdata(master); in cnds_runtime_resume() local
666 ret = clk_prepare_enable(xspi->pclk); in cnds_runtime_resume()
672 ret = clk_prepare_enable(xspi->ref_clk); in cnds_runtime_resume()
675 clk_disable_unprepare(xspi->pclk); in cnds_runtime_resume()
692 struct cdns_spi *xspi = spi_master_get_devdata(master); in cnds_runtime_suspend() local
694 clk_disable_unprepare(xspi->ref_clk); in cnds_runtime_suspend()
695 clk_disable_unprepare(xspi->pclk); in cnds_runtime_suspend()