Skip to content

Commit 0fbb6d7

Browse files
authored
Misc. cleanup/refactoring I never got around to pushing (#106)
1 parent ec0d250 commit 0fbb6d7

30 files changed

+1762
-939
lines changed

.vscode/launch.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
"type": "cppdbg",
3030
"request": "launch",
3131
"program": "${workspaceFolder}/build/buddy-softmmu/qemu-system-buddy",
32-
"args": ["--machine", "prusabuddy", "-kernel", "mini_debug_noboot.bin"],
32+
"args": ["--machine", "prusa-mini", "-kernel", "mini_debug_noboot.bin"],
3333
"stopAtEntry": false,
3434
"cwd": "${workspaceFolder}/build/buddy-softmmu/",
3535
"environment": [],

hw/arm/prusa/parts/thermistor.c

+2-1
Original file line numberDiff line numberDiff line change
@@ -141,10 +141,11 @@ static void thermistor_set_table(ThermistorState *s) {
141141
s->table_length = 2*HEATER_0_TEMPTABLE_LEN;
142142
break;
143143
case 2000:
144-
s->table_length = AMBIENTTEMPTABLE_LEN;
144+
s->table_length = 2*AMBIENTTEMPTABLE_LEN;
145145
s->table = &temptable_2000[0][0];
146146
break;
147147
default:
148+
printf("%s WARNING: Unhandled thermistor table %u!\n",__FILE__,s->table_index);
148149
s->table = NULL;
149150
s->table_length = 0;
150151
break;

hw/arm/prusa/prusa-mini.c

+12-13
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* Prusa Buddy board machine model
33
*
4-
* Copyright 2020 VintagePC <github.com/vintagepc>
4+
* Copyright 2020-2022 VintagePC <github.com/vintagepc>
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -31,6 +31,7 @@
3131
#include "qemu/error-report.h"
3232
#include "stm32f407/stm32f407_soc.h"
3333
#include "hw/arm/boot.h"
34+
#include "hw/ssi/ssi.h"
3435
#include "hw/loader.h"
3536
#include "utility/ArgHelper.h"
3637
#include "sysemu/runstate.h"
@@ -71,7 +72,6 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
7172
qdev_prop_set_string(dev, "cpu-type", ARM_CPU_TYPE_NAME("cortex-m4"));
7273
qdev_prop_set_uint32(dev,"sram-size", machine->ram_size);
7374
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
74-
STM32F4xxState *SOC = STM32F4XX_BASE(dev);
7575
DeviceState* dev_soc = dev;
7676
// We (ab)use the kernel command line to piggyback custom arguments into QEMU.
7777
// Parse those now.
@@ -82,7 +82,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
8282
default_flash_size <<=2; // quadruple the flash size for debug code.
8383
}
8484
if (arghelper_is_arg("appendix")) {
85-
SOC->gpios[0].idr_mask |= 0x2000;
85+
qdev_prop_set_uint32(stm32_soc_get_periph(dev_soc, STM32_P_GPIOA),"idr-mask", 0x2000);
8686
}
8787
int kernel_len = strlen(machine->kernel_filename);
8888
if (kernel_len >3)
@@ -119,7 +119,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
119119

120120
void *bus;
121121
{
122-
bus = qdev_get_child_bus(DEVICE(&SOC->spis[1]), "ssi");
122+
bus = qdev_get_child_bus(stm32_soc_get_periph(dev_soc, STM32_P_SPI2), "ssi");
123123

124124
DeviceState *lcd_dev = ssi_create_peripheral(bus, "st7789v");
125125
qemu_irq lcd_cs = qdev_get_gpio_in_named(lcd_dev, SSI_GPIO_CS, 0);
@@ -133,15 +133,14 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
133133
}
134134
DriveInfo *dinfo = NULL;
135135
{
136-
bus = qdev_get_child_bus(DEVICE(&SOC->spis[2]), "ssi");
136+
bus = qdev_get_child_bus(stm32_soc_get_periph(dev_soc, STM32_P_SPI3), "ssi");
137137
dev = qdev_new(cfg->flash_chip);
138138
dinfo = drive_get_next(IF_MTD);
139139
if (dinfo) {
140140
qdev_prop_set_drive(dev, "drive",
141141
blk_by_legacy_dinfo(dinfo));
142142
}
143143
qdev_realize_and_unref(dev, bus, &error_fatal);
144-
//DeviceState *flash_dev = ssi_create_slave(bus, "w25q64jv");
145144
qemu_irq flash_cs = qdev_get_gpio_in_named(dev, SSI_GPIO_CS, 0);
146145
qemu_irq_raise(flash_cs);
147146
qdev_connect_gpio_out(stm32_soc_get_periph(dev_soc, STM32_P_GPIOD), 7, flash_cs);
@@ -150,7 +149,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
150149

151150
}
152151
{
153-
bus = qdev_get_child_bus(DEVICE(&SOC->i2cs[0]),"i2c");
152+
bus = qdev_get_child_bus(stm32_soc_get_periph(dev_soc, STM32_P_I2C1),"i2c");
154153
dev = qdev_new("at24c-eeprom");
155154
qdev_prop_set_uint8(dev, "address", 0x53);
156155
qdev_prop_set_uint32(dev, "rom-size", 64*KiB);
@@ -215,7 +214,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
215214
DeviceState* split_out = qdev_new("split-irq");
216215
qdev_prop_set_uint16(split_out, "num-lines", 4);
217216
qdev_realize_and_unref(DEVICE(split_out),NULL, &error_fatal);
218-
qdev_connect_gpio_out_named(DEVICE(&SOC->usarts[1]),"uart-byte-out", 0, qdev_get_gpio_in(split_out,0));
217+
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_UART2),"uart-byte-out", 0, qdev_get_gpio_in(split_out,0));
219218
DeviceState* split_zmin = qdev_new("split-irq");
220219
qdev_prop_set_uint16(split_zmin, "num-lines", 3);
221220
qdev_realize_and_unref(DEVICE(split_zmin),NULL, &error_fatal);
@@ -234,7 +233,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
234233
qdev_prop_set_int32(dev, "max_step", ends[i]);
235234
qdev_prop_set_int32(dev, "fullstepspermm", stepsize[i]);
236235
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
237-
qdev_connect_gpio_out_named(dev,"byte-out", 0, qdev_get_gpio_in_named(DEVICE(&SOC->usarts[1]),"uart-byte-in",0));
236+
qdev_connect_gpio_out_named(dev,"byte-out", 0, qdev_get_gpio_in_named(stm32_soc_get_periph(dev_soc, STM32_P_UART2),"uart-byte-in",0));
238237
qdev_connect_gpio_out(split_out,i, qdev_get_gpio_in_named(dev,"byte-in",0));
239238
qdev_connect_gpio_out(stm32_soc_get_periph(dev_soc, STM32_P_GPIOD), step_pins[i], qdev_get_gpio_in_named(dev,"step",0));
240239
qdev_connect_gpio_out(stm32_soc_get_periph(dev_soc, STM32_P_GPIOD), dir_pins[i], qdev_get_gpio_in_named(dev,"dir",0));
@@ -275,8 +274,8 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
275274
qdev_prop_set_uint16(dev, "table_no", tables[i]);
276275
qdev_prop_set_uint8(dev, "index", i);
277276
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
278-
qdev_connect_gpio_out_named(DEVICE(&SOC->adcs[0]),"adc_read", channels[i], qdev_get_gpio_in_named(dev, "thermistor_read_request",0));
279-
qdev_connect_gpio_out_named(dev, "thermistor_value",0, qdev_get_gpio_in_named(DEVICE(&SOC->adcs[0]),"adc_data_in",channels[i]));
277+
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_ADC1),"adc_read", channels[i], qdev_get_gpio_in_named(dev, "thermistor_read_request",0));
278+
qdev_connect_gpio_out_named(dev, "thermistor_value",0, qdev_get_gpio_in_named(stm32_soc_get_periph(dev_soc, STM32_P_ADC1),"adc_data_in",channels[i]));
280279
qdev_connect_gpio_out_named(dev, "temp_out_256x", 0, qdev_get_gpio_in_named(db2,"therm-temp",i));
281280

