1
Arm patch queue -- these are all bug fix patches but we might
1
Last few changes before rc0: a few bug fixes, but mostly
2
as well put them in to rc0...
2
docs stuff.
3
3
4
thanks
5
-- PMM
4
-- PMM
6
5
7
The following changes since commit 2c8cfc0b52b5a4d123c26c0b5fdf941be24805be:
6
The following changes since commit a97fca4ceb9d9b10aa8b582e817a5ee6c42ffbaf:
8
7
9
Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging (2018-03-19 11:44:26 +0000)
8
Merge remote-tracking branch 'remotes/mst/tags/for_upstream3' into staging (2021-07-16 16:34:42 +0100)
10
9
11
are available in the Git repository at:
10
are available in the Git repository at:
12
11
13
git://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20180319
12
https://git.linaro.org/people/pmaydell/qemu-arm.git tags/pull-target-arm-20210718
14
13
15
for you to fetch changes up to ff72cb6b46b95bb530787add5277c211af3d31c6:
14
for you to fetch changes up to 8fe612a183dec4c63afdc57537079bc742d024ca:
16
15
17
hw/arm/raspi: Provide spin-loop code for AArch64 CPUs (2018-03-19 18:23:24 +0000)
16
target/arm: Remove duplicate 'plus1' function from Neon and SVE decode (2021-07-18 10:59:47 +0100)
18
17
19
----------------------------------------------------------------
18
----------------------------------------------------------------
20
target-arm queue:
19
target-arm queue:
21
* fsl-imx6: Fix incorrect Ethernet interrupt defines
20
* Remove duplicate 'plus1' function from Neon and SVE decode
22
* dump: Update correct kdump phys_base field for AArch64
21
* Fix offsets for TTBCR for big-endian hosts
23
* char: i.MX: Add support for "TX complete" interrupt
22
* docs: fix copyright date
24
* bcm2836/raspi: Fix various bugs resulting in panics trying
23
* docs: add license/version info to HTML footers
25
to boot a Debian Linux kernel on raspi3
24
* docs: add an About section
25
* docs: document some more arm boards
26
26
27
----------------------------------------------------------------
27
----------------------------------------------------------------
28
Andrey Smirnov (2):
28
Peter Maydell (11):
29
char: i.MX: Simplify imx_update()
29
docs: Fix documentation Copyright date
30
char: i.MX: Add support for "TX complete" interrupt
30
docs: Stop calling the top level subsections of our manual 'manuals'
31
docs: Remove "Contents:" lines from top-level subsections
32
docs: Move deprecation, build and license info out of system/
33
docs: Add some actual About text to about/index.rst
34
docs: Add license note to the HTML page footer
35
docs: Add QEMU version information to HTML footer
36
docs: Add skeletal documentation of cubieboard
37
docs: Add skeletal documentation of the emcraft-sf2
38
docs: Add skeletal documentation of highbank and midway
39
target/arm: Remove duplicate 'plus1' function from Neon and SVE decode
31
40
32
Guenter Roeck (1):
41
Richard Henderson (1):
33
fsl-imx6: Swap Ethernet interrupt defines
42
target/arm: Fix offsets for TTBCR
34
43
35
Peter Maydell (9):
44
docs/_templates/footer.html | 14 ++++++++++++++
36
hw/arm/raspi: Don't do board-setup or secure-boot for raspi3
45
docs/{system => about}/build-platforms.rst | 0
37
hw/arm/boot: assert that secure_boot and secure_board_setup are false for AArch64
46
docs/{system => about}/deprecated.rst | 0
38
hw/arm/boot: If booting a kernel in EL2, set SCR_EL3.HCE
47
docs/about/index.rst | 27 +++++++++++++++++++++++++++
39
hw/arm/bcm2386: Fix parent type of bcm2386
48
docs/{system => about}/license.rst | 0
40
hw/arm/bcm2836: Rename bcm2836 type/struct to bcm283x
49
docs/{system => about}/removed-features.rst | 0
41
hw/arm/bcm2836: Create proper bcm2837 device
50
docs/conf.py | 2 +-
42
hw/arm/bcm2836: Use correct affinity values for BCM2837
51
docs/devel/index.rst | 7 +------
43
hw/arm/bcm2836: Hardcode correct CPU type
52
docs/index.rst | 1 +
44
hw/arm/raspi: Provide spin-loop code for AArch64 CPUs
53
docs/interop/index.rst | 9 ++-------
54
docs/meson.build | 3 ++-
55
docs/specs/index.rst | 7 ++-----
56
docs/system/arm/cubieboard.rst | 16 ++++++++++++++++
57
docs/system/arm/emcraft-sf2.rst | 15 +++++++++++++++
58
docs/system/arm/highbank.rst | 19 +++++++++++++++++++
59
docs/system/index.rst | 11 +----------
60
docs/system/target-arm.rst | 3 +++
61
docs/tools/index.rst | 7 ++-----
62
docs/user/index.rst | 7 +------
63
target/arm/neon-ls.decode | 4 ++--
64
target/arm/neon-shared.decode | 2 +-
65
target/arm/sve.decode | 2 +-
66
target/arm/helper.c | 11 +++++++----
67
target/arm/translate-neon.c | 5 -----
68
target/arm/translate-sve.c | 5 -----
69
MAINTAINERS | 4 ++++
70
26 files changed, 122 insertions(+), 59 deletions(-)
71
create mode 100644 docs/_templates/footer.html
72
rename docs/{system => about}/build-platforms.rst (100%)
73
rename docs/{system => about}/deprecated.rst (100%)
74
create mode 100644 docs/about/index.rst
75
rename docs/{system => about}/license.rst (100%)
76
rename docs/{system => about}/removed-features.rst (100%)
77
create mode 100644 docs/system/arm/cubieboard.rst
78
create mode 100644 docs/system/arm/emcraft-sf2.rst
79
create mode 100644 docs/system/arm/highbank.rst
45
80
46
Wei Huang (1):
47
dump: Update correct kdump phys_base field for AArch64
48
49
include/hw/arm/bcm2836.h | 31 +++++++++++++---
50
include/hw/arm/fsl-imx6.h | 4 +-
51
include/hw/char/imx_serial.h | 3 ++
52
dump.c | 14 +++++--
53
hw/arm/bcm2836.c | 87 +++++++++++++++++++++++++++++++-------------
54
hw/arm/boot.c | 12 ++++++
55
hw/arm/raspi.c | 77 +++++++++++++++++++++++++++++++--------
56
hw/char/imx_serial.c | 44 ++++++++++++++++------
57
hw/net/imx_fec.c | 28 +++++++++++++-
58
9 files changed, 237 insertions(+), 63 deletions(-)
59
diff view generated by jsdifflib
Deleted patch
1
From: Guenter Roeck <linux@roeck-us.net>
2
1
3
The sabrelite machine model used by qemu-system-arm is based on the
4
Freescale/NXP i.MX6Q processor. This SoC has an on-board ethernet
5
controller which is supported in QEMU using the imx_fec.c module
6
(actually called imx.enet for this model.)
7
8
The include/hw/arm/fsm-imx6.h file defines the interrupt vectors for the
9
imx.enet device like this:
10
11
#define FSL_IMX6_ENET_MAC_1588_IRQ 118
12
#define FSL_IMX6_ENET_MAC_IRQ 119
13
14
According to https://www.nxp.com/docs/en/reference-manual/IMX6DQRM.pdf,
15
page 225, in Table 3-1. ARM Cortex A9 domain interrupt summary,
16
interrupts are as follows.
17
18
150 ENET MAC 0 IRQ
19
151 ENET MAC 0 1588 Timer interrupt
20
21
where
22
23
150 - 32 == 118
24
151 - 32 == 119
25
26
In other words, the vector definitions in the fsl-imx6.h file are reversed.
27
28
Fixing the interrupts alone causes problems with older Linux kernels:
29
The Ethernet interface will fail to probe with Linux v4.9 and earlier.
30
Linux v4.1 and earlier will crash due to a bug in Ethernet driver probe
31
error handling. This is a Linux kernel problem, not a qemu problem:
32
the Linux kernel only worked by accident since it requested both interrupts.
33
34
For backward compatibility, generate the Ethernet interrupt on both interrupt
35
lines. This was shown to work from all Linux kernel releases starting with
36
v3.16.
37
38
Link: https://bugs.launchpad.net/qemu/+bug/1753309
39
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
40
Message-id: 1520723090-22130-1-git-send-email-linux@roeck-us.net
41
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
42
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
43
---
44
include/hw/arm/fsl-imx6.h | 4 ++--
45
hw/net/imx_fec.c | 28 +++++++++++++++++++++++++++-
46
2 files changed, 29 insertions(+), 3 deletions(-)
47
48
diff --git a/include/hw/arm/fsl-imx6.h b/include/hw/arm/fsl-imx6.h
49
index XXXXXXX..XXXXXXX 100644
50
--- a/include/hw/arm/fsl-imx6.h
51
+++ b/include/hw/arm/fsl-imx6.h
52
@@ -XXX,XX +XXX,XX @@ typedef struct FslIMX6State {
53
#define FSL_IMX6_HDMI_MASTER_IRQ 115
54
#define FSL_IMX6_HDMI_CEC_IRQ 116
55
#define FSL_IMX6_MLB150_LOW_IRQ 117
56
-#define FSL_IMX6_ENET_MAC_1588_IRQ 118
57
-#define FSL_IMX6_ENET_MAC_IRQ 119
58
+#define FSL_IMX6_ENET_MAC_IRQ 118
59
+#define FSL_IMX6_ENET_MAC_1588_IRQ 119
60
#define FSL_IMX6_PCIE1_IRQ 120
61
#define FSL_IMX6_PCIE2_IRQ 121
62
#define FSL_IMX6_PCIE3_IRQ 122
63
diff --git a/hw/net/imx_fec.c b/hw/net/imx_fec.c
64
index XXXXXXX..XXXXXXX 100644
65
--- a/hw/net/imx_fec.c
66
+++ b/hw/net/imx_fec.c
67
@@ -XXX,XX +XXX,XX @@ static void imx_enet_write_bd(IMXENETBufDesc *bd, dma_addr_t addr)
68
69
static void imx_eth_update(IMXFECState *s)
70
{
71
- if (s->regs[ENET_EIR] & s->regs[ENET_EIMR] & ENET_INT_TS_TIMER) {
72
+ /*
73
+ * Previous versions of qemu had the ENET_INT_MAC and ENET_INT_TS_TIMER
74
+ * interrupts swapped. This worked with older versions of Linux (4.14
75
+ * and older) since Linux associated both interrupt lines with Ethernet
76
+ * MAC interrupts. Specifically,
77
+ * - Linux 4.15 and later have separate interrupt handlers for the MAC and
78
+ * timer interrupts. Those versions of Linux fail with versions of QEMU
79
+ * with swapped interrupt assignments.
80
+ * - In linux 4.14, both interrupt lines were registered with the Ethernet
81
+ * MAC interrupt handler. As a result, all versions of qemu happen to
82
+ * work, though that is accidental.
83
+ * - In Linux 4.9 and older, the timer interrupt was registered directly
84
+ * with the Ethernet MAC interrupt handler. The MAC interrupt was
85
+ * redirected to a GPIO interrupt to work around erratum ERR006687.
86
+ * This was implemented using the SOC's IOMUX block. In qemu, this GPIO
87
+ * interrupt never fired since IOMUX is currently not supported in qemu.
88
+ * Linux instead received MAC interrupts on the timer interrupt.
89
+ * As a result, qemu versions with the swapped interrupt assignment work,
90
+ * albeit accidentally, but qemu versions with the correct interrupt
91
+ * assignment fail.
92
+ *
93
+ * To ensure that all versions of Linux work, generate ENET_INT_MAC
94
+ * interrrupts on both interrupt lines. This should be changed if and when
95
+ * qemu supports IOMUX.
96
+ */
97
+ if (s->regs[ENET_EIR] & s->regs[ENET_EIMR] &
98
+ (ENET_INT_MAC | ENET_INT_TS_TIMER)) {
99
qemu_set_irq(s->irq[1], 1);
100
} else {
101
qemu_set_irq(s->irq[1], 0);
102
--
103
2.16.2
104
105
diff view generated by jsdifflib
1
The BCM2837 sets the Aff1 field of the MPIDR affinity values for the
1
From: Richard Henderson <richard.henderson@linaro.org>
2
CPUs to 0, whereas the BCM2836 uses 0xf. Set this correctly, as it
3
is required for Linux to boot.
4
2
3
The functions vmsa_ttbcr_write and vmsa_ttbcr_raw_write expect
4
the offset to be for the complete TCR structure, not the offset
5
to the low 32-bits of a uint64_t. Using offsetoflow32 in this
6
case breaks big-endian hosts.
7
8
For TTBCR2, we do want the high 32-bits of a uint64_t.
9
Use cp15.tcr_el[*].raw_tcr as the offsetofhigh32 argument to
10
clarify this.
11
12
Buglink: https://gitlab.com/qemu-project/qemu/-/issues/187
13
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
14
Message-id: 20210709230621.938821-2-richard.henderson@linaro.org
15
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
7
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Message-id: 20180313153458.26822-8-peter.maydell@linaro.org
9
---
17
---
10
hw/arm/bcm2836.c | 11 +++++++----
18
target/arm/helper.c | 11 +++++++----
11
1 file changed, 7 insertions(+), 4 deletions(-)
19
1 file changed, 7 insertions(+), 4 deletions(-)
12
20
13
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
21
diff --git a/target/arm/helper.c b/target/arm/helper.c
14
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
15
--- a/hw/arm/bcm2836.c
23
--- a/target/arm/helper.c
16
+++ b/hw/arm/bcm2836.c
24
+++ b/target/arm/helper.c
17
@@ -XXX,XX +XXX,XX @@
25
@@ -XXX,XX +XXX,XX @@ static const ARMCPRegInfo vmsa_cp_reginfo[] = {
18
26
.access = PL1_RW, .accessfn = access_tvm_trvm,
19
struct BCM283XInfo {
27
.type = ARM_CP_ALIAS, .writefn = vmsa_ttbcr_write,
20
const char *name;
28
.raw_writefn = vmsa_ttbcr_raw_write,
21
+ int clusterid;
29
- .bank_fieldoffsets = { offsetoflow32(CPUARMState, cp15.tcr_el[3]),
30
- offsetoflow32(CPUARMState, cp15.tcr_el[1])} },
31
+ /* No offsetoflow32 -- pass the entire TCR to writefn/raw_writefn. */
32
+ .bank_fieldoffsets = { offsetof(CPUARMState, cp15.tcr_el[3]),
33
+ offsetof(CPUARMState, cp15.tcr_el[1])} },
34
REGINFO_SENTINEL
22
};
35
};
23
36
24
static const BCM283XInfo bcm283x_socs[] = {
37
@@ -XXX,XX +XXX,XX @@ static const ARMCPRegInfo ttbcr2_reginfo = {
25
{
38
.name = "TTBCR2", .cp = 15, .opc1 = 0, .crn = 2, .crm = 0, .opc2 = 3,
26
.name = TYPE_BCM2836,
39
.access = PL1_RW, .accessfn = access_tvm_trvm,
27
+ .clusterid = 0xf,
40
.type = ARM_CP_ALIAS,
28
},
41
- .bank_fieldoffsets = { offsetofhigh32(CPUARMState, cp15.tcr_el[3]),
29
{
42
- offsetofhigh32(CPUARMState, cp15.tcr_el[1]) },
30
.name = TYPE_BCM2837,
43
+ .bank_fieldoffsets = {
31
+ .clusterid = 0x0,
44
+ offsetofhigh32(CPUARMState, cp15.tcr_el[3].raw_tcr),
32
},
45
+ offsetofhigh32(CPUARMState, cp15.tcr_el[1].raw_tcr),
46
+ },
33
};
47
};
34
48
35
@@ -XXX,XX +XXX,XX @@ static void bcm2836_init(Object *obj)
49
static void omap_ticonfig_write(CPUARMState *env, const ARMCPRegInfo *ri,
36
static void bcm2836_realize(DeviceState *dev, Error **errp)
37
{
38
BCM283XState *s = BCM283X(dev);
39
+ BCM283XClass *bc = BCM283X_GET_CLASS(dev);
40
+ const BCM283XInfo *info = bc->info;
41
Object *obj;
42
Error *err = NULL;
43
int n;
44
@@ -XXX,XX +XXX,XX @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
45
qdev_get_gpio_in_named(DEVICE(&s->control), "gpu-fiq", 0));
46
47
for (n = 0; n < BCM283X_NCPUS; n++) {
48
- /* Mirror bcm2836, which has clusterid set to 0xf
49
- * TODO: this should be converted to a property of ARM_CPU
50
- */
51
- s->cpus[n].mp_affinity = 0xF00 | n;
52
+ /* TODO: this should be converted to a property of ARM_CPU */
53
+ s->cpus[n].mp_affinity = (info->clusterid << 8) | n;
54
55
/* set periphbase/CBAR value for CPU-local registers */
56
object_property_set_int(OBJECT(&s->cpus[n]),
57
--
50
--
58
2.16.2
51
2.20.1
59
52
60
53
diff view generated by jsdifflib
1
Now we have separate types for BCM2386 and BCM2387, we might as well
1
In commit 6d8980a38fa we updated the copyright string we present to
2
just hard-code the CPU type they use rather than having it passed
2
the user in -version output, About dialogs, etc, but we forgot that
3
through as an object property. This then lets us put the initialization
3
the Sphinx manuals have a separate copyright string setting. Update
4
of the CPU object in init rather than realize.
4
that one too.
5
6
Note that this change means that it's no longer possible on
7
the command line to use -cpu to ask for a different kind of
8
CPU than the SoC supports. This was never a supported thing to
9
do anyway; we were just not sanity-checking the command line.
10
11
This does require us to only build the bcm2837 object on
12
TARGET_AARCH64 configs, since otherwise it won't instantiate
13
due to the missing cortex-a53 device and "make check" will fail.
14
5
15
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
16
Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
7
Acked-by: Markus Armbruster <armbru@redhat.com>
17
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
18
Message-id: 20180313153458.26822-9-peter.maydell@linaro.org
9
Message-id: 20210705095547.15790-2-peter.maydell@linaro.org
19
---
10
---
20
hw/arm/bcm2836.c | 24 +++++++++++++++---------
11
docs/conf.py | 2 +-
21
hw/arm/raspi.c | 2 --
12
1 file changed, 1 insertion(+), 1 deletion(-)
22
2 files changed, 15 insertions(+), 11 deletions(-)
23
13
24
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
14
diff --git a/docs/conf.py b/docs/conf.py
25
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
26
--- a/hw/arm/bcm2836.c
16
--- a/docs/conf.py
27
+++ b/hw/arm/bcm2836.c
17
+++ b/docs/conf.py
28
@@ -XXX,XX +XXX,XX @@
18
@@ -XXX,XX +XXX,XX @@
29
19
30
struct BCM283XInfo {
20
# General information about the project.
31
const char *name;
21
project = u'QEMU'
32
+ const char *cpu_type;
22
-copyright = u'2020, The QEMU Project Developers'
33
int clusterid;
23
+copyright = u'2021, The QEMU Project Developers'
34
};
24
author = u'The QEMU Project Developers'
35
25
36
static const BCM283XInfo bcm283x_socs[] = {
26
# The version info for the project you're documenting, acts as replacement for
37
{
38
.name = TYPE_BCM2836,
39
+ .cpu_type = ARM_CPU_TYPE_NAME("cortex-a15"),
40
.clusterid = 0xf,
41
},
42
+#ifdef TARGET_AARCH64
43
{
44
.name = TYPE_BCM2837,
45
+ .cpu_type = ARM_CPU_TYPE_NAME("cortex-a53"),
46
.clusterid = 0x0,
47
},
48
+#endif
49
};
50
51
static void bcm2836_init(Object *obj)
52
{
53
BCM283XState *s = BCM283X(obj);
54
+ BCM283XClass *bc = BCM283X_GET_CLASS(obj);
55
+ const BCM283XInfo *info = bc->info;
56
+ int n;
57
+
58
+ for (n = 0; n < BCM283X_NCPUS; n++) {
59
+ object_initialize(&s->cpus[n], sizeof(s->cpus[n]),
60
+ info->cpu_type);
61
+ object_property_add_child(obj, "cpu[*]", OBJECT(&s->cpus[n]),
62
+ &error_abort);
63
+ }
64
65
object_initialize(&s->control, sizeof(s->control), TYPE_BCM2836_CONTROL);
66
object_property_add_child(obj, "control", OBJECT(&s->control), NULL);
67
@@ -XXX,XX +XXX,XX @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
68
69
/* common peripherals from bcm2835 */
70
71
- obj = OBJECT(dev);
72
- for (n = 0; n < BCM283X_NCPUS; n++) {
73
- object_initialize(&s->cpus[n], sizeof(s->cpus[n]),
74
- s->cpu_type);
75
- object_property_add_child(obj, "cpu[*]", OBJECT(&s->cpus[n]),
76
- &error_abort);
77
- }
78
-
79
obj = object_property_get_link(OBJECT(dev), "ram", &err);
80
if (obj == NULL) {
81
error_setg(errp, "%s: required ram link not found: %s",
82
@@ -XXX,XX +XXX,XX @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
83
}
84
85
static Property bcm2836_props[] = {
86
- DEFINE_PROP_STRING("cpu-type", BCM283XState, cpu_type),
87
DEFINE_PROP_UINT32("enabled-cpus", BCM283XState, enabled_cpus,
88
BCM283X_NCPUS),
89
DEFINE_PROP_END_OF_LIST()
90
diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
91
index XXXXXXX..XXXXXXX 100644
92
--- a/hw/arm/raspi.c
93
+++ b/hw/arm/raspi.c
94
@@ -XXX,XX +XXX,XX @@ static void raspi_init(MachineState *machine, int version)
95
/* Setup the SOC */
96
object_property_add_const_link(OBJECT(&s->soc), "ram", OBJECT(&s->ram),
97
&error_abort);
98
- object_property_set_str(OBJECT(&s->soc), machine->cpu_type, "cpu-type",
99
- &error_abort);
100
object_property_set_int(OBJECT(&s->soc), smp_cpus, "enabled-cpus",
101
&error_abort);
102
int board_rev = version == 3 ? 0xa02082 : 0xa21041;
103
--
27
--
104
2.16.2
28
2.20.1
105
29
106
30
diff view generated by jsdifflib
1
From: Andrey Smirnov <andrew.smirnov@gmail.com>
1
We merged our previous multiple-manual setup into a single Sphinx
2
manual, but we left some text in the various index.rst lines that
3
still calls the top level subsections separate 'manuals'. Update
4
them to talk about "this section of the manual" instead, and remove
5
now-obsolete comments about how the index.rst files are the "top
6
level page for the 'foo' manual".
2
7
3
Add support for "TX complete"/TXDC interrupt generate by real HW since
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
it is needed to support guests other than Linux.
9
Acked-by: Markus Armbruster <armbru@redhat.com>
10
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
11
Message-id: 20210705095547.15790-3-peter.maydell@linaro.org
12
---
13
docs/devel/index.rst | 5 +----
14
docs/interop/index.rst | 7 ++-----
15
docs/specs/index.rst | 5 ++---
16
docs/system/index.rst | 5 +----
17
docs/tools/index.rst | 5 ++---
18
docs/user/index.rst | 5 +----
19
6 files changed, 9 insertions(+), 23 deletions(-)
5
20
6
Based on the patch by Bill Paul as found here:
21
diff --git a/docs/devel/index.rst b/docs/devel/index.rst
7
https://bugs.launchpad.net/qemu/+bug/1753314
8
9
Cc: qemu-devel@nongnu.org
10
Cc: qemu-arm@nongnu.org
11
Cc: Bill Paul <wpaul@windriver.com>
12
Cc: Peter Maydell <peter.maydell@linaro.org>
13
Signed-off-by: Bill Paul <wpaul@windriver.com>
14
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
15
Message-id: 20180315191141.6789-2-andrew.smirnov@gmail.com
16
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
17
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
18
---
19
include/hw/char/imx_serial.h | 3 +++
20
hw/char/imx_serial.c | 20 +++++++++++++++++---
21
2 files changed, 20 insertions(+), 3 deletions(-)
22
23
diff --git a/include/hw/char/imx_serial.h b/include/hw/char/imx_serial.h
24
index XXXXXXX..XXXXXXX 100644
22
index XXXXXXX..XXXXXXX 100644
25
--- a/include/hw/char/imx_serial.h
23
--- a/docs/devel/index.rst
26
+++ b/include/hw/char/imx_serial.h
24
+++ b/docs/devel/index.rst
27
@@ -XXX,XX +XXX,XX @@
25
@@ -XXX,XX +XXX,XX @@
28
#define UCR2_RXEN (1<<1) /* Receiver enable */
26
-.. This is the top level page for the 'devel' manual.
29
#define UCR2_SRST (1<<0) /* Reset complete */
27
-
30
28
-
31
+#define UCR4_TCEN BIT(3) /* TX complete interrupt enable */
29
Developer Information
32
+
30
=====================
33
#define UTS1_TXEMPTY (1<<6)
31
34
#define UTS1_RXEMPTY (1<<5)
32
-This manual documents various parts of the internals of QEMU.
35
#define UTS1_TXFULL (1<<4)
33
+This section of the manual documents various parts of the internals of QEMU.
36
@@ -XXX,XX +XXX,XX @@ typedef struct IMXSerialState {
34
You only need to read it if you are interested in reading or
37
uint32_t ubmr;
35
modifying QEMU's source code.
38
uint32_t ubrc;
36
39
uint32_t ucr3;
37
diff --git a/docs/interop/index.rst b/docs/interop/index.rst
40
+ uint32_t ucr4;
41
42
qemu_irq irq;
43
CharBackend chr;
44
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
45
index XXXXXXX..XXXXXXX 100644
38
index XXXXXXX..XXXXXXX 100644
46
--- a/hw/char/imx_serial.c
39
--- a/docs/interop/index.rst
47
+++ b/hw/char/imx_serial.c
40
+++ b/docs/interop/index.rst
48
@@ -XXX,XX +XXX,XX @@
41
@@ -XXX,XX +XXX,XX @@
49
42
-.. This is the top level page for the 'interop' manual.
50
static const VMStateDescription vmstate_imx_serial = {
43
-
51
.name = TYPE_IMX_SERIAL,
44
-
52
- .version_id = 1,
45
System Emulation Management and Interoperability
53
- .minimum_version_id = 1,
46
================================================
54
+ .version_id = 2,
47
55
+ .minimum_version_id = 2,
48
-This manual contains documents and specifications that are useful
56
.fields = (VMStateField[]) {
49
-for making QEMU interoperate with other software.
57
VMSTATE_INT32(readbuff, IMXSerialState),
50
+This section of the manual contains documents and specifications that
58
VMSTATE_UINT32(usr1, IMXSerialState),
51
+are useful for making QEMU interoperate with other software.
59
@@ -XXX,XX +XXX,XX @@ static const VMStateDescription vmstate_imx_serial = {
52
60
VMSTATE_UINT32(ubmr, IMXSerialState),
53
Contents:
61
VMSTATE_UINT32(ubrc, IMXSerialState),
54
62
VMSTATE_UINT32(ucr3, IMXSerialState),
55
diff --git a/docs/specs/index.rst b/docs/specs/index.rst
63
+ VMSTATE_UINT32(ucr4, IMXSerialState),
56
index XXXXXXX..XXXXXXX 100644
64
VMSTATE_END_OF_LIST()
57
--- a/docs/specs/index.rst
65
},
58
+++ b/docs/specs/index.rst
66
};
59
@@ -XXX,XX +XXX,XX @@
67
@@ -XXX,XX +XXX,XX @@ static void imx_update(IMXSerialState *s)
60
-.. This is the top level page for the 'specs' manual
68
* unfortunately.
61
-
69
*/
62
-
70
mask = (s->ucr1 & UCR1_TXMPTYEN) ? USR2_TXFE : 0;
63
System Emulation Guest Hardware Specifications
71
+ /*
64
==============================================
72
+ * TCEN and TXDC are both bit 3
65
73
+ */
66
+This section of the manual contains specifications of
74
+ mask |= s->ucr4 & UCR4_TCEN;
67
+guest hardware that is specific to QEMU.
75
+
68
76
usr2 = s->usr2 & mask;
69
Contents:
77
70
78
qemu_set_irq(s->irq, usr1 || usr2);
71
diff --git a/docs/system/index.rst b/docs/system/index.rst
79
@@ -XXX,XX +XXX,XX @@ static uint64_t imx_serial_read(void *opaque, hwaddr offset,
72
index XXXXXXX..XXXXXXX 100644
80
return s->ucr3;
73
--- a/docs/system/index.rst
81
74
+++ b/docs/system/index.rst
82
case 0x23: /* UCR4 */
75
@@ -XXX,XX +XXX,XX @@
83
+ return s->ucr4;
76
-.. This is the top level page for the 'system' manual.
84
+
77
-
85
case 0x29: /* BRM Incremental */
78
-
86
return 0x0; /* TODO */
79
System Emulation
87
80
================
88
@@ -XXX,XX +XXX,XX @@ static void imx_serial_write(void *opaque, hwaddr offset,
81
89
* qemu_chr_fe_write and background I/O callbacks */
82
-This manual is the overall guide for users using QEMU
90
qemu_chr_fe_write_all(&s->chr, &ch, 1);
83
+This section of the manual is the overall guide for users using QEMU
91
s->usr1 &= ~USR1_TRDY;
84
for full system emulation (as opposed to user-mode emulation).
92
+ s->usr2 &= ~USR2_TXDC;
85
This includes working with hypervisors such as KVM, Xen, Hax
93
imx_update(s);
86
or Hypervisor.Framework.
94
s->usr1 |= USR1_TRDY;
87
diff --git a/docs/tools/index.rst b/docs/tools/index.rst
95
+ s->usr2 |= USR2_TXDC;
88
index XXXXXXX..XXXXXXX 100644
96
imx_update(s);
89
--- a/docs/tools/index.rst
97
}
90
+++ b/docs/tools/index.rst
98
break;
91
@@ -XXX,XX +XXX,XX @@
99
@@ -XXX,XX +XXX,XX @@ static void imx_serial_write(void *opaque, hwaddr offset,
92
-.. This is the top level page for the 'tools' manual
100
s->ucr3 = value & 0xffff;
93
-
101
break;
94
-
102
95
Tools
103
- case 0x2d: /* UTS1 */
96
=====
104
case 0x23: /* UCR4 */
97
105
+ s->ucr4 = value & 0xffff;
98
+This section of the manual documents QEMU's "tools": its
106
+ imx_update(s);
99
+command line utilities and other standalone programs.
107
+ break;
100
108
+
101
Contents:
109
+ case 0x2d: /* UTS1 */
102
110
qemu_log_mask(LOG_UNIMP, "[%s]%s: Unimplemented reg 0x%"
103
diff --git a/docs/user/index.rst b/docs/user/index.rst
111
HWADDR_PRIx "\n", TYPE_IMX_SERIAL, __func__, offset);
104
index XXXXXXX..XXXXXXX 100644
112
/* TODO */
105
--- a/docs/user/index.rst
106
+++ b/docs/user/index.rst
107
@@ -XXX,XX +XXX,XX @@
108
-.. This is the top level page for the 'user' manual.
109
-
110
-
111
User Mode Emulation
112
===================
113
114
-This manual is the overall guide for users using QEMU
115
+This section of the manual is the overall guide for users using QEMU
116
for user-mode emulation. In this mode, QEMU can launch
117
processes compiled for one CPU on another CPU.
118
113
--
119
--
114
2.16.2
120
2.20.1
115
121
116
122
diff view generated by jsdifflib
1
The raspi3 has AArch64 CPUs, which means that our smpboot
1
Since the top-level subsections aren't self-contained manuals
2
code for keeping the secondary CPUs in a pen needs to have
2
any more, the "Contents:" lines at the top of each of their
3
a version for A64 as well as A32. Without this, the
3
index pages look a bit odd; remove them.
4
secondary CPUs go into an infinite loop of taking undefined
5
instruction exceptions.
6
4
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Acked-by: Markus Armbruster <armbru@redhat.com>
9
Message-id: 20180313153458.26822-10-peter.maydell@linaro.org
7
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
8
Message-id: 20210705095547.15790-4-peter.maydell@linaro.org
10
---
9
---
11
hw/arm/raspi.c | 41 ++++++++++++++++++++++++++++++++++++++++-
10
docs/devel/index.rst | 2 --
12
1 file changed, 40 insertions(+), 1 deletion(-)
11
docs/interop/index.rst | 2 --
12
docs/specs/index.rst | 2 --
13
docs/system/index.rst | 2 --
14
docs/tools/index.rst | 2 --
15
docs/user/index.rst | 2 --
16
6 files changed, 12 deletions(-)
13
17
14
diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
18
diff --git a/docs/devel/index.rst b/docs/devel/index.rst
15
index XXXXXXX..XXXXXXX 100644
19
index XXXXXXX..XXXXXXX 100644
16
--- a/hw/arm/raspi.c
20
--- a/docs/devel/index.rst
17
+++ b/hw/arm/raspi.c
21
+++ b/docs/devel/index.rst
18
@@ -XXX,XX +XXX,XX @@
22
@@ -XXX,XX +XXX,XX @@ This section of the manual documents various parts of the internals of QEMU.
19
#define BOARDSETUP_ADDR (MVBAR_ADDR + 0x20) /* board setup code */
23
You only need to read it if you are interested in reading or
20
#define FIRMWARE_ADDR_2 0x8000 /* Pi 2 loads kernel.img here by default */
24
modifying QEMU's source code.
21
#define FIRMWARE_ADDR_3 0x80000 /* Pi 3 loads kernel.img here by default */
25
22
+#define SPINTABLE_ADDR 0xd8 /* Pi 3 bootloader spintable */
26
-Contents:
23
27
-
24
/* Table of Linux board IDs for different Pi versions */
28
.. toctree::
25
static const int raspi_boardid[] = {[1] = 0xc42, [2] = 0xc43, [3] = 0xc44};
29
:maxdepth: 2
26
@@ -XXX,XX +XXX,XX @@ static void write_smpboot(ARMCPU *cpu, const struct arm_boot_info *info)
30
:includehidden:
27
info->smp_loader_start);
31
diff --git a/docs/interop/index.rst b/docs/interop/index.rst
28
}
32
index XXXXXXX..XXXXXXX 100644
29
33
--- a/docs/interop/index.rst
30
+static void write_smpboot64(ARMCPU *cpu, const struct arm_boot_info *info)
34
+++ b/docs/interop/index.rst
31
+{
35
@@ -XXX,XX +XXX,XX @@ System Emulation Management and Interoperability
32
+ /* Unlike the AArch32 version we don't need to call the board setup hook.
36
This section of the manual contains documents and specifications that
33
+ * The mechanism for doing the spin-table is also entirely different.
37
are useful for making QEMU interoperate with other software.
34
+ * We must have four 64-bit fields at absolute addresses
38
35
+ * 0xd8, 0xe0, 0xe8, 0xf0 in RAM, which are the flag variables for
39
-Contents:
36
+ * our CPUs, and which we must ensure are zero initialized before
40
-
37
+ * the primary CPU goes into the kernel. We put these variables inside
41
.. toctree::
38
+ * a rom blob, so that the reset for ROM contents zeroes them for us.
42
:maxdepth: 2
39
+ */
43
40
+ static const uint32_t smpboot[] = {
44
diff --git a/docs/specs/index.rst b/docs/specs/index.rst
41
+ 0xd2801b05, /* mov x5, 0xd8 */
45
index XXXXXXX..XXXXXXX 100644
42
+ 0xd53800a6, /* mrs x6, mpidr_el1 */
46
--- a/docs/specs/index.rst
43
+ 0x924004c6, /* and x6, x6, #0x3 */
47
+++ b/docs/specs/index.rst
44
+ 0xd503205f, /* spin: wfe */
48
@@ -XXX,XX +XXX,XX @@ System Emulation Guest Hardware Specifications
45
+ 0xf86678a4, /* ldr x4, [x5,x6,lsl #3] */
49
This section of the manual contains specifications of
46
+ 0xb4ffffc4, /* cbz x4, spin */
50
guest hardware that is specific to QEMU.
47
+ 0xd2800000, /* mov x0, #0x0 */
51
48
+ 0xd2800001, /* mov x1, #0x0 */
52
-Contents:
49
+ 0xd2800002, /* mov x2, #0x0 */
53
-
50
+ 0xd2800003, /* mov x3, #0x0 */
54
.. toctree::
51
+ 0xd61f0080, /* br x4 */
55
:maxdepth: 2
52
+ };
56
53
+
57
diff --git a/docs/system/index.rst b/docs/system/index.rst
54
+ static const uint64_t spintables[] = {
58
index XXXXXXX..XXXXXXX 100644
55
+ 0, 0, 0, 0
59
--- a/docs/system/index.rst
56
+ };
60
+++ b/docs/system/index.rst
57
+
61
@@ -XXX,XX +XXX,XX @@ for full system emulation (as opposed to user-mode emulation).
58
+ rom_add_blob_fixed("raspi_smpboot", smpboot, sizeof(smpboot),
62
This includes working with hypervisors such as KVM, Xen, Hax
59
+ info->smp_loader_start);
63
or Hypervisor.Framework.
60
+ rom_add_blob_fixed("raspi_spintables", spintables, sizeof(spintables),
64
61
+ SPINTABLE_ADDR);
65
-Contents:
62
+}
66
-
63
+
67
.. toctree::
64
static void write_board_setup(ARMCPU *cpu, const struct arm_boot_info *info)
68
:maxdepth: 3
65
{
69
66
arm_write_secure_board_setup_dummy_smc(cpu, info, MVBAR_ADDR);
70
diff --git a/docs/tools/index.rst b/docs/tools/index.rst
67
@@ -XXX,XX +XXX,XX @@ static void setup_boot(MachineState *machine, int version, size_t ram_size)
71
index XXXXXXX..XXXXXXX 100644
68
/* Pi2 and Pi3 requires SMP setup */
72
--- a/docs/tools/index.rst
69
if (version >= 2) {
73
+++ b/docs/tools/index.rst
70
binfo.smp_loader_start = SMPBOOT_ADDR;
74
@@ -XXX,XX +XXX,XX @@ Tools
71
- binfo.write_secondary_boot = write_smpboot;
75
This section of the manual documents QEMU's "tools": its
72
+ if (version == 2) {
76
command line utilities and other standalone programs.
73
+ binfo.write_secondary_boot = write_smpboot;
77
74
+ } else {
78
-Contents:
75
+ binfo.write_secondary_boot = write_smpboot64;
79
-
76
+ }
80
.. toctree::
77
binfo.secondary_cpu_reset_hook = reset_secondary;
81
:maxdepth: 2
78
}
82
83
diff --git a/docs/user/index.rst b/docs/user/index.rst
84
index XXXXXXX..XXXXXXX 100644
85
--- a/docs/user/index.rst
86
+++ b/docs/user/index.rst
87
@@ -XXX,XX +XXX,XX @@ This section of the manual is the overall guide for users using QEMU
88
for user-mode emulation. In this mode, QEMU can launch
89
processes compiled for one CPU on another CPU.
90
91
-Contents:
92
-
93
.. toctree::
94
:maxdepth: 2
79
95
80
--
96
--
81
2.16.2
97
2.20.1
82
98
83
99
diff view generated by jsdifflib
1
From: Wei Huang <wei@redhat.com>
1
Now that we have a single Sphinx manual rather than multiple manuals,
2
we can provide a better place for "common to all of QEMU" information
3
like the deprecation notices, build platforms, license information,
4
which we currently have in the system/ manual even though it applies
5
to all of QEMU.
2
6
3
For guest kernel that supports KASLR, the load address can change every
7
Create a new directory about/ on the same level as system/, user/,
4
time when guest VM runs. To find the physical base address correctly,
8
etc, and move these documents there.
5
current QEMU dump searches VMCOREINFO for the string "NUMBER(phys_base)=".
6
However this string pattern is only available on x86_64. AArch64 uses a
7
different field, called "NUMBER(PHYS_OFFSET)=". This patch makes sure
8
QEMU dump uses the correct string on AArch64.
9
9
10
Signed-off-by: Wei Huang <wei@redhat.com>
11
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
12
Message-id: 1520615003-20869-1-git-send-email-wei@redhat.com
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Acked-by: Markus Armbruster <armbru@redhat.com>
12
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
13
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
14
Message-id: 20210705095547.15790-5-peter.maydell@linaro.org
14
---
15
---
15
dump.c | 14 +++++++++++---
16
docs/{system => about}/build-platforms.rst | 0
16
1 file changed, 11 insertions(+), 3 deletions(-)
17
docs/{system => about}/deprecated.rst | 0
18
docs/about/index.rst | 10 ++++++++++
19
docs/{system => about}/license.rst | 0
20
docs/{system => about}/removed-features.rst | 0
21
docs/index.rst | 1 +
22
docs/system/index.rst | 4 ----
23
7 files changed, 11 insertions(+), 4 deletions(-)
24
rename docs/{system => about}/build-platforms.rst (100%)
25
rename docs/{system => about}/deprecated.rst (100%)
26
create mode 100644 docs/about/index.rst
27
rename docs/{system => about}/license.rst (100%)
28
rename docs/{system => about}/removed-features.rst (100%)
17
29
18
diff --git a/dump.c b/dump.c
30
diff --git a/docs/system/build-platforms.rst b/docs/about/build-platforms.rst
31
similarity index 100%
32
rename from docs/system/build-platforms.rst
33
rename to docs/about/build-platforms.rst
34
diff --git a/docs/system/deprecated.rst b/docs/about/deprecated.rst
35
similarity index 100%
36
rename from docs/system/deprecated.rst
37
rename to docs/about/deprecated.rst
38
diff --git a/docs/about/index.rst b/docs/about/index.rst
39
new file mode 100644
40
index XXXXXXX..XXXXXXX
41
--- /dev/null
42
+++ b/docs/about/index.rst
43
@@ -XXX,XX +XXX,XX @@
44
+About QEMU
45
+==========
46
+
47
+.. toctree::
48
+ :maxdepth: 2
49
+
50
+ build-platforms
51
+ deprecated
52
+ removed-features
53
+ license
54
diff --git a/docs/system/license.rst b/docs/about/license.rst
55
similarity index 100%
56
rename from docs/system/license.rst
57
rename to docs/about/license.rst
58
diff --git a/docs/system/removed-features.rst b/docs/about/removed-features.rst
59
similarity index 100%
60
rename from docs/system/removed-features.rst
61
rename to docs/about/removed-features.rst
62
diff --git a/docs/index.rst b/docs/index.rst
19
index XXXXXXX..XXXXXXX 100644
63
index XXXXXXX..XXXXXXX 100644
20
--- a/dump.c
64
--- a/docs/index.rst
21
+++ b/dump.c
65
+++ b/docs/index.rst
22
@@ -XXX,XX +XXX,XX @@ static void vmcoreinfo_update_phys_base(DumpState *s)
66
@@ -XXX,XX +XXX,XX @@ Welcome to QEMU's documentation!
23
67
:maxdepth: 2
24
lines = g_strsplit((char *)vmci, "\n", -1);
68
:caption: Contents:
25
for (i = 0; lines[i]; i++) {
69
26
- if (g_str_has_prefix(lines[i], "NUMBER(phys_base)=")) {
70
+ about/index
27
- if (qemu_strtou64(lines[i] + 18, NULL, 16,
71
system/index
28
+ const char *prefix = NULL;
72
user/index
29
+
73
tools/index
30
+ if (s->dump_info.d_machine == EM_X86_64) {
74
diff --git a/docs/system/index.rst b/docs/system/index.rst
31
+ prefix = "NUMBER(phys_base)=";
75
index XXXXXXX..XXXXXXX 100644
32
+ } else if (s->dump_info.d_machine == EM_AARCH64) {
76
--- a/docs/system/index.rst
33
+ prefix = "NUMBER(PHYS_OFFSET)=";
77
+++ b/docs/system/index.rst
34
+ }
78
@@ -XXX,XX +XXX,XX @@ or Hypervisor.Framework.
35
+
79
targets
36
+ if (prefix && g_str_has_prefix(lines[i], prefix)) {
80
security
37
+ if (qemu_strtou64(lines[i] + strlen(prefix), NULL, 16,
81
multi-process
38
&phys_base) < 0) {
82
- deprecated
39
- warn_report("Failed to read NUMBER(phys_base)=");
83
- removed-features
40
+ warn_report("Failed to read %s", prefix);
84
- build-platforms
41
} else {
85
- license
42
s->dump_info.phys_base = phys_base;
43
}
44
--
86
--
45
2.16.2
87
2.20.1
46
88
47
89
diff view generated by jsdifflib
1
The bcm2837 is pretty similar to the bcm2836, but it does have
1
Add some text to About to act as a brief introduction to the QEMU
2
some differences. Notably, the MPIDR affinity aff1 values it
2
manual and to make the about page a bit less of an abrupt start to
3
sets for the CPUs are 0x0, rather than the 0xf that the bcm2836
3
it.
4
uses, and if this is wrong Linux will not boot.
5
6
Rather than trying to have one device with properties that
7
configure it differently for the two cases, create two
8
separate QOM devices for the two SoCs. We use the same approach
9
as hw/arm/aspeed_soc.c and share code and have a data table
10
that might differ per-SoC. For the moment the two types don't
11
actually have different behaviour.
12
4
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
14
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Acked-by: Markus Armbruster <armbru@redhat.com>
15
Message-id: 20180313153458.26822-7-peter.maydell@linaro.org
7
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
8
Message-id: 20210705095547.15790-6-peter.maydell@linaro.org
16
---
9
---
17
include/hw/arm/bcm2836.h | 19 +++++++++++++++++++
10
docs/about/index.rst | 17 +++++++++++++++++
18
hw/arm/bcm2836.c | 37 ++++++++++++++++++++++++++++++++-----
11
1 file changed, 17 insertions(+)
19
hw/arm/raspi.c | 3 ++-
20
3 files changed, 53 insertions(+), 6 deletions(-)
21
12
22
diff --git a/include/hw/arm/bcm2836.h b/include/hw/arm/bcm2836.h
13
diff --git a/docs/about/index.rst b/docs/about/index.rst
23
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
24
--- a/include/hw/arm/bcm2836.h
15
--- a/docs/about/index.rst
25
+++ b/include/hw/arm/bcm2836.h
16
+++ b/docs/about/index.rst
26
@@ -XXX,XX +XXX,XX @@
17
@@ -XXX,XX +XXX,XX @@
27
18
About QEMU
28
#define BCM283X_NCPUS 4
19
==========
29
20
30
+/* These type names are for specific SoCs; other than instantiating
21
+QEMU is a generic and open source machine emulator and virtualizer.
31
+ * them, code using these devices should always handle them via the
32
+ * BCM283x base class, so they have no BCM2836(obj) etc macros.
33
+ */
34
+#define TYPE_BCM2836 "bcm2836"
35
+#define TYPE_BCM2837 "bcm2837"
36
+
22
+
37
typedef struct BCM283XState {
23
+QEMU can be used in several different ways. The most common is for
38
/*< private >*/
24
+"system emulation", where it provides a virtual model of an
39
DeviceState parent_obj;
25
+entire machine (CPU, memory and emulated devices) to run a guest OS.
40
@@ -XXX,XX +XXX,XX @@ typedef struct BCM283XState {
26
+In this mode the CPU may be fully emulated, or it may work with
41
BCM2835PeripheralState peripherals;
27
+a hypervisor such as KVM, Xen, Hax or Hypervisor.Framework to
42
} BCM283XState;
28
+allow the guest to run directly on the host CPU.
43
44
+typedef struct BCM283XInfo BCM283XInfo;
45
+
29
+
46
+typedef struct BCM283XClass {
30
+The second supported way to use QEMU is "user mode emulation",
47
+ DeviceClass parent_class;
31
+where QEMU can launch processes compiled for one CPU on another CPU.
48
+ const BCM283XInfo *info;
32
+In this mode the CPU is always emulated.
49
+} BCM283XClass;
50
+
33
+
51
+#define BCM283X_CLASS(klass) \
34
+QEMU also provides a number of standalone commandline utilities,
52
+ OBJECT_CLASS_CHECK(BCM283XClass, (klass), TYPE_BCM283X)
35
+such as the `qemu-img` disk image utility that allows you to create,
53
+#define BCM283X_GET_CLASS(obj) \
36
+convert and modify disk images.
54
+ OBJECT_GET_CLASS(BCM283XClass, (obj), TYPE_BCM283X)
55
+
37
+
56
#endif /* BCM2836_H */
38
.. toctree::
57
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
39
:maxdepth: 2
58
index XXXXXXX..XXXXXXX 100644
59
--- a/hw/arm/bcm2836.c
60
+++ b/hw/arm/bcm2836.c
61
@@ -XXX,XX +XXX,XX @@
62
/* "QA7" (Pi2) interrupt controller and mailboxes etc. */
63
#define BCM2836_CONTROL_BASE 0x40000000
64
65
+struct BCM283XInfo {
66
+ const char *name;
67
+};
68
+
69
+static const BCM283XInfo bcm283x_socs[] = {
70
+ {
71
+ .name = TYPE_BCM2836,
72
+ },
73
+ {
74
+ .name = TYPE_BCM2837,
75
+ },
76
+};
77
+
78
static void bcm2836_init(Object *obj)
79
{
80
BCM283XState *s = BCM283X(obj);
81
@@ -XXX,XX +XXX,XX @@ static Property bcm2836_props[] = {
82
DEFINE_PROP_END_OF_LIST()
83
};
84
85
-static void bcm2836_class_init(ObjectClass *oc, void *data)
86
+static void bcm283x_class_init(ObjectClass *oc, void *data)
87
{
88
DeviceClass *dc = DEVICE_CLASS(oc);
89
+ BCM283XClass *bc = BCM283X_CLASS(oc);
90
91
- dc->props = bcm2836_props;
92
+ bc->info = data;
93
dc->realize = bcm2836_realize;
94
+ dc->props = bcm2836_props;
95
}
96
97
-static const TypeInfo bcm2836_type_info = {
98
+static const TypeInfo bcm283x_type_info = {
99
.name = TYPE_BCM283X,
100
.parent = TYPE_DEVICE,
101
.instance_size = sizeof(BCM283XState),
102
.instance_init = bcm2836_init,
103
- .class_init = bcm2836_class_init,
104
+ .class_size = sizeof(BCM283XClass),
105
+ .abstract = true,
106
};
107
108
static void bcm2836_register_types(void)
109
{
110
- type_register_static(&bcm2836_type_info);
111
+ int i;
112
+
113
+ type_register_static(&bcm283x_type_info);
114
+ for (i = 0; i < ARRAY_SIZE(bcm283x_socs); i++) {
115
+ TypeInfo ti = {
116
+ .name = bcm283x_socs[i].name,
117
+ .parent = TYPE_BCM283X,
118
+ .class_init = bcm283x_class_init,
119
+ .class_data = (void *) &bcm283x_socs[i],
120
+ };
121
+ type_register(&ti);
122
+ }
123
}
124
125
type_init(bcm2836_register_types)
126
diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
127
index XXXXXXX..XXXXXXX 100644
128
--- a/hw/arm/raspi.c
129
+++ b/hw/arm/raspi.c
130
@@ -XXX,XX +XXX,XX @@ static void raspi_init(MachineState *machine, int version)
131
BusState *bus;
132
DeviceState *carddev;
133
134
- object_initialize(&s->soc, sizeof(s->soc), TYPE_BCM283X);
135
+ object_initialize(&s->soc, sizeof(s->soc),
136
+ version == 3 ? TYPE_BCM2837 : TYPE_BCM2836);
137
object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc),
138
&error_abort);
139
40
140
--
41
--
141
2.16.2
42
2.20.1
142
43
143
44
diff view generated by jsdifflib
1
The TypeInfo and state struct for bcm2386 disagree about what the
1
The standard Sphinx/RTD HTML page footer gives a copyright line
2
parent class is -- the TypeInfo says it's TYPE_SYS_BUS_DEVICE,
2
(based on the 'copyright' variable set in conf.py) and a line "Built
3
but the BCM2386State struct only defines the parent_obj field
3
with Sphinx using a theme provided by Read the Docs" (which can be
4
as DeviceState. This would have caused problems if anything
4
disabled via the html_show_sphinx variable, but we leave it enabled).
5
actually tried to treat the object as a TYPE_SYS_BUS_DEVICE.
5
As a free software project, we'd like to also mention the license
6
Fix the TypeInfo to use TYPE_DEVICE as the parent, since we don't
6
QEMU and its manual are released under.
7
need any of the additional functionality TYPE_SYS_BUS_DEVICE
7
8
provides.
8
Add a template footer.html which defines the 'extrafooter' block that
9
the RtD theme provides for this purpose. The new line of text will
10
go below the existing copyright and sphinx-acknowledgement lines.
11
(Unfortunately the RTD footer template does not permit putting it
12
after the copyright but before the sphinx-acknowledgement.)
13
14
We use the templating functionality to make the new text also be a
15
hyperlink to the about/license.html page of the manual.
16
17
Unlike rst files, HTML template files are not reported to our depfile
18
plugin, so we maintain a manual list in meson.build. New template
19
files should be rare, so not being able to auto-generate the
20
dependency info is not too awkward.
9
21
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
22
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
23
Acked-by: Markus Armbruster <armbru@redhat.com>
12
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
24
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
13
Message-id: 20180313153458.26822-5-peter.maydell@linaro.org
25
Message-id: 20210705095547.15790-7-peter.maydell@linaro.org
14
---
26
---
15
hw/arm/bcm2836.c | 2 +-
27
docs/_templates/footer.html | 12 ++++++++++++
16
1 file changed, 1 insertion(+), 1 deletion(-)
28
docs/meson.build | 3 ++-
29
MAINTAINERS | 1 +
30
3 files changed, 15 insertions(+), 1 deletion(-)
31
create mode 100644 docs/_templates/footer.html
17
32
18
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
33
diff --git a/docs/_templates/footer.html b/docs/_templates/footer.html
34
new file mode 100644
35
index XXXXXXX..XXXXXXX
36
--- /dev/null
37
+++ b/docs/_templates/footer.html
38
@@ -XXX,XX +XXX,XX @@
39
+{% extends "!footer.html" %}
40
+{% block extrafooter %}
41
+
42
+<!-- Empty para to force a blank line after "Built with Sphinx ..." -->
43
+<p></p>
44
+
45
+{% trans path=pathto('about/license') %}
46
+<p><a href="{{ path }}">QEMU and this manual are released under the
47
+GNU General Public License, version 2.</a></p>
48
+{% endtrans %}
49
+{{ super() }}
50
+{% endblock %}
51
diff --git a/docs/meson.build b/docs/meson.build
19
index XXXXXXX..XXXXXXX 100644
52
index XXXXXXX..XXXXXXX 100644
20
--- a/hw/arm/bcm2836.c
53
--- a/docs/meson.build
21
+++ b/hw/arm/bcm2836.c
54
+++ b/docs/meson.build
22
@@ -XXX,XX +XXX,XX @@ static void bcm2836_class_init(ObjectClass *oc, void *data)
55
@@ -XXX,XX +XXX,XX @@ if build_docs
23
56
meson.source_root() / 'docs/sphinx/qapidoc.py',
24
static const TypeInfo bcm2836_type_info = {
57
meson.source_root() / 'docs/sphinx/qmp_lexer.py',
25
.name = TYPE_BCM2836,
58
qapi_gen_depends ]
26
- .parent = TYPE_SYS_BUS_DEVICE,
59
+ sphinx_template_files = [ meson.source_root() / 'docs/_templates/footer.html' ]
27
+ .parent = TYPE_DEVICE,
60
28
.instance_size = sizeof(BCM2836State),
61
have_ga = have_tools and config_host.has_key('CONFIG_GUEST_AGENT')
29
.instance_init = bcm2836_init,
62
30
.class_init = bcm2836_class_init,
63
@@ -XXX,XX +XXX,XX @@ if build_docs
64
output: 'docs.stamp',
65
input: files('conf.py'),
66
depfile: 'docs.d',
67
- depend_files: sphinx_extn_depends,
68
+ depend_files: [ sphinx_extn_depends, sphinx_template_files ],
69
command: [SPHINX_ARGS, '-Ddepfile=@DEPFILE@',
70
'-Ddepfile_stamp=@OUTPUT0@',
71
'-b', 'html', '-d', private_dir,
72
diff --git a/MAINTAINERS b/MAINTAINERS
73
index XXXXXXX..XXXXXXX 100644
74
--- a/MAINTAINERS
75
+++ b/MAINTAINERS
76
@@ -XXX,XX +XXX,XX @@ S: Maintained
77
F: docs/conf.py
78
F: docs/*/conf.py
79
F: docs/sphinx/
80
+F: docs/_templates/
81
82
Miscellaneous
83
-------------
31
--
84
--
32
2.16.2
85
2.20.1
33
86
34
87
diff view generated by jsdifflib
1
Our BCM2836 type is really a generic one that can be any of
1
Add a line to the HTML document footer mentioning the QEMU version.
2
the bcm283x family. Rename it accordingly. We change only
2
The version information is already provided in very faint text below
3
the names which are visible via the header file to the
3
the QEMU logo in the sidebar, but that is rather inconspicious, so
4
rest of the QEMU code, leaving private function names
4
repeating it in the footer seems useful.
5
in bcm2836.c as they are.
6
7
This is a preliminary to making bcm283x be an abstract
8
parent class to specific types for the bcm2836 and bcm2837.
9
5
10
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
6
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
11
Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
7
Acked-by: Markus Armbruster <armbru@redhat.com>
12
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
8
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
13
Message-id: 20180313153458.26822-6-peter.maydell@linaro.org
9
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
10
Message-id: 20210705095547.15790-8-peter.maydell@linaro.org
14
---
11
---
15
include/hw/arm/bcm2836.h | 12 ++++++------
12
docs/_templates/footer.html | 2 ++
16
hw/arm/bcm2836.c | 17 +++++++++--------
13
1 file changed, 2 insertions(+)
17
hw/arm/raspi.c | 16 ++++++++--------
18
3 files changed, 23 insertions(+), 22 deletions(-)
19
14
20
diff --git a/include/hw/arm/bcm2836.h b/include/hw/arm/bcm2836.h
15
diff --git a/docs/_templates/footer.html b/docs/_templates/footer.html
21
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
22
--- a/include/hw/arm/bcm2836.h
17
--- a/docs/_templates/footer.html
23
+++ b/include/hw/arm/bcm2836.h
18
+++ b/docs/_templates/footer.html
24
@@ -XXX,XX +XXX,XX @@
19
@@ -XXX,XX +XXX,XX @@
25
#include "hw/arm/bcm2835_peripherals.h"
20
<!-- Empty para to force a blank line after "Built with Sphinx ..." -->
26
#include "hw/intc/bcm2836_control.h"
21
<p></p>
27
22
28
-#define TYPE_BCM2836 "bcm2836"
23
+<p>This documentation is for QEMU version {{ version }}.</p>
29
-#define BCM2836(obj) OBJECT_CHECK(BCM2836State, (obj), TYPE_BCM2836)
24
+
30
+#define TYPE_BCM283X "bcm283x"
25
{% trans path=pathto('about/license') %}
31
+#define BCM283X(obj) OBJECT_CHECK(BCM283XState, (obj), TYPE_BCM283X)
26
<p><a href="{{ path }}">QEMU and this manual are released under the
32
27
GNU General Public License, version 2.</a></p>
33
-#define BCM2836_NCPUS 4
34
+#define BCM283X_NCPUS 4
35
36
-typedef struct BCM2836State {
37
+typedef struct BCM283XState {
38
/*< private >*/
39
DeviceState parent_obj;
40
/*< public >*/
41
@@ -XXX,XX +XXX,XX @@ typedef struct BCM2836State {
42
char *cpu_type;
43
uint32_t enabled_cpus;
44
45
- ARMCPU cpus[BCM2836_NCPUS];
46
+ ARMCPU cpus[BCM283X_NCPUS];
47
BCM2836ControlState control;
48
BCM2835PeripheralState peripherals;
49
-} BCM2836State;
50
+} BCM283XState;
51
52
#endif /* BCM2836_H */
53
diff --git a/hw/arm/bcm2836.c b/hw/arm/bcm2836.c
54
index XXXXXXX..XXXXXXX 100644
55
--- a/hw/arm/bcm2836.c
56
+++ b/hw/arm/bcm2836.c
57
@@ -XXX,XX +XXX,XX @@
58
59
static void bcm2836_init(Object *obj)
60
{
61
- BCM2836State *s = BCM2836(obj);
62
+ BCM283XState *s = BCM283X(obj);
63
64
object_initialize(&s->control, sizeof(s->control), TYPE_BCM2836_CONTROL);
65
object_property_add_child(obj, "control", OBJECT(&s->control), NULL);
66
@@ -XXX,XX +XXX,XX @@ static void bcm2836_init(Object *obj)
67
68
static void bcm2836_realize(DeviceState *dev, Error **errp)
69
{
70
- BCM2836State *s = BCM2836(dev);
71
+ BCM283XState *s = BCM283X(dev);
72
Object *obj;
73
Error *err = NULL;
74
int n;
75
@@ -XXX,XX +XXX,XX @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
76
/* common peripherals from bcm2835 */
77
78
obj = OBJECT(dev);
79
- for (n = 0; n < BCM2836_NCPUS; n++) {
80
+ for (n = 0; n < BCM283X_NCPUS; n++) {
81
object_initialize(&s->cpus[n], sizeof(s->cpus[n]),
82
s->cpu_type);
83
object_property_add_child(obj, "cpu[*]", OBJECT(&s->cpus[n]),
84
@@ -XXX,XX +XXX,XX @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
85
sysbus_connect_irq(SYS_BUS_DEVICE(&s->peripherals), 1,
86
qdev_get_gpio_in_named(DEVICE(&s->control), "gpu-fiq", 0));
87
88
- for (n = 0; n < BCM2836_NCPUS; n++) {
89
+ for (n = 0; n < BCM283X_NCPUS; n++) {
90
/* Mirror bcm2836, which has clusterid set to 0xf
91
* TODO: this should be converted to a property of ARM_CPU
92
*/
93
@@ -XXX,XX +XXX,XX @@ static void bcm2836_realize(DeviceState *dev, Error **errp)
94
}
95
96
static Property bcm2836_props[] = {
97
- DEFINE_PROP_STRING("cpu-type", BCM2836State, cpu_type),
98
- DEFINE_PROP_UINT32("enabled-cpus", BCM2836State, enabled_cpus, BCM2836_NCPUS),
99
+ DEFINE_PROP_STRING("cpu-type", BCM283XState, cpu_type),
100
+ DEFINE_PROP_UINT32("enabled-cpus", BCM283XState, enabled_cpus,
101
+ BCM283X_NCPUS),
102
DEFINE_PROP_END_OF_LIST()
103
};
104
105
@@ -XXX,XX +XXX,XX @@ static void bcm2836_class_init(ObjectClass *oc, void *data)
106
}
107
108
static const TypeInfo bcm2836_type_info = {
109
- .name = TYPE_BCM2836,
110
+ .name = TYPE_BCM283X,
111
.parent = TYPE_DEVICE,
112
- .instance_size = sizeof(BCM2836State),
113
+ .instance_size = sizeof(BCM283XState),
114
.instance_init = bcm2836_init,
115
.class_init = bcm2836_class_init,
116
};
117
diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
118
index XXXXXXX..XXXXXXX 100644
119
--- a/hw/arm/raspi.c
120
+++ b/hw/arm/raspi.c
121
@@ -XXX,XX +XXX,XX @@
122
static const int raspi_boardid[] = {[1] = 0xc42, [2] = 0xc43, [3] = 0xc44};
123
124
typedef struct RasPiState {
125
- BCM2836State soc;
126
+ BCM283XState soc;
127
MemoryRegion ram;
128
} RasPiState;
129
130
@@ -XXX,XX +XXX,XX @@ static void raspi_init(MachineState *machine, int version)
131
BusState *bus;
132
DeviceState *carddev;
133
134
- object_initialize(&s->soc, sizeof(s->soc), TYPE_BCM2836);
135
+ object_initialize(&s->soc, sizeof(s->soc), TYPE_BCM283X);
136
object_property_add_child(OBJECT(machine), "soc", OBJECT(&s->soc),
137
&error_abort);
138
139
@@ -XXX,XX +XXX,XX @@ static void raspi2_machine_init(MachineClass *mc)
140
mc->no_floppy = 1;
141
mc->no_cdrom = 1;
142
mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a15");
143
- mc->max_cpus = BCM2836_NCPUS;
144
- mc->min_cpus = BCM2836_NCPUS;
145
- mc->default_cpus = BCM2836_NCPUS;
146
+ mc->max_cpus = BCM283X_NCPUS;
147
+ mc->min_cpus = BCM283X_NCPUS;
148
+ mc->default_cpus = BCM283X_NCPUS;
149
mc->default_ram_size = 1024 * 1024 * 1024;
150
mc->ignore_memory_transaction_failures = true;
151
};
152
@@ -XXX,XX +XXX,XX @@ static void raspi3_machine_init(MachineClass *mc)
153
mc->no_floppy = 1;
154
mc->no_cdrom = 1;
155
mc->default_cpu_type = ARM_CPU_TYPE_NAME("cortex-a53");
156
- mc->max_cpus = BCM2836_NCPUS;
157
- mc->min_cpus = BCM2836_NCPUS;
158
- mc->default_cpus = BCM2836_NCPUS;
159
+ mc->max_cpus = BCM283X_NCPUS;
160
+ mc->min_cpus = BCM283X_NCPUS;
161
+ mc->default_cpus = BCM283X_NCPUS;
162
mc->default_ram_size = 1024 * 1024 * 1024;
163
}
164
DEFINE_MACHINE("raspi3", raspi3_machine_init)
165
--
28
--
166
2.16.2
29
2.20.1
167
30
168
31
diff view generated by jsdifflib
1
If we're directly booting a Linux kernel and the CPU supports both
1
Add skeletal documentation of the cubieboard machine.
2
EL3 and EL2, we start the kernel in EL2, as it expects. We must also
3
set the SCR_EL3.HCE bit in this situation, so that the HVC
4
instruction is enabled rather than UNDEFing. Otherwise at least some
5
kernels will panic when trying to initialize KVM in the guest.
6
2
7
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
8
Message-id: 20180313153458.26822-4-peter.maydell@linaro.org
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
Message-id: 20210713142226.19155-2-peter.maydell@linaro.org
9
---
7
---
10
hw/arm/boot.c | 5 +++++
8
docs/system/arm/cubieboard.rst | 16 ++++++++++++++++
11
1 file changed, 5 insertions(+)
9
docs/system/target-arm.rst | 1 +
10
MAINTAINERS | 1 +
11
3 files changed, 18 insertions(+)
12
create mode 100644 docs/system/arm/cubieboard.rst
12
13
13
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
14
diff --git a/docs/system/arm/cubieboard.rst b/docs/system/arm/cubieboard.rst
15
new file mode 100644
16
index XXXXXXX..XXXXXXX
17
--- /dev/null
18
+++ b/docs/system/arm/cubieboard.rst
19
@@ -XXX,XX +XXX,XX @@
20
+Cubietech Cubieboard (``cubieboard``)
21
+=====================================
22
+
23
+The ``cubieboard`` model emulates the Cubietech Cubieboard,
24
+which is a Cortex-A8 based single-board computer using
25
+the AllWinner A10 SoC.
26
+
27
+Emulated devices:
28
+
29
+- Timer
30
+- UART
31
+- RTC
32
+- EMAC
33
+- SDHCI
34
+- USB controller
35
+- SATA controller
36
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
14
index XXXXXXX..XXXXXXX 100644
37
index XXXXXXX..XXXXXXX 100644
15
--- a/hw/arm/boot.c
38
--- a/docs/system/target-arm.rst
16
+++ b/hw/arm/boot.c
39
+++ b/docs/system/target-arm.rst
17
@@ -XXX,XX +XXX,XX @@ static void do_cpu_reset(void *opaque)
40
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
18
assert(!info->secure_board_setup);
41
arm/aspeed
19
}
42
arm/sabrelite
20
43
arm/digic
21
+ if (arm_feature(env, ARM_FEATURE_EL2)) {
44
+ arm/cubieboard
22
+ /* If we have EL2 then Linux expects the HVC insn to work */
45
arm/musicpal
23
+ env->cp15.scr_el3 |= SCR_HCE;
46
arm/gumstix
24
+ }
47
arm/nrf
25
+
48
diff --git a/MAINTAINERS b/MAINTAINERS
26
/* Set to non-secure if not a secure boot */
49
index XXXXXXX..XXXXXXX 100644
27
if (!info->secure_boot &&
50
--- a/MAINTAINERS
28
(cs != first_cpu || !info->secure_board_setup)) {
51
+++ b/MAINTAINERS
52
@@ -XXX,XX +XXX,XX @@ S: Odd Fixes
53
F: hw/*/allwinner*
54
F: include/hw/*/allwinner*
55
F: hw/arm/cubieboard.c
56
+F: docs/system/arm/cubieboard.rst
57
58
Allwinner-h3
59
M: Niek Linnenbank <nieklinnenbank@gmail.com>
29
--
60
--
30
2.16.2
61
2.20.1
31
62
32
63
diff view generated by jsdifflib
1
Add some assertions that if we're about to boot an AArch64 kernel,
1
Add skeletal documentation of the emcraft-sf2 machine.
2
the board code has not mistakenly set either secure_boot or
3
secure_board_setup. It doesn't make sense to set secure_boot,
4
because all AArch64 kernels must be booted in non-secure mode.
5
6
It might in theory make sense to set secure_board_setup, but
7
we don't currently support that, because only the AArch32
8
bootloader[] code calls this hook; bootloader_aarch64[] does not.
9
Since we don't have a current need for this functionality, just
10
assert that we don't try to use it. If it's needed we'll add
11
it later.
12
2
13
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
14
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
15
Message-id: 20180313153458.26822-3-peter.maydell@linaro.org
6
Message-id: 20210713142226.19155-3-peter.maydell@linaro.org
16
---
7
---
17
hw/arm/boot.c | 7 +++++++
8
docs/system/arm/emcraft-sf2.rst | 15 +++++++++++++++
18
1 file changed, 7 insertions(+)
9
docs/system/target-arm.rst | 1 +
10
MAINTAINERS | 1 +
11
3 files changed, 17 insertions(+)
12
create mode 100644 docs/system/arm/emcraft-sf2.rst
19
13
20
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
14
diff --git a/docs/system/arm/emcraft-sf2.rst b/docs/system/arm/emcraft-sf2.rst
15
new file mode 100644
16
index XXXXXXX..XXXXXXX
17
--- /dev/null
18
+++ b/docs/system/arm/emcraft-sf2.rst
19
@@ -XXX,XX +XXX,XX @@
20
+Emcraft SmartFusion2 SOM kit (``emcraft-sf2``)
21
+==============================================
22
+
23
+The ``emcraft-sf2`` board emulates the SmartFusion2 SOM kit from
24
+Emcraft (M2S010). This is a System-on-Module from EmCraft systems,
25
+based on the SmartFusion2 SoC FPGA from Microsemi Corporation.
26
+The SoC is based on a Cortex-M4 processor.
27
+
28
+Emulated devices:
29
+
30
+- System timer
31
+- System registers
32
+- SPI controller
33
+- UART
34
+- EMAC
35
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
21
index XXXXXXX..XXXXXXX 100644
36
index XXXXXXX..XXXXXXX 100644
22
--- a/hw/arm/boot.c
37
--- a/docs/system/target-arm.rst
23
+++ b/hw/arm/boot.c
38
+++ b/docs/system/target-arm.rst
24
@@ -XXX,XX +XXX,XX @@ static void do_cpu_reset(void *opaque)
39
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
25
} else {
40
arm/sabrelite
26
env->pstate = PSTATE_MODE_EL1h;
41
arm/digic
27
}
42
arm/cubieboard
28
+ /* AArch64 kernels never boot in secure mode */
43
+ arm/emcraft-sf2
29
+ assert(!info->secure_boot);
44
arm/musicpal
30
+ /* This hook is only supported for AArch32 currently:
45
arm/gumstix
31
+ * bootloader_aarch64[] will not call the hook, and
46
arm/nrf
32
+ * the code above has already dropped us into EL2 or EL1.
47
diff --git a/MAINTAINERS b/MAINTAINERS
33
+ */
48
index XXXXXXX..XXXXXXX 100644
34
+ assert(!info->secure_board_setup);
49
--- a/MAINTAINERS
35
}
50
+++ b/MAINTAINERS
36
51
@@ -XXX,XX +XXX,XX @@ M: Peter Maydell <peter.maydell@linaro.org>
37
/* Set to non-secure if not a secure boot */
52
L: qemu-arm@nongnu.org
53
S: Maintained
54
F: hw/arm/msf2-som.c
55
+F: docs/system/arm/emcraft-sf2.rst
56
57
ASPEED BMCs
58
M: Cédric Le Goater <clg@kaod.org>
38
--
59
--
39
2.16.2
60
2.20.1
40
61
41
62
diff view generated by jsdifflib
1
For the rpi1 and 2 we want to boot the Linux kernel via some
1
Add skeletal documentation for the highbank and midway machines.
2
custom setup code that makes sure that the SMC instruction
3
acts as a no-op, because it's used for cache maintenance.
4
The rpi3 boots AArch64 kernels, which don't need SMC for
5
cache maintenance and always expect to be booted non-secure.
6
Don't fill in the aarch32-specific parts of the binfo struct.
7
2
8
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
3
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
9
Reviewed-by: Andrew Baumann <Andrew.Baumann@microsoft.com>
4
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
10
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
5
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
11
Message-id: 20180313153458.26822-2-peter.maydell@linaro.org
6
Message-id: 20210713142226.19155-4-peter.maydell@linaro.org
12
---
7
---
13
hw/arm/raspi.c | 17 +++++++++++++----
8
docs/system/arm/highbank.rst | 19 +++++++++++++++++++
14
1 file changed, 13 insertions(+), 4 deletions(-)
9
docs/system/target-arm.rst | 1 +
10
MAINTAINERS | 1 +
11
3 files changed, 21 insertions(+)
12
create mode 100644 docs/system/arm/highbank.rst
15
13
16
diff --git a/hw/arm/raspi.c b/hw/arm/raspi.c
14
diff --git a/docs/system/arm/highbank.rst b/docs/system/arm/highbank.rst
15
new file mode 100644
16
index XXXXXXX..XXXXXXX
17
--- /dev/null
18
+++ b/docs/system/arm/highbank.rst
19
@@ -XXX,XX +XXX,XX @@
20
+Calxeda Highbank and Midway (``highbank``, ``midway``)
21
+======================================================
22
+
23
+``highbank`` is a model of the Calxeda Highbank (ECX-1000) system,
24
+which has four Cortex-A9 cores.
25
+
26
+``midway`` is a model of the Calxeda Midway (ECX-2000) system,
27
+which has four Cortex-A15 cores.
28
+
29
+Emulated devices:
30
+
31
+- L2x0 cache controller
32
+- SP804 dual timer
33
+- PL011 UART
34
+- PL061 GPIOs
35
+- PL031 RTC
36
+- PL022 synchronous serial port controller
37
+- AHCI
38
+- XGMAC ethernet controllers
39
diff --git a/docs/system/target-arm.rst b/docs/system/target-arm.rst
17
index XXXXXXX..XXXXXXX 100644
40
index XXXXXXX..XXXXXXX 100644
18
--- a/hw/arm/raspi.c
41
--- a/docs/system/target-arm.rst
19
+++ b/hw/arm/raspi.c
42
+++ b/docs/system/target-arm.rst
20
@@ -XXX,XX +XXX,XX @@ static void setup_boot(MachineState *machine, int version, size_t ram_size)
43
@@ -XXX,XX +XXX,XX @@ undocumented; you can get a complete list by running
21
binfo.board_id = raspi_boardid[version];
44
arm/digic
22
binfo.ram_size = ram_size;
45
arm/cubieboard
23
binfo.nb_cpus = smp_cpus;
46
arm/emcraft-sf2
24
- binfo.board_setup_addr = BOARDSETUP_ADDR;
47
+ arm/highbank
25
- binfo.write_board_setup = write_board_setup;
48
arm/musicpal
26
- binfo.secure_board_setup = true;
49
arm/gumstix
27
- binfo.secure_boot = true;
50
arm/nrf
28
+
51
diff --git a/MAINTAINERS b/MAINTAINERS
29
+ if (version <= 2) {
52
index XXXXXXX..XXXXXXX 100644
30
+ /* The rpi1 and 2 require some custom setup code to run in Secure
53
--- a/MAINTAINERS
31
+ * mode before booting a kernel (to set up the SMC vectors so
54
+++ b/MAINTAINERS
32
+ * that we get a no-op SMC; this is used by Linux to call the
55
@@ -XXX,XX +XXX,XX @@ L: qemu-arm@nongnu.org
33
+ * firmware for some cache maintenance operations.
56
S: Odd Fixes
34
+ * The rpi3 doesn't need this.
57
F: hw/arm/highbank.c
35
+ */
58
F: hw/net/xgmac.c
36
+ binfo.board_setup_addr = BOARDSETUP_ADDR;
59
+F: docs/system/arm/highbank.rst
37
+ binfo.write_board_setup = write_board_setup;
60
38
+ binfo.secure_board_setup = true;
61
Canon DIGIC
39
+ binfo.secure_boot = true;
62
M: Antony Pavlov <antonynpavlov@gmail.com>
40
+ }
41
42
/* Pi2 and Pi3 requires SMP setup */
43
if (version >= 2) {
44
--
63
--
45
2.16.2
64
2.20.1
46
65
47
66
diff view generated by jsdifflib
1
From: Andrey Smirnov <andrew.smirnov@gmail.com>
1
The Neon and SVE decoders use private 'plus1' functions to implement
2
"add one" for the !function decoder syntax. We have a generic
3
"plus_1" function in translate.h, so use that instead.
2
4
3
Code of imx_update() is slightly confusing since the "flags" variable
5
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
4
doesn't really corespond to anything in real hardware and server as a
6
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
5
kitchensink accumulating events normally reported via USR1 and USR2
7
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
6
registers.
8
Message-id: 20210715095341.701-1-peter.maydell@linaro.org
9
---
10
target/arm/neon-ls.decode | 4 ++--
11
target/arm/neon-shared.decode | 2 +-
12
target/arm/sve.decode | 2 +-
13
target/arm/translate-neon.c | 5 -----
14
target/arm/translate-sve.c | 5 -----
15
5 files changed, 4 insertions(+), 14 deletions(-)
7
16
8
Change the code to explicitly evaluate state of interrupts reported
17
diff --git a/target/arm/neon-ls.decode b/target/arm/neon-ls.decode
9
via USR1 and USR2 against corresponding masking bits and use the to
10
detemine if IRQ line should be asserted or not.
11
12
NOTE: Check for UTS1_TXEMPTY being set has been dropped for two
13
reasons:
14
15
1. Emulation code implements a single character FIFO, so this flag
16
will always be set since characters are trasmitted as a part of
17
the code emulating "push" into the FIFO
18
19
2. imx_update() is really just a function doing ORing and maksing
20
of reported events, so checking for UTS1_TXEMPTY should happen,
21
if it's ever really needed should probably happen outside of
22
it.
23
24
Cc: qemu-devel@nongnu.org
25
Cc: qemu-arm@nongnu.org
26
Cc: Bill Paul <wpaul@windriver.com>
27
Cc: Peter Maydell <peter.maydell@linaro.org>
28
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
29
Message-id: 20180315191141.6789-1-andrew.smirnov@gmail.com
30
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
31
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
32
---
33
hw/char/imx_serial.c | 24 ++++++++++++++++--------
34
1 file changed, 16 insertions(+), 8 deletions(-)
35
36
diff --git a/hw/char/imx_serial.c b/hw/char/imx_serial.c
37
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
38
--- a/hw/char/imx_serial.c
19
--- a/target/arm/neon-ls.decode
39
+++ b/hw/char/imx_serial.c
20
+++ b/target/arm/neon-ls.decode
40
@@ -XXX,XX +XXX,XX @@ static const VMStateDescription vmstate_imx_serial = {
21
@@ -XXX,XX +XXX,XX @@ VLD_all_lanes 1111 0100 1 . 1 0 rn:4 .... 11 n:2 size:2 t:1 a:1 rm:4 \
41
22
vd=%vd_dp
42
static void imx_update(IMXSerialState *s)
23
24
# Neon load/store single structure to one lane
25
-%imm1_5_p1 5:1 !function=plus1
26
-%imm1_6_p1 6:1 !function=plus1
27
+%imm1_5_p1 5:1 !function=plus_1
28
+%imm1_6_p1 6:1 !function=plus_1
29
30
VLDST_single 1111 0100 1 . l:1 0 rn:4 .... 00 n:2 reg_idx:3 align:1 rm:4 \
31
vd=%vd_dp size=0 stride=1
32
diff --git a/target/arm/neon-shared.decode b/target/arm/neon-shared.decode
33
index XXXXXXX..XXXXXXX 100644
34
--- a/target/arm/neon-shared.decode
35
+++ b/target/arm/neon-shared.decode
36
@@ -XXX,XX +XXX,XX @@
37
# which is 0 for fp16 and 1 for fp32 into a MO_* constant.
38
# (Note that this is the reverse of the sense of the 1-bit size
39
# field in the 3same_fp Neon insns.)
40
-%vcadd_size 20:1 !function=plus1
41
+%vcadd_size 20:1 !function=plus_1
42
43
VCMLA 1111 110 rot:2 . 1 . .... .... 1000 . q:1 . 0 .... \
44
vm=%vm_dp vn=%vn_dp vd=%vd_dp size=%vcadd_size
45
diff --git a/target/arm/sve.decode b/target/arm/sve.decode
46
index XXXXXXX..XXXXXXX 100644
47
--- a/target/arm/sve.decode
48
+++ b/target/arm/sve.decode
49
@@ -XXX,XX +XXX,XX @@
50
###########################################################################
51
# Named fields. These are primarily for disjoint fields.
52
53
-%imm4_16_p1 16:4 !function=plus1
54
+%imm4_16_p1 16:4 !function=plus_1
55
%imm6_22_5 22:1 5:5
56
%imm7_22_16 22:2 16:5
57
%imm8_16_10 16:5 10:3
58
diff --git a/target/arm/translate-neon.c b/target/arm/translate-neon.c
59
index XXXXXXX..XXXXXXX 100644
60
--- a/target/arm/translate-neon.c
61
+++ b/target/arm/translate-neon.c
62
@@ -XXX,XX +XXX,XX @@
63
#include "translate.h"
64
#include "translate-a32.h"
65
66
-static inline int plus1(DisasContext *s, int x)
67
-{
68
- return x + 1;
69
-}
70
-
71
static inline int neon_3same_fp_size(DisasContext *s, int x)
43
{
72
{
44
- uint32_t flags;
73
/* Convert 0==fp32, 1==fp16 into a MO_* value */
45
+ uint32_t usr1;
74
diff --git a/target/arm/translate-sve.c b/target/arm/translate-sve.c
46
+ uint32_t usr2;
75
index XXXXXXX..XXXXXXX 100644
47
+ uint32_t mask;
76
--- a/target/arm/translate-sve.c
48
77
+++ b/target/arm/translate-sve.c
49
- flags = (s->usr1 & s->ucr1) & (USR1_TRDY|USR1_RRDY);
78
@@ -XXX,XX +XXX,XX @@ static int tszimm_shl(DisasContext *s, int x)
50
- if (s->ucr1 & UCR1_TXMPTYEN) {
79
return x - (8 << tszimm_esz(s, x));
51
- flags |= (s->uts1 & UTS1_TXEMPTY);
52
- } else {
53
- flags &= ~USR1_TRDY;
54
- }
55
+ /*
56
+ * Lucky for us TRDY and RRDY has the same offset in both USR1 and
57
+ * UCR1, so we can get away with something as simple as the
58
+ * following:
59
+ */
60
+ usr1 = s->usr1 & s->ucr1 & (USR1_TRDY | USR1_RRDY);
61
+ /*
62
+ * Bits that we want in USR2 are not as conveniently laid out,
63
+ * unfortunately.
64
+ */
65
+ mask = (s->ucr1 & UCR1_TXMPTYEN) ? USR2_TXFE : 0;
66
+ usr2 = s->usr2 & mask;
67
68
- qemu_set_irq(s->irq, !!flags);
69
+ qemu_set_irq(s->irq, usr1 || usr2);
70
}
80
}
71
81
72
static void imx_serial_reset(IMXSerialState *s)
82
-static inline int plus1(DisasContext *s, int x)
83
-{
84
- return x + 1;
85
-}
86
-
87
/* The SH bit is in bit 8. Extract the low 8 and shift. */
88
static inline int expand_imm_sh8s(DisasContext *s, int x)
89
{
73
--
90
--
74
2.16.2
91
2.20.1
75
92
76
93
diff view generated by jsdifflib