Skip to content

Commit d98b312

Browse files
authored
Merge pull request #3541 from jepler/lto-parallel
atmel-samd: parallelize lto linking
2 parents f8d37c0 + cc411f4 commit d98b312

File tree

5 files changed

+72
-60
lines changed

5 files changed

+72
-60
lines changed

ports/atmel-samd/Makefile

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ $(echo PERIPHERALS_CHIP_FAMILY=$(PERIPHERALS_CHIP_FAMILY))
121121
ifeq ($(DEBUG), 1)
122122
CFLAGS += -ggdb3 -Og
123123
# You may want to disable -flto if it interferes with debugging.
124-
CFLAGS += -flto -flto-partition=none
124+
CFLAGS += -flto
125125
# You may want to enable these flags to make setting breakpoints easier.
126126
# CFLAGS += -fno-inline -fno-ipa-sra
127127
ifeq ($(CHIP_FAMILY), samd21)
@@ -144,7 +144,7 @@ else
144144
CFLAGS += -finline-limit=$(CFLAGS_INLINE_LIMIT)
145145
endif
146146

147-
CFLAGS += -flto -flto-partition=none
147+
CFLAGS += -flto
148148

149149
ifeq ($(CIRCUITPY_FULL_BUILD),0)
150150
CFLAGS += --param inline-unit-growth=15 --param max-inline-insns-auto=20
@@ -197,6 +197,7 @@ endif
197197

198198

199199
LDFLAGS = $(CFLAGS) -nostartfiles -Wl,-nostdlib -Wl,-T,$(GENERATED_LD_FILE) -Wl,-Map=$@.map -Wl,-cref -Wl,-gc-sections -specs=nano.specs
200+
LDFLAGS += -flto=$(shell nproc)
200201
LIBS := -lgcc -lc
201202

202203
# Use toolchain libm if we're not using our own.

ports/atmel-samd/boards/sparkfun_lumidrive/mpconfigboard.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@
3535
#define IGNORE_PIN_PA12 1
3636
#define IGNORE_PIN_PA15 1
3737
#define IGNORE_PIN_PA16 1
38-
#define IGNORE_PIN_PA21 1
39-
#define IGNORE_PIN_PA22 1
40-
#define IGNORE_PIN_PA23 1
4138
#define IGNORE_PIN_PA27 1
4239
#define IGNORE_PIN_PA28 1
4340

ports/atmel-samd/common-hal/analogio/AnalogOut.c

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -44,26 +44,36 @@
4444
#include "hpl/pm/hpl_pm_base.h"
4545
#endif
4646

