Lines Matching refs:rknand
105 static void rockchip_nand_init(struct rk_nand *rknand) in rockchip_nand_init() argument
107 writel(0, rknand->regs + NANDC_REG_V6_RANDMZ); in rockchip_nand_init()
108 writel(0, rknand->regs + NANDC_REG_V6_DMA_CFG); in rockchip_nand_init()
109 writel(0, rknand->regs + NANDC_REG_V6_BCHCTL); in rockchip_nand_init()
110 writel(NANDC_V6_FM_WP, rknand->regs + NANDC_REG_V6_FMCTL); in rockchip_nand_init()
111 writel(0x1081, rknand->regs + NANDC_REG_V6_FMWAIT); in rockchip_nand_init()
117 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_select_chip() local
122 reg = readl(rknand->regs + NANDC_REG_V6_FMCTL); in rockchip_nand_select_chip()
128 banknr = rknand->banks[chipnr]; in rockchip_nand_select_chip()
129 bank_base = rknand->regs + NANDC_REG_V6_BANK0 + banknr * 0x100; in rockchip_nand_select_chip()
136 writel(reg, rknand->regs + NANDC_REG_V6_FMCTL); in rockchip_nand_select_chip()
138 rknand->selected_bank = banknr; in rockchip_nand_select_chip()
146 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_cmd_ctrl() local
147 void __iomem *bank_base = rknand->regs + NANDC_REG_V6_BANK0 in rockchip_nand_cmd_ctrl()
148 + rknand->selected_bank * 0x100; in rockchip_nand_cmd_ctrl()
167 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_read_buf() local
169 void __iomem *bank_base = rknand->regs + NANDC_REG_V6_BANK0 in rockchip_nand_read_buf()
170 + rknand->selected_bank * 0x100; in rockchip_nand_read_buf()
181 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_write_buf() local
183 void __iomem *bank_base = rknand->regs + NANDC_REG_V6_BANK0 in rockchip_nand_write_buf()
184 + rknand->selected_bank * 0x100; in rockchip_nand_write_buf()
202 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_dev_ready() local
204 if (readl(rknand->regs + NANDC_REG_V6_FMCTL) & NANDC_V6_FM_FREADY) in rockchip_nand_dev_ready()
215 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_hw_ecc_setup() local
238 writel(reg, rknand->regs + NANDC_REG_V6_BCHCTL); in rockchip_nand_hw_ecc_setup()
243 static void rockchip_nand_pio_xfer_start(struct rk_nand *rknand, in rockchip_nand_pio_xfer_start() argument
249 reg = readl(rknand->regs + NANDC_REG_V6_BCHCTL); in rockchip_nand_pio_xfer_start()
251 (rknand->selected_bank << NAND_V6_BCH_REGION_S); in rockchip_nand_pio_xfer_start()
252 writel(reg, rknand->regs + NANDC_REG_V6_BCHCTL); in rockchip_nand_pio_xfer_start()
257 writel(reg, rknand->regs + NANDC_REG_V6_FLCTL); in rockchip_nand_pio_xfer_start()
260 writel(reg, rknand->regs + NANDC_REG_V6_FLCTL); in rockchip_nand_pio_xfer_start()
263 static int rockchip_nand_wait_pio_xfer_done(struct rk_nand *rknand) in rockchip_nand_wait_pio_xfer_done() argument
269 reg = readl(rknand->regs + NANDC_REG_V6_FLCTL); in rockchip_nand_wait_pio_xfer_done()
319 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_hw_syndrome_pio_read_page() local
321 void __iomem *sram_base = rknand->regs + NANDC_REG_V6_SRAM0; in rockchip_nand_hw_syndrome_pio_read_page()
326 if (rknand->bootromblocks && (offset < (7 * mtd->erasesize))) in rockchip_nand_hw_syndrome_pio_read_page()
329 rockchip_nand_pio_xfer_start(rknand, NANDC_V6_READ, 0); in rockchip_nand_hw_syndrome_pio_read_page()
337 ret = rockchip_nand_wait_pio_xfer_done(rknand); in rockchip_nand_hw_syndrome_pio_read_page()
341 bch_st = readl(rknand->regs + NANDC_REG_V6_BCHST); in rockchip_nand_hw_syndrome_pio_read_page()
353 rockchip_nand_pio_xfer_start(rknand, NANDC_V6_READ, in rockchip_nand_hw_syndrome_pio_read_page()
360 memcpy_fromio(oob, rknand->regs + NANDC_REG_V6_SPARE1, 4); in rockchip_nand_hw_syndrome_pio_read_page()
362 memcpy_fromio(oob, rknand->regs + NANDC_REG_V6_SPARE0, 4); in rockchip_nand_hw_syndrome_pio_read_page()
367 if (rknand->bootromblocks) in rockchip_nand_hw_syndrome_pio_read_page()
368 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_read_page()
394 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_hw_syndrome_pio_write_page() local
396 void __iomem *sram_base = rknand->regs + NANDC_REG_V6_SRAM0; in rockchip_nand_hw_syndrome_pio_write_page()
404 if (rknand->bootromblocks && (offset < (7 * mtd->erasesize))) in rockchip_nand_hw_syndrome_pio_write_page()
408 rknand->bootromblocks); in rockchip_nand_hw_syndrome_pio_write_page()
411 memcpy_toio(rknand->regs + NANDC_REG_V6_SPARE0, &index, ecc->prepad); in rockchip_nand_hw_syndrome_pio_write_page()
414 rockchip_nand_pio_xfer_start(rknand, NANDC_V6_WRITE, in rockchip_nand_hw_syndrome_pio_write_page()
426 memcpy_toio(rknand->regs + NANDC_REG_V6_SPARE1, in rockchip_nand_hw_syndrome_pio_write_page()
429 memcpy_toio(rknand->regs + NANDC_REG_V6_SPARE0, in rockchip_nand_hw_syndrome_pio_write_page()
433 ret = rockchip_nand_wait_pio_xfer_done(rknand); in rockchip_nand_hw_syndrome_pio_write_page()
440 rockchip_nand_hw_ecc_setup(mtd, ecc, rknand->ecc_strength); in rockchip_nand_hw_syndrome_pio_write_page()
482 struct rk_nand *rknand = to_rknand(chip->controller); in rockchip_nand_hw_ecc_ctrl_init() local
491 rknand->bootromblocks = true; in rockchip_nand_hw_ecc_ctrl_init()
493 rknand->bootromblocks = false; in rockchip_nand_hw_ecc_ctrl_init()
502 rknand->ecc_strength = ecc->strength; in rockchip_nand_hw_ecc_ctrl_init()
578 static int rockchip_nand_chip_init(int node, struct rk_nand *rknand, int devnum) in rockchip_nand_chip_init() argument
595 chip->controller = &rknand->controller; in rockchip_nand_chip_init()
600 rknand->banks[devnum] = fdtdec_get_int(blob, node, "reg", -1); in rockchip_nand_chip_init()
602 if (rknand->banks[devnum] < 0) in rockchip_nand_chip_init()
606 mtd->dev = rknand->dev; in rockchip_nand_chip_init()
607 if (rknand->dev) in rockchip_nand_chip_init()
608 rknand->dev->priv = mtd; in rockchip_nand_chip_init()
631 memcpy(&rknand->mtd, mtd, sizeof(struct mtd_info)); in rockchip_nand_chip_init()
636 static int rockchip_nand_chips_init(int node, struct rk_nand *rknand) in rockchip_nand_chips_init() argument
644 ret = rockchip_nand_chip_init(nand_node, rknand, i++); in rockchip_nand_chips_init()
661 struct rk_nand *rknand = dev_get_priv(dev); in rockchip_nandc_probe() local
668 rknand->dev = dev; in rockchip_nandc_probe()
676 rknand->regs = (void *)regs; in rockchip_nandc_probe()
678 spin_lock_init(&rknand->controller.lock); in rockchip_nandc_probe()
679 init_waitqueue_head(&rknand->controller.wq); in rockchip_nandc_probe()
681 rockchip_nand_init(rknand); in rockchip_nandc_probe()
683 ret = rockchip_nand_chips_init(node, rknand); in rockchip_nandc_probe()
687 memcpy(mtd, &rknand->mtd, sizeof(struct mtd_info)); in rockchip_nandc_probe()
733 struct rk_nand *rknand; in board_nand_init() local
738 rknand = kzalloc(sizeof(*rknand), GFP_KERNEL); in board_nand_init()
758 rknand->regs = (void *)regs; in board_nand_init()
760 spin_lock_init(&rknand->controller.lock); in board_nand_init()
761 init_waitqueue_head(&rknand->controller.wq); in board_nand_init()
763 rockchip_nand_init(rknand); in board_nand_init()
765 ret = rockchip_nand_chips_init(node, rknand); in board_nand_init()
773 kfree(rknand); in board_nand_init()