1
The following changes since commit 3757b0d08b399c609954cf57f273b1167e5d7a8d:
1
The following changes since commit a95260486aa7e78d7c7194eba65cf03311ad94ad:
2
2
3
Merge tag 'pull-request-2022-05-18' of https://gitlab.com/thuth/qemu into staging (2022-05-20 08:04:30 -0700)
3
Merge tag 'pull-tcg-20231023' of https://gitlab.com/rth7680/qemu into staging (2023-10-23 14:45:46 -0700)
4
4
5
are available in the Git repository at:
5
are available in the Git repository at:
6
6
7
https://github.com/legoater/qemu/ tags/pull-aspeed-20220525
7
https://github.com/legoater/qemu/ tags/pull-aspeed-20231025
8
8
9
for you to fetch changes up to 52bcd997800fab67d57bea6d93e368f6f7a93b24:
9
for you to fetch changes up to dd41ce7a6f13ad4f45ebaf52b9fa91fe5fc961df:
10
10
11
hw/arm/aspeed: Add i2c devices for AST2600 EVB (2022-05-25 16:22:37 +0200)
11
hw/arm/aspeed: Move AspeedSoCState::cpu/vic to Aspeed2400SoCState (2023-10-25 09:52:44 +0200)
12
12
13
----------------------------------------------------------------
13
----------------------------------------------------------------
14
aspeed queue:
14
aspeed queue:
15
15
16
* Aspeed GPIO model extensions
16
* Update of Andrew's email
17
* GPIO support for the Aspeed AST1030 SoC
17
* Split of AspeedSoCState per 2400/2600/10x0
18
* New fby35 machine (AST2600 based)
19
* Extra unit tests for the GPIO and SMC models
20
* Initialization of all UART with serial devices
21
* AST2600 EVB and Documentation update
22
18
23
----------------------------------------------------------------
19
----------------------------------------------------------------
24
Cédric Le Goater (1):
20
Andrew Jeffery (1):
25
aspeed: Introduce a get_irq AspeedSoCClass method
21
MAINTAINERS: aspeed: Update Andrew's email address
26
22
27
Howard Chiu (1):
23
Philippe Mathieu-Daudé (11):
28
hw/arm/aspeed: Add i2c devices for AST2600 EVB
24
hw/arm/aspeed: Extract code common to all boards to a common file
25
hw/arm/aspeed: Rename aspeed_soc_init() as AST2400/2500 specific
26
hw/arm/aspeed: Rename aspeed_soc_realize() as AST2400/2500 specific
27
hw/arm/aspeed: Dynamically allocate AspeedMachineState::soc field
28
hw/arm/aspeed: Introduce TYPE_ASPEED10X0_SOC
29
hw/arm/aspeed: Introduce TYPE_ASPEED2600_SOC
30
hw/arm/aspeed: Introduce TYPE_ASPEED2400_SOC
31
hw/arm/aspeed: Check 'memory' link is set in common aspeed_soc_realize
32
hw/arm/aspeed: Move AspeedSoCState::armv7m to Aspeed10x0SoCState
33
hw/arm/aspeed: Move AspeedSoCState::a7mpcore to Aspeed2600SoCState
34
hw/arm/aspeed: Move AspeedSoCState::cpu/vic to Aspeed2400SoCState
29
35
30
Iris Chen (1):
36
MAINTAINERS | 2 +-
31
hw: m25p80: allow write_enable latch get/set
37
include/hw/arm/aspeed_soc.h | 35 +++++-
38
hw/arm/aspeed.c | 101 +++++++--------
39
hw/arm/aspeed_ast10x0.c | 53 ++++----
40
hw/arm/{aspeed_soc.c => aspeed_ast2400.c} | 197 +++++++-----------------------
41
hw/arm/aspeed_ast2600.c | 75 ++++++------
42
hw/arm/aspeed_soc_common.c | 154 +++++++++++++++++++++++
43
hw/arm/fby35.c | 27 ++--
44
hw/arm/meson.build | 3 +-
45
9 files changed, 363 insertions(+), 284 deletions(-)
46
rename hw/arm/{aspeed_soc.c => aspeed_ast2400.c} (76%)
47
create mode 100644 hw/arm/aspeed_soc_common.c
32
48
33
Jamin Lin (5):
34
docs: add minibmc section in aspeed document
35
hw/gpio Add GPIO read/write trace event.
36
hw/gpio: Add ASPEED GPIO model for AST1030
37
hw/gpio support GPIO index mode for write operation.
38
hw/gpio: replace HWADDR_PRIx with PRIx64
39
40
Peter Delevoryas (7):
41
hw/arm/aspeed: Add fby35 machine type
42
docs: aspeed: Add fby35 board
43
hw: aspeed: Add missing UART's
44
hw: aspeed: Add uarts_num SoC attribute
45
hw: aspeed: Ensure AST1030 respects uart-default
46
hw: aspeed: Introduce common UART init function
47
hw: aspeed: Init all UART's with serial devices
48
49
docs/system/arm/aspeed.rst | 62 ++++++++++
50
include/hw/arm/aspeed_soc.h | 13 +++
51
include/hw/gpio/aspeed_gpio.h | 16 ++-
52
tests/qtest/libqtest.h | 22 ++++
53
hw/arm/aspeed.c | 74 +++++++++++-
54
hw/arm/aspeed_ast10x0.c | 48 ++++++--
55
hw/arm/aspeed_ast2600.c | 32 +++--
56
hw/arm/aspeed_soc.c | 46 ++++++--
57
hw/block/m25p80.c | 1 +
58
hw/gpio/aspeed_gpio.c | 257 ++++++++++++++++++++++++++++++++++++++---
59
tests/qtest/aspeed_gpio-test.c | 40 ++-----
60
tests/qtest/aspeed_smc-test.c | 43 +++++++
61
tests/qtest/libqtest.c | 24 ++++
62
hw/gpio/trace-events | 4 +
63
14 files changed, 607 insertions(+), 75 deletions(-)
64
diff view generated by jsdifflib
Deleted patch
1
From: Jamin Lin <jamin_lin@aspeedtech.com>
2
1
3
Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
4
Reviewed-by: Cédric Le Goater <clg@kaod.org>
5
Message-Id: <20220506031521.13254-2-jamin_lin@aspeedtech.com>
6
Signed-off-by: Cédric Le Goater <clg@kaod.org>
7
---
8
docs/system/arm/aspeed.rst | 61 ++++++++++++++++++++++++++++++++++++++
9
1 file changed, 61 insertions(+)
10
11
diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst
12
index XXXXXXX..XXXXXXX 100644
13
--- a/docs/system/arm/aspeed.rst
14
+++ b/docs/system/arm/aspeed.rst
15
@@ -XXX,XX +XXX,XX @@ FMC chip and a bigger (64M) SPI chip, use :
16
.. code-block:: bash
17
18
-M ast2500-evb,fmc-model=mx25l25635e,spi-model=mx66u51235f
19
+
20
+
21
+Aspeed minibmc family boards (``ast1030-evb``)
22
+==================================================================
23
+
24
+The QEMU Aspeed machines model mini BMCs of various Aspeed evaluation
25
+boards. They are based on different releases of the
26
+Aspeed SoC : the AST1030 integrating an ARM Cortex M4F CPU (200MHz).
27
+
28
+The SoC comes with SRAM, SPI, I2C, etc.
29
+
30
+AST1030 SoC based machines :
31
+
32
+- ``ast1030-evb`` Aspeed AST1030 Evaluation board (Cortex-M4F)
33
+
34
+Supported devices
35
+-----------------
36
+
37
+ * SMP (for the AST1030 Cortex-M4F)
38
+ * Interrupt Controller (VIC)
39
+ * Timer Controller
40
+ * I2C Controller
41
+ * System Control Unit (SCU)
42
+ * SRAM mapping
43
+ * Static Memory Controller (SMC or FMC) - Only SPI Flash support
44
+ * SPI Memory Controller
45
+ * USB 2.0 Controller
46
+ * Watchdog Controller
47
+ * GPIO Controller (Master only)
48
+ * UART
49
+ * LPC Peripheral Controller (a subset of subdevices are supported)
50
+ * Hash/Crypto Engine (HACE) - Hash support only. TODO: HMAC and RSA
51
+ * ADC
52
+
53
+
54
+Missing devices
55
+---------------
56
+
57
+ * PWM and Fan Controller
58
+ * Slave GPIO Controller
59
+ * PECI Controller
60
+ * Mailbox Controller
61
+ * Virtual UART
62
+ * eSPI Controller
63
+ * I3C Controller
64
+
65
+Boot options
66
+------------
67
+
68
+The Aspeed machines can be started using the ``-kernel`` to load a
69
+Zephyr OS or from a firmware. Images can be downloaded from the
70
+ASPEED GitHub release repository :
71
+
72
+ https://github.com/AspeedTech-BMC/zephyr/releases
73
+
74
+To boot a kernel directly from a Zephyr build tree:
75
+
76
+.. code-block:: bash
77
+
78
+ $ qemu-system-arm -M ast1030-evb -nographic \
79
+ -kernel zephyr.elf
80
--
81
2.35.3
82
83
diff view generated by jsdifflib
1
From: Jamin Lin <jamin_lin@aspeedtech.com>
1
From: Andrew Jeffery <andrew@codeconstruct.com.au>
2
2
3
It did not support GPIO index mode for read operation.
3
I've changed employers, have company email that deals with patch-based
4
workflows without too much of a headache, and am trying to steer some
5
content out of my personal mail.
4
6
5
Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
7
Signed-off-by: Andrew Jeffery <andrew@codeconstruct.com.au>
6
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Message-Id: <20220525053444.27228-4-jamin_lin@aspeedtech.com>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
---
9
---
10
include/hw/gpio/aspeed_gpio.h | 14 +++
10
MAINTAINERS | 2 +-
11
hw/gpio/aspeed_gpio.c | 168 ++++++++++++++++++++++++++++++++++
11
1 file changed, 1 insertion(+), 1 deletion(-)
12
2 files changed, 182 insertions(+)
13
12
14
diff --git a/include/hw/gpio/aspeed_gpio.h b/include/hw/gpio/aspeed_gpio.h
13
diff --git a/MAINTAINERS b/MAINTAINERS
15
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
16
--- a/include/hw/gpio/aspeed_gpio.h
15
--- a/MAINTAINERS
17
+++ b/include/hw/gpio/aspeed_gpio.h
16
+++ b/MAINTAINERS
18
@@ -XXX,XX +XXX,XX @@ enum GPIORegType {
17
@@ -XXX,XX +XXX,XX @@ F: docs/system/arm/emcraft-sf2.rst
19
gpio_reg_input_mask,
18
ASPEED BMCs
20
};
19
M: Cédric Le Goater <clg@kaod.org>
21
20
M: Peter Maydell <peter.maydell@linaro.org>
22
+/* GPIO index mode */
21
-R: Andrew Jeffery <andrew@aj.id.au>
23
+enum GPIORegIndexType {
22
+R: Andrew Jeffery <andrew@codeconstruct.com.au>
24
+ gpio_reg_idx_data = 0,
23
R: Joel Stanley <joel@jms.id.au>
25
+ gpio_reg_idx_direction,
24
L: qemu-arm@nongnu.org
26
+ gpio_reg_idx_interrupt,
25
S: Maintained
27
+ gpio_reg_idx_debounce,
28
+ gpio_reg_idx_tolerance,
29
+ gpio_reg_idx_cmd_src,
30
+ gpio_reg_idx_input_mask,
31
+ gpio_reg_idx_reserved,
32
+ gpio_reg_idx_new_w_cmd_src,
33
+ gpio_reg_idx_new_r_cmd_src,
34
+};
35
+
36
typedef struct AspeedGPIOReg {
37
uint16_t set_idx;
38
enum GPIORegType type;
39
diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c
40
index XXXXXXX..XXXXXXX 100644
41
--- a/hw/gpio/aspeed_gpio.c
42
+++ b/hw/gpio/aspeed_gpio.c
43
@@ -XXX,XX +XXX,XX @@
44
#include "hw/irq.h"
45
#include "migration/vmstate.h"
46
#include "trace.h"
47
+#include "hw/registerfields.h"
48
49
#define GPIOS_PER_GROUP 8
50
51
@@ -XXX,XX +XXX,XX @@
52
#define GPIO_1_8V_MEM_SIZE 0x1D8
53
#define GPIO_1_8V_REG_ARRAY_SIZE (GPIO_1_8V_MEM_SIZE >> 2)
54
55
+/*
56
+ * GPIO index mode support
57
+ * It only supports write operation
58
+ */
59
+REG32(GPIO_INDEX_REG, 0x2AC)
60
+ FIELD(GPIO_INDEX_REG, NUMBER, 0, 8)
61
+ FIELD(GPIO_INDEX_REG, COMMAND, 12, 1)
62
+ FIELD(GPIO_INDEX_REG, TYPE, 16, 4)
63
+ FIELD(GPIO_INDEX_REG, DATA_VALUE, 20, 1)
64
+ FIELD(GPIO_INDEX_REG, DIRECTION, 20, 1)
65
+ FIELD(GPIO_INDEX_REG, INT_ENABLE, 20, 1)
66
+ FIELD(GPIO_INDEX_REG, INT_SENS_0, 21, 1)
67
+ FIELD(GPIO_INDEX_REG, INT_SENS_1, 22, 1)
68
+ FIELD(GPIO_INDEX_REG, INT_SENS_2, 23, 1)
69
+ FIELD(GPIO_INDEX_REG, INT_STATUS, 24, 1)
70
+ FIELD(GPIO_INDEX_REG, DEBOUNCE_1, 20, 1)
71
+ FIELD(GPIO_INDEX_REG, DEBOUNCE_2, 21, 1)
72
+ FIELD(GPIO_INDEX_REG, RESET_TOLERANT, 20, 1)
73
+ FIELD(GPIO_INDEX_REG, COMMAND_SRC_0, 20, 1)
74
+ FIELD(GPIO_INDEX_REG, COMMAND_SRC_1, 21, 1)
75
+ FIELD(GPIO_INDEX_REG, INPUT_MASK, 20, 1)
76
+
77
static int aspeed_evaluate_irq(GPIOSets *regs, int gpio_prev_high, int gpio)
78
{
79
uint32_t falling_edge = 0, rising_edge = 0;
80
@@ -XXX,XX +XXX,XX @@ static uint64_t aspeed_gpio_read(void *opaque, hwaddr offset, uint32_t size)
81
return value;
82
}
83
84
+static void aspeed_gpio_write_index_mode(void *opaque, hwaddr offset,
85
+ uint64_t data, uint32_t size)
86
+{
87
+
88
+ AspeedGPIOState *s = ASPEED_GPIO(opaque);
89
+ AspeedGPIOClass *agc = ASPEED_GPIO_GET_CLASS(s);
90
+ const GPIOSetProperties *props;
91
+ GPIOSets *set;
92
+ uint32_t reg_idx_number = FIELD_EX32(data, GPIO_INDEX_REG, NUMBER);
93
+ uint32_t reg_idx_type = FIELD_EX32(data, GPIO_INDEX_REG, TYPE);
94
+ uint32_t reg_idx_command = FIELD_EX32(data, GPIO_INDEX_REG, COMMAND);
95
+ uint32_t set_idx = reg_idx_number / ASPEED_GPIOS_PER_SET;
96
+ uint32_t pin_idx = reg_idx_number % ASPEED_GPIOS_PER_SET;
97
+ uint32_t group_idx = pin_idx / GPIOS_PER_GROUP;
98
+ uint32_t reg_value = 0;
99
+ uint32_t cleared;
100
+
101
+ set = &s->sets[set_idx];
102
+ props = &agc->props[set_idx];
103
+
104
+ if (reg_idx_command)
105
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: offset 0x%" PRIx64 "data 0x%"
106
+ PRIx64 "index mode wrong command 0x%x\n",
107
+ __func__, offset, data, reg_idx_command);
108
+
109
+ switch (reg_idx_type) {
110
+ case gpio_reg_idx_data:
111
+ reg_value = set->data_read;
112
+ reg_value = deposit32(reg_value, pin_idx, 1,
113
+ FIELD_EX32(data, GPIO_INDEX_REG, DATA_VALUE));
114
+ reg_value &= props->output;
115
+ reg_value = update_value_control_source(set, set->data_value,
116
+ reg_value);
117
+ set->data_read = reg_value;
118
+ aspeed_gpio_update(s, set, reg_value);
119
+ return;
120
+ case gpio_reg_idx_direction:
121
+ reg_value = set->direction;
122
+ reg_value = deposit32(reg_value, pin_idx, 1,
123
+ FIELD_EX32(data, GPIO_INDEX_REG, DIRECTION));
124
+ /*
125
+ * where data is the value attempted to be written to the pin:
126
+ * pin type | input mask | output mask | expected value
127
+ * ------------------------------------------------------------
128
+ * bidirectional | 1 | 1 | data
129
+ * input only | 1 | 0 | 0
130
+ * output only | 0 | 1 | 1
131
+ * no pin | 0 | 0 | 0
132
+ *
133
+ * which is captured by:
134
+ * data = ( data | ~input) & output;
135
+ */
136
+ reg_value = (reg_value | ~props->input) & props->output;
137
+ set->direction = update_value_control_source(set, set->direction,
138
+ reg_value);
139
+ break;
140
+ case gpio_reg_idx_interrupt:
141
+ reg_value = set->int_enable;
142
+ reg_value = deposit32(reg_value, pin_idx, 1,
143
+ FIELD_EX32(data, GPIO_INDEX_REG, INT_ENABLE));
144
+ set->int_enable = update_value_control_source(set, set->int_enable,
145
+ reg_value);
146
+ reg_value = set->int_sens_0;
147
+ reg_value = deposit32(reg_value, pin_idx, 1,
148
+ FIELD_EX32(data, GPIO_INDEX_REG, INT_SENS_0));
149
+ set->int_sens_0 = update_value_control_source(set, set->int_sens_0,
150
+ reg_value);
151
+ reg_value = set->int_sens_1;
152
+ reg_value = deposit32(reg_value, pin_idx, 1,
153
+ FIELD_EX32(data, GPIO_INDEX_REG, INT_SENS_1));
154
+ set->int_sens_1 = update_value_control_source(set, set->int_sens_1,
155
+ reg_value);
156
+ reg_value = set->int_sens_2;
157
+ reg_value = deposit32(reg_value, pin_idx, 1,
158
+ FIELD_EX32(data, GPIO_INDEX_REG, INT_SENS_2));
159
+ set->int_sens_2 = update_value_control_source(set, set->int_sens_2,
160
+ reg_value);
161
+ /* set interrupt status */
162
+ reg_value = set->int_status;
163
+ reg_value = deposit32(reg_value, pin_idx, 1,
164
+ FIELD_EX32(data, GPIO_INDEX_REG, INT_STATUS));
165
+ cleared = ctpop32(reg_value & set->int_status);
166
+ if (s->pending && cleared) {
167
+ assert(s->pending >= cleared);
168
+ s->pending -= cleared;
169
+ }
170
+ set->int_status &= ~reg_value;
171
+ break;
172
+ case gpio_reg_idx_debounce:
173
+ reg_value = set->debounce_1;
174
+ reg_value = deposit32(reg_value, pin_idx, 1,
175
+ FIELD_EX32(data, GPIO_INDEX_REG, DEBOUNCE_1));
176
+ set->debounce_1 = update_value_control_source(set, set->debounce_1,
177
+ reg_value);
178
+ reg_value = set->debounce_2;
179
+ reg_value = deposit32(reg_value, pin_idx, 1,
180
+ FIELD_EX32(data, GPIO_INDEX_REG, DEBOUNCE_2));
181
+ set->debounce_2 = update_value_control_source(set, set->debounce_2,
182
+ reg_value);
183
+ return;
184
+ case gpio_reg_idx_tolerance:
185
+ reg_value = set->reset_tol;
186
+ reg_value = deposit32(reg_value, pin_idx, 1,
187
+ FIELD_EX32(data, GPIO_INDEX_REG, RESET_TOLERANT));
188
+ set->reset_tol = update_value_control_source(set, set->reset_tol,
189
+ reg_value);
190
+ return;
191
+ case gpio_reg_idx_cmd_src:
192
+ reg_value = set->cmd_source_0;
193
+ reg_value = deposit32(reg_value, GPIOS_PER_GROUP * group_idx, 1,
194
+ FIELD_EX32(data, GPIO_INDEX_REG, COMMAND_SRC_0));
195
+ set->cmd_source_0 = reg_value & ASPEED_CMD_SRC_MASK;
196
+ reg_value = set->cmd_source_1;
197
+ reg_value = deposit32(reg_value, GPIOS_PER_GROUP * group_idx, 1,
198
+ FIELD_EX32(data, GPIO_INDEX_REG, COMMAND_SRC_1));
199
+ set->cmd_source_1 = reg_value & ASPEED_CMD_SRC_MASK;
200
+ return;
201
+ case gpio_reg_idx_input_mask:
202
+ reg_value = set->input_mask;
203
+ reg_value = deposit32(reg_value, pin_idx, 1,
204
+ FIELD_EX32(data, GPIO_INDEX_REG, INPUT_MASK));
205
+ /*
206
+ * feeds into interrupt generation
207
+ * 0: read from data value reg will be updated
208
+ * 1: read from data value reg will not be updated
209
+ */
210
+ set->input_mask = reg_value & props->input;
211
+ break;
212
+ default:
213
+ qemu_log_mask(LOG_GUEST_ERROR, "%s: offset 0x%" PRIx64 "data 0x%"
214
+ PRIx64 "index mode wrong type 0x%x\n",
215
+ __func__, offset, data, reg_idx_type);
216
+ return;
217
+ }
218
+ aspeed_gpio_update(s, set, set->data_value);
219
+ return;
220
+}
221
+
222
static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
223
uint32_t size)
224
{
225
@@ -XXX,XX +XXX,XX @@ static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
226
trace_aspeed_gpio_write(offset, data);
227
228
idx = offset >> 2;
229
+
230
+ /* check gpio index mode */
231
+ if (idx == R_GPIO_INDEX_REG) {
232
+ aspeed_gpio_write_index_mode(opaque, offset, data, size);
233
+ return;
234
+ }
235
+
236
if (idx >= GPIO_DEBOUNCE_TIME_1 && idx <= GPIO_DEBOUNCE_TIME_3) {
237
idx -= GPIO_DEBOUNCE_TIME_1;
238
s->debounce_regs[idx] = (uint32_t) data;
239
--
26
--
240
2.35.3
27
2.41.0
241
28
242
29
diff view generated by jsdifflib
1
From: Peter Delevoryas <pdel@fb.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
Add the 'fby35-bmc' machine type based on the kernel DTS[1] and userspace
3
aspeed_soc.c contains definitions specific to the AST2400
4
i2c setup scripts[2]. Undefined values are inherited from the AST2600-EVB.
4
and AST2500 SoCs, but also some definitions for other AST
5
5
SoCs: move them to a common file.
6
Reference images can be found in Facebook OpenBMC Github Release assets
6
7
as "fby35.mtd". [3]
7
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
8
9
You can boot the reference images as follows (fby35 uses dual-flash):
10
11
qemu-system-arm -machine fby35-bmc \
12
-drive file=fby35.mtd,format=raw,if=mtd \
13
-drive file=fby35.mtd,format=raw,if=mtd \
14
-nographic
15
16
[1] https://github.com/facebook/openbmc-linux/blob/412d5053258007117e94b1e36015aefc1301474b/arch/arm/boot/dts/aspeed-bmc-facebook-fby35.dts
17
[2] https://github.com/facebook/openbmc/blob/e2294ff5d31dd65c248fe396a385286d6d5c463d/meta-facebook/meta-fby35/recipes-fby35/plat-utils/files/setup-dev.sh
18
[3] https://github.com/facebook/openbmc/releases
19
20
Signed-off-by: Peter Delevoryas <pdel@fb.com>
21
Reviewed-by: Cédric Le Goater <clg@kaod.org>
8
Reviewed-by: Cédric Le Goater <clg@kaod.org>
22
Message-Id: <20220503225925.1798324-2-pdel@fb.com>
23
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
Signed-off-by: Cédric Le Goater <clg@kaod.org>
24
---
10
---
25
hw/arm/aspeed.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++
11
hw/arm/aspeed_soc.c | 96 -------------------------------
26
1 file changed, 63 insertions(+)
12
hw/arm/aspeed_soc_common.c | 114 +++++++++++++++++++++++++++++++++++++
27
13
hw/arm/meson.build | 1 +
28
diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
14
3 files changed, 115 insertions(+), 96 deletions(-)
15
create mode 100644 hw/arm/aspeed_soc_common.c
16
17
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
29
index XXXXXXX..XXXXXXX 100644
18
index XXXXXXX..XXXXXXX 100644
30
--- a/hw/arm/aspeed.c
19
--- a/hw/arm/aspeed_soc.c
31
+++ b/hw/arm/aspeed.c
20
+++ b/hw/arm/aspeed_soc.c
21
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_register_types(void)
22
};
23
24
type_init(aspeed_soc_register_types);
25
-
26
-qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev)
27
-{
28
- return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev);
29
-}
30
-
31
-bool aspeed_soc_uart_realize(AspeedSoCState *s, Error **errp)
32
-{
33
- AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
34
- SerialMM *smm;
35
-
36
- for (int i = 0, uart = ASPEED_DEV_UART1; i < sc->uarts_num; i++, uart++) {
37
- smm = &s->uart[i];
38
-
39
- /* Chardev property is set by the machine. */
40
- qdev_prop_set_uint8(DEVICE(smm), "regshift", 2);
41
- qdev_prop_set_uint32(DEVICE(smm), "baudbase", 38400);
42
- qdev_set_legacy_instance_id(DEVICE(smm), sc->memmap[uart], 2);
43
- qdev_prop_set_uint8(DEVICE(smm), "endianness", DEVICE_LITTLE_ENDIAN);
44
- if (!sysbus_realize(SYS_BUS_DEVICE(smm), errp)) {
45
- return false;
46
- }
47
-
48
- sysbus_connect_irq(SYS_BUS_DEVICE(smm), 0, aspeed_soc_get_irq(s, uart));
49
- aspeed_mmio_map(s, SYS_BUS_DEVICE(smm), 0, sc->memmap[uart]);
50
- }
51
-
52
- return true;
53
-}
54
-
55
-void aspeed_soc_uart_set_chr(AspeedSoCState *s, int dev, Chardev *chr)
56
-{
57
- AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
58
- int i = dev - ASPEED_DEV_UART1;
59
-
60
- g_assert(0 <= i && i < ARRAY_SIZE(s->uart) && i < sc->uarts_num);
61
- qdev_prop_set_chr(DEVICE(&s->uart[i]), "chardev", chr);
62
-}
63
-
64
-/*
65
- * SDMC should be realized first to get correct RAM size and max size
66
- * values
67
- */
68
-bool aspeed_soc_dram_init(AspeedSoCState *s, Error **errp)
69
-{
70
- AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
71
- ram_addr_t ram_size, max_ram_size;
72
-
73
- ram_size = object_property_get_uint(OBJECT(&s->sdmc), "ram-size",
74
- &error_abort);
75
- max_ram_size = object_property_get_uint(OBJECT(&s->sdmc), "max-ram-size",
76
- &error_abort);
77
-
78
- memory_region_init(&s->dram_container, OBJECT(s), "ram-container",
79
- max_ram_size);
80
- memory_region_add_subregion(&s->dram_container, 0, s->dram_mr);
81
-
82
- /*
83
- * Add a memory region beyond the RAM region to let firmwares scan
84
- * the address space with load/store and guess how much RAM the
85
- * SoC has.
86
- */
87
- if (ram_size < max_ram_size) {
88
- DeviceState *dev = qdev_new(TYPE_UNIMPLEMENTED_DEVICE);
89
-
90
- qdev_prop_set_string(dev, "name", "ram-empty");
91
- qdev_prop_set_uint64(dev, "size", max_ram_size - ram_size);
92
- if (!sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp)) {
93
- return false;
94
- }
95
-
96
- memory_region_add_subregion_overlap(&s->dram_container, ram_size,
97
- sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0), -1000);
98
- }
99
-
100
- memory_region_add_subregion(s->memory,
101
- sc->memmap[ASPEED_DEV_SDRAM], &s->dram_container);
102
- return true;
103
-}
104
-
105
-void aspeed_mmio_map(AspeedSoCState *s, SysBusDevice *dev, int n, hwaddr addr)
106
-{
107
- memory_region_add_subregion(s->memory, addr,
108
- sysbus_mmio_get_region(dev, n));
109
-}
110
-
111
-void aspeed_mmio_map_unimplemented(AspeedSoCState *s, SysBusDevice *dev,
112
- const char *name, hwaddr addr, uint64_t size)
113
-{
114
- qdev_prop_set_string(DEVICE(dev), "name", name);
115
- qdev_prop_set_uint64(DEVICE(dev), "size", size);
116
- sysbus_realize(dev, &error_abort);
117
-
118
- memory_region_add_subregion_overlap(s->memory, addr,
119
- sysbus_mmio_get_region(dev, 0), -1000);
120
-}
121
diff --git a/hw/arm/aspeed_soc_common.c b/hw/arm/aspeed_soc_common.c
122
new file mode 100644
123
index XXXXXXX..XXXXXXX
124
--- /dev/null
125
+++ b/hw/arm/aspeed_soc_common.c
32
@@ -XXX,XX +XXX,XX @@
126
@@ -XXX,XX +XXX,XX @@
33
#include "hw/misc/led.h"
127
+/*
34
#include "hw/qdev-properties.h"
128
+ * ASPEED SoC family
35
#include "sysemu/block-backend.h"
129
+ *
36
+#include "sysemu/reset.h"
130
+ * Andrew Jeffery <andrew@aj.id.au>
37
#include "hw/loader.h"
131
+ * Jeremy Kerr <jk@ozlabs.org>
38
#include "qemu/error-report.h"
132
+ *
39
#include "qemu/units.h"
133
+ * Copyright 2016 IBM Corp.
40
@@ -XXX,XX +XXX,XX @@ static void bletchley_bmc_i2c_init(AspeedMachineState *bmc)
134
+ *
41
i2c_slave_create_simple(i2c[12], TYPE_PCA9552, 0x67);
135
+ * This code is licensed under the GPL version 2 or later. See
42
}
136
+ * the COPYING file in the top-level directory.
43
137
+ */
44
+static void fby35_i2c_init(AspeedMachineState *bmc)
138
+
45
+{
139
+#include "qemu/osdep.h"
46
+ AspeedSoCState *soc = &bmc->soc;
140
+#include "qapi/error.h"
47
+ I2CBus *i2c[16];
141
+#include "hw/misc/unimp.h"
48
+
142
+#include "hw/arm/aspeed_soc.h"
49
+ for (int i = 0; i < 16; i++) {
143
+#include "hw/char/serial.h"
50
+ i2c[i] = aspeed_i2c_get_bus(&soc->i2c, i);
144
+
145
+
146
+qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev)
147
+{
148
+ return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev);
149
+}
150
+
151
+bool aspeed_soc_uart_realize(AspeedSoCState *s, Error **errp)
152
+{
153
+ AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
154
+ SerialMM *smm;
155
+
156
+ for (int i = 0, uart = ASPEED_DEV_UART1; i < sc->uarts_num; i++, uart++) {
157
+ smm = &s->uart[i];
158
+
159
+ /* Chardev property is set by the machine. */
160
+ qdev_prop_set_uint8(DEVICE(smm), "regshift", 2);
161
+ qdev_prop_set_uint32(DEVICE(smm), "baudbase", 38400);
162
+ qdev_set_legacy_instance_id(DEVICE(smm), sc->memmap[uart], 2);
163
+ qdev_prop_set_uint8(DEVICE(smm), "endianness", DEVICE_LITTLE_ENDIAN);
164
+ if (!sysbus_realize(SYS_BUS_DEVICE(smm), errp)) {
165
+ return false;
166
+ }
167
+
168
+ sysbus_connect_irq(SYS_BUS_DEVICE(smm), 0, aspeed_soc_get_irq(s, uart));
169
+ aspeed_mmio_map(s, SYS_BUS_DEVICE(smm), 0, sc->memmap[uart]);
51
+ }
170
+ }
52
+
171
+
53
+ i2c_slave_create_simple(i2c[2], TYPE_LM75, 0x4f);
172
+ return true;
54
+ i2c_slave_create_simple(i2c[8], TYPE_TMP421, 0x1f);
173
+}
55
+ /* Hotswap controller is actually supposed to be mp5920 or ltc4282. */
174
+
56
+ i2c_slave_create_simple(i2c[11], "adm1272", 0x44);
175
+void aspeed_soc_uart_set_chr(AspeedSoCState *s, int dev, Chardev *chr)
57
+ i2c_slave_create_simple(i2c[12], TYPE_LM75, 0x4e);
176
+{
58
+ i2c_slave_create_simple(i2c[12], TYPE_LM75, 0x4f);
177
+ AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
59
+
178
+ int i = dev - ASPEED_DEV_UART1;
60
+ aspeed_eeprom_init(i2c[4], 0x51, 128 * KiB);
179
+
61
+ aspeed_eeprom_init(i2c[6], 0x51, 128 * KiB);
180
+ g_assert(0 <= i && i < ARRAY_SIZE(s->uart) && i < sc->uarts_num);
62
+ aspeed_eeprom_init(i2c[8], 0x50, 32 * KiB);
181
+ qdev_prop_set_chr(DEVICE(&s->uart[i]), "chardev", chr);
63
+ aspeed_eeprom_init(i2c[11], 0x51, 128 * KiB);
182
+}
64
+ aspeed_eeprom_init(i2c[11], 0x54, 128 * KiB);
183
+
184
+/*
185
+ * SDMC should be realized first to get correct RAM size and max size
186
+ * values
187
+ */
188
+bool aspeed_soc_dram_init(AspeedSoCState *s, Error **errp)
189
+{
190
+ AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
191
+ ram_addr_t ram_size, max_ram_size;
192
+
193
+ ram_size = object_property_get_uint(OBJECT(&s->sdmc), "ram-size",
194
+ &error_abort);
195
+ max_ram_size = object_property_get_uint(OBJECT(&s->sdmc), "max-ram-size",
196
+ &error_abort);
197
+
198
+ memory_region_init(&s->dram_container, OBJECT(s), "ram-container",
199
+ max_ram_size);
200
+ memory_region_add_subregion(&s->dram_container, 0, s->dram_mr);
65
+
201
+
66
+ /*
202
+ /*
67
+ * TODO: There is a multi-master i2c connection to an AST1030 MiniBMC on
203
+ * Add a memory region beyond the RAM region to let firmwares scan
68
+ * buses 0, 1, 2, 3, and 9. Source address 0x10, target address 0x20 on
204
+ * the address space with load/store and guess how much RAM the
69
+ * each.
205
+ * SoC has.
70
+ */
206
+ */
71
+}
207
+ if (ram_size < max_ram_size) {
72
+
208
+ DeviceState *dev = qdev_new(TYPE_UNIMPLEMENTED_DEVICE);
73
static bool aspeed_get_mmio_exec(Object *obj, Error **errp)
209
+
74
{
210
+ qdev_prop_set_string(dev, "name", "ram-empty");
75
return ASPEED_MACHINE(obj)->mmio_exec;
211
+ qdev_prop_set_uint64(dev, "size", max_ram_size - ram_size);
76
@@ -XXX,XX +XXX,XX @@ static void aspeed_machine_bletchley_class_init(ObjectClass *oc, void *data)
212
+ if (!sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), errp)) {
77
aspeed_soc_num_cpus(amc->soc_name);
213
+ return false;
78
}
214
+ }
79
215
+
80
+static void fby35_reset(MachineState *state)
216
+ memory_region_add_subregion_overlap(&s->dram_container, ram_size,
81
+{
217
+ sysbus_mmio_get_region(SYS_BUS_DEVICE(dev), 0), -1000);
82
+ AspeedMachineState *bmc = ASPEED_MACHINE(state);
218
+ }
83
+ AspeedGPIOState *gpio = &bmc->soc.gpio;
219
+
84
+
220
+ memory_region_add_subregion(s->memory,
85
+ qemu_devices_reset();
221
+ sc->memmap[ASPEED_DEV_SDRAM], &s->dram_container);
86
+
222
+ return true;
87
+ /* Board ID */
223
+}
88
+ object_property_set_bool(OBJECT(gpio), "gpioV4", true, &error_fatal);
224
+
89
+ object_property_set_bool(OBJECT(gpio), "gpioV5", true, &error_fatal);
225
+void aspeed_mmio_map(AspeedSoCState *s, SysBusDevice *dev, int n, hwaddr addr)
90
+ object_property_set_bool(OBJECT(gpio), "gpioV6", true, &error_fatal);
226
+{
91
+ object_property_set_bool(OBJECT(gpio), "gpioV7", false, &error_fatal);
227
+ memory_region_add_subregion(s->memory, addr,
92
+}
228
+ sysbus_mmio_get_region(dev, n));
93
+
229
+}
94
+static void aspeed_machine_fby35_class_init(ObjectClass *oc, void *data)
230
+
95
+{
231
+void aspeed_mmio_map_unimplemented(AspeedSoCState *s, SysBusDevice *dev,
96
+ MachineClass *mc = MACHINE_CLASS(oc);
232
+ const char *name, hwaddr addr, uint64_t size)
97
+ AspeedMachineClass *amc = ASPEED_MACHINE_CLASS(oc);
233
+{
98
+
234
+ qdev_prop_set_string(DEVICE(dev), "name", name);
99
+ mc->desc = "Facebook fby35 BMC (Cortex-A7)";
235
+ qdev_prop_set_uint64(DEVICE(dev), "size", size);
100
+ mc->reset = fby35_reset;
236
+ sysbus_realize(dev, &error_abort);
101
+ amc->fmc_model = "mx66l1g45g";
237
+
102
+ amc->num_cs = 2;
238
+ memory_region_add_subregion_overlap(s->memory, addr,
103
+ amc->macs_mask = ASPEED_MAC3_ON;
239
+ sysbus_mmio_get_region(dev, 0), -1000);
104
+ amc->i2c_init = fby35_i2c_init;
240
+}
105
+ /* FIXME: Replace this macro with something more general */
241
diff --git a/hw/arm/meson.build b/hw/arm/meson.build
106
+ mc->default_ram_size = FUJI_BMC_RAM_SIZE;
242
index XXXXXXX..XXXXXXX 100644
107
+}
243
--- a/hw/arm/meson.build
108
+
244
+++ b/hw/arm/meson.build
109
#define AST1030_INTERNAL_FLASH_SIZE (1024 * 1024)
245
@@ -XXX,XX +XXX,XX @@ arm_ss.add(when: 'CONFIG_FSL_IMX6', if_true: files('fsl-imx6.c'))
110
/* Main SYSCLK frequency in Hz (200MHz) */
246
arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
111
#define SYSCLK_FRQ 200000000ULL
247
'aspeed_soc.c',
112
@@ -XXX,XX +XXX,XX @@ static const TypeInfo aspeed_machine_types[] = {
248
'aspeed.c',
113
.name = MACHINE_TYPE_NAME("bletchley-bmc"),
249
+ 'aspeed_soc_common.c',
114
.parent = TYPE_ASPEED_MACHINE,
250
'aspeed_ast2600.c',
115
.class_init = aspeed_machine_bletchley_class_init,
251
'aspeed_ast10x0.c',
116
+ }, {
252
'aspeed_eeprom.c',
117
+ .name = MACHINE_TYPE_NAME("fby35-bmc"),
118
+ .parent = MACHINE_TYPE_NAME("ast2600-evb"),
119
+ .class_init = aspeed_machine_fby35_class_init,
120
}, {
121
.name = MACHINE_TYPE_NAME("ast1030-evb"),
122
.parent = TYPE_ASPEED_MACHINE,
123
--
253
--
124
2.35.3
254
2.41.0
125
255
126
256
diff view generated by jsdifflib
Deleted patch
1
From: Peter Delevoryas <pdel@fb.com>
2
1
3
Add fby35 to the list of Aspeed boards.
4
5
Signed-off-by: Peter Delevoryas <pdel@fb.com>
6
Message-Id: <20220506193354.990532-2-pdel@fb.com>
7
Signed-off-by: Cédric Le Goater <clg@kaod.org>
8
---
9
docs/system/arm/aspeed.rst | 1 +
10
1 file changed, 1 insertion(+)
11
12
diff --git a/docs/system/arm/aspeed.rst b/docs/system/arm/aspeed.rst
13
index XXXXXXX..XXXXXXX 100644
14
--- a/docs/system/arm/aspeed.rst
15
+++ b/docs/system/arm/aspeed.rst
16
@@ -XXX,XX +XXX,XX @@ AST2600 SoC based machines :
17
- ``tacoma-bmc`` OpenPOWER Witherspoon POWER9 AST2600 BMC
18
- ``rainier-bmc`` IBM Rainier POWER10 BMC
19
- ``fuji-bmc`` Facebook Fuji BMC
20
+- ``fby35-bmc`` Facebook fby35 BMC
21
22
Supported devices
23
-----------------
24
--
25
2.35.3
26
27
diff view generated by jsdifflib
Deleted patch
1
From: Iris Chen <irischenlj@fb.com>
2
1
3
The write_enable latch property is not currently exposed.
4
This commit makes it a modifiable property.
5
6
Signed-off-by: Iris Chen <irischenlj@fb.com>
7
Acked-by: Thomas Huth <thuth@redhat.com>
8
Reviewed-by: Cédric Le Goater <clg@kaod.org>
9
Reviewed-by: Francisco Iglesias <frasse.iglesias@gmail.com>
10
Message-Id: <20220513055022.951759-1-irischenlj@fb.com>
11
Signed-off-by: Cédric Le Goater <clg@kaod.org>
12
---
13
tests/qtest/libqtest.h | 22 +++++++++++++++++
14
hw/block/m25p80.c | 1 +
15
tests/qtest/aspeed_gpio-test.c | 40 +++++++------------------------
16
tests/qtest/aspeed_smc-test.c | 43 ++++++++++++++++++++++++++++++++++
17
tests/qtest/libqtest.c | 24 +++++++++++++++++++
18
5 files changed, 98 insertions(+), 32 deletions(-)
19
20
diff --git a/tests/qtest/libqtest.h b/tests/qtest/libqtest.h
21
index XXXXXXX..XXXXXXX 100644
22
--- a/tests/qtest/libqtest.h
23
+++ b/tests/qtest/libqtest.h
24
@@ -XXX,XX +XXX,XX @@ QTestState *qtest_inproc_init(QTestState **s, bool log, const char* arch,
25
void (*send)(void*, const char*));
26
27
void qtest_client_inproc_recv(void *opaque, const char *str);
28
+
29
+/**
30
+ * qtest_qom_set_bool:
31
+ * @s: QTestState instance to operate on.
32
+ * @path: Path to the property being set.
33
+ * @property: Property being set.
34
+ * @value: Value to set the property.
35
+ *
36
+ * Set the property with passed in value.
37
+ */
38
+void qtest_qom_set_bool(QTestState *s, const char *path, const char *property,
39
+ bool value);
40
+
41
+/**
42
+ * qtest_qom_get_bool:
43
+ * @s: QTestState instance to operate on.
44
+ * @path: Path to the property being retrieved.
45
+ * @property: Property from where the value is being retrieved.
46
+ *
47
+ * Returns: Value retrieved from property.
48
+ */
49
+bool qtest_qom_get_bool(QTestState *s, const char *path, const char *property);
50
#endif
51
diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
52
index XXXXXXX..XXXXXXX 100644
53
--- a/hw/block/m25p80.c
54
+++ b/hw/block/m25p80.c
55
@@ -XXX,XX +XXX,XX @@ static int m25p80_pre_save(void *opaque)
56
57
static Property m25p80_properties[] = {
58
/* This is default value for Micron flash */
59
+ DEFINE_PROP_BOOL("write-enable", Flash, write_enable, false),
60
DEFINE_PROP_UINT32("nonvolatile-cfg", Flash, nonvolatile_cfg, 0x8FFF),
61
DEFINE_PROP_UINT8("spansion-cr1nv", Flash, spansion_cr1nv, 0x0),
62
DEFINE_PROP_UINT8("spansion-cr2nv", Flash, spansion_cr2nv, 0x8),
63
diff --git a/tests/qtest/aspeed_gpio-test.c b/tests/qtest/aspeed_gpio-test.c
64
index XXXXXXX..XXXXXXX 100644
65
--- a/tests/qtest/aspeed_gpio-test.c
66
+++ b/tests/qtest/aspeed_gpio-test.c
67
@@ -XXX,XX +XXX,XX @@
68
#include "qapi/qmp/qdict.h"
69
#include "libqtest-single.h"
70
71
-static bool qom_get_bool(QTestState *s, const char *path, const char *property)
72
-{
73
- QDict *r;
74
- bool b;
75
-
76
- r = qtest_qmp(s, "{ 'execute': 'qom-get', 'arguments': "
77
- "{ 'path': %s, 'property': %s } }", path, property);
78
- b = qdict_get_bool(r, "return");
79
- qobject_unref(r);
80
-
81
- return b;
82
-}
83
-
84
-static void qom_set_bool(QTestState *s, const char *path, const char *property,
85
- bool value)
86
-{
87
- QDict *r;
88
-
89
- r = qtest_qmp(s, "{ 'execute': 'qom-set', 'arguments': "
90
- "{ 'path': %s, 'property': %s, 'value': %i } }",
91
- path, property, value);
92
- qobject_unref(r);
93
-}
94
-
95
static void test_set_colocated_pins(const void *data)
96
{
97
QTestState *s = (QTestState *)data;
98
@@ -XXX,XX +XXX,XX @@ static void test_set_colocated_pins(const void *data)
99
* gpioV4-7 occupy bits within a single 32-bit value, so we want to make
100
* sure that modifying one doesn't affect the other.
101
*/
102
- qom_set_bool(s, "/machine/soc/gpio", "gpioV4", true);
103
- qom_set_bool(s, "/machine/soc/gpio", "gpioV5", false);
104
- qom_set_bool(s, "/machine/soc/gpio", "gpioV6", true);
105
- qom_set_bool(s, "/machine/soc/gpio", "gpioV7", false);
106
- g_assert(qom_get_bool(s, "/machine/soc/gpio", "gpioV4"));
107
- g_assert(!qom_get_bool(s, "/machine/soc/gpio", "gpioV5"));
108
- g_assert(qom_get_bool(s, "/machine/soc/gpio", "gpioV6"));
109
- g_assert(!qom_get_bool(s, "/machine/soc/gpio", "gpioV7"));
110
+ qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV4", true);
111
+ qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV5", false);
112
+ qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV6", true);
113
+ qtest_qom_set_bool(s, "/machine/soc/gpio", "gpioV7", false);
114
+ g_assert(qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV4"));
115
+ g_assert(!qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV5"));
116
+ g_assert(qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV6"));
117
+ g_assert(!qtest_qom_get_bool(s, "/machine/soc/gpio", "gpioV7"));
118
}
119
120
int main(int argc, char **argv)
121
diff --git a/tests/qtest/aspeed_smc-test.c b/tests/qtest/aspeed_smc-test.c
122
index XXXXXXX..XXXXXXX 100644
123
--- a/tests/qtest/aspeed_smc-test.c
124
+++ b/tests/qtest/aspeed_smc-test.c
125
@@ -XXX,XX +XXX,XX @@
126
#include "qemu/osdep.h"
127
#include "qemu/bswap.h"
128
#include "libqtest-single.h"
129
+#include "qemu/bitops.h"
130
131
/*
132
* ASPEED SPI Controller registers
133
@@ -XXX,XX +XXX,XX @@
134
#define CTRL_FREADMODE 0x1
135
#define CTRL_WRITEMODE 0x2
136
#define CTRL_USERMODE 0x3
137
+#define SR_WEL BIT(1)
138
139
#define ASPEED_FMC_BASE 0x1E620000
140
#define ASPEED_FLASH_BASE 0x20000000
141
@@ -XXX,XX +XXX,XX @@
142
*/
143
enum {
144
JEDEC_READ = 0x9f,
145
+ RDSR = 0x5,
146
+ WRDI = 0x4,
147
BULK_ERASE = 0xc7,
148
READ = 0x03,
149
PP = 0x02,
150
@@ -XXX,XX +XXX,XX @@ static void test_write_page_mem(void)
151
flash_reset();
152
}
153
154
+static void test_read_status_reg(void)
155
+{
156
+ uint8_t r;
157
+
158
+ spi_conf(CONF_ENABLE_W0);
159
+
160
+ spi_ctrl_start_user();
161
+ writeb(ASPEED_FLASH_BASE, RDSR);
162
+ r = readb(ASPEED_FLASH_BASE);
163
+ spi_ctrl_stop_user();
164
+
165
+ g_assert_cmphex(r & SR_WEL, ==, 0);
166
+ g_assert(!qtest_qom_get_bool
167
+ (global_qtest, "/machine/soc/fmc/ssi.0/child[0]", "write-enable"));
168
+
169
+ spi_ctrl_start_user();
170
+ writeb(ASPEED_FLASH_BASE, WREN);
171
+ writeb(ASPEED_FLASH_BASE, RDSR);
172
+ r = readb(ASPEED_FLASH_BASE);
173
+ spi_ctrl_stop_user();
174
+
175
+ g_assert_cmphex(r & SR_WEL, ==, SR_WEL);
176
+ g_assert(qtest_qom_get_bool
177
+ (global_qtest, "/machine/soc/fmc/ssi.0/child[0]", "write-enable"));
178
+
179
+ spi_ctrl_start_user();
180
+ writeb(ASPEED_FLASH_BASE, WRDI);
181
+ writeb(ASPEED_FLASH_BASE, RDSR);
182
+ r = readb(ASPEED_FLASH_BASE);
183
+ spi_ctrl_stop_user();
184
+
185
+ g_assert_cmphex(r & SR_WEL, ==, 0);
186
+ g_assert(!qtest_qom_get_bool
187
+ (global_qtest, "/machine/soc/fmc/ssi.0/child[0]", "write-enable"));
188
+
189
+ flash_reset();
190
+}
191
+
192
static char tmp_path[] = "/tmp/qtest.m25p80.XXXXXX";
193
194
int main(int argc, char **argv)
195
@@ -XXX,XX +XXX,XX @@ int main(int argc, char **argv)
196
qtest_add_func("/ast2400/smc/write_page", test_write_page);
197
qtest_add_func("/ast2400/smc/read_page_mem", test_read_page_mem);
198
qtest_add_func("/ast2400/smc/write_page_mem", test_write_page_mem);
199
+ qtest_add_func("/ast2400/smc/read_status_reg", test_read_status_reg);
200
201
ret = g_test_run();
202
203
diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
204
index XXXXXXX..XXXXXXX 100644
205
--- a/tests/qtest/libqtest.c
206
+++ b/tests/qtest/libqtest.c
207
@@ -XXX,XX +XXX,XX @@ void qtest_client_inproc_recv(void *opaque, const char *str)
208
g_string_append(qts->rx, str);
209
return;
210
}
211
+
212
+void qtest_qom_set_bool(QTestState *s, const char *path, const char *property,
213
+ bool value)
214
+{
215
+ QDict *r;
216
+
217
+ r = qtest_qmp(s, "{ 'execute': 'qom-set', 'arguments': "
218
+ "{ 'path': %s, 'property': %s, 'value': %i } }",
219
+ path, property, value);
220
+ qobject_unref(r);
221
+}
222
+
223
+bool qtest_qom_get_bool(QTestState *s, const char *path, const char *property)
224
+{
225
+ QDict *r;
226
+ bool b;
227
+
228
+ r = qtest_qmp(s, "{ 'execute': 'qom-get', 'arguments': "
229
+ "{ 'path': %s, 'property': %s } }", path, property);
230
+ b = qdict_get_bool(r, "return");
231
+ qobject_unref(r);
232
+
233
+ return b;
234
+}
235
--
236
2.35.3
237
238
diff view generated by jsdifflib
1
From: Jamin Lin <jamin_lin@aspeedtech.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
Add GPIO read/write trace event for aspeed model.
3
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
5
Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
6
Reviewed-by: Cédric Le Goater <clg@kaod.org>
4
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Message-Id: <20220525053444.27228-2-jamin_lin@aspeedtech.com>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
5
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
---
6
---
10
hw/gpio/aspeed_gpio.c | 54 +++++++++++++++++++++++++++++++------------
7
hw/arm/aspeed_soc.c | 6 +++---
11
hw/gpio/trace-events | 4 ++++
8
1 file changed, 3 insertions(+), 3 deletions(-)
12
2 files changed, 43 insertions(+), 15 deletions(-)
13
9
14
diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c
10
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
15
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
16
--- a/hw/gpio/aspeed_gpio.c
12
--- a/hw/arm/aspeed_soc.c
17
+++ b/hw/gpio/aspeed_gpio.c
13
+++ b/hw/arm/aspeed_soc.c
18
@@ -XXX,XX +XXX,XX @@
14
@@ -XXX,XX +XXX,XX @@ static qemu_irq aspeed_soc_ast2400_get_irq(AspeedSoCState *s, int dev)
19
#include "qapi/visitor.h"
15
return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[dev]);
20
#include "hw/irq.h"
21
#include "migration/vmstate.h"
22
+#include "trace.h"
23
24
#define GPIOS_PER_GROUP 8
25
26
@@ -XXX,XX +XXX,XX @@ static uint64_t aspeed_gpio_read(void *opaque, hwaddr offset, uint32_t size)
27
uint64_t idx = -1;
28
const AspeedGPIOReg *reg;
29
GPIOSets *set;
30
+ uint32_t value = 0;
31
+ uint64_t debounce_value;
32
33
idx = offset >> 2;
34
if (idx >= GPIO_DEBOUNCE_TIME_1 && idx <= GPIO_DEBOUNCE_TIME_3) {
35
idx -= GPIO_DEBOUNCE_TIME_1;
36
- return (uint64_t) s->debounce_regs[idx];
37
+ debounce_value = (uint64_t) s->debounce_regs[idx];
38
+ trace_aspeed_gpio_read(offset, debounce_value);
39
+ return debounce_value;
40
}
41
42
reg = &agc->reg_table[idx];
43
@@ -XXX,XX +XXX,XX @@ static uint64_t aspeed_gpio_read(void *opaque, hwaddr offset, uint32_t size)
44
set = &s->sets[reg->set_idx];
45
switch (reg->type) {
46
case gpio_reg_data_value:
47
- return set->data_value;
48
+ value = set->data_value;
49
+ break;
50
case gpio_reg_direction:
51
- return set->direction;
52
+ value = set->direction;
53
+ break;
54
case gpio_reg_int_enable:
55
- return set->int_enable;
56
+ value = set->int_enable;
57
+ break;
58
case gpio_reg_int_sens_0:
59
- return set->int_sens_0;
60
+ value = set->int_sens_0;
61
+ break;
62
case gpio_reg_int_sens_1:
63
- return set->int_sens_1;
64
+ value = set->int_sens_1;
65
+ break;
66
case gpio_reg_int_sens_2:
67
- return set->int_sens_2;
68
+ value = set->int_sens_2;
69
+ break;
70
case gpio_reg_int_status:
71
- return set->int_status;
72
+ value = set->int_status;
73
+ break;
74
case gpio_reg_reset_tolerant:
75
- return set->reset_tol;
76
+ value = set->reset_tol;
77
+ break;
78
case gpio_reg_debounce_1:
79
- return set->debounce_1;
80
+ value = set->debounce_1;
81
+ break;
82
case gpio_reg_debounce_2:
83
- return set->debounce_2;
84
+ value = set->debounce_2;
85
+ break;
86
case gpio_reg_cmd_source_0:
87
- return set->cmd_source_0;
88
+ value = set->cmd_source_0;
89
+ break;
90
case gpio_reg_cmd_source_1:
91
- return set->cmd_source_1;
92
+ value = set->cmd_source_1;
93
+ break;
94
case gpio_reg_data_read:
95
- return set->data_read;
96
+ value = set->data_read;
97
+ break;
98
case gpio_reg_input_mask:
99
- return set->input_mask;
100
+ value = set->input_mask;
101
+ break;
102
default:
103
qemu_log_mask(LOG_GUEST_ERROR, "%s: no getter for offset 0x%"
104
HWADDR_PRIx"\n", __func__, offset);
105
return 0;
106
}
107
+
108
+ trace_aspeed_gpio_read(offset, value);
109
+ return value;
110
}
16
}
111
17
112
static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
18
-static void aspeed_soc_init(Object *obj)
113
@@ -XXX,XX +XXX,XX @@ static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
19
+static void aspeed_ast2400_soc_init(Object *obj)
114
GPIOSets *set;
20
{
115
uint32_t cleared;
21
AspeedSoCState *s = ASPEED_SOC(obj);
116
22
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
117
+ trace_aspeed_gpio_write(offset, data);
23
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
118
+
24
static const TypeInfo aspeed_soc_ast2400_type_info = {
119
idx = offset >> 2;
25
.name = "ast2400-a1",
120
if (idx >= GPIO_DEBOUNCE_TIME_1 && idx <= GPIO_DEBOUNCE_TIME_3) {
26
.parent = TYPE_ASPEED_SOC,
121
idx -= GPIO_DEBOUNCE_TIME_1;
27
- .instance_init = aspeed_soc_init,
122
diff --git a/hw/gpio/trace-events b/hw/gpio/trace-events
28
+ .instance_init = aspeed_ast2400_soc_init,
123
index XXXXXXX..XXXXXXX 100644
29
.instance_size = sizeof(AspeedSoCState),
124
--- a/hw/gpio/trace-events
30
.class_init = aspeed_soc_ast2400_class_init,
125
+++ b/hw/gpio/trace-events
31
};
126
@@ -XXX,XX +XXX,XX @@ sifive_gpio_read(uint64_t offset, uint64_t r) "offset 0x%" PRIx64 " value 0x%" P
32
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
127
sifive_gpio_write(uint64_t offset, uint64_t value) "offset 0x%" PRIx64 " value 0x%" PRIx64
33
static const TypeInfo aspeed_soc_ast2500_type_info = {
128
sifive_gpio_set(int64_t line, int64_t value) "line %" PRIi64 " value %" PRIi64
34
.name = "ast2500-a1",
129
sifive_gpio_update_output_irq(int64_t line, int64_t value) "line %" PRIi64 " value %" PRIi64
35
.parent = TYPE_ASPEED_SOC,
130
+
36
- .instance_init = aspeed_soc_init,
131
+# aspeed_gpio.c
37
+ .instance_init = aspeed_ast2400_soc_init,
132
+aspeed_gpio_read(uint64_t offset, uint64_t value) "offset: 0x%" PRIx64 " value 0x%" PRIx64
38
.instance_size = sizeof(AspeedSoCState),
133
+aspeed_gpio_write(uint64_t offset, uint64_t value) "offset: 0x%" PRIx64 " value 0x%" PRIx64
39
.class_init = aspeed_soc_ast2500_class_init,
40
};
134
--
41
--
135
2.35.3
42
2.41.0
136
43
137
44
diff view generated by jsdifflib
1
From: Peter Delevoryas <pdel@fb.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
Background:
3
Keep aspeed_soc_class_init() generic, set the realize handler
4
to aspeed_ast2400_soc_realize() in each 2400/2500 class_init.
4
5
5
AspeedMachineClass.uart_default specifies the serial console UART, which
6
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
usually corresponds to the "stdout-path" in the device tree.
7
8
The default value is UART5, since most boards use UART5 for this:
9
10
amc->uart_default = ASPEED_DEV_UART5;
11
12
Users can override AspeedMachineClass.uart_default in their board's machine
13
class init to specify something besides UART5. For example, for fuji-bmc:
14
15
amc->uart_default = ASPEED_DEV_UART1;
16
17
We only connect this one UART, of the 5 UART's on the AST2400 and AST2500
18
and the 13 UART's on the AST2600 and AST1030, to a serial device that QEMU
19
users can use. None of the other UART's are initialized, and the only way
20
to override this attribute is by creating a specialized board definition,
21
requiring QEMU source code changes and rebuilding.
22
23
The result of this is that if you want to get serial console output on a
24
board that uses UART3, you need to add a board definition. This was
25
encountered by Zev in OpenBMC. [1]
26
27
Changes:
28
29
This commit initializes all of the UART's present on each Aspeed chip with
30
serial devices and allows the QEMU user to connect as many or few as they
31
like to serial devices. For example, you can still run QEMU and just connect
32
stdout to the machine's default UART, without specifying any additional
33
serial devices:
34
35
qemu-system-arm -machine fuji-bmc \
36
-drive file=fuji.mtd,format=raw,if=mtd \
37
-nographic
38
39
However, if you don't want to add a special machine definition, you can now
40
manually configure UART1 to connect to stdout and get serial console output,
41
even if the machine's default is UART5:
42
43
qemu-system-arm -machine ast2600-evb \
44
-drive file=fuji.mtd,format=raw,if=mtd \
45
-serial null -serial mon:stdio -display none
46
47
In the example above, the first "-serial null" argument is connected to
48
UART5, and "-serial mon:stdio" is connected to UART1.
49
50
Another example: you can get serial console output from Wedge100, which uses
51
UART3, by reusing the palmetto AST2400 machine and rewiring the serial
52
device arguments:
53
54
qemu-system-arm -machine palmetto-bmc \
55
-drive file=wedge100.mtd,format=raw,if=mtd \
56
-serial null -serial null -serial null \
57
-serial mon:stdio -display none
58
59
There is a slight change in behavior introduced with this change: now, each
60
UART's memory-mapped IO region will have a serial device model connected to
61
it. Previously, all reads and writes to those regions would be ineffective
62
and return zero values, but now some values will be nonzero, even when the
63
user doesn't connect a serial device backend (like a socket, file, etc). For
64
example, the line status register might indicate that the transmit buffer is
65
empty now, whereas previously it might have always indicated it was full.
66
67
[1] https://lore.kernel.org/openbmc/YnzGnWjkYdMUUNyM@hatter.bewilderbeest.net/
68
[2] https://github.com/facebook/openbmc/releases/download/v2021.49.0/fuji.mtd
69
[3] https://github.com/facebook/openbmc/releases/download/v2021.49.0/wedge100.mtd
70
71
Signed-off-by: Peter Delevoryas <pdel@fb.com>
72
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Reviewed-by: Cédric Le Goater <clg@kaod.org>
73
Message-Id: <20220516062328.298336-6-pdel@fb.com>
74
Signed-off-by: Cédric Le Goater <clg@kaod.org>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
75
---
9
---
76
hw/arm/aspeed_soc.c | 9 +++++++++
10
hw/arm/aspeed_soc.c | 15 +++++++++++----
77
1 file changed, 9 insertions(+)
11
1 file changed, 11 insertions(+), 4 deletions(-)
78
12
79
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
13
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
80
index XXXXXXX..XXXXXXX 100644
14
index XXXXXXX..XXXXXXX 100644
81
--- a/hw/arm/aspeed_soc.c
15
--- a/hw/arm/aspeed_soc.c
82
+++ b/hw/arm/aspeed_soc.c
16
+++ b/hw/arm/aspeed_soc.c
83
@@ -XXX,XX +XXX,XX @@ qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev)
17
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_init(Object *obj)
84
void aspeed_soc_uart_init(AspeedSoCState *s)
18
object_initialize_child(obj, "video", &s->video, TYPE_UNIMPLEMENTED_DEVICE);
19
}
20
21
-static void aspeed_soc_realize(DeviceState *dev, Error **errp)
22
+static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
85
{
23
{
86
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
24
int i;
87
+ int i, uart;
25
AspeedSoCState *s = ASPEED_SOC(dev);
88
26
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_class_init(ObjectClass *oc, void *data)
89
/* Attach an 8250 to the IO space as our UART */
27
{
90
serial_mm_init(get_system_memory(), sc->memmap[s->uart_default], 2,
28
DeviceClass *dc = DEVICE_CLASS(oc);
91
aspeed_soc_get_irq(s, s->uart_default), 38400,
29
92
serial_hd(0), DEVICE_LITTLE_ENDIAN);
30
- dc->realize = aspeed_soc_realize;
93
+ for (i = 1, uart = ASPEED_DEV_UART1; i < sc->uarts_num; i++, uart++) {
31
- /* Reason: Uses serial_hds and nd_table in realize() directly */
94
+ if (uart == s->uart_default) {
32
- dc->user_creatable = false;
95
+ uart++;
33
device_class_set_props(dc, aspeed_soc_properties);
96
+ }
97
+ serial_mm_init(get_system_memory(), sc->memmap[uart], 2,
98
+ aspeed_soc_get_irq(s, uart), 38400,
99
+ serial_hd(i), DEVICE_LITTLE_ENDIAN);
100
+ }
101
}
34
}
35
36
@@ -XXX,XX +XXX,XX @@ static const TypeInfo aspeed_soc_type_info = {
37
static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
38
{
39
AspeedSoCClass *sc = ASPEED_SOC_CLASS(oc);
40
+ DeviceClass *dc = DEVICE_CLASS(oc);
41
+
42
+ dc->realize = aspeed_ast2400_soc_realize;
43
+ /* Reason: Uses serial_hds and nd_table in realize() directly */
44
+ dc->user_creatable = false;
45
46
sc->name = "ast2400-a1";
47
sc->cpu_type = ARM_CPU_TYPE_NAME("arm926");
48
@@ -XXX,XX +XXX,XX @@ static const TypeInfo aspeed_soc_ast2400_type_info = {
49
static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
50
{
51
AspeedSoCClass *sc = ASPEED_SOC_CLASS(oc);
52
+ DeviceClass *dc = DEVICE_CLASS(oc);
53
+
54
+ dc->realize = aspeed_ast2400_soc_realize;
55
+ /* Reason: Uses serial_hds and nd_table in realize() directly */
56
+ dc->user_creatable = false;
57
58
sc->name = "ast2500-a1";
59
sc->cpu_type = ARM_CPU_TYPE_NAME("arm1176");
102
--
60
--
103
2.35.3
61
2.41.0
104
62
105
63
diff view generated by jsdifflib
1
From: Howard Chiu <howard_chiu@aspeedtech.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
Add EEPROM and LM75 temperature sensor according to hardware schematic
3
We want to derivate the big AspeedSoCState object in some more
4
4
SoC-specific ones. Since the object size will vary, allocate it
5
Signed-off-by: Howard Chiu <howard_chiu@aspeedtech.com>
5
dynamically.
6
7
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
Reviewed-by: Cédric Le Goater <clg@kaod.org>
8
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
Signed-off-by: Cédric Le Goater <clg@kaod.org>
8
---
10
---
9
hw/arm/aspeed.c | 11 +++++++++--
11
hw/arm/aspeed.c | 101 +++++++++++++++++++++++++-----------------------
10
1 file changed, 9 insertions(+), 2 deletions(-)
12
1 file changed, 52 insertions(+), 49 deletions(-)
11
13
12
diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
14
diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
13
index XXXXXXX..XXXXXXX 100644
15
index XXXXXXX..XXXXXXX 100644
14
--- a/hw/arm/aspeed.c
16
--- a/hw/arm/aspeed.c
15
+++ b/hw/arm/aspeed.c
17
+++ b/hw/arm/aspeed.c
18
@@ -XXX,XX +XXX,XX @@ struct AspeedMachineState {
19
MachineState parent_obj;
20
/* Public */
21
22
- AspeedSoCState soc;
23
+ AspeedSoCState *soc;
24
MemoryRegion boot_rom;
25
bool mmio_exec;
26
uint32_t uart_chosen;
27
@@ -XXX,XX +XXX,XX @@ static void write_boot_rom(BlockBackend *blk, hwaddr addr, size_t rom_size,
28
static void aspeed_install_boot_rom(AspeedMachineState *bmc, BlockBackend *blk,
29
uint64_t rom_size)
30
{
31
- AspeedSoCState *soc = &bmc->soc;
32
+ AspeedSoCState *soc = bmc->soc;
33
34
memory_region_init_rom(&bmc->boot_rom, NULL, "aspeed.boot_rom", rom_size,
35
&error_abort);
36
@@ -XXX,XX +XXX,XX @@ static void sdhci_attach_drive(SDHCIState *sdhci, DriveInfo *dinfo)
37
static void connect_serial_hds_to_uarts(AspeedMachineState *bmc)
38
{
39
AspeedMachineClass *amc = ASPEED_MACHINE_GET_CLASS(bmc);
40
- AspeedSoCState *s = &bmc->soc;
41
+ AspeedSoCState *s = bmc->soc;
42
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
43
int uart_chosen = bmc->uart_chosen ? bmc->uart_chosen : amc->uart_default;
44
45
@@ -XXX,XX +XXX,XX @@ static void aspeed_machine_init(MachineState *machine)
46
int i;
47
NICInfo *nd = &nd_table[0];
48
49
- object_initialize_child(OBJECT(machine), "soc", &bmc->soc, amc->soc_name);
50
-
51
- sc = ASPEED_SOC_GET_CLASS(&bmc->soc);
52
+ bmc->soc = ASPEED_SOC(object_new(amc->soc_name));
53
+ object_property_add_child(OBJECT(machine), "soc", OBJECT(bmc->soc));
54
+ object_unref(OBJECT(bmc->soc));
55
+ sc = ASPEED_SOC_GET_CLASS(bmc->soc);
56
57
/*
58
* This will error out if the RAM size is not supported by the
59
* memory controller of the SoC.
60
*/
61
- object_property_set_uint(OBJECT(&bmc->soc), "ram-size", machine->ram_size,
62
+ object_property_set_uint(OBJECT(bmc->soc), "ram-size", machine->ram_size,
63
&error_fatal);
64
65
for (i = 0; i < sc->macs_num; i++) {
66
if ((amc->macs_mask & (1 << i)) && nd->used) {
67
qemu_check_nic_model(nd, TYPE_FTGMAC100);
68
- qdev_set_nic_properties(DEVICE(&bmc->soc.ftgmac100[i]), nd);
69
+ qdev_set_nic_properties(DEVICE(&bmc->soc->ftgmac100[i]), nd);
70
nd++;
71
}
72
}
73
74
- object_property_set_int(OBJECT(&bmc->soc), "hw-strap1", amc->hw_strap1,
75
+ object_property_set_int(OBJECT(bmc->soc), "hw-strap1", amc->hw_strap1,
76
&error_abort);
77
- object_property_set_int(OBJECT(&bmc->soc), "hw-strap2", amc->hw_strap2,
78
+ object_property_set_int(OBJECT(bmc->soc), "hw-strap2", amc->hw_strap2,
79
&error_abort);
80
- object_property_set_link(OBJECT(&bmc->soc), "memory",
81
+ object_property_set_link(OBJECT(bmc->soc), "memory",
82
OBJECT(get_system_memory()), &error_abort);
83
- object_property_set_link(OBJECT(&bmc->soc), "dram",
84
+ object_property_set_link(OBJECT(bmc->soc), "dram",
85
OBJECT(machine->ram), &error_abort);
86
if (machine->kernel_filename) {
87
/*
88
@@ -XXX,XX +XXX,XX @@ static void aspeed_machine_init(MachineState *machine)
89
* that runs to unlock the SCU. In this case set the default to
90
* be unlocked as the kernel expects
91
*/
92
- object_property_set_int(OBJECT(&bmc->soc), "hw-prot-key",
93
+ object_property_set_int(OBJECT(bmc->soc), "hw-prot-key",
94
ASPEED_SCU_PROT_KEY, &error_abort);
95
}
96
connect_serial_hds_to_uarts(bmc);
97
- qdev_realize(DEVICE(&bmc->soc), NULL, &error_abort);
98
+ qdev_realize(DEVICE(bmc->soc), NULL, &error_abort);
99
100
if (defaults_enabled()) {
101
- aspeed_board_init_flashes(&bmc->soc.fmc,
102
+ aspeed_board_init_flashes(&bmc->soc->fmc,
103
bmc->fmc_model ? bmc->fmc_model : amc->fmc_model,
104
amc->num_cs, 0);
105
- aspeed_board_init_flashes(&bmc->soc.spi[0],
106
+ aspeed_board_init_flashes(&bmc->soc->spi[0],
107
bmc->spi_model ? bmc->spi_model : amc->spi_model,
108
1, amc->num_cs);
109
}
110
@@ -XXX,XX +XXX,XX @@ static void aspeed_machine_init(MachineState *machine)
111
amc->i2c_init(bmc);
112
}
113
114
- for (i = 0; i < bmc->soc.sdhci.num_slots; i++) {
115
- sdhci_attach_drive(&bmc->soc.sdhci.slots[i],
116
+ for (i = 0; i < bmc->soc->sdhci.num_slots; i++) {
117
+ sdhci_attach_drive(&bmc->soc->sdhci.slots[i],
118
drive_get(IF_SD, 0, i));
119
}
120
121
- if (bmc->soc.emmc.num_slots) {
122
- sdhci_attach_drive(&bmc->soc.emmc.slots[0],
123
- drive_get(IF_SD, 0, bmc->soc.sdhci.num_slots));
124
+ if (bmc->soc->emmc.num_slots) {
125
+ sdhci_attach_drive(&bmc->soc->emmc.slots[0],
126
+ drive_get(IF_SD, 0, bmc->soc->sdhci.num_slots));
127
}
128
129
if (!bmc->mmio_exec) {
130
- DeviceState *dev = ssi_get_cs(bmc->soc.fmc.spi, 0);
131
+ DeviceState *dev = ssi_get_cs(bmc->soc->fmc.spi, 0);
132
BlockBackend *fmc0 = dev ? m25p80_get_blk(dev) : NULL;
133
134
if (fmc0) {
135
- uint64_t rom_size = memory_region_size(&bmc->soc.spi_boot);
136
+ uint64_t rom_size = memory_region_size(&bmc->soc->spi_boot);
137
aspeed_install_boot_rom(bmc, fmc0, rom_size);
138
}
139
}
140
@@ -XXX,XX +XXX,XX @@ static void aspeed_machine_init(MachineState *machine)
141
142
static void palmetto_bmc_i2c_init(AspeedMachineState *bmc)
143
{
144
- AspeedSoCState *soc = &bmc->soc;
145
+ AspeedSoCState *soc = bmc->soc;
146
DeviceState *dev;
147
uint8_t *eeprom_buf = g_malloc0(32 * 1024);
148
149
@@ -XXX,XX +XXX,XX @@ static void palmetto_bmc_i2c_init(AspeedMachineState *bmc)
150
151
static void quanta_q71l_bmc_i2c_init(AspeedMachineState *bmc)
152
{
153
- AspeedSoCState *soc = &bmc->soc;
154
+ AspeedSoCState *soc = bmc->soc;
155
156
/*
157
* The quanta-q71l platform expects tmp75s which are compatible with
158
@@ -XXX,XX +XXX,XX @@ static void quanta_q71l_bmc_i2c_init(AspeedMachineState *bmc)
159
160
static void ast2500_evb_i2c_init(AspeedMachineState *bmc)
161
{
162
- AspeedSoCState *soc = &bmc->soc;
163
+ AspeedSoCState *soc = bmc->soc;
164
uint8_t *eeprom_buf = g_malloc0(8 * 1024);
165
166
smbus_eeprom_init_one(aspeed_i2c_get_bus(&soc->i2c, 3), 0x50,
16
@@ -XXX,XX +XXX,XX @@ static void ast2500_evb_i2c_init(AspeedMachineState *bmc)
167
@@ -XXX,XX +XXX,XX @@ static void ast2500_evb_i2c_init(AspeedMachineState *bmc)
17
168
18
static void ast2600_evb_i2c_init(AspeedMachineState *bmc)
169
static void ast2600_evb_i2c_init(AspeedMachineState *bmc)
19
{
170
{
20
- /* Start with some devices on our I2C busses */
171
- AspeedSoCState *soc = &bmc->soc;
21
- ast2500_evb_i2c_init(bmc);
172
+ AspeedSoCState *soc = bmc->soc;
22
+ AspeedSoCState *soc = &bmc->soc;
173
uint8_t *eeprom_buf = g_malloc0(8 * 1024);
23
+ uint8_t *eeprom_buf = g_malloc0(8 * 1024);
174
24
+
175
smbus_eeprom_init_one(aspeed_i2c_get_bus(&soc->i2c, 7), 0x50,
25
+ smbus_eeprom_init_one(aspeed_i2c_get_bus(&soc->i2c, 7), 0x50,
176
@@ -XXX,XX +XXX,XX @@ static void ast2600_evb_i2c_init(AspeedMachineState *bmc)
26
+ eeprom_buf);
177
27
+
178
static void yosemitev2_bmc_i2c_init(AspeedMachineState *bmc)
28
+ /* LM75 is compatible with TMP105 driver */
179
{
29
+ i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 8),
180
- AspeedSoCState *soc = &bmc->soc;
30
+ TYPE_TMP105, 0x4d);
181
+ AspeedSoCState *soc = bmc->soc;
182
183
at24c_eeprom_init(aspeed_i2c_get_bus(&soc->i2c, 4), 0x51, 128 * KiB);
184
at24c_eeprom_init_rom(aspeed_i2c_get_bus(&soc->i2c, 8), 0x51, 128 * KiB,
185
@@ -XXX,XX +XXX,XX @@ static void yosemitev2_bmc_i2c_init(AspeedMachineState *bmc)
186
187
static void romulus_bmc_i2c_init(AspeedMachineState *bmc)
188
{
189
- AspeedSoCState *soc = &bmc->soc;
190
+ AspeedSoCState *soc = bmc->soc;
191
192
/* The romulus board expects Epson RX8900 I2C RTC but a ds1338 is
193
* good enough */
194
@@ -XXX,XX +XXX,XX @@ static void romulus_bmc_i2c_init(AspeedMachineState *bmc)
195
196
static void tiogapass_bmc_i2c_init(AspeedMachineState *bmc)
197
{
198
- AspeedSoCState *soc = &bmc->soc;
199
+ AspeedSoCState *soc = bmc->soc;
200
201
at24c_eeprom_init(aspeed_i2c_get_bus(&soc->i2c, 4), 0x54, 128 * KiB);
202
at24c_eeprom_init_rom(aspeed_i2c_get_bus(&soc->i2c, 6), 0x54, 128 * KiB,
203
@@ -XXX,XX +XXX,XX @@ static void create_pca9552(AspeedSoCState *soc, int bus_id, int addr)
204
205
static void sonorapass_bmc_i2c_init(AspeedMachineState *bmc)
206
{
207
- AspeedSoCState *soc = &bmc->soc;
208
+ AspeedSoCState *soc = bmc->soc;
209
210
/* bus 2 : */
211
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 2), "tmp105", 0x48);
212
@@ -XXX,XX +XXX,XX @@ static void witherspoon_bmc_i2c_init(AspeedMachineState *bmc)
213
{14, LED_COLOR_GREEN, "front-power-3", GPIO_POLARITY_ACTIVE_LOW},
214
{15, LED_COLOR_GREEN, "front-id-5", GPIO_POLARITY_ACTIVE_LOW},
215
};
216
- AspeedSoCState *soc = &bmc->soc;
217
+ AspeedSoCState *soc = bmc->soc;
218
uint8_t *eeprom_buf = g_malloc0(8 * 1024);
219
DeviceState *dev;
220
LEDState *led;
221
@@ -XXX,XX +XXX,XX @@ static void witherspoon_bmc_i2c_init(AspeedMachineState *bmc)
222
223
static void g220a_bmc_i2c_init(AspeedMachineState *bmc)
224
{
225
- AspeedSoCState *soc = &bmc->soc;
226
+ AspeedSoCState *soc = bmc->soc;
227
DeviceState *dev;
228
229
dev = DEVICE(i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 3),
230
@@ -XXX,XX +XXX,XX @@ static void g220a_bmc_i2c_init(AspeedMachineState *bmc)
231
232
static void fp5280g2_bmc_i2c_init(AspeedMachineState *bmc)
233
{
234
- AspeedSoCState *soc = &bmc->soc;
235
+ AspeedSoCState *soc = bmc->soc;
236
I2CSlave *i2c_mux;
237
238
/* The at24c256 */
239
@@ -XXX,XX +XXX,XX @@ static void fp5280g2_bmc_i2c_init(AspeedMachineState *bmc)
240
241
static void rainier_bmc_i2c_init(AspeedMachineState *bmc)
242
{
243
- AspeedSoCState *soc = &bmc->soc;
244
+ AspeedSoCState *soc = bmc->soc;
245
I2CSlave *i2c_mux;
246
247
at24c_eeprom_init(aspeed_i2c_get_bus(&soc->i2c, 0), 0x51, 32 * KiB);
248
@@ -XXX,XX +XXX,XX @@ static void get_pca9548_channels(I2CBus *bus, uint8_t mux_addr,
249
250
static void fuji_bmc_i2c_init(AspeedMachineState *bmc)
251
{
252
- AspeedSoCState *soc = &bmc->soc;
253
+ AspeedSoCState *soc = bmc->soc;
254
I2CBus *i2c[144] = {};
255
256
for (int i = 0; i < 16; i++) {
257
@@ -XXX,XX +XXX,XX @@ static void fuji_bmc_i2c_init(AspeedMachineState *bmc)
258
259
static void bletchley_bmc_i2c_init(AspeedMachineState *bmc)
260
{
261
- AspeedSoCState *soc = &bmc->soc;
262
+ AspeedSoCState *soc = bmc->soc;
263
I2CBus *i2c[13] = {};
264
for (int i = 0; i < 13; i++) {
265
if ((i == 8) || (i == 11)) {
266
@@ -XXX,XX +XXX,XX @@ static void bletchley_bmc_i2c_init(AspeedMachineState *bmc)
267
268
static void fby35_i2c_init(AspeedMachineState *bmc)
269
{
270
- AspeedSoCState *soc = &bmc->soc;
271
+ AspeedSoCState *soc = bmc->soc;
272
I2CBus *i2c[16];
273
274
for (int i = 0; i < 16; i++) {
275
@@ -XXX,XX +XXX,XX @@ static void fby35_i2c_init(AspeedMachineState *bmc)
276
277
static void qcom_dc_scm_bmc_i2c_init(AspeedMachineState *bmc)
278
{
279
- AspeedSoCState *soc = &bmc->soc;
280
+ AspeedSoCState *soc = bmc->soc;
281
282
i2c_slave_create_simple(aspeed_i2c_get_bus(&soc->i2c, 15), "tmp105", 0x4d);
31
}
283
}
32
284
33
static void romulus_bmc_i2c_init(AspeedMachineState *bmc)
285
static void qcom_dc_scm_firework_i2c_init(AspeedMachineState *bmc)
286
{
287
- AspeedSoCState *soc = &bmc->soc;
288
+ AspeedSoCState *soc = bmc->soc;
289
I2CSlave *therm_mux, *cpuvr_mux;
290
291
/* Create the generic DC-SCM hardware */
292
@@ -XXX,XX +XXX,XX @@ static void aspeed_machine_bletchley_class_init(ObjectClass *oc, void *data)
293
static void fby35_reset(MachineState *state, ShutdownCause reason)
294
{
295
AspeedMachineState *bmc = ASPEED_MACHINE(state);
296
- AspeedGPIOState *gpio = &bmc->soc.gpio;
297
+ AspeedGPIOState *gpio = &bmc->soc->gpio;
298
299
qemu_devices_reset(reason);
300
301
@@ -XXX,XX +XXX,XX @@ static void aspeed_minibmc_machine_init(MachineState *machine)
302
sysclk = clock_new(OBJECT(machine), "SYSCLK");
303
clock_set_hz(sysclk, SYSCLK_FRQ);
304
305
- object_initialize_child(OBJECT(machine), "soc", &bmc->soc, amc->soc_name);
306
- qdev_connect_clock_in(DEVICE(&bmc->soc), "sysclk", sysclk);
307
+ bmc->soc = ASPEED_SOC(object_new(amc->soc_name));
308
+ object_property_add_child(OBJECT(machine), "soc", OBJECT(bmc->soc));
309
+ object_unref(OBJECT(bmc->soc));
310
+ qdev_connect_clock_in(DEVICE(bmc->soc), "sysclk", sysclk);
311
312
- object_property_set_link(OBJECT(&bmc->soc), "memory",
313
+ object_property_set_link(OBJECT(bmc->soc), "memory",
314
OBJECT(get_system_memory()), &error_abort);
315
connect_serial_hds_to_uarts(bmc);
316
- qdev_realize(DEVICE(&bmc->soc), NULL, &error_abort);
317
+ qdev_realize(DEVICE(bmc->soc), NULL, &error_abort);
318
319
- aspeed_board_init_flashes(&bmc->soc.fmc,
320
+ aspeed_board_init_flashes(&bmc->soc->fmc,
321
bmc->fmc_model ? bmc->fmc_model : amc->fmc_model,
322
amc->num_cs,
323
0);
324
325
- aspeed_board_init_flashes(&bmc->soc.spi[0],
326
+ aspeed_board_init_flashes(&bmc->soc->spi[0],
327
bmc->spi_model ? bmc->spi_model : amc->spi_model,
328
amc->num_cs, amc->num_cs);
329
330
- aspeed_board_init_flashes(&bmc->soc.spi[1],
331
+ aspeed_board_init_flashes(&bmc->soc->spi[1],
332
bmc->spi_model ? bmc->spi_model : amc->spi_model,
333
amc->num_cs, (amc->num_cs * 2));
334
335
@@ -XXX,XX +XXX,XX @@ static void aspeed_minibmc_machine_init(MachineState *machine)
336
337
static void ast1030_evb_i2c_init(AspeedMachineState *bmc)
338
{
339
- AspeedSoCState *soc = &bmc->soc;
340
+ AspeedSoCState *soc = bmc->soc;
341
342
/* U10 24C08 connects to SDA/SCL Group 1 by default */
343
uint8_t *eeprom_buf = g_malloc0(32 * 1024);
34
--
344
--
35
2.35.3
345
2.41.0
36
346
37
347
diff view generated by jsdifflib
1
From: Peter Delevoryas <pdel@fb.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
This adds the missing UART memory and IRQ mappings for the AST2400, AST2500,
3
TYPE_ASPEED10X0_SOC inherits from TYPE_ASPEED_SOC.
4
AST2600, and AST1030.
4
In few commits we'll add more fields, but to keep
5
review process simple, don't add any yet.
5
6
6
This also includes the new UART interfaces added in the AST2600 and AST1030
7
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
from UART6 to UART13. The addresses and interrupt numbers for these two
8
later chips are identical.
9
10
Signed-off-by: Peter Delevoryas <pdel@fb.com>
11
Reviewed-by: Cédric Le Goater <clg@kaod.org>
8
Reviewed-by: Cédric Le Goater <clg@kaod.org>
12
Message-Id: <20220516062328.298336-2-pdel@fb.com>
13
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
Signed-off-by: Cédric Le Goater <clg@kaod.org>
14
---
10
---
15
include/hw/arm/aspeed_soc.h | 8 ++++++++
11
include/hw/arm/aspeed_soc.h | 7 +++++++
16
hw/arm/aspeed_ast10x0.c | 24 ++++++++++++++++++++++++
12
hw/arm/aspeed_ast10x0.c | 26 +++++++++++++-------------
17
hw/arm/aspeed_ast2600.c | 19 +++++++++++++++++++
13
2 files changed, 20 insertions(+), 13 deletions(-)
18
hw/arm/aspeed_soc.c | 6 ++++++
19
4 files changed, 57 insertions(+)
20
14
21
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
15
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
22
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
23
--- a/include/hw/arm/aspeed_soc.h
17
--- a/include/hw/arm/aspeed_soc.h
24
+++ b/include/hw/arm/aspeed_soc.h
18
+++ b/include/hw/arm/aspeed_soc.h
25
@@ -XXX,XX +XXX,XX @@ enum {
19
@@ -XXX,XX +XXX,XX @@ struct AspeedSoCState {
26
ASPEED_DEV_UART3,
20
#define TYPE_ASPEED_SOC "aspeed-soc"
27
ASPEED_DEV_UART4,
21
OBJECT_DECLARE_TYPE(AspeedSoCState, AspeedSoCClass, ASPEED_SOC)
28
ASPEED_DEV_UART5,
22
29
+ ASPEED_DEV_UART6,
23
+struct Aspeed10x0SoCState {
30
+ ASPEED_DEV_UART7,
24
+ AspeedSoCState parent;
31
+ ASPEED_DEV_UART8,
25
+};
32
+ ASPEED_DEV_UART9,
26
+
33
+ ASPEED_DEV_UART10,
27
+#define TYPE_ASPEED10X0_SOC "aspeed10x0-soc"
34
+ ASPEED_DEV_UART11,
28
+OBJECT_DECLARE_SIMPLE_TYPE(Aspeed10x0SoCState, ASPEED10X0_SOC)
35
+ ASPEED_DEV_UART12,
29
+
36
+ ASPEED_DEV_UART13,
30
struct AspeedSoCClass {
37
ASPEED_DEV_VUART,
31
DeviceClass parent_class;
38
ASPEED_DEV_FMC,
32
39
ASPEED_DEV_SPI1,
40
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
33
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
41
index XXXXXXX..XXXXXXX 100644
34
index XXXXXXX..XXXXXXX 100644
42
--- a/hw/arm/aspeed_ast10x0.c
35
--- a/hw/arm/aspeed_ast10x0.c
43
+++ b/hw/arm/aspeed_ast10x0.c
36
+++ b/hw/arm/aspeed_ast10x0.c
44
@@ -XXX,XX +XXX,XX @@ static const hwaddr aspeed_soc_ast1030_memmap[] = {
37
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data)
45
[ASPEED_DEV_SBC] = 0x7E6F2000,
38
sc->get_irq = aspeed_soc_ast1030_get_irq;
46
[ASPEED_DEV_GPIO] = 0x7E780000,
39
}
47
[ASPEED_DEV_TIMER1] = 0x7E782000,
40
48
+ [ASPEED_DEV_UART1] = 0x7E783000,
41
-static const TypeInfo aspeed_soc_ast1030_type_info = {
49
+ [ASPEED_DEV_UART2] = 0x7E78D000,
42
- .name = "ast1030-a1",
50
+ [ASPEED_DEV_UART3] = 0x7E78E000,
43
- .parent = TYPE_ASPEED_SOC,
51
+ [ASPEED_DEV_UART4] = 0x7E78F000,
44
- .instance_size = sizeof(AspeedSoCState),
52
[ASPEED_DEV_UART5] = 0x7E784000,
45
- .instance_init = aspeed_soc_ast1030_init,
53
+ [ASPEED_DEV_UART6] = 0x7E790000,
46
- .class_init = aspeed_soc_ast1030_class_init,
54
+ [ASPEED_DEV_UART7] = 0x7E790100,
47
- .class_size = sizeof(AspeedSoCClass),
55
+ [ASPEED_DEV_UART8] = 0x7E790200,
48
+static const TypeInfo aspeed_soc_ast10x0_types[] = {
56
+ [ASPEED_DEV_UART9] = 0x7E790300,
49
+ {
57
+ [ASPEED_DEV_UART10] = 0x7E790400,
50
+ .name = TYPE_ASPEED10X0_SOC,
58
+ [ASPEED_DEV_UART11] = 0x7E790500,
51
+ .parent = TYPE_ASPEED_SOC,
59
+ [ASPEED_DEV_UART12] = 0x7E790600,
52
+ .instance_size = sizeof(Aspeed10x0SoCState),
60
+ [ASPEED_DEV_UART13] = 0x7E790700,
53
+ .abstract = true,
61
[ASPEED_DEV_WDT] = 0x7E785000,
54
+ }, {
62
[ASPEED_DEV_LPC] = 0x7E789000,
55
+ .name = "ast1030-a1",
63
[ASPEED_DEV_I2C] = 0x7E7B0000,
56
+ .parent = TYPE_ASPEED10X0_SOC,
57
+ .instance_init = aspeed_soc_ast1030_init,
58
+ .class_init = aspeed_soc_ast1030_class_init,
59
+ },
64
};
60
};
65
61
66
static const int aspeed_soc_ast1030_irqmap[] = {
62
-static void aspeed_soc_register_types(void)
67
+ [ASPEED_DEV_UART1] = 47,
63
-{
68
+ [ASPEED_DEV_UART2] = 48,
64
- type_register_static(&aspeed_soc_ast1030_type_info);
69
+ [ASPEED_DEV_UART3] = 49,
65
-}
70
+ [ASPEED_DEV_UART4] = 50,
66
-
71
[ASPEED_DEV_UART5] = 8,
67
-type_init(aspeed_soc_register_types)
72
+ [ASPEED_DEV_UART6] = 57,
68
+DEFINE_TYPES(aspeed_soc_ast10x0_types)
73
+ [ASPEED_DEV_UART7] = 58,
74
+ [ASPEED_DEV_UART8] = 59,
75
+ [ASPEED_DEV_UART9] = 60,
76
+ [ASPEED_DEV_UART10] = 61,
77
+ [ASPEED_DEV_UART11] = 62,
78
+ [ASPEED_DEV_UART12] = 63,
79
+ [ASPEED_DEV_UART13] = 64,
80
[ASPEED_DEV_GPIO] = 11,
81
[ASPEED_DEV_TIMER1] = 16,
82
[ASPEED_DEV_TIMER2] = 17,
83
diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
84
index XXXXXXX..XXXXXXX 100644
85
--- a/hw/arm/aspeed_ast2600.c
86
+++ b/hw/arm/aspeed_ast2600.c
87
@@ -XXX,XX +XXX,XX @@ static const hwaddr aspeed_soc_ast2600_memmap[] = {
88
[ASPEED_DEV_IBT] = 0x1E789140,
89
[ASPEED_DEV_I2C] = 0x1E78A000,
90
[ASPEED_DEV_UART1] = 0x1E783000,
91
+ [ASPEED_DEV_UART2] = 0x1E78D000,
92
+ [ASPEED_DEV_UART3] = 0x1E78E000,
93
+ [ASPEED_DEV_UART4] = 0x1E78F000,
94
[ASPEED_DEV_UART5] = 0x1E784000,
95
+ [ASPEED_DEV_UART6] = 0x1E790000,
96
+ [ASPEED_DEV_UART7] = 0x1E790100,
97
+ [ASPEED_DEV_UART8] = 0x1E790200,
98
+ [ASPEED_DEV_UART9] = 0x1E790300,
99
+ [ASPEED_DEV_UART10] = 0x1E790400,
100
+ [ASPEED_DEV_UART11] = 0x1E790500,
101
+ [ASPEED_DEV_UART12] = 0x1E790600,
102
+ [ASPEED_DEV_UART13] = 0x1E790700,
103
[ASPEED_DEV_VUART] = 0x1E787000,
104
[ASPEED_DEV_I3C] = 0x1E7A0000,
105
[ASPEED_DEV_SDRAM] = 0x80000000,
106
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast2600_irqmap[] = {
107
[ASPEED_DEV_UART3] = 49,
108
[ASPEED_DEV_UART4] = 50,
109
[ASPEED_DEV_UART5] = 8,
110
+ [ASPEED_DEV_UART6] = 57,
111
+ [ASPEED_DEV_UART7] = 58,
112
+ [ASPEED_DEV_UART8] = 59,
113
+ [ASPEED_DEV_UART9] = 60,
114
+ [ASPEED_DEV_UART10] = 61,
115
+ [ASPEED_DEV_UART11] = 62,
116
+ [ASPEED_DEV_UART12] = 63,
117
+ [ASPEED_DEV_UART13] = 64,
118
[ASPEED_DEV_VUART] = 8,
119
[ASPEED_DEV_FMC] = 39,
120
[ASPEED_DEV_SDMC] = 0,
121
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
122
index XXXXXXX..XXXXXXX 100644
123
--- a/hw/arm/aspeed_soc.c
124
+++ b/hw/arm/aspeed_soc.c
125
@@ -XXX,XX +XXX,XX @@ static const hwaddr aspeed_soc_ast2400_memmap[] = {
126
[ASPEED_DEV_ETH1] = 0x1E660000,
127
[ASPEED_DEV_ETH2] = 0x1E680000,
128
[ASPEED_DEV_UART1] = 0x1E783000,
129
+ [ASPEED_DEV_UART2] = 0x1E78D000,
130
+ [ASPEED_DEV_UART3] = 0x1E78E000,
131
+ [ASPEED_DEV_UART4] = 0x1E78F000,
132
[ASPEED_DEV_UART5] = 0x1E784000,
133
[ASPEED_DEV_VUART] = 0x1E787000,
134
[ASPEED_DEV_SDRAM] = 0x40000000,
135
@@ -XXX,XX +XXX,XX @@ static const hwaddr aspeed_soc_ast2500_memmap[] = {
136
[ASPEED_DEV_ETH1] = 0x1E660000,
137
[ASPEED_DEV_ETH2] = 0x1E680000,
138
[ASPEED_DEV_UART1] = 0x1E783000,
139
+ [ASPEED_DEV_UART2] = 0x1E78D000,
140
+ [ASPEED_DEV_UART3] = 0x1E78E000,
141
+ [ASPEED_DEV_UART4] = 0x1E78F000,
142
[ASPEED_DEV_UART5] = 0x1E784000,
143
[ASPEED_DEV_VUART] = 0x1E787000,
144
[ASPEED_DEV_SDRAM] = 0x80000000,
145
--
69
--
146
2.35.3
70
2.41.0
147
71
148
72
diff view generated by jsdifflib
1
From: Peter Delevoryas <pdel@fb.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
AST2400 and AST2500 have 5 UART's, while the AST2600 and AST1030 have 13.
3
TYPE_ASPEED2600_SOC inherits from TYPE_ASPEED_SOC.
4
In few commits we'll add more fields, but to keep
5
review process simple, don't add any yet.
4
6
5
Signed-off-by: Peter Delevoryas <pdel@fb.com>
7
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
6
Reviewed-by: Cédric Le Goater <clg@kaod.org>
8
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Message-Id: <20220516062328.298336-3-pdel@fb.com>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
Signed-off-by: Cédric Le Goater <clg@kaod.org>
9
---
10
---
10
include/hw/arm/aspeed_soc.h | 1 +
11
include/hw/arm/aspeed_soc.h | 7 +++++++
11
hw/arm/aspeed_ast10x0.c | 1 +
12
hw/arm/aspeed_ast2600.c | 26 +++++++++++++-------------
12
hw/arm/aspeed_ast2600.c | 1 +
13
2 files changed, 20 insertions(+), 13 deletions(-)
13
hw/arm/aspeed_soc.c | 2 ++
14
4 files changed, 5 insertions(+)
15
14
16
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
15
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
17
index XXXXXXX..XXXXXXX 100644
16
index XXXXXXX..XXXXXXX 100644
18
--- a/include/hw/arm/aspeed_soc.h
17
--- a/include/hw/arm/aspeed_soc.h
19
+++ b/include/hw/arm/aspeed_soc.h
18
+++ b/include/hw/arm/aspeed_soc.h
20
@@ -XXX,XX +XXX,XX @@ struct AspeedSoCClass {
19
@@ -XXX,XX +XXX,XX @@ struct AspeedSoCState {
21
int ehcis_num;
20
#define TYPE_ASPEED_SOC "aspeed-soc"
22
int wdts_num;
21
OBJECT_DECLARE_TYPE(AspeedSoCState, AspeedSoCClass, ASPEED_SOC)
23
int macs_num;
22
24
+ int uarts_num;
23
+struct Aspeed2600SoCState {
25
const int *irqmap;
24
+ AspeedSoCState parent;
26
const hwaddr *memmap;
25
+};
27
uint32_t num_cpus;
26
+
28
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
27
+#define TYPE_ASPEED2600_SOC "aspeed2600-soc"
29
index XXXXXXX..XXXXXXX 100644
28
+OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2600SoCState, ASPEED2600_SOC)
30
--- a/hw/arm/aspeed_ast10x0.c
29
+
31
+++ b/hw/arm/aspeed_ast10x0.c
30
struct Aspeed10x0SoCState {
32
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data)
31
AspeedSoCState parent;
33
sc->ehcis_num = 0;
32
};
34
sc->wdts_num = 4;
35
sc->macs_num = 1;
36
+ sc->uarts_num = 13;
37
sc->irqmap = aspeed_soc_ast1030_irqmap;
38
sc->memmap = aspeed_soc_ast1030_memmap;
39
sc->num_cpus = 1;
40
diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
33
diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
41
index XXXXXXX..XXXXXXX 100644
34
index XXXXXXX..XXXXXXX 100644
42
--- a/hw/arm/aspeed_ast2600.c
35
--- a/hw/arm/aspeed_ast2600.c
43
+++ b/hw/arm/aspeed_ast2600.c
36
+++ b/hw/arm/aspeed_ast2600.c
44
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data)
37
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data)
45
sc->ehcis_num = 2;
38
sc->get_irq = aspeed_soc_ast2600_get_irq;
46
sc->wdts_num = 4;
39
}
47
sc->macs_num = 4;
40
48
+ sc->uarts_num = 13;
41
-static const TypeInfo aspeed_soc_ast2600_type_info = {
49
sc->irqmap = aspeed_soc_ast2600_irqmap;
42
- .name = "ast2600-a3",
50
sc->memmap = aspeed_soc_ast2600_memmap;
43
- .parent = TYPE_ASPEED_SOC,
51
sc->num_cpus = 2;
44
- .instance_size = sizeof(AspeedSoCState),
52
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
45
- .instance_init = aspeed_soc_ast2600_init,
53
index XXXXXXX..XXXXXXX 100644
46
- .class_init = aspeed_soc_ast2600_class_init,
54
--- a/hw/arm/aspeed_soc.c
47
- .class_size = sizeof(AspeedSoCClass),
55
+++ b/hw/arm/aspeed_soc.c
48
+static const TypeInfo aspeed_soc_ast2600_types[] = {
56
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
49
+ {
57
sc->ehcis_num = 1;
50
+ .name = TYPE_ASPEED2600_SOC,
58
sc->wdts_num = 2;
51
+ .parent = TYPE_ASPEED_SOC,
59
sc->macs_num = 2;
52
+ .instance_size = sizeof(Aspeed2600SoCState),
60
+ sc->uarts_num = 5;
53
+ .abstract = true,
61
sc->irqmap = aspeed_soc_ast2400_irqmap;
54
+ }, {
62
sc->memmap = aspeed_soc_ast2400_memmap;
55
+ .name = "ast2600-a3",
63
sc->num_cpus = 1;
56
+ .parent = TYPE_ASPEED2600_SOC,
64
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
57
+ .instance_init = aspeed_soc_ast2600_init,
65
sc->ehcis_num = 2;
58
+ .class_init = aspeed_soc_ast2600_class_init,
66
sc->wdts_num = 3;
59
+ },
67
sc->macs_num = 2;
60
};
68
+ sc->uarts_num = 5;
61
69
sc->irqmap = aspeed_soc_ast2500_irqmap;
62
-static void aspeed_soc_register_types(void)
70
sc->memmap = aspeed_soc_ast2500_memmap;
63
-{
71
sc->num_cpus = 1;
64
- type_register_static(&aspeed_soc_ast2600_type_info);
65
-};
66
-
67
-type_init(aspeed_soc_register_types)
68
+DEFINE_TYPES(aspeed_soc_ast2600_types)
72
--
69
--
73
2.35.3
70
2.41.0
74
71
75
72
diff view generated by jsdifflib
1
From: Peter Delevoryas <pdel@fb.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
Signed-off-by: Peter Delevoryas <pdel@fb.com>
3
TYPE_ASPEED2400_SOC inherits from TYPE_ASPEED_SOC.
4
In few commits we'll add more fields, but to keep
5
review process simple, don't add any yet.
6
7
TYPE_ASPEED_SOC is common to various Aspeed SoCs,
8
define it in aspeed_soc_common.c.
9
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
Reviewed-by: Cédric Le Goater <clg@kaod.org>
11
Reviewed-by: Cédric Le Goater <clg@kaod.org>
5
Message-Id: <20220516062328.298336-5-pdel@fb.com>
6
Signed-off-by: Cédric Le Goater <clg@kaod.org>
12
Signed-off-by: Cédric Le Goater <clg@kaod.org>
7
---
13
---
8
include/hw/arm/aspeed_soc.h | 1 +
14
include/hw/arm/aspeed_soc.h | 7 +++++
9
hw/arm/aspeed_ast10x0.c | 7 ++-----
15
hw/arm/aspeed_soc.c | 61 +++++++++++--------------------------
10
hw/arm/aspeed_ast2600.c | 7 ++-----
16
hw/arm/aspeed_soc_common.c | 29 ++++++++++++++++++
11
hw/arm/aspeed_soc.c | 16 ++++++++++++----
17
3 files changed, 53 insertions(+), 44 deletions(-)
12
4 files changed, 17 insertions(+), 14 deletions(-)
13
18
14
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
19
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
15
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
16
--- a/include/hw/arm/aspeed_soc.h
21
--- a/include/hw/arm/aspeed_soc.h
17
+++ b/include/hw/arm/aspeed_soc.h
22
+++ b/include/hw/arm/aspeed_soc.h
18
@@ -XXX,XX +XXX,XX @@ enum {
23
@@ -XXX,XX +XXX,XX @@ struct AspeedSoCState {
24
#define TYPE_ASPEED_SOC "aspeed-soc"
25
OBJECT_DECLARE_TYPE(AspeedSoCState, AspeedSoCClass, ASPEED_SOC)
26
27
+struct Aspeed2400SoCState {
28
+ AspeedSoCState parent;
29
+};
30
+
31
+#define TYPE_ASPEED2400_SOC "aspeed2400-soc"
32
+OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2400SoCState, ASPEED2400_SOC)
33
+
34
struct Aspeed2600SoCState {
35
AspeedSoCState parent;
19
};
36
};
20
21
qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev);
22
+void aspeed_soc_uart_init(AspeedSoCState *s);
23
24
#endif /* ASPEED_SOC_H */
25
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
26
index XXXXXXX..XXXXXXX 100644
27
--- a/hw/arm/aspeed_ast10x0.c
28
+++ b/hw/arm/aspeed_ast10x0.c
29
@@ -XXX,XX +XXX,XX @@
30
#include "sysemu/sysemu.h"
31
#include "hw/qdev-clock.h"
32
#include "hw/misc/unimp.h"
33
-#include "hw/char/serial.h"
34
#include "hw/arm/aspeed_soc.h"
35
36
#define ASPEED_SOC_IOMEM_SIZE 0x00200000
37
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
38
qdev_get_gpio_in(DEVICE(&s->armv7m),
39
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_4));
40
41
- /* UART - attach an 8250 to the IO space as our UART */
42
- serial_mm_init(get_system_memory(), sc->memmap[s->uart_default], 2,
43
- aspeed_soc_get_irq(s, s->uart_default),
44
- 38400, serial_hd(0), DEVICE_LITTLE_ENDIAN);
45
+ /* UART */
46
+ aspeed_soc_uart_init(s);
47
48
/* Timer */
49
object_property_set_link(OBJECT(&s->timerctrl), "scu", OBJECT(&s->scu),
50
diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
51
index XXXXXXX..XXXXXXX 100644
52
--- a/hw/arm/aspeed_ast2600.c
53
+++ b/hw/arm/aspeed_ast2600.c
54
@@ -XXX,XX +XXX,XX @@
55
#include "qapi/error.h"
56
#include "hw/misc/unimp.h"
57
#include "hw/arm/aspeed_soc.h"
58
-#include "hw/char/serial.h"
59
#include "qemu/module.h"
60
#include "qemu/error-report.h"
61
#include "hw/i2c/aspeed_i2c.h"
62
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
63
sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0,
64
aspeed_soc_get_irq(s, ASPEED_DEV_ADC));
65
66
- /* UART - attach an 8250 to the IO space as our UART */
67
- serial_mm_init(get_system_memory(), sc->memmap[s->uart_default], 2,
68
- aspeed_soc_get_irq(s, s->uart_default), 38400,
69
- serial_hd(0), DEVICE_LITTLE_ENDIAN);
70
+ /* UART */
71
+ aspeed_soc_uart_init(s);
72
73
/* I2C */
74
object_property_set_link(OBJECT(&s->i2c), "dram", OBJECT(s->dram_mr),
75
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
37
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
76
index XXXXXXX..XXXXXXX 100644
38
index XXXXXXX..XXXXXXX 100644
77
--- a/hw/arm/aspeed_soc.c
39
--- a/hw/arm/aspeed_soc.c
78
+++ b/hw/arm/aspeed_soc.c
40
+++ b/hw/arm/aspeed_soc.c
79
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_realize(DeviceState *dev, Error **errp)
41
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
80
sysbus_connect_irq(SYS_BUS_DEVICE(&s->adc), 0,
42
sysbus_connect_irq(SYS_BUS_DEVICE(&s->hace), 0,
81
aspeed_soc_get_irq(s, ASPEED_DEV_ADC));
43
aspeed_soc_get_irq(s, ASPEED_DEV_HACE));
82
44
}
83
- /* UART - attach an 8250 to the IO space as our UART */
45
-static Property aspeed_soc_properties[] = {
84
- serial_mm_init(get_system_memory(), sc->memmap[s->uart_default], 2,
46
- DEFINE_PROP_LINK("memory", AspeedSoCState, memory, TYPE_MEMORY_REGION,
85
- aspeed_soc_get_irq(s, s->uart_default), 38400,
47
- MemoryRegion *),
86
- serial_hd(0), DEVICE_LITTLE_ENDIAN);
48
- DEFINE_PROP_LINK("dram", AspeedSoCState, dram_mr, TYPE_MEMORY_REGION,
87
+ /* UART */
49
- MemoryRegion *),
88
+ aspeed_soc_uart_init(s);
50
- DEFINE_PROP_END_OF_LIST(),
89
51
-};
90
/* I2C */
52
-
91
object_property_set_link(OBJECT(&s->i2c), "dram", OBJECT(s->dram_mr),
53
-static void aspeed_soc_class_init(ObjectClass *oc, void *data)
92
@@ -XXX,XX +XXX,XX @@ qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev)
54
-{
55
- DeviceClass *dc = DEVICE_CLASS(oc);
56
-
57
- device_class_set_props(dc, aspeed_soc_properties);
58
-}
59
-
60
-static const TypeInfo aspeed_soc_type_info = {
61
- .name = TYPE_ASPEED_SOC,
62
- .parent = TYPE_DEVICE,
63
- .instance_size = sizeof(AspeedSoCState),
64
- .class_size = sizeof(AspeedSoCClass),
65
- .class_init = aspeed_soc_class_init,
66
- .abstract = true,
67
-};
68
69
static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
93
{
70
{
94
return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev);
71
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
72
sc->get_irq = aspeed_soc_ast2400_get_irq;
73
}
74
75
-static const TypeInfo aspeed_soc_ast2400_type_info = {
76
- .name = "ast2400-a1",
77
- .parent = TYPE_ASPEED_SOC,
78
- .instance_init = aspeed_ast2400_soc_init,
79
- .instance_size = sizeof(AspeedSoCState),
80
- .class_init = aspeed_soc_ast2400_class_init,
81
-};
82
-
83
static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
84
{
85
AspeedSoCClass *sc = ASPEED_SOC_CLASS(oc);
86
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
87
sc->get_irq = aspeed_soc_ast2400_get_irq;
88
}
89
90
-static const TypeInfo aspeed_soc_ast2500_type_info = {
91
- .name = "ast2500-a1",
92
- .parent = TYPE_ASPEED_SOC,
93
- .instance_init = aspeed_ast2400_soc_init,
94
- .instance_size = sizeof(AspeedSoCState),
95
- .class_init = aspeed_soc_ast2500_class_init,
96
-};
97
-static void aspeed_soc_register_types(void)
98
-{
99
- type_register_static(&aspeed_soc_type_info);
100
- type_register_static(&aspeed_soc_ast2400_type_info);
101
- type_register_static(&aspeed_soc_ast2500_type_info);
102
+static const TypeInfo aspeed_soc_ast2400_types[] = {
103
+ {
104
+ .name = TYPE_ASPEED2400_SOC,
105
+ .parent = TYPE_ASPEED_SOC,
106
+ .instance_init = aspeed_ast2400_soc_init,
107
+ .instance_size = sizeof(Aspeed2400SoCState),
108
+ .abstract = true,
109
+ }, {
110
+ .name = "ast2400-a1",
111
+ .parent = TYPE_ASPEED2400_SOC,
112
+ .class_init = aspeed_soc_ast2400_class_init,
113
+ }, {
114
+ .name = "ast2500-a1",
115
+ .parent = TYPE_ASPEED2400_SOC,
116
+ .class_init = aspeed_soc_ast2500_class_init,
117
+ },
118
};
119
120
-type_init(aspeed_soc_register_types);
121
+DEFINE_TYPES(aspeed_soc_ast2400_types)
122
diff --git a/hw/arm/aspeed_soc_common.c b/hw/arm/aspeed_soc_common.c
123
index XXXXXXX..XXXXXXX 100644
124
--- a/hw/arm/aspeed_soc_common.c
125
+++ b/hw/arm/aspeed_soc_common.c
126
@@ -XXX,XX +XXX,XX @@
127
128
#include "qemu/osdep.h"
129
#include "qapi/error.h"
130
+#include "hw/qdev-properties.h"
131
#include "hw/misc/unimp.h"
132
#include "hw/arm/aspeed_soc.h"
133
#include "hw/char/serial.h"
134
@@ -XXX,XX +XXX,XX @@ void aspeed_mmio_map_unimplemented(AspeedSoCState *s, SysBusDevice *dev,
135
memory_region_add_subregion_overlap(s->memory, addr,
136
sysbus_mmio_get_region(dev, 0), -1000);
95
}
137
}
96
+
138
+
97
+void aspeed_soc_uart_init(AspeedSoCState *s)
139
+static Property aspeed_soc_properties[] = {
140
+ DEFINE_PROP_LINK("dram", AspeedSoCState, dram_mr, TYPE_MEMORY_REGION,
141
+ MemoryRegion *),
142
+ DEFINE_PROP_LINK("memory", AspeedSoCState, memory, TYPE_MEMORY_REGION,
143
+ MemoryRegion *),
144
+ DEFINE_PROP_END_OF_LIST(),
145
+};
146
+
147
+static void aspeed_soc_class_init(ObjectClass *oc, void *data)
98
+{
148
+{
99
+ AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
149
+ DeviceClass *dc = DEVICE_CLASS(oc);
100
+
150
+
101
+ /* Attach an 8250 to the IO space as our UART */
151
+ device_class_set_props(dc, aspeed_soc_properties);
102
+ serial_mm_init(get_system_memory(), sc->memmap[s->uart_default], 2,
103
+ aspeed_soc_get_irq(s, s->uart_default), 38400,
104
+ serial_hd(0), DEVICE_LITTLE_ENDIAN);
105
+}
152
+}
153
+
154
+static const TypeInfo aspeed_soc_types[] = {
155
+ {
156
+ .name = TYPE_ASPEED_SOC,
157
+ .parent = TYPE_DEVICE,
158
+ .instance_size = sizeof(AspeedSoCState),
159
+ .class_size = sizeof(AspeedSoCClass),
160
+ .class_init = aspeed_soc_class_init,
161
+ .abstract = true,
162
+ },
163
+};
164
+
165
+DEFINE_TYPES(aspeed_soc_types)
106
--
166
--
107
2.35.3
167
2.41.0
108
168
109
169
diff view generated by jsdifflib
1
From: Jamin Lin <jamin_lin@aspeedtech.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
AST1030 integrates one set of Parallel GPIO Controller
3
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
4
with maximum 151 control pins, which are 21 groups
5
(A~U, exclude pin: M6 M7 Q5 Q6 Q7 R0 R1 R4 R5 R6 R7 S0 S3 S4
6
S5 S6 S7 ) and the group T and U are input only.
7
8
Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
9
Reviewed-by: Cédric Le Goater <clg@kaod.org>
4
Reviewed-by: Cédric Le Goater <clg@kaod.org>
10
Message-Id: <20220525053444.27228-3-jamin_lin@aspeedtech.com>
11
Signed-off-by: Cédric Le Goater <clg@kaod.org>
5
Signed-off-by: Cédric Le Goater <clg@kaod.org>
12
---
6
---
13
hw/arm/aspeed_ast10x0.c | 11 +++++++++++
7
hw/arm/aspeed_soc_common.c | 11 +++++++++++
14
hw/gpio/aspeed_gpio.c | 27 +++++++++++++++++++++++++++
8
1 file changed, 11 insertions(+)
15
2 files changed, 38 insertions(+)
16
9
17
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
10
diff --git a/hw/arm/aspeed_soc_common.c b/hw/arm/aspeed_soc_common.c
18
index XXXXXXX..XXXXXXX 100644
11
index XXXXXXX..XXXXXXX 100644
19
--- a/hw/arm/aspeed_ast10x0.c
12
--- a/hw/arm/aspeed_soc_common.c
20
+++ b/hw/arm/aspeed_ast10x0.c
13
+++ b/hw/arm/aspeed_soc_common.c
21
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_init(Object *obj)
14
@@ -XXX,XX +XXX,XX @@ void aspeed_mmio_map_unimplemented(AspeedSoCState *s, SysBusDevice *dev,
22
snprintf(typename, sizeof(typename), "aspeed.wdt-%s", socname);
15
sysbus_mmio_get_region(dev, 0), -1000);
23
object_initialize_child(obj, "wdt[*]", &s->wdt[i], typename);
16
}
24
}
17
18
+static void aspeed_soc_realize(DeviceState *dev, Error **errp)
19
+{
20
+ AspeedSoCState *s = ASPEED_SOC(dev);
25
+
21
+
26
+ snprintf(typename, sizeof(typename), "aspeed.gpio-%s", socname);
22
+ if (!s->memory) {
27
+ object_initialize_child(obj, "gpio", &s->gpio, typename);
23
+ error_setg(errp, "'memory' link is not set");
28
}
29
30
static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
31
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
32
sysbus_mmio_map(SYS_BUS_DEVICE(&s->wdt[i]), 0,
33
sc->memmap[ASPEED_DEV_WDT] + i * awc->offset);
34
}
35
+
36
+ /* GPIO */
37
+ if (!sysbus_realize(SYS_BUS_DEVICE(&s->gpio), errp)) {
38
+ return;
24
+ return;
39
+ }
25
+ }
40
+ sysbus_mmio_map(SYS_BUS_DEVICE(&s->gpio), 0, sc->memmap[ASPEED_DEV_GPIO]);
41
+ sysbus_connect_irq(SYS_BUS_DEVICE(&s->gpio), 0,
42
+ aspeed_soc_get_irq(s, ASPEED_DEV_GPIO));
43
}
44
45
static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data)
46
diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c
47
index XXXXXXX..XXXXXXX 100644
48
--- a/hw/gpio/aspeed_gpio.c
49
+++ b/hw/gpio/aspeed_gpio.c
50
@@ -XXX,XX +XXX,XX @@ static GPIOSetProperties ast2600_1_8v_set_props[ASPEED_GPIO_MAX_NR_SETS] = {
51
[1] = {0x0000000f, 0x0000000f, {"18E"} },
52
};
53
54
+static GPIOSetProperties ast1030_set_props[ASPEED_GPIO_MAX_NR_SETS] = {
55
+ [0] = {0xffffffff, 0xffffffff, {"A", "B", "C", "D"} },
56
+ [1] = {0xffffffff, 0xffffffff, {"E", "F", "G", "H"} },
57
+ [2] = {0xffffffff, 0xffffffff, {"I", "J", "K", "L"} },
58
+ [3] = {0xffffff3f, 0xffffff3f, {"M", "N", "O", "P"} },
59
+ [4] = {0xff060c1f, 0x00060c1f, {"Q", "R", "S", "T"} },
60
+ [5] = {0x000000ff, 0x00000000, {"U"} },
61
+};
62
+
63
static const MemoryRegionOps aspeed_gpio_ops = {
64
.read = aspeed_gpio_read,
65
.write = aspeed_gpio_write,
66
@@ -XXX,XX +XXX,XX @@ static void aspeed_gpio_ast2600_1_8v_class_init(ObjectClass *klass, void *data)
67
agc->reg_table = aspeed_1_8v_gpios;
68
}
69
70
+static void aspeed_gpio_1030_class_init(ObjectClass *klass, void *data)
71
+{
72
+ AspeedGPIOClass *agc = ASPEED_GPIO_CLASS(klass);
73
+
74
+ agc->props = ast1030_set_props;
75
+ agc->nr_gpio_pins = 151;
76
+ agc->nr_gpio_sets = 6;
77
+ agc->reg_table = aspeed_3_3v_gpios;
78
+}
26
+}
79
+
27
+
80
static const TypeInfo aspeed_gpio_info = {
28
static Property aspeed_soc_properties[] = {
81
.name = TYPE_ASPEED_GPIO,
29
DEFINE_PROP_LINK("dram", AspeedSoCState, dram_mr, TYPE_MEMORY_REGION,
82
.parent = TYPE_SYS_BUS_DEVICE,
30
MemoryRegion *),
83
@@ -XXX,XX +XXX,XX @@ static const TypeInfo aspeed_gpio_ast2600_1_8v_info = {
31
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_class_init(ObjectClass *oc, void *data)
84
.instance_init = aspeed_gpio_init,
85
};
86
87
+static const TypeInfo aspeed_gpio_ast1030_info = {
88
+ .name = TYPE_ASPEED_GPIO "-ast1030",
89
+ .parent = TYPE_ASPEED_GPIO,
90
+ .class_init = aspeed_gpio_1030_class_init,
91
+ .instance_init = aspeed_gpio_init,
92
+};
93
+
94
static void aspeed_gpio_register_types(void)
95
{
32
{
96
type_register_static(&aspeed_gpio_info);
33
DeviceClass *dc = DEVICE_CLASS(oc);
97
@@ -XXX,XX +XXX,XX @@ static void aspeed_gpio_register_types(void)
34
98
type_register_static(&aspeed_gpio_ast2500_info);
35
+ dc->realize = aspeed_soc_realize;
99
type_register_static(&aspeed_gpio_ast2600_3_3v_info);
36
device_class_set_props(dc, aspeed_soc_properties);
100
type_register_static(&aspeed_gpio_ast2600_1_8v_info);
101
+ type_register_static(&aspeed_gpio_ast1030_info);
102
}
37
}
103
38
104
type_init(aspeed_gpio_register_types);
105
--
39
--
106
2.35.3
40
2.41.0
107
41
108
42
diff view generated by jsdifflib
1
From: Peter Delevoryas <pdel@fb.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
The AST1030 machine initialization was not respecting the Aspeed SoC
3
The v7-M core is specific to the Aspeed 10x0 series,
4
property "uart-default", which specifies which UART should be connected to
4
remove it from the common AspeedSoCState.
5
the first serial device, it was just always connecting UART5. This doesn't
6
change any behavior, because the default value for "uart-default" is UART5,
7
but it makes it possible to override this in new machine definitions using
8
the AST1030.
9
5
10
Signed-off-by: Peter Delevoryas <pdel@fb.com>
6
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Reviewed-by: Cédric Le Goater <clg@kaod.org>
12
Message-Id: <20220516062328.298336-4-pdel@fb.com>
13
Signed-off-by: Cédric Le Goater <clg@kaod.org>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
14
---
9
---
15
hw/arm/aspeed_ast10x0.c | 6 +++---
10
include/hw/arm/aspeed_soc.h | 5 ++---
16
1 file changed, 3 insertions(+), 3 deletions(-)
11
hw/arm/aspeed_ast10x0.c | 27 +++++++++++++++------------
12
hw/arm/fby35.c | 13 ++++++++-----
13
3 files changed, 25 insertions(+), 20 deletions(-)
17
14
15
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
16
index XXXXXXX..XXXXXXX 100644
17
--- a/include/hw/arm/aspeed_soc.h
18
+++ b/include/hw/arm/aspeed_soc.h
19
@@ -XXX,XX +XXX,XX @@
20
#define ASPEED_JTAG_NUM 2
21
22
struct AspeedSoCState {
23
- /*< private >*/
24
DeviceState parent;
25
26
- /*< public >*/
27
ARMCPU cpu[ASPEED_CPUS_NUM];
28
A15MPPrivState a7mpcore;
29
- ARMv7MState armv7m;
30
MemoryRegion *memory;
31
MemoryRegion *dram_mr;
32
MemoryRegion dram_container;
33
@@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2600SoCState, ASPEED2600_SOC)
34
35
struct Aspeed10x0SoCState {
36
AspeedSoCState parent;
37
+
38
+ ARMv7MState armv7m;
39
};
40
41
#define TYPE_ASPEED10X0_SOC "aspeed10x0-soc"
18
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
42
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
19
index XXXXXXX..XXXXXXX 100644
43
index XXXXXXX..XXXXXXX 100644
20
--- a/hw/arm/aspeed_ast10x0.c
44
--- a/hw/arm/aspeed_ast10x0.c
21
+++ b/hw/arm/aspeed_ast10x0.c
45
+++ b/hw/arm/aspeed_ast10x0.c
46
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast1030_irqmap[] = {
47
48
static qemu_irq aspeed_soc_ast1030_get_irq(AspeedSoCState *s, int dev)
49
{
50
+ Aspeed10x0SoCState *a = ASPEED10X0_SOC(s);
51
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
52
53
- return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[dev]);
54
+ return qdev_get_gpio_in(DEVICE(&a->armv7m), sc->irqmap[dev]);
55
}
56
57
static void aspeed_soc_ast1030_init(Object *obj)
58
{
59
+ Aspeed10x0SoCState *a = ASPEED10X0_SOC(obj);
60
AspeedSoCState *s = ASPEED_SOC(obj);
61
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
62
char socname[8];
63
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_init(Object *obj)
64
g_assert_not_reached();
65
}
66
67
- object_initialize_child(obj, "armv7m", &s->armv7m, TYPE_ARMV7M);
68
+ object_initialize_child(obj, "armv7m", &a->armv7m, TYPE_ARMV7M);
69
70
s->sysclk = qdev_init_clock_in(DEVICE(s), "sysclk", NULL, NULL, 0);
71
72
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_init(Object *obj)
73
74
static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
75
{
76
+ Aspeed10x0SoCState *a = ASPEED10X0_SOC(dev_soc);
77
AspeedSoCState *s = ASPEED_SOC(dev_soc);
78
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
79
DeviceState *armv7m;
22
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
80
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
23
qdev_get_gpio_in(DEVICE(&s->armv7m),
81
0x40000);
82
83
/* AST1030 CPU Core */
84
- armv7m = DEVICE(&s->armv7m);
85
+ armv7m = DEVICE(&a->armv7m);
86
qdev_prop_set_uint32(armv7m, "num-irq", 256);
87
qdev_prop_set_string(armv7m, "cpu-type", sc->cpu_type);
88
qdev_connect_clock_in(armv7m, "cpuclk", s->sysclk);
89
- object_property_set_link(OBJECT(&s->armv7m), "memory",
90
+ object_property_set_link(OBJECT(&a->armv7m), "memory",
91
OBJECT(s->memory), &error_abort);
92
- sysbus_realize(SYS_BUS_DEVICE(&s->armv7m), &error_abort);
93
+ sysbus_realize(SYS_BUS_DEVICE(&a->armv7m), &error_abort);
94
95
/* Internal SRAM */
96
sram_name = g_strdup_printf("aspeed.sram.%d",
97
- CPU(s->armv7m.cpu)->cpu_index);
98
+ CPU(a->armv7m.cpu)->cpu_index);
99
memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size, &err);
100
if (err != NULL) {
101
error_propagate(errp, err);
102
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
103
}
104
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i2c), 0, sc->memmap[ASPEED_DEV_I2C]);
105
for (i = 0; i < ASPEED_I2C_GET_CLASS(&s->i2c)->num_busses; i++) {
106
- qemu_irq irq = qdev_get_gpio_in(DEVICE(&s->armv7m),
107
+ qemu_irq irq = qdev_get_gpio_in(DEVICE(&a->armv7m),
108
sc->irqmap[ASPEED_DEV_I2C] + i);
109
/* The AST1030 I2C controller has one IRQ per bus. */
110
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c.busses[i]), 0, irq);
111
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
112
}
113
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i3c), 0, sc->memmap[ASPEED_DEV_I3C]);
114
for (i = 0; i < ASPEED_I3C_NR_DEVICES; i++) {
115
- qemu_irq irq = qdev_get_gpio_in(DEVICE(&s->armv7m),
116
+ qemu_irq irq = qdev_get_gpio_in(DEVICE(&a->armv7m),
117
sc->irqmap[ASPEED_DEV_I3C] + i);
118
/* The AST1030 I3C controller has one IRQ per bus. */
119
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i3c.devices[i]), 0, irq);
120
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_realize(DeviceState *dev_soc, Error **errp)
121
* On the AST1030 LPC subdevice IRQs are connected straight to the GIC.
122
*/
123
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_1,
124
- qdev_get_gpio_in(DEVICE(&s->armv7m),
125
+ qdev_get_gpio_in(DEVICE(&a->armv7m),
126
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_1));
127
128
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_2,
129
- qdev_get_gpio_in(DEVICE(&s->armv7m),
130
+ qdev_get_gpio_in(DEVICE(&a->armv7m),
131
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_2));
132
133
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_3,
134
- qdev_get_gpio_in(DEVICE(&s->armv7m),
135
+ qdev_get_gpio_in(DEVICE(&a->armv7m),
136
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_3));
137
138
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_4,
139
- qdev_get_gpio_in(DEVICE(&s->armv7m),
140
+ qdev_get_gpio_in(DEVICE(&a->armv7m),
24
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_4));
141
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_4));
25
142
26
- /* UART5 - attach an 8250 to the IO space as our UART */
143
/* UART */
27
- serial_mm_init(get_system_memory(), sc->memmap[ASPEED_DEV_UART5], 2,
144
diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c
28
- aspeed_soc_get_irq(s, ASPEED_DEV_UART5),
145
index XXXXXXX..XXXXXXX 100644
29
+ /* UART - attach an 8250 to the IO space as our UART */
146
--- a/hw/arm/fby35.c
30
+ serial_mm_init(get_system_memory(), sc->memmap[s->uart_default], 2,
147
+++ b/hw/arm/fby35.c
31
+ aspeed_soc_get_irq(s, s->uart_default),
148
@@ -XXX,XX +XXX,XX @@ struct Fby35State {
32
38400, serial_hd(0), DEVICE_LITTLE_ENDIAN);
149
Clock *bic_sysclk;
33
150
34
/* Timer */
151
AspeedSoCState bmc;
152
- AspeedSoCState bic;
153
+ Aspeed10x0SoCState bic;
154
155
bool mmio_exec;
156
};
157
@@ -XXX,XX +XXX,XX @@ static void fby35_bmc_init(Fby35State *s)
158
159
static void fby35_bic_init(Fby35State *s)
160
{
161
+ AspeedSoCState *soc;
162
+
163
s->bic_sysclk = clock_new(OBJECT(s), "SYSCLK");
164
clock_set_hz(s->bic_sysclk, 200000000ULL);
165
166
object_initialize_child(OBJECT(s), "bic", &s->bic, "ast1030-a1");
167
+ soc = ASPEED_SOC(&s->bic);
168
169
memory_region_init(&s->bic_memory, OBJECT(&s->bic), "bic-memory",
170
UINT64_MAX);
171
@@ -XXX,XX +XXX,XX @@ static void fby35_bic_init(Fby35State *s)
172
qdev_connect_clock_in(DEVICE(&s->bic), "sysclk", s->bic_sysclk);
173
object_property_set_link(OBJECT(&s->bic), "memory", OBJECT(&s->bic_memory),
174
&error_abort);
175
- aspeed_soc_uart_set_chr(&s->bic, ASPEED_DEV_UART5, serial_hd(1));
176
+ aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART5, serial_hd(1));
177
qdev_realize(DEVICE(&s->bic), NULL, &error_abort);
178
179
- aspeed_board_init_flashes(&s->bic.fmc, "sst25vf032b", 2, 2);
180
- aspeed_board_init_flashes(&s->bic.spi[0], "sst25vf032b", 2, 4);
181
- aspeed_board_init_flashes(&s->bic.spi[1], "sst25vf032b", 2, 6);
182
+ aspeed_board_init_flashes(&soc->fmc, "sst25vf032b", 2, 2);
183
+ aspeed_board_init_flashes(&soc->spi[0], "sst25vf032b", 2, 4);
184
+ aspeed_board_init_flashes(&soc->spi[1], "sst25vf032b", 2, 6);
185
}
186
187
static void fby35_init(MachineState *machine)
35
--
188
--
36
2.35.3
189
2.41.0
37
190
38
191
diff view generated by jsdifflib
1
and make routine aspeed_soc_get_irq() common to all SoCs. This will be
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
useful to share code.
2
3
3
The v7-A cluster is specific to the Aspeed 2600 series,
4
Cc: Jamin Lin <jamin_lin@aspeedtech.com>
4
remove it from the common AspeedSoCState.
5
Cc: Peter Delevoryas <pdel@fb.com>
5
6
Reviewed-by: Peter Delevoryas <pdel@fb.com>
6
The ARM cores belong to the MP cluster, but the array
7
Signed-off-by: Cédric Le Goater <clg@kaod.org>
7
is currently used by TYPE_ASPEED2600_SOC. We'll clean
8
Message-Id: <20220516055620.2380197-1-clg@kaod.org>
8
that soon, but for now keep it in Aspeed2600SoCState.
9
10
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
11
Reviewed-by: Cédric Le Goater <clg@kaod.org>
9
Signed-off-by: Cédric Le Goater <clg@kaod.org>
12
Signed-off-by: Cédric Le Goater <clg@kaod.org>
10
---
13
---
11
include/hw/arm/aspeed_soc.h | 3 +++
14
include/hw/arm/aspeed_soc.h | 4 ++-
12
hw/arm/aspeed_ast10x0.c | 5 +++--
15
hw/arm/aspeed_ast2600.c | 49 ++++++++++++++++++++-----------------
13
hw/arm/aspeed_ast2600.c | 5 +++--
16
hw/arm/fby35.c | 14 ++++++-----
14
hw/arm/aspeed_soc.c | 13 ++++++++++---
17
3 files changed, 37 insertions(+), 30 deletions(-)
15
4 files changed, 19 insertions(+), 7 deletions(-)
16
18
17
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
19
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
18
index XXXXXXX..XXXXXXX 100644
20
index XXXXXXX..XXXXXXX 100644
19
--- a/include/hw/arm/aspeed_soc.h
21
--- a/include/hw/arm/aspeed_soc.h
20
+++ b/include/hw/arm/aspeed_soc.h
22
+++ b/include/hw/arm/aspeed_soc.h
21
@@ -XXX,XX +XXX,XX @@ struct AspeedSoCClass {
23
@@ -XXX,XX +XXX,XX @@ struct AspeedSoCState {
22
const int *irqmap;
24
DeviceState parent;
23
const hwaddr *memmap;
25
24
uint32_t num_cpus;
26
ARMCPU cpu[ASPEED_CPUS_NUM];
25
+ qemu_irq (*get_irq)(AspeedSoCState *s, int dev);
27
- A15MPPrivState a7mpcore;
28
MemoryRegion *memory;
29
MemoryRegion *dram_mr;
30
MemoryRegion dram_container;
31
@@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_SIMPLE_TYPE(Aspeed2400SoCState, ASPEED2400_SOC)
32
33
struct Aspeed2600SoCState {
34
AspeedSoCState parent;
35
+
36
+ A15MPPrivState a7mpcore;
37
+ ARMCPU cpu[ASPEED_CPUS_NUM]; /* XXX belong to a7mpcore */
26
};
38
};
27
39
28
40
#define TYPE_ASPEED2600_SOC "aspeed2600-soc"
29
@@ -XXX,XX +XXX,XX @@ enum {
30
ASPEED_DEV_I3C,
31
};
32
33
+qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev);
34
+
35
#endif /* ASPEED_SOC_H */
36
diff --git a/hw/arm/aspeed_ast10x0.c b/hw/arm/aspeed_ast10x0.c
37
index XXXXXXX..XXXXXXX 100644
38
--- a/hw/arm/aspeed_ast10x0.c
39
+++ b/hw/arm/aspeed_ast10x0.c
40
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast1030_irqmap[] = {
41
[ASPEED_DEV_KCS] = 138, /* 138 -> 142 */
42
};
43
44
-static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl)
45
+static qemu_irq aspeed_soc_ast1030_get_irq(AspeedSoCState *s, int dev)
46
{
47
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
48
49
- return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[ctrl]);
50
+ return qdev_get_gpio_in(DEVICE(&s->armv7m), sc->irqmap[dev]);
51
}
52
53
static void aspeed_soc_ast1030_init(Object *obj)
54
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast1030_class_init(ObjectClass *klass, void *data)
55
sc->irqmap = aspeed_soc_ast1030_irqmap;
56
sc->memmap = aspeed_soc_ast1030_memmap;
57
sc->num_cpus = 1;
58
+ sc->get_irq = aspeed_soc_ast1030_get_irq;
59
}
60
61
static const TypeInfo aspeed_soc_ast1030_type_info = {
62
diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
41
diff --git a/hw/arm/aspeed_ast2600.c b/hw/arm/aspeed_ast2600.c
63
index XXXXXXX..XXXXXXX 100644
42
index XXXXXXX..XXXXXXX 100644
64
--- a/hw/arm/aspeed_ast2600.c
43
--- a/hw/arm/aspeed_ast2600.c
65
+++ b/hw/arm/aspeed_ast2600.c
44
+++ b/hw/arm/aspeed_ast2600.c
66
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast2600_irqmap[] = {
45
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast2600_irqmap[] = {
67
[ASPEED_DEV_I3C] = 102, /* 102 -> 107 */
46
68
};
47
static qemu_irq aspeed_soc_ast2600_get_irq(AspeedSoCState *s, int dev)
69
48
{
70
-static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl)
49
+ Aspeed2600SoCState *a = ASPEED2600_SOC(s);
71
+static qemu_irq aspeed_soc_ast2600_get_irq(AspeedSoCState *s, int dev)
72
{
73
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
50
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
74
51
75
- return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[ctrl]);
52
- return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[dev]);
76
+ return qdev_get_gpio_in(DEVICE(&s->a7mpcore), sc->irqmap[dev]);
53
+ return qdev_get_gpio_in(DEVICE(&a->a7mpcore), sc->irqmap[dev]);
77
}
54
}
78
55
79
static void aspeed_soc_ast2600_init(Object *obj)
56
static void aspeed_soc_ast2600_init(Object *obj)
80
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_class_init(ObjectClass *oc, void *data)
57
{
81
sc->irqmap = aspeed_soc_ast2600_irqmap;
58
+ Aspeed2600SoCState *a = ASPEED2600_SOC(obj);
82
sc->memmap = aspeed_soc_ast2600_memmap;
59
AspeedSoCState *s = ASPEED_SOC(obj);
83
sc->num_cpus = 2;
60
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
84
+ sc->get_irq = aspeed_soc_ast2600_get_irq;
61
int i;
85
}
62
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_init(Object *obj)
86
63
}
87
static const TypeInfo aspeed_soc_ast2600_type_info = {
64
88
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_soc.c
65
for (i = 0; i < sc->num_cpus; i++) {
66
- object_initialize_child(obj, "cpu[*]", &s->cpu[i], sc->cpu_type);
67
+ object_initialize_child(obj, "cpu[*]", &a->cpu[i], sc->cpu_type);
68
}
69
70
snprintf(typename, sizeof(typename), "aspeed.scu-%s", socname);
71
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_init(Object *obj)
72
object_property_add_alias(obj, "hw-prot-key", OBJECT(&s->scu),
73
"hw-prot-key");
74
75
- object_initialize_child(obj, "a7mpcore", &s->a7mpcore,
76
+ object_initialize_child(obj, "a7mpcore", &a->a7mpcore,
77
TYPE_A15MPCORE_PRIV);
78
79
object_initialize_child(obj, "rtc", &s->rtc, TYPE_ASPEED_RTC);
80
@@ -XXX,XX +XXX,XX @@ static uint64_t aspeed_calc_affinity(int cpu)
81
static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
82
{
83
int i;
84
+ Aspeed2600SoCState *a = ASPEED2600_SOC(dev);
85
AspeedSoCState *s = ASPEED_SOC(dev);
86
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
87
Error *err = NULL;
88
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
89
/* CPU */
90
for (i = 0; i < sc->num_cpus; i++) {
91
if (sc->num_cpus > 1) {
92
- object_property_set_int(OBJECT(&s->cpu[i]), "reset-cbar",
93
+ object_property_set_int(OBJECT(&a->cpu[i]), "reset-cbar",
94
ASPEED_A7MPCORE_ADDR, &error_abort);
95
}
96
- object_property_set_int(OBJECT(&s->cpu[i]), "mp-affinity",
97
+ object_property_set_int(OBJECT(&a->cpu[i]), "mp-affinity",
98
aspeed_calc_affinity(i), &error_abort);
99
100
- object_property_set_int(OBJECT(&s->cpu[i]), "cntfrq", 1125000000,
101
+ object_property_set_int(OBJECT(&a->cpu[i]), "cntfrq", 1125000000,
102
&error_abort);
103
- object_property_set_bool(OBJECT(&s->cpu[i]), "neon", false,
104
+ object_property_set_bool(OBJECT(&a->cpu[i]), "neon", false,
105
&error_abort);
106
- object_property_set_bool(OBJECT(&s->cpu[i]), "vfp-d32", false,
107
+ object_property_set_bool(OBJECT(&a->cpu[i]), "vfp-d32", false,
108
&error_abort);
109
- object_property_set_link(OBJECT(&s->cpu[i]), "memory",
110
+ object_property_set_link(OBJECT(&a->cpu[i]), "memory",
111
OBJECT(s->memory), &error_abort);
112
113
- if (!qdev_realize(DEVICE(&s->cpu[i]), NULL, errp)) {
114
+ if (!qdev_realize(DEVICE(&a->cpu[i]), NULL, errp)) {
115
return;
116
}
117
}
118
119
/* A7MPCORE */
120
- object_property_set_int(OBJECT(&s->a7mpcore), "num-cpu", sc->num_cpus,
121
+ object_property_set_int(OBJECT(&a->a7mpcore), "num-cpu", sc->num_cpus,
122
&error_abort);
123
- object_property_set_int(OBJECT(&s->a7mpcore), "num-irq",
124
+ object_property_set_int(OBJECT(&a->a7mpcore), "num-irq",
125
ROUND_UP(AST2600_MAX_IRQ + GIC_INTERNAL, 32),
126
&error_abort);
127
128
- sysbus_realize(SYS_BUS_DEVICE(&s->a7mpcore), &error_abort);
129
- aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->a7mpcore), 0, ASPEED_A7MPCORE_ADDR);
130
+ sysbus_realize(SYS_BUS_DEVICE(&a->a7mpcore), &error_abort);
131
+ aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->a7mpcore), 0, ASPEED_A7MPCORE_ADDR);
132
133
for (i = 0; i < sc->num_cpus; i++) {
134
- SysBusDevice *sbd = SYS_BUS_DEVICE(&s->a7mpcore);
135
- DeviceState *d = DEVICE(&s->cpu[i]);
136
+ SysBusDevice *sbd = SYS_BUS_DEVICE(&a->a7mpcore);
137
+ DeviceState *d = DEVICE(&a->cpu[i]);
138
139
irq = qdev_get_gpio_in(d, ARM_CPU_IRQ);
140
sysbus_connect_irq(sbd, i, irq);
141
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
142
}
143
144
/* SRAM */
145
- sram_name = g_strdup_printf("aspeed.sram.%d", CPU(&s->cpu[0])->cpu_index);
146
+ sram_name = g_strdup_printf("aspeed.sram.%d", CPU(&a->cpu[0])->cpu_index);
147
memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size, &err);
148
if (err) {
149
error_propagate(errp, err);
150
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
151
}
152
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i2c), 0, sc->memmap[ASPEED_DEV_I2C]);
153
for (i = 0; i < ASPEED_I2C_GET_CLASS(&s->i2c)->num_busses; i++) {
154
- irq = qdev_get_gpio_in(DEVICE(&s->a7mpcore),
155
+ irq = qdev_get_gpio_in(DEVICE(&a->a7mpcore),
156
sc->irqmap[ASPEED_DEV_I2C] + i);
157
/* The AST2600 I2C controller has one IRQ per bus. */
158
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i2c.busses[i]), 0, irq);
159
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
160
* offset 0.
161
*/
162
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_1,
163
- qdev_get_gpio_in(DEVICE(&s->a7mpcore),
164
+ qdev_get_gpio_in(DEVICE(&a->a7mpcore),
165
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_1));
166
167
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_2,
168
- qdev_get_gpio_in(DEVICE(&s->a7mpcore),
169
+ qdev_get_gpio_in(DEVICE(&a->a7mpcore),
170
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_2));
171
172
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_3,
173
- qdev_get_gpio_in(DEVICE(&s->a7mpcore),
174
+ qdev_get_gpio_in(DEVICE(&a->a7mpcore),
175
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_3));
176
177
sysbus_connect_irq(SYS_BUS_DEVICE(&s->lpc), 1 + aspeed_lpc_kcs_4,
178
- qdev_get_gpio_in(DEVICE(&s->a7mpcore),
179
+ qdev_get_gpio_in(DEVICE(&a->a7mpcore),
180
sc->irqmap[ASPEED_DEV_KCS] + aspeed_lpc_kcs_4));
181
182
/* HACE */
183
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2600_realize(DeviceState *dev, Error **errp)
184
}
185
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->i3c), 0, sc->memmap[ASPEED_DEV_I3C]);
186
for (i = 0; i < ASPEED_I3C_NR_DEVICES; i++) {
187
- irq = qdev_get_gpio_in(DEVICE(&s->a7mpcore),
188
+ irq = qdev_get_gpio_in(DEVICE(&a->a7mpcore),
189
sc->irqmap[ASPEED_DEV_I3C] + i);
190
/* The AST2600 I3C controller has one IRQ per bus. */
191
sysbus_connect_irq(SYS_BUS_DEVICE(&s->i3c.devices[i]), 0, irq);
192
diff --git a/hw/arm/fby35.c b/hw/arm/fby35.c
89
index XXXXXXX..XXXXXXX 100644
193
index XXXXXXX..XXXXXXX 100644
90
--- a/hw/arm/aspeed_soc.c
194
--- a/hw/arm/fby35.c
91
+++ b/hw/arm/aspeed_soc.c
195
+++ b/hw/arm/fby35.c
92
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast2400_irqmap[] = {
196
@@ -XXX,XX +XXX,XX @@ struct Fby35State {
93
197
MemoryRegion bic_memory;
94
#define aspeed_soc_ast2500_irqmap aspeed_soc_ast2400_irqmap
198
Clock *bic_sysclk;
95
199
96
-static qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int ctrl)
200
- AspeedSoCState bmc;
97
+static qemu_irq aspeed_soc_ast2400_get_irq(AspeedSoCState *s, int dev)
201
+ Aspeed2600SoCState bmc;
98
{
202
Aspeed10x0SoCState bic;
99
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
203
100
204
bool mmio_exec;
101
- return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[ctrl]);
205
@@ -XXX,XX +XXX,XX @@ static void fby35_bmc_write_boot_rom(DriveInfo *dinfo, MemoryRegion *mr,
102
+ return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[dev]);
206
103
}
207
static void fby35_bmc_init(Fby35State *s)
104
208
{
105
static void aspeed_soc_init(Object *obj)
209
+ AspeedSoCState *soc;
106
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2400_class_init(ObjectClass *oc, void *data)
107
sc->irqmap = aspeed_soc_ast2400_irqmap;
108
sc->memmap = aspeed_soc_ast2400_memmap;
109
sc->num_cpus = 1;
110
+ sc->get_irq = aspeed_soc_ast2400_get_irq;
111
}
112
113
static const TypeInfo aspeed_soc_ast2400_type_info = {
114
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_ast2500_class_init(ObjectClass *oc, void *data)
115
sc->irqmap = aspeed_soc_ast2500_irqmap;
116
sc->memmap = aspeed_soc_ast2500_memmap;
117
sc->num_cpus = 1;
118
+ sc->get_irq = aspeed_soc_ast2400_get_irq;
119
}
120
121
static const TypeInfo aspeed_soc_ast2500_type_info = {
122
@@ -XXX,XX +XXX,XX @@ static void aspeed_soc_register_types(void)
123
type_register_static(&aspeed_soc_ast2500_type_info);
124
};
125
126
-type_init(aspeed_soc_register_types)
127
+type_init(aspeed_soc_register_types);
128
+
210
+
129
+qemu_irq aspeed_soc_get_irq(AspeedSoCState *s, int dev)
211
object_initialize_child(OBJECT(s), "bmc", &s->bmc, "ast2600-a3");
130
+{
212
+ soc = ASPEED_SOC(&s->bmc);
131
+ return ASPEED_SOC_GET_CLASS(s)->get_irq(s, dev);
213
132
+}
214
memory_region_init(&s->bmc_memory, OBJECT(&s->bmc), "bmc-memory",
215
UINT64_MAX);
216
@@ -XXX,XX +XXX,XX @@ static void fby35_bmc_init(Fby35State *s)
217
&error_abort);
218
object_property_set_int(OBJECT(&s->bmc), "hw-strap2", 0x00000003,
219
&error_abort);
220
- aspeed_soc_uart_set_chr(&s->bmc, ASPEED_DEV_UART5, serial_hd(0));
221
+ aspeed_soc_uart_set_chr(soc, ASPEED_DEV_UART5, serial_hd(0));
222
qdev_realize(DEVICE(&s->bmc), NULL, &error_abort);
223
224
- aspeed_board_init_flashes(&s->bmc.fmc, "n25q00", 2, 0);
225
+ aspeed_board_init_flashes(&soc->fmc, "n25q00", 2, 0);
226
227
/* Install first FMC flash content as a boot rom. */
228
if (!s->mmio_exec) {
229
DriveInfo *mtd0 = drive_get(IF_MTD, 0, 0);
230
231
if (mtd0) {
232
- AspeedSoCState *bmc = &s->bmc;
233
- uint64_t rom_size = memory_region_size(&bmc->spi_boot);
234
+ uint64_t rom_size = memory_region_size(&soc->spi_boot);
235
236
memory_region_init_rom(&s->bmc_boot_rom, NULL, "aspeed.boot_rom",
237
rom_size, &error_abort);
238
- memory_region_add_subregion_overlap(&bmc->spi_boot_container, 0,
239
+ memory_region_add_subregion_overlap(&soc->spi_boot_container, 0,
240
&s->bmc_boot_rom, 1);
241
242
fby35_bmc_write_boot_rom(mtd0, &s->bmc_boot_rom,
133
--
243
--
134
2.35.3
244
2.41.0
135
245
136
246
diff view generated by jsdifflib
1
From: Jamin Lin <jamin_lin@aspeedtech.com>
1
From: Philippe Mathieu-Daudé <philmd@linaro.org>
2
2
3
1. replace HWADDR_PRIx with PRIx64
3
The ARM array and VIC peripheral are only used by the
4
2. fix indent issue
4
2400 series, remove them from the common AspeedSoCState.
5
5
6
Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
6
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
7
Reviewed-by: Cédric Le Goater <clg@kaod.org>
7
Reviewed-by: Cédric Le Goater <clg@kaod.org>
8
Message-Id: <20220525053444.27228-5-jamin_lin@aspeedtech.com>
9
Signed-off-by: Cédric Le Goater <clg@kaod.org>
8
Signed-off-by: Cédric Le Goater <clg@kaod.org>
10
---
9
---
11
include/hw/gpio/aspeed_gpio.h | 2 +-
10
include/hw/arm/aspeed_soc.h | 5 +++--
12
hw/gpio/aspeed_gpio.c | 8 ++++----
11
hw/arm/{aspeed_soc.c => aspeed_ast2400.c} | 27 +++++++++++++----------
13
2 files changed, 5 insertions(+), 5 deletions(-)
12
hw/arm/meson.build | 2 +-
13
3 files changed, 19 insertions(+), 15 deletions(-)
14
rename hw/arm/{aspeed_soc.c => aspeed_ast2400.c} (95%)
14
15
15
diff --git a/include/hw/gpio/aspeed_gpio.h b/include/hw/gpio/aspeed_gpio.h
16
diff --git a/include/hw/arm/aspeed_soc.h b/include/hw/arm/aspeed_soc.h
16
index XXXXXXX..XXXXXXX 100644
17
index XXXXXXX..XXXXXXX 100644
17
--- a/include/hw/gpio/aspeed_gpio.h
18
--- a/include/hw/arm/aspeed_soc.h
18
+++ b/include/hw/gpio/aspeed_gpio.h
19
+++ b/include/hw/arm/aspeed_soc.h
19
@@ -XXX,XX +XXX,XX @@ enum GPIORegIndexType {
20
@@ -XXX,XX +XXX,XX @@
20
typedef struct AspeedGPIOReg {
21
struct AspeedSoCState {
21
uint16_t set_idx;
22
DeviceState parent;
22
enum GPIORegType type;
23
23
- } AspeedGPIOReg;
24
- ARMCPU cpu[ASPEED_CPUS_NUM];
24
+} AspeedGPIOReg;
25
MemoryRegion *memory;
25
26
MemoryRegion *dram_mr;
26
struct AspeedGPIOClass {
27
MemoryRegion dram_container;
27
SysBusDevice parent_obj;
28
MemoryRegion sram;
28
diff --git a/hw/gpio/aspeed_gpio.c b/hw/gpio/aspeed_gpio.c
29
MemoryRegion spi_boot_container;
30
MemoryRegion spi_boot;
31
- AspeedVICState vic;
32
AspeedRtcState rtc;
33
AspeedTimerCtrlState timerctrl;
34
AspeedI2CState i2c;
35
@@ -XXX,XX +XXX,XX @@ OBJECT_DECLARE_TYPE(AspeedSoCState, AspeedSoCClass, ASPEED_SOC)
36
37
struct Aspeed2400SoCState {
38
AspeedSoCState parent;
39
+
40
+ ARMCPU cpu[ASPEED_CPUS_NUM];
41
+ AspeedVICState vic;
42
};
43
44
#define TYPE_ASPEED2400_SOC "aspeed2400-soc"
45
diff --git a/hw/arm/aspeed_soc.c b/hw/arm/aspeed_ast2400.c
46
similarity index 95%
47
rename from hw/arm/aspeed_soc.c
48
rename to hw/arm/aspeed_ast2400.c
29
index XXXXXXX..XXXXXXX 100644
49
index XXXXXXX..XXXXXXX 100644
30
--- a/hw/gpio/aspeed_gpio.c
50
--- a/hw/arm/aspeed_soc.c
31
+++ b/hw/gpio/aspeed_gpio.c
51
+++ b/hw/arm/aspeed_ast2400.c
32
@@ -XXX,XX +XXX,XX @@ static uint64_t aspeed_gpio_read(void *opaque, hwaddr offset, uint32_t size)
52
@@ -XXX,XX +XXX,XX @@ static const int aspeed_soc_ast2400_irqmap[] = {
33
reg = &agc->reg_table[idx];
53
34
if (reg->set_idx >= agc->nr_gpio_sets) {
54
static qemu_irq aspeed_soc_ast2400_get_irq(AspeedSoCState *s, int dev)
35
qemu_log_mask(LOG_GUEST_ERROR, "%s: no getter for offset 0x%"
55
{
36
- HWADDR_PRIx"\n", __func__, offset);
56
+ Aspeed2400SoCState *a = ASPEED2400_SOC(s);
37
+ PRIx64"\n", __func__, offset);
57
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
38
return 0;
58
59
- return qdev_get_gpio_in(DEVICE(&s->vic), sc->irqmap[dev]);
60
+ return qdev_get_gpio_in(DEVICE(&a->vic), sc->irqmap[dev]);
61
}
62
63
static void aspeed_ast2400_soc_init(Object *obj)
64
{
65
+ Aspeed2400SoCState *a = ASPEED2400_SOC(obj);
66
AspeedSoCState *s = ASPEED_SOC(obj);
67
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
68
int i;
69
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_init(Object *obj)
39
}
70
}
40
71
41
@@ -XXX,XX +XXX,XX @@ static uint64_t aspeed_gpio_read(void *opaque, hwaddr offset, uint32_t size)
72
for (i = 0; i < sc->num_cpus; i++) {
42
break;
73
- object_initialize_child(obj, "cpu[*]", &s->cpu[i], sc->cpu_type);
43
default:
74
+ object_initialize_child(obj, "cpu[*]", &a->cpu[i], sc->cpu_type);
44
qemu_log_mask(LOG_GUEST_ERROR, "%s: no getter for offset 0x%"
45
- HWADDR_PRIx"\n", __func__, offset);
46
+ PRIx64"\n", __func__, offset);
47
return 0;
48
}
75
}
49
76
50
@@ -XXX,XX +XXX,XX @@ static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
77
snprintf(typename, sizeof(typename), "aspeed.scu-%s", socname);
51
reg = &agc->reg_table[idx];
78
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_init(Object *obj)
52
if (reg->set_idx >= agc->nr_gpio_sets) {
79
object_property_add_alias(obj, "hw-prot-key", OBJECT(&s->scu),
53
qemu_log_mask(LOG_GUEST_ERROR, "%s: no setter for offset 0x%"
80
"hw-prot-key");
54
- HWADDR_PRIx"\n", __func__, offset);
81
55
+ PRIx64"\n", __func__, offset);
82
- object_initialize_child(obj, "vic", &s->vic, TYPE_ASPEED_VIC);
83
+ object_initialize_child(obj, "vic", &a->vic, TYPE_ASPEED_VIC);
84
85
object_initialize_child(obj, "rtc", &s->rtc, TYPE_ASPEED_RTC);
86
87
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_init(Object *obj)
88
static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
89
{
90
int i;
91
+ Aspeed2400SoCState *a = ASPEED2400_SOC(dev);
92
AspeedSoCState *s = ASPEED_SOC(dev);
93
AspeedSoCClass *sc = ASPEED_SOC_GET_CLASS(s);
94
Error *err = NULL;
95
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
96
97
/* CPU */
98
for (i = 0; i < sc->num_cpus; i++) {
99
- object_property_set_link(OBJECT(&s->cpu[i]), "memory",
100
+ object_property_set_link(OBJECT(&a->cpu[i]), "memory",
101
OBJECT(s->memory), &error_abort);
102
- if (!qdev_realize(DEVICE(&s->cpu[i]), NULL, errp)) {
103
+ if (!qdev_realize(DEVICE(&a->cpu[i]), NULL, errp)) {
104
return;
105
}
106
}
107
108
/* SRAM */
109
- sram_name = g_strdup_printf("aspeed.sram.%d", CPU(&s->cpu[0])->cpu_index);
110
+ sram_name = g_strdup_printf("aspeed.sram.%d", CPU(&a->cpu[0])->cpu_index);
111
memory_region_init_ram(&s->sram, OBJECT(s), sram_name, sc->sram_size, &err);
112
if (err) {
113
error_propagate(errp, err);
114
@@ -XXX,XX +XXX,XX @@ static void aspeed_ast2400_soc_realize(DeviceState *dev, Error **errp)
115
aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->scu), 0, sc->memmap[ASPEED_DEV_SCU]);
116
117
/* VIC */
118
- if (!sysbus_realize(SYS_BUS_DEVICE(&s->vic), errp)) {
119
+ if (!sysbus_realize(SYS_BUS_DEVICE(&a->vic), errp)) {
56
return;
120
return;
57
}
121
}
58
122
- aspeed_mmio_map(s, SYS_BUS_DEVICE(&s->vic), 0, sc->memmap[ASPEED_DEV_VIC]);
59
@@ -XXX,XX +XXX,XX @@ static void aspeed_gpio_write(void *opaque, hwaddr offset, uint64_t data,
123
- sysbus_connect_irq(SYS_BUS_DEVICE(&s->vic), 0,
60
break;
124
- qdev_get_gpio_in(DEVICE(&s->cpu), ARM_CPU_IRQ));
61
default:
125
- sysbus_connect_irq(SYS_BUS_DEVICE(&s->vic), 1,
62
qemu_log_mask(LOG_GUEST_ERROR, "%s: no setter for offset 0x%"
126
- qdev_get_gpio_in(DEVICE(&s->cpu), ARM_CPU_FIQ));
63
- HWADDR_PRIx"\n", __func__, offset);
127
+ aspeed_mmio_map(s, SYS_BUS_DEVICE(&a->vic), 0, sc->memmap[ASPEED_DEV_VIC]);
64
+ PRIx64"\n", __func__, offset);
128
+ sysbus_connect_irq(SYS_BUS_DEVICE(&a->vic), 0,
65
return;
129
+ qdev_get_gpio_in(DEVICE(&a->cpu), ARM_CPU_IRQ));
66
}
130
+ sysbus_connect_irq(SYS_BUS_DEVICE(&a->vic), 1,
67
aspeed_gpio_update(s, set, set->data_value);
131
+ qdev_get_gpio_in(DEVICE(&a->cpu), ARM_CPU_FIQ));
132
133
/* RTC */
134
if (!sysbus_realize(SYS_BUS_DEVICE(&s->rtc), errp)) {
135
diff --git a/hw/arm/meson.build b/hw/arm/meson.build
136
index XXXXXXX..XXXXXXX 100644
137
--- a/hw/arm/meson.build
138
+++ b/hw/arm/meson.build
139
@@ -XXX,XX +XXX,XX @@ arm_ss.add(when: 'CONFIG_FSL_IMX25', if_true: files('fsl-imx25.c', 'imx25_pdk.c'
140
arm_ss.add(when: 'CONFIG_FSL_IMX31', if_true: files('fsl-imx31.c', 'kzm.c'))
141
arm_ss.add(when: 'CONFIG_FSL_IMX6', if_true: files('fsl-imx6.c'))
142
arm_ss.add(when: 'CONFIG_ASPEED_SOC', if_true: files(
143
- 'aspeed_soc.c',
144
'aspeed.c',
145
'aspeed_soc_common.c',
146
+ 'aspeed_ast2400.c',
147
'aspeed_ast2600.c',
148
'aspeed_ast10x0.c',
149
'aspeed_eeprom.c',
68
--
150
--
69
2.35.3
151
2.41.0
70
152
71
153
diff view generated by jsdifflib