• Home
  • Raw
  • Download

Lines Matching +full:cmd +full:- +full:timeout +full:- +full:ms

4  * SPDX-License-Identifier: GPL-2.0
37 #define REG_ADI_CHN_ADDR(id) (0x44 + (id - 2) * 4)
60 /* Timeout (ms) for the trylock of hardware spinlocks */
105 /* Use default timeout 50 ms that converts to watchdog values */
122 if (paddr < sadi->slave_pbase || paddr > in sprd_adi_check_paddr()
123 (sadi->slave_pbase + ADI_SLAVE_ADDR_SIZE)) { in sprd_adi_check_paddr()
124 dev_err(sadi->dev, in sprd_adi_check_paddr()
127 return -EINVAL; in sprd_adi_check_paddr()
135 return (paddr - sadi->slave_pbase + sadi->slave_vbase); in sprd_adi_to_vaddr()
140 u32 timeout = ADI_FIFO_DRAIN_TIMEOUT; in sprd_adi_drain_fifo() local
144 sts = readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS); in sprd_adi_drain_fifo()
149 } while (--timeout); in sprd_adi_drain_fifo()
151 if (timeout == 0) { in sprd_adi_drain_fifo()
152 dev_err(sadi->dev, "drain write fifo timeout\n"); in sprd_adi_drain_fifo()
153 return -EBUSY; in sprd_adi_drain_fifo()
161 return readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS) & BIT_FIFO_FULL; in sprd_adi_fifo_is_full()
171 if (sadi->hwlock) { in sprd_adi_read()
172 ret = hwspin_lock_timeout_irqsave(sadi->hwlock, in sprd_adi_read()
176 dev_err(sadi->dev, "get the hw lock failed\n"); in sprd_adi_read()
185 writel_relaxed(reg_paddr, sadi->base + REG_ADI_RD_CMD); in sprd_adi_read()
194 val = readl_relaxed(sadi->base + REG_ADI_RD_DATA); in sprd_adi_read()
199 } while (--read_timeout); in sprd_adi_read()
202 dev_err(sadi->dev, "ADI read timeout\n"); in sprd_adi_read()
203 ret = -EBUSY; in sprd_adi_read()
216 dev_err(sadi->dev, "read error, reg addr = 0x%x, val = 0x%x\n", in sprd_adi_read()
218 ret = -EIO; in sprd_adi_read()
225 if (sadi->hwlock) in sprd_adi_read()
226 hwspin_unlock_irqrestore(sadi->hwlock, &flags); in sprd_adi_read()
233 u32 timeout = ADI_FIFO_DRAIN_TIMEOUT; in sprd_adi_write() local
237 if (sadi->hwlock) { in sprd_adi_write()
238 ret = hwspin_lock_timeout_irqsave(sadi->hwlock, in sprd_adi_write()
242 dev_err(sadi->dev, "get the hw lock failed\n"); in sprd_adi_write()
262 } while (--timeout); in sprd_adi_write()
264 if (timeout == 0) { in sprd_adi_write()
265 dev_err(sadi->dev, "write fifo is full\n"); in sprd_adi_write()
266 ret = -EBUSY; in sprd_adi_write()
270 if (sadi->hwlock) in sprd_adi_write()
271 hwspin_unlock_irqrestore(sadi->hwlock, &flags); in sprd_adi_write()
283 if (t->rx_buf) { in sprd_adi_transfer_one()
284 phy_reg = *(u32 *)t->rx_buf + sadi->slave_pbase; in sprd_adi_transfer_one()
294 *(u32 *)t->rx_buf = val; in sprd_adi_transfer_one()
295 } else if (t->tx_buf) { in sprd_adi_transfer_one()
296 u32 *p = (u32 *)t->tx_buf; in sprd_adi_transfer_one()
303 phy_reg = *p++ + sadi->slave_pbase; in sprd_adi_transfer_one()
313 dev_err(sadi->dev, "no buffer for transfer\n"); in sprd_adi_transfer_one()
314 return -EINVAL; in sprd_adi_transfer_one()
326 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val); in sprd_adi_set_wdt_rst_mode()
328 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val); in sprd_adi_set_wdt_rst_mode()
333 unsigned long mode, void *cmd) in sprd_adi_restart_handler() argument
339 if (!cmd) in sprd_adi_restart_handler()
341 else if (!strncmp(cmd, "recovery", 8)) in sprd_adi_restart_handler()
343 else if (!strncmp(cmd, "alarm", 5)) in sprd_adi_restart_handler()
345 else if (!strncmp(cmd, "fastsleep", 9)) in sprd_adi_restart_handler()
347 else if (!strncmp(cmd, "bootloader", 10)) in sprd_adi_restart_handler()
349 else if (!strncmp(cmd, "panic", 5)) in sprd_adi_restart_handler()
351 else if (!strncmp(cmd, "special", 7)) in sprd_adi_restart_handler()
353 else if (!strncmp(cmd, "cftreboot", 9)) in sprd_adi_restart_handler()
355 else if (!strncmp(cmd, "autodloader", 11)) in sprd_adi_restart_handler()
357 else if (!strncmp(cmd, "iqmode", 6)) in sprd_adi_restart_handler()
359 else if (!strncmp(cmd, "sprdisk", 7)) in sprd_adi_restart_handler()
361 else if (!strncmp(cmd, "tospanic", 8)) in sprd_adi_restart_handler()
363 else if (!strncmp(cmd, "factorytest", 11)) in sprd_adi_restart_handler()
369 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val); in sprd_adi_restart_handler()
372 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val); in sprd_adi_restart_handler()
375 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_MODULE_EN, &val); in sprd_adi_restart_handler()
377 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_MODULE_EN, val); in sprd_adi_restart_handler()
380 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_CLK_EN, &val); in sprd_adi_restart_handler()
382 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_CLK_EN, val); in sprd_adi_restart_handler()
385 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY); in sprd_adi_restart_handler()
387 sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val); in sprd_adi_restart_handler()
389 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val); in sprd_adi_restart_handler()
391 /* Load the watchdog timeout value, 50ms is always enough. */ in sprd_adi_restart_handler()
392 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0); in sprd_adi_restart_handler()
393 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW, in sprd_adi_restart_handler()
397 sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val); in sprd_adi_restart_handler()
399 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val); in sprd_adi_restart_handler()
402 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, ~WDG_UNLOCK_KEY); in sprd_adi_restart_handler()
406 dev_emerg(sadi->dev, "Unable to restart system\n"); in sprd_adi_restart_handler()
412 struct device_node *np = sadi->dev->of_node; in sprd_adi_hw_init()
418 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIL); in sprd_adi_hw_init()
419 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIH); in sprd_adi_hw_init()
422 tmp = readl_relaxed(sadi->base + REG_ADI_GSSI_CFG0); in sprd_adi_hw_init()
424 writel_relaxed(tmp, sadi->base + REG_ADI_GSSI_CFG0); in sprd_adi_hw_init()
427 list = of_get_property(np, "sprd,hw-channels", &size); in sprd_adi_hw_init()
429 dev_info(sadi->dev, "no hw channels setting in node\n"); in sprd_adi_hw_init()
443 writel_relaxed(chn_config, sadi->base + in sprd_adi_hw_init()
447 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN); in sprd_adi_hw_init()
449 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN); in sprd_adi_hw_init()
451 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN1); in sprd_adi_hw_init()
452 value |= BIT(chn_id - 32); in sprd_adi_hw_init()
453 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN1); in sprd_adi_hw_init()
460 struct device_node *np = pdev->dev.of_node; in sprd_adi_probe()
468 dev_err(&pdev->dev, "can not find the adi bus node\n"); in sprd_adi_probe()
469 return -ENODEV; in sprd_adi_probe()
472 pdev->id = of_alias_get_id(np, "spi"); in sprd_adi_probe()
475 ctlr = spi_alloc_master(&pdev->dev, sizeof(struct sprd_adi)); in sprd_adi_probe()
477 return -ENOMEM; in sprd_adi_probe()
479 dev_set_drvdata(&pdev->dev, ctlr); in sprd_adi_probe()
483 sadi->base = devm_ioremap_resource(&pdev->dev, res); in sprd_adi_probe()
484 if (IS_ERR(sadi->base)) { in sprd_adi_probe()
485 ret = PTR_ERR(sadi->base); in sprd_adi_probe()
489 sadi->slave_vbase = (unsigned long)sadi->base + ADI_SLAVE_OFFSET; in sprd_adi_probe()
490 sadi->slave_pbase = res->start + ADI_SLAVE_OFFSET; in sprd_adi_probe()
491 sadi->ctlr = ctlr; in sprd_adi_probe()
492 sadi->dev = &pdev->dev; in sprd_adi_probe()
495 sadi->hwlock = in sprd_adi_probe()
496 devm_hwspin_lock_request_specific(&pdev->dev, ret); in sprd_adi_probe()
497 if (!sadi->hwlock) { in sprd_adi_probe()
498 ret = -ENXIO; in sprd_adi_probe()
503 case -ENOENT: in sprd_adi_probe()
504 dev_info(&pdev->dev, "no hardware spinlock supplied\n"); in sprd_adi_probe()
507 dev_err_probe(&pdev->dev, ret, "failed to find hwlock id\n"); in sprd_adi_probe()
515 ctlr->dev.of_node = pdev->dev.of_node; in sprd_adi_probe()
516 ctlr->bus_num = pdev->id; in sprd_adi_probe()
517 ctlr->num_chipselect = num_chipselect; in sprd_adi_probe()
518 ctlr->flags = SPI_MASTER_HALF_DUPLEX; in sprd_adi_probe()
519 ctlr->bits_per_word_mask = 0; in sprd_adi_probe()
520 ctlr->transfer_one = sprd_adi_transfer_one; in sprd_adi_probe()
522 ret = devm_spi_register_controller(&pdev->dev, ctlr); in sprd_adi_probe()
524 dev_err(&pdev->dev, "failed to register SPI controller\n"); in sprd_adi_probe()
528 sadi->restart_handler.notifier_call = sprd_adi_restart_handler; in sprd_adi_probe()
529 sadi->restart_handler.priority = 128; in sprd_adi_probe()
530 ret = register_restart_handler(&sadi->restart_handler); in sprd_adi_probe()
532 dev_err(&pdev->dev, "can not register restart handler\n"); in sprd_adi_probe()
545 struct spi_controller *ctlr = dev_get_drvdata(&pdev->dev); in sprd_adi_remove()
548 unregister_restart_handler(&sadi->restart_handler); in sprd_adi_remove()
554 .compatible = "sprd,sc9860-adi",
562 .name = "sprd-adi",