282281
}
@@ -286,7 +285,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
286285
qdev_prop_set_uint8(dev, "thermal_mass_x10",30);
287286
qdev_prop_set_uint8(dev,"label", 'E');
288287
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
289-
qdev_connect_gpio_out_named(DEVICE(&SOC->timers[2]),"pwm_ratio_changed",3,qdev_get_gpio_in_named(dev, "pwm_in",0));
288+
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_TIM3),"pwm_ratio_changed",3,qdev_get_gpio_in_named(dev, "pwm_in",0));
290289
qdev_connect_gpio_out_named(dev, "temp_out",0, qdev_get_gpio_in_named(hotend, "thermistor_set_temperature",0));
291290
qdev_connect_gpio_out_named(dev, "pwm-out", 0, qdev_get_gpio_in_named(db2,"therm-pwm",0));
292291
#ifdef BUDDY_HAS_GL
@@ -301,7 +300,7 @@ static void prusa_mini_init(MachineState *machine, const mini_config_t* cfg)
301300
qdev_prop_set_uint8(dev, "thermal_mass_x10",3);
302301
qdev_prop_set_uint8(dev,"label", 'B');
303302
sysbus_realize(SYS_BUS_DEVICE(dev), &error_fatal);
304-
qdev_connect_gpio_out_named(DEVICE(&SOC->timers[2]),"pwm_ratio_changed",2,qdev_get_gpio_in_named(dev, "pwm_in",0));
303+
qdev_connect_gpio_out_named(stm32_soc_get_periph(dev_soc, STM32_P_TIM3),"pwm_ratio_changed",2,qdev_get_gpio_in_named(dev, "pwm_in",0));
305304
qdev_connect_gpio_out_named(dev, "temp_out",0, qdev_get_gpio_in_named(bed, "thermistor_set_temperature",0));
306305
qdev_connect_gpio_out_named(dev, "pwm-out", 0, qdev_get_gpio_in_named(db2,"therm-pwm",1));
307306
#ifdef BUDDY_HAS_GL

