On 6 May 2015 at 23:50, Peter Crosthwaite <[email protected]> wrote:
> Add the GIC and connect IRQ outputs to the CPUs. The GIC regions are
> under-decoded through a 64k address region so implement aliases
> accordingly.
> + assert(ARRAY_SIZE(xlnx_zynqmp_gic_regions) == XLNX_ZYNQMP_GIC_REGIONS);
> + for (i = 0; i < XLNX_ZYNQMP_GIC_REGIONS; i++) {
> + SysBusDevice *gic = SYS_BUS_DEVICE(&s->gic);
> + const XlnxZynqMPGICRegion *r = &xlnx_zynqmp_gic_regions[i];
> + MemoryRegion *mr = sysbus_mmio_get_region(gic, r->region_index);
> + uint32_t addr = r->address;
> + int j;
> +
> + sysbus_mmio_map(gic, r->region_index, addr);
> +
> + for (j = 0; j < XLNX_ZYNQMP_GIC_ALIASES; j++) {
> + MemoryRegion *alias = &s->gic_mr[i][j];
> +
> + addr += ARM_GIC_REGION_SIZE;
Since the frequency at which the GICC region repeats in the memory
map is actually board dependent, you could just use a board
specific constant here.
> + memory_region_init_alias(alias, OBJECT(s), "zynqmp-gic-alias",
> mr,
> + 0, ARM_GIC_REGION_SIZE);
...and here you could use memory_region_size(mr), I suppose,
or just the board-specific value again.
-- PMM