Lines Matching +full:uniphier +full:- +full:system +full:- +full:bus
23 /* System Bus Controller registers */
52 dev_dbg(priv->dev, in uniphier_system_bus_add_bank()
56 if (bank >= ARRAY_SIZE(priv->bank)) { in uniphier_system_bus_add_bank()
57 dev_err(priv->dev, "unsupported bank number %d\n", bank); in uniphier_system_bus_add_bank()
58 return -EINVAL; in uniphier_system_bus_add_bank()
61 if (priv->bank[bank].base || priv->bank[bank].end) { in uniphier_system_bus_add_bank()
62 dev_err(priv->dev, in uniphier_system_bus_add_bank()
64 return -EINVAL; in uniphier_system_bus_add_bank()
68 dev_err(priv->dev, "base address %llx is too high\n", paddr); in uniphier_system_bus_add_bank()
69 return -EINVAL; in uniphier_system_bus_add_bank()
75 dev_err(priv->dev, in uniphier_system_bus_add_bank()
78 return -EINVAL; in uniphier_system_bus_add_bank()
80 paddr -= addr; in uniphier_system_bus_add_bank()
86 dev_err(priv->dev, "end address %08llx is too high\n", end); in uniphier_system_bus_add_bank()
87 return -EINVAL; in uniphier_system_bus_add_bank()
89 mask = paddr ^ (end - 1); in uniphier_system_bus_add_bank()
95 priv->bank[bank].base = paddr; in uniphier_system_bus_add_bank()
96 priv->bank[bank].end = end; in uniphier_system_bus_add_bank()
98 dev_dbg(priv->dev, "range added: bank = %d, addr = %08x, end = %08x\n", in uniphier_system_bus_add_bank()
99 bank, priv->bank[bank].base, priv->bank[bank].end); in uniphier_system_bus_add_bank()
109 for (i = 0; i < ARRAY_SIZE(priv->bank); i++) { in uniphier_system_bus_check_overlap()
110 for (j = i + 1; j < ARRAY_SIZE(priv->bank); j++) { in uniphier_system_bus_check_overlap()
111 if (priv->bank[i].end > priv->bank[j].base && in uniphier_system_bus_check_overlap()
112 priv->bank[i].base < priv->bank[j].end) { in uniphier_system_bus_check_overlap()
113 dev_err(priv->dev, in uniphier_system_bus_check_overlap()
116 return -EINVAL; in uniphier_system_bus_check_overlap()
127 void __iomem *base_reg = priv->membase + UNIPHIER_SBC_BASE; in uniphier_system_bus_check_boot_swap()
132 dev_dbg(priv->dev, "Boot Swap: %s\n", is_swapped ? "on" : "off"); in uniphier_system_bus_check_boot_swap()
135 * If BOOT_SWAP was asserted on power-on-reset, the CS0 and CS1 are in uniphier_system_bus_check_boot_swap()
139 swap(priv->bank[0], priv->bank[1]); in uniphier_system_bus_check_boot_swap()
145 void __iomem *base_reg = priv->membase + UNIPHIER_SBC_BASE; in uniphier_system_bus_set_reg()
149 for (i = 0; i < ARRAY_SIZE(priv->bank); i++) { in uniphier_system_bus_set_reg()
150 base = priv->bank[i].base; in uniphier_system_bus_set_reg()
151 end = priv->bank[i].end; in uniphier_system_bus_set_reg()
156 * to anywhere in the system bus space is routed to in uniphier_system_bus_set_reg()
172 mask = base ^ (end - 1); in uniphier_system_bus_set_reg()
178 dev_dbg(priv->dev, "SBC_BASE[%d] = 0x%08x\n", i, val); in uniphier_system_bus_set_reg()
186 struct device *dev = &pdev->dev; in uniphier_system_bus_probe()
196 return -ENOMEM; in uniphier_system_bus_probe()
199 priv->membase = devm_ioremap_resource(dev, regs); in uniphier_system_bus_probe()
200 if (IS_ERR(priv->membase)) in uniphier_system_bus_probe()
201 return PTR_ERR(priv->membase); in uniphier_system_bus_probe()
203 priv->dev = dev; in uniphier_system_bus_probe()
205 pna = of_n_addr_cells(dev->of_node); in uniphier_system_bus_probe()
207 ret = of_property_read_u32(dev->of_node, "#address-cells", &cells); in uniphier_system_bus_probe()
209 dev_err(dev, "failed to get #address-cells\n"); in uniphier_system_bus_probe()
213 dev_err(dev, "#address-cells must be 2\n"); in uniphier_system_bus_probe()
214 return -EINVAL; in uniphier_system_bus_probe()
217 ret = of_property_read_u32(dev->of_node, "#size-cells", &cells); in uniphier_system_bus_probe()
219 dev_err(dev, "failed to get #size-cells\n"); in uniphier_system_bus_probe()
223 dev_err(dev, "#size-cells must be 1\n"); in uniphier_system_bus_probe()
224 return -EINVAL; in uniphier_system_bus_probe()
227 ranges = of_get_property(dev->of_node, "ranges", &rlen); in uniphier_system_bus_probe()
230 return -ENOENT; in uniphier_system_bus_probe()
236 for (; rlen >= rone; rlen -= rone) { in uniphier_system_bus_probe()
239 paddr = of_translate_address(dev->of_node, ranges); in uniphier_system_bus_probe()
241 return -EINVAL; in uniphier_system_bus_probe()
261 /* Now, the bus is configured. Populate platform_devices below it */ in uniphier_system_bus_probe()
262 return of_platform_default_populate(dev->of_node, NULL, dev); in uniphier_system_bus_probe()
277 { .compatible = "socionext,uniphier-system-bus" },
285 .name = "uniphier-system-bus",
293 MODULE_DESCRIPTION("UniPhier System Bus driver");