Lines Matching full:xspi

22 #include "renesas-xspi-if-regs.h"
76 u8 addr_nbytes; /* Specified for xSPI */
77 u32 proto; /* Specified for xSPI */
180 struct rpcif_priv *xspi = context; in xspi_reg_read() local
182 *val = readl(xspi->base + reg); in xspi_reg_read()
188 struct rpcif_priv *xspi = context; in xspi_reg_write() local
190 writel(val, xspi->base + reg); in xspi_reg_write()
212 rpcif->xspi = rpc->info->type == XSPI_RZ_G3E; in rpcif_sw_init()
288 static int xspi_hw_init_impl(struct rpcif_priv *xspi, bool hyperflash) in xspi_hw_init_impl() argument
292 ret = reset_control_reset(xspi->rstc); in xspi_hw_init_impl()
296 regmap_write(xspi->regmap, XSPI_WRAPCFG, 0x0); in xspi_hw_init_impl()
298 regmap_update_bits(xspi->regmap, XSPI_LIOCFGCS0, in xspi_hw_init_impl()
304 regmap_update_bits(xspi->regmap, XSPI_CCCTL0CS0, XSPI_CCCTL0_CAEN, 0); in xspi_hw_init_impl()
306 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, in xspi_hw_init_impl()
309 regmap_update_bits(xspi->regmap, XSPI_INTE, XSPI_INTE_CMDCMPE, in xspi_hw_init_impl()
438 static void xspi_prepare_impl(struct rpcif_priv *xspi, const struct rpcif_op *op, in xspi_prepare_impl() argument
441 xspi->smadr = 0; in xspi_prepare_impl()
442 xspi->addr_nbytes = 0; in xspi_prepare_impl()
443 xspi->command = 0; in xspi_prepare_impl()
444 xspi->option = 0; in xspi_prepare_impl()
445 xspi->dummy = 0; in xspi_prepare_impl()
446 xspi->xferlen = 0; in xspi_prepare_impl()
447 xspi->proto = 0; in xspi_prepare_impl()
450 xspi->command = op->cmd.opcode; in xspi_prepare_impl()
453 xspi->command = (xspi->command << 8) | op->ocmd.opcode; in xspi_prepare_impl()
456 xspi->addr_nbytes = op->addr.nbytes; in xspi_prepare_impl()
458 xspi->smadr = *offs; in xspi_prepare_impl()
460 xspi->smadr = op->addr.val; in xspi_prepare_impl()
464 xspi->dummy = op->dummy.ncycles; in xspi_prepare_impl()
466 xspi->dir = op->data.dir; in xspi_prepare_impl()
470 xspi->buffer = op->data.buf.in; in xspi_prepare_impl()
476 xspi->xferlen = nbytes; in xspi_prepare_impl()
481 xspi->proto = PROTO_1S_2S_2S; in xspi_prepare_impl()
483 xspi->proto = PROTO_1S_4S_4S; in xspi_prepare_impl()
486 xspi->proto = PROTO_2S_2S_2S; in xspi_prepare_impl()
489 xspi->proto = PROTO_4S_4S_4S; in xspi_prepare_impl()
623 static int xspi_manual_xfer_impl(struct rpcif_priv *xspi) in xspi_manual_xfer_impl() argument
628 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, XSPI_CDCTL0_TRNUM(0x3), in xspi_manual_xfer_impl()
631 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, XSPI_CDCTL0_TRREQ, 0); in xspi_manual_xfer_impl()
633 regmap_write(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
634 XSPI_CDTBUF_CMDSIZE(0x1) | XSPI_CDTBUF_CMD_FIELD(xspi->command)); in xspi_manual_xfer_impl()
636 regmap_write(xspi->regmap, XSPI_CDABUF0, 0); in xspi_manual_xfer_impl()
638 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, XSPI_CDTBUF_ADDSIZE(0x7), in xspi_manual_xfer_impl()
639 XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes)); in xspi_manual_xfer_impl()
641 regmap_write(xspi->regmap, XSPI_CDABUF0, xspi->smadr); in xspi_manual_xfer_impl()
643 regmap_update_bits(xspi->regmap, XSPI_LIOCFGCS0, XSPI_LIOCFG_PRTMD(0x3ff), in xspi_manual_xfer_impl()
644 XSPI_LIOCFG_PRTMD(xspi->proto)); in xspi_manual_xfer_impl()
646 switch (xspi->dir) { in xspi_manual_xfer_impl()
648 while (pos < xspi->xferlen) { in xspi_manual_xfer_impl()
649 u32 bytes_left = xspi->xferlen - pos; in xspi_manual_xfer_impl()
652 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
657 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
661 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
663 XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes)); in xspi_manual_xfer_impl()
665 memcpy(data, xspi->buffer + pos, nbytes); in xspi_manual_xfer_impl()
668 regmap_write(xspi->regmap, XSPI_CDD0BUF0, *p++); in xspi_manual_xfer_impl()
669 regmap_write(xspi->regmap, XSPI_CDD1BUF0, *p); in xspi_manual_xfer_impl()
671 regmap_write(xspi->regmap, XSPI_CDD0BUF0, *p); in xspi_manual_xfer_impl()
674 regmap_write(xspi->regmap, XSPI_CDABUF0, xspi->smadr + pos); in xspi_manual_xfer_impl()
676 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, in xspi_manual_xfer_impl()
679 ret = wait_msg_xfer_end(xspi); in xspi_manual_xfer_impl()
683 regmap_update_bits(xspi->regmap, XSPI_INTC, in xspi_manual_xfer_impl()
688 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, XSPI_CDCTL0_TRREQ, 0); in xspi_manual_xfer_impl()
691 while (pos < xspi->xferlen) { in xspi_manual_xfer_impl()
692 u32 bytes_left = xspi->xferlen - pos; in xspi_manual_xfer_impl()
695 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
702 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
706 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
708 XSPI_CDTBUF_ADDSIZE(xspi->addr_nbytes)); in xspi_manual_xfer_impl()
710 if (xspi->addr_nbytes) in xspi_manual_xfer_impl()
711 regmap_write(xspi->regmap, XSPI_CDABUF0, in xspi_manual_xfer_impl()
712 xspi->smadr + pos); in xspi_manual_xfer_impl()
714 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
716 XSPI_CDTBUF_LATE(xspi->dummy)); in xspi_manual_xfer_impl()
718 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, in xspi_manual_xfer_impl()
721 ret = wait_msg_xfer_end(xspi); in xspi_manual_xfer_impl()
726 regmap_read(xspi->regmap, XSPI_CDD0BUF0, p++); in xspi_manual_xfer_impl()
727 regmap_read(xspi->regmap, XSPI_CDD1BUF0, p); in xspi_manual_xfer_impl()
729 regmap_read(xspi->regmap, XSPI_CDD0BUF0, p); in xspi_manual_xfer_impl()
732 memcpy(xspi->buffer + pos, data, nbytes); in xspi_manual_xfer_impl()
734 regmap_update_bits(xspi->regmap, XSPI_INTC, in xspi_manual_xfer_impl()
739 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, in xspi_manual_xfer_impl()
743 regmap_update_bits(xspi->regmap, XSPI_CDTBUF0, in xspi_manual_xfer_impl()
745 regmap_update_bits(xspi->regmap, XSPI_CDCTL0, in xspi_manual_xfer_impl()
748 ret = wait_msg_xfer_end(xspi); in xspi_manual_xfer_impl()
752 regmap_update_bits(xspi->regmap, XSPI_INTC, in xspi_manual_xfer_impl()
759 xspi_hw_init_impl(xspi, false); in xspi_manual_xfer_impl()
850 static size_t xspi_dirmap_read_impl(struct rpcif_priv *xspi, u64 offs, in xspi_dirmap_read_impl() argument
853 loff_t from = offs & (xspi->size - 1); in xspi_dirmap_read_impl()
854 size_t size = xspi->size - from; in xspi_dirmap_read_impl()
855 u8 addsize = xspi->addr_nbytes - 1; in xspi_dirmap_read_impl()
860 regmap_update_bits(xspi->regmap, XSPI_CMCFG0CS0, in xspi_dirmap_read_impl()
864 regmap_update_bits(xspi->regmap, XSPI_CMCFG1CS0, in xspi_dirmap_read_impl()
866 XSPI_CMCFG1_RDCMD_UPPER_BYTE(xspi->command) | in xspi_dirmap_read_impl()
867 XSPI_CMCFG1_RDLATE(xspi->dummy)); in xspi_dirmap_read_impl()
869 regmap_update_bits(xspi->regmap, XSPI_BMCTL0, XSPI_BMCTL0_CS0ACC(0xff), in xspi_dirmap_read_impl()
872 regmap_update_bits(xspi->regmap, XSPI_BMCFG, in xspi_dirmap_read_impl()
878 regmap_update_bits(xspi->regmap, XSPI_LIOCFGCS0, XSPI_LIOCFG_PRTMD(0x3ff), in xspi_dirmap_read_impl()
879 XSPI_LIOCFG_PRTMD(xspi->proto)); in xspi_dirmap_read_impl()
881 memcpy_fromio(buf, xspi->dirmap + from, len); in xspi_dirmap_read_impl()
905 * xspi_dirmap_write - Write data to xspi memory.
906 * @dev: xspi device
911 * This function writes data into xspi memory.
917 struct rpcif_priv *xspi = dev_get_drvdata(dev); in xspi_dirmap_write() local
918 loff_t from = offs & (xspi->size - 1); in xspi_dirmap_write()
919 u8 addsize = xspi->addr_nbytes - 1; in xspi_dirmap_write()
920 size_t size = xspi->size - from; in xspi_dirmap_write()
936 regmap_update_bits(xspi->regmap, XSPI_CMCFG0CS0, in xspi_dirmap_write()
940 regmap_update_bits(xspi->regmap, XSPI_CMCFG2CS0, in xspi_dirmap_write()
942 XSPI_CMCFG2_WRCMD_UPPER(xspi->command) | in xspi_dirmap_write()
943 XSPI_CMCFG2_WRLATE(xspi->dummy)); in xspi_dirmap_write()
945 regmap_update_bits(xspi->regmap, XSPI_BMCTL0, in xspi_dirmap_write()
948 regmap_update_bits(xspi->regmap, XSPI_BMCFG, in xspi_dirmap_write()
954 regmap_update_bits(xspi->regmap, XSPI_LIOCFGCS0, XSPI_LIOCFG_PRTMD(0x3ff), in xspi_dirmap_write()
955 XSPI_LIOCFG_PRTMD(xspi->proto)); in xspi_dirmap_write()
957 memcpy_toio(xspi->dirmap + from, buf, writebytes); in xspi_dirmap_write()
961 regmap_update_bits(xspi->regmap, XSPI_BMCTL1, in xspi_dirmap_write()
1120 { .compatible = "renesas,r9a09g047-xspi", .data = &xspi_info_r9a09g047 },