Skip to content

Commit 9cb7ce5

Browse files
authored
Merge pull request #741 from facchinm/giga_m4_fixes
Giga: compatibility fixes with M4 builds
2 parents 80d3d4f + a3a49d7 commit 9cb7ce5

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+36576
-878
lines changed

boards.txt

+8-8
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ envie_m7.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16
7474
envie_m7.menu.target_core.cm7.build.architecture=cortex-m7
7575
envie_m7.menu.target_core.cm7.compiler.mbed.arch.define=
7676

77-
envie_m7.menu.target_core.cm4.build.variant=PORTENTA_H7_M4
77+
envie_m7.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4
7878
envie_m7.menu.target_core.cm4.build.mcu=cortex-m4
7979
envie_m7.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16
8080
envie_m7.menu.target_core.cm4.build.architecture=cortex-m4
@@ -99,7 +99,7 @@ envie_m7.compiler.mbed.defines={build.variant.path}/defines.txt
9999
envie_m7.compiler.mbed.ldflags={build.variant.path}/ldflags.txt
100100
envie_m7.compiler.mbed.cflags={build.variant.path}/cflags.txt
101101
envie_m7.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt
102-
envie_m7.compiler.mbed.includes={build.variant.path}/includes.txt
102+
envie_m7.compiler.mbed.includes={build.variant.path}/../PORTENTA_H7_M7/includes.txt
103103
envie_m7.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
104104
envie_m7.compiler.mbed="{build.variant.path}/libs/libmbed.a"
105105
envie_m7.vid.0=0x2341
@@ -492,7 +492,7 @@ nicla_vision.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16
492492
nicla_vision.menu.target_core.cm7.build.architecture=cortex-m7
493493
nicla_vision.menu.target_core.cm7.compiler.mbed.arch.define=
494494

495-
nicla_vision.menu.target_core.cm4.build.variant=PORTENTA_H7_M4
495+
nicla_vision.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4
496496
nicla_vision.menu.target_core.cm4.build.mcu=cortex-m4
497497
nicla_vision.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16
498498
nicla_vision.menu.target_core.cm4.build.architecture=cortex-m4
@@ -510,7 +510,7 @@ nicla_vision.compiler.mbed.defines={build.variant.path}/defines.txt
510510
nicla_vision.compiler.mbed.ldflags={build.variant.path}/ldflags.txt
511511
nicla_vision.compiler.mbed.cflags={build.variant.path}/cflags.txt
512512
nicla_vision.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt
513-
nicla_vision.compiler.mbed.includes={build.variant.path}/includes.txt
513+
nicla_vision.compiler.mbed.includes={build.variant.path}/../NICLA_VISION/includes.txt
514514
nicla_vision.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
515515
nicla_vision.compiler.mbed="{build.variant.path}/libs/libmbed.a"
516516
nicla_vision.vid.0=0x2341
@@ -590,7 +590,7 @@ opta.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16
590590
opta.menu.target_core.cm7.build.architecture=cortex-m7
591591
opta.menu.target_core.cm7.compiler.mbed.arch.define=
592592

593-
opta.menu.target_core.cm4.build.variant=PORTENTA_H7_M4
593+
opta.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4
594594
opta.menu.target_core.cm4.build.mcu=cortex-m4
595595
opta.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16
596596
opta.menu.target_core.cm4.build.architecture=cortex-m4
@@ -617,7 +617,7 @@ opta.compiler.mbed.defines={build.variant.path}/defines.txt
617617
opta.compiler.mbed.ldflags={build.variant.path}/ldflags.txt
618618
opta.compiler.mbed.cflags={build.variant.path}/cflags.txt
619619
opta.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt
620-
opta.compiler.mbed.includes={build.variant.path}/includes.txt
620+
opta.compiler.mbed.includes={build.variant.path}/../OPTA/includes.txt
621621
opta.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
622622
opta.compiler.mbed="{build.variant.path}/libs/libmbed.a"
623623
opta.vid.0=0x2341
@@ -716,7 +716,7 @@ giga.menu.target_core.cm7.build.fpu=-mfpu=fpv5-d16
716716
giga.menu.target_core.cm7.build.architecture=cortex-m7
717717
giga.menu.target_core.cm7.compiler.mbed.arch.define=
718718

