spicc             142 drivers/spi/spi-meson-spicc.c static inline bool meson_spicc_txfull(struct meson_spicc_device *spicc)
spicc             145 drivers/spi/spi-meson-spicc.c 			   readl_relaxed(spicc->base + SPICC_STATREG));
spicc             148 drivers/spi/spi-meson-spicc.c static inline bool meson_spicc_rxready(struct meson_spicc_device *spicc)
spicc             151 drivers/spi/spi-meson-spicc.c 			 readl_relaxed(spicc->base + SPICC_STATREG));
spicc             154 drivers/spi/spi-meson-spicc.c static inline u32 meson_spicc_pull_data(struct meson_spicc_device *spicc)
spicc             156 drivers/spi/spi-meson-spicc.c 	unsigned int bytes = spicc->bytes_per_word;
spicc             162 drivers/spi/spi-meson-spicc.c 		byte = *spicc->tx_buf++;
spicc             167 drivers/spi/spi-meson-spicc.c 	spicc->tx_remain--;
spicc             171 drivers/spi/spi-meson-spicc.c static inline void meson_spicc_push_data(struct meson_spicc_device *spicc,
spicc             174 drivers/spi/spi-meson-spicc.c 	unsigned int bytes = spicc->bytes_per_word;
spicc             180 drivers/spi/spi-meson-spicc.c 		*spicc->rx_buf++ = byte;
spicc             184 drivers/spi/spi-meson-spicc.c 	spicc->rx_remain--;
spicc             187 drivers/spi/spi-meson-spicc.c static inline void meson_spicc_rx(struct meson_spicc_device *spicc)
spicc             190 drivers/spi/spi-meson-spicc.c 	while (spicc->rx_remain &&
spicc             191 drivers/spi/spi-meson-spicc.c 	       meson_spicc_rxready(spicc))
spicc             192 drivers/spi/spi-meson-spicc.c 		meson_spicc_push_data(spicc,
spicc             193 drivers/spi/spi-meson-spicc.c 				readl_relaxed(spicc->base + SPICC_RXDATA));
spicc             196 drivers/spi/spi-meson-spicc.c static inline void meson_spicc_tx(struct meson_spicc_device *spicc)
spicc             199 drivers/spi/spi-meson-spicc.c 	while (spicc->tx_remain &&
spicc             200 drivers/spi/spi-meson-spicc.c 	       !meson_spicc_txfull(spicc))
spicc             201 drivers/spi/spi-meson-spicc.c 		writel_relaxed(meson_spicc_pull_data(spicc),
spicc             202 drivers/spi/spi-meson-spicc.c 			       spicc->base + SPICC_TXDATA);
spicc             205 drivers/spi/spi-meson-spicc.c static inline u32 meson_spicc_setup_rx_irq(struct meson_spicc_device *spicc,
spicc             208 drivers/spi/spi-meson-spicc.c 	if (spicc->rx_remain > SPICC_FIFO_HALF)
spicc             216 drivers/spi/spi-meson-spicc.c static inline void meson_spicc_setup_burst(struct meson_spicc_device *spicc,
spicc             220 drivers/spi/spi-meson-spicc.c 	spicc->tx_remain = burst_len;
spicc             221 drivers/spi/spi-meson-spicc.c 	spicc->rx_remain = burst_len;
spicc             222 drivers/spi/spi-meson-spicc.c 	spicc->xfer_remain -= burst_len * spicc->bytes_per_word;
spicc             223 drivers/spi/spi-meson-spicc.c 	spicc->is_burst_end = false;
spicc             224 drivers/spi/spi-meson-spicc.c 	if (burst_len < SPICC_BURST_MAX || !spicc->xfer_remain)
spicc             225 drivers/spi/spi-meson-spicc.c 		spicc->is_last_burst = true;
spicc             227 drivers/spi/spi-meson-spicc.c 		spicc->is_last_burst = false;
spicc             233 drivers/spi/spi-meson-spicc.c 			spicc->base + SPICC_CONREG);
spicc             236 drivers/spi/spi-meson-spicc.c 	meson_spicc_tx(spicc);
spicc             241 drivers/spi/spi-meson-spicc.c 	struct meson_spicc_device *spicc = (void *) data;
spicc             242 drivers/spi/spi-meson-spicc.c 	u32 ctrl = readl_relaxed(spicc->base + SPICC_INTREG);
spicc             243 drivers/spi/spi-meson-spicc.c 	u32 stat = readl_relaxed(spicc->base + SPICC_STATREG) & ctrl;
spicc             248 drivers/spi/spi-meson-spicc.c 	meson_spicc_rx(spicc);
spicc             251 drivers/spi/spi-meson-spicc.c 	if (!spicc->tx_remain && !spicc->rx_remain) {
spicc             252 drivers/spi/spi-meson-spicc.c 		spicc->is_burst_end = true;
spicc             258 drivers/spi/spi-meson-spicc.c 		stat = readl_relaxed(spicc->base + SPICC_STATREG) & ctrl;
spicc             262 drivers/spi/spi-meson-spicc.c 	if ((stat & SPICC_TC) && spicc->is_burst_end) {
spicc             266 drivers/spi/spi-meson-spicc.c 		writel_relaxed(SPICC_TC, spicc->base + SPICC_STATREG);
spicc             271 drivers/spi/spi-meson-spicc.c 		if (spicc->is_last_burst) {
spicc             273 drivers/spi/spi-meson-spicc.c 			writel(0, spicc->base + SPICC_INTREG);
spicc             275 drivers/spi/spi-meson-spicc.c 			spi_finalize_current_transfer(spicc->master);
spicc             281 drivers/spi/spi-meson-spicc.c 				  spicc->xfer_remain / spicc->bytes_per_word,
spicc             285 drivers/spi/spi-meson-spicc.c 		meson_spicc_setup_burst(spicc, burst_len);
spicc             289 drivers/spi/spi-meson-spicc.c 				    spicc->base + SPICC_CONREG);
spicc             293 drivers/spi/spi-meson-spicc.c 	ctrl = meson_spicc_setup_rx_irq(spicc, ctrl);
spicc             296 drivers/spi/spi-meson-spicc.c 	writel(ctrl, spicc->base + SPICC_INTREG);
spicc             301 drivers/spi/spi-meson-spicc.c static u32 meson_spicc_setup_speed(struct meson_spicc_device *spicc, u32 conf,
spicc             307 drivers/spi/spi-meson-spicc.c 	parent = clk_get_rate(spicc->core);
spicc             321 drivers/spi/spi-meson-spicc.c 		dev_warn_once(&spicc->pdev->dev, "unable to get close to speed %u\n",
spicc             326 drivers/spi/spi-meson-spicc.c 	dev_dbg(&spicc->pdev->dev, "parent %lu, speed %u -> %lu (%u)\n",
spicc             335 drivers/spi/spi-meson-spicc.c static void meson_spicc_setup_xfer(struct meson_spicc_device *spicc,
spicc             341 drivers/spi/spi-meson-spicc.c 	conf = conf_orig = readl_relaxed(spicc->base + SPICC_CONREG);
spicc             344 drivers/spi/spi-meson-spicc.c 	conf = meson_spicc_setup_speed(spicc, conf, xfer->speed_hz);
spicc             349 drivers/spi/spi-meson-spicc.c 			   (spicc->bytes_per_word << 3) - 1);
spicc             353 drivers/spi/spi-meson-spicc.c 		writel_relaxed(conf, spicc->base + SPICC_CONREG);
spicc             360 drivers/spi/spi-meson-spicc.c 	struct meson_spicc_device *spicc = spi_master_get_devdata(master);
spicc             365 drivers/spi/spi-meson-spicc.c 	spicc->xfer = xfer;
spicc             368 drivers/spi/spi-meson-spicc.c 	spicc->tx_buf = (u8 *)xfer->tx_buf;
spicc             369 drivers/spi/spi-meson-spicc.c 	spicc->rx_buf = (u8 *)xfer->rx_buf;
spicc             370 drivers/spi/spi-meson-spicc.c 	spicc->xfer_remain = xfer->len;
spicc             373 drivers/spi/spi-meson-spicc.c 	spicc->bytes_per_word =
spicc             374 drivers/spi/spi-meson-spicc.c 	   DIV_ROUND_UP(spicc->xfer->bits_per_word, 8);
spicc             377 drivers/spi/spi-meson-spicc.c 	meson_spicc_setup_xfer(spicc, xfer);
spicc             380 drivers/spi/spi-meson-spicc.c 			  spicc->xfer_remain / spicc->bytes_per_word,
spicc             383 drivers/spi/spi-meson-spicc.c 	meson_spicc_setup_burst(spicc, burst_len);
spicc             385 drivers/spi/spi-meson-spicc.c 	irq = meson_spicc_setup_rx_irq(spicc, irq);
spicc             388 drivers/spi/spi-meson-spicc.c 	writel_bits_relaxed(SPICC_XCH, SPICC_XCH, spicc->base + SPICC_CONREG);
spicc             391 drivers/spi/spi-meson-spicc.c 	writel_relaxed(irq, spicc->base + SPICC_INTREG);
spicc             399 drivers/spi/spi-meson-spicc.c 	struct meson_spicc_device *spicc = spi_master_get_devdata(master);
spicc             404 drivers/spi/spi-meson-spicc.c 	spicc->message = message;
spicc             443 drivers/spi/spi-meson-spicc.c 	writel_relaxed(conf, spicc->base + SPICC_CONREG);
spicc             446 drivers/spi/spi-meson-spicc.c 	writel_relaxed(0, spicc->base + SPICC_PERIODREG);
spicc             448 drivers/spi/spi-meson-spicc.c 	writel_bits_relaxed(BIT(24), BIT(24), spicc->base + SPICC_TESTREG);
spicc             455 drivers/spi/spi-meson-spicc.c 	struct meson_spicc_device *spicc = spi_master_get_devdata(master);
spicc             458 drivers/spi/spi-meson-spicc.c 	writel(0, spicc->base + SPICC_INTREG);
spicc             461 drivers/spi/spi-meson-spicc.c 	writel_bits_relaxed(SPICC_ENABLE, 0, spicc->base + SPICC_CONREG);
spicc             463 drivers/spi/spi-meson-spicc.c 	device_reset_optional(&spicc->pdev->dev);
spicc             505 drivers/spi/spi-meson-spicc.c 	struct meson_spicc_device *spicc;
spicc             508 drivers/spi/spi-meson-spicc.c 	master = spi_alloc_master(&pdev->dev, sizeof(*spicc));
spicc             513 drivers/spi/spi-meson-spicc.c 	spicc = spi_master_get_devdata(master);
spicc             514 drivers/spi/spi-meson-spicc.c 	spicc->master = master;
spicc             516 drivers/spi/spi-meson-spicc.c 	spicc->pdev = pdev;
spicc             517 drivers/spi/spi-meson-spicc.c 	platform_set_drvdata(pdev, spicc);
spicc             519 drivers/spi/spi-meson-spicc.c 	spicc->base = devm_platform_ioremap_resource(pdev, 0);
spicc             520 drivers/spi/spi-meson-spicc.c 	if (IS_ERR(spicc->base)) {
spicc             522 drivers/spi/spi-meson-spicc.c 		ret = PTR_ERR(spicc->base);
spicc             527 drivers/spi/spi-meson-spicc.c 	writel_relaxed(0, spicc->base + SPICC_INTREG);
spicc             531 drivers/spi/spi-meson-spicc.c 			       0, NULL, spicc);
spicc             537 drivers/spi/spi-meson-spicc.c 	spicc->core = devm_clk_get(&pdev->dev, "core");
spicc             538 drivers/spi/spi-meson-spicc.c 	if (IS_ERR(spicc->core)) {
spicc             540 drivers/spi/spi-meson-spicc.c 		ret = PTR_ERR(spicc->core);
spicc             544 drivers/spi/spi-meson-spicc.c 	ret = clk_prepare_enable(spicc->core);
spicc             549 drivers/spi/spi-meson-spicc.c 	rate = clk_get_rate(spicc->core);
spicc             583 drivers/spi/spi-meson-spicc.c 	clk_disable_unprepare(spicc->core);
spicc             593 drivers/spi/spi-meson-spicc.c 	struct meson_spicc_device *spicc = platform_get_drvdata(pdev);
spicc             596 drivers/spi/spi-meson-spicc.c 	writel(0, spicc->base + SPICC_CONREG);
spicc             598 drivers/spi/spi-meson-spicc.c 	clk_disable_unprepare(spicc->core);