Lines Matching refs:f

348 static void fspi_writel(struct nxp_fspi *f, u32 val, void __iomem *addr)  in fspi_writel()  argument
350 if (f->devtype_data->little_endian) in fspi_writel()
356 static u32 fspi_readl(struct nxp_fspi *f, void __iomem *addr) in fspi_readl() argument
358 if (f->devtype_data->little_endian) in fspi_readl()
364 static int nxp_fspi_check_buswidth(struct nxp_fspi *f, u8 width) in nxp_fspi_check_buswidth() argument
380 struct nxp_fspi *f; in nxp_fspi_supports_op() local
385 f = dev_get_priv(bus); in nxp_fspi_supports_op()
387 ret = nxp_fspi_check_buswidth(f, op->cmd.buswidth); in nxp_fspi_supports_op()
390 ret |= nxp_fspi_check_buswidth(f, op->addr.buswidth); in nxp_fspi_supports_op()
393 ret |= nxp_fspi_check_buswidth(f, op->dummy.buswidth); in nxp_fspi_supports_op()
396 ret |= nxp_fspi_check_buswidth(f, op->data.buswidth); in nxp_fspi_supports_op()
412 if (op->addr.val >= f->memmap_phy_size) in nxp_fspi_supports_op()
422 (op->data.nbytes > f->devtype_data->ahb_buf_size || in nxp_fspi_supports_op()
423 (op->data.nbytes > f->devtype_data->rxfifo - 4 && in nxp_fspi_supports_op()
428 op->data.nbytes > f->devtype_data->txfifo) in nxp_fspi_supports_op()
435 static int fspi_readl_poll_tout(struct nxp_fspi *f, void __iomem *base, in fspi_readl_poll_tout() argument
441 if (!f->devtype_data->little_endian) in fspi_readl_poll_tout()
457 static inline void nxp_fspi_invalid(struct nxp_fspi *f) in nxp_fspi_invalid() argument
462 reg = fspi_readl(f, f->iobase + FSPI_MCR0); in nxp_fspi_invalid()
463 fspi_writel(f, reg | FSPI_MCR0_SWRST, f->iobase + FSPI_MCR0); in nxp_fspi_invalid()
466 ret = fspi_readl_poll_tout(f, f->iobase + FSPI_MCR0, in nxp_fspi_invalid()
471 static void nxp_fspi_prepare_lut(struct nxp_fspi *f, in nxp_fspi_prepare_lut() argument
474 void __iomem *base = f->iobase; in nxp_fspi_prepare_lut()
517 fspi_writel(f, FSPI_LUTKEY_VALUE, f->iobase + FSPI_LUTKEY); in nxp_fspi_prepare_lut()
518 fspi_writel(f, FSPI_LCKER_UNLOCK, f->iobase + FSPI_LCKCR); in nxp_fspi_prepare_lut()
522 fspi_writel(f, lutval[i], base + FSPI_LUT_REG(i)); in nxp_fspi_prepare_lut()
524 dev_dbg(f->dev, "CMD[%x] lutval[0:%x \t 1:%x \t 2:%x \t 3:%x]\n", in nxp_fspi_prepare_lut()
528 fspi_writel(f, FSPI_LUTKEY_VALUE, f->iobase + FSPI_LUTKEY); in nxp_fspi_prepare_lut()
529 fspi_writel(f, FSPI_LCKER_LOCK, f->iobase + FSPI_LCKCR); in nxp_fspi_prepare_lut()
533 static int nxp_fspi_clk_prep_enable(struct nxp_fspi *f) in nxp_fspi_clk_prep_enable() argument
537 ret = clk_enable(&f->clk_en); in nxp_fspi_clk_prep_enable()
541 ret = clk_enable(&f->clk); in nxp_fspi_clk_prep_enable()
543 clk_disable(&f->clk_en); in nxp_fspi_clk_prep_enable()
550 static void nxp_fspi_clk_disable_unprep(struct nxp_fspi *f) in nxp_fspi_clk_disable_unprep() argument
552 clk_disable(&f->clk); in nxp_fspi_clk_disable_unprep()
553 clk_disable(&f->clk_en); in nxp_fspi_clk_disable_unprep()
595 static void nxp_fspi_select_mem(struct nxp_fspi *f, int chip_select) in nxp_fspi_select_mem() argument
600 fspi_writel(f, 0, f->iobase + FSPI_FLSHA1CR0); in nxp_fspi_select_mem()
601 fspi_writel(f, 0, f->iobase + FSPI_FLSHA2CR0); in nxp_fspi_select_mem()
602 fspi_writel(f, 0, f->iobase + FSPI_FLSHB1CR0); in nxp_fspi_select_mem()
603 fspi_writel(f, 0, f->iobase + FSPI_FLSHB2CR0); in nxp_fspi_select_mem()
606 size_kb = FSPI_FLSHXCR0_SZ(f->memmap_phy_size); in nxp_fspi_select_mem()
608 fspi_writel(f, size_kb, f->iobase + FSPI_FLSHA1CR0 + in nxp_fspi_select_mem()
611 dev_dbg(f->dev, "Slave device [CS:%x] selected\n", chip_select); in nxp_fspi_select_mem()
614 static void nxp_fspi_read_ahb(struct nxp_fspi *f, const struct spi_mem_op *op) in nxp_fspi_read_ahb() argument
619 memcpy_fromio(op->data.buf.in, (f->ahb_addr + op->addr.val), len); in nxp_fspi_read_ahb()
622 static void nxp_fspi_fill_txfifo(struct nxp_fspi *f, in nxp_fspi_fill_txfifo() argument
625 void __iomem *base = f->iobase; in nxp_fspi_fill_txfifo()
630 fspi_writel(f, FSPI_IPTXFCR_CLR, base + FSPI_IPTXFCR); in nxp_fspi_fill_txfifo()
639 ret = fspi_readl_poll_tout(f, f->iobase + FSPI_INTR, in nxp_fspi_fill_txfifo()
644 fspi_writel(f, *(u32 *)(buf + i), base + FSPI_TFDR); in nxp_fspi_fill_txfifo()
645 fspi_writel(f, *(u32 *)(buf + i + 4), base + FSPI_TFDR + 4); in nxp_fspi_fill_txfifo()
646 fspi_writel(f, FSPI_INTR_IPTXWE, base + FSPI_INTR); in nxp_fspi_fill_txfifo()
653 ret = fspi_readl_poll_tout(f, f->iobase + FSPI_INTR, in nxp_fspi_fill_txfifo()
660 fspi_writel(f, data, base + FSPI_TFDR + j); in nxp_fspi_fill_txfifo()
662 fspi_writel(f, FSPI_INTR_IPTXWE, base + FSPI_INTR); in nxp_fspi_fill_txfifo()
666 static void nxp_fspi_read_rxfifo(struct nxp_fspi *f, in nxp_fspi_read_rxfifo() argument
669 void __iomem *base = f->iobase; in nxp_fspi_read_rxfifo()
680 ret = fspi_readl_poll_tout(f, f->iobase + FSPI_INTR, in nxp_fspi_read_rxfifo()
685 *(u32 *)(buf + i) = fspi_readl(f, base + FSPI_RFDR); in nxp_fspi_read_rxfifo()
686 *(u32 *)(buf + i + 4) = fspi_readl(f, base + FSPI_RFDR + 4); in nxp_fspi_read_rxfifo()
688 fspi_writel(f, FSPI_INTR_IPRXWA, base + FSPI_INTR); in nxp_fspi_read_rxfifo()
697 ret = fspi_readl_poll_tout(f, f->iobase + FSPI_INTR, in nxp_fspi_read_rxfifo()
704 tmp = fspi_readl(f, base + FSPI_RFDR + j); in nxp_fspi_read_rxfifo()
712 fspi_writel(f, FSPI_IPRXFCR_CLR, base + FSPI_IPRXFCR); in nxp_fspi_read_rxfifo()
714 fspi_writel(f, FSPI_INTR_IPRXWA, base + FSPI_INTR); in nxp_fspi_read_rxfifo()
717 static int nxp_fspi_do_op(struct nxp_fspi *f, const struct spi_mem_op *op) in nxp_fspi_do_op() argument
719 void __iomem *base = f->iobase; in nxp_fspi_do_op()
724 reg = fspi_readl(f, base + FSPI_IPRXFCR); in nxp_fspi_do_op()
728 fspi_writel(f, reg, base + FSPI_IPRXFCR); in nxp_fspi_do_op()
730 fspi_writel(f, op->addr.val, base + FSPI_IPCR0); in nxp_fspi_do_op()
736 fspi_writel(f, op->data.nbytes | in nxp_fspi_do_op()
742 fspi_writel(f, FSPI_IPCMD_TRG, base + FSPI_IPCMD); in nxp_fspi_do_op()
745 err = fspi_readl_poll_tout(f, f->iobase + FSPI_STS0, in nxp_fspi_do_op()
750 nxp_fspi_read_rxfifo(f, op); in nxp_fspi_do_op()
758 struct nxp_fspi *f; in nxp_fspi_exec_op() local
763 f = dev_get_priv(bus); in nxp_fspi_exec_op()
766 err = fspi_readl_poll_tout(f, f->iobase + FSPI_STS0, in nxp_fspi_exec_op()
770 nxp_fspi_prepare_lut(f, op); in nxp_fspi_exec_op()
776 if (op->data.nbytes > (f->devtype_data->rxfifo - 4) && in nxp_fspi_exec_op()
778 nxp_fspi_read_ahb(f, op); in nxp_fspi_exec_op()
781 nxp_fspi_fill_txfifo(f, op); in nxp_fspi_exec_op()
783 err = nxp_fspi_do_op(f, op); in nxp_fspi_exec_op()
787 nxp_fspi_invalid(f); in nxp_fspi_exec_op()
795 struct nxp_fspi *f; in nxp_fspi_adjust_op_size() local
799 f = dev_get_priv(bus); in nxp_fspi_adjust_op_size()
802 if (op->data.nbytes > f->devtype_data->txfifo) in nxp_fspi_adjust_op_size()
803 op->data.nbytes = f->devtype_data->txfifo; in nxp_fspi_adjust_op_size()
805 if (op->data.nbytes > f->devtype_data->ahb_buf_size) in nxp_fspi_adjust_op_size()
806 op->data.nbytes = f->devtype_data->ahb_buf_size; in nxp_fspi_adjust_op_size()
807 else if (op->data.nbytes > (f->devtype_data->rxfifo - 4)) in nxp_fspi_adjust_op_size()
814 static int nxp_fspi_default_setup(struct nxp_fspi *f) in nxp_fspi_default_setup() argument
816 void __iomem *base = f->iobase; in nxp_fspi_default_setup()
822 nxp_fspi_clk_disable_unprep(f); in nxp_fspi_default_setup()
825 ret = clk_set_rate(&f->clk, 20000000); in nxp_fspi_default_setup()
829 ret = nxp_fspi_clk_prep_enable(f); in nxp_fspi_default_setup()
836 ret = fspi_readl_poll_tout(f, f->iobase + FSPI_MCR0, in nxp_fspi_default_setup()
841 fspi_writel(f, FSPI_MCR0_MDIS, base + FSPI_MCR0); in nxp_fspi_default_setup()
844 fspi_writel(f, FSPI_DLLACR_OVRDEN, base + FSPI_DLLACR); in nxp_fspi_default_setup()
845 fspi_writel(f, FSPI_DLLBCR_OVRDEN, base + FSPI_DLLBCR); in nxp_fspi_default_setup()
848 fspi_writel(f, FSPI_MCR0_AHB_TIMEOUT(0xFF) | FSPI_MCR0_IP_TIMEOUT(0xFF), in nxp_fspi_default_setup()
855 reg = fspi_readl(f, f->iobase + FSPI_MCR2); in nxp_fspi_default_setup()
857 fspi_writel(f, reg, base + FSPI_MCR2); in nxp_fspi_default_setup()
861 fspi_writel(f, 0, base + FSPI_AHBRX_BUF0CR0 + 4 * i); in nxp_fspi_default_setup()
867 fspi_writel(f, (f->devtype_data->ahb_buf_size / 8 | in nxp_fspi_default_setup()
871 fspi_writel(f, FSPI_AHBCR_PREF_EN | FSPI_AHBCR_RDADDROPT, in nxp_fspi_default_setup()
875 fspi_writel(f, SEQID_LUT, base + FSPI_FLSHA1CR2); in nxp_fspi_default_setup()
876 fspi_writel(f, SEQID_LUT, base + FSPI_FLSHA2CR2); in nxp_fspi_default_setup()
877 fspi_writel(f, SEQID_LUT, base + FSPI_FLSHB1CR2); in nxp_fspi_default_setup()
878 fspi_writel(f, SEQID_LUT, base + FSPI_FLSHB2CR2); in nxp_fspi_default_setup()
885 struct nxp_fspi *f = dev_get_priv(bus); in nxp_fspi_probe() local
887 f->devtype_data = in nxp_fspi_probe()
889 nxp_fspi_default_setup(f); in nxp_fspi_probe()
896 struct nxp_fspi *f; in nxp_fspi_claim_bus() local
901 f = dev_get_priv(bus); in nxp_fspi_claim_bus()
903 nxp_fspi_select_mem(f, slave_plat->cs); in nxp_fspi_claim_bus()
911 struct nxp_fspi *f = dev_get_priv(bus); in nxp_fspi_set_speed() local
914 nxp_fspi_clk_disable_unprep(f); in nxp_fspi_set_speed()
916 ret = clk_set_rate(&f->clk, speed); in nxp_fspi_set_speed()
920 ret = nxp_fspi_clk_prep_enable(f); in nxp_fspi_set_speed()
935 struct nxp_fspi *f = dev_get_priv(bus); in nxp_fspi_of_to_plat() local
945 f->dev = bus; in nxp_fspi_of_to_plat()
952 f->iobase = map_physmem(iobase, iobase_size, MAP_NOCACHE); in nxp_fspi_of_to_plat()
959 f->ahb_addr = map_physmem(ahb_addr, ahb_size, MAP_NOCACHE); in nxp_fspi_of_to_plat()
960 f->memmap_phy_size = ahb_size; in nxp_fspi_of_to_plat()
963 ret = clk_get_by_name(bus, "fspi_en", &f->clk_en); in nxp_fspi_of_to_plat()
969 ret = clk_get_by_name(bus, "fspi", &f->clk); in nxp_fspi_of_to_plat()