719-
giga.menu.target_core.cm4.build.variant=PORTENTA_H7_M4
719+
giga.menu.target_core.cm4.build.variant=GENERIC_STM32H747_M4
720720
giga.menu.target_core.cm4.build.mcu=cortex-m4
721721
giga.menu.target_core.cm4.build.fpu=-mfpu=fpv4-sp-d16
722722
giga.menu.target_core.cm4.build.architecture=cortex-m4
@@ -739,7 +739,7 @@ giga.compiler.mbed.defines={build.variant.path}/defines.txt
739739
giga.compiler.mbed.ldflags={build.variant.path}/ldflags.txt
740740
giga.compiler.mbed.cflags={build.variant.path}/cflags.txt
741741
giga.compiler.mbed.cxxflags={build.variant.path}/cxxflags.txt
742-
giga.compiler.mbed.includes={build.variant.path}/includes.txt
742+
giga.compiler.mbed.includes={build.variant.path}/../GIGA/includes.txt
743743
giga.compiler.mbed.extra_ldflags=-lstdc++ -lsupc++ -lm -lc -lgcc -lnosys
744744
giga.compiler.mbed="{build.variant.path}/libs/libmbed.a"
745745
giga.vid.0=0x2341

giga.variables

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
export FLAVOUR="giga"
2-
export VARIANTS=("GIGA PORTENTA_H7_M4")
2+
export VARIANTS=("GIGA GENERIC_STM32H747_M4")
33
export FQBNS=("giga")
44
export LIBRARIES=("MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino STM32H747_System ThreadDebug Himax_HM01B0 PDM Arduino_H7_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Camera rpclib OV7670 mbed-memory-status Scheduler USBMSD USBMIDI SocketWrapper MCUboot Arduino_CAN")
55
export BOOTLOADERS=("GIGA")

libraries/Arduino_CAN/src/Arduino_CAN.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
* COMPILE TIME CHECKS
2525
**************************************************************************************/
2626

27-
#if !(defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4) || defined(ARDUINO_GIGA))
27+
#if !(defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_GIGA))
2828
# error "CAN only available on Arduino Portenta H7 and Arduino Giga (of all ArduinoCore-mbed enabled boards)."
2929
#endif
3030

libraries/Camera/src/camera.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
#define ALIGN_PTR(p,a) ((p & (a-1)) ?(((uintptr_t)p + a) & ~(uintptr_t)(a-1)) : p)
2929

3030
// Include all image sensor drivers here.
31-
#if defined (ARDUINO_PORTENTA_H7_M7) || defined (ARDUINO_PORTENTA_H7_M4)
31+
#if defined (ARDUINO_PORTENTA_H7_M7)
3232

3333
#define DCMI_TIM (TIM1)
3434
#define DCMI_TIM_PIN (GPIO_PIN_1)
@@ -80,7 +80,7 @@ arduino::MbedI2C CameraWire(I2C_SDA1, I2C_SCL1);
8080

