Lines Matching defs:sart
14 #include <linux/soc/apple/sart.h>
52 void (*get_entry)(struct apple_sart *sart, int index, u8 *flags,
54 void (*set_entry)(struct apple_sart *sart, int index, u8 flags,
71 static void sart2_get_entry(struct apple_sart *sart, int index, u8 *flags,
74 u32 cfg = readl(sart->regs + APPLE_SART2_CONFIG(index));
75 phys_addr_t paddr_ = readl(sart->regs + APPLE_SART2_PADDR(index));
83 static void sart2_set_entry(struct apple_sart *sart, int index, u8 flags,
91 writel(paddr_shifted, sart->regs + APPLE_SART2_PADDR(index));
92 writel(cfg, sart->regs + APPLE_SART2_CONFIG(index));
103 static void sart3_get_entry(struct apple_sart *sart, int index, u8 *flags,
106 phys_addr_t paddr_ = readl(sart->regs + APPLE_SART3_PADDR(index));
107 size_t size_ = readl(sart->regs + APPLE_SART3_SIZE(index));
109 *flags = readl(sart->regs + APPLE_SART3_CONFIG(index));
114 static void sart3_set_entry(struct apple_sart *sart, int index, u8 flags,
117 writel(paddr_shifted, sart->regs + APPLE_SART3_PADDR(index));
118 writel(size_shifted, sart->regs + APPLE_SART3_SIZE(index));
119 writel(flags, sart->regs + APPLE_SART3_CONFIG(index));
133 struct apple_sart *sart;
136 sart = devm_kzalloc(dev, sizeof(*sart), GFP_KERNEL);
137 if (!sart)
140 sart->dev = dev;
141 sart->ops = of_device_get_match_data(dev);
143 sart->regs = devm_platform_ioremap_resource(pdev, 0);
144 if (IS_ERR(sart->regs))
145 return PTR_ERR(sart->regs);
152 sart->ops->get_entry(sart, i, &flags, &paddr, &size);
157 dev_dbg(sart->dev,
160 set_bit(i, &sart->protected_entries);
163 platform_set_drvdata(pdev, sart);
176 struct apple_sart *sart;
179 sart_node = of_parse_phandle(dev->of_node, "apple,sart", 0);
189 sart = dev_get_drvdata(&sart_pdev->dev);
190 if (!sart) {
203 return sart;
207 static int sart_set_entry(struct apple_sart *sart, int index, u8 flags,
210 if (size & ((1 << sart->ops->size_shift) - 1))
212 if (paddr & ((1 << sart->ops->paddr_shift) - 1))
215 paddr >>= sart->ops->size_shift;
216 size >>= sart->ops->paddr_shift;
218 if (size > sart->ops->size_max)
221 sart->ops->set_entry(sart, index, flags, paddr, size);
225 int apple_sart_add_allowed_region(struct apple_sart *sart, phys_addr_t paddr,
231 if (test_bit(i, &sart->protected_entries))
233 if (test_and_set_bit(i, &sart->used_entries))
236 ret = sart_set_entry(sart, i, APPLE_SART_FLAGS_ALLOW, paddr,
239 dev_dbg(sart->dev,
242 clear_bit(i, &sart->used_entries);
246 dev_dbg(sart->dev, "wrote [%pa, 0x%zx] to %d\n", &paddr, size,
251 dev_warn(sart->dev,
259 int apple_sart_remove_allowed_region(struct apple_sart *sart, phys_addr_t paddr,
264 dev_dbg(sart->dev,
273 if (test_bit(i, &sart->protected_entries))
276 sart->ops->get_entry(sart, i, &eflags, &epaddr, &esize);
281 sart->ops->set_entry(sart, i, 0, 0, 0);
283 clear_bit(i, &sart->used_entries);
284 dev_dbg(sart->dev, "cleared entry %d\n", i);
288 dev_warn(sart->dev, "entry [paddr: 0x%pa, size: 0x%zx] not found\n",
297 struct apple_sart *sart = dev_get_drvdata(&pdev->dev);
301 if (test_bit(i, &sart->protected_entries))
304 sart->ops->set_entry(sart, i, 0, 0, 0);
310 .compatible = "apple,t6000-sart",
314 .compatible = "apple,t8103-sart",
323 .name = "apple-sart",