From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
To: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
Cc: peter.maydell@linaro.org, zach.pfeffer@xilinx.com,
jues@xilinx.com, ozaki.ryota@gmail.com, qemu-devel@nongnu.org,
alistair.francis@xilinx.com, michals@xilinx.com
Subject: Re: [Qemu-devel] [PATCH target-arm v8 04/14] arm: xlnx-zynqmp: Add GIC
Date: Mon, 11 May 2015 14:54:41 +1000 [thread overview]
Message-ID: <20150511045441.GD1494@toto> (raw)
In-Reply-To: <47f7c11564972c66433e43145f8e88746b228072.1431045878.git.peter.crosthwaite@xilinx.com>
On Thu, May 07, 2015 at 05:57:12PM -0700, Peter Crosthwaite 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.
>
> Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
> ---
> changed since v7:
> Made GIC region size definition board specific
> changed since v6:
> Added aliases.
> changed since v5:
> Make commit msg body standalone
> Add reset-cbar configuration
>
> hw/arm/xlnx-zynqmp.c | 59 ++++++++++++++++++++++++++++++++++++++++++++
> include/hw/arm/xlnx-zynqmp.h | 14 +++++++++++
> 2 files changed, 73 insertions(+)
>
> diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
> index ec0ebaa..a8ab7e7 100644
> --- a/hw/arm/xlnx-zynqmp.c
> +++ b/hw/arm/xlnx-zynqmp.c
> @@ -16,6 +16,23 @@
> */
>
> #include "hw/arm/xlnx-zynqmp.h"
> +#include "exec/address-spaces.h"
> +
> +#define GIC_NUM_SPI_INTR 128
Is this correct? I think it should be 160.
> +
> +#define GIC_BASE_ADDR 0xf9000000
> +#define GIC_DIST_ADDR 0xf9010000
> +#define GIC_CPU_ADDR 0xf9020000
> +
> +typedef struct XlnxZynqMPGICRegion {
> + int region_index;
> + uint32_t address;
> +} XlnxZynqMPGICRegion;
> +
> +static const XlnxZynqMPGICRegion xlnx_zynqmp_gic_regions[] = {
> + { .region_index = 0, .address = GIC_DIST_ADDR, },
> + { .region_index = 1, .address = GIC_CPU_ADDR, },
> +};
>
> static void xlnx_zynqmp_init(Object *obj)
> {
> @@ -28,14 +45,46 @@ static void xlnx_zynqmp_init(Object *obj)
> object_property_add_child(obj, "cpu[*]", OBJECT(&s->cpu[i]),
> &error_abort);
> }
> +
> + object_initialize(&s->gic, sizeof(s->gic), TYPE_ARM_GIC);
> + qdev_set_parent_bus(DEVICE(&s->gic), sysbus_get_default());
> }
>
> static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
> {
> XlnxZynqMPState *s = XLNX_ZYNQMP(dev);
> + MemoryRegion *system_memory = get_system_memory();
> uint8_t i;
> Error *err = NULL;
>
> + qdev_prop_set_uint32(DEVICE(&s->gic), "num-irq", GIC_NUM_SPI_INTR + 32);
> + qdev_prop_set_uint32(DEVICE(&s->gic), "revision", 2);
> + qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", XLNX_ZYNQMP_NUM_CPUS);
> + object_property_set_bool(OBJECT(&s->gic), true, "realized", &err);
> + if (err) {
> + error_propagate((errp), (err));
> + return;
> + }
> + 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 += XLNX_ZYNQMP_GIC_REGION_SIZE;
> + memory_region_init_alias(alias, OBJECT(s), "zynqmp-gic-alias", mr,
> + 0, XLNX_ZYNQMP_GIC_REGION_SIZE);
> + memory_region_add_subregion(system_memory, addr, alias);
> + }
> + }
> +
> for (i = 0; i < XLNX_ZYNQMP_NUM_CPUS; i++) {
> object_property_set_int(OBJECT(&s->cpu[i]), QEMU_PSCI_CONDUIT_SMC,
> "psci-conduit", &error_abort);
> @@ -45,11 +94,21 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
> "start-powered-off", &error_abort);
> }
>
> + object_property_set_int(OBJECT(&s->cpu[i]), GIC_BASE_ADDR,
> + "reset-cbar", &err);
> + if (err) {
> + error_propagate((errp), (err));
> + return;
> + }
> +
> object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err);
> if (err) {
> error_propagate((errp), (err));
> return;
> }
> +
> + sysbus_connect_irq(SYS_BUS_DEVICE(&s->gic), i,
> + qdev_get_gpio_in(DEVICE(&s->cpu[i]), ARM_CPU_IRQ));
> }
> }
>
> diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
> index 62f6b6f..719bc8b 100644
> --- a/include/hw/arm/xlnx-zynqmp.h
> +++ b/include/hw/arm/xlnx-zynqmp.h
> @@ -19,6 +19,7 @@
>
> #include "qemu-common.h"
> #include "hw/arm/arm.h"
> +#include "hw/intc/arm_gic.h"
>
> #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp"
> #define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
> @@ -26,12 +27,25 @@
>
> #define XLNX_ZYNQMP_NUM_CPUS 4
>
> +#define XLNX_ZYNQMP_GIC_REGIONS 2
> +
> +/* ZynqMP maps the ARM GIC regions (GICC, GICD ...) at consecutive 64k offsets
> + * and under-decodes the 64k region. This mirrors the 4k regions to every 4k
> + * aligned address in the 64k region. To implement each GIC region needs a
> + * number of memory region aliases.
> + */
> +
> +#define XLNX_ZYNQMP_GIC_REGION_SIZE 0x4000
> +#define XLNX_ZYNQMP_GIC_ALIASES (0x10000 / XLNX_ZYNQMP_GIC_REGION_SIZE - 1)
> +
> typedef struct XlnxZynqMPState {
> /*< private >*/
> DeviceState parent_obj;
>
> /*< public >*/
> ARMCPU cpu[XLNX_ZYNQMP_NUM_CPUS];
> + GICState gic;
> + MemoryRegion gic_mr[XLNX_ZYNQMP_GIC_REGIONS][XLNX_ZYNQMP_GIC_ALIASES];
> } XlnxZynqMPState;
>
> #define XLNX_ZYNQMP_H
> --
> 2.4.0.3.ge0ccc3b.dirty
>
next prev parent reply other threads:[~2015-05-11 4:58 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-08 0:56 [Qemu-devel] [PATCH target-arm v8 00/14] Next Generation Xilinx Zynq SoC Peter Crosthwaite
2015-05-08 0:56 ` [Qemu-devel] [PATCH target-arm v8 01/14] target-arm: cpu64: generalise name of A57 regs Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 02/14] target-arm: cpu64: Add support for Cortex-A53 Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 03/14] arm: Introduce Xilinx ZynqMP SoC Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 04/14] arm: xlnx-zynqmp: Add GIC Peter Crosthwaite
2015-05-11 4:54 ` Edgar E. Iglesias [this message]
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 05/14] arm: xlnx-zynqmp: Connect CPU Timers to GIC Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 06/14] net: cadence_gem: Clean up variable names Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 07/14] net: cadence_gem: Split state struct and type into header Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 08/14] arm: xlnx-zynqmp: Add GEM support Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 09/14] char: cadence_uart: Clean up variable names Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 10/14] char: cadence_uart: Split state struct and type into header Peter Crosthwaite
2015-05-08 0:57 ` [Qemu-devel] [PATCH target-arm v8 11/14] arm: xlnx-zynqmp: Add UART support Peter Crosthwaite
2015-05-08 0:58 ` [Qemu-devel] [PATCH target-arm v8 12/14] arm: Add xlnx-ep108 machine Peter Crosthwaite
2015-05-08 0:58 ` [Qemu-devel] [PATCH target-arm v8 13/14] arm: xlnx-ep108: Add external RAM Peter Crosthwaite
2015-05-08 0:58 ` [Qemu-devel] [PATCH target-arm v8 14/14] arm: xlnx-ep108: Add bootloading Peter Crosthwaite
2015-05-15 1:08 ` [Qemu-devel] [PATCH target-arm v8 00/14] Next Generation Xilinx Zynq SoC Edgar E. Iglesias
2015-05-15 2:29 ` Peter Crosthwaite
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20150511045441.GD1494@toto \
--to=edgar.iglesias@xilinx.com \
--cc=alistair.francis@xilinx.com \
--cc=jues@xilinx.com \
--cc=michals@xilinx.com \
--cc=ozaki.ryota@gmail.com \
--cc=peter.crosthwaite@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=zach.pfeffer@xilinx.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).