8181
// DCMI GPIO pins struct
8282
static const struct { GPIO_TypeDef *port; uint16_t pin; } dcmi_pins[] = {
83-
#if defined (ARDUINO_PORTENTA_H7_M7) || defined (ARDUINO_PORTENTA_H7_M4)
83+
#if defined (ARDUINO_PORTENTA_H7_M7)
8484
{GPIOA, GPIO_PIN_4 },
8585
{GPIOA, GPIO_PIN_6 },
8686
{GPIOI, GPIO_PIN_4 },
@@ -175,7 +175,7 @@ void HAL_DCMI_MspInit(DCMI_HandleTypeDef *hdcmi)
175175
hgpio.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
176176
hgpio.Alternate = GPIO_AF13_DCMI;
177177

178-
#if defined (ARDUINO_PORTENTA_H7_M7) || defined (ARDUINO_PORTENTA_H7_M4)
178+
#if defined (ARDUINO_PORTENTA_H7_M7)
179179
/* Enable GPIO clocks */
180180
__HAL_RCC_GPIOA_CLK_ENABLE();
181181
__HAL_RCC_GPIOH_CLK_ENABLE();

libraries/PDM/src/STM32H747_dfsdm/audio.c

+4
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ void HAL_DFSDM_FilterRegConvHalfCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_
6868
{
6969
xfer_status |= DMA_XFER_HALF;
7070
// Invalidate Data Cache to get the updated content of the SRAM
71+
#ifdef CORE_CM7
7172
SCB_InvalidateDCache_by_Addr((uint32_t*)&RecBuff[0],sizeof(RecBuff)/2);
73+
#endif
7274
}
7375
PDMIrqHandler(true);
7476
}
@@ -86,7 +88,9 @@ void HAL_DFSDM_FilterRegConvCpltCallback(DFSDM_Filter_HandleTypeDef *hdfsdm_filt
8688
{
8789
xfer_status |= DMA_XFER_FULL;
8890
// Invalidate Data Cache to get the updated content of the SRAM
91+
#ifdef CORE_CM7
8992
SCB_InvalidateDCache_by_Addr((uint32_t*)&RecBuff[PDM_BUFFER_SIZE/2],sizeof(RecBuff)/2);
93+
#endif
9094
}
9195
PDMIrqHandler(false);
9296
}

libraries/Portenta_SDRAM/src/SDRAM.h

+5
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,13 @@
44

55
#include "Arduino.h"
66

7+
#if !defined(CORE_CM4)
78
#define SDRAM_END_ADDRESS (0x60800000)
89
#define SDRAM_START_ADDRESS (0x60000000)
10+
#else
11+
#define SDRAM_END_ADDRESS (0xC0800000)
12+
#define SDRAM_START_ADDRESS (0xC0000000)
13+
#endif
914

1015
class SDRAMClass {
1116
public:

libraries/RPC/src/RPC.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,14 @@ int RPCClass::begin(long unsigned int np, uint16_t nd) {
178178
* The rpmsg service is initiate by the remote processor, on H7 new_service_cb
179179
* callback is received on service creation. Wait for the callback
180180
*/
181-
OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RAW], millis() + 500);
182-
OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RESPONSE], millis() + 500);
181+
auto err = OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RAW], millis() + 500);
182+
err |= OPENAMP_Wait_EndPointready(&rp_endpoints[ENDPOINT_RESPONSE], millis() + 500);
183+
184+
if (err == 0) {
185+
initialized = true;
186+
} else {
187+
return 0;
188+
}
183189

184190
// Send first dummy message to enable the channel
185191
uint8_t message = 0x00;
@@ -226,6 +232,8 @@ int RPCClass::begin(long unsigned int np, uint16_t nd) {
226232
return 0;
227233
}
228234

235+
initialized = true;
236+
229237
return 1;
230238
}
231239

libraries/SocketWrapper/src/utility/wl_definitions.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ enum wl_enc_type { /* Values map to 802.11 encryption suites... */
7070
ENC_TYPE_AUTO = 8
7171
};
7272

73-
#if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4)
73+
#if defined(ARDUINO_PORTENTA_H7_M7)
7474
#include "whd_version.h"
7575
#define WIFI_FIRMWARE_LATEST_VERSION WHD_VERSION
7676
#endif
7777

78-
#endif /* WL_DEFINITIONS_H_ */
78+
#endif /* WL_DEFINITIONS_H_ */

