Lines Matching defs:host
84 static void hisi_sfc_v3xx_disable_int(struct hisi_sfc_v3xx_host *host)
86 writel(0, host->regbase + HISI_SFC_V3XX_INT_MASK);
89 static void hisi_sfc_v3xx_enable_int(struct hisi_sfc_v3xx_host *host)
91 writel(HISI_SFC_V3XX_INT_MASK_ALL, host->regbase + HISI_SFC_V3XX_INT_MASK);
94 static void hisi_sfc_v3xx_clear_int(struct hisi_sfc_v3xx_host *host)
96 writel(HISI_SFC_V3XX_INT_MASK_ALL, host->regbase + HISI_SFC_V3XX_INT_CLR);
104 static int hisi_sfc_v3xx_handle_completion(struct hisi_sfc_v3xx_host *host)
108 reg = readl(host->regbase + HISI_SFC_V3XX_RAW_INT_STAT);
109 hisi_sfc_v3xx_clear_int(host);
112 dev_err(host->dev, "fail to access protected address\n");
117 dev_err(host->dev, "page program operation failed\n");
127 dev_err(host->dev, "unsupported error occurred, status=0x%x\n", reg);
137 static int hisi_sfc_v3xx_wait_cmd_idle(struct hisi_sfc_v3xx_host *host)
141 return readl_poll_timeout(host->regbase + HISI_SFC_V3XX_CMD_CFG, reg,
151 struct hisi_sfc_v3xx_host *host;
155 host = spi_controller_get_devdata(spi->controller);
157 max_byte_count = host->max_cmd_dword * 4;
175 struct hisi_sfc_v3xx_host *host;
177 host = spi_controller_get_devdata(spi->controller);
183 if (op->addr.nbytes != host->address_mode && op->addr.nbytes)
198 static void hisi_sfc_v3xx_read_databuf(struct hisi_sfc_v3xx_host *host,
204 from = host->regbase + HISI_SFC_V3XX_CMD_DATABUF0;
235 static void hisi_sfc_v3xx_write_databuf(struct hisi_sfc_v3xx_host *host,
241 to = host->regbase + HISI_SFC_V3XX_CMD_DATABUF0;
273 static int hisi_sfc_v3xx_start_bus(struct hisi_sfc_v3xx_host *host,
309 writel(op->addr.val, host->regbase + HISI_SFC_V3XX_CMD_ADDR);
310 writel(op->cmd.opcode, host->regbase + HISI_SFC_V3XX_CMD_INS);
312 writel(config, host->regbase + HISI_SFC_V3XX_CMD_CFG);
317 static int hisi_sfc_v3xx_generic_exec_op(struct hisi_sfc_v3xx_host *host,
324 if (host->irq) {
325 host->completion = &done;
326 hisi_sfc_v3xx_enable_int(host);
330 hisi_sfc_v3xx_write_databuf(host, op->data.buf.out, op->data.nbytes);
332 ret = hisi_sfc_v3xx_start_bus(host, op, chip_select);
336 if (host->irq) {
337 ret = wait_for_completion_timeout(host->completion,
344 hisi_sfc_v3xx_disable_int(host);
345 synchronize_irq(host->irq);
346 host->completion = NULL;
348 ret = hisi_sfc_v3xx_wait_cmd_idle(host);
350 if (hisi_sfc_v3xx_handle_completion(host) || ret)
354 hisi_sfc_v3xx_read_databuf(host, op->data.buf.in, op->data.nbytes);
362 struct hisi_sfc_v3xx_host *host;
366 host = spi_controller_get_devdata(spi->controller);
368 return hisi_sfc_v3xx_generic_exec_op(host, op, chip_select);
379 struct hisi_sfc_v3xx_host *host = data;
382 reg = readl(host->regbase + HISI_SFC_V3XX_INT_STAT);
386 hisi_sfc_v3xx_disable_int(host);
388 complete(host->completion);
434 struct hisi_sfc_v3xx_host *host;
439 ctlr = spi_alloc_host(&pdev->dev, sizeof(*host));
448 host = spi_controller_get_devdata(ctlr);
449 host->dev = dev;
451 platform_set_drvdata(pdev, host);
453 host->regbase = devm_platform_ioremap_resource(pdev, 0);
454 if (IS_ERR(host->regbase)) {
455 ret = PTR_ERR(host->regbase);
459 host->irq = platform_get_irq_optional(pdev, 0);
460 if (host->irq == -EPROBE_DEFER) {
465 hisi_sfc_v3xx_disable_int(host);
467 if (host->irq > 0) {
468 ret = devm_request_irq(dev, host->irq, hisi_sfc_v3xx_isr, 0,
469 "hisi-sfc-v3xx", host);
472 dev_err(dev, "failed to request irq%d, ret = %d\n", host->irq, ret);
473 host->irq = 0;
476 host->irq = 0;
489 glb_config = readl(host->regbase + HISI_SFC_V3XX_GLB_CFG);
491 host->address_mode = 4;
493 host->address_mode = 3;
495 version = readl(host->regbase + HISI_SFC_V3XX_VERSION);
498 host->max_cmd_dword = 64;
500 host->max_cmd_dword = 16;
507 version, host->irq ? "irq" : "polling");