Lines Matching +full:signal +full:- +full:guard
1 // SPDX-License-Identifier: GPL-2.0-or-later
11 #include <linux/reset-controller.h>
14 #include <dt-bindings/reset/aspeed,ast2700-scu.h>
29 const struct ast2700_reset_signal *signal; member
35 spinlock_t lock; /* Protect read-modify-write cycle */
162 void __iomem *reg_offset = rc->base + rc->info->signal[id].offset; in aspeed_reset_assert()
164 if (rc->info->signal[id].dedicated_clr) { in aspeed_reset_assert()
165 writel(rc->info->signal[id].bit, reg_offset); in aspeed_reset_assert()
167 guard(spinlock_irqsave)(&rc->lock); in aspeed_reset_assert()
168 writel(readl(reg_offset) & ~rc->info->signal[id].bit, reg_offset); in aspeed_reset_assert()
177 void __iomem *reg_offset = rc->base + rc->info->signal[id].offset; in aspeed_reset_deassert()
179 if (rc->info->signal[id].dedicated_clr) { in aspeed_reset_deassert()
180 writel(rc->info->signal[id].bit, reg_offset + 0x04); in aspeed_reset_deassert()
182 guard(spinlock_irqsave)(&rc->lock); in aspeed_reset_deassert()
183 writel(readl(reg_offset) | rc->info->signal[id].bit, reg_offset); in aspeed_reset_deassert()
192 void __iomem *reg_offset = rc->base + rc->info->signal[id].offset; in aspeed_reset_status()
194 return (readl(reg_offset) & rc->info->signal[id].bit) ? 1 : 0; in aspeed_reset_status()
207 struct device *dev = &adev->dev; in aspeed_reset_probe()
211 return -ENOMEM; in aspeed_reset_probe()
213 spin_lock_init(&reset->lock); in aspeed_reset_probe()
215 reset->info = (struct aspeed_reset_info *)id->driver_data; in aspeed_reset_probe()
216 reset->rcdev.owner = THIS_MODULE; in aspeed_reset_probe()
217 reset->rcdev.nr_resets = reset->info->nr_resets; in aspeed_reset_probe()
218 reset->rcdev.ops = &aspeed_reset_ops; in aspeed_reset_probe()
219 reset->rcdev.of_node = dev->parent->of_node; in aspeed_reset_probe()
220 reset->rcdev.dev = dev; in aspeed_reset_probe()
221 reset->rcdev.of_reset_n_cells = 1; in aspeed_reset_probe()
222 reset->base = (void __iomem *)adev->dev.platform_data; in aspeed_reset_probe()
224 return devm_reset_controller_register(dev, &reset->rcdev); in aspeed_reset_probe()
229 .signal = ast2700_reset0_signals,
234 .signal = ast2700_reset1_signals,