libraries/WiFi/src/WiFi.cpp

+12-1
Original file line numberDiff line numberDiff line change
@@ -238,12 +238,22 @@ void arduino::WiFiClass::MACAddress(uint8_t *mac_address)
238238

239239
#define WIFI_FIRMWARE_PATH "/wlan/4343WA1.BIN"
240240

241+
#if defined(CORE_CM4)
242+
#include "QSPIFBlockDevice.h"
243+
mbed::BlockDevice *mbed::BlockDevice::get_default_instance()
244+
{
245+
static QSPIFBlockDevice default_bd(PD_11, PD_12, PE_2, PF_6, PF_10, PG_6, QSPIF_POLARITY_MODE_1, 40000000);
246+
return &default_bd;
247+
}
248+
#endif
249+
241250
bool firmware_available = false;
242251

243252
#include "wiced_filesystem.h"
244253
#include "resources.h"
245254

246255
void wiced_filesystem_mount_error(void) {
256+
while (!Serial) {}
247257
Serial.println("Failed to mount the filesystem containing the WiFi firmware.");
248258
Serial.println("Usually that means that the WiFi firmware has not been installed yet"
249259
" or was overwritten with another firmware.");
@@ -252,6 +262,7 @@ void wiced_filesystem_mount_error(void) {
252262
}
253263

254264
void wiced_filesystem_firmware_error(void) {
265+
while (!Serial) {}
255266
Serial.println("Please run the \"WiFiFirmwareUpdater\" sketch once to install the WiFi firmware.");
256267
whd_print_logbuffer();
257268
while (1) {}
@@ -274,7 +285,7 @@ wiced_result_t whd_firmware_check_hook(const char* mounted_name, int mount_err)
274285
return WICED_SUCCESS;
275286
}
276287
}
277-
Serial.println("File not found");
288+
if (Serial) { Serial.println("File not found\n"); }
278289
closedir(dir);
279290
}
280291
wiced_filesystem_firmware_error();

libraries/WiFi/src/utility/wl_definitions.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ enum wl_enc_type { /* Values map to 802.11 encryption suites... */
7070
ENC_TYPE_AUTO = 8
7171
};
7272

73-
#if defined(ARDUINO_PORTENTA_H7_M7) || defined(ARDUINO_PORTENTA_H7_M4)
73+
#if defined(ARDUINO_PORTENTA_H7_M7)
7474
#include "whd_version.h"
7575
#define WIFI_FIRMWARE_LATEST_VERSION WHD_VERSION
7676
#endif
7777

78-
#endif /* WL_DEFINITIONS_H_ */
78+
#endif /* WL_DEFINITIONS_H_ */

libraries/openamp_arduino/src/openamp.c

+3-1
Original file line numberDiff line numberDiff line change
@@ -169,14 +169,16 @@ int OPENAMP_check_for_message(void)
169169

170170
unsigned long millis();
171171

172-
void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline)
172+
int OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline)
173173
{
174174
while(!is_rpmsg_ept_ready(rp_ept) && (millis() < deadline)) {
175175
MAILBOX_Poll(rvdev.vdev);
176176
}
177177
if (millis() >= deadline) {
178178
printf("OPENAMP_Wait_EndPointready %X timed out\n\r", (unsigned int)rp_ept);
179+
return -1;
179180
}
181+
return 0;
180182
}
181183

182184
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

libraries/openamp_arduino/src/openamp.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ int OPENAMP_create_endpoint(struct rpmsg_endpoint *ept, const char *name,
4949
int OPENAMP_check_for_message(void);
5050

5151
/* Wait loop on endpoint ready ( message dest address is know)*/
52-
void OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline);
52+
int OPENAMP_Wait_EndPointready(struct rpmsg_endpoint *rp_ept, size_t deadline);
5353

5454
#ifdef __cplusplus
5555
}

0 commit comments

Comments
 (0)