sadi              119 drivers/spi/spi-sprd-adi.c static int sprd_adi_check_paddr(struct sprd_adi *sadi, u32 paddr)
sadi              121 drivers/spi/spi-sprd-adi.c 	if (paddr < sadi->slave_pbase || paddr >
sadi              122 drivers/spi/spi-sprd-adi.c 	    (sadi->slave_pbase + ADI_SLAVE_ADDR_SIZE)) {
sadi              123 drivers/spi/spi-sprd-adi.c 		dev_err(sadi->dev,
sadi              132 drivers/spi/spi-sprd-adi.c static unsigned long sprd_adi_to_vaddr(struct sprd_adi *sadi, u32 paddr)
sadi              134 drivers/spi/spi-sprd-adi.c 	return (paddr - sadi->slave_pbase + sadi->slave_vbase);
sadi              137 drivers/spi/spi-sprd-adi.c static int sprd_adi_drain_fifo(struct sprd_adi *sadi)
sadi              143 drivers/spi/spi-sprd-adi.c 		sts = readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS);
sadi              151 drivers/spi/spi-sprd-adi.c 		dev_err(sadi->dev, "drain write fifo timeout\n");
sadi              158 drivers/spi/spi-sprd-adi.c static int sprd_adi_fifo_is_full(struct sprd_adi *sadi)
sadi              160 drivers/spi/spi-sprd-adi.c 	return readl_relaxed(sadi->base + REG_ADI_ARM_FIFO_STS) & BIT_FIFO_FULL;
sadi              163 drivers/spi/spi-sprd-adi.c static int sprd_adi_read(struct sprd_adi *sadi, u32 reg_paddr, u32 *read_val)
sadi              170 drivers/spi/spi-sprd-adi.c 	if (sadi->hwlock) {
sadi              171 drivers/spi/spi-sprd-adi.c 		ret = hwspin_lock_timeout_irqsave(sadi->hwlock,
sadi              175 drivers/spi/spi-sprd-adi.c 			dev_err(sadi->dev, "get the hw lock failed\n");
sadi              184 drivers/spi/spi-sprd-adi.c 	writel_relaxed(reg_paddr, sadi->base + REG_ADI_RD_CMD);
sadi              193 drivers/spi/spi-sprd-adi.c 		val = readl_relaxed(sadi->base + REG_ADI_RD_DATA);
sadi              201 drivers/spi/spi-sprd-adi.c 		dev_err(sadi->dev, "ADI read timeout\n");
sadi              215 drivers/spi/spi-sprd-adi.c 		dev_err(sadi->dev, "read error, reg addr = 0x%x, val = 0x%x\n",
sadi              224 drivers/spi/spi-sprd-adi.c 	if (sadi->hwlock)
sadi              225 drivers/spi/spi-sprd-adi.c 		hwspin_unlock_irqrestore(sadi->hwlock, &flags);
sadi              229 drivers/spi/spi-sprd-adi.c static int sprd_adi_write(struct sprd_adi *sadi, u32 reg_paddr, u32 val)
sadi              231 drivers/spi/spi-sprd-adi.c 	unsigned long reg = sprd_adi_to_vaddr(sadi, reg_paddr);
sadi              236 drivers/spi/spi-sprd-adi.c 	if (sadi->hwlock) {
sadi              237 drivers/spi/spi-sprd-adi.c 		ret = hwspin_lock_timeout_irqsave(sadi->hwlock,
sadi              241 drivers/spi/spi-sprd-adi.c 			dev_err(sadi->dev, "get the hw lock failed\n");
sadi              246 drivers/spi/spi-sprd-adi.c 	ret = sprd_adi_drain_fifo(sadi);
sadi              255 drivers/spi/spi-sprd-adi.c 		if (!sprd_adi_fifo_is_full(sadi)) {
sadi              264 drivers/spi/spi-sprd-adi.c 		dev_err(sadi->dev, "write fifo is full\n");
sadi              269 drivers/spi/spi-sprd-adi.c 	if (sadi->hwlock)
sadi              270 drivers/spi/spi-sprd-adi.c 		hwspin_unlock_irqrestore(sadi->hwlock, &flags);
sadi              278 drivers/spi/spi-sprd-adi.c 	struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
sadi              283 drivers/spi/spi-sprd-adi.c 		phy_reg = *(u32 *)t->rx_buf + sadi->slave_pbase;
sadi              285 drivers/spi/spi-sprd-adi.c 		ret = sprd_adi_check_paddr(sadi, phy_reg);
sadi              289 drivers/spi/spi-sprd-adi.c 		ret = sprd_adi_read(sadi, phy_reg, &val);
sadi              302 drivers/spi/spi-sprd-adi.c 		phy_reg = *p++ + sadi->slave_pbase;
sadi              303 drivers/spi/spi-sprd-adi.c 		ret = sprd_adi_check_paddr(sadi, phy_reg);
sadi              308 drivers/spi/spi-sprd-adi.c 		ret = sprd_adi_write(sadi, phy_reg, val);
sadi              312 drivers/spi/spi-sprd-adi.c 		dev_err(sadi->dev, "no buffer for transfer\n");
sadi              319 drivers/spi/spi-sprd-adi.c static void sprd_adi_set_wdt_rst_mode(struct sprd_adi *sadi)
sadi              325 drivers/spi/spi-sprd-adi.c 	sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val);
sadi              327 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val);
sadi              334 drivers/spi/spi-sprd-adi.c 	struct sprd_adi *sadi = container_of(this, struct sprd_adi,
sadi              368 drivers/spi/spi-sprd-adi.c 	sprd_adi_read(sadi, sadi->slave_pbase + PMIC_RST_STATUS, &val);
sadi              371 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + PMIC_RST_STATUS, val);
sadi              374 drivers/spi/spi-sprd-adi.c 	sprd_adi_read(sadi, sadi->slave_pbase + PMIC_MODULE_EN, &val);
sadi              376 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + PMIC_MODULE_EN, val);
sadi              379 drivers/spi/spi-sprd-adi.c 	sprd_adi_read(sadi, sadi->slave_pbase + PMIC_CLK_EN, &val);
sadi              381 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + PMIC_CLK_EN, val);
sadi              384 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, WDG_UNLOCK_KEY);
sadi              387 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_LOW,
sadi              389 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOAD_HIGH, 0);
sadi              392 drivers/spi/spi-sprd-adi.c 	sprd_adi_read(sadi, sadi->slave_pbase + REG_WDG_CTRL, &val);
sadi              394 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_CTRL, val);
sadi              397 drivers/spi/spi-sprd-adi.c 	sprd_adi_write(sadi, sadi->slave_pbase + REG_WDG_LOCK, ~WDG_UNLOCK_KEY);
sadi              401 drivers/spi/spi-sprd-adi.c 	dev_emerg(sadi->dev, "Unable to restart system\n");
sadi              405 drivers/spi/spi-sprd-adi.c static void sprd_adi_hw_init(struct sprd_adi *sadi)
sadi              407 drivers/spi/spi-sprd-adi.c 	struct device_node *np = sadi->dev->of_node;
sadi              413 drivers/spi/spi-sprd-adi.c 	writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIL);
sadi              414 drivers/spi/spi-sprd-adi.c 	writel_relaxed(0, sadi->base + REG_ADI_CHN_PRIH);
sadi              417 drivers/spi/spi-sprd-adi.c 	tmp = readl_relaxed(sadi->base + REG_ADI_GSSI_CFG0);
sadi              419 drivers/spi/spi-sprd-adi.c 	writel_relaxed(tmp, sadi->base + REG_ADI_GSSI_CFG0);
sadi              424 drivers/spi/spi-sprd-adi.c 		dev_info(sadi->dev, "no hw channels setting in node\n");
sadi              438 drivers/spi/spi-sprd-adi.c 		writel_relaxed(chn_config, sadi->base +
sadi              442 drivers/spi/spi-sprd-adi.c 			value = readl_relaxed(sadi->base + REG_ADI_CHN_EN);
sadi              444 drivers/spi/spi-sprd-adi.c 			writel_relaxed(value, sadi->base + REG_ADI_CHN_EN);
sadi              446 drivers/spi/spi-sprd-adi.c 			value = readl_relaxed(sadi->base + REG_ADI_CHN_EN1);
sadi              448 drivers/spi/spi-sprd-adi.c 			writel_relaxed(value, sadi->base + REG_ADI_CHN_EN1);
sadi              457 drivers/spi/spi-sprd-adi.c 	struct sprd_adi *sadi;
sadi              475 drivers/spi/spi-sprd-adi.c 	sadi = spi_controller_get_devdata(ctlr);
sadi              478 drivers/spi/spi-sprd-adi.c 	sadi->base = devm_ioremap_resource(&pdev->dev, res);
sadi              479 drivers/spi/spi-sprd-adi.c 	if (IS_ERR(sadi->base)) {
sadi              480 drivers/spi/spi-sprd-adi.c 		ret = PTR_ERR(sadi->base);
sadi              484 drivers/spi/spi-sprd-adi.c 	sadi->slave_vbase = (unsigned long)sadi->base + ADI_SLAVE_OFFSET;
sadi              485 drivers/spi/spi-sprd-adi.c 	sadi->slave_pbase = res->start + ADI_SLAVE_OFFSET;
sadi              486 drivers/spi/spi-sprd-adi.c 	sadi->ctlr = ctlr;
sadi              487 drivers/spi/spi-sprd-adi.c 	sadi->dev = &pdev->dev;
sadi              490 drivers/spi/spi-sprd-adi.c 		sadi->hwlock =
sadi              492 drivers/spi/spi-sprd-adi.c 		if (!sadi->hwlock) {
sadi              510 drivers/spi/spi-sprd-adi.c 	sprd_adi_hw_init(sadi);
sadi              511 drivers/spi/spi-sprd-adi.c 	sprd_adi_set_wdt_rst_mode(sadi);
sadi              526 drivers/spi/spi-sprd-adi.c 	sadi->restart_handler.notifier_call = sprd_adi_restart_handler;
sadi              527 drivers/spi/spi-sprd-adi.c 	sadi->restart_handler.priority = 128;
sadi              528 drivers/spi/spi-sprd-adi.c 	ret = register_restart_handler(&sadi->restart_handler);
sadi              544 drivers/spi/spi-sprd-adi.c 	struct sprd_adi *sadi = spi_controller_get_devdata(ctlr);
sadi              546 drivers/spi/spi-sprd-adi.c 	unregister_restart_handler(&sadi->restart_handler);