8000 drivers/periph/gpio_ll: shrink gpio_conf_t by maribu · Pull Request #20236 · RIOT-OS/RIOT · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

drivers/periph/gpio_ll: shrink gpio_conf_t #20236

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Jan 21, 2024

Conversation

maribu
Copy link
Member
@maribu maribu commented Jan 8, 2024

Contribution description

This commit optimizes the gpio_conf_t type in the following regards:

  • The "base" gpio_conf_t is stripped from members that only some platforms support, e.g. drive strength, slew rate, and disabling of the Schmitt Trigger are no longer universally available but platform-specific extensions
  • The gpio_conf_t is now crammed into a bit-field that is 8 bit or 16 bit wide. This allows for storing lots of them e.g. in driver_foo_params_t or uart_conf_t etc.
  • A union of the struct with bit-field members and a bits is used to allow accessing all bits in a simple C statement and to ensure alignment for efficient handling of the type

In addition gpio_conf_t is no longer passed via pointer, but by value. Because it now is small enough to fit in a register on all supported platforms, this results in less overhead when calling gpio_ll_init().

Testing procedure

The provided test app should still work for all supported MCU families.

Trade-Off Involved

Dropping members (such as disabling of the Schmitt Trigger, or selecting the slew rate) that are not universally found from the common interface is IMO uncontroversial. The more fancy MCUs just provide their own gpio_conf_t and still provide all the features they have, but the basic MCUs have a lot less overhead.

The use of bit fields is IMO controversial:

Pros:

  • This shrinks gpio_conf_t to the point that it is acceptable to heavily use it in foo_params_t in drivers or foo_conf_t in the boards periph_conf.h

