Lines Matching defs:sadi
120 static int sprd_adi_check_paddr(struct sprd_adi *sadi, u32 paddr)
122 if (paddr < sadi->slave_pbase || paddr >
123 (sadi->slave_pbase + ADI_SLAVE_ADDR_SIZE)) {
124 dev_err(sadi->dev,
133 static unsigned long sprd_adi_to_vaddr(struct sprd_adi *sadi, u32 paddr)
135 return (paddr - sadi->slave_pbase + sadi->slave_vbase);
138 static int sprd_adi_drain_fifo(struct sprd_adi *sadi)
144 sts = readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS);
152 dev_err(sadi->dev, "drain write fifo timeout\n");
159 static int sprd_adi_fifo_is_full(struct sprd_adi *sadi)
161 return readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS) & BIT_FIFO_FULL;
164 static int sprd_adi_read(struct sprd_adi *sadi, u32 reg_paddr, u32 *read_val)
171 if (sadi->hwlock) {
172 ret = hwspin_lock_timeout_irqsave(sadi->hwlock,
176 dev_err(sadi->dev, "get the hw lock failed\n");
185 writel_relaxed(reg_paddr, sadi->base + REG_ADI_RD_CMD);
194 val = readl_relaxed(sadi->base + REG_ADI_RD_DATA);
202 dev_err(sadi->dev, "ADI read timeout\n");
216 dev_err(sadi->dev, "read error, reg addr = 0x%x, val = 0x%x\n",
225 if (sadi->hwlock)
226 hwspin_unlock_irqrestore(sadi->hwlock, &flags);
230 static int sprd_adi_write(struct sprd_adi *sadi, u32 reg_paddr, u32 val)
232 unsigned long reg = sprd_adi_to_vaddr(sadi, reg_paddr);
237 if (sadi->hwlock) {
238 ret = hwspin_lock_timeout_irqsave(sadi->hwlock,
242 dev_err(sadi->dev, "get the hw lock failed\n");
247 ret = sprd_adi_drain_fifo(sadi);
256 if (!sprd_adi_fifo_is_full(sadi)) {
265 dev_err(sadi->dev, "write fifo is full\n");
270 if (sadi->hwlock)
271 hwspin_unlock_irqrestore(sadi->hwlock, &flags);
279 struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
284 phy_reg = *(u32 *)t->rx_buf + sadi->slave_pbase;
286 ret = sprd_adi_check_paddr(sadi, phy_reg);
290 ret = sprd_adi_read(sadi, phy_reg, &val);
303 phy_reg = *p++ + sadi->slave_pbase;
304 ret = sprd_adi_check_paddr(sadi, phy_reg);
309 ret = sprd_adi_write(sadi, phy_reg, val);
313 dev_err(sadi->dev, "no buffer for transfer\n");
320 static void sprd_adi_set_wdt_rst_mode(struct sprd_adi *sadi)
326 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val);
328 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val);
335 struct sprd_adi *sadi = container_of(this, struct sprd_adi,
369 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val);
372 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val);
375 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_MODULE_EN, &val);
377 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_MODULE_EN, val);
380 sprd_adi_read(sadi, sadi->slave_pbase + PMIC_CLK_EN, &val);
382 sprd_adi_write(sadi, sadi->slave_pbase + PMIC_CLK_EN, val);
385 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY);
387 sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val);
389 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val);
392 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0);
393 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW,
397 sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val);
399 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val);
402 sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, ~WDG_UNLOCK_KEY);
406 dev_emerg(sadi->dev, "Unable to restart system\n");
410 static void sprd_adi_hw_init(struct sprd_adi *sadi)
412 struct device_node *np = sadi->dev->of_node;
418 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIL);
419 writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIH);
422 tmp = readl_relaxed(sadi->base + REG_ADI_GSSI_CFG0);
424 writel_relaxed(tmp, sadi->base + REG_ADI_GSSI_CFG0);
429 dev_info(sadi->dev, "no hw channels setting in node\n");
443 writel_relaxed(chn_config, sadi->base +
447 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN);
449 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN);
451 value = readl_relaxed(sadi->base + REG_ADI_CHN_EN1);
453 writel_relaxed(value, sadi->base + REG_ADI_CHN_EN1);
462 struct sprd_adi *sadi;
480 sadi = spi_controller_get_devdata(ctlr);
483 sadi->base = devm_ioremap_resource(&pdev->dev, res);
484 if (IS_ERR(sadi->base)) {
485 ret = PTR_ERR(sadi->base);
489 sadi->slave_vbase = (unsigned long)sadi->base + ADI_SLAVE_OFFSET;
490 sadi->slave_pbase = res->start + ADI_SLAVE_OFFSET;
491 sadi->ctlr = ctlr;
492 sadi->dev = &pdev->dev;
495 sadi->hwlock =
497 if (!sadi->hwlock) {
512 sprd_adi_hw_init(sadi);
513 sprd_adi_set_wdt_rst_mode(sadi);
528 sadi->restart_handler.notifier_call = sprd_adi_restart_handler;
529 sadi->restart_handler.priority = 128;
530 ret = register_restart_handler(&sadi->restart_handler);
546 struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
548 unregister_restart_handler(&sadi->restart_handler);