Lines Matching refs:xspi

131 static inline u32 cdns_spi_read(struct cdns_spi *xspi, u32 offset)
133 return readl_relaxed(xspi->regs + offset);
136 static inline void cdns_spi_write(struct cdns_spi *xspi, u32 offset, u32 val)
138 writel_relaxed(val, xspi->regs + offset);
143 * @xspi: Pointer to the cdns_spi structure
153 static void cdns_spi_init_hw(struct cdns_spi *xspi, bool is_target)
160 if (xspi->is_decoded_cs)
163 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
164 cdns_spi_write(xspi, CDNS_SPI_IDR, CDNS_SPI_IXR_ALL);
167 while (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_RXNEMTY)
168 cdns_spi_read(xspi, CDNS_SPI_RXD);
170 cdns_spi_write(xspi, CDNS_SPI_ISR, CDNS_SPI_IXR_ALL);
171 cdns_spi_write(xspi, CDNS_SPI_CR, ctrl_reg);
172 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_ENABLE);
182 struct cdns_spi *xspi = spi_controller_get_devdata(spi->controller);
185 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
193 if (!(xspi->is_decoded_cs))
202 cdns_spi_write(xspi, CDNS_SPI_CR, ctrl_reg);
213 struct cdns_spi *xspi = spi_controller_get_devdata(spi->controller);
216 new_ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
233 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
234 cdns_spi_write(xspi, CDNS_SPI_CR, new_ctrl_reg);
235 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_ENABLE);
256 struct cdns_spi *xspi = spi_controller_get_devdata(spi->controller);
260 frequency = xspi->clk_rate;
262 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
265 if (xspi->speed_hz != transfer->speed_hz) {
275 xspi->speed_hz = frequency / (2 << baud_rate_val);
277 cdns_spi_write(xspi, CDNS_SPI_CR, ctrl_reg);
294 struct cdns_spi *xspi = spi_controller_get_devdata(spi->controller);
300 xspi->speed_hz);
307 * @xspi: Pointer to the cdns_spi structure
311 static void cdns_spi_process_fifo(struct cdns_spi *xspi, int ntx, int nrx)
313 ntx = clamp(ntx, 0, xspi->tx_bytes);
314 nrx = clamp(nrx, 0, xspi->rx_bytes);
316 xspi->tx_bytes -= ntx;
317 xspi->rx_bytes -= nrx;
321 u8 data = cdns_spi_read(xspi, CDNS_SPI_RXD);
323 if (xspi->rxbuf)
324 *xspi->rxbuf++ = data;
330 if (xspi->txbuf)
331 cdns_spi_write(xspi, CDNS_SPI_TXD, *xspi->txbuf++);
333 cdns_spi_write(xspi, CDNS_SPI_TXD, 0);
344 * @dev_id: Pointer to the xspi structure
358 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
363 intr_status = cdns_spi_read(xspi, CDNS_SPI_ISR);
364 cdns_spi_write(xspi, CDNS_SPI_ISR, intr_status);
371 cdns_spi_write(xspi, CDNS_SPI_IDR, CDNS_SPI_IXR_DEFAULT);
375 int threshold = cdns_spi_read(xspi, CDNS_SPI_THLD);
376 int trans_cnt = xspi->rx_bytes - xspi->tx_bytes;
384 if (xspi->tx_bytes < xspi->tx_fifo_depth >> 1)
385 cdns_spi_write(xspi, CDNS_SPI_THLD, 1);
387 if (xspi->tx_bytes) {
388 cdns_spi_process_fifo(xspi, trans_cnt, trans_cnt);
395 cdns_spi_process_fifo(xspi, 0, trans_cnt);
396 cdns_spi_write(xspi, CDNS_SPI_IDR,
431 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
433 xspi->txbuf = transfer->tx_buf;
434 xspi->rxbuf = transfer->rx_buf;
435 xspi->tx_bytes = transfer->len;
436 xspi->rx_bytes = transfer->len;
444 if (xspi->tx_bytes > xspi->tx_fifo_depth)
445 cdns_spi_write(xspi, CDNS_SPI_THLD, xspi->tx_fifo_depth >> 1);
448 /* When xspi in busy condition, bytes may send failed,
451 if (cdns_spi_read(xspi, CDNS_SPI_ISR) & CDNS_SPI_IXR_TXFULL)
454 cdns_spi_process_fifo(xspi, xspi->tx_fifo_depth, 0);
456 cdns_spi_write(xspi, CDNS_SPI_IER, CDNS_SPI_IXR_DEFAULT);
471 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
473 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_ENABLE);
490 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
492 unsigned int cnt = xspi->tx_fifo_depth;
496 cdns_spi_read(xspi, CDNS_SPI_RXD);
500 ctrl_reg = cdns_spi_read(xspi, CDNS_SPI_CR);
503 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
506 cdns_spi_write(xspi, CDNS_SPI_THLD, 0x1);
512 * @xspi: Pointer to the cdns_spi structure
518 static void cdns_spi_detect_fifo_depth(struct cdns_spi *xspi)
521 cdns_spi_write(xspi, CDNS_SPI_THLD, 0xffff);
522 xspi->tx_fifo_depth = cdns_spi_read(xspi, CDNS_SPI_THLD) + 1;
525 cdns_spi_write(xspi, CDNS_SPI_THLD, 0x1);
538 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
541 intr_status = cdns_spi_read(xspi, CDNS_SPI_ISR);
542 cdns_spi_write(xspi, CDNS_SPI_ISR, intr_status);
543 cdns_spi_write(xspi, CDNS_SPI_IDR, (CDNS_SPI_IXR_MODF | CDNS_SPI_IXR_RXNEMTY));
561 struct cdns_spi *xspi;
567 ctlr = spi_alloc_target(&pdev->dev, sizeof(*xspi));
569 ctlr = spi_alloc_host(&pdev->dev, sizeof(*xspi));
574 xspi = spi_controller_get_devdata(ctlr);
578 xspi->regs = devm_platform_ioremap_resource(pdev, 0);
579 if (IS_ERR(xspi->regs)) {
580 ret = PTR_ERR(xspi->regs);
584 xspi->pclk = devm_clk_get(&pdev->dev, "pclk");
585 if (IS_ERR(xspi->pclk)) {
587 ret = PTR_ERR(xspi->pclk);
591 ret = clk_prepare_enable(xspi->pclk);
598 xspi->ref_clk = devm_clk_get(&pdev->dev, "ref_clk");
599 if (IS_ERR(xspi->ref_clk)) {
601 ret = PTR_ERR(xspi->ref_clk);
605 ret = clk_prepare_enable(xspi->ref_clk);
624 &xspi->is_decoded_cs);
626 xspi->is_decoded_cs = 0;
629 cdns_spi_detect_fifo_depth(xspi);
632 cdns_spi_init_hw(xspi, spi_controller_is_target(ctlr));
660 xspi->clk_rate = clk_get_rate(xspi->ref_clk);
662 ctlr->max_speed_hz = xspi->clk_rate / 4;
663 xspi->speed_hz = ctlr->max_speed_hz;
682 clk_disable_unprepare(xspi->ref_clk);
685 clk_disable_unprepare(xspi->pclk);
702 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
704 cdns_spi_write(xspi, CDNS_SPI_ER, CDNS_SPI_ER_DISABLE);
706 clk_disable_unprepare(xspi->ref_clk);
707 clk_disable_unprepare(xspi->pclk);
741 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
743 cdns_spi_init_hw(xspi, spi_controller_is_target(ctlr));
758 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
761 ret = clk_prepare_enable(xspi->pclk);
767 ret = clk_prepare_enable(xspi->ref_clk);
770 clk_disable_unprepare(xspi->pclk);
787 struct cdns_spi *xspi = spi_controller_get_devdata(ctlr);
789 clk_disable_unprepare(xspi->ref_clk);
790 clk_disable_unprepare(xspi->pclk);