@@ -114,6 +114,7 @@ typedef struct mk4_cfg_t {
114
114
temp_cfg_t temps ;
115
115
uint8_t motor ;
116
116
uint8_t e_t_mass ;
117
+ bool e_loopback ;
117
118
char m_label [AXIS_MAX ];
118
119
stm_pin m_step [AXIS_MAX ];
119
120
stm_pin m_dir [AXIS_MAX ];
@@ -258,6 +259,7 @@ static const mk4_cfg_t mk3v5_cfg = {
258
259
.table = { [T_NOZ ] = 2005 , [T_BED ] = 2004 , [T_BRK ] = 5 , [T_BRD ] = 2000 , [T_CASE ] = 2000 }
259
260
},
260
261
.e_t_mass = 30 ,
262
+ .e_loopback = true,
261
263
.motor = TMC2130 ,
262
264
.m_label = {'X' ,'Y' ,'Z' ,'E' },
263
265
.m_step = { STM_PIN (GPIOD ,7 ), STM_PIN (GPIOD ,5 ), STM_PIN (GPIOD ,3 ), STM_PIN (GPIOD ,1 )},
@@ -341,6 +343,9 @@ static void mk4_init(MachineState *machine)
341
343
qdev_prop_set_uint32 (dev ,"sram-size" , machine -> ram_size );
342
344
uint64_t flash_size = stm32_soc_get_flash_size (dev );
343
345
arghelper_setargs (machine -> kernel_cmdline );
346
+
347
+ // We (ab)use the kernel command line to piggyback custom arguments into QEMU.
348
+ // Parse those now.
344
349
bool args_continue_running = arghelper_parseargs ();
345
350
if (arghelper_is_arg ("4x_flash" ))
346
351
{
@@ -361,14 +366,21 @@ static void mk4_init(MachineState *machine)
361
366
qdev_prop_set_uint32 (otp ,"otp-data[7]" , otp_raw [7 ]);
362
367
qdev_prop_set_uint32 (otp ,"otp-data[8]" , otp_raw [8 ]);
363
368
364
- sysbus_realize (SYS_BUS_DEVICE (dev ), & error_fatal );
365
369
DeviceState * dev_soc = dev ;
366
- // We (ab)use the kernel command line to piggyback custom arguments into QEMU.
367
- // Parse those now.
368
- // ugly hack... FIXME.
369
370
if (arghelper_is_arg ("appendix" )) {
370
371
qdev_prop_set_uint32 (stm32_soc_get_periph (dev_soc , STM32_P_GPIOA ),"idr-mask" , 0x2000 );
371
372
}
373
+ if (cfg .e_loopback ) {
374
+ qdev_prop_set_uint32 (stm32_soc_get_periph (dev_soc , STM32_P_GPIOE ),"idr-mask" , 0x80 );
375
+ }
376
+
377
+ sysbus_realize (SYS_BUS_DEVICE (dev ), & error_fatal );
378
+
379
+ if (cfg .e_loopback )
380
+ {
381
+ qdev_connect_gpio_out (stm32_soc_get_periph (dev_soc , STM32_P_GPIOG ), 1 , qdev_get_gpio_in (stm32_soc_get_periph (dev_soc , STM32_P_GPIOE ), 7 ));
382
+ }
383
+
372
384
373
385
char * kfn = machine -> kernel_filename ;
374
386
int kernel_len = kfn ? strlen (kfn ) : 0 ;
0 commit comments