spfi              109 drivers/spi/spi-img-spfi.c static inline u32 spfi_readl(struct img_spfi *spfi, u32 reg)
spfi              111 drivers/spi/spi-img-spfi.c 	return readl(spfi->regs + reg);
spfi              114 drivers/spi/spi-img-spfi.c static inline void spfi_writel(struct img_spfi *spfi, u32 val, u32 reg)
spfi              116 drivers/spi/spi-img-spfi.c 	writel(val, spfi->regs + reg);
spfi              119 drivers/spi/spi-img-spfi.c static inline void spfi_start(struct img_spfi *spfi)
spfi              123 drivers/spi/spi-img-spfi.c 	val = spfi_readl(spfi, SPFI_CONTROL);
spfi              125 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, val, SPFI_CONTROL);
spfi              128 drivers/spi/spi-img-spfi.c static inline void spfi_reset(struct img_spfi *spfi)
spfi              130 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, SPFI_CONTROL_SOFT_RESET, SPFI_CONTROL);
spfi              131 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, 0, SPFI_CONTROL);
spfi              134 drivers/spi/spi-img-spfi.c static int spfi_wait_all_done(struct img_spfi *spfi)
spfi              139 drivers/spi/spi-img-spfi.c 		u32 status = spfi_readl(spfi, SPFI_INTERRUPT_STATUS);
spfi              142 drivers/spi/spi-img-spfi.c 			spfi_writel(spfi, SPFI_INTERRUPT_ALLDONETRIG,
spfi              149 drivers/spi/spi-img-spfi.c 	dev_err(spfi->dev, "Timed out waiting for transaction to complete\n");
spfi              150 drivers/spi/spi-img-spfi.c 	spfi_reset(spfi);
spfi              155 drivers/spi/spi-img-spfi.c static unsigned int spfi_pio_write32(struct img_spfi *spfi, const u32 *buf,
spfi              162 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, SPFI_INTERRUPT_SDFUL, SPFI_INTERRUPT_CLEAR);
spfi              163 drivers/spi/spi-img-spfi.c 		status = spfi_readl(spfi, SPFI_INTERRUPT_STATUS);
spfi              166 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, buf[count], SPFI_TX_32BIT_VALID_DATA);
spfi              173 drivers/spi/spi-img-spfi.c static unsigned int spfi_pio_write8(struct img_spfi *spfi, const u8 *buf,
spfi              180 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, SPFI_INTERRUPT_SDFUL, SPFI_INTERRUPT_CLEAR);
spfi              181 drivers/spi/spi-img-spfi.c 		status = spfi_readl(spfi, SPFI_INTERRUPT_STATUS);
spfi              184 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, buf[count], SPFI_TX_8BIT_VALID_DATA);
spfi              191 drivers/spi/spi-img-spfi.c static unsigned int spfi_pio_read32(struct img_spfi *spfi, u32 *buf,
spfi              198 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, SPFI_INTERRUPT_GDEX32BIT,
spfi              200 drivers/spi/spi-img-spfi.c 		status = spfi_readl(spfi, SPFI_INTERRUPT_STATUS);
spfi              203 drivers/spi/spi-img-spfi.c 		buf[count] = spfi_readl(spfi, SPFI_RX_32BIT_VALID_DATA);
spfi              210 drivers/spi/spi-img-spfi.c static unsigned int spfi_pio_read8(struct img_spfi *spfi, u8 *buf,
spfi              217 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, SPFI_INTERRUPT_GDEX8BIT,
spfi              219 drivers/spi/spi-img-spfi.c 		status = spfi_readl(spfi, SPFI_INTERRUPT_STATUS);
spfi              222 drivers/spi/spi-img-spfi.c 		buf[count] = spfi_readl(spfi, SPFI_RX_8BIT_VALID_DATA);
spfi              233 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(spi->master);
spfi              245 drivers/spi/spi-img-spfi.c 	spfi_start(spfi);
spfi              254 drivers/spi/spi-img-spfi.c 			tx_count = spfi_pio_write32(spfi, tx_buf, tx_bytes);
spfi              256 drivers/spi/spi-img-spfi.c 			tx_count = spfi_pio_write8(spfi, tx_buf, tx_bytes);
spfi              259 drivers/spi/spi-img-spfi.c 			rx_count = spfi_pio_read32(spfi, rx_buf, rx_bytes);
spfi              261 drivers/spi/spi-img-spfi.c 			rx_count = spfi_pio_read8(spfi, rx_buf, rx_bytes);
spfi              272 drivers/spi/spi-img-spfi.c 		dev_err(spfi->dev, "PIO transfer timed out\n");
spfi              276 drivers/spi/spi-img-spfi.c 	ret = spfi_wait_all_done(spfi);
spfi              285 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = data;
spfi              288 drivers/spi/spi-img-spfi.c 	spfi_wait_all_done(spfi);
spfi              290 drivers/spi/spi-img-spfi.c 	spin_lock_irqsave(&spfi->lock, flags);
spfi              291 drivers/spi/spi-img-spfi.c 	spfi->rx_dma_busy = false;
spfi              292 drivers/spi/spi-img-spfi.c 	if (!spfi->tx_dma_busy)
spfi              293 drivers/spi/spi-img-spfi.c 		spi_finalize_current_transfer(spfi->master);
spfi              294 drivers/spi/spi-img-spfi.c 	spin_unlock_irqrestore(&spfi->lock, flags);
spfi              299 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = data;
spfi              302 drivers/spi/spi-img-spfi.c 	spfi_wait_all_done(spfi);
spfi              304 drivers/spi/spi-img-spfi.c 	spin_lock_irqsave(&spfi->lock, flags);
spfi              305 drivers/spi/spi-img-spfi.c 	spfi->tx_dma_busy = false;
spfi              306 drivers/spi/spi-img-spfi.c 	if (!spfi->rx_dma_busy)
spfi              307 drivers/spi/spi-img-spfi.c 		spi_finalize_current_transfer(spfi->master);
spfi              308 drivers/spi/spi-img-spfi.c 	spin_unlock_irqrestore(&spfi->lock, flags);
spfi              315 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(spi->master);
spfi              319 drivers/spi/spi-img-spfi.c 	spfi->rx_dma_busy = false;
spfi              320 drivers/spi/spi-img-spfi.c 	spfi->tx_dma_busy = false;
spfi              325 drivers/spi/spi-img-spfi.c 			rxconf.src_addr = spfi->phys + SPFI_RX_32BIT_VALID_DATA;
spfi              329 drivers/spi/spi-img-spfi.c 			rxconf.src_addr = spfi->phys + SPFI_RX_8BIT_VALID_DATA;
spfi              333 drivers/spi/spi-img-spfi.c 		dmaengine_slave_config(spfi->rx_ch, &rxconf);
spfi              335 drivers/spi/spi-img-spfi.c 		rxdesc = dmaengine_prep_slave_sg(spfi->rx_ch, xfer->rx_sg.sgl,
spfi              343 drivers/spi/spi-img-spfi.c 		rxdesc->callback_param = spfi;
spfi              349 drivers/spi/spi-img-spfi.c 			txconf.dst_addr = spfi->phys + SPFI_TX_32BIT_VALID_DATA;
spfi              353 drivers/spi/spi-img-spfi.c 			txconf.dst_addr = spfi->phys + SPFI_TX_8BIT_VALID_DATA;
spfi              357 drivers/spi/spi-img-spfi.c 		dmaengine_slave_config(spfi->tx_ch, &txconf);
spfi              359 drivers/spi/spi-img-spfi.c 		txdesc = dmaengine_prep_slave_sg(spfi->tx_ch, xfer->tx_sg.sgl,
spfi              367 drivers/spi/spi-img-spfi.c 		txdesc->callback_param = spfi;
spfi              371 drivers/spi/spi-img-spfi.c 		spfi->rx_dma_busy = true;
spfi              373 drivers/spi/spi-img-spfi.c 		dma_async_issue_pending(spfi->rx_ch);
spfi              376 drivers/spi/spi-img-spfi.c 	spfi_start(spfi);
spfi              379 drivers/spi/spi-img-spfi.c 		spfi->tx_dma_busy = true;
spfi              381 drivers/spi/spi-img-spfi.c 		dma_async_issue_pending(spfi->tx_ch);
spfi              387 drivers/spi/spi-img-spfi.c 	dmaengine_terminate_all(spfi->rx_ch);
spfi              388 drivers/spi/spi-img-spfi.c 	dmaengine_terminate_all(spfi->tx_ch);
spfi              395 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              402 drivers/spi/spi-img-spfi.c 	spin_lock_irqsave(&spfi->lock, flags);
spfi              403 drivers/spi/spi-img-spfi.c 	if (spfi->tx_dma_busy || spfi->rx_dma_busy) {
spfi              404 drivers/spi/spi-img-spfi.c 		spfi->tx_dma_busy = false;
spfi              405 drivers/spi/spi-img-spfi.c 		spfi->rx_dma_busy = false;
spfi              407 drivers/spi/spi-img-spfi.c 		dmaengine_terminate_all(spfi->tx_ch);
spfi              408 drivers/spi/spi-img-spfi.c 		dmaengine_terminate_all(spfi->rx_ch);
spfi              410 drivers/spi/spi-img-spfi.c 	spin_unlock_irqrestore(&spfi->lock, flags);
spfi              415 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              418 drivers/spi/spi-img-spfi.c 	val = spfi_readl(spfi, SPFI_PORT_STATE);
spfi              430 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, val, SPFI_PORT_STATE);
spfi              438 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              440 drivers/spi/spi-img-spfi.c 	spfi_reset(spfi);
spfi              496 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(spi->master);
spfi              503 drivers/spi/spi-img-spfi.c 	div = DIV_ROUND_UP(clk_get_rate(spfi->spfi_clk), xfer->speed_hz);
spfi              506 drivers/spi/spi-img-spfi.c 	val = spfi_readl(spfi, SPFI_DEVICE_PARAMETER(spi->chip_select));
spfi              510 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, val, SPFI_DEVICE_PARAMETER(spi->chip_select));
spfi              512 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, xfer->len << SPFI_TRANSACTION_TSIZE_SHIFT,
spfi              515 drivers/spi/spi-img-spfi.c 	val = spfi_readl(spfi, SPFI_CONTROL);
spfi              529 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, val, SPFI_CONTROL);
spfi              536 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(spi->master);
spfi              540 drivers/spi/spi-img-spfi.c 		dev_err(spfi->dev,
spfi              565 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = (struct img_spfi *)dev_id;
spfi              568 drivers/spi/spi-img-spfi.c 	status = spfi_readl(spfi, SPFI_INTERRUPT_STATUS);
spfi              570 drivers/spi/spi-img-spfi.c 		spfi_writel(spfi, SPFI_INTERRUPT_IACCESS, SPFI_INTERRUPT_CLEAR);
spfi              571 drivers/spi/spi-img-spfi.c 		dev_err(spfi->dev, "Illegal access interrupt");
spfi              581 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi;
spfi              586 drivers/spi/spi-img-spfi.c 	master = spi_alloc_master(&pdev->dev, sizeof(*spfi));
spfi              591 drivers/spi/spi-img-spfi.c 	spfi = spi_master_get_devdata(master);
spfi              592 drivers/spi/spi-img-spfi.c 	spfi->dev = &pdev->dev;
spfi              593 drivers/spi/spi-img-spfi.c 	spfi->master = master;
spfi              594 drivers/spi/spi-img-spfi.c 	spin_lock_init(&spfi->lock);
spfi              597 drivers/spi/spi-img-spfi.c 	spfi->regs = devm_ioremap_resource(spfi->dev, res);
spfi              598 drivers/spi/spi-img-spfi.c 	if (IS_ERR(spfi->regs)) {
spfi              599 drivers/spi/spi-img-spfi.c 		ret = PTR_ERR(spfi->regs);
spfi              602 drivers/spi/spi-img-spfi.c 	spfi->phys = res->start;
spfi              604 drivers/spi/spi-img-spfi.c 	spfi->irq = platform_get_irq(pdev, 0);
spfi              605 drivers/spi/spi-img-spfi.c 	if (spfi->irq < 0) {
spfi              606 drivers/spi/spi-img-spfi.c 		ret = spfi->irq;
spfi              609 drivers/spi/spi-img-spfi.c 	ret = devm_request_irq(spfi->dev, spfi->irq, img_spfi_irq,
spfi              610 drivers/spi/spi-img-spfi.c 			       IRQ_TYPE_LEVEL_HIGH, dev_name(spfi->dev), spfi);
spfi              614 drivers/spi/spi-img-spfi.c 	spfi->sys_clk = devm_clk_get(spfi->dev, "sys");
spfi              615 drivers/spi/spi-img-spfi.c 	if (IS_ERR(spfi->sys_clk)) {
spfi              616 drivers/spi/spi-img-spfi.c 		ret = PTR_ERR(spfi->sys_clk);
spfi              619 drivers/spi/spi-img-spfi.c 	spfi->spfi_clk = devm_clk_get(spfi->dev, "spfi");
spfi              620 drivers/spi/spi-img-spfi.c 	if (IS_ERR(spfi->spfi_clk)) {
spfi              621 drivers/spi/spi-img-spfi.c 		ret = PTR_ERR(spfi->spfi_clk);
spfi              625 drivers/spi/spi-img-spfi.c 	ret = clk_prepare_enable(spfi->sys_clk);
spfi              628 drivers/spi/spi-img-spfi.c 	ret = clk_prepare_enable(spfi->spfi_clk);
spfi              632 drivers/spi/spi-img-spfi.c 	spfi_reset(spfi);
spfi              637 drivers/spi/spi-img-spfi.c 	spfi_writel(spfi, SPFI_INTERRUPT_IACCESS, SPFI_INTERRUPT_ENABLE);
spfi              642 drivers/spi/spi-img-spfi.c 	if (of_property_read_bool(spfi->dev->of_node, "img,supports-quad-mode"))
spfi              646 drivers/spi/spi-img-spfi.c 	master->max_speed_hz = clk_get_rate(spfi->spfi_clk) / 4;
spfi              647 drivers/spi/spi-img-spfi.c 	master->min_speed_hz = clk_get_rate(spfi->spfi_clk) / 512;
spfi              656 drivers/spi/spi-img-spfi.c 	if (!of_property_read_u32(spfi->dev->of_node, "spfi-max-frequency",
spfi              669 drivers/spi/spi-img-spfi.c 	spfi->tx_ch = dma_request_slave_channel(spfi->dev, "tx");
spfi              670 drivers/spi/spi-img-spfi.c 	spfi->rx_ch = dma_request_slave_channel(spfi->dev, "rx");
spfi              671 drivers/spi/spi-img-spfi.c 	if (!spfi->tx_ch || !spfi->rx_ch) {
spfi              672 drivers/spi/spi-img-spfi.c 		if (spfi->tx_ch)
spfi              673 drivers/spi/spi-img-spfi.c 			dma_release_channel(spfi->tx_ch);
spfi              674 drivers/spi/spi-img-spfi.c 		if (spfi->rx_ch)
spfi              675 drivers/spi/spi-img-spfi.c 			dma_release_channel(spfi->rx_ch);
spfi              676 drivers/spi/spi-img-spfi.c 		spfi->tx_ch = NULL;
spfi              677 drivers/spi/spi-img-spfi.c 		spfi->rx_ch = NULL;
spfi              678 drivers/spi/spi-img-spfi.c 		dev_warn(spfi->dev, "Failed to get DMA channels, falling back to PIO mode\n");
spfi              680 drivers/spi/spi-img-spfi.c 		master->dma_tx = spfi->tx_ch;
spfi              681 drivers/spi/spi-img-spfi.c 		master->dma_rx = spfi->rx_ch;
spfi              685 drivers/spi/spi-img-spfi.c 	pm_runtime_set_active(spfi->dev);
spfi              686 drivers/spi/spi-img-spfi.c 	pm_runtime_enable(spfi->dev);
spfi              688 drivers/spi/spi-img-spfi.c 	ret = devm_spi_register_master(spfi->dev, master);
spfi              695 drivers/spi/spi-img-spfi.c 	pm_runtime_disable(spfi->dev);
spfi              696 drivers/spi/spi-img-spfi.c 	if (spfi->rx_ch)
spfi              697 drivers/spi/spi-img-spfi.c 		dma_release_channel(spfi->rx_ch);
spfi              698 drivers/spi/spi-img-spfi.c 	if (spfi->tx_ch)
spfi              699 drivers/spi/spi-img-spfi.c 		dma_release_channel(spfi->tx_ch);
spfi              700 drivers/spi/spi-img-spfi.c 	clk_disable_unprepare(spfi->spfi_clk);
spfi              702 drivers/spi/spi-img-spfi.c 	clk_disable_unprepare(spfi->sys_clk);
spfi              712 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              714 drivers/spi/spi-img-spfi.c 	if (spfi->tx_ch)
spfi              715 drivers/spi/spi-img-spfi.c 		dma_release_channel(spfi->tx_ch);
spfi              716 drivers/spi/spi-img-spfi.c 	if (spfi->rx_ch)
spfi              717 drivers/spi/spi-img-spfi.c 		dma_release_channel(spfi->rx_ch);
spfi              719 drivers/spi/spi-img-spfi.c 	pm_runtime_disable(spfi->dev);
spfi              720 drivers/spi/spi-img-spfi.c 	if (!pm_runtime_status_suspended(spfi->dev)) {
spfi              721 drivers/spi/spi-img-spfi.c 		clk_disable_unprepare(spfi->spfi_clk);
spfi              722 drivers/spi/spi-img-spfi.c 		clk_disable_unprepare(spfi->sys_clk);
spfi              732 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              734 drivers/spi/spi-img-spfi.c 	clk_disable_unprepare(spfi->spfi_clk);
spfi              735 drivers/spi/spi-img-spfi.c 	clk_disable_unprepare(spfi->sys_clk);
spfi              743 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              746 drivers/spi/spi-img-spfi.c 	ret = clk_prepare_enable(spfi->sys_clk);
spfi              749 drivers/spi/spi-img-spfi.c 	ret = clk_prepare_enable(spfi->spfi_clk);
spfi              751 drivers/spi/spi-img-spfi.c 		clk_disable_unprepare(spfi->sys_clk);
spfi              770 drivers/spi/spi-img-spfi.c 	struct img_spfi *spfi = spi_master_get_devdata(master);
spfi              776 drivers/spi/spi-img-spfi.c 	spfi_reset(spfi);