hw/arm/prusa/stm32_chips/stm32f407xx.h

+107-79
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,25 @@
2424

2525
#include "../stm32_common/stm32_chip_macros.h"
2626
#include "../stm32_common/stm32_types.h"
27+
#include "hw/misc/stm32f4xx_syscfg.h"
28+
#include "hw/timer/stm32f2xx_timer.h"
29+
#include "hw/misc/stm32f4xx_exti.h"
30+
#include "hw/or-irq.h"
31+
#include "../stm32f407/stm32f4xx_adc.h"
32+
#include "../stm32f407/stm32f4xx_adcc.h"
33+
#include "../stm32f407/stm32f2xx_crc.h"
34+
#include "../stm32_common/stm32_f2xx_f4xx_dma.h"
35+
#include "../stm32f407/stm32f2xx_gpio.h"
36+
#include "../stm32f407/stm32f2xx_i2c.h"
37+
#include "../stm32f407/stm32f4xx_iwdg.h"
38+
#include "../stm32f407/stm32f2xx_pwr.h"
39+
#include "../stm32f407/stm32f2xx_rcc.h"
40+
#include "../stm32f407/stm32f2xx_rtc.h"
41+
#include "../stm32f407/stm32f2xx_tim.h"
42+
#include "../stm32f407/stm32f4xx_otp.h"
43+
#include "../stm32f407/stm32f4xx_rng.h"
44+
#include "../stm32f407/stm32f4xx_usb.h"
45+
#include "../stm32f407/stm32_uart.h"
2746
#include "stm32f4xx_irqs.h"
2847
#include "qemu/units.h"
2948

