summaryrefslogtreecommitdiffstats
path: root/recipes-devtools
diff options
context:
space:
mode:
authorNathan Rossi <nathan.rossi@xilinx.com>2015-04-22 18:41:14 +1000
committerNathan Rossi <nathan.rossi@xilinx.com>2015-04-22 18:41:14 +1000
commit36f8fc657039a8586c2d800d16771eb2b5a24da8 (patch)
treecfa7dad3ab4b70385de4bb7bbdd5fa785a15d2c5 /recipes-devtools
parent0691d6f5b89d24985655960d7f22baf896896324 (diff)
downloadmeta-xilinx-36f8fc657039a8586c2d800d16771eb2b5a24da8.tar.gz
qemu_zynqmp: Update SRCREV and Patches
* Update SRCREV to point to newest master * Update patches based on patches that are on qemu-devel at v4 Signed-off-by: Nathan Rossi <nathan.rossi@xilinx.com>
Diffstat (limited to 'recipes-devtools')
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch24
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0002-target-arm-cpu64-Add-support-for-cortex-a53.patch21
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0003-arm-Introduce-Xilinx-ZynqMP-SoC.patch (renamed from recipes-devtools/qemu/qemu-zynqmp-mainline/0003-arm-Introduce-Xilinx-Zynq-MPSoC.patch)98
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0004-arm-xlnx-zynqmp-Add-GIC.patch (renamed from recipes-devtools/qemu/qemu-zynqmp-mainline/0004-arm-xlnx-zynq-mp-Add-GIC.patch)55
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0005-arm-xlnx-zynqmp-Connect-CPU-Timers-to-GIC.patch (renamed from recipes-devtools/qemu/qemu-zynqmp-mainline/0005-arm-xlnx-zynq-mp-Connect-CPU-Timers-to-GIC.patch)26
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0006-net-cadence_gem-Clean-up-variable-names.patch13
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch15
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0008-arm-xilinx-zynqmp-Add-GEM-support.patch (renamed from recipes-devtools/qemu/qemu-zynqmp-mainline/0008-arm-xilinx-zynq-mp-Add-GEM-support.patch)64
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0009-char-cadence_uart-Clean-up-variable-names.patch36
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch17
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynq-mp-Add-UART-support.patch90
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynqmp-Add-UART-support.patch91
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xilinx-zynq-mp-generic-machine.patch87
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xlnx-ep108-machine.patch87
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-ep108-Add-external-RAM.patch60
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-zynq-mp-generic-Add-external-RAM.patch43
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-ep108-Add-bootloading.patch42
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-zynq-mp-generic-Add-bootloading.patch41
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynq-mp-Add-PSCI-setup.patch35
-rw-r--r--recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynqmp-Add-PSCI-setup.patch36
-rw-r--r--recipes-devtools/qemu/qemu_zynqmp.bb23
21 files changed, 529 insertions, 475 deletions
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch
index 779e8c42..f759f27b 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch
@@ -1,7 +1,10 @@
1From 17c53bfa9ce6bb75f9ff55722bc02e4050a148c1 Mon Sep 17 00:00:00 2001 1From 56489633015d2ac71d680bdd27accbd6f87b4fe3 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:38 -0800 3Date: Mon, 23 Mar 2015 04:05:11 -0700
4Subject: [PATCH 01/15] target-arm: cpu64: Factor out ARM cortex init 4Subject: [PATCH 01/15] target-arm: cpu64: Factor out ARM cortex init
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
5 8
6In preparation for support for Cortex a53. Use "axx" to describe the 9In preparation for support for Cortex a53. Use "axx" to describe the
7shareable features. Some of the CP15 registers (such as ACTLR) are 10shareable features. Some of the CP15 registers (such as ACTLR) are
@@ -13,13 +16,14 @@ The cache sizes and geometeries, the L1 I-cache policy and the physical
13address range differ between A53 and A57 so those particulars are left 16address range differ between A53 and A57 so those particulars are left
14as A57 specific. The rest are moved to the generalisation. 17as A57 specific. The rest are moved to the generalisation.
15 18
19Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
16Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 20Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
17--- 21---
18 target-arm/cpu64.c | 32 +++++++++++++++++++------------- 22 target-arm/cpu64.c | 34 ++++++++++++++++++++--------------
19 1 file changed, 19 insertions(+), 13 deletions(-) 23 1 file changed, 20 insertions(+), 14 deletions(-)
20 24
21diff --git a/target-arm/cpu64.c b/target-arm/cpu64.c 25diff --git a/target-arm/cpu64.c b/target-arm/cpu64.c
22index 823c739..5cf3121 100644 26index 270bc2f..3eb58c6 100644
23--- a/target-arm/cpu64.c 27--- a/target-arm/cpu64.c
24+++ b/target-arm/cpu64.c 28+++ b/target-arm/cpu64.c
25@@ -38,22 +38,22 @@ static inline void unset_feature(CPUARMState *env, int feature) 29@@ -38,22 +38,22 @@ static inline void unset_feature(CPUARMState *env, int feature)
@@ -49,7 +53,7 @@ index 823c739..5cf3121 100644
49 .writefn = arm_cp_write_ignore }, 53 .writefn = arm_cp_write_ignore },
50 #endif 54 #endif
51 { .name = "L2ECTLR_EL1", .state = ARM_CP_STATE_AA64, 55 { .name = "L2ECTLR_EL1", .state = ARM_CP_STATE_AA64,
52@@ -92,10 +92,8 @@ static const ARMCPRegInfo cortexa57_cp_reginfo[] = { 56@@ -92,11 +92,8 @@ static const ARMCPRegInfo cortexa57_cp_reginfo[] = {
53 REGINFO_SENTINEL 57 REGINFO_SENTINEL
54 }; 58 };
55 59
@@ -58,10 +62,11 @@ index 823c739..5cf3121 100644
58 { 62 {
59- ARMCPU *cpu = ARM_CPU(obj); 63- ARMCPU *cpu = ARM_CPU(obj);
60- 64-
65- cpu->dtb_compatible = "arm,cortex-a57";
61 set_feature(&cpu->env, ARM_FEATURE_V8); 66 set_feature(&cpu->env, ARM_FEATURE_V8);
62 set_feature(&cpu->env, ARM_FEATURE_VFP4); 67 set_feature(&cpu->env, ARM_FEATURE_VFP4);
63 set_feature(&cpu->env, ARM_FEATURE_NEON); 68 set_feature(&cpu->env, ARM_FEATURE_NEON);
64@@ -107,13 +105,10 @@ static void aarch64_a57_initfn(Object *obj) 69@@ -108,13 +105,10 @@ static void aarch64_a57_initfn(Object *obj)
65 set_feature(&cpu->env, ARM_FEATURE_V8_SHA256); 70 set_feature(&cpu->env, ARM_FEATURE_V8_SHA256);
66 set_feature(&cpu->env, ARM_FEATURE_V8_PMULL); 71 set_feature(&cpu->env, ARM_FEATURE_V8_PMULL);
67 set_feature(&cpu->env, ARM_FEATURE_CRC); 72 set_feature(&cpu->env, ARM_FEATURE_CRC);
@@ -75,7 +80,7 @@ index 823c739..5cf3121 100644
75 cpu->reset_sctlr = 0x00c50838; 80 cpu->reset_sctlr = 0x00c50838;
76 cpu->id_pfr0 = 0x00000131; 81 cpu->id_pfr0 = 0x00000131;
77 cpu->id_pfr1 = 0x00011011; 82 cpu->id_pfr1 = 0x00011011;
78@@ -132,14 +127,25 @@ static void aarch64_a57_initfn(Object *obj) 83@@ -133,14 +127,26 @@ static void aarch64_a57_initfn(Object *obj)
79 cpu->id_aa64pfr0 = 0x00002222; 84 cpu->id_aa64pfr0 = 0x00002222;
80 cpu->id_aa64dfr0 = 0x10305106; 85 cpu->id_aa64dfr0 = 0x10305106;
81 cpu->id_aa64isar0 = 0x00011120; 86 cpu->id_aa64isar0 = 0x00011120;
@@ -92,6 +97,7 @@ index 823c739..5cf3121 100644
92+ 97+
93+ aarch64_axx_initfn(cpu); 98+ aarch64_axx_initfn(cpu);
94+ 99+
100+ cpu->dtb_compatible = "arm,cortex-a57";
95+ cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A57; 101+ cpu->kvm_target = QEMU_KVM_ARM_TARGET_CORTEX_A57;
96+ cpu->midr = 0x411fd070; 102+ cpu->midr = 0x411fd070;
97+ cpu->ctr = 0x8444c004; /* L1Ip = PIPT */ 103+ cpu->ctr = 0x8444c004; /* L1Ip = PIPT */
@@ -105,5 +111,5 @@ index 823c739..5cf3121 100644
105 111
106 #ifdef CONFIG_USER_ONLY 112 #ifdef CONFIG_USER_ONLY
107-- 113--
1082.1.1 1141.7.10.4
109 115
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0002-target-arm-cpu64-Add-support-for-cortex-a53.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0002-target-arm-cpu64-Add-support-for-cortex-a53.patch
index 4723bd2b..290f2870 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0002-target-arm-cpu64-Add-support-for-cortex-a53.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0002-target-arm-cpu64-Add-support-for-cortex-a53.patch
@@ -1,23 +1,27 @@
1From 2390e80ace413722b0d41500c1927d78b2a0154b Mon Sep 17 00:00:00 2001 1From a69dfd5611a5671ff6163d3368d3628152251b04 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:39 -0800 3Date: Mon, 23 Mar 2015 04:05:11 -0700
4Subject: [PATCH 02/15] target-arm: cpu64: Add support for cortex-a53 4Subject: [PATCH 02/15] target-arm: cpu64: Add support for cortex-a53
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
5 8
6Similar to a53, but with different L1 I cache policy, phys addr size and 9Similar to a53, but with different L1 I cache policy, phys addr size and
7different cache geometries. The cache sizes is implementation 10different cache geometries. The cache sizes is implementation
8configurable, but use these values (from Xilinx MPSoC) as a default 11configurable, but use these values (from Xilinx MPSoC) as a default
9until cache size configurability is added. 12until cache size configurability is added.
10 13
14Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
11Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 15Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
12--- 16---
13 target-arm/cpu64.c | 15 +++++++++++++++ 17 target-arm/cpu64.c | 16 ++++++++++++++++
14 1 file changed, 15 insertions(+) 18 1 file changed, 16 insertions(+)
15 19
16diff --git a/target-arm/cpu64.c b/target-arm/cpu64.c 20diff --git a/target-arm/cpu64.c b/target-arm/cpu64.c
17index 5cf3121..0b9728e 100644 21index 3eb58c6..728d9a7 100644
18--- a/target-arm/cpu64.c 22--- a/target-arm/cpu64.c
19+++ b/target-arm/cpu64.c 23+++ b/target-arm/cpu64.c
20@@ -148,6 +148,20 @@ static void aarch64_a57_initfn(Object *obj) 24@@ -149,6 +149,21 @@ static void aarch64_a57_initfn(Object *obj)
21 cpu->ccsidr[2] = 0x70ffe07a; /* 2048KB L2 cache */ 25 cpu->ccsidr[2] = 0x70ffe07a; /* 2048KB L2 cache */
22 } 26 }
23 27
@@ -27,6 +31,7 @@ index 5cf3121..0b9728e 100644
27+ 31+
28+ aarch64_axx_initfn(cpu); 32+ aarch64_axx_initfn(cpu);
29+ 33+
34+ cpu->dtb_compatible = "arm,cortex-a53";
30+ cpu->midr = 0x410fd034; 35+ cpu->midr = 0x410fd034;
31+ cpu->ctr = 0x84448004; /* L1Ip = VIPT */ 36+ cpu->ctr = 0x84448004; /* L1Ip = VIPT */
32+ cpu->id_aa64mmfr0 = 0x00001122; /* 40 bit physical addr */ 37+ cpu->id_aa64mmfr0 = 0x00001122; /* 40 bit physical addr */
@@ -38,7 +43,7 @@ index 5cf3121..0b9728e 100644
38 #ifdef CONFIG_USER_ONLY 43 #ifdef CONFIG_USER_ONLY
39 static void aarch64_any_initfn(Object *obj) 44 static void aarch64_any_initfn(Object *obj)
40 { 45 {
41@@ -175,6 +189,7 @@ typedef struct ARMCPUInfo { 46@@ -176,6 +191,7 @@ typedef struct ARMCPUInfo {
42 47
43 static const ARMCPUInfo aarch64_cpus[] = { 48 static const ARMCPUInfo aarch64_cpus[] = {
44 { .name = "cortex-a57", .initfn = aarch64_a57_initfn }, 49 { .name = "cortex-a57", .initfn = aarch64_a57_initfn },
@@ -47,5 +52,5 @@ index 5cf3121..0b9728e 100644
47 { .name = "any", .initfn = aarch64_any_initfn }, 52 { .name = "any", .initfn = aarch64_any_initfn },
48 #endif 53 #endif
49-- 54--
502.1.1 551.7.10.4
51 56
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0003-arm-Introduce-Xilinx-Zynq-MPSoC.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0003-arm-Introduce-Xilinx-ZynqMP-SoC.patch
index fdff7c17..eb5740e0 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0003-arm-Introduce-Xilinx-Zynq-MPSoC.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0003-arm-Introduce-Xilinx-ZynqMP-SoC.patch
@@ -1,22 +1,23 @@
1From 37b74b0626d6403da8d9b946d77d29296bc47bcc Mon Sep 17 00:00:00 2001 1From 7f403cd27dbef216c77faa32d015965dfa5fe34e Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:42 -0800 3Date: Mon, 23 Mar 2015 04:05:13 -0700
4Subject: [PATCH 03/15] arm: Introduce Xilinx Zynq MPSoC 4Subject: [PATCH 03/15] arm: Introduce Xilinx ZynqMP SoC
5 5
6With quad Cortex-A53 CPUs. 6With quad Cortex-A53 CPUs.
7 7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
9--- 10---
10 default-configs/aarch64-softmmu.mak | 2 +- 11 default-configs/aarch64-softmmu.mak | 2 +-
11 hw/arm/Makefile.objs | 1 + 12 hw/arm/Makefile.objs | 1 +
12 hw/arm/xlnx-zynq-mp.c | 71 +++++++++++++++++++++++++++++++++++++ 13 hw/arm/xlnx-zynqmp.c | 72 +++++++++++++++++++++++++++++++++++
13 include/hw/arm/xlnx-zynq-mp.h | 21 +++++++++++ 14 include/hw/arm/xlnx-zynqmp.h | 21 ++++++++++
14 4 files changed, 94 insertions(+), 1 deletion(-) 15 4 files changed, 95 insertions(+), 1 deletion(-)
15 create mode 100644 hw/arm/xlnx-zynq-mp.c 16 create mode 100644 hw/arm/xlnx-zynqmp.c
16 create mode 100644 include/hw/arm/xlnx-zynq-mp.h 17 create mode 100644 include/hw/arm/xlnx-zynqmp.h
17 18
18diff --git a/default-configs/aarch64-softmmu.mak b/default-configs/aarch64-softmmu.mak 19diff --git a/default-configs/aarch64-softmmu.mak b/default-configs/aarch64-softmmu.mak
19index 6d3b5c7..a8011e0 100644 20index 6d3b5c7..96dd994 100644
20--- a/default-configs/aarch64-softmmu.mak 21--- a/default-configs/aarch64-softmmu.mak
21+++ b/default-configs/aarch64-softmmu.mak 22+++ b/default-configs/aarch64-softmmu.mak
22@@ -3,4 +3,4 @@ 23@@ -3,4 +3,4 @@
@@ -24,22 +25,22 @@ index 6d3b5c7..a8011e0 100644
24 include arm-softmmu.mak 25 include arm-softmmu.mak
25 26
26-# Currently no 64-bit specific config requirements 27-# Currently no 64-bit specific config requirements
27+CONFIG_XLNX_ZYNQ_MP=y 28+CONFIG_XLNX_ZYNQMP=y
28diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs 29diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs
29index 6088e53..9bf072b 100644 30index 2577f68..d7cd5f4 100644
30--- a/hw/arm/Makefile.objs 31--- a/hw/arm/Makefile.objs
31+++ b/hw/arm/Makefile.objs 32+++ b/hw/arm/Makefile.objs
32@@ -8,3 +8,4 @@ obj-y += armv7m.o exynos4210.o pxa2xx.o pxa2xx_gpio.o pxa2xx_pic.o 33@@ -10,3 +10,4 @@ obj-$(CONFIG_DIGIC) += digic.o
33 obj-$(CONFIG_DIGIC) += digic.o
34 obj-y += omap1.o omap2.o strongarm.o 34 obj-y += omap1.o omap2.o strongarm.o
35 obj-$(CONFIG_ALLWINNER_A10) += allwinner-a10.o cubieboard.o 35 obj-$(CONFIG_ALLWINNER_A10) += allwinner-a10.o cubieboard.o
36+obj-$(CONFIG_XLNX_ZYNQ_MP) += xlnx-zynq-mp.o 36 obj-$(CONFIG_STM32F205_SOC) += stm32f205_soc.o
37diff --git a/hw/arm/xlnx-zynq-mp.c b/hw/arm/xlnx-zynq-mp.c 37+obj-$(CONFIG_XLNX_ZYNQMP) += xlnx-zynqmp.o
38diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
38new file mode 100644 39new file mode 100644
39index 0000000..d553fb0 40index 0000000..41c207a
40--- /dev/null 41--- /dev/null
41+++ b/hw/arm/xlnx-zynq-mp.c 42+++ b/hw/arm/xlnx-zynqmp.c
42@@ -0,0 +1,71 @@ 43@@ -0,0 +1,72 @@
43+/* 44+/*
44+ * Xilinx Zynq MPSoC emulation 45+ * Xilinx Zynq MPSoC emulation
45+ * 46+ *
@@ -57,17 +58,18 @@ index 0000000..d553fb0
57+ * for more details. 58+ * for more details.
58+ */ 59+ */
59+ 60+
60+#include "hw/arm/xlnx-zynq-mp.h" 61+#include "hw/arm/xlnx-zynqmp.h"
61+ 62+
62+static void xlnx_zynq_mp_init(Object *obj) 63+static void xlnx_zynqmp_init(Object *obj)
63+{ 64+{
64+ XlnxZynqMPState *s = XLNX_ZYNQ_MP(obj); 65+ XlnxZynqMPState *s = XLNX_ZYNQMP(obj);
65+ int i; 66+ int i;
66+ 67+
67+ for (i = 0; i < XLNX_ZYNQ_MP_NUM_CPUS; i++) { 68+ for (i = 0; i < XLNX_ZYNQMP_NUM_CPUS; i++) {
68+ object_initialize(&s->cpu[i], sizeof(s->cpu[i]), 69+ object_initialize(&s->cpu[i], sizeof(s->cpu[i]),
69+ "cortex-a53-" TYPE_ARM_CPU); 70+ "cortex-a53-" TYPE_ARM_CPU);
70+ object_property_add_child(obj, "cpu", OBJECT(&s->cpu[i]), NULL); 71+ object_property_add_child(obj, "cpu[*]", OBJECT(&s->cpu[i]),
72+ &error_abort);
71+ } 73+ }
72+} 74+}
73+ 75+
@@ -78,66 +80,66 @@ index 0000000..d553fb0
78+ } \ 80+ } \
79+} while (0) 81+} while (0)
80+ 82+
81+static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp) 83+static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
82+{ 84+{
83+ XlnxZynqMPState *s = XLNX_ZYNQ_MP(dev); 85+ XlnxZynqMPState *s = XLNX_ZYNQMP(dev);
84+ uint8_t i; 86+ uint8_t i;
85+ Error *err = NULL; 87+ Error *err = NULL;
86+ 88+
87+ for (i = 0; i < XLNX_ZYNQ_MP_NUM_CPUS; i++) { 89+ for (i = 0; i < XLNX_ZYNQMP_NUM_CPUS; i++) {
88+ object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err); 90+ object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err);
89+ ERR_PROP_CHECK_RETURN(err, errp); 91+ ERR_PROP_CHECK_RETURN(err, errp);
90+ } 92+ }
91+} 93+}
92+ 94+
93+static void xlnx_zynq_mp_class_init(ObjectClass *oc, void *data) 95+static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
94+{ 96+{
95+ DeviceClass *dc = DEVICE_CLASS(oc); 97+ DeviceClass *dc = DEVICE_CLASS(oc);
96+ 98+
97+ dc->realize = xlnx_zynq_mp_realize; 99+ dc->realize = xlnx_zynqmp_realize;
98+} 100+}
99+ 101+
100+static const TypeInfo xlnx_zynq_mp_type_info = { 102+static const TypeInfo xlnx_zynqmp_type_info = {
101+ .name = TYPE_XLNX_ZYNQ_MP, 103+ .name = TYPE_XLNX_ZYNQMP,
102+ .parent = TYPE_DEVICE, 104+ .parent = TYPE_DEVICE,
103+ .instance_size = sizeof(XlnxZynqMPState), 105+ .instance_size = sizeof(XlnxZynqMPState),
104+ .instance_init = xlnx_zynq_mp_init, 106+ .instance_init = xlnx_zynqmp_init,
105+ .class_init = xlnx_zynq_mp_class_init, 107+ .class_init = xlnx_zynqmp_class_init,
106+}; 108+};
107+ 109+
108+static void xlnx_zynq_mp_register_types(void) 110+static void xlnx_zynqmp_register_types(void)
109+{ 111+{
110+ type_register_static(&xlnx_zynq_mp_type_info); 112+ type_register_static(&xlnx_zynqmp_type_info);
111+} 113+}
112+ 114+
113+type_init(xlnx_zynq_mp_register_types) 115+type_init(xlnx_zynqmp_register_types)
114diff --git a/include/hw/arm/xlnx-zynq-mp.h b/include/hw/arm/xlnx-zynq-mp.h 116diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
115new file mode 100644 117new file mode 100644
116index 0000000..f7410dc 118index 0000000..d6b3b92
117--- /dev/null 119--- /dev/null
118+++ b/include/hw/arm/xlnx-zynq-mp.h 120+++ b/include/hw/arm/xlnx-zynqmp.h
119@@ -0,0 +1,21 @@ 121@@ -0,0 +1,21 @@
120+#ifndef XLNX_ZYNQ_MP_H_ 122+#ifndef XLNX_ZYNQMP_H_
121+ 123+
122+#include "qemu-common.h" 124+#include "qemu-common.h"
123+#include "hw/arm/arm.h" 125+#include "hw/arm/arm.h"
124+ 126+
125+#define TYPE_XLNX_ZYNQ_MP "xlnx,zynq-mp" 127+#define TYPE_XLNX_ZYNQMP "xlnx,zynqmp"
126+#define XLNX_ZYNQ_MP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \ 128+#define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
127+ TYPE_XLNX_ZYNQ_MP) 129+ TYPE_XLNX_ZYNQMP)
128+ 130+
129+#define XLNX_ZYNQ_MP_NUM_CPUS 4 131+#define XLNX_ZYNQMP_NUM_CPUS 4
130+ 132+
131+typedef struct XlnxZynqMPState { 133+typedef struct XlnxZynqMPState {
132+ /*< private >*/ 134+ /*< private >*/
133+ DeviceState parent_obj; 135+ DeviceState parent_obj;
134+ /*< public >*/ 136+ /*< public >*/
135+ 137+
136+ ARMCPU cpu[XLNX_ZYNQ_MP_NUM_CPUS]; 138+ ARMCPU cpu[XLNX_ZYNQMP_NUM_CPUS];
137+} XlnxZynqMPState; 139+} XlnxZynqMPState;
138+ 140+
139+#define XLNX_ZYNQ_MP_H_ 141+#define XLNX_ZYNQMP_H_
140+#endif 142+#endif
141-- 143--
1422.1.1 1441.7.10.4
143 145
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0004-arm-xlnx-zynq-mp-Add-GIC.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0004-arm-xlnx-zynqmp-Add-GIC.patch
index 518ca702..c9cc17c3 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0004-arm-xlnx-zynq-mp-Add-GIC.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0004-arm-xlnx-zynqmp-Add-GIC.patch
@@ -1,35 +1,36 @@
1From 307b6f846c7cc878f399a34a29a9db48f32e3432 Mon Sep 17 00:00:00 2001 1From c10adfae330dababc9752d02431e8e7b098f3ce2 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:43 -0800 3Date: Mon, 23 Mar 2015 04:05:13 -0700
4Subject: [PATCH 04/15] arm: xlnx-zynq-mp: Add GIC 4Subject: [PATCH 04/15] arm: xlnx-zynqmp: Add GIC
5 5
6And connect IRQ outputs to the CPUs. 6And connect IRQ outputs to the CPUs.
7 7
8Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 9Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9--- 10---
10 hw/arm/xlnx-zynq-mp.c | 19 +++++++++++++++++++ 11 hw/arm/xlnx-zynqmp.c | 19 +++++++++++++++++++
11 include/hw/arm/xlnx-zynq-mp.h | 2 ++ 12 include/hw/arm/xlnx-zynqmp.h | 2 ++
12 2 files changed, 21 insertions(+) 13 2 files changed, 21 insertions(+)
13 14
14diff --git a/hw/arm/xlnx-zynq-mp.c b/hw/arm/xlnx-zynq-mp.c 15diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
15index d553fb0..9cdff13 100644 16index 41c207a..9465185 100644
16--- a/hw/arm/xlnx-zynq-mp.c 17--- a/hw/arm/xlnx-zynqmp.c
17+++ b/hw/arm/xlnx-zynq-mp.c 18+++ b/hw/arm/xlnx-zynqmp.c
18@@ -17,6 +17,11 @@ 19@@ -17,6 +17,11 @@
19 20
20 #include "hw/arm/xlnx-zynq-mp.h" 21 #include "hw/arm/xlnx-zynqmp.h"
21 22
22+#define GIC_NUM_SPI_INTR 128 23+#define GIC_NUM_SPI_INTR 128
23+ 24+
24+#define GIC_DIST_ADDR 0xf9010000 25+#define GIC_DIST_ADDR 0xf9010000
25+#define GIC_CPU_ADDR 0xf9020000 26+#define GIC_CPU_ADDR 0xf9020000
26+ 27+
27 static void xlnx_zynq_mp_init(Object *obj) 28 static void xlnx_zynqmp_init(Object *obj)
28 { 29 {
29 XlnxZynqMPState *s = XLNX_ZYNQ_MP(obj); 30 XlnxZynqMPState *s = XLNX_ZYNQMP(obj);
30@@ -27,6 +32,9 @@ static void xlnx_zynq_mp_init(Object *obj) 31@@ -28,6 +33,9 @@ static void xlnx_zynqmp_init(Object *obj)
31 "cortex-a53-" TYPE_ARM_CPU); 32 object_property_add_child(obj, "cpu[*]", OBJECT(&s->cpu[i]),
32 object_property_add_child(obj, "cpu", OBJECT(&s->cpu[i]), NULL); 33 &error_abort);
33 } 34 }
34+ 35+
35+ object_initialize(&s->gic, sizeof(s->gic), TYPE_ARM_GIC); 36+ object_initialize(&s->gic, sizeof(s->gic), TYPE_ARM_GIC);
@@ -37,19 +38,19 @@ index d553fb0..9cdff13 100644
37 } 38 }
38 39
39 #define ERR_PROP_CHECK_RETURN(err, errp) do { \ 40 #define ERR_PROP_CHECK_RETURN(err, errp) do { \
40@@ -42,9 +50,20 @@ static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp) 41@@ -43,9 +51,20 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
41 uint8_t i; 42 uint8_t i;
42 Error *err = NULL; 43 Error *err = NULL;
43 44
44+ qdev_prop_set_uint32(DEVICE(&s->gic), "num-irq", GIC_NUM_SPI_INTR + 32); 45+ qdev_prop_set_uint32(DEVICE(&s->gic), "num-irq", GIC_NUM_SPI_INTR + 32);
45+ qdev_prop_set_uint32(DEVICE(&s->gic), "revision", 2); 46+ qdev_prop_set_uint32(DEVICE(&s->gic), "revision", 2);
46+ qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", XLNX_ZYNQ_MP_NUM_CPUS); 47+ qdev_prop_set_uint32(DEVICE(&s->gic), "num-cpu", XLNX_ZYNQMP_NUM_CPUS);
47+ object_property_set_bool(OBJECT(&s->gic), true, "realized", &err); 48+ object_property_set_bool(OBJECT(&s->gic), true, "realized", &err);
48+ ERR_PROP_CHECK_RETURN(err, errp); 49+ ERR_PROP_CHECK_RETURN(err, errp);
49+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 0, GIC_DIST_ADDR); 50+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 0, GIC_DIST_ADDR);
50+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, GIC_CPU_ADDR); 51+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, GIC_CPU_ADDR);
51+ 52+
52 for (i = 0; i < XLNX_ZYNQ_MP_NUM_CPUS; i++) { 53 for (i = 0; i < XLNX_ZYNQMP_NUM_CPUS; i++) {
53 object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err); 54 object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err);
54 ERR_PROP_CHECK_RETURN(err, errp); 55 ERR_PROP_CHECK_RETURN(err, errp);
55+ 56+
@@ -58,26 +59,26 @@ index d553fb0..9cdff13 100644
58 } 59 }
59 } 60 }
60 61
61diff --git a/include/hw/arm/xlnx-zynq-mp.h b/include/hw/arm/xlnx-zynq-mp.h 62diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
62index f7410dc..22b2af0 100644 63index d6b3b92..d29c7de 100644
63--- a/include/hw/arm/xlnx-zynq-mp.h 64--- a/include/hw/arm/xlnx-zynqmp.h
64+++ b/include/hw/arm/xlnx-zynq-mp.h 65+++ b/include/hw/arm/xlnx-zynqmp.h
65@@ -2,6 +2,7 @@ 66@@ -2,6 +2,7 @@
66 67
67 #include "qemu-common.h" 68 #include "qemu-common.h"
68 #include "hw/arm/arm.h" 69 #include "hw/arm/arm.h"
69+#include "hw/intc/arm_gic.h" 70+#include "hw/intc/arm_gic.h"
70 71
71 #define TYPE_XLNX_ZYNQ_MP "xlnx,zynq-mp" 72 #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp"
72 #define XLNX_ZYNQ_MP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \ 73 #define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
73@@ -15,6 +16,7 @@ typedef struct XlnxZynqMPState { 74@@ -15,6 +16,7 @@ typedef struct XlnxZynqMPState {
74 /*< public >*/ 75 /*< public >*/
75 76
76 ARMCPU cpu[XLNX_ZYNQ_MP_NUM_CPUS]; 77 ARMCPU cpu[XLNX_ZYNQMP_NUM_CPUS];
77+ GICState gic; 78+ GICState gic;
78 } XlnxZynqMPState; 79 } XlnxZynqMPState;
79 80
80 #define XLNX_ZYNQ_MP_H_ 81 #define XLNX_ZYNQMP_H_
81-- 82--
822.1.1 831.7.10.4
83 84
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0005-arm-xlnx-zynq-mp-Connect-CPU-Timers-to-GIC.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0005-arm-xlnx-zynqmp-Connect-CPU-Timers-to-GIC.patch
index 207dbc93..487d722c 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0005-arm-xlnx-zynq-mp-Connect-CPU-Timers-to-GIC.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0005-arm-xlnx-zynqmp-Connect-CPU-Timers-to-GIC.patch
@@ -1,20 +1,20 @@
1From c2c5018da201c9eead0dba39263eb40549064511 Mon Sep 17 00:00:00 2001 1From 6eb0b99419e4f20cef0c0af2847e1635b2dbc04e Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:44 -0800 3Date: Mon, 23 Mar 2015 04:05:14 -0700
4Subject: [PATCH 05/15] arm: xlnx-zynq-mp: Connect CPU Timers to GIC 4Subject: [PATCH 05/15] arm: xlnx-zynqmp: Connect CPU Timers to GIC
5 5
6Connect the GPIO outputs from the individual CPUs for the timers to the 6Connect the GPIO outputs from the individual CPUs for the timers to the
7GIC. 7GIC.
8 8
9Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 9Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
10--- 10---
11 hw/arm/xlnx-zynq-mp.c | 16 ++++++++++++++++ 11 hw/arm/xlnx-zynqmp.c | 16 ++++++++++++++++
12 1 file changed, 16 insertions(+) 12 1 file changed, 16 insertions(+)
13 13
14diff --git a/hw/arm/xlnx-zynq-mp.c b/hw/arm/xlnx-zynq-mp.c 14diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
15index 9cdff13..be82a66 100644 15index 9465185..29954f5 100644
16--- a/hw/arm/xlnx-zynq-mp.c 16--- a/hw/arm/xlnx-zynqmp.c
17+++ b/hw/arm/xlnx-zynq-mp.c 17+++ b/hw/arm/xlnx-zynqmp.c
18@@ -19,9 +19,17 @@ 18@@ -19,9 +19,17 @@
19 19
20 #define GIC_NUM_SPI_INTR 128 20 #define GIC_NUM_SPI_INTR 128
@@ -30,13 +30,13 @@ index 9cdff13..be82a66 100644
30+ return GIC_NUM_SPI_INTR + cpu_nr * 32 + ppi_index; 30+ return GIC_NUM_SPI_INTR + cpu_nr * 32 + ppi_index;
31+} 31+}
32+ 32+
33 static void xlnx_zynq_mp_init(Object *obj) 33 static void xlnx_zynqmp_init(Object *obj)
34 { 34 {
35 XlnxZynqMPState *s = XLNX_ZYNQ_MP(obj); 35 XlnxZynqMPState *s = XLNX_ZYNQMP(obj);
36@@ -59,11 +67,19 @@ static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp) 36@@ -60,11 +68,19 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
37 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, GIC_CPU_ADDR); 37 sysbus_mmio_map(SYS_BUS_DEVICE(&s->gic), 1, GIC_CPU_ADDR);
38 38
39 for (i = 0; i < XLNX_ZYNQ_MP_NUM_CPUS; i++) { 39 for (i = 0; i < XLNX_ZYNQMP_NUM_CPUS; i++) {
40+ qemu_irq irq; 40+ qemu_irq irq;
41+ 41+
42 object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err); 42 object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err);
@@ -54,5 +54,5 @@ index 9cdff13..be82a66 100644
54 } 54 }
55 55
56-- 56--
572.1.1 571.7.10.4
58 58
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0006-net-cadence_gem-Clean-up-variable-names.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0006-net-cadence_gem-Clean-up-variable-names.patch
index c5bf07ef..53453ca9 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0006-net-cadence_gem-Clean-up-variable-names.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0006-net-cadence_gem-Clean-up-variable-names.patch
@@ -1,7 +1,10 @@
1From 67513395caa586a2f6bc79e3791e26a129e6ec1c Mon Sep 17 00:00:00 2001 1From 7c37c0a33c598fe0dcb015aa4d48712e33e21a8b Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:45 -0800 3Date: Mon, 23 Mar 2015 04:05:14 -0700
4Subject: [PATCH 06/15] net: cadence_gem: Clean up variable names 4Subject: [PATCH 06/15] net: cadence_gem: Clean up variable names
5MIME-Version: 1.0
6Content-Type: text/plain; charset=UTF-8
7Content-Transfer-Encoding: 8bit
5 8
6In preparation for migrating the state struct and type cast macro to a public 9In preparation for migrating the state struct and type cast macro to a public
7header. The acronym "GEM" on it's own is not specific enough to be used in a 10header. The acronym "GEM" on it's own is not specific enough to be used in a
@@ -9,9 +12,11 @@ more global namespace so preface with "cadence". Fix the capitalisation of
9"gem" in the state type while touching the typename. Also preface the 12"gem" in the state type while touching the typename. Also preface the
10GEM_MAXREG macro as this will need to migrate to public header. 13GEM_MAXREG macro as this will need to migrate to public header.
11 14
15Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
16Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
12Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 17Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
13--- 18---
14 hw/net/cadence_gem.c | 70 ++++++++++++++++++++++++++-------------------------- 19 hw/net/cadence_gem.c | 70 +++++++++++++++++++++++++-------------------------
15 1 file changed, 35 insertions(+), 35 deletions(-) 20 1 file changed, 35 insertions(+), 35 deletions(-)
16 21
17diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c 22diff --git a/hw/net/cadence_gem.c b/hw/net/cadence_gem.c
@@ -260,5 +265,5 @@ index 55b6293..5994306 100644
260 }; 265 };
261 266
262-- 267--
2632.1.1 2681.7.10.4
264 269
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch
index be4b30cf..e468563b 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch
@@ -1,16 +1,17 @@
1From 3acfa69c02afc5c8f84c4e5b528a18959ddd8c1b Mon Sep 17 00:00:00 2001 1From 9f9cd8a67975d0973bf5d0dd0bdf6e0bff168774 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:46 -0800 3Date: Mon, 23 Mar 2015 04:05:15 -0700
4Subject: [PATCH 07/15] net: cadence_gem: Split state struct and type into 4Subject: [PATCH 07/15] net: cadence_gem: Split state struct and type into
5 header 5 header
6 6
7To allow using the device with modern SoC programming conventions. The 7To allow using the device with modern SoC programming conventions. The
8state struct needs to be visible to embed the device in SoC containers. 8state struct needs to be visible to embed the device in SoC containers.
9 9
10Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
10Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 11Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
11--- 12---
12 hw/net/cadence_gem.c | 43 +------------------------------------- 13 hw/net/cadence_gem.c | 43 +-----------------------------------
13 include/hw/net/cadence_gem.h | 49 ++++++++++++++++++++++++++++++++++++++++++++ 14 include/hw/net/cadence_gem.h | 49 ++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 50 insertions(+), 42 deletions(-) 15 2 files changed, 50 insertions(+), 42 deletions(-)
15 create mode 100644 include/hw/net/cadence_gem.h 16 create mode 100644 include/hw/net/cadence_gem.h
16 17
@@ -84,7 +85,7 @@ index 5994306..dafe914 100644
84 85
85diff --git a/include/hw/net/cadence_gem.h b/include/hw/net/cadence_gem.h 86diff --git a/include/hw/net/cadence_gem.h b/include/hw/net/cadence_gem.h
86new file mode 100644 87new file mode 100644
87index 0000000..e6413ff 88index 0000000..12de820
88--- /dev/null 89--- /dev/null
89+++ b/include/hw/net/cadence_gem.h 90+++ b/include/hw/net/cadence_gem.h
90@@ -0,0 +1,49 @@ 91@@ -0,0 +1,49 @@
@@ -101,8 +102,8 @@ index 0000000..e6413ff
101+typedef struct CadenceGEMState { 102+typedef struct CadenceGEMState {
102+ /*< private >*/ 103+ /*< private >*/
103+ SysBusDevice parent_obj; 104+ SysBusDevice parent_obj;
104+ /*< public >*/
105+ 105+
106+ /*< public >*/
106+ MemoryRegion iomem; 107+ MemoryRegion iomem;
107+ NICState *nic; 108+ NICState *nic;
108+ NICConf conf; 109+ NICConf conf;
@@ -138,5 +139,5 @@ index 0000000..e6413ff
138+#define CADENCE_GEM_H_ 139+#define CADENCE_GEM_H_
139+#endif 140+#endif
140-- 141--
1412.1.1 1421.7.10.4
142 143
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0008-arm-xilinx-zynq-mp-Add-GEM-support.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0008-arm-xilinx-zynqmp-Add-GEM-support.patch
index 0cb42127..9441f609 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0008-arm-xilinx-zynq-mp-Add-GEM-support.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0008-arm-xilinx-zynqmp-Add-GEM-support.patch
@@ -1,56 +1,56 @@
1From eed690e857579901b4571a250af0259e5051692f Mon Sep 17 00:00:00 2001 1From 5f3d79a3b5ede9d2da63dded227f7cdf44e7d476 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:48 -0800 3Date: Wed, 18 Feb 2015 18:56:37 -0800
4Subject: [PATCH 08/15] arm: xilinx-zynq-mp: Add GEM support 4Subject: [PATCH 08/15] arm: xilinx-zynqmp: Add GEM support
5 5
6There are 4x Cadence GEMs in Zynq MP. Add them. 6There are 4x Cadence GEMs in ZynqMP. Add them.
7 7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9--- 9---
10 hw/arm/xlnx-zynq-mp.c | 32 ++++++++++++++++++++++++++++++++ 10 hw/arm/xlnx-zynqmp.c | 32 ++++++++++++++++++++++++++++++++
11 include/hw/arm/xlnx-zynq-mp.h | 3 +++ 11 include/hw/arm/xlnx-zynqmp.h | 3 +++
12 2 files changed, 35 insertions(+) 12 2 files changed, 35 insertions(+)
13 13
14diff --git a/hw/arm/xlnx-zynq-mp.c b/hw/arm/xlnx-zynq-mp.c 14diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
15index be82a66..2ef57d9 100644 15index 29954f5..d8c648d 100644
16--- a/hw/arm/xlnx-zynq-mp.c 16--- a/hw/arm/xlnx-zynqmp.c
17+++ b/hw/arm/xlnx-zynq-mp.c 17+++ b/hw/arm/xlnx-zynqmp.c
18@@ -25,6 +25,14 @@ 18@@ -25,6 +25,14 @@
19 #define GIC_DIST_ADDR 0xf9010000 19 #define GIC_DIST_ADDR 0xf9010000
20 #define GIC_CPU_ADDR 0xf9020000 20 #define GIC_CPU_ADDR 0xf9020000
21 21
22+static const uint64_t gem_addr[XLNX_ZYNQ_MP_NUM_GEMS] = { 22+static const uint64_t gem_addr[XLNX_ZYNQMP_NUM_GEMS] = {
23+ 0xFF0B0000, 0xFF0C0000, 0xFF0D0000, 0xFF0E0000, 23+ 0xFF0B0000, 0xFF0C0000, 0xFF0D0000, 0xFF0E0000,
24+}; 24+};
25+ 25+
26+static const int gem_intr[XLNX_ZYNQ_MP_NUM_GEMS] = { 26+static const int gem_intr[XLNX_ZYNQMP_NUM_GEMS] = {
27+ 57, 59, 61, 63, 27+ 57, 59, 61, 63,
28+}; 28+};
29+ 29+
30 static inline int arm_gic_ppi_index(int cpu_nr, int ppi_index) 30 static inline int arm_gic_ppi_index(int cpu_nr, int ppi_index)
31 { 31 {
32 return GIC_NUM_SPI_INTR + cpu_nr * 32 + ppi_index; 32 return GIC_NUM_SPI_INTR + cpu_nr * 32 + ppi_index;
33@@ -43,6 +51,11 @@ static void xlnx_zynq_mp_init(Object *obj) 33@@ -44,6 +52,11 @@ static void xlnx_zynqmp_init(Object *obj)
34 34
35 object_initialize(&s->gic, sizeof(s->gic), TYPE_ARM_GIC); 35 object_initialize(&s->gic, sizeof(s->gic), TYPE_ARM_GIC);
36 qdev_set_parent_bus(DEVICE(&s->gic), sysbus_get_default()); 36 qdev_set_parent_bus(DEVICE(&s->gic), sysbus_get_default());
37+ 37+
38+ for (i = 0; i < XLNX_ZYNQ_MP_NUM_GEMS; i++) { 38+ for (i = 0; i < XLNX_ZYNQMP_NUM_GEMS; i++) {
39+ object_initialize(&s->gem[i], sizeof(s->gem[i]), TYPE_CADENCE_GEM); 39+ object_initialize(&s->gem[i], sizeof(s->gem[i]), TYPE_CADENCE_GEM);
40+ qdev_set_parent_bus(DEVICE(&s->gem[i]), sysbus_get_default()); 40+ qdev_set_parent_bus(DEVICE(&s->gem[i]), sysbus_get_default());
41+ } 41+ }
42 } 42 }
43 43
44 #define ERR_PROP_CHECK_RETURN(err, errp) do { \ 44 #define ERR_PROP_CHECK_RETURN(err, errp) do { \
45@@ -56,6 +69,7 @@ static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp) 45@@ -57,6 +70,7 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
46 { 46 {
47 XlnxZynqMPState *s = XLNX_ZYNQ_MP(dev); 47 XlnxZynqMPState *s = XLNX_ZYNQMP(dev);
48 uint8_t i; 48 uint8_t i;
49+ qemu_irq gic_spi[GIC_NUM_SPI_INTR]; 49+ qemu_irq gic_spi[GIC_NUM_SPI_INTR];
50 Error *err = NULL; 50 Error *err = NULL;
51 51
52 qdev_prop_set_uint32(DEVICE(&s->gic), "num-irq", GIC_NUM_SPI_INTR + 32); 52 qdev_prop_set_uint32(DEVICE(&s->gic), "num-irq", GIC_NUM_SPI_INTR + 32);
53@@ -81,6 +95,24 @@ static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp) 53@@ -82,6 +96,24 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
54 arm_gic_ppi_index(i, ARM_VIRT_TIMER_PPI)); 54 arm_gic_ppi_index(i, ARM_VIRT_TIMER_PPI));
55 qdev_connect_gpio_out(DEVICE(&s->cpu[i]), 1, irq); 55 qdev_connect_gpio_out(DEVICE(&s->cpu[i]), 1, irq);
56 } 56 }
@@ -59,7 +59,7 @@ index be82a66..2ef57d9 100644
59+ gic_spi[i] = qdev_get_gpio_in(DEVICE(&s->gic), i); 59+ gic_spi[i] = qdev_get_gpio_in(DEVICE(&s->gic), i);
60+ } 60+ }
61+ 61+
62+ for (i = 0; i < XLNX_ZYNQ_MP_NUM_GEMS; i++) { 62+ for (i = 0; i < XLNX_ZYNQMP_NUM_GEMS; i++) {
63+ NICInfo *nd = &nd_table[i]; 63+ NICInfo *nd = &nd_table[i];
64+ 64+
65+ if (nd->used) { 65+ if (nd->used) {
@@ -74,34 +74,34 @@ index be82a66..2ef57d9 100644
74+ } 74+ }
75 } 75 }
76 76
77 static void xlnx_zynq_mp_class_init(ObjectClass *oc, void *data) 77 static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
78diff --git a/include/hw/arm/xlnx-zynq-mp.h b/include/hw/arm/xlnx-zynq-mp.h 78diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
79index 22b2af0..470503c 100644 79index d29c7de..12a1be1 100644
80--- a/include/hw/arm/xlnx-zynq-mp.h 80--- a/include/hw/arm/xlnx-zynqmp.h
81+++ b/include/hw/arm/xlnx-zynq-mp.h 81+++ b/include/hw/arm/xlnx-zynqmp.h
82@@ -3,12 +3,14 @@ 82@@ -3,12 +3,14 @@
83 #include "qemu-common.h" 83 #include "qemu-common.h"
84 #include "hw/arm/arm.h" 84 #include "hw/arm/arm.h"
85 #include "hw/intc/arm_gic.h" 85 #include "hw/intc/arm_gic.h"
86+#include "hw/net/cadence_gem.h" 86+#include "hw/net/cadence_gem.h"
87 87
88 #define TYPE_XLNX_ZYNQ_MP "xlnx,zynq-mp" 88 #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp"
89 #define XLNX_ZYNQ_MP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \ 89 #define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
90 TYPE_XLNX_ZYNQ_MP) 90 TYPE_XLNX_ZYNQMP)
91 91
92 #define XLNX_ZYNQ_MP_NUM_CPUS 4 92 #define XLNX_ZYNQMP_NUM_CPUS 4
93+#define XLNX_ZYNQ_MP_NUM_GEMS 4 93+#define XLNX_ZYNQMP_NUM_GEMS 4
94 94
95 typedef struct XlnxZynqMPState { 95 typedef struct XlnxZynqMPState {
96 /*< private >*/ 96 /*< private >*/
97@@ -17,6 +19,7 @@ typedef struct XlnxZynqMPState { 97@@ -17,6 +19,7 @@ typedef struct XlnxZynqMPState {
98 98
99 ARMCPU cpu[XLNX_ZYNQ_MP_NUM_CPUS]; 99 ARMCPU cpu[XLNX_ZYNQMP_NUM_CPUS];
100 GICState gic; 100 GICState gic;
101+ CadenceGEMState gem[XLNX_ZYNQ_MP_NUM_GEMS]; 101+ CadenceGEMState gem[XLNX_ZYNQMP_NUM_GEMS];
102 } XlnxZynqMPState; 102 } XlnxZynqMPState;
103 103
104 #define XLNX_ZYNQ_MP_H_ 104 #define XLNX_ZYNQMP_H_
105-- 105--
1062.1.1 1061.7.10.4
107 107
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0009-char-cadence_uart-Clean-up-variable-names.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0009-char-cadence_uart-Clean-up-variable-names.patch
index b864f470..d94b23ad 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0009-char-cadence_uart-Clean-up-variable-names.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0009-char-cadence_uart-Clean-up-variable-names.patch
@@ -1,6 +1,6 @@
1From 246128b68939e7cede11cf60cffbbc194e7643ed Mon Sep 17 00:00:00 2001 1From 7f5e56c8f0a8393b9cb930883059d873802338c6 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:49 -0800 3Date: Mon, 23 Mar 2015 04:05:16 -0700
4Subject: [PATCH 09/15] char: cadence_uart: Clean up variable names 4Subject: [PATCH 09/15] char: cadence_uart: Clean up variable names
5 5
6In preparation for migrating the state struct and type cast macro to a public 6In preparation for migrating the state struct and type cast macro to a public
@@ -10,13 +10,14 @@ more global namespace so preface with "cadence". Fix the capitalisation of
10used by the state struct itself with CADENCE_UART so they don't conflict 10used by the state struct itself with CADENCE_UART so they don't conflict
11in namespace either. 11in namespace either.
12 12
13Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
13Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 14Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
14--- 15---
15 hw/char/cadence_uart.c | 100 ++++++++++++++++++++++++++----------------------- 16 hw/char/cadence_uart.c | 102 +++++++++++++++++++++++++-----------------------
16 1 file changed, 53 insertions(+), 47 deletions(-) 17 1 file changed, 54 insertions(+), 48 deletions(-)
17 18
18diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c 19diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
19index 7044b35..23f548d 100644 20index d145378..4a4d3eb 100644
20--- a/hw/char/cadence_uart.c 21--- a/hw/char/cadence_uart.c
21+++ b/hw/char/cadence_uart.c 22+++ b/hw/char/cadence_uart.c
22@@ -85,8 +85,8 @@ 23@@ -85,8 +85,8 @@
@@ -271,14 +272,23 @@ index 7044b35..23f548d 100644
271 s->r[R_IMR] = 0; 272 s->r[R_IMR] = 0;
272@@ -478,7 +482,7 @@ static void cadence_uart_reset(DeviceState *dev) 273@@ -478,7 +482,7 @@ static void cadence_uart_reset(DeviceState *dev)
273 274
274 static int cadence_uart_init(SysBusDevice *dev) 275 static void cadence_uart_realize(DeviceState *dev, Error **errp)
275 { 276 {
276- UartState *s = CADENCE_UART(dev); 277- UartState *s = CADENCE_UART(dev);
277+ CadenceUARTState *s = CADENCE_UART(dev); 278+ CadenceUARTState *s = CADENCE_UART(dev);
278 279
279 memory_region_init_io(&s->iomem, OBJECT(s), &uart_ops, s, "uart", 0x1000); 280 s->fifo_trigger_handle = timer_new_ns(QEMU_CLOCK_VIRTUAL,
280 sysbus_init_mmio(dev, &s->iomem); 281 fifo_trigger_update, s);
281@@ -501,7 +505,7 @@ static int cadence_uart_init(SysBusDevice *dev) 282@@ -495,7 +499,7 @@ static void cadence_uart_realize(DeviceState *dev, Error **errp)
283 static void cadence_uart_init(Object *obj)
284 {
285 SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
286- UartState *s = CADENCE_UART(obj);
287+ CadenceUARTState *s = CADENCE_UART(obj);
288
289 memory_region_init_io(&s->iomem, obj, &uart_ops, s, "uart", 0x1000);
290 sysbus_init_mmio(sbd, &s->iomem);
291@@ -506,7 +510,7 @@ static void cadence_uart_init(Object *obj)
282 292
283 static int cadence_uart_post_load(void *opaque, int version_id) 293 static int cadence_uart_post_load(void *opaque, int version_id)
284 { 294 {
@@ -287,7 +297,7 @@ index 7044b35..23f548d 100644
287 297
288 uart_parameters_setup(s); 298 uart_parameters_setup(s);
289 uart_update_status(s); 299 uart_update_status(s);
290@@ -514,13 +518,15 @@ static const VMStateDescription vmstate_cadence_uart = { 300@@ -519,13 +523,15 @@ static const VMStateDescription vmstate_cadence_uart = {
291 .minimum_version_id = 2, 301 .minimum_version_id = 2,
292 .post_load = cadence_uart_post_load, 302 .post_load = cadence_uart_post_load,
293 .fields = (VMStateField[]) { 303 .fields = (VMStateField[]) {
@@ -310,15 +320,15 @@ index 7044b35..23f548d 100644
310 VMSTATE_END_OF_LIST() 320 VMSTATE_END_OF_LIST()
311 } 321 }
312 }; 322 };
313@@ -538,7 +544,7 @@ static void cadence_uart_class_init(ObjectClass *klass, void *data) 323@@ -544,7 +550,7 @@ static void cadence_uart_class_init(ObjectClass *klass, void *data)
314 static const TypeInfo cadence_uart_info = { 324 static const TypeInfo cadence_uart_info = {
315 .name = TYPE_CADENCE_UART, 325 .name = TYPE_CADENCE_UART,
316 .parent = TYPE_SYS_BUS_DEVICE, 326 .parent = TYPE_SYS_BUS_DEVICE,
317- .instance_size = sizeof(UartState), 327- .instance_size = sizeof(UartState),
318+ .instance_size = sizeof(CadenceUARTState), 328+ .instance_size = sizeof(CadenceUARTState),
329 .instance_init = cadence_uart_init,
319 .class_init = cadence_uart_class_init, 330 .class_init = cadence_uart_class_init,
320 }; 331 };
321
322-- 332--
3232.1.1 3331.7.10.4
324 334
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch
index 6fe3f98a..e56aed88 100644
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch
@@ -1,21 +1,22 @@
1From 33e66004378aa203562e5b051282c1a7ffb8ee3b Mon Sep 17 00:00:00 2001 1From f50fc4d6e1ee32e47f0f9cd6b8b98aa754ced588 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:50 -0800 3Date: Mon, 23 Mar 2015 04:05:16 -0700
4Subject: [PATCH 10/15] char: cadence_uart: Split state struct and type into 4Subject: [PATCH 10/15] char: cadence_uart: Split state struct and type into
5 header 5 header
6 6
7To allow using the device with modern SoC programming conventions. The 7To allow using the device with modern SoC programming conventions. The
8state struct needs to be visible to embed the device in SoC containers. 8state struct needs to be visible to embed the device in SoC containers.
9 9
10Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
10Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com> 11Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
11--- 12---
12 hw/char/cadence_uart.c | 29 +---------------------------- 13 hw/char/cadence_uart.c | 29 +----------------------------
13 include/hw/char/cadence_uart.h | 35 +++++++++++++++++++++++++++++++++++ 14 include/hw/char/cadence_uart.h | 35 +++++++++++++++++++++++++++++++++++
14 2 files changed, 36 insertions(+), 28 deletions(-) 15 2 files changed, 36 insertions(+), 28 deletions(-)
15 create mode 100644 include/hw/char/cadence_uart.h 16 create mode 100644 include/hw/char/cadence_uart.h
16 17
17diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c 18diff --git a/hw/char/cadence_uart.c b/hw/char/cadence_uart.c
18index 23f548d..4509e01 100644 19index 4a4d3eb..9d379e5 100644
19--- a/hw/char/cadence_uart.c 20--- a/hw/char/cadence_uart.c
20+++ b/hw/char/cadence_uart.c 21+++ b/hw/char/cadence_uart.c
21@@ -16,9 +16,7 @@ 22@@ -16,9 +16,7 @@
@@ -70,7 +71,7 @@ index 23f548d..4509e01 100644
70 { 71 {
71diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h 72diff --git a/include/hw/char/cadence_uart.h b/include/hw/char/cadence_uart.h
72new file mode 100644 73new file mode 100644
73index 0000000..0404785 74index 0000000..3456d4c
74--- /dev/null 75--- /dev/null
75+++ b/include/hw/char/cadence_uart.h 76+++ b/include/hw/char/cadence_uart.h
76@@ -0,0 +1,35 @@ 77@@ -0,0 +1,35 @@
@@ -92,8 +93,8 @@ index 0000000..0404785
92+typedef struct { 93+typedef struct {
93+ /*< private >*/ 94+ /*< private >*/
94+ SysBusDevice parent_obj; 95+ SysBusDevice parent_obj;
95+ /*< public >*/
96+ 96+
97+ /*< public >*/
97+ MemoryRegion iomem; 98+ MemoryRegion iomem;
98+ uint32_t r[CADENCE_UART_R_MAX]; 99+ uint32_t r[CADENCE_UART_R_MAX];
99+ uint8_t rx_fifo[CADENCE_UART_RX_FIFO_SIZE]; 100+ uint8_t rx_fifo[CADENCE_UART_RX_FIFO_SIZE];
@@ -110,5 +111,5 @@ index 0000000..0404785
110+#define CADENCE_UART_H_ 111+#define CADENCE_UART_H_
111+#endif 112+#endif
112-- 113--
1132.1.1 1141.7.10.4
114 115
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynq-mp-Add-UART-support.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynq-mp-Add-UART-support.patch
deleted file mode 100644
index 166aa129..00000000
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynq-mp-Add-UART-support.patch
+++ /dev/null
@@ -1,90 +0,0 @@
1From ef634b1cf1766a5798868d1299a9a4ae2e87bcc9 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:51 -0800
4Subject: [PATCH 11/15] arm: xilinx-zynq-mp: Add UART support
5
6There are 2x Cadence UARTSs in Zynq MP. Add them.
7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9---
10 hw/arm/xlnx-zynq-mp.c | 21 +++++++++++++++++++++
11 include/hw/arm/xlnx-zynq-mp.h | 3 +++
12 2 files changed, 24 insertions(+)
13
14diff --git a/hw/arm/xlnx-zynq-mp.c b/hw/arm/xlnx-zynq-mp.c
15index 2ef57d9..9d7e834 100644
16--- a/hw/arm/xlnx-zynq-mp.c
17+++ b/hw/arm/xlnx-zynq-mp.c
18@@ -33,6 +33,14 @@ static const int gem_intr[XLNX_ZYNQ_MP_NUM_GEMS] = {
19 57, 59, 61, 63,
20 };
21
22+static const uint64_t uart_addr[XLNX_ZYNQ_MP_NUM_UARTS] = {
23+ 0xFF000000, 0xFF010000,
24+};
25+
26+static const int uart_intr[XLNX_ZYNQ_MP_NUM_UARTS] = {
27+ 21, 22,
28+};
29+
30 static inline int arm_gic_ppi_index(int cpu_nr, int ppi_index)
31 {
32 return GIC_NUM_SPI_INTR + cpu_nr * 32 + ppi_index;
33@@ -56,6 +64,11 @@ static void xlnx_zynq_mp_init(Object *obj)
34 object_initialize(&s->gem[i], sizeof(s->gem[i]), TYPE_CADENCE_GEM);
35 qdev_set_parent_bus(DEVICE(&s->gem[i]), sysbus_get_default());
36 }
37+
38+ for (i = 0; i < XLNX_ZYNQ_MP_NUM_UARTS; i++) {
39+ object_initialize(&s->uart[i], sizeof(s->uart[i]), TYPE_CADENCE_UART);
40+ qdev_set_parent_bus(DEVICE(&s->uart[i]), sysbus_get_default());
41+ }
42 }
43
44 #define ERR_PROP_CHECK_RETURN(err, errp) do { \
45@@ -113,6 +126,14 @@ static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp)
46 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gem[i]), 0,
47 gic_spi[gem_intr[i]]);
48 }
49+
50+ for (i = 0; i < XLNX_ZYNQ_MP_NUM_UARTS; i++) {
51+ object_property_set_bool(OBJECT(&s->uart[i]), true, "realized", &err);
52+ ERR_PROP_CHECK_RETURN(err, errp);
53+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->uart[i]), 0, uart_addr[i]);
54+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
55+ gic_spi[uart_intr[i]]);
56+ }
57 }
58
59 static void xlnx_zynq_mp_class_init(ObjectClass *oc, void *data)
60diff --git a/include/hw/arm/xlnx-zynq-mp.h b/include/hw/arm/xlnx-zynq-mp.h
61index 470503c..c4ee658 100644
62--- a/include/hw/arm/xlnx-zynq-mp.h
63+++ b/include/hw/arm/xlnx-zynq-mp.h
64@@ -4,6 +4,7 @@
65 #include "hw/arm/arm.h"
66 #include "hw/intc/arm_gic.h"
67 #include "hw/net/cadence_gem.h"
68+#include "hw/char/cadence_uart.h"
69
70 #define TYPE_XLNX_ZYNQ_MP "xlnx,zynq-mp"
71 #define XLNX_ZYNQ_MP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
72@@ -11,6 +12,7 @@
73
74 #define XLNX_ZYNQ_MP_NUM_CPUS 4
75 #define XLNX_ZYNQ_MP_NUM_GEMS 4
76+#define XLNX_ZYNQ_MP_NUM_UARTS 2
77
78 typedef struct XlnxZynqMPState {
79 /*< private >*/
80@@ -20,6 +22,7 @@ typedef struct XlnxZynqMPState {
81 ARMCPU cpu[XLNX_ZYNQ_MP_NUM_CPUS];
82 GICState gic;
83 CadenceGEMState gem[XLNX_ZYNQ_MP_NUM_GEMS];
84+ CadenceUARTState uart[XLNX_ZYNQ_MP_NUM_UARTS];
85 } XlnxZynqMPState;
86
87 #define XLNX_ZYNQ_MP_H_
88--
892.1.1
90
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynqmp-Add-UART-support.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynqmp-Add-UART-support.patch
new file mode 100644
index 00000000..ccf86cf7
--- /dev/null
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0011-arm-xilinx-zynqmp-Add-UART-support.patch
@@ -0,0 +1,91 @@
1From d35149eea398ca20d0c1ec382e9fce5e2c229ce0 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Wed, 18 Feb 2015 18:56:37 -0800
4Subject: [PATCH 11/15] arm: xilinx-zynqmp: Add UART support
5
6There are 2x Cadence UARTs in Zynq MP. Add them.
7
8Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
9Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
10---
11 hw/arm/xlnx-zynqmp.c | 21 +++++++++++++++++++++
12 include/hw/arm/xlnx-zynqmp.h | 3 +++
13 2 files changed, 24 insertions(+)
14
15diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
16index d8c648d..e015025 100644
17--- a/hw/arm/xlnx-zynqmp.c
18+++ b/hw/arm/xlnx-zynqmp.c
19@@ -33,6 +33,14 @@ static const int gem_intr[XLNX_ZYNQMP_NUM_GEMS] = {
20 57, 59, 61, 63,
21 };
22
23+static const uint64_t uart_addr[XLNX_ZYNQMP_NUM_UARTS] = {
24+ 0xFF000000, 0xFF010000,
25+};
26+
27+static const int uart_intr[XLNX_ZYNQMP_NUM_UARTS] = {
28+ 21, 22,
29+};
30+
31 static inline int arm_gic_ppi_index(int cpu_nr, int ppi_index)
32 {
33 return GIC_NUM_SPI_INTR + cpu_nr * 32 + ppi_index;
34@@ -57,6 +65,11 @@ static void xlnx_zynqmp_init(Object *obj)
35 object_initialize(&s->gem[i], sizeof(s->gem[i]), TYPE_CADENCE_GEM);
36 qdev_set_parent_bus(DEVICE(&s->gem[i]), sysbus_get_default());
37 }
38+
39+ for (i = 0; i < XLNX_ZYNQMP_NUM_UARTS; i++) {
40+ object_initialize(&s->uart[i], sizeof(s->uart[i]), TYPE_CADENCE_UART);
41+ qdev_set_parent_bus(DEVICE(&s->uart[i]), sysbus_get_default());
42+ }
43 }
44
45 #define ERR_PROP_CHECK_RETURN(err, errp) do { \
46@@ -114,6 +127,14 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
47 sysbus_connect_irq(SYS_BUS_DEVICE(&s->gem[i]), 0,
48 gic_spi[gem_intr[i]]);
49 }
50+
51+ for (i = 0; i < XLNX_ZYNQMP_NUM_UARTS; i++) {
52+ object_property_set_bool(OBJECT(&s->uart[i]), true, "realized", &err);
53+ ERR_PROP_CHECK_RETURN(err, errp);
54+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->uart[i]), 0, uart_addr[i]);
55+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->uart[i]), 0,
56+ gic_spi[uart_intr[i]]);
57+ }
58 }
59
60 static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
61diff --git a/include/hw/arm/xlnx-zynqmp.h b/include/hw/arm/xlnx-zynqmp.h
62index 12a1be1..62d8d3f 100644
63--- a/include/hw/arm/xlnx-zynqmp.h
64+++ b/include/hw/arm/xlnx-zynqmp.h
65@@ -4,6 +4,7 @@
66 #include "hw/arm/arm.h"
67 #include "hw/intc/arm_gic.h"
68 #include "hw/net/cadence_gem.h"
69+#include "hw/char/cadence_uart.h"
70
71 #define TYPE_XLNX_ZYNQMP "xlnx,zynqmp"
72 #define XLNX_ZYNQMP(obj) OBJECT_CHECK(XlnxZynqMPState, (obj), \
73@@ -11,6 +12,7 @@
74
75 #define XLNX_ZYNQMP_NUM_CPUS 4
76 #define XLNX_ZYNQMP_NUM_GEMS 4
77+#define XLNX_ZYNQMP_NUM_UARTS 2
78
79 typedef struct XlnxZynqMPState {
80 /*< private >*/
81@@ -20,6 +22,7 @@ typedef struct XlnxZynqMPState {
82 ARMCPU cpu[XLNX_ZYNQMP_NUM_CPUS];
83 GICState gic;
84 CadenceGEMState gem[XLNX_ZYNQMP_NUM_GEMS];
85+ CadenceUARTState uart[XLNX_ZYNQMP_NUM_UARTS];
86 } XlnxZynqMPState;
87
88 #define XLNX_ZYNQMP_H_
89--
901.7.10.4
91
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xilinx-zynq-mp-generic-machine.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xilinx-zynq-mp-generic-machine.patch
deleted file mode 100644
index 4dbcc495..00000000
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xilinx-zynq-mp-generic-machine.patch
+++ /dev/null
@@ -1,87 +0,0 @@
1From 48860a59e9fe23da638dde9c47a3665466ceefae Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:52 -0800
4Subject: [PATCH 12/15] arm: Add xilinx-zynq-mp-generic machine
5
6Add a generic machine for the Xilinx Zynq MP SoC. This is a minimal
7machine that exposes the capabilities of the raw SoC as a usable
8machine.
9
10Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
11---
12 hw/arm/Makefile.objs | 2 +-
13 hw/arm/xlnx-zynq-mp-generic.c | 52 +++++++++++++++++++++++++++++++++++++++++++
14 2 files changed, 53 insertions(+), 1 deletion(-)
15 create mode 100644 hw/arm/xlnx-zynq-mp-generic.c
16
17diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs
18index 9bf072b..776fbe3 100644
19--- a/hw/arm/Makefile.objs
20+++ b/hw/arm/Makefile.objs
21@@ -8,4 +8,4 @@ obj-y += armv7m.o exynos4210.o pxa2xx.o pxa2xx_gpio.o pxa2xx_pic.o
22 obj-$(CONFIG_DIGIC) += digic.o
23 obj-y += omap1.o omap2.o strongarm.o
24 obj-$(CONFIG_ALLWINNER_A10) += allwinner-a10.o cubieboard.o
25-obj-$(CONFIG_XLNX_ZYNQ_MP) += xlnx-zynq-mp.o
26+obj-$(CONFIG_XLNX_ZYNQ_MP) += xlnx-zynq-mp.o xlnx-zynq-mp-generic.o
27diff --git a/hw/arm/xlnx-zynq-mp-generic.c b/hw/arm/xlnx-zynq-mp-generic.c
28new file mode 100644
29index 0000000..ff69b07
30--- /dev/null
31+++ b/hw/arm/xlnx-zynq-mp-generic.c
32@@ -0,0 +1,52 @@
33+#/*
34+ * Xilinx Zynq MPSoC emulation
35+ *
36+ * Copyright (C) 2015 Xilinx Inc
37+ * Written by Peter Crosthwaite <peter.crosthwaite@xilinx.com>
38+ *
39+ * This program is free software; you can redistribute it and/or modify it
40+ * under the terms of the GNU General Public License as published by the
41+ * Free Software Foundation; either version 2 of the License, or
42+ * (at your option) any later version.
43+ *
44+ * This program is distributed in the hope that it will be useful, but WITHOUT
45+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
46+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
47+ * for more details.
48+ */
49+
50+#include "hw/arm/xlnx-zynq-mp.h"
51+#include "hw/boards.h"
52+#include "qemu/error-report.h"
53+
54+typedef struct XlnxZynqMPGeneric {
55+ XlnxZynqMPState soc;
56+} XlnxZynqMPGeneric;
57+
58+static void xlnx_zynq_mp_generic_init(MachineState *machine)
59+{
60+ XlnxZynqMPGeneric *s = g_new0(XlnxZynqMPGeneric, 1);
61+ Error *err = NULL;
62+
63+ object_initialize(&s->soc, sizeof(s->soc), TYPE_XLNX_ZYNQ_MP);
64+ object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc), NULL);
65+
66+ object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
67+ if (err) {
68+ error_report("%s", error_get_pretty(err));
69+ exit(1);
70+ }
71+}
72+
73+static QEMUMachine xlnx_zynq_mp_generic_machine = {
74+ .name = "xlnx-zynq-mp-generic",
75+ .desc = "Xilinx Zynq MP SoC generic machine",
76+ .init = xlnx_zynq_mp_generic_init,
77+};
78+
79+static void xlnx_zynq_mp_generic_machine_init(void)
80+{
81+ qemu_register_machine(&xlnx_zynq_mp_generic_machine);
82+}
83+
84+machine_init(xlnx_zynq_mp_generic_machine_init);
85--
862.1.1
87
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xlnx-ep108-machine.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xlnx-ep108-machine.patch
new file mode 100644
index 00000000..4c7d05aa
--- /dev/null
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0012-arm-Add-xlnx-ep108-machine.patch
@@ -0,0 +1,87 @@
1From 0b9dbaa31007d9d7ef8bafcdcb756ffdcc591e03 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Mar 2015 04:05:17 -0700
4Subject: [PATCH 12/15] arm: Add xlnx-ep108 machine
5
6Add a machine model for the Xilinx ZynqMP SoC EP108 board.
7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
10---
11 hw/arm/Makefile.objs | 2 +-
12 hw/arm/xlnx-ep108.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++
13 2 files changed, 54 insertions(+), 1 deletion(-)
14 create mode 100644 hw/arm/xlnx-ep108.c
15
16diff --git a/hw/arm/Makefile.objs b/hw/arm/Makefile.objs
17index d7cd5f4..a75a182 100644
18--- a/hw/arm/Makefile.objs
19+++ b/hw/arm/Makefile.objs
20@@ -10,4 +10,4 @@ obj-$(CONFIG_DIGIC) += digic.o
21 obj-y += omap1.o omap2.o strongarm.o
22 obj-$(CONFIG_ALLWINNER_A10) += allwinner-a10.o cubieboard.o
23 obj-$(CONFIG_STM32F205_SOC) += stm32f205_soc.o
24-obj-$(CONFIG_XLNX_ZYNQMP) += xlnx-zynqmp.o
25+obj-$(CONFIG_XLNX_ZYNQMP) += xlnx-zynqmp.o xlnx-ep108.o
26diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c
27new file mode 100644
28index 0000000..81704bb
29--- /dev/null
30+++ b/hw/arm/xlnx-ep108.c
31@@ -0,0 +1,53 @@
32+/*
33+ * Xilinx ZynqMP EP108 board
34+ *
35+ * Copyright (C) 2015 Xilinx Inc
36+ * Written by Peter Crosthwaite <peter.crosthwaite@xilinx.com>
37+ *
38+ * This program is free software; you can redistribute it and/or modify it
39+ * under the terms of the GNU General Public License as published by the
40+ * Free Software Foundation; either version 2 of the License, or
41+ * (at your option) any later version.
42+ *
43+ * This program is distributed in the hope that it will be useful, but WITHOUT
44+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
45+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
46+ * for more details.
47+ */
48+
49+#include "hw/arm/xlnx-zynqmp.h"
50+#include "hw/boards.h"
51+#include "qemu/error-report.h"
52+
53+typedef struct XlnxEP108 {
54+ XlnxZynqMPState soc;
55+} XlnxEP108;
56+
57+static void xlnx_ep108_init(MachineState *machine)
58+{
59+ XlnxEP108 *s = g_new0(XlnxEP108, 1);
60+ Error *err = NULL;
61+
62+ object_initialize(&s->soc, sizeof(s->soc), TYPE_XLNX_ZYNQMP);
63+ object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc),
64+ &error_abort);
65+
66+ object_property_set_bool(OBJECT(&s->soc), true, "realized", &err);
67+ if (err) {
68+ error_report("%s", error_get_pretty(err));
69+ exit(1);
70+ }
71+}
72+
73+static QEMUMachine xlnx_ep108_machine = {
74+ .name = "xlnx-ep108",
75+ .desc = "Xilinx ZynqMP EP108 board",
76+ .init = xlnx_ep108_init,
77+};
78+
79+static void xlnx_ep108_machine_init(void)
80+{
81+ qemu_register_machine(&xlnx_ep108_machine);
82+}
83+
84+machine_init(xlnx_ep108_machine_init);
85--
861.7.10.4
87
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-ep108-Add-external-RAM.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-ep108-Add-external-RAM.patch
new file mode 100644
index 00000000..2030048e
--- /dev/null
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-ep108-Add-external-RAM.patch
@@ -0,0 +1,60 @@
1From 7c16af47e2ec33043ca0ef924232c9eef9dc60c4 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Mar 2015 04:05:18 -0700
4Subject: [PATCH 13/15] arm: xilinx-ep108: Add external RAM
5
6Zynq MPSoC supports external DDR RAM. Add a RAM at 0 to the model.
7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
10---
11 hw/arm/xlnx-ep108.c | 21 +++++++++++++++++++++
12 1 file changed, 21 insertions(+)
13
14diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c
15index 81704bb..6e89456 100644
16--- a/hw/arm/xlnx-ep108.c
17+++ b/hw/arm/xlnx-ep108.c
18@@ -18,11 +18,16 @@
19 #include "hw/arm/xlnx-zynqmp.h"
20 #include "hw/boards.h"
21 #include "qemu/error-report.h"
22+#include "exec/address-spaces.h"
23
24 typedef struct XlnxEP108 {
25 XlnxZynqMPState soc;
26+ MemoryRegion ddr_ram;
27 } XlnxEP108;
28
29+/* Max 2GB RAM */
30+#define EP108_MAX_RAM_SIZE 0x80000000ull
31+
32 static void xlnx_ep108_init(MachineState *machine)
33 {
34 XlnxEP108 *s = g_new0(XlnxEP108, 1);
35@@ -37,6 +42,22 @@ static void xlnx_ep108_init(MachineState *machine)
36 error_report("%s", error_get_pretty(err));
37 exit(1);
38 }
39+
40+ if (machine->ram_size > EP108_MAX_RAM_SIZE) {
41+ error_report("WARNING: RAM size " RAM_ADDR_FMT " above max supported, "
42+ "reduced to %llx", machine->ram_size, EP108_MAX_RAM_SIZE);
43+ machine->ram_size = EP108_MAX_RAM_SIZE;
44+ }
45+
46+ if (machine->ram_size <= 0x08000000) {
47+ error_report("WARNING: RAM size " RAM_ADDR_FMT " is small for EP108\n",
48+ machine->ram_size);
49+ }
50+
51+ memory_region_init_ram(&s->ddr_ram, NULL, "ddr-ram", machine->ram_size,
52+ &error_abort);
53+ vmstate_register_ram_global(&s->ddr_ram);
54+ memory_region_add_subregion(get_system_memory(), 0, &s->ddr_ram);
55 }
56
57 static QEMUMachine xlnx_ep108_machine = {
58--
591.7.10.4
60
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-zynq-mp-generic-Add-external-RAM.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-zynq-mp-generic-Add-external-RAM.patch
deleted file mode 100644
index 0af560de..00000000
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0013-arm-xilinx-zynq-mp-generic-Add-external-RAM.patch
+++ /dev/null
@@ -1,43 +0,0 @@
1From 0b155ff9a1e19f2b4ed4324e822285d3a667f02a Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:53 -0800
4Subject: [PATCH 13/15] arm: xilinx-zynq-mp-generic: Add external RAM
5
6Zynq MPSoC supports external DDR RAM. Add a RAM at 0 to the model.
7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9---
10 hw/arm/xlnx-zynq-mp-generic.c | 7 +++++++
11 1 file changed, 7 insertions(+)
12
13diff --git a/hw/arm/xlnx-zynq-mp-generic.c b/hw/arm/xlnx-zynq-mp-generic.c
14index ff69b07..7394e82 100644
15--- a/hw/arm/xlnx-zynq-mp-generic.c
16+++ b/hw/arm/xlnx-zynq-mp-generic.c
17@@ -18,9 +18,11 @@
18 #include "hw/arm/xlnx-zynq-mp.h"
19 #include "hw/boards.h"
20 #include "qemu/error-report.h"
21+#include "exec/address-spaces.h"
22
23 typedef struct XlnxZynqMPGeneric {
24 XlnxZynqMPState soc;
25+ MemoryRegion ddr_ram;
26 } XlnxZynqMPGeneric;
27
28 static void xlnx_zynq_mp_generic_init(MachineState *machine)
29@@ -36,6 +38,11 @@ static void xlnx_zynq_mp_generic_init(MachineState *machine)
30 error_report("%s", error_get_pretty(err));
31 exit(1);
32 }
33+
34+ memory_region_init_ram(&s->ddr_ram, NULL, "ddr-ram", machine->ram_size,
35+ &error_abort);
36+ vmstate_register_ram_global(&s->ddr_ram);
37+ memory_region_add_subregion(get_system_memory(), 0, &s->ddr_ram);
38 }
39
40 static QEMUMachine xlnx_zynq_mp_generic_machine = {
41--
422.1.1
43
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-ep108-Add-bootloading.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-ep108-Add-bootloading.patch
new file mode 100644
index 00000000..1a9a8a8f
--- /dev/null
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-ep108-Add-bootloading.patch
@@ -0,0 +1,42 @@
1From 409477e2655e2169c5dd38de8cec00c863869670 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Mar 2015 04:05:18 -0700
4Subject: [PATCH 14/15] arm: xilinx-ep108: Add bootloading
5
6Using standard ARM bootloader.
7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
10---
11 hw/arm/xlnx-ep108.c | 8 ++++++++
12 1 file changed, 8 insertions(+)
13
14diff --git a/hw/arm/xlnx-ep108.c b/hw/arm/xlnx-ep108.c
15index 6e89456..a86f595 100644
16--- a/hw/arm/xlnx-ep108.c
17+++ b/hw/arm/xlnx-ep108.c
18@@ -28,6 +28,8 @@ typedef struct XlnxEP108 {
19 /* Max 2GB RAM */
20 #define EP108_MAX_RAM_SIZE 0x80000000ull
21
22+static struct arm_boot_info xlnx_ep108_binfo;
23+
24 static void xlnx_ep108_init(MachineState *machine)
25 {
26 XlnxEP108 *s = g_new0(XlnxEP108, 1);
27@@ -58,6 +60,12 @@ static void xlnx_ep108_init(MachineState *machine)
28 &error_abort);
29 vmstate_register_ram_global(&s->ddr_ram);
30 memory_region_add_subregion(get_system_memory(), 0, &s->ddr_ram);
31+
32+ xlnx_ep108_binfo.ram_size = machine->ram_size;
33+ xlnx_ep108_binfo.kernel_filename = machine->kernel_filename;
34+ xlnx_ep108_binfo.kernel_cmdline = machine->kernel_cmdline;
35+ xlnx_ep108_binfo.initrd_filename = machine->initrd_filename;
36+ arm_load_kernel(&s->soc.cpu[0], &xlnx_ep108_binfo);
37 }
38
39 static QEMUMachine xlnx_ep108_machine = {
40--
411.7.10.4
42
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-zynq-mp-generic-Add-bootloading.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-zynq-mp-generic-Add-bootloading.patch
deleted file mode 100644
index 9c551bff..00000000
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0014-arm-xilinx-zynq-mp-generic-Add-bootloading.patch
+++ /dev/null
@@ -1,41 +0,0 @@
1From 8ef4b6e8f95d99dcee6ae1bae92f24cd05d1ff3a Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:54 -0800
4Subject: [PATCH 14/15] arm: xilinx-zynq-mp-generic: Add bootloading
5
6Using standard ARM bootloader.
7
8Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
9---
10 hw/arm/xlnx-zynq-mp-generic.c | 8 ++++++++
11 1 file changed, 8 insertions(+)
12
13diff --git a/hw/arm/xlnx-zynq-mp-generic.c b/hw/arm/xlnx-zynq-mp-generic.c
14index 7394e82..a86f10d 100644
15--- a/hw/arm/xlnx-zynq-mp-generic.c
16+++ b/hw/arm/xlnx-zynq-mp-generic.c
17@@ -25,6 +25,8 @@ typedef struct XlnxZynqMPGeneric {
18 MemoryRegion ddr_ram;
19 } XlnxZynqMPGeneric;
20
21+static struct arm_boot_info xlnx_zynq_mp_generic_binfo;
22+
23 static void xlnx_zynq_mp_generic_init(MachineState *machine)
24 {
25 XlnxZynqMPGeneric *s = g_new0(XlnxZynqMPGeneric, 1);
26@@ -43,6 +45,12 @@ static void xlnx_zynq_mp_generic_init(MachineState *machine)
27 &error_abort);
28 vmstate_register_ram_global(&s->ddr_ram);
29 memory_region_add_subregion(get_system_memory(), 0, &s->ddr_ram);
30+
31+ xlnx_zynq_mp_generic_binfo.ram_size = machine->ram_size;
32+ xlnx_zynq_mp_generic_binfo.kernel_filename = machine->kernel_filename;
33+ xlnx_zynq_mp_generic_binfo.kernel_cmdline = machine->kernel_cmdline;
34+ xlnx_zynq_mp_generic_binfo.initrd_filename = machine->initrd_filename;
35+ arm_load_kernel(&s->soc.cpu[0], &xlnx_zynq_mp_generic_binfo);
36 }
37
38 static QEMUMachine xlnx_zynq_mp_generic_machine = {
39--
402.1.1
41
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynq-mp-Add-PSCI-setup.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynq-mp-Add-PSCI-setup.patch
deleted file mode 100644
index e145e4b4..00000000
--- a/recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynq-mp-Add-PSCI-setup.patch
+++ /dev/null
@@ -1,35 +0,0 @@
1From 97287cf7c4f7550d298c0ef11dde88ee91c209a3 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Feb 2015 15:04:55 -0800
4Subject: [PATCH 15/15] arm: xlnx-zynq-mp: Add PSCI setup
5
6Use SMC PSCI, with the standard policy of secondaries starting in
7power-off.
8
9Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
10---
11 hw/arm/xlnx-zynq-mp.c | 8 ++++++++
12 1 file changed, 8 insertions(+)
13
14diff --git a/hw/arm/xlnx-zynq-mp.c b/hw/arm/xlnx-zynq-mp.c
15index 9d7e834..0952221 100644
16--- a/hw/arm/xlnx-zynq-mp.c
17+++ b/hw/arm/xlnx-zynq-mp.c
18@@ -96,6 +96,14 @@ static void xlnx_zynq_mp_realize(DeviceState *dev, Error **errp)
19 for (i = 0; i < XLNX_ZYNQ_MP_NUM_CPUS; i++) {
20 qemu_irq irq;
21
22+ object_property_set_int(OBJECT(&s->cpu[i]), QEMU_PSCI_CONDUIT_SMC,
23+ "psci-conduit", NULL);
24+ if (i > 0) {
25+ /* Secondary CPUs start in PSCI powered-down state */
26+ object_property_set_bool(OBJECT(&s->cpu[i]), true,
27+ "start-powered-off", NULL);
28+ }
29+
30 object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err);
31 ERR_PROP_CHECK_RETURN(err, errp);
32
33--
342.1.1
35
diff --git a/recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynqmp-Add-PSCI-setup.patch b/recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynqmp-Add-PSCI-setup.patch
new file mode 100644
index 00000000..20b9b827
--- /dev/null
+++ b/recipes-devtools/qemu/qemu-zynqmp-mainline/0015-arm-xlnx-zynqmp-Add-PSCI-setup.patch
@@ -0,0 +1,36 @@
1From 5c6a101203322028e91586736b4f6e3c5ecc7d09 Mon Sep 17 00:00:00 2001
2From: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
3Date: Mon, 23 Mar 2015 04:05:19 -0700
4Subject: [PATCH 15/15] arm: xlnx-zynqmp: Add PSCI setup
5
6Use SMC PSCI, with the standard policy of secondaries starting in
7power-off.
8
9Reviewed-by: Alistair Francis <alistair.francis@xilinx.com>
10Signed-off-by: Peter Crosthwaite <peter.crosthwaite@xilinx.com>
11---
12 hw/arm/xlnx-zynqmp.c | 8 ++++++++
13 1 file changed, 8 insertions(+)
14
15diff --git a/hw/arm/xlnx-zynqmp.c b/hw/arm/xlnx-zynqmp.c
16index e015025..0265fba 100644
17--- a/hw/arm/xlnx-zynqmp.c
18+++ b/hw/arm/xlnx-zynqmp.c
19@@ -97,6 +97,14 @@ static void xlnx_zynqmp_realize(DeviceState *dev, Error **errp)
20 for (i = 0; i < XLNX_ZYNQMP_NUM_CPUS; i++) {
21 qemu_irq irq;
22
23+ object_property_set_int(OBJECT(&s->cpu[i]), QEMU_PSCI_CONDUIT_SMC,
24+ "psci-conduit", &error_abort);
25+ if (i > 0) {
26+ /* Secondary CPUs start in PSCI powered-down state */
27+ object_property_set_bool(OBJECT(&s->cpu[i]), true,
28+ "start-powered-off", &error_abort);
29+ }
30+
31 object_property_set_bool(OBJECT(&s->cpu[i]), true, "realized", &err);
32 ERR_PROP_CHECK_RETURN(err, errp);
33
34--
351.7.10.4
36
diff --git a/recipes-devtools/qemu/qemu_zynqmp.bb b/recipes-devtools/qemu/qemu_zynqmp.bb
index 040147ec..679fc755 100644
--- a/recipes-devtools/qemu/qemu_zynqmp.bb
+++ b/recipes-devtools/qemu/qemu_zynqmp.bb
@@ -1,5 +1,8 @@
1require recipes-devtools/qemu/qemu.inc 1require recipes-devtools/qemu/qemu.inc
2 2
3# glx no longer valid config option
4PACKAGECONFIG[glx] = ""
5
3DEFAULT_PREFERENCE = "-1" 6DEFAULT_PREFERENCE = "-1"
4 7
5LIC_FILES_CHKSUM = " \ 8LIC_FILES_CHKSUM = " \
@@ -7,7 +10,7 @@ LIC_FILES_CHKSUM = " \
7 file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913 \ 10 file://COPYING.LIB;endline=24;md5=c04def7ae38850e7d3ef548588159913 \
8 " 11 "
9 12
10SRCREV = "cd2d5541271f1934345d8ca42f5fafff1744eee7" 13SRCREV = "f2a581010cb8e3a2564a45a2863a33a732cc2fc7"
11 14
12PV = "2.2.0+master+zynqmp+git${SRCPV}" 15PV = "2.2.0+master+zynqmp+git${SRCPV}"
13 16
@@ -22,18 +25,18 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/qemu-zynqmp-mainline:"
22SRC_URI_append += " \ 25SRC_URI_append += " \
23 file://0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch \ 26 file://0001-target-arm-cpu64-Factor-out-ARM-cortex-init.patch \
24 file://0002-target-arm-cpu64-Add-support-for-cortex-a53.patch \ 27 file://0002-target-arm-cpu64-Add-support-for-cortex-a53.patch \
25 file://0003-arm-Introduce-Xilinx-Zynq-MPSoC.patch \ 28 file://0003-arm-Introduce-Xilinx-ZynqMP-SoC.patch \
26 file://0004-arm-xlnx-zynq-mp-Add-GIC.patch \ 29 file://0004-arm-xlnx-zynqmp-Add-GIC.patch \
27 file://0005-arm-xlnx-zynq-mp-Connect-CPU-Timers-to-GIC.patch \ 30 file://0005-arm-xlnx-zynqmp-Connect-CPU-Timers-to-GIC.patch \
28 file://0006-net-cadence_gem-Clean-up-variable-names.patch \ 31 file://0006-net-cadence_gem-Clean-up-variable-names.patch \
29 file://0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch \ 32 file://0007-net-cadence_gem-Split-state-struct-and-type-into-hea.patch \
30 file://0008-arm-xilinx-zynq-mp-Add-GEM-support.patch \ 33 file://0008-arm-xilinx-zynqmp-Add-GEM-support.patch \
31 file://0009-char-cadence_uart-Clean-up-variable-names.patch \ 34 file://0009-char-cadence_uart-Clean-up-variable-names.patch \
32 file://0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch \ 35 file://0010-char-cadence_uart-Split-state-struct-and-type-into-h.patch \
33 file://0011-arm-xilinx-zynq-mp-Add-UART-support.patch \ 36 file://0011-arm-xilinx-zynqmp-Add-UART-support.patch \
34 file://0012-arm-Add-xilinx-zynq-mp-generic-machine.patch \ 37 file://0012-arm-Add-xlnx-ep108-machine.patch \
35 file://0013-arm-xilinx-zynq-mp-generic-Add-external-RAM.patch \ 38 file://0013-arm-xilinx-ep108-Add-external-RAM.patch \
36 file://0014-arm-xilinx-zynq-mp-generic-Add-bootloading.patch \ 39 file://0014-arm-xilinx-ep108-Add-bootloading.patch \
37 file://0015-arm-xlnx-zynq-mp-Add-PSCI-setup.patch \ 40 file://0015-arm-xlnx-zynqmp-Add-PSCI-setup.patch \
38 " 41 "
39 42