qspi 691 drivers/pinctrl/bcm/pinctrl-cygnus-mux.c CYGNUS_PIN_FUNCTION(qspi), qspi 4725 drivers/pinctrl/sh-pfc/pfc-r8a7790.c SH_PFC_FUNCTION(qspi), qspi 5396 drivers/pinctrl/sh-pfc/pfc-r8a7791.c SH_PFC_FUNCTION(qspi), qspi 1976 drivers/pinctrl/sh-pfc/pfc-r8a7792.c SH_PFC_FUNCTION(qspi), qspi 4592 drivers/pinctrl/sh-pfc/pfc-r8a7794.c SH_PFC_FUNCTION(qspi), qspi 1234 drivers/pinctrl/tegra/pinctrl-tegra210.c FUNCTION(qspi), qspi 222 drivers/spi/spi-bcm-qspi.c static inline bool has_bspi(struct bcm_qspi *qspi) qspi 224 drivers/spi/spi-bcm-qspi.c return qspi->bspi_mode; qspi 228 drivers/spi/spi-bcm-qspi.c static inline u32 bcm_qspi_read(struct bcm_qspi *qspi, enum base_type type, qspi 231 drivers/spi/spi-bcm-qspi.c return bcm_qspi_readl(qspi->big_endian, qspi->base[type] + offset); qspi 235 drivers/spi/spi-bcm-qspi.c static inline void bcm_qspi_write(struct bcm_qspi *qspi, enum base_type type, qspi 238 drivers/spi/spi-bcm-qspi.c bcm_qspi_writel(qspi->big_endian, data, qspi->base[type] + offset); qspi 242 drivers/spi/spi-bcm-qspi.c static int bcm_qspi_bspi_busy_poll(struct bcm_qspi *qspi) qspi 248 drivers/spi/spi-bcm-qspi.c if (!(bcm_qspi_read(qspi, BSPI, BSPI_BUSY_STATUS) & 1)) qspi 252 drivers/spi/spi-bcm-qspi.c dev_warn(&qspi->pdev->dev, "timeout waiting for !busy_status\n"); qspi 256 drivers/spi/spi-bcm-qspi.c static inline bool bcm_qspi_bspi_ver_three(struct bcm_qspi *qspi) qspi 258 drivers/spi/spi-bcm-qspi.c if (qspi->bspi_maj_rev < 4) qspi 263 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_bspi_flush_prefetch_buffers(struct bcm_qspi *qspi) qspi 265 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_busy_poll(qspi); qspi 267 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_B0_CTRL, 1); qspi 268 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_B1_CTRL, 1); qspi 269 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_B0_CTRL, 0); qspi 270 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_B1_CTRL, 0); qspi 273 drivers/spi/spi-bcm-qspi.c static int bcm_qspi_bspi_lr_is_fifo_empty(struct bcm_qspi *qspi) qspi 275 drivers/spi/spi-bcm-qspi.c return (bcm_qspi_read(qspi, BSPI, BSPI_RAF_STATUS) & qspi 279 drivers/spi/spi-bcm-qspi.c static inline u32 bcm_qspi_bspi_lr_read_fifo(struct bcm_qspi *qspi) qspi 281 drivers/spi/spi-bcm-qspi.c u32 data = bcm_qspi_read(qspi, BSPI, BSPI_RAF_READ_DATA); qspi 284 drivers/spi/spi-bcm-qspi.c if (bcm_qspi_bspi_ver_three(qspi)) qspi 290 drivers/spi/spi-bcm-qspi.c static inline void bcm_qspi_bspi_lr_start(struct bcm_qspi *qspi) qspi 292 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_busy_poll(qspi); qspi 293 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_RAF_CTRL, qspi 297 drivers/spi/spi-bcm-qspi.c static inline void bcm_qspi_bspi_lr_clear(struct bcm_qspi *qspi) qspi 299 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_RAF_CTRL, qspi 301 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_flush_prefetch_buffers(qspi); qspi 304 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_bspi_lr_data_read(struct bcm_qspi *qspi) qspi 306 drivers/spi/spi-bcm-qspi.c u32 *buf = (u32 *)qspi->bspi_rf_op->data.buf.in; qspi 309 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "xfer %p rx %p rxlen %d\n", qspi->bspi_rf_op, qspi 310 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op->data.buf.in, qspi->bspi_rf_op_len); qspi 311 drivers/spi/spi-bcm-qspi.c while (!bcm_qspi_bspi_lr_is_fifo_empty(qspi)) { qspi 312 drivers/spi/spi-bcm-qspi.c data = bcm_qspi_bspi_lr_read_fifo(qspi); qspi 313 drivers/spi/spi-bcm-qspi.c if (likely(qspi->bspi_rf_op_len >= 4) && qspi 315 drivers/spi/spi-bcm-qspi.c buf[qspi->bspi_rf_op_idx++] = data; qspi 316 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op_len -= 4; qspi 319 drivers/spi/spi-bcm-qspi.c u8 *cbuf = (u8 *)&buf[qspi->bspi_rf_op_idx]; qspi 322 drivers/spi/spi-bcm-qspi.c while (qspi->bspi_rf_op_len) { qspi 325 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op_len--; qspi 331 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_bspi_set_xfer_params(struct bcm_qspi *qspi, u8 cmd_byte, qspi 334 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_FLEX_MODE_ENABLE, 0); qspi 335 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_BITS_PER_CYCLE, bpc); qspi 336 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_BITS_PER_PHASE, bpp); qspi 337 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_CMD_AND_MODE_BYTE, cmd_byte); qspi 338 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_FLEX_MODE_ENABLE, flex_mode); qspi 341 drivers/spi/spi-bcm-qspi.c static int bcm_qspi_bspi_set_flex_mode(struct bcm_qspi *qspi, qspi 350 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "set flex mode w %x addrlen %x hp %d\n", qspi 382 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_set_xfer_params(qspi, command, bpp, bpc, flex_mode); qspi 387 drivers/spi/spi-bcm-qspi.c static int bcm_qspi_bspi_set_override(struct bcm_qspi *qspi, qspi 392 drivers/spi/spi-bcm-qspi.c u32 data = bcm_qspi_read(qspi, BSPI, BSPI_STRAP_OVERRIDE_CTRL); qspi 394 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "set override mode w %x addrlen %x hp %d\n", qspi 426 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_STRAP_OVERRIDE_CTRL, data); qspi 427 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_set_xfer_params(qspi, op->cmd.opcode, 0, 0, 0); qspi 432 drivers/spi/spi-bcm-qspi.c static int bcm_qspi_bspi_set_mode(struct bcm_qspi *qspi, qspi 440 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.flex_mode = true; qspi 442 drivers/spi/spi-bcm-qspi.c if (!bcm_qspi_bspi_ver_three(qspi)) { qspi 445 drivers/spi/spi-bcm-qspi.c val = bcm_qspi_read(qspi, BSPI, BSPI_STRAP_OVERRIDE_CTRL); qspi 447 drivers/spi/spi-bcm-qspi.c if (val & mask || qspi->s3_strap_override_ctrl & mask) { qspi 448 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.flex_mode = false; qspi 449 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_FLEX_MODE_ENABLE, 0); qspi 450 drivers/spi/spi-bcm-qspi.c error = bcm_qspi_bspi_set_override(qspi, op, hp); qspi 454 drivers/spi/spi-bcm-qspi.c if (qspi->xfer_mode.flex_mode) qspi 455 drivers/spi/spi-bcm-qspi.c error = bcm_qspi_bspi_set_flex_mode(qspi, op, hp); qspi 458 drivers/spi/spi-bcm-qspi.c dev_warn(&qspi->pdev->dev, qspi 461 drivers/spi/spi-bcm-qspi.c } else if (qspi->xfer_mode.width != width || qspi 462 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.addrlen != addrlen || qspi 463 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.hp != hp) { qspi 464 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.width = width; qspi 465 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.addrlen = addrlen; qspi 466 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.hp = hp; qspi 467 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, qspi 469 drivers/spi/spi-bcm-qspi.c qspi->curr_cs, qspi 470 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.width, qspi 471 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.addrlen, qspi 472 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.hp != -1 ? ", hp mode" : ""); qspi 478 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_enable_bspi(struct bcm_qspi *qspi) qspi 480 drivers/spi/spi-bcm-qspi.c if (!has_bspi(qspi)) qspi 483 drivers/spi/spi-bcm-qspi.c qspi->bspi_enabled = 1; qspi 484 drivers/spi/spi-bcm-qspi.c if ((bcm_qspi_read(qspi, BSPI, BSPI_MAST_N_BOOT_CTRL) & 1) == 0) qspi 487 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_flush_prefetch_buffers(qspi); qspi 489 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_MAST_N_BOOT_CTRL, 0); qspi 493 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_disable_bspi(struct bcm_qspi *qspi) qspi 495 drivers/spi/spi-bcm-qspi.c if (!has_bspi(qspi)) qspi 498 drivers/spi/spi-bcm-qspi.c qspi->bspi_enabled = 0; qspi 499 drivers/spi/spi-bcm-qspi.c if ((bcm_qspi_read(qspi, BSPI, BSPI_MAST_N_BOOT_CTRL) & 1)) qspi 502 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_busy_poll(qspi); qspi 503 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_MAST_N_BOOT_CTRL, 1); qspi 507 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_chip_select(struct bcm_qspi *qspi, int cs) qspi 512 drivers/spi/spi-bcm-qspi.c if (qspi->base[CHIP_SELECT]) { qspi 513 drivers/spi/spi-bcm-qspi.c rd = bcm_qspi_read(qspi, CHIP_SELECT, 0); qspi 517 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, CHIP_SELECT, 0, wr); qspi 521 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "using cs:%d\n", cs); qspi 522 drivers/spi/spi-bcm-qspi.c qspi->curr_cs = cs; qspi 526 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_hw_set_parms(struct bcm_qspi *qspi, qspi 532 drivers/spi/spi-bcm-qspi.c spbr = qspi->base_clk / (2 * xp->speed_hz); qspi 535 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR0_LSB, spcr); qspi 542 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR0_MSB, spcr); qspi 544 drivers/spi/spi-bcm-qspi.c qspi->last_parms = *xp; qspi 547 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_update_parms(struct bcm_qspi *qspi, qspi 557 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_set_parms(qspi, &xp); qspi 585 drivers/spi/spi-bcm-qspi.c static bool bcm_qspi_mspi_transfer_is_last(struct bcm_qspi *qspi, qspi 589 drivers/spi/spi-bcm-qspi.c spi_transfer_is_last(qspi->master, qt->trans)) qspi 595 drivers/spi/spi-bcm-qspi.c static int update_qspi_trans_byte_count(struct bcm_qspi *qspi, qspi 618 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "advance msg exit\n"); qspi 619 drivers/spi/spi-bcm-qspi.c if (bcm_qspi_mspi_transfer_is_last(qspi, qt)) qspi 628 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "trans %p len %d byte %d ret %x\n", qspi 633 drivers/spi/spi-bcm-qspi.c static inline u8 read_rxram_slot_u8(struct bcm_qspi *qspi, int slot) qspi 638 drivers/spi/spi-bcm-qspi.c return bcm_qspi_read(qspi, MSPI, slot_offset) & 0xff; qspi 641 drivers/spi/spi-bcm-qspi.c static inline u16 read_rxram_slot_u16(struct bcm_qspi *qspi, int slot) qspi 647 drivers/spi/spi-bcm-qspi.c return (bcm_qspi_read(qspi, MSPI, lsb_offset) & 0xff) | qspi 648 drivers/spi/spi-bcm-qspi.c ((bcm_qspi_read(qspi, MSPI, msb_offset) & 0xff) << 8); qspi 651 drivers/spi/spi-bcm-qspi.c static void read_from_hw(struct bcm_qspi *qspi, int slots) qspi 656 drivers/spi/spi-bcm-qspi.c bcm_qspi_disable_bspi(qspi); qspi 660 drivers/spi/spi-bcm-qspi.c dev_err(&qspi->pdev->dev, "%s: too many slots!\n", __func__); qspi 664 drivers/spi/spi-bcm-qspi.c tp = qspi->trans_pos; qspi 671 drivers/spi/spi-bcm-qspi.c buf[tp.byte] = read_rxram_slot_u8(qspi, slot); qspi 672 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "RD %02x\n", qspi 678 drivers/spi/spi-bcm-qspi.c buf[tp.byte / 2] = read_rxram_slot_u16(qspi, qspi 680 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "RD %04x\n", qspi 684 drivers/spi/spi-bcm-qspi.c update_qspi_trans_byte_count(qspi, &tp, qspi 688 drivers/spi/spi-bcm-qspi.c qspi->trans_pos = tp; qspi 691 drivers/spi/spi-bcm-qspi.c static inline void write_txram_slot_u8(struct bcm_qspi *qspi, int slot, qspi 697 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, reg_offset, val); qspi 700 drivers/spi/spi-bcm-qspi.c static inline void write_txram_slot_u16(struct bcm_qspi *qspi, int slot, qspi 707 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, msb_offset, (val >> 8)); qspi 708 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, lsb_offset, (val & 0xff)); qspi 711 drivers/spi/spi-bcm-qspi.c static inline u32 read_cdram_slot(struct bcm_qspi *qspi, int slot) qspi 713 drivers/spi/spi-bcm-qspi.c return bcm_qspi_read(qspi, MSPI, MSPI_CDRAM + (slot << 2)); qspi 716 drivers/spi/spi-bcm-qspi.c static inline void write_cdram_slot(struct bcm_qspi *qspi, int slot, u32 val) qspi 718 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, (MSPI_CDRAM + (slot << 2)), val); qspi 722 drivers/spi/spi-bcm-qspi.c static int write_to_hw(struct bcm_qspi *qspi, struct spi_device *spi) qspi 728 drivers/spi/spi-bcm-qspi.c bcm_qspi_disable_bspi(qspi); qspi 729 drivers/spi/spi-bcm-qspi.c tp = qspi->trans_pos; qspi 730 drivers/spi/spi-bcm-qspi.c bcm_qspi_update_parms(qspi, spi, tp.trans); qspi 738 drivers/spi/spi-bcm-qspi.c write_txram_slot_u8(qspi, slot, val); qspi 739 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "WR %02x\n", val); qspi 744 drivers/spi/spi-bcm-qspi.c write_txram_slot_u16(qspi, slot, val); qspi 745 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "WR %04x\n", val); qspi 749 drivers/spi/spi-bcm-qspi.c if (has_bspi(qspi)) qspi 758 drivers/spi/spi-bcm-qspi.c write_cdram_slot(qspi, slot, mspi_cdram); qspi 760 drivers/spi/spi-bcm-qspi.c tstatus = update_qspi_trans_byte_count(qspi, &tp, qspi 766 drivers/spi/spi-bcm-qspi.c dev_err(&qspi->pdev->dev, "%s: no data to send?", __func__); qspi 770 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, "submitting %d slots\n", slot); qspi 771 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_NEWQP, 0); qspi 772 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_ENDQP, slot - 1); qspi 775 drivers/spi/spi-bcm-qspi.c mspi_cdram = read_cdram_slot(qspi, slot - 1) & qspi 777 drivers/spi/spi-bcm-qspi.c write_cdram_slot(qspi, slot - 1, mspi_cdram); qspi 780 drivers/spi/spi-bcm-qspi.c if (has_bspi(qspi)) qspi 781 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_WRITE_LOCK, 1); qspi 786 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR2, 0xe0); qspi 795 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = spi_master_get_devdata(spi->master); qspi 799 drivers/spi/spi-bcm-qspi.c struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc; qspi 801 drivers/spi/spi-bcm-qspi.c if (bcm_qspi_bspi_ver_three(qspi)) qspi 806 drivers/spi/spi-bcm-qspi.c bcm_qspi_chip_select(qspi, spi->chip_select); qspi 807 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_WRITE_LOCK, 0); qspi 813 drivers/spi/spi-bcm-qspi.c if (bcm_qspi_bspi_ver_three(qspi) == false) { qspi 815 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, qspi 819 drivers/spi/spi-bcm-qspi.c if (!qspi->xfer_mode.flex_mode) qspi 824 drivers/spi/spi-bcm-qspi.c if (bcm_qspi_bspi_ver_three(qspi) == true) qspi 832 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op_idx = 0; qspi 840 drivers/spi/spi-bcm-qspi.c reinit_completion(&qspi->bspi_done); qspi 841 drivers/spi/spi-bcm-qspi.c bcm_qspi_enable_bspi(qspi); qspi 843 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op = op; qspi 844 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op_status = 0; qspi 845 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op_len = rdlen; qspi 846 drivers/spi/spi-bcm-qspi.c dev_dbg(&qspi->pdev->dev, qspi 848 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_RAF_START_ADDR, addr); qspi 849 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_RAF_NUM_WORDS, len_words); qspi 850 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_RAF_WATERMARK, 0); qspi 851 drivers/spi/spi-bcm-qspi.c if (qspi->soc_intc) { qspi 862 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_lr_start(qspi); qspi 863 drivers/spi/spi-bcm-qspi.c if (!wait_for_completion_timeout(&qspi->bspi_done, timeo)) { qspi 864 drivers/spi/spi-bcm-qspi.c dev_err(&qspi->pdev->dev, "timeout waiting for BSPI\n"); qspi 881 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = spi_master_get_devdata(master); qspi 885 drivers/spi/spi-bcm-qspi.c bcm_qspi_chip_select(qspi, spi->chip_select); qspi 886 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.trans = trans; qspi 887 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.byte = 0; qspi 889 drivers/spi/spi-bcm-qspi.c while (qspi->trans_pos.byte < trans->len) { qspi 890 drivers/spi/spi-bcm-qspi.c reinit_completion(&qspi->mspi_done); qspi 892 drivers/spi/spi-bcm-qspi.c slots = write_to_hw(qspi, spi); qspi 893 drivers/spi/spi-bcm-qspi.c if (!wait_for_completion_timeout(&qspi->mspi_done, timeo)) { qspi 894 drivers/spi/spi-bcm-qspi.c dev_err(&qspi->pdev->dev, "timeout waiting for MSPI\n"); qspi 898 drivers/spi/spi-bcm-qspi.c read_from_hw(qspi, slots); qspi 900 drivers/spi/spi-bcm-qspi.c bcm_qspi_enable_bspi(qspi); qspi 909 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = spi_master_get_devdata(master); qspi 928 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.mspi_last_trans = false; qspi 932 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.mspi_last_trans = true; qspi 949 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = spi_master_get_devdata(spi->master); qspi 963 drivers/spi/spi-bcm-qspi.c if (bcm_qspi_bspi_ver_three(qspi) == true) { qspi 985 drivers/spi/spi-bcm-qspi.c ret = bcm_qspi_bspi_set_mode(qspi, op, 0); qspi 1003 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = qspi_dev_id->dev; qspi 1004 drivers/spi/spi-bcm-qspi.c u32 status = bcm_qspi_read(qspi, MSPI, MSPI_MSPI_STATUS); qspi 1007 drivers/spi/spi-bcm-qspi.c struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc; qspi 1010 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_MSPI_STATUS, status); qspi 1011 drivers/spi/spi-bcm-qspi.c if (qspi->soc_intc) qspi 1013 drivers/spi/spi-bcm-qspi.c complete(&qspi->mspi_done); qspi 1023 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = qspi_dev_id->dev; qspi 1024 drivers/spi/spi-bcm-qspi.c struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc; qspi 1027 drivers/spi/spi-bcm-qspi.c if (qspi->bspi_enabled && qspi->bspi_rf_op) { qspi 1028 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_lr_data_read(qspi); qspi 1029 drivers/spi/spi-bcm-qspi.c if (qspi->bspi_rf_op_len == 0) { qspi 1030 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op = NULL; qspi 1031 drivers/spi/spi-bcm-qspi.c if (qspi->soc_intc) { qspi 1039 drivers/spi/spi-bcm-qspi.c if (qspi->bspi_rf_op_status) qspi 1040 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_lr_clear(qspi); qspi 1042 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_flush_prefetch_buffers(qspi); qspi 1045 drivers/spi/spi-bcm-qspi.c if (qspi->soc_intc) qspi 1051 drivers/spi/spi-bcm-qspi.c if (qspi->bspi_enabled && status && qspi->bspi_rf_op_len == 0) qspi 1052 drivers/spi/spi-bcm-qspi.c complete(&qspi->bspi_done); qspi 1060 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = qspi_dev_id->dev; qspi 1061 drivers/spi/spi-bcm-qspi.c struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc; qspi 1063 drivers/spi/spi-bcm-qspi.c dev_err(&qspi->pdev->dev, "BSPI INT error\n"); qspi 1064 drivers/spi/spi-bcm-qspi.c qspi->bspi_rf_op_status = -EIO; qspi 1065 drivers/spi/spi-bcm-qspi.c if (qspi->soc_intc) qspi 1069 drivers/spi/spi-bcm-qspi.c complete(&qspi->bspi_done); qspi 1076 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = qspi_dev_id->dev; qspi 1077 drivers/spi/spi-bcm-qspi.c struct bcm_qspi_soc_intc *soc_intc = qspi->soc_intc; qspi 1142 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_bspi_init(struct bcm_qspi *qspi) qspi 1146 drivers/spi/spi-bcm-qspi.c val = bcm_qspi_read(qspi, BSPI, BSPI_REVISION_ID); qspi 1147 drivers/spi/spi-bcm-qspi.c qspi->bspi_maj_rev = (val >> 8) & 0xff; qspi 1148 drivers/spi/spi-bcm-qspi.c qspi->bspi_min_rev = val & 0xff; qspi 1149 drivers/spi/spi-bcm-qspi.c if (!(bcm_qspi_bspi_ver_three(qspi))) { qspi 1151 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_BSPI_XOR_VALUE, 0); qspi 1152 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_BSPI_XOR_ENABLE, 1); qspi 1154 drivers/spi/spi-bcm-qspi.c qspi->bspi_enabled = 1; qspi 1155 drivers/spi/spi-bcm-qspi.c bcm_qspi_disable_bspi(qspi); qspi 1156 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_B0_CTRL, 0); qspi 1157 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, BSPI, BSPI_B1_CTRL, 0); qspi 1160 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_hw_init(struct bcm_qspi *qspi) qspi 1164 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR1_LSB, 0); qspi 1165 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR1_MSB, 0); qspi 1166 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_NEWQP, 0); qspi 1167 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_ENDQP, 0); qspi 1168 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR2, 0x20); qspi 1172 drivers/spi/spi-bcm-qspi.c parms.speed_hz = qspi->max_speed_hz; qspi 1173 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_set_parms(qspi, &parms); qspi 1175 drivers/spi/spi-bcm-qspi.c if (has_bspi(qspi)) qspi 1176 drivers/spi/spi-bcm-qspi.c bcm_qspi_bspi_init(qspi); qspi 1179 drivers/spi/spi-bcm-qspi.c static void bcm_qspi_hw_uninit(struct bcm_qspi *qspi) qspi 1181 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_SPCR2, 0); qspi 1182 drivers/spi/spi-bcm-qspi.c if (has_bspi(qspi)) qspi 1183 drivers/spi/spi-bcm-qspi.c bcm_qspi_write(qspi, MSPI, MSPI_WRITE_LOCK, 0); qspi 1201 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi; qspi 1222 drivers/spi/spi-bcm-qspi.c qspi = spi_master_get_devdata(master); qspi 1224 drivers/spi/spi-bcm-qspi.c qspi->clk = devm_clk_get_optional(&pdev->dev, NULL); qspi 1225 drivers/spi/spi-bcm-qspi.c if (IS_ERR(qspi->clk)) qspi 1226 drivers/spi/spi-bcm-qspi.c return PTR_ERR(qspi->clk); qspi 1228 drivers/spi/spi-bcm-qspi.c qspi->pdev = pdev; qspi 1229 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.trans = NULL; qspi 1230 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.byte = 0; qspi 1231 drivers/spi/spi-bcm-qspi.c qspi->trans_pos.mspi_last_trans = true; qspi 1232 drivers/spi/spi-bcm-qspi.c qspi->master = master; qspi 1243 drivers/spi/spi-bcm-qspi.c qspi->big_endian = of_device_is_big_endian(dev->of_node); qspi 1254 drivers/spi/spi-bcm-qspi.c qspi->base[MSPI] = devm_ioremap_resource(dev, res); qspi 1255 drivers/spi/spi-bcm-qspi.c if (IS_ERR(qspi->base[MSPI])) { qspi 1256 drivers/spi/spi-bcm-qspi.c ret = PTR_ERR(qspi->base[MSPI]); qspi 1265 drivers/spi/spi-bcm-qspi.c qspi->base[BSPI] = devm_ioremap_resource(dev, res); qspi 1266 drivers/spi/spi-bcm-qspi.c if (IS_ERR(qspi->base[BSPI])) { qspi 1267 drivers/spi/spi-bcm-qspi.c ret = PTR_ERR(qspi->base[BSPI]); qspi 1270 drivers/spi/spi-bcm-qspi.c qspi->bspi_mode = true; qspi 1272 drivers/spi/spi-bcm-qspi.c qspi->bspi_mode = false; qspi 1275 drivers/spi/spi-bcm-qspi.c dev_info(dev, "using %smspi mode\n", qspi->bspi_mode ? "bspi-" : ""); qspi 1279 drivers/spi/spi-bcm-qspi.c qspi->base[CHIP_SELECT] = devm_ioremap_resource(dev, res); qspi 1280 drivers/spi/spi-bcm-qspi.c if (IS_ERR(qspi->base[CHIP_SELECT])) { qspi 1281 drivers/spi/spi-bcm-qspi.c ret = PTR_ERR(qspi->base[CHIP_SELECT]); qspi 1286 drivers/spi/spi-bcm-qspi.c qspi->dev_ids = kcalloc(num_irqs, sizeof(struct bcm_qspi_dev_id), qspi 1288 drivers/spi/spi-bcm-qspi.c if (!qspi->dev_ids) { qspi 1308 drivers/spi/spi-bcm-qspi.c &qspi->dev_ids[val]); qspi 1314 drivers/spi/spi-bcm-qspi.c qspi->dev_ids[val].dev = qspi; qspi 1315 drivers/spi/spi-bcm-qspi.c qspi->dev_ids[val].irqp = &qspi_irq_tab[val]; qspi 1334 drivers/spi/spi-bcm-qspi.c qspi->soc_intc = soc_intc; qspi 1337 drivers/spi/spi-bcm-qspi.c qspi->soc_intc = NULL; qspi 1340 drivers/spi/spi-bcm-qspi.c ret = clk_prepare_enable(qspi->clk); qspi 1346 drivers/spi/spi-bcm-qspi.c qspi->base_clk = clk_get_rate(qspi->clk); qspi 1347 drivers/spi/spi-bcm-qspi.c qspi->max_speed_hz = qspi->base_clk / (QSPI_SPBR_MIN * 2); qspi 1349 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_init(qspi); qspi 1350 drivers/spi/spi-bcm-qspi.c init_completion(&qspi->mspi_done); qspi 1351 drivers/spi/spi-bcm-qspi.c init_completion(&qspi->bspi_done); qspi 1352 drivers/spi/spi-bcm-qspi.c qspi->curr_cs = -1; qspi 1354 drivers/spi/spi-bcm-qspi.c platform_set_drvdata(pdev, qspi); qspi 1356 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.width = -1; qspi 1357 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.addrlen = -1; qspi 1358 drivers/spi/spi-bcm-qspi.c qspi->xfer_mode.hp = -1; qspi 1369 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_uninit(qspi); qspi 1370 drivers/spi/spi-bcm-qspi.c clk_disable_unprepare(qspi->clk); qspi 1372 drivers/spi/spi-bcm-qspi.c kfree(qspi->dev_ids); qspi 1382 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = platform_get_drvdata(pdev); qspi 1384 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_uninit(qspi); qspi 1385 drivers/spi/spi-bcm-qspi.c clk_disable_unprepare(qspi->clk); qspi 1386 drivers/spi/spi-bcm-qspi.c kfree(qspi->dev_ids); qspi 1387 drivers/spi/spi-bcm-qspi.c spi_unregister_master(qspi->master); qspi 1396 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = dev_get_drvdata(dev); qspi 1399 drivers/spi/spi-bcm-qspi.c if (!bcm_qspi_bspi_ver_three(qspi)) qspi 1400 drivers/spi/spi-bcm-qspi.c qspi->s3_strap_override_ctrl = qspi 1401 drivers/spi/spi-bcm-qspi.c bcm_qspi_read(qspi, BSPI, BSPI_STRAP_OVERRIDE_CTRL); qspi 1403 drivers/spi/spi-bcm-qspi.c spi_master_suspend(qspi->master); qspi 1404 drivers/spi/spi-bcm-qspi.c clk_disable(qspi->clk); qspi 1405 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_uninit(qspi); qspi 1412 drivers/spi/spi-bcm-qspi.c struct bcm_qspi *qspi = dev_get_drvdata(dev); qspi 1415 drivers/spi/spi-bcm-qspi.c bcm_qspi_hw_init(qspi); qspi 1416 drivers/spi/spi-bcm-qspi.c bcm_qspi_chip_select(qspi, qspi->curr_cs); qspi 1417 drivers/spi/spi-bcm-qspi.c if (qspi->soc_intc) qspi 1419 drivers/spi/spi-bcm-qspi.c qspi->soc_intc->bcm_qspi_int_set(qspi->soc_intc, MSPI_DONE, qspi 1422 drivers/spi/spi-bcm-qspi.c ret = clk_enable(qspi->clk); qspi 1424 drivers/spi/spi-bcm-qspi.c spi_master_resume(qspi->master); qspi 92 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi; qspi 126 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = (struct stm32_qspi *)dev_id; qspi 129 drivers/spi/spi-stm32-qspi.c sr = readl_relaxed(qspi->io_base + QSPI_SR); qspi 133 drivers/spi/spi-stm32-qspi.c cr = readl_relaxed(qspi->io_base + QSPI_CR); qspi 135 drivers/spi/spi-stm32-qspi.c writel_relaxed(cr, qspi->io_base + QSPI_CR); qspi 136 drivers/spi/spi-stm32-qspi.c complete(&qspi->data_completion); qspi 152 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_tx_poll(struct stm32_qspi *qspi, qspi 170 drivers/spi/spi-stm32-qspi.c ret = readl_relaxed_poll_timeout_atomic(qspi->io_base + QSPI_SR, qspi 174 drivers/spi/spi-stm32-qspi.c dev_err(qspi->dev, "fifo timeout (len:%d stat:%#x)\n", qspi 178 drivers/spi/spi-stm32-qspi.c tx_fifo(buf++, qspi->io_base + QSPI_DR); qspi 184 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_tx_mm(struct stm32_qspi *qspi, qspi 187 drivers/spi/spi-stm32-qspi.c memcpy_fromio(op->data.buf.in, qspi->mm_base + op->addr.val, qspi 199 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_tx_dma(struct stm32_qspi *qspi, qspi 212 drivers/spi/spi-stm32-qspi.c dma_ch = qspi->dma_chrx; qspi 215 drivers/spi/spi-stm32-qspi.c dma_ch = qspi->dma_chtx; qspi 222 drivers/spi/spi-stm32-qspi.c err = spi_controller_dma_map_mem_op_data(qspi->ctrl, op, &sgt); qspi 233 drivers/spi/spi-stm32-qspi.c cr = readl_relaxed(qspi->io_base + QSPI_CR); qspi 235 drivers/spi/spi-stm32-qspi.c reinit_completion(&qspi->dma_completion); qspi 237 drivers/spi/spi-stm32-qspi.c desc->callback_param = &qspi->dma_completion; qspi 245 drivers/spi/spi-stm32-qspi.c writel_relaxed(cr | CR_DMAEN, qspi->io_base + QSPI_CR); qspi 248 drivers/spi/spi-stm32-qspi.c if (!wait_for_completion_timeout(&qspi->dma_completion, qspi 256 drivers/spi/spi-stm32-qspi.c writel_relaxed(cr & ~CR_DMAEN, qspi->io_base + QSPI_CR); qspi 258 drivers/spi/spi-stm32-qspi.c spi_controller_dma_unmap_mem_op_data(qspi->ctrl, op, &sgt); qspi 263 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_tx(struct stm32_qspi *qspi, const struct spi_mem_op *op) qspi 268 drivers/spi/spi-stm32-qspi.c if (qspi->fmode == CCR_FMODE_MM) qspi 269 drivers/spi/spi-stm32-qspi.c return stm32_qspi_tx_mm(qspi, op); qspi 270 drivers/spi/spi-stm32-qspi.c else if ((op->data.dir == SPI_MEM_DATA_IN && qspi->dma_chrx) || qspi 271 drivers/spi/spi-stm32-qspi.c (op->data.dir == SPI_MEM_DATA_OUT && qspi->dma_chtx)) qspi 272 drivers/spi/spi-stm32-qspi.c if (!stm32_qspi_tx_dma(qspi, op)) qspi 275 drivers/spi/spi-stm32-qspi.c return stm32_qspi_tx_poll(qspi, op); qspi 278 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_wait_nobusy(struct stm32_qspi *qspi) qspi 282 drivers/spi/spi-stm32-qspi.c return readl_relaxed_poll_timeout_atomic(qspi->io_base + QSPI_SR, sr, qspi 287 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_wait_cmd(struct stm32_qspi *qspi, qspi 294 drivers/spi/spi-stm32-qspi.c return stm32_qspi_wait_nobusy(qspi); qspi 296 drivers/spi/spi-stm32-qspi.c if (readl_relaxed(qspi->io_base + QSPI_SR) & SR_TCF) qspi 299 drivers/spi/spi-stm32-qspi.c reinit_completion(&qspi->data_completion); qspi 300 drivers/spi/spi-stm32-qspi.c cr = readl_relaxed(qspi->io_base + QSPI_CR); qspi 301 drivers/spi/spi-stm32-qspi.c writel_relaxed(cr | CR_TCIE | CR_TEIE, qspi->io_base + QSPI_CR); qspi 303 drivers/spi/spi-stm32-qspi.c if (!wait_for_completion_timeout(&qspi->data_completion, qspi 307 drivers/spi/spi-stm32-qspi.c sr = readl_relaxed(qspi->io_base + QSPI_SR); qspi 314 drivers/spi/spi-stm32-qspi.c writel_relaxed(FCR_CTCF | FCR_CTEF, qspi->io_base + QSPI_FCR); qspi 319 drivers/spi/spi-stm32-qspi.c static int stm32_qspi_get_mode(struct stm32_qspi *qspi, u8 buswidth) qspi 329 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = spi_controller_get_devdata(mem->spi->master); qspi 330 drivers/spi/spi-stm32-qspi.c struct stm32_qspi_flash *flash = &qspi->flash[mem->spi->chip_select]; qspi 334 drivers/spi/spi-stm32-qspi.c dev_dbg(qspi->dev, "cmd:%#x mode:%d.%d.%d.%d addr:%#llx len:%#x\n", qspi 339 drivers/spi/spi-stm32-qspi.c err = stm32_qspi_wait_nobusy(qspi); qspi 346 drivers/spi/spi-stm32-qspi.c if (addr_max < qspi->mm_size && qspi 348 drivers/spi/spi-stm32-qspi.c qspi->fmode = CCR_FMODE_MM; qspi 350 drivers/spi/spi-stm32-qspi.c qspi->fmode = CCR_FMODE_INDR; qspi 352 drivers/spi/spi-stm32-qspi.c qspi->fmode = CCR_FMODE_INDW; qspi 355 drivers/spi/spi-stm32-qspi.c cr = readl_relaxed(qspi->io_base + QSPI_CR); qspi 359 drivers/spi/spi-stm32-qspi.c writel_relaxed(cr, qspi->io_base + QSPI_CR); qspi 363 drivers/spi/spi-stm32-qspi.c qspi->io_base + QSPI_DLR); qspi 365 drivers/spi/spi-stm32-qspi.c qspi->fmode = CCR_FMODE_INDW; qspi 367 drivers/spi/spi-stm32-qspi.c ccr = qspi->fmode; qspi 370 drivers/spi/spi-stm32-qspi.c stm32_qspi_get_mode(qspi, op->cmd.buswidth)); qspi 374 drivers/spi/spi-stm32-qspi.c stm32_qspi_get_mode(qspi, op->addr.buswidth)); qspi 384 drivers/spi/spi-stm32-qspi.c stm32_qspi_get_mode(qspi, op->data.buswidth)); qspi 387 drivers/spi/spi-stm32-qspi.c writel_relaxed(ccr, qspi->io_base + QSPI_CCR); qspi 389 drivers/spi/spi-stm32-qspi.c if (op->addr.nbytes && qspi->fmode != CCR_FMODE_MM) qspi 390 drivers/spi/spi-stm32-qspi.c writel_relaxed(op->addr.val, qspi->io_base + QSPI_AR); qspi 392 drivers/spi/spi-stm32-qspi.c err = stm32_qspi_tx(qspi, op); qspi 401 drivers/spi/spi-stm32-qspi.c if (err || qspi->fmode == CCR_FMODE_MM) qspi 405 drivers/spi/spi-stm32-qspi.c err = stm32_qspi_wait_cmd(qspi, op); qspi 412 drivers/spi/spi-stm32-qspi.c cr = readl_relaxed(qspi->io_base + QSPI_CR) | CR_ABORT; qspi 413 drivers/spi/spi-stm32-qspi.c writel_relaxed(cr, qspi->io_base + QSPI_CR); qspi 416 drivers/spi/spi-stm32-qspi.c timeout = readl_relaxed_poll_timeout_atomic(qspi->io_base + QSPI_CR, qspi 420 drivers/spi/spi-stm32-qspi.c writel_relaxed(FCR_CTCF, qspi->io_base + QSPI_FCR); qspi 423 drivers/spi/spi-stm32-qspi.c dev_err(qspi->dev, "%s err:%d abort timeout:%d\n", qspi 431 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = spi_controller_get_devdata(mem->spi->master); qspi 434 drivers/spi/spi-stm32-qspi.c mutex_lock(&qspi->lock); qspi 436 drivers/spi/spi-stm32-qspi.c mutex_unlock(&qspi->lock); qspi 444 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = spi_controller_get_devdata(ctrl); qspi 454 drivers/spi/spi-stm32-qspi.c presc = DIV_ROUND_UP(qspi->clk_rate, spi->max_speed_hz) - 1; qspi 456 drivers/spi/spi-stm32-qspi.c flash = &qspi->flash[spi->chip_select]; qspi 457 drivers/spi/spi-stm32-qspi.c flash->qspi = qspi; qspi 461 drivers/spi/spi-stm32-qspi.c mutex_lock(&qspi->lock); qspi 462 drivers/spi/spi-stm32-qspi.c qspi->cr_reg = 3 << CR_FTHRES_SHIFT | CR_SSHIFT | CR_EN; qspi 463 drivers/spi/spi-stm32-qspi.c writel_relaxed(qspi->cr_reg, qspi->io_base + QSPI_CR); qspi 466 drivers/spi/spi-stm32-qspi.c qspi->dcr_reg = DCR_FSIZE_MASK; qspi 467 drivers/spi/spi-stm32-qspi.c writel_relaxed(qspi->dcr_reg, qspi->io_base + QSPI_DCR); qspi 468 drivers/spi/spi-stm32-qspi.c mutex_unlock(&qspi->lock); qspi 473 drivers/spi/spi-stm32-qspi.c static void stm32_qspi_dma_setup(struct stm32_qspi *qspi) qspi 476 drivers/spi/spi-stm32-qspi.c struct device *dev = qspi->dev; qspi 482 drivers/spi/spi-stm32-qspi.c dma_cfg.src_addr = qspi->phys_base + QSPI_DR; qspi 483 drivers/spi/spi-stm32-qspi.c dma_cfg.dst_addr = qspi->phys_base + QSPI_DR; qspi 487 drivers/spi/spi-stm32-qspi.c qspi->dma_chrx = dma_request_slave_channel(dev, "rx"); qspi 488 drivers/spi/spi-stm32-qspi.c if (qspi->dma_chrx) { qspi 489 drivers/spi/spi-stm32-qspi.c if (dmaengine_slave_config(qspi->dma_chrx, &dma_cfg)) { qspi 491 drivers/spi/spi-stm32-qspi.c dma_release_channel(qspi->dma_chrx); qspi 492 drivers/spi/spi-stm32-qspi.c qspi->dma_chrx = NULL; qspi 496 drivers/spi/spi-stm32-qspi.c qspi->dma_chtx = dma_request_slave_channel(dev, "tx"); qspi 497 drivers/spi/spi-stm32-qspi.c if (qspi->dma_chtx) { qspi 498 drivers/spi/spi-stm32-qspi.c if (dmaengine_slave_config(qspi->dma_chtx, &dma_cfg)) { qspi 500 drivers/spi/spi-stm32-qspi.c dma_release_channel(qspi->dma_chtx); qspi 501 drivers/spi/spi-stm32-qspi.c qspi->dma_chtx = NULL; qspi 505 drivers/spi/spi-stm32-qspi.c init_completion(&qspi->dma_completion); qspi 508 drivers/spi/spi-stm32-qspi.c static void stm32_qspi_dma_free(struct stm32_qspi *qspi) qspi 510 drivers/spi/spi-stm32-qspi.c if (qspi->dma_chtx) qspi 511 drivers/spi/spi-stm32-qspi.c dma_release_channel(qspi->dma_chtx); qspi 512 drivers/spi/spi-stm32-qspi.c if (qspi->dma_chrx) qspi 513 drivers/spi/spi-stm32-qspi.c dma_release_channel(qspi->dma_chrx); qspi 524 drivers/spi/spi-stm32-qspi.c static void stm32_qspi_release(struct stm32_qspi *qspi) qspi 527 drivers/spi/spi-stm32-qspi.c writel_relaxed(0, qspi->io_base + QSPI_CR); qspi 528 drivers/spi/spi-stm32-qspi.c stm32_qspi_dma_free(qspi); qspi 529 drivers/spi/spi-stm32-qspi.c mutex_destroy(&qspi->lock); qspi 530 drivers/spi/spi-stm32-qspi.c clk_disable_unprepare(qspi->clk); qspi 538 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi; qspi 542 drivers/spi/spi-stm32-qspi.c ctrl = spi_alloc_master(dev, sizeof(*qspi)); qspi 546 drivers/spi/spi-stm32-qspi.c qspi = spi_controller_get_devdata(ctrl); qspi 547 drivers/spi/spi-stm32-qspi.c qspi->ctrl = ctrl; qspi 550 drivers/spi/spi-stm32-qspi.c qspi->io_base = devm_ioremap_resource(dev, res); qspi 551 drivers/spi/spi-stm32-qspi.c if (IS_ERR(qspi->io_base)) { qspi 552 drivers/spi/spi-stm32-qspi.c ret = PTR_ERR(qspi->io_base); qspi 556 drivers/spi/spi-stm32-qspi.c qspi->phys_base = res->start; qspi 559 drivers/spi/spi-stm32-qspi.c qspi->mm_base = devm_ioremap_resource(dev, res); qspi 560 drivers/spi/spi-stm32-qspi.c if (IS_ERR(qspi->mm_base)) { qspi 561 drivers/spi/spi-stm32-qspi.c ret = PTR_ERR(qspi->mm_base); qspi 565 drivers/spi/spi-stm32-qspi.c qspi->mm_size = resource_size(res); qspi 566 drivers/spi/spi-stm32-qspi.c if (qspi->mm_size > STM32_QSPI_MAX_MMAP_SZ) { qspi 576 drivers/spi/spi-stm32-qspi.c dev_name(dev), qspi); qspi 582 drivers/spi/spi-stm32-qspi.c init_completion(&qspi->data_completion); qspi 584 drivers/spi/spi-stm32-qspi.c qspi->clk = devm_clk_get(dev, NULL); qspi 585 drivers/spi/spi-stm32-qspi.c if (IS_ERR(qspi->clk)) { qspi 586 drivers/spi/spi-stm32-qspi.c ret = PTR_ERR(qspi->clk); qspi 590 drivers/spi/spi-stm32-qspi.c qspi->clk_rate = clk_get_rate(qspi->clk); qspi 591 drivers/spi/spi-stm32-qspi.c if (!qspi->clk_rate) { qspi 596 drivers/spi/spi-stm32-qspi.c ret = clk_prepare_enable(qspi->clk); qspi 609 drivers/spi/spi-stm32-qspi.c qspi->dev = dev; qspi 610 drivers/spi/spi-stm32-qspi.c platform_set_drvdata(pdev, qspi); qspi 611 drivers/spi/spi-stm32-qspi.c stm32_qspi_dma_setup(qspi); qspi 612 drivers/spi/spi-stm32-qspi.c mutex_init(&qspi->lock); qspi 627 drivers/spi/spi-stm32-qspi.c stm32_qspi_release(qspi); qspi 628 drivers/spi/spi-stm32-qspi.c spi_master_put(qspi->ctrl); qspi 635 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = platform_get_drvdata(pdev); qspi 637 drivers/spi/spi-stm32-qspi.c stm32_qspi_release(qspi); qspi 643 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = dev_get_drvdata(dev); qspi 645 drivers/spi/spi-stm32-qspi.c clk_disable_unprepare(qspi->clk); qspi 653 drivers/spi/spi-stm32-qspi.c struct stm32_qspi *qspi = dev_get_drvdata(dev); qspi 656 drivers/spi/spi-stm32-qspi.c clk_prepare_enable(qspi->clk); qspi 658 drivers/spi/spi-stm32-qspi.c writel_relaxed(qspi->cr_reg, qspi->io_base + QSPI_CR); qspi 659 drivers/spi/spi-stm32-qspi.c writel_relaxed(qspi->dcr_reg, qspi->io_base + QSPI_DCR); qspi 130 drivers/spi/spi-ti-qspi.c static inline unsigned long ti_qspi_read(struct ti_qspi *qspi, qspi 133 drivers/spi/spi-ti-qspi.c return readl(qspi->base + reg); qspi 136 drivers/spi/spi-ti-qspi.c static inline void ti_qspi_write(struct ti_qspi *qspi, qspi 139 drivers/spi/spi-ti-qspi.c writel(val, qspi->base + reg); qspi 144 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = spi_master_get_devdata(spi->master); qspi 145 drivers/spi/spi-ti-qspi.c struct ti_qspi_regs *ctx_reg = &qspi->ctx_reg; qspi 150 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "master busy doing other transfers\n"); qspi 154 drivers/spi/spi-ti-qspi.c if (!qspi->spi_max_frequency) { qspi 155 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "spi max frequency not defined\n"); qspi 159 drivers/spi/spi-ti-qspi.c clk_rate = clk_get_rate(qspi->fclk); qspi 161 drivers/spi/spi-ti-qspi.c clk_div = DIV_ROUND_UP(clk_rate, qspi->spi_max_frequency) - 1; qspi 164 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "clock divider < 0, using /1 divider\n"); qspi 169 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "clock divider >%d , using /%d divider\n", qspi 174 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "hz: %d, clock divider %d\n", qspi 175 drivers/spi/spi-ti-qspi.c qspi->spi_max_frequency, clk_div); qspi 177 drivers/spi/spi-ti-qspi.c ret = pm_runtime_get_sync(qspi->dev); qspi 179 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "pm_runtime_get_sync() failed\n"); qspi 183 drivers/spi/spi-ti-qspi.c clk_ctrl_reg = ti_qspi_read(qspi, QSPI_SPI_CLOCK_CNTRL_REG); qspi 188 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, clk_ctrl_reg, QSPI_SPI_CLOCK_CNTRL_REG); qspi 192 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, clk_mask, QSPI_SPI_CLOCK_CNTRL_REG); qspi 195 drivers/spi/spi-ti-qspi.c pm_runtime_mark_last_busy(qspi->dev); qspi 196 drivers/spi/spi-ti-qspi.c ret = pm_runtime_put_autosuspend(qspi->dev); qspi 198 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "pm_runtime_put_autosuspend() failed\n"); qspi 205 drivers/spi/spi-ti-qspi.c static void ti_qspi_restore_ctx(struct ti_qspi *qspi) qspi 207 drivers/spi/spi-ti-qspi.c struct ti_qspi_regs *ctx_reg = &qspi->ctx_reg; qspi 209 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, ctx_reg->clkctrl, QSPI_SPI_CLOCK_CNTRL_REG); qspi 212 drivers/spi/spi-ti-qspi.c static inline u32 qspi_is_busy(struct ti_qspi *qspi) qspi 217 drivers/spi/spi-ti-qspi.c stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); qspi 220 drivers/spi/spi-ti-qspi.c stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); qspi 227 drivers/spi/spi-ti-qspi.c static inline int ti_qspi_poll_wc(struct ti_qspi *qspi) qspi 233 drivers/spi/spi-ti-qspi.c stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); qspi 239 drivers/spi/spi-ti-qspi.c stat = ti_qspi_read(qspi, QSPI_SPI_STATUS_REG); qspi 245 drivers/spi/spi-ti-qspi.c static int qspi_write_msg(struct ti_qspi *qspi, struct spi_transfer *t, qspi 254 drivers/spi/spi-ti-qspi.c cmd = qspi->cmd | QSPI_WR_SNGL; qspi 259 drivers/spi/spi-ti-qspi.c if (qspi_is_busy(qspi)) qspi 264 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "tx cmd %08x dc %08x data %02x\n", qspi 265 drivers/spi/spi-ti-qspi.c cmd, qspi->dc, *txbuf); qspi 270 drivers/spi/spi-ti-qspi.c writel(data, qspi->base + qspi 273 drivers/spi/spi-ti-qspi.c writel(data, qspi->base + qspi 276 drivers/spi/spi-ti-qspi.c writel(data, qspi->base + qspi 279 drivers/spi/spi-ti-qspi.c writel(data, qspi->base + qspi 284 drivers/spi/spi-ti-qspi.c writeb(*txbuf, qspi->base + QSPI_SPI_DATA_REG); qspi 285 drivers/spi/spi-ti-qspi.c cmd = qspi->cmd | QSPI_WR_SNGL; qspi 291 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "tx cmd %08x dc %08x data %04x\n", qspi 292 drivers/spi/spi-ti-qspi.c cmd, qspi->dc, *txbuf); qspi 293 drivers/spi/spi-ti-qspi.c writew(*((u16 *)txbuf), qspi->base + QSPI_SPI_DATA_REG); qspi 296 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "tx cmd %08x dc %08x data %08x\n", qspi 297 drivers/spi/spi-ti-qspi.c cmd, qspi->dc, *txbuf); qspi 298 drivers/spi/spi-ti-qspi.c writel(*((u32 *)txbuf), qspi->base + QSPI_SPI_DATA_REG); qspi 302 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, cmd, QSPI_SPI_CMD_REG); qspi 303 drivers/spi/spi-ti-qspi.c if (ti_qspi_poll_wc(qspi)) { qspi 304 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "write timed out\n"); qspi 314 drivers/spi/spi-ti-qspi.c static int qspi_read_msg(struct ti_qspi *qspi, struct spi_transfer *t, qspi 322 drivers/spi/spi-ti-qspi.c cmd = qspi->cmd; qspi 337 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "rx cmd %08x dc %08x\n", cmd, qspi->dc); qspi 338 drivers/spi/spi-ti-qspi.c if (qspi_is_busy(qspi)) qspi 341 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, cmd, QSPI_SPI_CMD_REG); qspi 342 drivers/spi/spi-ti-qspi.c if (ti_qspi_poll_wc(qspi)) { qspi 343 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "read timed out\n"); qspi 348 drivers/spi/spi-ti-qspi.c *rxbuf = readb(qspi->base + QSPI_SPI_DATA_REG); qspi 351 drivers/spi/spi-ti-qspi.c *((u16 *)rxbuf) = readw(qspi->base + QSPI_SPI_DATA_REG); qspi 354 drivers/spi/spi-ti-qspi.c *((u32 *)rxbuf) = readl(qspi->base + QSPI_SPI_DATA_REG); qspi 364 drivers/spi/spi-ti-qspi.c static int qspi_transfer_msg(struct ti_qspi *qspi, struct spi_transfer *t, qspi 370 drivers/spi/spi-ti-qspi.c ret = qspi_write_msg(qspi, t, count); qspi 372 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "Error while writing\n"); qspi 378 drivers/spi/spi-ti-qspi.c ret = qspi_read_msg(qspi, t, count); qspi 380 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "Error while reading\n"); qspi 390 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = param; qspi 392 drivers/spi/spi-ti-qspi.c complete(&qspi->transfer_complete); qspi 395 drivers/spi/spi-ti-qspi.c static int ti_qspi_dma_xfer(struct ti_qspi *qspi, dma_addr_t dma_dst, qspi 398 drivers/spi/spi-ti-qspi.c struct dma_chan *chan = qspi->rx_chan; qspi 406 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "device_prep_dma_memcpy error\n"); qspi 411 drivers/spi/spi-ti-qspi.c tx->callback_param = qspi; qspi 413 drivers/spi/spi-ti-qspi.c reinit_completion(&qspi->transfer_complete); qspi 417 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "dma_submit_error %d\n", cookie); qspi 422 drivers/spi/spi-ti-qspi.c ret = wait_for_completion_timeout(&qspi->transfer_complete, qspi 426 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, "DMA wait_for_completion_timeout\n"); qspi 433 drivers/spi/spi-ti-qspi.c static int ti_qspi_dma_bounce_buffer(struct ti_qspi *qspi, loff_t offs, qspi 436 drivers/spi/spi-ti-qspi.c dma_addr_t dma_src = qspi->mmap_phys_base + offs; qspi 447 drivers/spi/spi-ti-qspi.c ret = ti_qspi_dma_xfer(qspi, qspi->rx_bb_dma_addr, qspi 451 drivers/spi/spi-ti-qspi.c memcpy(to, qspi->rx_bb_addr, xfer_len); qspi 460 drivers/spi/spi-ti-qspi.c static int ti_qspi_dma_xfer_sg(struct ti_qspi *qspi, struct sg_table rx_sg, qspi 464 drivers/spi/spi-ti-qspi.c dma_addr_t dma_src = qspi->mmap_phys_base + from; qspi 471 drivers/spi/spi-ti-qspi.c ret = ti_qspi_dma_xfer(qspi, dma_dst, dma_src, len); qspi 482 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = spi_master_get_devdata(spi->master); qspi 484 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, MM_SWITCH, QSPI_SPI_SWITCH_REG); qspi 485 drivers/spi/spi-ti-qspi.c if (qspi->ctrl_base) { qspi 486 drivers/spi/spi-ti-qspi.c regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg, qspi 490 drivers/spi/spi-ti-qspi.c qspi->mmap_enabled = true; qspi 491 drivers/spi/spi-ti-qspi.c qspi->current_cs = spi->chip_select; qspi 496 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = spi_master_get_devdata(spi->master); qspi 498 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, 0, QSPI_SPI_SWITCH_REG); qspi 499 drivers/spi/spi-ti-qspi.c if (qspi->ctrl_base) qspi 500 drivers/spi/spi-ti-qspi.c regmap_update_bits(qspi->ctrl_base, qspi->ctrl_reg, qspi 502 drivers/spi/spi-ti-qspi.c qspi->mmap_enabled = false; qspi 503 drivers/spi/spi-ti-qspi.c qspi->current_cs = -1; qspi 510 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = spi_master_get_devdata(spi->master); qspi 526 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, memval, qspi 533 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = spi_master_get_devdata(mem->spi->master); qspi 544 drivers/spi/spi-ti-qspi.c if (from + op->data.nbytes > qspi->mmap_size) qspi 547 drivers/spi/spi-ti-qspi.c mutex_lock(&qspi->list_lock); qspi 549 drivers/spi/spi-ti-qspi.c if (!qspi->mmap_enabled || qspi->current_cs != mem->spi->chip_select) qspi 554 drivers/spi/spi-ti-qspi.c if (qspi->rx_chan) { qspi 560 drivers/spi/spi-ti-qspi.c ret = ti_qspi_dma_xfer_sg(qspi, sgt, from); qspi 564 drivers/spi/spi-ti-qspi.c ret = ti_qspi_dma_bounce_buffer(qspi, from, qspi 569 drivers/spi/spi-ti-qspi.c memcpy_fromio(op->data.buf.in, qspi->mmap_base + from, qspi 573 drivers/spi/spi-ti-qspi.c mutex_unlock(&qspi->list_lock); qspi 585 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = spi_master_get_devdata(master); qspi 593 drivers/spi/spi-ti-qspi.c qspi->dc = 0; qspi 596 drivers/spi/spi-ti-qspi.c qspi->dc |= QSPI_CKPHA(spi->chip_select); qspi 598 drivers/spi/spi-ti-qspi.c qspi->dc |= QSPI_CKPOL(spi->chip_select); qspi 600 drivers/spi/spi-ti-qspi.c qspi->dc |= QSPI_CSPOL(spi->chip_select); qspi 608 drivers/spi/spi-ti-qspi.c qspi->cmd = 0; qspi 609 drivers/spi/spi-ti-qspi.c qspi->cmd |= QSPI_EN_CS(spi->chip_select); qspi 610 drivers/spi/spi-ti-qspi.c qspi->cmd |= QSPI_FLEN(frame_len_words); qspi 612 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, qspi->dc, QSPI_SPI_DC_REG); qspi 614 drivers/spi/spi-ti-qspi.c mutex_lock(&qspi->list_lock); qspi 616 drivers/spi/spi-ti-qspi.c if (qspi->mmap_enabled) qspi 620 drivers/spi/spi-ti-qspi.c qspi->cmd = ((qspi->cmd & ~QSPI_WLEN_MASK) | qspi 626 drivers/spi/spi-ti-qspi.c ret = qspi_transfer_msg(qspi, t, transfer_len_words * wlen); qspi 628 drivers/spi/spi-ti-qspi.c dev_dbg(qspi->dev, "transfer message failed\n"); qspi 629 drivers/spi/spi-ti-qspi.c mutex_unlock(&qspi->list_lock); qspi 639 drivers/spi/spi-ti-qspi.c mutex_unlock(&qspi->list_lock); qspi 641 drivers/spi/spi-ti-qspi.c ti_qspi_write(qspi, qspi->cmd | QSPI_INVAL, QSPI_SPI_CMD_REG); qspi 650 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi; qspi 652 drivers/spi/spi-ti-qspi.c qspi = dev_get_drvdata(dev); qspi 653 drivers/spi/spi-ti-qspi.c ti_qspi_restore_ctx(qspi); qspi 667 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi; qspi 675 drivers/spi/spi-ti-qspi.c master = spi_alloc_master(&pdev->dev, sizeof(*qspi)); qspi 693 drivers/spi/spi-ti-qspi.c qspi = spi_master_get_devdata(master); qspi 694 drivers/spi/spi-ti-qspi.c qspi->master = master; qspi 695 drivers/spi/spi-ti-qspi.c qspi->dev = &pdev->dev; qspi 696 drivers/spi/spi-ti-qspi.c platform_set_drvdata(pdev, qspi); qspi 719 drivers/spi/spi-ti-qspi.c qspi->mmap_size = resource_size(res_mmap); qspi 727 drivers/spi/spi-ti-qspi.c mutex_init(&qspi->list_lock); qspi 729 drivers/spi/spi-ti-qspi.c qspi->base = devm_ioremap_resource(&pdev->dev, r); qspi 730 drivers/spi/spi-ti-qspi.c if (IS_ERR(qspi->base)) { qspi 731 drivers/spi/spi-ti-qspi.c ret = PTR_ERR(qspi->base); qspi 737 drivers/spi/spi-ti-qspi.c qspi->ctrl_base = qspi 740 drivers/spi/spi-ti-qspi.c if (IS_ERR(qspi->ctrl_base)) { qspi 741 drivers/spi/spi-ti-qspi.c ret = PTR_ERR(qspi->ctrl_base); qspi 746 drivers/spi/spi-ti-qspi.c 1, &qspi->ctrl_reg); qspi 754 drivers/spi/spi-ti-qspi.c qspi->fclk = devm_clk_get(&pdev->dev, "fck"); qspi 755 drivers/spi/spi-ti-qspi.c if (IS_ERR(qspi->fclk)) { qspi 756 drivers/spi/spi-ti-qspi.c ret = PTR_ERR(qspi->fclk); qspi 765 drivers/spi/spi-ti-qspi.c qspi->spi_max_frequency = max_freq; qspi 770 drivers/spi/spi-ti-qspi.c qspi->rx_chan = dma_request_chan_by_mask(&mask); qspi 771 drivers/spi/spi-ti-qspi.c if (IS_ERR(qspi->rx_chan)) { qspi 772 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, qspi 774 drivers/spi/spi-ti-qspi.c qspi->rx_chan = NULL; qspi 778 drivers/spi/spi-ti-qspi.c qspi->rx_bb_addr = dma_alloc_coherent(qspi->dev, qspi 780 drivers/spi/spi-ti-qspi.c &qspi->rx_bb_dma_addr, qspi 782 drivers/spi/spi-ti-qspi.c if (!qspi->rx_bb_addr) { qspi 783 drivers/spi/spi-ti-qspi.c dev_err(qspi->dev, qspi 785 drivers/spi/spi-ti-qspi.c dma_release_channel(qspi->rx_chan); qspi 788 drivers/spi/spi-ti-qspi.c master->dma_rx = qspi->rx_chan; qspi 789 drivers/spi/spi-ti-qspi.c init_completion(&qspi->transfer_complete); qspi 791 drivers/spi/spi-ti-qspi.c qspi->mmap_phys_base = (dma_addr_t)res_mmap->start; qspi 794 drivers/spi/spi-ti-qspi.c if (!qspi->rx_chan && res_mmap) { qspi 795 drivers/spi/spi-ti-qspi.c qspi->mmap_base = devm_ioremap_resource(&pdev->dev, res_mmap); qspi 796 drivers/spi/spi-ti-qspi.c if (IS_ERR(qspi->mmap_base)) { qspi 799 drivers/spi/spi-ti-qspi.c PTR_ERR(qspi->mmap_base)); qspi 800 drivers/spi/spi-ti-qspi.c qspi->mmap_base = NULL; qspi 804 drivers/spi/spi-ti-qspi.c qspi->mmap_enabled = false; qspi 805 drivers/spi/spi-ti-qspi.c qspi->current_cs = -1; qspi 819 drivers/spi/spi-ti-qspi.c struct ti_qspi *qspi = platform_get_drvdata(pdev); qspi 822 drivers/spi/spi-ti-qspi.c rc = spi_master_suspend(qspi->master); qspi 829 drivers/spi/spi-ti-qspi.c if (qspi->rx_bb_addr) qspi 830 drivers/spi/spi-ti-qspi.c dma_free_coherent(qspi->dev, QSPI_DMA_BUFFER_SIZE, qspi 831 drivers/spi/spi-ti-qspi.c qspi->rx_bb_addr, qspi 832 drivers/spi/spi-ti-qspi.c qspi->rx_bb_dma_addr); qspi 833 drivers/spi/spi-ti-qspi.c if (qspi->rx_chan) qspi 834 drivers/spi/spi-ti-qspi.c dma_release_channel(qspi->rx_chan); qspi 369 drivers/spi/spi-zynq-qspi.c struct zynq_qspi *qspi = spi_controller_get_devdata(ctrl); qspi 374 drivers/spi/spi-zynq-qspi.c clk_enable(qspi->refclk); qspi 375 drivers/spi/spi-zynq-qspi.c clk_enable(qspi->pclk); qspi 376 drivers/spi/spi-zynq-qspi.c zynq_qspi_write(qspi, ZYNQ_QSPI_ENABLE_OFFSET, qspi 386 drivers/spi/spi-zynqmp-gqspi.c static void zynqmp_qspi_chipselect(struct spi_device *qspi, bool is_high) qspi 388 drivers/spi/spi-zynqmp-gqspi.c struct zynqmp_qspi *xqspi = spi_master_get_devdata(qspi->master); qspi 448 drivers/spi/spi-zynqmp-gqspi.c static int zynqmp_qspi_setup_transfer(struct spi_device *qspi, qspi 451 drivers/spi/spi-zynqmp-gqspi.c struct zynqmp_qspi *xqspi = spi_master_get_devdata(qspi->master); qspi 458 drivers/spi/spi-zynqmp-gqspi.c req_hz = qspi->max_speed_hz; qspi 474 drivers/spi/spi-zynqmp-gqspi.c if (qspi->mode & SPI_CPHA) qspi 476 drivers/spi/spi-zynqmp-gqspi.c if (qspi->mode & SPI_CPOL) qspi 494 drivers/spi/spi-zynqmp-gqspi.c static int zynqmp_qspi_setup(struct spi_device *qspi) qspi 496 drivers/spi/spi-zynqmp-gqspi.c if (qspi->master->busy) qspi 800 drivers/spi/spi-zynqmp-gqspi.c struct spi_device *qspi, qspi 809 drivers/spi/spi-zynqmp-gqspi.c zynqmp_qspi_setup_transfer(qspi, transfer);