Cons:

  • It adds overhead to gpio_ll_init(), gpio_ll_query_conf(), and gpio_ll_print_conf.
    • gpio_ll_query_conf() and gpio_ll_print_conf() are super useful for debugging, but I don't see them used for other stuff. IMO overhead here doesn't matter
    • The overhead in terms of a few CPU cycles for gpio_ll_init() IMO doesn't matter that much, as this is not typically done.
      • (Switching between input and output while keeping the rest of the config would benefit AVR and SAM, though. They don't support Open-Drain, so this is the only shot they have for bi-directional bit-banging. But for that gpio_ll_init() is too slow already as it is. But I think it would be possible to add an optional API for just changing the direction. In any case, this is out of scope of this PR.)

==> The overhead in terms of ROM specifically for gpio_ll_init() is the most relevant one

On Cortex M0 / STM32
  • 26 B

This PR:

$ arm-none-eabi-objdump -t bin/nucleo-f030r8/periph/gpio_ll.o | grep gpio_ll_init
00000000 l    d  .text.gpio_ll_init	00000000 .text.gpio_ll_init
00000000 g     F .text.gpio_ll_init	000000a8 gpio_ll_init

master:

$ arm-none-eabi-objdump -t bin/nucleo-f030r8/periph/gpio_ll.o | grep gpio_ll_init
00000000 l    d  .text.gpio_ll_init	00000000 .text.gpio_ll_init
00000000 g     F .text.gpio_ll_init	0000008e gpio_ll_init
On Cortex M0+ / EFM32ZG
  • 8 B

This PR:

$ arm-none-eabi-objdump -t bin/stk3200/tests_gpio_ll.elf | grep gpio_ll_init
00002388 g     F .text	00000078 gpio_ll_init

master:

$ arm-none-eabi-objdump -t bin/stk3200/tests_gpio_ll.elf | grep gpio_ll_init 
00002460 g     F .text	00000070 gpio_ll_init
On Cortex M4(F) / STM32
  • 24 B

This PR:

$ arm-none-eabi-objdump -t bin/nucleo-f446re/periph/gpio_ll.o | grep gpio_ll_init
00000000 l    d  .text.gpio_ll_init	00000000 .text.gpio_ll_init
00000000 g     F .text.gpio_ll_init	000000b4 gpio_ll_init

master:

$ arm-none-eabi-objdump -t bin/nucleo-f446re/periph/gpio_ll.o | grep gpio_ll_init
00000000 l    d  .text.gpio_ll_init	00000000 .text.gpio_ll_init
00000000 g     F .text.gpio_ll_init	0000009c gpio_ll_init
On Cortex M4(F) / nRF5x
  • 2 B

This PR:

$ arm-none-eabi-objdump -t bin/nrf52840dk/tests_gpio_ll.elf | grep gpio_ll_init 
00001e88 g     F .text	0000008c gpio_ll_init

master:

$ arm-none-eabi-objdump -t bin/nrf52840dk/tests_gpio_ll.elf | grep gpio_ll_init
00001f04 g     F .text	0000008a gpio_ll_init
On AVR
  • 26 B

This PR:

$ avr-objdump -t bin/atmega328p/atmega_common_periph/gpio_ll.o | grep gpio_ll_init
00000000 l    d  .text.gpio_ll_init	00000000 .text.gpio_ll_init
00000000 g     F .text.gpio_ll_init	00000120 gpio_ll_init

master:

$ avr-objdump -t bin/atmega328p/atmega_common_periph/gpio_ll.o | grep gpio_ll_init
00000000 l    d  .text.gpio_ll_init	00000000 .text.gpio_ll_init
00000000 g     F .text.gpio_ll_init	00000106 gpio_ll_init
On ESP32
  • 6 B

This PR:

$ xtensa-esp32-elf-objdump -t bin/esp32-ethernet-kit-v1_2/tests_gpio_ll.elf | grep gpio_ll_init
400d46d4 g     F .flash.text	00000137 gpio_ll_init

master:

$ xtensa-esp32-elf-objdump -t bin/esp32-ethernet-kit-v1_2/tests_gpio_ll.elf | grep gpio_ll_init
400d00f8 l     F .flash.text	00000a7b test_gpio_ll_init
400d4758 g     F .flash.text	0000013c gpio_ll_init

Summary

The size of gpio_conf_t goes down from 7 B to 1 B or 2 B, so at least 5B is saved for every stored gpio_conf_t. This comes for a cost for up to 26 B increase in gpio_ll_init().

We safe ROM latest when 6 instances of gpio_conf_t are stored in flash. This would already be the case when two SPI buses with one gpio_conf_t per pin is used.

Issues/PRs references

None

@maribu maribu added the State: WIP State: The PR is still work-in-progress and its code is not in its final presentable form yet label Jan 8, 2024
@github-actions github-actions bot added Platform: ARM Platform: This PR/issue effects ARM-based platforms Area: tests Area: tests and testing framework Platform: AVR Platform: This PR/issue effects AVR-based platforms Area: drivers Area: Device drivers Platform: ESP Platform: This PR/issue effects ESP-based platforms Area: cpu Area: CPU/MCU ports labels Jan 8, 2024
@gschorcht
Copy link
Contributor

The following change is needed to avoid compilation errors.

diff --git a/cpu/esp32/periph/gpio_ll.c b/cpu/esp32/periph/gpio_ll.c
index 2c3d730d84..13f387b516 100644
--- a/cpu/esp32/periph/gpio_ll.c
+++ b/cpu/esp32/periph/gpio_ll.c
@@ -151,7 +151,6 @@ int gpio_ll_init(gpio_port_t port, uint8_t pin, const gpio_conf_t *conf)
 
     /* since we can't read back the configuration, we have to save it */
     _gpio_conf[gpio] = *conf;
-    _gpio_conf[gpio].schmitt_trigger = false;
 
     if (esp_idf_gpio_config(&cfg) != ESP_OK) {
         return -ENOTSUP;

@gschorcht gschorcht added the Process: API change Integration Process: PR contains or issue proposes an API change. Should be handled with care. label Jan 9, 2024
@maribu maribu added CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR and removed State: WIP State: The PR is still work-in-progress and its code is not in its final presentable form yet labels Jan 9, 2024
@riot-ci
Copy link
riot-ci commented Jan 9, 2024

Murdock results

✔️ PASSED

9222762 drivers/periph/gpio_ll: pass gpio_conf_t by value

Success Failures Total Runtime
8623 0 8623 12m:01s

Artifacts

@maribu maribu requested a review from basilfx as a code owner January 9, 2024 11:29
@maribu maribu requested a review from benpicco January 11, 2024 15:59
@maribu maribu force-pushed the periph/gpio_ll/smaller_type branch 2 times, most recently from 3b3ca2e to d315010 Compare January 11, 2024 17:19
Copy link
Contributor
@benpicco benpicco left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, did you test this on all affected architectures?

@maribu
Copy link
Member Author
maribu commented Jan 16, 2024

So, finally:

EFM32

make BOARD=e180-zg120b-tb -C tests/periph/gpio_ll flash test-with-config
make: Entering directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'
Building application "tests_gpio_ll" for "e180-zg120b-tb" with MCU "efm32".

"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/pkg/cmsis/ 
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/pkg/gecko_sdk/ 
"make" -C /home/maribu/.cache/RIOT/pkg/gecko_sdk/dist
"make" -C /home/maribu/.cache/RIOT/pkg/gecko_sdk/dist/emlib-extra/src
"make" -C /home/maribu/.cache/RIOT/pkg/gecko_sdk/dist/emlib/src
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/common/init
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/e180-zg120b-tb
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/core
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/core/lib
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/efm32
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/cortexm_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/cortexm_common/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/efm32/families/efr32mg1b
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/efm32/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/drivers
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/drivers/periph_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/auto_init
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/div
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/frac
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/isrpipe
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/libc
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/malloc_thread_safe
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/newlib_syscalls_default
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/pm_layered
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/preprocessor
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/stdio_uart
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/test_utils/interactive_sync
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/test_utils/print_stack_usage
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/tsrb
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/ztimer
   text	  data	   bss	   dec	   hex	filename
  23976	   196	  2648	 26820	  68c4	/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/e180-zg120b-tb/tests_gpio_ll.elf
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/openocd/openocd.sh flash /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/e180-zg120b-tb/tests_gpio_ll.elf
### Flashing Target ###
Open On-Chip Debugger 0.12.0+dev-snapshot (2023-06-12-09:31)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
hla_swd
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
Info : clock speed 1000 kHz
Info : STLINK V2J29S7 (API v2) VID:PID 0483:3748
Info : Target voltage: 3.228890
Info : [efm32.cpu] Cortex-M4 r0p1 processor detected
Info : [efm32.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for efm32.cpu on 0
Info : Listening on port 33793 for gdb connections
    TargetName         Type       Endian TapName            State       
--  ------------------ ---------- ------ ------------------ ------------
 0* efm32.cpu          hla_target little efm32.cpu          unknown
[efm32.cpu] halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x0fe10000 msp: 0x20000400
Info : detected part: EFR32MG1B Mighty Gecko, rev 165
Info : flash size = 256 KiB
Info : flash page size = 2048 B
auto erase enabled
wrote 24576 bytes from file /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/e180-zg120b-tb/tests_gpio_ll.elf in 0.854452s (28.088 KiB/s)
verified 24172 bytes in 0.168266s (140.287 KiB/s)
shutdown command invoked
Done flashing
r
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/pyterm/pyterm -p "/dev/ttyUSB0" -b "115200" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Connect to serial port /dev/ttyUSB0
Welcome to pyterm!
Type '/exit' to exit.
READY
s
START
main(): This is RIOT! (Version: 2024.01-devel-602-g3a69b-periph/gpio_ll/smaller_type)
Test / Hardware Details:
========================
Cabling:
(INPUT -- OUTPUT)
  P1.11 (PB11) -- P3.14 (PD14)
  P1.12 (PB12) -- P3.13 (PD13)
Number of pull resistor values supported: 1
Number of drive strengths supported: 1
Number of slew rates supported: 1
Valid GPIO ports:
- PORT 0 (PORT A)
- PORT 1 (PORT B)
- PORT 2 (PORT C)
- PORT 3 (PORT D)
- PORT 5 (PORT F)

Testing gpio_port_pack_addr()
=============================

All OK

Testing gpip_ng_init()
======================

Testing is_gpio_port_num_valid() is true for PORT_OUT and PORT_IN:

Testing input configurations for PIN_IN_0:
Support for input with pull up: yes
state: in, pull: up, value: on
Support for input with pull down: yes
state: in, pull: down, value: off
Support for input with pull to bus level: no
Support for floating input (no pull resistors): yes
state: in, pull: none, value: off

Testing output configurations for PIN_OUT_0:
Support for output (push-pull) with initial value of LOW: yes
state: out-pp, value: off
Output is indeed LOW: yes
state: out-pp, value: on
Output can be pushed HIGH: yes
Support for output (push-pull) with initial value of HIGH: yes
state: out-pp, value: on
Output is indeed HIGH: yes
Support for output (open drain with pull up) with initial value of LOW: yes
state: out-od, pull: up, value: off
Output is indeed LOW: yes
Support for output (open drain with pull up) with initial value of HIGH: yes
state: out-od, pull: up, value: on
Output is indeed HIGH: yes
Support for output (open drain) with initial value of LOW: yes
state: out-od, pull: none, value: off
Output is indeed LOW: yes
Support for output (open drain) with initial value of HIGH: yes
state: out-od, pull: none, value: on
state: in, pull: down, value: off
Output can indeed be pulled LOW: yes
state: in, pull: up, value: on
Output can indeed be pulled HIGH: yes
Support for output (open source) with initial value of LOW: yes
state: out-os, pull: none, value: off
state: in, pull: down, value: off
Output can indeed be pulled LOW: yes
state: in, pull: up, value: on
Output can indeed be pulled HIGH: yes
Support for output (open source) with initial value of HIGH: yes
state: out-os, pull: none, value: on
Output is indeed HIGH: yes
Support for output (open source with pull up) with initial value of HIGH: yes
Output is indeed HIGH: yes
Support for output (open source with pull up) with initial value of LOW: yes
Output is indeed LOW: yes
Support for disconnecting GPIO: yes
Output can indeed be pulled LOW: yes
Output can indeed be pulled HIGH: yes

Testing Reading/Writing GPIO Ports
==================================

testing initial value of 0 after init
...OK
testing setting both outputs_optional simultaneously
...OK
testing clearing both outputs_optional simultaneously
...OK
testing toggling first output (0 --> 1)
...OK
testing toggling first output (1 --> 0)
...OK
testing toggling second output (0 --> 1)
...OK
testing toggling second output (1 --> 0)
...OK
testing setting first output and clearing second with write
...OK
testing setting second output and clearing first with write
...OK
All input/output operations worked as expected


TEST SUCCEEDED

make: Leaving directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'

STM32

make BOARD=nucleo-l011k4 -C tests/periph/gpio_ll flash test-with-config
make: Entering directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'
Building application "tests_gpio_ll" for "nucleo-l011k4" with MCU "stm32".

"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/pkg/cmsis/ 
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/common/init
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/nucleo-l011k4
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/common/nucleo
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/core
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/core/lib
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/stm32
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/cortexm_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/cortexm_common/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/stm32/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/stm32/stmclk
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/stm32/vectors
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/drivers
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/drivers/periph_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/auto_init
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/frac
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/isrpipe
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/libc
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/malloc_thread_safe
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/picolibc_syscalls_default
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/pm_layered
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/preprocessor
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/stdio_uart
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/test_utils/interactive_sync
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/test_utils/print_stack_usage
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/tsrb
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/ztimer
   text	  data	   bss	   dec	   hex	filename
  16272	   100	  1880	 18252	  474c	/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/nucleo-l011k4/tests_gpio_ll.elf
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/openocd/openocd.sh flash /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/nucleo-l011k4/tests_gpio_ll.elf
### Flashing Target ###
Open On-Chip Debugger 0.12.0+dev-snapshot (2023-06-12-09:31)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
DEPRECATED! use 'adapter serial' not 'hla_serial'
hla_swd
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
srst_only separate srst_nogate srst_open_drain connect_assert_srst
Info : clock speed 300 kHz
Info : STLINK V2J31M21 (API v2) VID:PID 0483:374B
Info : Target voltage: 3.257143
Info : [stm32l0.cpu] Cortex-M0+ r0p1 processor detected
Info : [stm32l0.cpu] target has 4 breakpoints, 2 watchpoints
Info : starting gdb server for stm32l0.cpu on 0
Info : Listening on port 34335 for gdb connections
    TargetName         Type       Endian TapName            State       
--  ------------------ ---------- ------ ------------------ ------------
 0* stm32l0.cpu        hla_target little stm32l0.cpu        unknown
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
[stm32l0.cpu] halted due to debug-request, current mode: Thread 
xPSR: 0xf1000000 pc: 0x080015dc msp: 0x20000200
Info : Device: STM32L0xx (Cat.1)
Info : STM32L flash size is 16kb, base address is 0x8000000
auto erase enabled
wrote 16384 bytes from file /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/nucleo-l011k4/tests_gpio_ll.elf in 3.815520s (4.193 KiB/s)
verified 16372 bytes in 0.732633s (21.823 KiB/s)
Info : Unable to match requested speed 300 kHz, using 240 kHz
Info : Unable to match requested speed 300 kHz, using 240 kHz
shutdown command invoked
Done flashing
r
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/pyterm/pyterm -p "/dev/ttyACM0" -b "115200" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Connect to serial port /dev/ttyACM0
Welcome to pyterm!
Type '/exit' to exit.
READY
s
START
main(): This is RIOT! (Version: 2024.01-devel-602-g3a69b-periph/gpio_ll/smaller_type)
  P0.8 (PA8) -- P1.5 (PB5)
  P0.11 (PA11) -- P1.4 (PB4)
Number of pull resistor values supported: 1
Number of drive strengths supported: 1
Number of slew rates supported: 3
Valid GPIO ports:
- PORT 0 (PORT A)
- PORT 1 (PORT B)
- PORT 2 (PORT C)
state: in, pull: up, value: on, slew: slow
state: in, pull: down, value: off, slew: slow
state: in, pull: none, value: off, slew: slow
state: out-pp, value: off, slew: slow
state: out-pp, value: on, slew: slow
state: out-pp, value: on, slew: slow
state: out-od, pull: none, value: off, slew: slow
state: out-od, pull: none, value: on, slew: slow
state: in, pull: down, value: off, slew: slow
state: in, pull: up, value: on, slew: slow


TEST SUCCEEDED

make: Leaving directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'

tl;dr

TEST SUCCEEDED

nRF5x

make BOARD=nrf52dk -C tests/periph/gpio_ll flash test-with-config
make: Entering directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'
Building application "tests_gpio_ll" for "nrf52dk" with MCU "nrf52".

"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/pkg/cmsis/ 
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/common/init
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/nrf52dk
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/boards/common/nrf52xxxdk
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/core
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/core/lib
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/nrf52
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/cortexm_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/cortexm_common/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/nrf52/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/nrf52/vectors
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/nrf5x_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/cpu/nrf5x_common/periph
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/drivers
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/drivers/periph_common
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/auto_init
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/div
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/frac
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/isrpipe
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/libc
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/malloc_thread_safe
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/newlib_syscalls_default
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/preprocessor
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/stdio_uart
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/test_utils/interactive_sync
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/test_utils/print_stack_usage
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/tsrb
"make" -C /home/maribu/Repos/software/RIOT/gpio_ll/sys/ztimer
   text	  data	   bss	   dec	   hex	filename
  19944	   168	  2692	 22804	  5914	/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/nrf52dk/tests_gpio_ll.elf
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/openocd/openocd.sh flash /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/nrf52dk/tests_gpio_ll.elf
### Flashing Target ###
Open On-Chip Debugger 0.12.0+dev-snapshot (2023-06-12-09:31)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
swd
Info : J-Link OB-SAM3U128-V2-NordicSemi compiled Mar 17 2020 14:43:00
Info : Hardware version: 1.00
Info : VTarget = 3.300 V
Info : clock speed 1000 kHz
Info : SWD DPIDR 0x2ba01477
Info : [nrf52.cpu] Cortex-M4 r0p1 processor detected
Info : [nrf52.cpu] target has 6 breakpoints, 4 watchpoints
Info : starting gdb server for nrf52.cpu on 0
Info : Listening on port 33009 for gdb connections
    TargetName         Type       Endian TapName            State       
--  ------------------ ---------- ------ ------------------ ------------
 0* nrf52.cpu          cortex_m   little nrf52.cpu          unknown
[nrf52.cpu] halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x00000b54 msp: 0x20000200
Info : nRF52832-QFAA(build code: B0) 512kB Flash, 64kB RAM
Warn : Adding extra erase range, 0x00004e90 .. 0x00004fff
auto erase enabled
wrote 20112 bytes from file /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/nrf52dk/tests_gpio_ll.elf in 0.513885s (38.220 KiB/s)
verified 20112 bytes in 0.082113s (239.190 KiB/s)
shutdown command invoked
Done flashing
r
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/pyterm/pyterm -p "/dev/ttyACM0" -b "115200" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Connect to serial port /dev/ttyACM0
Welcome to pyterm!
Type '/exit' to exit.
READY
s
START
main(): This is RIOT! (Version: 2024.01-devel-603-g41242-periph/gpio_ll/smaller_type)
Test / Hardware Details:
========================
Cabling:
(INPUT -- OUTPUT)
  P0.27 (PA27) -- P0.20 (PA20)
  P0.26 (PA26) -- P0.19 (PA19)
Number of pull resistor values supported: 1
Number of drive strengths supported: 2
Number of slew rates supported: 1
Valid GPIO ports:
- PORT 0 (PORT A)

Testing gpio_port_pack_addr()
=============================

All OK

Testing gpip_ng_init()
======================

Testing is_gpio_port_num_valid() is true for PORT_OUT and PORT_IN:

Testing input configurations for PIN_IN_0:
Support for input with pull up: yes
state: in, pull: up, value: on, drive: weak
Support for input with pull down: yes
state: in, pull: down, value: on, drive: weak
Support for input with pull to bus level: no
Support for floating input (no pull resistors): yes
state: in, pull: none, value: on, drive: weak

Testing output configurations for PIN_OUT_0:
Support for output (push-pull) with initial value of LOW: yes
state: out-pp, value: off, drive: weak
Output is indeed LOW: yes
state: out-pp, value: on, drive: weak
Output can be pushed HIGH: yes
Support for output (push-pull) with initial value of HIGH: yes
state: out-pp, value: on, drive: weak
Output is indeed HIGH: yes
Support for output (open drain with pull up) with initial value of LOW: yes
state: out-od, pull: up, value: off, drive: weak
Output is indeed LOW: yes
Support for output (open drain with pull up) with initial value of HIGH: yes
state: out-od, pull: up, value: on, drive: weak
Output is indeed HIGH: yes
Support for output (open drain) with initial value of LOW: yes
state: out-od, pull: none, value: off, drive: weak
Output is indeed LOW: yes
Support for output (open drain) with initial value of HIGH: yes
state: out-od, pull: none, value: on, drive: weak
state: in, pull: down, value: off, drive: weak
Output can indeed be pulled LOW: yes
state: in, pull: up, value: on, drive: weak
Output can indeed be pulled HIGH: yes
Support for output (open source) with initial value of LOW: yes
state: out-os, pull: none, value: off, drive: weak
state: in, pull: down, value: on, drive: weak
Output can indeed be pulled LOW: yes
state: in, pull: up, value: on, drive: weak
Output can indeed be pulled HIGH: yes
Support for output (open source) with initial value of HIGH: yes
state: out-os, pull: none, value: on, drive: weak
Output is indeed HIGH: yes
Support for output (open source with pull up) with initial value of HIGH: yes
Output is indeed HIGH: yes
Support for output (open source with pull up) with initial value of LOW: yes
Output is indeed LOW: yes
Support for disconnecting GPIO: yes
Output can indeed be pulled LOW: yes
Output can indeed be pulled HIGH: yes

Testing Reading/Writing GPIO Ports
==================================

testing initial value of 0 after init
...OK
testing setting both outputs_optional simultaneously
...OK
testing clearing both outputs_optional simultaneously
...OK
testing toggling first output (0 --> 1)
...OK
testing toggling first output (1 --> 0)
...OK
testing toggling second output (0 --> 1)
...OK
testing toggling second output (1 --> 0)
...OK
testing setting first output and clearing second with write
...OK
testing setting second output and clearing first with write
...OK
All input/output operations worked as expected

Testing External IRQs
=====================

Testing rising edge on PIN_IN_0
... OK
Testing falling edge on PIN_IN_0
... OK
Testing both edges on PIN_IN_0
... OK
Testing masking of IRQs (still both edges on PIN_IN_0)
... OK


TEST SUCCEEDED

make: Leaving directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'

tl;dr

TEST SUCCEEDED

ESP32

make BOARD=esp32-mh-et-live-minikit BUILD_IN_DOCKER=1 -C tests/periph/gpio_ll flash test-with-config
make: Entering directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'
Launching build container using image "docker.io/riot/riotbuild:latest".
podman run --rm --tty --userns keep-id -v '/etc/zoneinfo/Europe/Berlin:/etc/localtime:ro' -v '/home/maribu/Repos/software/RIOT/gpio_ll:/data/riotbuild/riotbase:delegated' -v '/home/maribu/.cargo/registry:/data/riotbuild/.cargo/registry:delegated' -v '/home/maribu/.cargo/git:/data/riotbuild/.cargo/git:delegated' -e 'RIOTBASE=/data/riotbuild/riotbase' -e 'CCACHE_BASEDIR=/data/riotbuild/riotbase' -v '/home/maribu/.cache/RIOT:/data/riotbuild/build:delegated' -e 'BUILD_DIR=/data/riotbuild/build' -e 'RIOTPROJECT=/data/riotbuild/riotbase' -e 'RIOTCPU=/data/riotbuild/riotbase/cpu' -e 'RIOTBOARD=/data/riotbuild/riotbase/boards' -e 'RIOTMAKE=/data/riotbuild/riotbase/makefiles'    -v '/home/maribu/Repos/software/boards/riot:/data/riotbuild/external/riot:delegated' -v '/home/maribu/Repos/software/miot-pcbs/RIOT/boards:/data/riotbuild/external/boards:delegated' -v '/home/maribu/Repos/software/RIOT/master/.git:/home/maribu/Repos/software/RIOT/master/.git:delegated' -e 'BOARD=esp32-mh-et-live-minikit' -e 'DISABLE_MODULE=' -e 'DEFAULT_MODULE=test_utils_interactive_sync test_utils_print_stack_usage' -e 'FEATURES_REQUIRED=periph_gpio_ll' -e 'FEATURES_BLACKLIST=' -e 'FEATURES_OPTIONAL=periph_gpio_ll_irq periph_gpio_ll_irq_level_triggered_high periph_gpio_ll_irq_level_triggered_low' -e 'USEMODULE=ztimer_usec' -e 'USEPKG='  -w '/data/riotbuild/riotbase/tests/periph/gpio_ll/' 'docker.io/riot/riotbuild:latest' make 'BOARD=esp32-mh-et-live-minikit'  'EXTERNAL_BOARD_DIRS=/data/riotbuild/external/riot /data/riotbuild/external/boards'  
Building application "tests_gpio_ll" for "esp32-mh-et-live-minikit" with MCU "esp32".

"make" -C /data/riotbuild/riotbase/pkg/esp32_sdk/ 
"make" -C /data/riotbuild/riotbase/boards/common/init
"make" -C /data/riotbuild/riotbase/boards/esp32-mh-et-live-minikit
"make" -C /data/riotbuild/riotbase/boards/common/esp32
"make" -C /data/riotbuild/riotbase/boards/common/esp32x
"make" -C /data/riotbuild/riotbase/core
"make" -C /data/riotbuild/riotbase/core/lib
"make" -C /data/riotbuild/riotbase/cpu/esp32
"make" -C /data/riotbuild/riotbase/cpu/esp32/bootloader
esptool.py v3.2-dev
Merged 1 ELF section
"make" -C /data/riotbuild/riotbase/cpu/esp32/esp-idf
"make" -C /data/riotbuild/riotbase/cpu/esp32/esp-idf/common
"make" -C /data/riotbuild/riotbase/cpu/esp32/esp-idf/efuse
"make" -C /data/riotbuild/riotbase/cpu/esp32/esp-idf/gpio
"make" -C /data/riotbuild/riotbase/cpu/esp32/esp-idf-api
"make" -C /data/riotbuild/riotbase/cpu/esp32/freertos
"make" -C /data/riotbuild/riotbase/cpu/esp32/periph
"make" -C /data/riotbuild/riotbase/cpu/esp_common
"make" -C /data/riotbuild/riotbase/cpu/esp_common/esp-xtensa
"make" -C /data/riotbuild/riotbase/cpu/esp_common/freertos
"make" -C /data/riotbuild/riotbase/cpu/esp_common/periph
"make" -C /data/riotbuild/riotbase/cpu/esp_common/vendor
"make" -C /data/riotbuild/riotbase/cpu/esp_common/vendor/xtensa
"make" -C /data/riotbuild/riotbase/drivers
"make" -C /data/riotbuild/riotbase/drivers/periph_common
"make" -C /data/riotbuild/riotbase/sys
"make" -C /data/riotbuild/riotbase/sys/auto_init
"make" -C /data/riotbuild/riotbase/sys/div
"make" -C /data/riotbuild/riotbase/sys/frac
"make" -C /data/riotbuild/riotbase/sys/isrpipe
"make" -C /data/riotbuild/riotbase/sys/libc
"make" -C /data/riotbuild/riotbase/sys/luid
"make" -C /data/riotbuild/riotbase/sys/newlib_syscalls_default
"make" -C /data/riotbuild/riotbase/sys/pm_layered
"make" -C /data/riotbuild/riotbase/sys/preprocessor
"make" -C /data/riotbuild/riotbase/sys/random
"make" -C /data/riotbuild/riotbase/sys/stdio_uart
"make" -C /data/riotbuild/riotbase/sys/test_utils/interactive_sync
"make" -C /data/riotbuild/riotbase/sys/test_utils/print_stack_usage
"make" -C /data/riotbuild/riotbase/sys/tsrb
"make" -C /data/riotbuild/riotbase/sys/ztimer
/opt/esp/xtensa-esp32-elf/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld: warning: /data/riotbuild/riotbase/tests/periph/gpio_ll/bin/esp32-mh-et-live-minikit/tests_gpio_ll.elf has a LOAD segment with RWX permissions
esptool.py v3.2-dev
Merged 1 ELF section
Parsing CSV input...
   text	  data	   bss	   dec	   hex	filename
  69429	 14484	  6774	 90687	 1623f	/data/riotbuild/riotbase/tests/periph/gpio_ll/bin/esp32-mh-et-live-minikit/tests_gpio_ll.elf
esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 --before default_reset write_flash -z --flash_mode dout --flash_freq 40m --flash_size detect 0x1000 /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/esp32-mh-et-live-minikit/esp_bootloader/bootloader.bin 0x8000 /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/esp32-mh-et-live-minikit/partitions.bin 0x10000 /home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll/bin/esp32-mh-et-live-minikit/tests_gpio_ll.elf.bin
esptool.py v4.7.0
Serial port /dev/ttyUSB0
Connecting....
Chip is ESP32-D0WDQ6 (revision v1.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: a4:cf:12:44:e8:14
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Flash will be erased from 0x00001000 to 0x00005fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x00010000 to 0x0002bfff...
Warning: Image file at 0x1000 is protected with a hash checksum, so not changing the flash size setting. Use the --flash_size=keep option instead of --flash_size=4MB in order to remove this warning, or use the --dont-append-digest option for the elf2image command in order to generate an image file without a hash checksum
Compressed 17488 bytes to 11680...
Wrote 17488 bytes (11680 compressed) at 0x00001000 in 0.5 seconds (effective 275.4 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 85...
Wrote 3072 bytes (85 compressed) at 0x00008000 in 0.0 seconds (effective 537.6 kbit/s)...
Hash of data verified.
Compressed 113424 bytes to 52892...
Wrote 113424 bytes (52892 compressed) at 0x00010000 in 1.6 seconds (effective 563.9 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...
r
/home/maribu/Repos/software/RIOT/gpio_ll/dist/tools/pyterm/pyterm -p "/dev/ttyUSB0" -b "115200" --no-reconnect --noprefix --no-repeat-command-on-empty-line 
Connect to serial port /dev/ttyUSB0
Welcome to pyterm!
Type '/exit' to exit.
READY
s
START
main(): This is RIOT! (Version: 2024.01-devel-603-g41242-periph/gpio_ll/smaller_type)
Test / Hardware Details:
========================
Cabling:
(INPUT -- OUTPUT)
  P0.18 (PA18) -- P0.21 (PA21)
  P0.19 (PA19) -- P0.22 (PA22)
Number of pull resistor values supported: 1
Number of drive strengths supported: 4
Number of slew rates supported: 1
Valid GPIO ports:
- PORT 0 (PORT A)
- PORT 1 (PORT B)

Testing gpio_port_pack_addr()
=============================

All OK

Testing gpip_ng_init()
======================

Testing is_gpio_port_num_valid() is true for PORT_OUT and PORT_IN:

Testing input configurations for PIN_IN_0:
Support for input with pull up: yes
state: in, pull: up, value: on, drive: weakest
Support for input with pull down: yes
state: in, pull: down, value: off, drive: weakest
Support for input with pull to bus level: no
Support for floating input (no pull resistors): yes
state: in, pull: none, value: off, drive: weakest

Testing output configurations for PIN_OUT_0:
Support for output (push-pull) with initial value of LOW: yes
state: out-pp, value: off, drive: weakest
Output is indeed LOW: yes
state: out-pp, value: on, drive: weakest
Output can be pushed HIGH: yes
Support for output (push-pull) with initial value of HIGH: yes
state: out-pp, value: on, drive: weakest
Output is indeed HIGH: yes
Support for output (open drain with pull up) with initial value of LOW: yes
state: out-od, pull: up, value: off, drive: weakest
Output is indeed LOW: yes
Support for output (open drain with pull up) with initial value of HIGH: yes
state: out-od, pull: up, value: on, drive: weakest
Output is indeed HIGH: yes
Support for output (open drain) with initial value of LOW: yes
state: out-od, pull: none, value: off, drive: weakest
Output is indeed LOW: yes
Support for output (open drain) with initial value of HIGH: yes
state: out-od, pull: none, value: on, drive: weakest
state: in, pull: down, value: off, drive: weakest
Output can indeed be pulled LOW: yes
state: in, pull: up, value: on, drive: weakest
Output can indeed be pulled HIGH: yes
Support for output (open source) with initial value of LOW: no
Support for output (open source) with initial value of HIGH: no
Support for output (open source with pull up) with initial value of HIGH: no
Support for output (open source with pull up) with initial value of LOW: no
Support for disconnecting GPIO: yes
Output can indeed be pulled LOW: yes
Output can indeed be pulled HIGH: yes

Testing Reading/Writing GPIO Ports
==================================

testing initial value of 0 after init
...OK
testing setting both outputs_optional simultaneously
...OK
testing clearing both outputs_optional simultaneously
...OK
testing toggling first output (0 --> 1)
...OK
testing toggling first output (1 --> 0)
...OK
testing toggling second output (0 --> 1)
...OK
testing toggling second output (1 --> 0)
...OK
testing setting first output and clearing second with write
...OK
testing setting second output and clearing first with write
...OK
All input/output operations worked as expected

Testing External IRQs
=====================

Testing rising edge on PIN_IN_0
... OK
Testing falling edge on PIN_IN_0
... OK
Testing both edges on PIN_IN_0
... OK
Testing masking of IRQs (still both edges on PIN_IN_0)
... OK
Testing level-triggered on HIGH on PIN_IN_0 (when input is LOW when setting up IRQ)
... OK
Testing level-triggered on HIGH on PIN_IN_0 (when input is HIGH when setting up IRQ)
... OK
Testing level-triggered on LOW on PIN_IN_0 (when input is HIGH when setting up IRQ)
... OK
Testing level-triggered on LOW on PIN_IN_0 (when input is LOW when setting up IRQ)
... OK


TEST SUCCEEDED

make: Leaving directory '/home/maribu/Repos/software/RIOT/gpio_ll/tests/periph/gpio_ll'

tl;dr

TEST SUCCEEDED

AVR

Exceeds memory (already in master and with Docker), cannot test. Something unrelated is broken here.

@maribu maribu added this pull request to the merge queue Jan 16, 2024
@benpicco benpicco enabled auto-merge January 19, 2024 15:21
@maribu maribu added CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR and removed CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR labels Jan 20, 2024
@maribu
Copy link
Member Author
maribu commented Jan 20, 2024

@benpicco Is the ACK still valid?

The change since ACK boils down to passing the conf no longer as const gpio_conf_t *condig but as gpio_conf_t, which in the case of the otherwise unchanged GPIO LL benchmark resulted in a small but noticeable ROM saving.

@maribu maribu force-pushed the periph/gpio_ll/smaller_type branch from 4dc9960 to 69ffb62 Compare January 20, 2024 19:27
@benpicco benpicco added this pull request to the merge queue Jan 20, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 20, 2024
@maribu maribu force-pushed the periph/gpio_ll/smaller_type branch from 69ffb62 to 7d08c3c Compare January 20, 2024 20:37
@maribu maribu enabled auto-merge January 20, 2024 20:37
@maribu maribu added this pull request to the merge queue Jan 20, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 20, 2024
@maribu maribu force-pushed the periph/gpio_ll/smaller_type branch from 7d08c3c to bd4e920 Compare January 20, 2024 22:01
@maribu maribu enabled auto-merge January 20, 2024 22:02
@maribu maribu added this pull request to the merge queue Jan 20, 2024
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Jan 20, 2024
maribu and others added 4 commits January 21, 2024 08:38
This commit optimizes the `gpio_conf_t` type in the following
regards:

- The "base" `gpio_conf_t` is stripped from members that only some
  platforms support, e.g. drive strength, slew rate, and disabling of
  the Schmitt Trigger are no longer universally available but
  platform-specific extensions
- The `gpio_conf_t` is now crammed into a bit-field that is 8 bit or
  16 bit wide. This allows for storing lots of them e.g. in
  `driver_foo_params_t` or `uart_conf_t` etc.
- A `union` of the `struct` with bit-field members and a `bits` is used
  to allow accessing all bits in a simple C statement and to ensure
  alignment for efficient handling of the type

Co-authored-by: Gunar Schorcht <gunar@schorcht.net>
Printing the newline after the state was printed is not optional.

This also moves the call to `gpio_ll_print_conf()` and `puts("")` to
a static function to safe enough ROM so that this still can be flashed
on `nucleo-l011k4`.
The default pin config is only a place holder anyway. But if it is
invalid at least on AVR most of the firmware is considered unreachable.
This updates the default GPIO config to something that should look
plausible to the compiler for all MCUs supporting GPIO LL, so that
ROM and RAM size in the CI start making sense.
@maribu maribu force-pushed the periph/gpio_ll/smaller_type branch from bd4e920 to 04d537c Compare January 21, 2024 07:39
@maribu maribu enabled auto-merge January 21, 2024 07:39
Now that `gpio_conf_t` is on all implemented platforms no larger than
a register, we can more efficiently pass it by value rather than via
pointer.
@maribu maribu force-pushed the periph/gpio_ll/smaller_type branch from 04d537c to 9222762 Compare January 21, 2024 08:19
@maribu maribu added this pull request to the merge queue Jan 21, 2024
Merged via the queue into RIOT-OS:master with commit 3d1f651 Jan 21, 2024
@maribu
Copy link
Member Author
maribu commented Jan 21, 2024

Woohooo! 👯 🎉

Thx for the reviews :)

@maribu maribu deleted the periph/gpio_ll/smaller_type branch January 21, 2024 11:23
@MrKevinWeiss MrKevinWeiss added this to the Release 2024.01 milestone Feb 7, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: cpu Area: CPU/MCU ports Area: drivers Area: Device drivers Area: tests Area: tests and testing framework CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR Platform: ARM Platform: This PR/issue effects ARM-based platforms Platform: AVR Platform: This PR/issue effects AVR-based platforms Platform: ESP Platform: This PR/issue effects ESP-based platforms Process: API change Integration Process: PR contains or issue proposes an API change. Should be handled with care.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants
0