47+
#define HAVE_ANALOGOUT ( \
48+
(defined(PIN_PA02) && !defined(IGNORE_PA02)) || \
49+
(defined(SAM_D5X_E5X) && defined(PIN_PA05) && !defined(IGNORE_PA05)) \
50+
)
51+
4752
void common_hal_analogio_analogout_construct(analogio_analogout_obj_t* self,
4853
const mcu_pin_obj_t *pin) {
49-
#if defined(SAMD21) && !defined(PIN_PA02)
54+
#if !HAVE_ANALOGOUT
5055
mp_raise_NotImplementedError(translate("No DAC on chip"));
5156
#else
52-
if (pin->number != PIN_PA02
53-
#ifdef SAM_D5X_E5X
54-
&& pin->number != PIN_PA05
57+
58+
int channel = -1;
59+
60+
#if defined(PIN_PA02) && !defined(IGNORE_PIN_PA02)
61+
if (pin->number != PIN_PA02) {
62+
channel = 0;
63+
}
64+
#endif
65+
#if defined(PIN_PA05) && defined(PIN_PA05) && !defined(IGNORE_PIN_PA05)
66+
if (pin->number != PIN_PA05) {
67+
channel = 1;
68+
}
5569
#endif
56-
) {
70+
71+
if(channel == -1) {
5772
mp_raise_ValueError(translate("AnalogOut not supported on given pin"));
5873
return;
5974
}
6075

61-
self->channel = 0;
62-
#ifdef SAM_D5X_E5X
63-
if (pin->number == PIN_PA05) {
64-
self->channel = 1;
65-
}
66-
#endif
76+
self->channel = channel;
6777

6878
#ifdef SAM_D5X_E5X
6979
hri_mclk_set_APBDMASK_DAC_bit(MCLK);
@@ -105,11 +115,15 @@ void common_hal_analogio_analogout_construct(analogio_analogout_obj_t* self,
105115
}
106116

107117
bool common_hal_analogio_analogout_deinited(analogio_analogout_obj_t *self) {
118+
#if !HAVE_ANALOGOUT
119+
return false;
120+
#else
108121
return self->deinited;
122+
#endif
109123
}
110124

111125
void common_hal_analogio_analogout_deinit(analogio_analogout_obj_t *self) {
112-
#if (defined(SAMD21) && defined(PIN_PA02)) || defined(SAM_D5X_E5X)
126+
#if HAVE_ANALOGOUT
113127
if (common_hal_analogio_analogout_deinited(self)) {
114128
return;
115129
}
@@ -130,20 +144,19 @@ void common_hal_analogio_analogout_deinit(analogio_analogout_obj_t *self) {
130144

131145
void common_hal_analogio_analogout_set_value(analogio_analogout_obj_t *self,
132146
uint16_t value) {
133-
#if defined(SAMD21) && !defined(PIN_PA02)
134-
return;
135-
#endif
147+
#if HAVE_ANALOGOUT
136148
// Input is 16 bit so make sure and set LEFTADJ to 1 so it takes the top
137149
// bits. This is currently done in asf4_conf/*/hpl_dac_config.h.
138150
dac_sync_write(&self->descriptor, self->channel, &value, 1);
151+
#endif
139152
}
140153

141154
void analogout_reset(void) {
142155
// audioout_reset also resets the DAC, and does a smooth ramp down to avoid clicks
143156
// if it was enabled, so do that instead if AudioOut is enabled.
144157
#if CIRCUITPY_AUDIOIO
145158
audioout_reset();
146-
#else
159+
#elif HAVE_ANALOGOUT
147160
#ifdef SAMD21
148161
while (DAC->STATUS.reg & DAC_STATUS_SYNCBUSY) {}
149162
#endif

ports/atmel-samd/common-hal/microcontroller/Pin.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,11 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t* pin) {
223223
#ifdef MICROPY_HW_NEOPIXEL
224224
if (pin == MICROPY_HW_NEOPIXEL) {
225225
// Special case for Metro M0 where the NeoPixel is also SWCLK
226+
#ifndef IGNORE_PIN_PA30
226227
if (MICROPY_HW_NEOPIXEL == &pin_PA30 && DSU->STATUSB.bit.DBGPRES == 1) {
227228
return false;
228229
}
230+
#endif
229231
return !neopixel_in_use;
230232
}
231233
#endif

ports/atmel-samd/common-hal/microcontroller/__init__.c

Lines changed: 38 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -275,120 +275,119 @@ STATIC const mp_rom_map_elem_t mcu_pin_global_dict_table[] = {
275275
{ MP_ROM_QSTR(MP_QSTR_PB31), MP_ROM_PTR(&pin_PB31) },
276276
#endif
277277

278-
// These are SAMD51 specific so we assume we want them in RAM
279-
#if defined(PIN_PC00)
278+
#if defined(PIN_PC00) && !defined(IGNORE_PIN_PC00)
280279
{ MP_ROM_QSTR(MP_QSTR_PC00), MP_ROM_PTR(&pin_PC00) },
281280
#endif
282-
#if defined(PIN_PC01)
281+
#if defined(PIN_PC01) && !defined(IGNORE_PIN_PC01)
283282
{ MP_ROM_QSTR(MP_QSTR_PC01), MP_ROM_PTR(&pin_PC01) },
284283
#endif
285-
#if defined(PIN_PC02)
284+
#if defined(PIN_PC02) && !defined(IGNORE_PIN_PC02)
286285
{ MP_ROM_QSTR(MP_QSTR_PC02), MP_ROM_PTR(&pin_PC02) },
287286
#endif
288-
#if defined(PIN_PC03)
287+
#if defined(PIN_PC03) && !defined(IGNORE_PIN_PC03)
289288
{ MP_ROM_QSTR(MP_QSTR_PC03), MP_ROM_PTR(&pin_PC03) },
290289
#endif
291-
#if defined(PIN_PC04)
290+
#if defined(PIN_PC04) && !defined(IGNORE_PIN_PC04)
292291
{ MP_ROM_QSTR(MP_QSTR_PC04), MP_ROM_PTR(&pin_PC04) },
293292
#endif
294-
#if defined(PIN_PC05)
293+
#if defined(PIN_PC05) && !defined(IGNORE_PIN_PC05)
295294
{ MP_ROM_QSTR(MP_QSTR_PC05), MP_ROM_PTR(&pin_PC05) },
296295
#endif
297-
#if defined(PIN_PC06)
296+
#if defined(PIN_PC06) && !defined(IGNORE_PIN_PC06)
298297
{ MP_ROM_QSTR(MP_QSTR_PC06), MP_ROM_PTR(&pin_PC06) },
299298
#endif
300-
#if defined(PIN_PC07)
299+
#if defined(PIN_PC07) && !defined(IGNORE_PIN_PC07)
301300
{ MP_ROM_QSTR(MP_QSTR_PC07), MP_ROM_PTR(&pin_PC07) },
302301
#endif
303-
#if defined(PIN_PC10)
302+
#if defined(PIN_PC10) && !defined(IGNORE_PIN_PC10)
304303
{ MP_ROM_QSTR(MP_QSTR_PC10), MP_ROM_PTR(&pin_PC10) },
305304
#endif
306-
#if defined(PIN_PC11)
305+
#if defined(PIN_PC11) && !defined(IGNORE_PIN_PC11)
307306
{ MP_ROM_QSTR(MP_QSTR_PC11), MP_ROM_PTR(&pin_PC11) },
308307
#endif
309-
#if defined(PIN_PC12)
308+
#if defined(PIN_PC12) && !defined(IGNORE_PIN_PC12)
310309
{ MP_ROM_QSTR(MP_QSTR_PC12), MP_ROM_PTR(&pin_PC12) },
311310
#endif
312-
#if defined(PIN_PC13)
311+
#if defined(PIN_PC13) && !defined(IGNORE_PIN_PC13)
313312
{ MP_ROM_QSTR(MP_QSTR_PC13), MP_ROM_PTR(&pin_PC13) },
314313
#endif
315-
#if defined(PIN_PC14)
314+
#if defined(PIN_PC14) && !defined(IGNORE_PIN_PC14)
316315
{ MP_ROM_QSTR(MP_QSTR_PC14), MP_ROM_PTR(&pin_PC14) },
317316
#endif
318-
#if defined(PIN_PC15)
317+
#if defined(PIN_PC15) && !defined(IGNORE_PIN_PC15)
319318
{ MP_ROM_QSTR(MP_QSTR_PC15), MP_ROM_PTR(&pin_PC15) },
320319
#endif
321-
#if defined(PIN_PC16)
320+
#if defined(PIN_PC16) && !defined(IGNORE_PIN_PC16)
322321
{ MP_ROM_QSTR(MP_QSTR_PC16), MP_ROM_PTR(&pin_PC16) },
323322
#endif
324-
#if defined(PIN_PC17)
323+
#if defined(PIN_PC17) && !defined(IGNORE_PIN_PC17)
325324
{ MP_ROM_QSTR(MP_QSTR_PC17), MP_ROM_PTR(&pin_PC17) },
326325
#endif
327-
#if defined(PIN_PC18)
326+
#if defined(PIN_PC18) && !defined(IGNORE_PIN_PC18)
328327
{ MP_ROM_QSTR(MP_QSTR_PC18), MP_ROM_PTR(&pin_PC18) },
329328
#endif
330-
#if defined(PIN_PC19)
329+
#if defined(PIN_PC19) && !defined(IGNORE_PIN_PC19)
331330
{ MP_ROM_QSTR(MP_QSTR_PC19), MP_ROM_PTR(&pin_PC19) },
332331
#endif
333-
#if defined(PIN_PC20)
332+
#if defined(PIN_PC20) && !defined(IGNORE_PIN_PC20)
334333
{ MP_ROM_QSTR(MP_QSTR_PC20), MP_ROM_PTR(&pin_PC20) },
335334
#endif
336-
#if defined(PIN_PC21)
335+
#if defined(PIN_PC21) && !defined(IGNORE_PIN_PC21)
337336
{ MP_ROM_QSTR(MP_QSTR_PC21), MP_ROM_PTR(&pin_PC21) },
338337
#endif
339-
#if defined(PIN_PC22)
338+
#if defined(PIN_PC22) && !defined(IGNORE_PIN_PC22)
340339
{ MP_ROM_QSTR(MP_QSTR_PC22), MP_ROM_PTR(&pin_PC22) },
341340
#endif
342-
#if defined(PIN_PC23)
341+
#if defined(PIN_PC23) && !defined(IGNORE_PIN_PC23)
343342
{ MP_ROM_QSTR(MP_QSTR_PC23), MP_ROM_PTR(&pin_PC23) },
344343
#endif
345-
#if defined(PIN_PC24)
344+
#if defined(PIN_PC24) && !defined(IGNORE_PIN_PC24)
346345
{ MP_ROM_QSTR(MP_QSTR_PC24), MP_ROM_PTR(&pin_PC24) },
347346
#endif
348-
#if defined(PIN_PC25)
347+
#if defined(PIN_PC25) && !defined(IGNORE_PIN_PC25)
349348
{ MP_ROM_QSTR(MP_QSTR_PC25), MP_ROM_PTR(&pin_PC25) },
350349
#endif
351-
#if defined(PIN_PC26)
350+
#if defined(PIN_PC26) && !defined(IGNORE_PIN_PC26)
352351
{ MP_ROM_QSTR(MP_QSTR_PC26), MP_ROM_PTR(&pin_PC26) },
353352
#endif
354-
#if defined(PIN_PC27)
353+
#if defined(PIN_PC27) && !defined(IGNORE_PIN_PC27)
355354
{ MP_ROM_QSTR(MP_QSTR_PC27), MP_ROM_PTR(&pin_PC27) },
356355
#endif
357-
#if defined(PIN_PC28)
356+
#if defined(PIN_PC28) && !defined(IGNORE_PIN_PC28)
358357
{ MP_ROM_QSTR(MP_QSTR_PC28), MP_ROM_PTR(&pin_PC28) },
359358
#endif
360-
#if defined(PIN_PC30)
359+
#if defined(PIN_PC30) && !defined(IGNORE_PIN_PC30)
361360
{ MP_ROM_QSTR(MP_QSTR_PC30), MP_ROM_PTR(&pin_PC30) },
362361
#endif
363-
#if defined(PIN_PC31)
362+
#if defined(PIN_PC31) && !defined(IGNORE_PIN_PC31)
364363
{ MP_ROM_QSTR(MP_QSTR_PC31), MP_ROM_PTR(&pin_PC31) },
365364
#endif
366365

367-
#if defined(PIN_PD00)
366+
#if defined(PIN_PD00) && !defined(IGNORE_PIN_PD00)
368367
{ MP_ROM_QSTR(MP_QSTR_PD00), MP_ROM_PTR(&pin_PD00) },
369368
#endif
370-
#if defined(PIN_PD01)
369+
#if defined(PIN_PD01) && !defined(IGNORE_PIN_PD01)
371370
{ MP_ROM_QSTR(MP_QSTR_PD01), MP_ROM_PTR(&pin_PD01) },
372371
#endif
373-
#if defined(PIN_PD08)
372+
#if defined(PIN_PD08) && !defined(IGNORE_PIN_PD08)
374373
{ MP_ROM_QSTR(MP_QSTR_PD08), MP_ROM_PTR(&pin_PD08) },
375374
#endif
376-
#if defined(PIN_PD09)
375+
#if defined(PIN_PD09) && !defined(IGNORE_PIN_PD09)
377376
{ MP_ROM_QSTR(MP_QSTR_PD09), MP_ROM_PTR(&pin_PD09) },
378377
#endif
379-
#if defined(PIN_PD10)
378+
#if defined(PIN_PD10) && !defined(IGNORE_PIN_PD10)
380379
{ MP_ROM_QSTR(MP_QSTR_PD10), MP_ROM_PTR(&pin_PD10) },
381380
#endif
382-
#if defined(PIN_PD11)
381+
#if defined(PIN_PD11) && !defined(IGNORE_PIN_PD11)
383382
{ MP_ROM_QSTR(MP_QSTR_PD11), MP_ROM_PTR(&pin_PD11) },
384383
#endif
385-
#if defined(PIN_PD12)
384+
#if defined(PIN_PD12) && !defined(IGNORE_PIN_PD12)
386385
{ MP_ROM_QSTR(MP_QSTR_PD12), MP_ROM_PTR(&pin_PD12) },
387386
#endif
388-
#if defined(PIN_PD20)
387+
#if defined(PIN_PD20) && !defined(IGNORE_PIN_PD20)
389388
{ MP_ROM_QSTR(MP_QSTR_PD20), MP_ROM_PTR(&pin_PD20) },
390389
#endif
391-
#if defined(PIN_PD21)
390+
#if defined(PIN_PD21) && !defined(IGNORE_PIN_PD21)
392391
{ MP_ROM_QSTR(MP_QSTR_PD21), MP_ROM_PTR(&pin_PD21) },
393392
#endif
394393
};

0 commit comments

Comments
 (0)