Lines Matching full:host

85 	struct hifmc_host *host;  member
103 static inline int hisi_spi_nor_wait_op_finish(struct hifmc_host *host) in hisi_spi_nor_wait_op_finish() argument
107 return readl_poll_timeout(host->regbase + FMC_INT, reg, in hisi_spi_nor_wait_op_finish()
137 static void hisi_spi_nor_init(struct hifmc_host *host) in hisi_spi_nor_init() argument
144 writel(reg, host->regbase + FMC_SPI_TIMING_CFG); in hisi_spi_nor_init()
150 struct hifmc_host *host = priv->host; in hisi_spi_nor_prep() local
153 mutex_lock(&host->lock); in hisi_spi_nor_prep()
155 ret = clk_set_rate(host->clk, priv->clkrate); in hisi_spi_nor_prep()
159 ret = clk_prepare_enable(host->clk); in hisi_spi_nor_prep()
166 mutex_unlock(&host->lock); in hisi_spi_nor_prep()
173 struct hifmc_host *host = priv->host; in hisi_spi_nor_unprep() local
175 clk_disable_unprepare(host->clk); in hisi_spi_nor_unprep()
176 mutex_unlock(&host->lock); in hisi_spi_nor_unprep()
183 struct hifmc_host *host = priv->host; in hisi_spi_nor_op_reg() local
187 writel(reg, host->regbase + FMC_CMD); in hisi_spi_nor_op_reg()
190 writel(reg, host->regbase + FMC_DATA_NUM); in hisi_spi_nor_op_reg()
193 writel(reg, host->regbase + FMC_OP_CFG); in hisi_spi_nor_op_reg()
195 writel(0xff, host->regbase + FMC_INT_CLR); in hisi_spi_nor_op_reg()
197 writel(reg, host->regbase + FMC_OP); in hisi_spi_nor_op_reg()
199 return hisi_spi_nor_wait_op_finish(host); in hisi_spi_nor_op_reg()
206 struct hifmc_host *host = priv->host; in hisi_spi_nor_read_reg() local
213 memcpy_fromio(buf, host->iobase, len); in hisi_spi_nor_read_reg()
221 struct hifmc_host *host = priv->host; in hisi_spi_nor_write_reg() local
224 memcpy_toio(host->iobase, buf, len); in hisi_spi_nor_write_reg()
233 struct hifmc_host *host = priv->host; in hisi_spi_nor_dma_transfer() local
237 reg = readl(host->regbase + FMC_CFG); in hisi_spi_nor_dma_transfer()
242 writel(reg, host->regbase + FMC_CFG); in hisi_spi_nor_dma_transfer()
244 writel(start_off, host->regbase + FMC_ADDRL); in hisi_spi_nor_dma_transfer()
245 writel(dma_buf, host->regbase + FMC_DMA_SADDR_D0); in hisi_spi_nor_dma_transfer()
246 writel(FMC_DMA_LEN_SET(len), host->regbase + FMC_DMA_LEN); in hisi_spi_nor_dma_transfer()
256 writel(reg, host->regbase + FMC_OP_CFG); in hisi_spi_nor_dma_transfer()
258 writel(0xff, host->regbase + FMC_INT_CLR); in hisi_spi_nor_dma_transfer()
263 writel(reg, host->regbase + FMC_OP_DMA); in hisi_spi_nor_dma_transfer()
265 return hisi_spi_nor_wait_op_finish(host); in hisi_spi_nor_dma_transfer()
272 struct hifmc_host *host = priv->host; in hisi_spi_nor_read() local
280 from + offset, host->dma_buffer, trans, FMC_OP_READ); in hisi_spi_nor_read()
285 memcpy(read_buf + offset, host->buffer, trans); in hisi_spi_nor_read()
295 struct hifmc_host *host = priv->host; in hisi_spi_nor_write() local
302 memcpy(host->buffer, write_buf + offset, trans); in hisi_spi_nor_write()
304 to + offset, host->dma_buffer, trans, FMC_OP_WRITE); in hisi_spi_nor_write()
327 struct hifmc_host *host) in hisi_spi_nor_register() argument
336 struct device *dev = host->dev; in hisi_spi_nor_register()
367 priv->host = host; in hisi_spi_nor_register()
381 host->nor[host->num_chip] = nor; in hisi_spi_nor_register()
382 host->num_chip++; in hisi_spi_nor_register()
386 static void hisi_spi_nor_unregister_all(struct hifmc_host *host) in hisi_spi_nor_unregister_all() argument
390 for (i = 0; i < host->num_chip; i++) in hisi_spi_nor_unregister_all()
391 mtd_device_unregister(&host->nor[i]->mtd); in hisi_spi_nor_unregister_all()
394 static int hisi_spi_nor_register_all(struct hifmc_host *host) in hisi_spi_nor_register_all() argument
396 struct device *dev = host->dev; in hisi_spi_nor_register_all()
401 ret = hisi_spi_nor_register(np, host); in hisi_spi_nor_register_all()
407 if (host->num_chip == HIFMC_MAX_CHIP_NUM) { in hisi_spi_nor_register_all()
417 hisi_spi_nor_unregister_all(host); in hisi_spi_nor_register_all()
424 struct hifmc_host *host; in hisi_spi_nor_probe() local
427 host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL); in hisi_spi_nor_probe()
428 if (!host) in hisi_spi_nor_probe()
431 platform_set_drvdata(pdev, host); in hisi_spi_nor_probe()
432 host->dev = dev; in hisi_spi_nor_probe()
434 host->regbase = devm_platform_ioremap_resource_byname(pdev, "control"); in hisi_spi_nor_probe()
435 if (IS_ERR(host->regbase)) in hisi_spi_nor_probe()
436 return PTR_ERR(host->regbase); in hisi_spi_nor_probe()
438 host->iobase = devm_platform_ioremap_resource_byname(pdev, "memory"); in hisi_spi_nor_probe()
439 if (IS_ERR(host->iobase)) in hisi_spi_nor_probe()
440 return PTR_ERR(host->iobase); in hisi_spi_nor_probe()
442 host->clk = devm_clk_get(dev, NULL); in hisi_spi_nor_probe()
443 if (IS_ERR(host->clk)) in hisi_spi_nor_probe()
444 return PTR_ERR(host->clk); in hisi_spi_nor_probe()
452 host->buffer = dmam_alloc_coherent(dev, HIFMC_DMA_MAX_LEN, in hisi_spi_nor_probe()
453 &host->dma_buffer, GFP_KERNEL); in hisi_spi_nor_probe()
454 if (!host->buffer) in hisi_spi_nor_probe()
457 ret = clk_prepare_enable(host->clk); in hisi_spi_nor_probe()
461 mutex_init(&host->lock); in hisi_spi_nor_probe()
462 hisi_spi_nor_init(host); in hisi_spi_nor_probe()
463 ret = hisi_spi_nor_register_all(host); in hisi_spi_nor_probe()
465 mutex_destroy(&host->lock); in hisi_spi_nor_probe()
467 clk_disable_unprepare(host->clk); in hisi_spi_nor_probe()
473 struct hifmc_host *host = platform_get_drvdata(pdev); in hisi_spi_nor_remove() local
475 hisi_spi_nor_unregister_all(host); in hisi_spi_nor_remove()
476 mutex_destroy(&host->lock); in hisi_spi_nor_remove()