@@ -34,93 +53,102 @@ static const stm32_soc_cfg_t stm32f407xx_cfg =
3453
.rcc_hse_freq = 12000000,
3554
.rcc_lse_freq = 32768,
3655
.rcc_lsi_freq = 32000,
56+
.flash_base = 0x08000000,
3757
.flash_variants = {
3858
{TYPE_STM32F407xE_SOC, 512*KiB},
3959
{TYPE_STM32F407xG_SOC, 1U*MiB},
4060
{NULL},
4161
},
42-
.sram_variants = {{NULL}},
43-
PER_LN(flash_memory, "flash", P_UNDEFINED, 0x08000000),
44-
PER_LNS(sram, "sram", P_UNDEFINED, 0x20000000, 192*KiB),
45-
PER_LNS(ccmsram, "ccmsram", P_UNDEFINED, 0x10000000, 64*KiB),
46-
PER_LN(syscfg, TYPE_STM32F4XX_SYSCFG, P_SYSCFG, 0x40013800),
47-
PER_ALN(adcs, TYPE_STM32F4XX_ADC,
48-
PER_I(P_ADC1, 0x40012000, F4xx_ADC_1_2_3_IRQ),
49-
PER_I(P_ADC2, 0x40012100, F4xx_ADC_1_2_3_IRQ),
50-
PER_I(P_ADC3, 0x40012200, F4xx_ADC_1_2_3_IRQ)),
51-
PER_ALN(usarts, TYPE_STM32_UART,
52-
PER_I(P_UART1, 0x40011000, F4xx_USART1_IRQ),
53-
PER_I(P_UART2, 0x40004400, F4xx_USART2_IRQ),
54-
PER_I(P_UART3, 0x40004800, F4xx_USART3_IRQ),
55-
PER_I(P_UART4, 0x40004C00, F4xx_UART4_IRQ),
56-
PER_I(P_UART5, 0x40005000, F4xx_UART5_IRQ),
57-
PER_I(P_UART6, 0x40011400, F4xx_USART6_IRQ)
58-
),
59-
PER_ALN(spis, TYPE_STM32F4XX_SPI,
60-
PER_I(P_SPI1, 0x40013000, F4xx_SPI1_IRQ),
61-
PER_I(P_SPI2, 0x40003800, F4xx_SPI2_IRQ),
62-
PER_I(P_SPI3, 0x40003C00, F4xx_SPI3_IRQ)
63-
),
64-
PER_ALN(i2cs, TYPE_STM32F2XX_I2C,
65-
PER_IV(P_I2C1, 0x40005400, F4xx_I2C1_EV_IRQ, F4xx_I2C1_ER_IRQ),
66-
PER_IV(P_I2C2, 0x40005800, F4xx_I2C2_EV_IRQ, F4xx_I2C2_ER_IRQ),
67-
PER_IV(P_I2C3, 0x40005C00, F4xx_I2C3_EV_IRQ, F4xx_I2C3_ER_IRQ)
68-
),
69-
PER_ALN(dmas, TYPE_STM32F4xx_DMA,
70-
PER_IV(P_DMA1, 0x40026000,
62+
.sram_base = 0x20000000,
63+
.sram_variants = {
64+
{TYPE_STM32F407xE_SOC, 192U*KiB},
65+
{TYPE_STM32F407xG_SOC, 192U*KiB},
66+
{NULL},
67+
},
68+
.ccmsram_base = 0x10000000,
69+
.ccmssram_variants = {
70+
{TYPE_STM32F407xE_SOC, 64U*KiB},
71+
{TYPE_STM32F407xG_SOC, 64U*KiB},
72+
{NULL},
73+
},
74+
.perhipherals = {
75+
PER_LNI(P_FINT, TYPE_STM32F4xx_FINT, 0x40023C00, F4xx_FLASH_IRQ),
76+
77+
PER_LNI(P_UART1, TYPE_STM32_UART, 0x40011000, F4xx_USART1_IRQ),
78+
PER_LNI(P_UART2, TYPE_STM32_UART, 0x40004400, F4xx_USART2_IRQ),
79+
PER_LNI(P_UART3, TYPE_STM32_UART, 0x40004800, F4xx_USART3_IRQ),
80+
PER_LNI(P_UART4, TYPE_STM32_UART, 0x40004C00, F4xx_UART4_IRQ),
81+
PER_LNI(P_UART5, TYPE_STM32_UART, 0x40005000, F4xx_UART5_IRQ),
82+
PER_LNI(P_UART6, TYPE_STM32_UART, 0x40011400, F4xx_USART6_IRQ),
83+
84+
PER_LNI(P_ADC1, TYPE_STM32F4XX_ADC, 0x40012000, F4xx_ADC_1_2_3_IRQ),
85+
PER_LNI(P_ADC2, TYPE_STM32F4XX_ADC, 0x40012100, F4xx_ADC_1_2_3_IRQ),
86+
PER_LNI(P_ADC3, TYPE_STM32F4XX_ADC, 0x40012200, F4xx_ADC_1_2_3_IRQ),
87+
88+
PER_LNI(P_SPI1, TYPE_STM32F4xx_SPI, 0x40013000, F4xx_SPI1_IRQ),
89+
PER_LNI(P_SPI2, TYPE_STM32F4xx_SPI, 0x40003800, F4xx_SPI2_IRQ),
90+
PER_LNI(P_SPI3, TYPE_STM32F4xx_SPI, 0x40003C00, F4xx_SPI3_IRQ),
91+
92+
PER_LNI(P_I2C1, TYPE_STM32F2XX_I2C, 0x40005400, F4xx_I2C1_EV_IRQ, F4xx_I2C1_ER_IRQ),
93+
PER_LNI(P_I2C2, TYPE_STM32F2XX_I2C, 0x40005800, F4xx_I2C2_EV_IRQ, F4xx_I2C2_ER_IRQ),
94+
PER_LNI(P_I2C3, TYPE_STM32F2XX_I2C, 0x40005C00, F4xx_I2C3_EV_IRQ, F4xx_I2C3_ER_IRQ),
95+
96+
PER_LN(P_GPIOA, TYPE_STM32F2XX_GPIO, 0x40020000),
97+
PER_LN(P_GPIOB, TYPE_STM32F2XX_GPIO, 0x40020400),
98+
PER_LN(P_GPIOC, TYPE_STM32F2XX_GPIO, 0x40020800),
99+
PER_LN(P_GPIOD, TYPE_STM32F2XX_GPIO, 0x40020C00),
100+
PER_LN(P_GPIOE, TYPE_STM32F2XX_GPIO, 0x40021000),
101+
PER_LN(P_GPIOF, TYPE_STM32F2XX_GPIO, 0x40021400),
102+
PER_LN(P_GPIOG, TYPE_STM32F2XX_GPIO, 0x40021800),
103+
PER_LN(P_GPIOH, TYPE_STM32F2XX_GPIO, 0x40021C00),
104+
PER_LN(P_GPIOI, TYPE_STM32F2XX_GPIO, 0x40022000),
105+
PER_LN(P_GPIOJ, TYPE_STM32F2XX_GPIO, 0x40022400),
106+
PER_LN(P_GPIOK, TYPE_STM32F2XX_GPIO, 0x40022800),
107+
108+
PER_LNI(P_DMA1, TYPE_STM32F4xx_DMA, 0x40026000,
71109
F4xx_DMA1_S0_IRQ, F4xx_DMA1_S1_IRQ, F4xx_DMA1_S2_IRQ, F4xx_DMA1_S3_IRQ,
72110
F4xx_DMA1_S4_IRQ, F4xx_DMA1_S5_IRQ, F4xx_DMA1_S6_IRQ, F4xx_DMA1_S7_IRQ),
73-
PER_IV(P_DMA2, 0x40026400,
111+
PER_LNI(P_DMA2, TYPE_STM32F4xx_DMA, 0x40026400,
74112
F4xx_DMA2_S0_IRQ, F4xx_DMA2_S1_IRQ, F4xx_DMA2_S2_IRQ, F4xx_DMA2_S3_IRQ,
75-
F4xx_DMA2_S4_IRQ, F4xx_DMA2_S5_IRQ, F4xx_DMA2_S6_IRQ, F4xx_DMA2_S7_IRQ)
76-
),
77-
PER_ALN(gpios, TYPE_STM32F2XX_GPIO,
78-
PER(P_GPIOA, 0x40020000),
79-
PER(P_GPIOB, 0x40020400),
80-
PER(P_GPIOC, 0x40020800),
81-
PER(P_GPIOD, 0x40020C00),
82-
PER(P_GPIOE, 0x40021000),
83-
PER(P_GPIOF, 0x40021400),
84-
PER(P_GPIOG, 0x40021800),
85-
PER(P_GPIOH, 0x40021C00),
86-
PER(P_GPIOI, 0x40022000),
87-
PER(P_GPIOJ, 0x40022400),
88-
PER(P_GPIOK, 0x40022800)
89-
),
90-
PER_ALN(timers, TYPE_STM32F4XX_TIMER,
91-
PER(P_TIM1, 0x40010000), // TIM1 FIXME: TIM1 is a complex timer w/ multiple IRQs
92-
PER_I(P_TIM2, 0x40000000, F4xx_TIM2_IRQ),
93-
PER_I(P_TIM3, 0x40000400, F4xx_TIM3_IRQ),
94-
PER_I(P_TIM4, 0x40000800, F4xx_TIM4_IRQ),
95-
PER_I(P_TIM5, 0x40000C00, F4xx_TIM5_IRQ),
96-
PER_I(P_TIM6, 0x40001000, F4xx_TIM6_DAC_IRQ),
97-
PER_I(P_TIM7, 0x40001400, F4xx_TIM7_IRQ),
98-
PER(P_TIM8, 0x40010400),
99-
PER_I(P_TIM9, 0x40014000, F4xx_TIM1_BRK_TIM9_IRQ),
100-
PER_I(P_TIM10, 0x40014400, F4xx_TIM1_UP_TIM10_IRQ),
101-
PER_I(P_TIM11, 0x40014800, F4xx_TIM1_TRG_COM_TIM11_IRQ),
102-
PER_I(P_TIM12, 0x40001800, F4xx_TIM8_BRK_TIM12_IRQ),
103-
PER_I(P_TIM13, 0x40001C00, F4xx_TIM8_UP_TIM13_IRQ),
104-
PER_I(P_TIM14, 0x40002000, F4xx_TIM8_TRG_COM_TIM14_IRQ)
105-
),
106-
PER_LNIV(exti, TYPE_STM32F4XX_EXTI, P_EXTI, 0x40013C00,
107-
F4xx_EXTI0_IRQ, F4xx_EXTI1_IRQ, F4xx_EXTI2_IRQ, F4xx_EXTI3_IRQ,
108-
F4xx_EXTI4_IRQ, [5 ... 9] = F4xx_EXTI_5_9_IRQ,
109-
[10 ... 15] = F4xx_EXTI_10_15_IRQ
110-
),
111-
PER_LNIV(eth, "stm32f4xx-ethernet", P_UNDEFINED, 0x40028000, F4xx_ETH_IRQ, F4xx_ETH_WKUP_IRQ),
112-
PER_LNI(rcc, TYPE_STM32F2xx_RCC, P_RCC, 0x40023800, F4xx_RCC_IRQ),
113-
PER_LNI(flash_if, TYPE_STM32F4xx_FINT, P_FINT, 0x40023C00, F4xx_FLASH_IRQ),
114-
PER_LN(iwdg, TYPE_STM32F4XX_IWDG, P_IWDG, 0x40003000),
115-
PER_LN(crc, TYPE_STM32F2XX_CRC, P_CRC, 0x40023000),
116-
PER_LN(rtc, TYPE_STM32F2XX_RTC, P_RTC, 0x40002800),
117-
PER_LN(itm, TYPE_STM32F4XX_ITM, P_UNDEFINED, 0xE0000000),
118-
PER_LN(pwr, TYPE_STM32F2XX_PWR, P_PWR, 0x40007000),
119-
PER_LNI(rng, TYPE_STM32F4XX_RNG, P_RNG, 0x50060800, F4xx_HASH_RNG_IRQ),
120-
PER_LN(otp, TYPE_STM32F4XX_OTP, P_UNDEFINED, 0x1FFF7800),
121-
PER_LNI(usb_hs, TYPE_STM32F4xx_USB, P_USB, 0x40040000, F4xx_OTG_HS_IRQ),
122-
PER_LNI(usb_fs, TYPE_STM32F4xx_USB, P_USB2, 0x50000000, F4xx_OTG_FS_IRQ),
123-
PER_LN(adc_common, TYPE_STM32F4XX_ADCC, P_UNDEFINED, 0x40012300),
113+
F4xx_DMA2_S4_IRQ, F4xx_DMA2_S5_IRQ, F4xx_DMA2_S6_IRQ, F4xx_DMA2_S7_IRQ),
114+
115+
PER_LN(P_TIM1, TYPE_STM32F4XX_TIMER, 0x40010000), // TIM1 FIXME: TIM1 is a complex timer w/ multiple IRQs
116+
PER_LNI(P_TIM2, TYPE_STM32F4XX_TIMER, 0x40000000, F4xx_TIM2_IRQ),
117+
PER_LNI(P_TIM3, TYPE_STM32F4XX_TIMER, 0x40000400, F4xx_TIM3_IRQ),
118+
PER_LNI(P_TIM4, TYPE_STM32F4XX_TIMER, 0x40000800, F4xx_TIM4_IRQ),
119+
PER_LNI(P_TIM5, TYPE_STM32F4XX_TIMER, 0x40000C00, F4xx_TIM5_IRQ),
120+
PER_LNI(P_TIM6, TYPE_STM32F4XX_TIMER, 0x40001000, F4xx_TIM6_DAC_IRQ),
121+
PER_LNI(P_TIM7, TYPE_STM32F4XX_TIMER, 0x40001400, F4xx_TIM7_IRQ),
122+
PER_LN(P_TIM8, TYPE_STM32F4XX_TIMER, 0x40010400),
123+
PER_LNI(P_TIM9, TYPE_STM32F4XX_TIMER, 0x40014000, F4xx_TIM1_BRK_TIM9_IRQ),
124+
PER_LNI(P_TIM10, TYPE_STM32F4XX_TIMER, 0x40014400, F4xx_TIM1_UP_TIM10_IRQ),
125+
PER_LNI(P_TIM11, TYPE_STM32F4XX_TIMER, 0x40014800, F4xx_TIM1_TRG_COM_TIM11_IRQ),
126+
PER_LNI(P_TIM12, TYPE_STM32F4XX_TIMER, 0x40001800, F4xx_TIM8_BRK_TIM12_IRQ),
127+
PER_LNI(P_TIM13, TYPE_STM32F4XX_TIMER, 0x40001C00, F4xx_TIM8_UP_TIM13_IRQ),
128+
PER_LNI(P_TIM14, TYPE_STM32F4XX_TIMER, 0x40002000, F4xx_TIM8_TRG_COM_TIM14_IRQ),
129+
130+
PER_LNI(P_EXTI, TYPE_STM32F4XX_EXTI, 0x40013C00,
131+
F4xx_EXTI0_IRQ, F4xx_EXTI1_IRQ, F4xx_EXTI2_IRQ, F4xx_EXTI3_IRQ,
132+
F4xx_EXTI4_IRQ, [5 ... 9] = F4xx_EXTI_5_9_IRQ,
133+
[10 ... 15] = F4xx_EXTI_10_15_IRQ
134+
),
135+
PER_LNI(P_ETH, "stm32f4xx-ethernet", 0x40028000, F4xx_ETH_IRQ, F4xx_ETH_WKUP_IRQ),
136+
PER_LNI(P_RCC, TYPE_STM32F407_RCC, 0x40023800, F4xx_RCC_IRQ),
137+
PER_LNI(P_FINT, TYPE_STM32F40x_F41x_FINT, 0x40023C00, F4xx_FLASH_IRQ),
138+
PER_LN(P_IWDG, TYPE_STM32F4XX_IWDG, 0x40003000),
139+
PER_LN(P_CRC, TYPE_STM32F2XX_CRC, 0x40023000),
140+
PER_LN(P_RTC, TYPE_STM32F2XX_RTC, 0x40002800),
141+
PER_LN(P_ITM, TYPE_STM32F4xx_ITM, 0xE0000000),
142+
PER_LN(P_PWR, TYPE_STM32F2XX_PWR, 0x40007000),
143+
PER_LNI(P_RNG, TYPE_STM32F4XX_RNG, 0x50060800, F4xx_HASH_RNG_IRQ),
144+
PER_LN(P_OTP, TYPE_STM32F4XX_OTP, 0x1FFF7800),
145+
PER_LNI(P_USB, TYPE_STM32F4xx_USB, 0x40040000, F4xx_OTG_HS_IRQ),
146+
PER_LNI(P_USB2, TYPE_STM32F4xx_USB, 0x50000000, F4xx_OTG_FS_IRQ),
147+
PER_LN(P_ADCC, TYPE_STM32F4XX_ADCC, 0x40012300),
148+
149+
PER_LN(P_SYSCFG, TYPE_STM32F40x_F41x_SYSCFG, 0x40013800),
150+
151+
}
124152
} ;
125153

126154
#endif // HW_ARM_PRUSA_STM32F407XX_H

hw/arm/prusa/stm32_common/meson.build

+2
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ arm_ss.add(when: 'CONFIG_STM32F407_SOC',
33
'stm32_common.c',
44
'stm32_rcc.c',
55
'stm32_f2xx_f4xx_dma.c',
6+
'stm32_spi.c',
7+
'stm32_syscfg.c',
68
))

0 commit comments

Comments
 (0)