From 2665bf9636f602bc6fb2bf3c7a35b55c794ba6be Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Wed, 14 Jan 2026 15:44:41 -0800 Subject: [PATCH 1/3] Use Python finalizers everywhere Remove the never_reset concept and replace it with Python finalizers to enable automatic hardware cleanup through garbage collection. Key changes: - Add finalizers to digitalio.DigitalInOut, keypad objects, and rp2pio.StateMachine - Restructure cleanup flow in main.c to run GC finalization - Remove all never_reset tracking (pin bitmasks, device flags, object flags) - Remove bulk reset functions (reset_uart, reset_rp2pio_statemachine) - Simplify reset_port() to only port-wide cleanup - Remove never_reset declarations from shared-bindings headers - Remove never_reset calls from shared-module display drivers Objects now use mp_obj_malloc_with_finaliser() and have __del__ methods that call deinit(). Hardware resources are automatically freed when objects are garbage collected or explicitly deinit only. Fixes #8960 --- main.c | 19 ++-- ports/analog/common-hal/busio/I2C.c | 6 -- ports/analog/common-hal/busio/SPI.c | 8 -- ports/analog/common-hal/busio/UART.c | 10 -- .../common-hal/digitalio/DigitalInOut.c | 5 - ports/analog/common-hal/microcontroller/Pin.c | 23 ----- ports/analog/common-hal/microcontroller/Pin.h | 1 - ports/analog/supervisor/usb.c | 1 - .../boards/aloriumtech_evo_m51/board.c | 1 - .../boards/hallowing_m0_express/board.c | 1 - .../boards/hallowing_m4_express/board.c | 1 - ports/atmel-samd/boards/monster_m4sk/board.c | 1 - ports/atmel-samd/boards/openbook_m4/board.c | 1 - ports/atmel-samd/boards/pewpew_lcd/board.c | 1 - ports/atmel-samd/boards/pewpew_m4/board.c | 1 - ports/atmel-samd/boards/pybadge/board.c | 1 - ports/atmel-samd/boards/pycubed/board.c | 1 - ports/atmel-samd/boards/pycubed_mram/board.c | 1 - .../boards/pycubed_mram_v05/board.c | 1 - ports/atmel-samd/boards/pycubed_v05/board.c | 1 - ports/atmel-samd/boards/pygamer/board.c | 1 - .../boards/seeeduino_wio_terminal/board.c | 4 - .../boards/sparkfun_samd51_micromod/board.c | 2 - ports/atmel-samd/boards/uchip/board.c | 4 - .../usermods/_bhb/bhb.c | 1 - ports/atmel-samd/common-hal/busio/I2C.c | 9 -- ports/atmel-samd/common-hal/busio/SPI.c | 8 -- ports/atmel-samd/common-hal/busio/UART.c | 16 --- ports/atmel-samd/common-hal/busio/__init__.c | 35 ------- ports/atmel-samd/common-hal/busio/__init__.h | 4 - ports/atmel-samd/common-hal/canio/CAN.c | 2 - .../common-hal/digitalio/DigitalInOut.c | 4 - .../common-hal/microcontroller/Pin.c | 61 ------------ .../common-hal/microcontroller/Pin.h | 2 - .../paralleldisplaybus/ParallelBus.c | 6 -- ports/atmel-samd/common-hal/pwmio/PWMOut.c | 3 - ports/atmel-samd/common-hal/sdioio/SDCard.c | 2 - ports/atmel-samd/supervisor/port.c | 3 - ports/atmel-samd/supervisor/qspi_flash.c | 1 - ports/broadcom/common-hal/busio/I2C.c | 16 +-- ports/broadcom/common-hal/busio/SPI.c | 6 -- ports/broadcom/common-hal/busio/UART.c | 17 +--- .../common-hal/digitalio/DigitalInOut.c | 5 - .../broadcom/common-hal/microcontroller/Pin.c | 21 ---- .../broadcom/common-hal/microcontroller/Pin.h | 2 - ports/broadcom/common-hal/sdioio/SDCard.c | 8 -- ports/broadcom/supervisor/internal_flash.c | 1 - ports/cxd56/common-hal/busio/I2C.c | 5 - ports/cxd56/common-hal/busio/SPI.c | 6 -- .../cxd56/common-hal/digitalio/DigitalInOut.c | 4 - ports/cxd56/common-hal/microcontroller/Pin.c | 86 +++++++--------- ports/cxd56/common-hal/microcontroller/Pin.h | 2 - ports/cxd56/common-hal/pwmio/PWMOut.c | 17 +--- ports/cxd56/common-hal/sdioio/SDCard.c | 8 -- .../boards/01space_lcd042_esp32c3/board.c | 1 - .../boards/adafruit_funhouse/board.c | 1 - .../adafruit_magtag_2.9_grayscale/board.c | 1 - ports/espressif/boards/artisense_rd00/board.c | 2 - .../espressif/boards/deshipu_ugame_s3/board.c | 1 - .../boards/elecrow_crowpanel_3.5/board.c | 1 - .../elecrow_crowpanel_4_2_epaper/board.c | 2 - ports/espressif/boards/es3ink/board.c | 2 - .../boards/espressif_esp32s3_box/board.c | 1 - .../boards/espressif_esp32s3_box_lite/board.c | 1 - .../board.c | 1 - .../espressif_esp32s3_usb_otg_n8/board.c | 1 - .../boards/espressif_hmi_devkit_1/board.c | 2 - .../boards/hardkernel_odroid_go/board.c | 1 - .../heltec_esp32s3_wifi_lora_v3/board.c | 1 - .../boards/heltec_vision_master_e290/board.c | 2 - .../boards/heltec_wireless_paper/board.c | 2 - ports/espressif/boards/hiibot_iots2/board.c | 1 - .../boards/lilygo_tdongle_s3/board.c | 1 - .../boards/lilygo_tembed_esp32s3/board.c | 1 - .../boards/lilygo_ttgo_t8_s2_st7789/board.c | 1 - .../lilygo_ttgo_tdisplay_esp32_16m/board.c | 1 - .../lilygo_ttgo_tdisplay_esp32_4m/board.c | 1 - .../boards/lilygo_twatch_2020_v3/board.c | 1 - .../boards/lolin_s3_mini_pro/board.c | 1 - ports/espressif/boards/m5stack_atoms3/board.c | 1 - ports/espressif/boards/m5stack_cores3/board.c | 1 - .../boards/m5stack_cores3_se/board.c | 1 - .../espressif/boards/m5stack_m5paper/board.c | 1 - .../espressif/boards/m5stack_stick_c/board.c | 1 - .../boards/m5stack_stick_c_plus/board.c | 1 - .../boards/m5stack_stick_c_plus2/board.c | 1 - .../boards/morpheans_morphesp-240/board.c | 1 - .../espressif/boards/oxocard_artwork/board.c | 1 - .../espressif/boards/oxocard_connect/board.c | 1 - ports/espressif/boards/oxocard_galaxy/board.c | 1 - .../espressif/boards/oxocard_science/board.c | 1 - .../boards/spotpear_esp32c3_lcd_1_44/board.c | 1 - .../boards/spotpear_esp32c3_lcd_1_69/board.c | 1 - ports/espressif/boards/sqfmi_watchy/board.c | 3 - .../boards/sunton_esp32_2424S012/board.c | 1 - .../boards/sunton_esp32_2432S024C/board.c | 1 - .../boards/sunton_esp32_2432S028/board.c | 1 - .../boards/sunton_esp32_8048S050/board.c | 1 - .../boards/sunton_esp32_8048S070/board.c | 1 - .../boards/targett_module_clip_wroom/board.c | 2 - .../boards/targett_module_clip_wrover/board.c | 2 - ports/espressif/boards/vidi_x/board.c | 1 - .../waveshare_esp32_s2_pico_lcd/board.c | 1 - .../waveshare_esp32_s3_amoled_241/board.c | 1 - .../waveshare_esp32_s3_lcd_1_28/board.c | 1 - ports/espressif/boards/xteink_x4/board.c | 1 - ports/espressif/boards/yoto_mini_2024/board.c | 1 - ports/espressif/boards/yoto_player_v3/board.c | 1 - .../espressif/common-hal/alarm/pin/PinAlarm.c | 1 - .../common-hal/alarm/touch/TouchAlarm.c | 6 +- ports/espressif/common-hal/busio/I2C.c | 4 - ports/espressif/common-hal/busio/SPI.c | 9 -- ports/espressif/common-hal/busio/UART.c | 21 ---- ports/espressif/common-hal/busio/UART.h | 2 - .../common-hal/digitalio/DigitalInOut.c | 4 - .../dotclockframebuffer/DotClockFramebuffer.c | 1 - ports/espressif/common-hal/espulp/ULP.c | 1 - .../common-hal/microcontroller/Pin.c | 60 ------------ .../common-hal/microcontroller/Pin.h | 6 -- ports/espressif/common-hal/mipidsi/Display.c | 3 - .../paralleldisplaybus/ParallelBus.c | 9 -- ports/espressif/common-hal/pwmio/PWMOut.c | 3 - ports/espressif/common-hal/sdioio/SDCard.c | 34 ------- ports/espressif/common-hal/sdioio/SDCard.h | 2 - ports/espressif/module/cardputer_keyboard.c | 1 - ports/espressif/peripherals/touch.c | 7 +- ports/espressif/peripherals/touch.h | 1 - ports/espressif/supervisor/port.c | 96 ------------------ .../litex/common-hal/digitalio/DigitalInOut.c | 5 - ports/litex/common-hal/microcontroller/Pin.c | 3 - ports/litex/common-hal/microcontroller/Pin.h | 2 - ports/mimxrt10xx/common-hal/busio/I2C.c | 5 - ports/mimxrt10xx/common-hal/busio/SPI.c | 10 -- ports/mimxrt10xx/common-hal/busio/UART.c | 11 --- .../common-hal/digitalio/DigitalInOut.c | 5 - .../common-hal/microcontroller/Pin.c | 22 ----- .../common-hal/microcontroller/Pin.h | 1 - ports/mimxrt10xx/common-hal/pwmio/PWMOut.c | 4 - ports/mimxrt10xx/supervisor/port.c | 2 +- ports/nordic/boards/bluemicro833/board.c | 2 - .../boards/clue_nrf52840_express/board.c | 1 - .../nordic/boards/espruino_banglejs2/board.c | 3 - ports/nordic/boards/hiibot_bluefi/board.c | 1 - .../boards/makerdiary_m60_keyboard/board.c | 3 - .../makerdiary_nrf52840_m2_devkit/board.c | 1 - ports/nordic/boards/ohs2020_badge/board.c | 1 - .../boards/teenage_engineering_sp1/board.c | 11 +-- ports/nordic/common-hal/busio/I2C.c | 6 -- ports/nordic/common-hal/busio/SPI.c | 11 --- ports/nordic/common-hal/busio/UART.c | 33 ------- .../common-hal/digitalio/DigitalInOut.c | 5 - ports/nordic/common-hal/emmcio/EMMC.c | 10 +- ports/nordic/common-hal/microcontroller/Pin.c | 33 ------- ports/nordic/common-hal/microcontroller/Pin.h | 2 - .../paralleldisplaybus/ParallelBus.c | 9 -- ports/nordic/common-hal/pwmio/PWMOut.c | 10 -- ports/nordic/common-hal/rgbmatrix/RGBMatrix.c | 1 - ports/nordic/peripherals/nrf/timers.c | 15 --- ports/nordic/peripherals/nrf/timers.h | 2 - ports/nordic/supervisor/port.c | 4 - .../bindings/rp2pio/StateMachine.c | 1 + .../bindings/rp2pio/StateMachine.h | 1 - .../boards/adafruit_macropad_rp2040/board.c | 1 - .../bradanlanestudio_explorer_rp2040/board.c | 1 - .../boards/heiafr_picomo_v2/board.c | 1 - .../boards/heiafr_picomo_v3/board.c | 1 - .../boards/lilygo_t_display_rp2040/board.c | 3 - .../boards/pajenicko_picopad/board.c | 1 - .../boards/pimoroni_badger2040/board.c | 2 - .../boards/pimoroni_badger2040w/board.c | 2 - .../boards/pimoroni_badger2350/board.c | 2 - .../boards/pimoroni_inky_frame_5_7/board.c | 1 - .../boards/pimoroni_inky_frame_7_3/board.c | 1 - .../boards/pimoroni_picosystem/board.c | 1 - .../boards/teenage_engineering_ep2350/board.c | 6 +- .../boards/tinycircuits_thumby_color/board.c | 2 - ports/raspberrypi/boards/ugame22/board.c | 1 - .../boards/waveshare_rp2040_lcd_0_96/board.c | 1 - .../boards/waveshare_rp2350_lcd_0_96/board.c | 1 - .../common-hal/alarm/pin/PinAlarm.c | 1 - ports/raspberrypi/common-hal/busio/I2C.c | 4 - ports/raspberrypi/common-hal/busio/SPI.c | 5 - ports/raspberrypi/common-hal/busio/UART.c | 25 ----- ports/raspberrypi/common-hal/busio/UART.h | 1 - .../common-hal/digitalio/DigitalInOut.c | 5 - .../common-hal/microcontroller/Pin.c | 31 ------ .../common-hal/microcontroller/Pin.h | 2 - .../paralleldisplaybus/ParallelBus.c | 7 -- .../common-hal/picodvi/Framebuffer_RP2040.c | 10 -- .../common-hal/picodvi/Framebuffer_RP2350.c | 1 - ports/raspberrypi/common-hal/pwmio/PWMOut.c | 5 - .../common-hal/rp2pio/StateMachine.c | 34 ------- .../common-hal/rp2pio/StateMachine.h | 3 +- .../raspberrypi/common-hal/rp2pio/pio_alloc.h | 6 -- ports/raspberrypi/common-hal/sdioio/SDCard.c | 69 ------------- ports/raspberrypi/common-hal/sdioio/SDCard.h | 5 - .../sdfat_pio/SdCard/PioSdio/PioSdioCard.cpp | 18 +--- .../sdfat_pio/SdCard/PioSdio/PioSdioCard.h | 4 - .../common-hal/sdioio/sdfat_pio/shim.cpp | 4 - .../common-hal/sdioio/sdfat_pio/shim.h | 4 - ports/raspberrypi/common-hal/usb_host/Port.c | 6 -- ports/raspberrypi/supervisor/port.c | 20 ---- ports/renode/common-hal/busio/I2C.c | 3 - ports/renode/common-hal/busio/SPI.c | 3 - ports/renode/common-hal/busio/UART.c | 3 - ports/renode/common-hal/microcontroller/Pin.c | 10 -- ports/renode/common-hal/microcontroller/Pin.h | 2 - ports/silabs/common-hal/busio/I2C.c | 6 -- ports/silabs/common-hal/busio/SPI.c | 7 -- ports/silabs/common-hal/busio/UART.c | 11 +-- .../common-hal/digitalio/DigitalInOut.c | 6 -- ports/silabs/common-hal/microcontroller/Pin.c | 34 ------- ports/silabs/common-hal/microcontroller/Pin.h | 1 - ports/silabs/common-hal/pwmio/PWMOut.c | 9 -- ports/silabs/supervisor/serial.c | 4 +- ports/stm/boards/blues_cygnet/board.c | 2 - ports/stm/boards/meowbit_v121/board.c | 1 - ports/stm/boards/stm32f746g_discovery/board.c | 1 - ports/stm/boards/swan_r5/board.c | 2 - ports/stm/common-hal/alarm/pin/PinAlarm.c | 1 - ports/stm/common-hal/audioio/AudioOut.c | 3 +- ports/stm/common-hal/busio/I2C.c | 4 - ports/stm/common-hal/busio/SPI.c | 10 -- ports/stm/common-hal/busio/UART.c | 97 ------------------- ports/stm/common-hal/busio/UART.h | 1 - ports/stm/common-hal/digitalio/DigitalInOut.c | 4 - ports/stm/common-hal/microcontroller/Pin.c | 24 ----- ports/stm/common-hal/microcontroller/Pin.h | 2 - ports/stm/common-hal/pwmio/PWMOut.c | 3 - ports/stm/common-hal/rgbmatrix/RGBMatrix.c | 1 - ports/stm/common-hal/sdioio/SDCard.c | 33 ------- ports/stm/common-hal/sdioio/SDCard.h | 1 - ports/stm/peripherals/exti.c | 14 +-- ports/stm/peripherals/exti.h | 1 - ports/stm/peripherals/sdram.c | 1 - .../peripherals/stm32f4/stm32f401xe/gpio.c | 4 - .../peripherals/stm32f4/stm32f405xx/gpio.c | 10 -- .../peripherals/stm32f4/stm32f407xx/gpio.c | 10 -- .../peripherals/stm32f4/stm32f411xe/gpio.c | 6 -- .../peripherals/stm32f4/stm32f412cx/gpio.c | 2 - .../peripherals/stm32f4/stm32f412zx/gpio.c | 10 -- .../peripherals/stm32f4/stm32f446xx/gpio.c | 5 - .../peripherals/stm32f7/stm32f746xx/gpio.c | 6 -- .../peripherals/stm32f7/stm32f767xx/gpio.c | 4 - .../peripherals/stm32h7/stm32h743xx/gpio.c | 4 - .../peripherals/stm32h7/stm32h750xx/gpio.c | 10 -- .../peripherals/stm32l4/stm32l433xx/gpio.c | 4 - .../peripherals/stm32l4/stm32l4r5xx/gpio.c | 9 -- ports/stm/peripherals/timers.c | 17 ---- ports/stm/peripherals/timers.h | 3 - ports/stm/supervisor/port.c | 4 - ports/stm/supervisor/usb.c | 5 - ports/zephyr-cp/common-hal/busio/I2C.c | 4 - ports/zephyr-cp/common-hal/busio/SPI.c | 4 - ports/zephyr-cp/common-hal/busio/UART.c | 4 - .../common-hal/digitalio/DigitalInOut.c | 4 - .../common-hal/microcontroller/Pin.c | 27 ------ .../common-hal/microcontroller/Pin.h | 1 - shared-bindings/busio/I2C.h | 1 - shared-bindings/busio/SPI.h | 1 - shared-bindings/busio/UART.h | 1 - shared-bindings/digitalio/DigitalInOut.c | 3 +- shared-bindings/digitalio/DigitalInOut.h | 1 - shared-bindings/keypad/KeyMatrix.c | 3 +- shared-bindings/keypad/Keys.c | 3 +- shared-bindings/keypad/ShiftRegisterKeys.c | 3 +- shared-bindings/keypad_demux/DemuxKeyMatrix.c | 3 +- shared-bindings/microcontroller/Pin.h | 1 - shared-bindings/pwmio/PWMOut.h | 2 - shared-bindings/rgbmatrix/RGBMatrix.c | 19 ++-- shared-bindings/sdioio/SDCard.c | 3 +- shared-bindings/sdioio/SDCard.h | 1 - .../aurora_epaper/aurora_framebuffer.c | 6 -- shared-module/busdisplay/BusDisplay.c | 3 - shared-module/epaperdisplay/EPaperDisplay.c | 1 - shared-module/fourwire/FourWire.c | 4 - shared-module/i2cdisplaybus/I2CDisplayBus.c | 4 - shared-module/is31fl3741/FrameBuffer.c | 1 - shared-module/keypad/__init__.c | 9 +- shared-module/keypad/__init__.h | 4 +- shared-module/keypad_demux/DemuxKeyMatrix.c | 9 -- shared-module/keypad_demux/DemuxKeyMatrix.h | 1 - shared-module/sdcardio/__init__.c | 5 - .../sharpdisplay/SharpMemoryFramebuffer.c | 2 - supervisor/shared/external_flash/spi_flash.c | 2 - supervisor/shared/serial.c | 1 - supervisor/shared/status_leds.c | 2 - 287 files changed, 91 insertions(+), 1796 deletions(-) diff --git a/main.c b/main.c index 8b1ebd4b9fe..a430192fe66 100644 --- a/main.c +++ b/main.c @@ -410,22 +410,20 @@ static void cleanup_after_vm(mp_obj_t exception) { wifi_user_reset(); #endif - // reset_board_buses() first because it may release pins from the never_reset state, so that - // reset_port() can reset them. + // reset_board_buses() first to preserve display buses and deinit others. #if CIRCUITPY_BOARD reset_board_buses(); #endif - reset_port(); - reset_board(); - // Free the heap last because other modules may reference heap memory and need to shut down. + // Flush before GC might free file objects. filesystem_flush(); - // Runs finalisers while shutting down the heap. + // Runs finalisers while shutting down the heap. Finalizers call deinit on all user objects. stop_mp(); - // Don't reset pins until finalisers have run. - reset_all_pins(); + // Port-wide cleanup after finalizers have run. + reset_port(); + reset_board(); // Let the workflows know we've reset in case they want to restart. supervisor_workflow_reset(); @@ -804,8 +802,6 @@ static bool __attribute__((noinline)) run_code_py(safe_mode_t safe_mode, bool *s #if CIRCUITPY_ALARM_PRESERVE_DIOS common_hal_alarm_clear_pin_preservations(); #endif - // Reset pins, as if there was a hard reset. - reset_all_pins(); // Pretend that the next run is the first run, as if we were reset. *simulate_reset = true; } @@ -1020,9 +1016,6 @@ int __attribute__((used)) main(void) { // initialise the cpu and peripherals set_safe_mode(port_init()); - // All ports need pins reset, after never-reset pins are marked in port_init(); - reset_all_pins(); - port_heap_init(); diff --git a/ports/analog/common-hal/busio/I2C.c b/ports/analog/common-hal/busio/I2C.c index 7ebe721b3f4..2e9a43dacb6 100644 --- a/ports/analog/common-hal/busio/I2C.c +++ b/ports/analog/common-hal/busio/I2C.c @@ -96,12 +96,6 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, return; } -// Never reset I2C obj when reload -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - common_hal_never_reset_pin(self->sda); - common_hal_never_reset_pin(self->scl); -} - // Check I2C status, deinited or not bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) { return self->sda == NULL; diff --git a/ports/analog/common-hal/busio/SPI.c b/ports/analog/common-hal/busio/SPI.c index bdbe6da9d94..e74df040f48 100644 --- a/ports/analog/common-hal/busio/SPI.c +++ b/ports/analog/common-hal/busio/SPI.c @@ -114,14 +114,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, return; } -// Never reset SPI when reload -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - common_hal_never_reset_pin(self->mosi); - common_hal_never_reset_pin(self->miso); - common_hal_never_reset_pin(self->sck); - common_hal_never_reset_pin(self->nss); -} - // Check SPI status, deinited or not bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->sck == NULL; diff --git a/ports/analog/common-hal/busio/UART.c b/ports/analog/common-hal/busio/UART.c index be7851f52a2..1390a0b3345 100644 --- a/ports/analog/common-hal/busio/UART.c +++ b/ports/analog/common-hal/busio/UART.c @@ -64,7 +64,6 @@ typedef enum { typedef enum { UART_FREE = 0, UART_BUSY, - UART_NEVER_RESET, } uart_status_t; static uint32_t timeout_ms = 0; @@ -74,7 +73,6 @@ static uint32_t timeout_ms = 0; static uint8_t uarts_active = 0; static uart_status_t uart_status[NUM_UARTS]; static volatile int uart_err; -static uint8_t uart_never_reset_mask = 0; static busio_uart_obj_t *context; static bool isValidBaudrate(uint32_t baudrate) { @@ -449,12 +447,4 @@ bool common_hal_busio_uart_ready_to_tx(busio_uart_obj_t *self) { return !(MXC_UART_GetStatus(self->uart_regs) & (MXC_F_UART_STATUS_TX_BUSY)); } -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - common_hal_never_reset_pin(self->tx_pin); - common_hal_never_reset_pin(self->rx_pin); - common_hal_never_reset_pin(self->cts_pin); - common_hal_never_reset_pin(self->rts_pin); - uart_never_reset_mask |= (1 << (self->uart_id)); -} - #endif // CIRCUITPY_BUSIO_UART diff --git a/ports/analog/common-hal/digitalio/DigitalInOut.c b/ports/analog/common-hal/digitalio/DigitalInOut.c index 93e2242fbb6..e00347b38ce 100644 --- a/ports/analog/common-hal/digitalio/DigitalInOut.c +++ b/ports/analog/common-hal/digitalio/DigitalInOut.c @@ -14,11 +14,6 @@ extern mxc_gpio_regs_t *gpio_ports[NUM_GPIO_PORTS]; -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - common_hal_never_reset_pin(self->pin); -} - bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) { return self->pin == NULL; } diff --git a/ports/analog/common-hal/microcontroller/Pin.c b/ports/analog/common-hal/microcontroller/Pin.c index 83e2f3b9c3a..1e35ebe0a6f 100644 --- a/ports/analog/common-hal/microcontroller/Pin.c +++ b/ports/analog/common-hal/microcontroller/Pin.c @@ -19,22 +19,8 @@ static uint32_t claimed_pins[NUM_GPIO_PORTS]; // defined in board.c extern mxc_gpio_regs_t *gpio_ports[NUM_GPIO_PORTS]; -static uint32_t never_reset_pins[NUM_GPIO_PORTS]; - #define INVALID_PIN 0xFF // id for invalid pin -void reset_all_pins(void) { - // reset all pins except for never_reset_pins - for (int i = 0; i < NUM_GPIO_PORTS; i++) { - for (int j = 0; j < 32; j++) { - if (!(never_reset_pins[i] & (1 << j))) { - reset_pin_number(i, j); - } - } - // set claimed pins to never_reset pins - claimed_pins[i] = never_reset_pins[i]; - } -} void reset_pin_number(uint8_t pin_port, uint8_t pin_pad) { if ((pin_port == INVALID_PIN) || (pin_port > NUM_GPIO_PORTS)) { @@ -84,15 +70,6 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) { return !(claimed_pins[pin->port] & (pin->mask)); } -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - if ((pin != NULL) && (pin->mask != INVALID_PIN)) { - never_reset_pins[pin->port] |= (1 << pin->mask); - - // any never reset pin must also be claimed - claimed_pins[pin->port] |= (1 << pin->mask); - } -} - void common_hal_reset_pin(const mcu_pin_obj_t *pin) { if (pin == NULL) { return; diff --git a/ports/analog/common-hal/microcontroller/Pin.h b/ports/analog/common-hal/microcontroller/Pin.h index 169586e7e90..0c5d13eb868 100644 --- a/ports/analog/common-hal/microcontroller/Pin.h +++ b/ports/analog/common-hal/microcontroller/Pin.h @@ -10,7 +10,6 @@ #include "peripherals/pins.h" -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_port, uint8_t pin_pad); diff --git a/ports/analog/supervisor/usb.c b/ports/analog/supervisor/usb.c index 1624359ab51..c971b4dab2c 100644 --- a/ports/analog/supervisor/usb.c +++ b/ports/analog/supervisor/usb.c @@ -19,7 +19,6 @@ void init_usb_hardware(void) { // USB GPIOs are non-configurable on MAX32 devices - // No need to add them to the never_reset list for mcu/Pin API. // 1 ms SysTick initialized in board.c diff --git a/ports/atmel-samd/boards/aloriumtech_evo_m51/board.c b/ports/atmel-samd/boards/aloriumtech_evo_m51/board.c index eece51baa54..8f64430ba06 100644 --- a/ports/atmel-samd/boards/aloriumtech_evo_m51/board.c +++ b/ports/atmel-samd/boards/aloriumtech_evo_m51/board.c @@ -13,7 +13,6 @@ #include "common-hal/microcontroller/Pin.h" void board_init(void) { - never_reset_pin_number(PIN_PB20); REG_PORT_DIRSET1 = PORT_PB20; // PB20 as output REG_PORT_OUTCLR1 = PORT_PB20; // PB20 cleared PORT->Group[1].PINCFG[20].reg |= PORT_PINCFG_PMUXEN; // Mux enabled on PB20 diff --git a/ports/atmel-samd/boards/hallowing_m0_express/board.c b/ports/atmel-samd/boards/hallowing_m0_express/board.c index fd5ad548512..250dd2bdbee 100644 --- a/ports/atmel-samd/boards/hallowing_m0_express/board.c +++ b/ports/atmel-samd/boards/hallowing_m0_express/board.c @@ -51,7 +51,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; bus->base.type = &fourwire_fourwire_type; busio_spi_obj_t *spi = common_hal_board_create_spi(0); - common_hal_busio_spi_never_reset(spi); common_hal_fourwire_fourwire_construct(bus, spi, MP_OBJ_FROM_PTR(&pin_PA28), // Command or data diff --git a/ports/atmel-samd/boards/hallowing_m4_express/board.c b/ports/atmel-samd/boards/hallowing_m4_express/board.c index c7217b70b0a..1713f845b38 100644 --- a/ports/atmel-samd/boards/hallowing_m4_express/board.c +++ b/ports/atmel-samd/boards/hallowing_m4_express/board.c @@ -30,7 +30,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PA01, &pin_PA00, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/monster_m4sk/board.c b/ports/atmel-samd/boards/monster_m4sk/board.c index 1c143ad9270..1c1640da9b5 100644 --- a/ports/atmel-samd/boards/monster_m4sk/board.c +++ b/ports/atmel-samd/boards/monster_m4sk/board.c @@ -30,7 +30,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PA13, &pin_PA12, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/openbook_m4/board.c b/ports/atmel-samd/boards/openbook_m4/board.c index ebabfb84e9b..010679af6ee 100644 --- a/ports/atmel-samd/boards/openbook_m4/board.c +++ b/ports/atmel-samd/boards/openbook_m4/board.c @@ -39,7 +39,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/pewpew_lcd/board.c b/ports/atmel-samd/boards/pewpew_lcd/board.c index d60efd39bf7..0a2afe96f4d 100644 --- a/ports/atmel-samd/boards/pewpew_lcd/board.c +++ b/ports/atmel-samd/boards/pewpew_lcd/board.c @@ -49,7 +49,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PA23, &pin_PA22, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/pewpew_m4/board.c b/ports/atmel-samd/boards/pewpew_m4/board.c index ac67b82a3dc..646c083ed08 100644 --- a/ports/atmel-samd/boards/pewpew_m4/board.c +++ b/ports/atmel-samd/boards/pewpew_m4/board.c @@ -78,7 +78,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PA13, &pin_PA15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/pybadge/board.c b/ports/atmel-samd/boards/pybadge/board.c index e938e96e19e..a29e66ceba5 100644 --- a/ports/atmel-samd/boards/pybadge/board.c +++ b/ports/atmel-samd/boards/pybadge/board.c @@ -51,7 +51,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/pycubed/board.c b/ports/atmel-samd/boards/pycubed/board.c index 7589900314a..942a7729b87 100644 --- a/ports/atmel-samd/boards/pycubed/board.c +++ b/ports/atmel-samd/boards/pycubed/board.c @@ -13,7 +13,6 @@ void board_init(void) { pwmio_pwmout_obj_t pwm; common_hal_pwmio_pwmout_construct(&pwm, &pin_PA23, 4096, 2, false); - common_hal_pwmio_pwmout_never_reset(&pwm); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/atmel-samd/boards/pycubed_mram/board.c b/ports/atmel-samd/boards/pycubed_mram/board.c index 7589900314a..942a7729b87 100644 --- a/ports/atmel-samd/boards/pycubed_mram/board.c +++ b/ports/atmel-samd/boards/pycubed_mram/board.c @@ -13,7 +13,6 @@ void board_init(void) { pwmio_pwmout_obj_t pwm; common_hal_pwmio_pwmout_construct(&pwm, &pin_PA23, 4096, 2, false); - common_hal_pwmio_pwmout_never_reset(&pwm); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/atmel-samd/boards/pycubed_mram_v05/board.c b/ports/atmel-samd/boards/pycubed_mram_v05/board.c index 7589900314a..942a7729b87 100644 --- a/ports/atmel-samd/boards/pycubed_mram_v05/board.c +++ b/ports/atmel-samd/boards/pycubed_mram_v05/board.c @@ -13,7 +13,6 @@ void board_init(void) { pwmio_pwmout_obj_t pwm; common_hal_pwmio_pwmout_construct(&pwm, &pin_PA23, 4096, 2, false); - common_hal_pwmio_pwmout_never_reset(&pwm); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/atmel-samd/boards/pycubed_v05/board.c b/ports/atmel-samd/boards/pycubed_v05/board.c index 7589900314a..942a7729b87 100644 --- a/ports/atmel-samd/boards/pycubed_v05/board.c +++ b/ports/atmel-samd/boards/pycubed_v05/board.c @@ -13,7 +13,6 @@ void board_init(void) { pwmio_pwmout_obj_t pwm; common_hal_pwmio_pwmout_construct(&pwm, &pin_PA23, 4096, 2, false); - common_hal_pwmio_pwmout_never_reset(&pwm); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/atmel-samd/boards/pygamer/board.c b/ports/atmel-samd/boards/pygamer/board.c index fcf6aff0e65..3e3732d9c37 100644 --- a/ports/atmel-samd/boards/pygamer/board.c +++ b/ports/atmel-samd/boards/pygamer/board.c @@ -52,7 +52,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PB13, &pin_PB15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c b/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c index 1ee80c98786..81261ab8056 100644 --- a/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c +++ b/ports/atmel-samd/boards/seeeduino_wio_terminal/board.c @@ -47,7 +47,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_PB20, &pin_PB19, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, @@ -104,9 +103,6 @@ void board_init(void) { common_hal_digitalio_digitalinout_set_value(&USB_HOST_ENABLE, false); // Never reset - common_hal_digitalio_digitalinout_never_reset(&CTR_5V); - common_hal_digitalio_digitalinout_never_reset(&CTR_3V3); - common_hal_digitalio_digitalinout_never_reset(&USB_HOST_ENABLE); // reset pin after fake deep sleep reset_pin_number(pin_PA18.number); diff --git a/ports/atmel-samd/boards/sparkfun_samd51_micromod/board.c b/ports/atmel-samd/boards/sparkfun_samd51_micromod/board.c index a8153347def..14dc8873c73 100644 --- a/ports/atmel-samd/boards/sparkfun_samd51_micromod/board.c +++ b/ports/atmel-samd/boards/sparkfun_samd51_micromod/board.c @@ -12,8 +12,6 @@ void external_flash_setup(void) { // Do not reset the external flash write-protect and hold pins high - never_reset_pin_number(PIN_PB22); - never_reset_pin_number(PIN_PB23); // note: using output instead of input+pullups because the pullups are a little weak // Set the WP pin high diff --git a/ports/atmel-samd/boards/uchip/board.c b/ports/atmel-samd/boards/uchip/board.c index 667e08c676f..45077e0dbaa 100644 --- a/ports/atmel-samd/boards/uchip/board.c +++ b/ports/atmel-samd/boards/uchip/board.c @@ -13,13 +13,9 @@ void board_init(void) { // BOOST_ENABLE - never_reset_pin_number(PIN_PA14); // VEXT_SELECT - never_reset_pin_number(PIN_PA15); // USB_DETECT - never_reset_pin_number(PIN_PA28); // USB_HOST_EN - never_reset_pin_number(PIN_PA27); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/atmel-samd/boards/winterbloom_big_honking_button/usermods/_bhb/bhb.c b/ports/atmel-samd/boards/winterbloom_big_honking_button/usermods/_bhb/bhb.c index 9b8c6b64e99..daae1f6b762 100644 --- a/ports/atmel-samd/boards/winterbloom_big_honking_button/usermods/_bhb/bhb.c +++ b/ports/atmel-samd/boards/winterbloom_big_honking_button/usermods/_bhb/bhb.c @@ -14,7 +14,6 @@ static mp_obj_t _bhb_read_adc(void); static mp_obj_t _bhb_init_adc(void) { claim_pin(&pin_PB08); - common_hal_never_reset_pin(&pin_PB08); /* Enable the APB clock for the ADC. */ PM->APBCMASK.reg |= PM_APBCMASK_ADC; diff --git a/ports/atmel-samd/common-hal/busio/I2C.c b/ports/atmel-samd/common-hal/busio/I2C.c index d9da050dabe..fa4e787dc38 100644 --- a/ports/atmel-samd/common-hal/busio/I2C.c +++ b/ports/atmel-samd/common-hal/busio/I2C.c @@ -118,9 +118,6 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, self->scl_pin = scl->number; claim_pin(sda); claim_pin(scl); - - // Prevent bulk sercom reset from resetting us. The finalizer will instead. - never_reset_sercom(self->i2c_desc.device.hw); } bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) { @@ -135,7 +132,6 @@ void common_hal_busio_i2c_deinit(busio_i2c_obj_t *self) { if (common_hal_busio_i2c_deinited(self)) { return; } - allow_reset_sercom(self->i2c_desc.device.hw); i2c_m_sync_disable(&self->i2c_desc); i2c_m_sync_deinit(&self->i2c_desc); @@ -242,8 +238,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 return common_hal_busio_i2c_read(self, addr, in_data, in_len); } - -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - never_reset_pin_number(self->scl_pin); - never_reset_pin_number(self->sda_pin); -} diff --git a/ports/atmel-samd/common-hal/busio/SPI.c b/ports/atmel-samd/common-hal/busio/SPI.c index 19fd81e425d..7d2873a182a 100644 --- a/ports/atmel-samd/common-hal/busio/SPI.c +++ b/ports/atmel-samd/common-hal/busio/SPI.c @@ -172,13 +172,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, spi_m_sync_enable(&self->spi_desc); } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - never_reset_sercom(self->spi_desc.dev.prvt); - - never_reset_pin_number(self->clock_pin); - never_reset_pin_number(self->MOSI_pin); - never_reset_pin_number(self->MISO_pin); -} bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->clock_pin == NO_PIN; @@ -192,7 +185,6 @@ void common_hal_busio_spi_deinit(busio_spi_obj_t *self) { if (common_hal_busio_spi_deinited(self)) { return; } - allow_reset_sercom(self->spi_desc.dev.prvt); spi_m_sync_disable(&self->spi_desc); spi_m_sync_deinit(&self->spi_desc); diff --git a/ports/atmel-samd/common-hal/busio/UART.c b/ports/atmel-samd/common-hal/busio/UART.c index 31b644bea9a..9ea324c7abb 100644 --- a/ports/atmel-samd/common-hal/busio/UART.c +++ b/ports/atmel-samd/common-hal/busio/UART.c @@ -326,22 +326,6 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, usart_async_enable(usart_desc_p); } -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - for (size_t i = 0; i < MP_ARRAY_SIZE(sercom_insts); i++) { - const Sercom *sercom = sercom_insts[i]; - Sercom *hw = (Sercom *)(self->usart_desc.device.hw); - - // Reserve pins for active UART only - if (sercom == hw) { - never_reset_sercom(hw); - never_reset_pin_number(self->rx_pin); - never_reset_pin_number(self->tx_pin); - never_reset_pin_number(self->rts_pin); - never_reset_pin_number(self->cts_pin); - } - } - return; -} bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { return self->rx_pin == NO_PIN && self->tx_pin == NO_PIN; diff --git a/ports/atmel-samd/common-hal/busio/__init__.c b/ports/atmel-samd/common-hal/busio/__init__.c index 0017aa662a2..b9b64937f0a 100644 --- a/ports/atmel-samd/common-hal/busio/__init__.c +++ b/ports/atmel-samd/common-hal/busio/__init__.c @@ -7,38 +7,3 @@ #include "samd/sercom.h" #include "common-hal/busio/__init__.h" -static bool never_reset_sercoms[SERCOM_INST_NUM]; - -void never_reset_sercom(Sercom *sercom) { - // Reset all SERCOMs except the ones being used by on-board devices. - Sercom *sercom_instances[SERCOM_INST_NUM] = SERCOM_INSTS; - for (int i = 0; i < SERCOM_INST_NUM; i++) { - if (sercom_instances[i] == sercom) { - never_reset_sercoms[i] = true; - break; - } - } -} - -void allow_reset_sercom(Sercom *sercom) { - // Reset all SERCOMs except the ones being used by on-board devices. - Sercom *sercom_instances[SERCOM_INST_NUM] = SERCOM_INSTS; - for (int i = 0; i < SERCOM_INST_NUM; i++) { - if (sercom_instances[i] == sercom) { - never_reset_sercoms[i] = false; - break; - } - } -} - -void reset_sercoms(void) { - // Reset all SERCOMs except the ones being used by on-board devices. - Sercom *sercom_instances[SERCOM_INST_NUM] = SERCOM_INSTS; - for (int i = 0; i < SERCOM_INST_NUM; i++) { - if (never_reset_sercoms[i]) { - continue; - } - // SWRST is same for all modes of SERCOMs. - sercom_instances[i]->SPI.CTRLA.bit.SWRST = 1; - } -} diff --git a/ports/atmel-samd/common-hal/busio/__init__.h b/ports/atmel-samd/common-hal/busio/__init__.h index a87e38cb7ba..370e233985f 100644 --- a/ports/atmel-samd/common-hal/busio/__init__.h +++ b/ports/atmel-samd/common-hal/busio/__init__.h @@ -5,7 +5,3 @@ // SPDX-License-Identifier: MIT #pragma once - -void reset_sercoms(void); -void allow_reset_sercom(Sercom *sercom); -void never_reset_sercom(Sercom *sercom); diff --git a/ports/atmel-samd/common-hal/canio/CAN.c b/ports/atmel-samd/common-hal/canio/CAN.c index 3321d0abdbc..70d5fb83ef6 100644 --- a/ports/atmel-samd/common-hal/canio/CAN.c +++ b/ports/atmel-samd/common-hal/canio/CAN.c @@ -48,11 +48,9 @@ void common_hal_canio_can_construct(canio_can_obj_t *self, const mcu_pin_obj_t * gpio_set_pin_direction(tx_function->pin, GPIO_DIRECTION_OUT); gpio_set_pin_function(tx_function->pin, tx_function->function); - common_hal_never_reset_pin(tx_function->obj); gpio_set_pin_direction(rx_function->pin, GPIO_DIRECTION_IN); gpio_set_pin_function(rx_function->pin, rx_function->function); - common_hal_never_reset_pin(rx_function->obj); self->tx_pin_number = tx ? common_hal_mcu_pin_number(tx) : COMMON_HAL_MCU_NO_PIN; self->rx_pin_number = rx ? common_hal_mcu_pin_number(rx) : COMMON_HAL_MCU_NO_PIN; diff --git a/ports/atmel-samd/common-hal/digitalio/DigitalInOut.c b/ports/atmel-samd/common-hal/digitalio/DigitalInOut.c index 89902259a23..adda3efe876 100644 --- a/ports/atmel-samd/common-hal/digitalio/DigitalInOut.c +++ b/ports/atmel-samd/common-hal/digitalio/DigitalInOut.c @@ -28,10 +28,6 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct( return DIGITALINOUT_OK; } -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) { return self->pin == NULL; diff --git a/ports/atmel-samd/common-hal/microcontroller/Pin.c b/ports/atmel-samd/common-hal/microcontroller/Pin.c index bbf3957818e..9967b18800b 100644 --- a/ports/atmel-samd/common-hal/microcontroller/Pin.c +++ b/ports/atmel-samd/common-hal/microcontroller/Pin.c @@ -17,8 +17,6 @@ bool speaker_enable_in_use; #endif -#define PORT_COUNT (PORT_BITS / 32 + 1) - #ifdef SAM_D5X_E5X #define SWD_MUX GPIO_PIN_FUNCTION_H #endif @@ -26,68 +24,12 @@ bool speaker_enable_in_use; #define SWD_MUX GPIO_PIN_FUNCTION_G #endif -static uint32_t never_reset_pins[PORT_COUNT]; - -void reset_all_pins(void) { - uint32_t pin_mask[PORT_COUNT] = PORT_OUT_IMPLEMENTED; - - // Do not full reset USB lines. - #if CIRCUITPY_USB_DEVICE - pin_mask[0] &= ~(PORT_PA24 | PORT_PA25); - #endif - - // Do not reset SWD when a debugger is present. - if (DSU->STATUSB.bit.DBGPRES == 1) { - pin_mask[0] &= ~(PORT_PA30 | PORT_PA31); - } - - for (uint32_t i = 0; i < PORT_COUNT; i++) { - pin_mask[i] &= ~never_reset_pins[i]; - } - - gpio_set_port_direction(GPIO_PORTA, pin_mask[0], GPIO_DIRECTION_OFF); - gpio_set_port_direction(GPIO_PORTB, pin_mask[1], GPIO_DIRECTION_OFF); - #if PORT_BITS > 64 - gpio_set_port_direction(GPIO_PORTC, pin_mask[2], GPIO_DIRECTION_OFF); - #endif - #if PORT_BITS > 96 - gpio_set_port_direction(GPIO_PORTD, pin_mask[3], GPIO_DIRECTION_OFF); - #endif - - // Configure SWD. SWDIO will be automatically switched on PA31 when a signal is input on - // SWCLK. - #ifdef SAM_D5X_E5X - gpio_set_pin_function(PIN_PA30, MUX_PA30H_CM4_SWCLK); - #endif - #ifdef SAMD21 - gpio_set_pin_function(PIN_PA30, GPIO_PIN_FUNCTION_G); - gpio_set_pin_function(PIN_PA31, GPIO_PIN_FUNCTION_G); - #endif - - // After configuring SWD because it may be shared. - #ifdef SPEAKER_ENABLE_PIN - speaker_enable_in_use = false; - gpio_set_pin_function(SPEAKER_ENABLE_PIN->number, GPIO_PIN_FUNCTION_OFF); - gpio_set_pin_direction(SPEAKER_ENABLE_PIN->number, GPIO_DIRECTION_OUT); - gpio_set_pin_level(SPEAKER_ENABLE_PIN->number, false); - #endif -} - -void never_reset_pin_number(uint8_t pin_number) { - if (pin_number >= PORT_BITS) { - return; - } - - never_reset_pins[GPIO_PORT(pin_number)] |= 1 << GPIO_PIN(pin_number); -} void reset_pin_number(uint8_t pin_number) { if (pin_number >= PORT_BITS) { return; } - never_reset_pins[GPIO_PORT(pin_number)] &= ~(1 << GPIO_PIN(pin_number)); - if (pin_number == PIN_PA30 #ifdef SAM_D5X_E5X ) { @@ -111,9 +53,6 @@ void reset_pin_number(uint8_t pin_number) { #endif } -void common_hal_never_reset_pin(const mcu_pin_obj_t* pin) { - never_reset_pin_number(pin->number); -} void common_hal_reset_pin(const mcu_pin_obj_t* pin) { if (pin == NULL) { diff --git a/ports/atmel-samd/common-hal/microcontroller/Pin.h b/ports/atmel-samd/common-hal/microcontroller/Pin.h index cce9d84ef33..ba8af14d444 100644 --- a/ports/atmel-samd/common-hal/microcontroller/Pin.h +++ b/ports/atmel-samd/common-hal/microcontroller/Pin.h @@ -10,11 +10,9 @@ #include "peripherals/samd/pins.h" -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_number); void claim_pin(const mcu_pin_obj_t *pin); bool pin_number_is_free(uint8_t pin_number); diff --git a/ports/atmel-samd/common-hal/paralleldisplaybus/ParallelBus.c b/ports/atmel-samd/common-hal/paralleldisplaybus/ParallelBus.c index 6f56753d29a..817038786a3 100644 --- a/ports/atmel-samd/common-hal/paralleldisplaybus/ParallelBus.c +++ b/ports/atmel-samd/common-hal/paralleldisplaybus/ParallelBus.c @@ -54,7 +54,6 @@ void common_hal_paralleldisplaybus_parallelbus_construct(paralleldisplaybus_para self->read.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->read, read); common_hal_digitalio_digitalinout_switch_to_output(&self->read, true, DRIVE_MODE_PUSH_PULL); - never_reset_pin_number(read->number); } self->data0_pin = data_pin; @@ -66,15 +65,10 @@ void common_hal_paralleldisplaybus_parallelbus_construct(paralleldisplaybus_para self->reset.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->reset, reset); common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL); - never_reset_pin_number(reset->number); common_hal_paralleldisplaybus_parallelbus_reset(self); } - never_reset_pin_number(command->number); - never_reset_pin_number(chip_select->number); - never_reset_pin_number(write->number); for (uint8_t i = 0; i < 8; i++) { - never_reset_pin_number(data_pin + i); } } diff --git a/ports/atmel-samd/common-hal/pwmio/PWMOut.c b/ports/atmel-samd/common-hal/pwmio/PWMOut.c index 71d6f38d502..87f28ac7f57 100644 --- a/ports/atmel-samd/common-hal/pwmio/PWMOut.c +++ b/ports/atmel-samd/common-hal/pwmio/PWMOut.c @@ -39,9 +39,6 @@ uint8_t tcc_channels[5]; // Set by pwmout_reset() to {0xc0, 0xf0, 0xf8, 0xfc, #endif -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} static uint8_t tcc_channel(const pin_timer_t *t) { // For the SAMD51 this hardcodes the use of OTMX == 0x0, the output matrix mapping, which uses diff --git a/ports/atmel-samd/common-hal/sdioio/SDCard.c b/ports/atmel-samd/common-hal/sdioio/SDCard.c index e38a664ed48..00a547b066c 100644 --- a/ports/atmel-samd/common-hal/sdioio/SDCard.c +++ b/ports/atmel-samd/common-hal/sdioio/SDCard.c @@ -275,5 +275,3 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { self->data_pins[3] = COMMON_HAL_MCU_NO_PIN; } -void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { -} diff --git a/ports/atmel-samd/supervisor/port.c b/ports/atmel-samd/supervisor/port.c index 288446cf62e..57cfc6495f4 100644 --- a/ports/atmel-samd/supervisor/port.c +++ b/ports/atmel-samd/supervisor/port.c @@ -361,9 +361,6 @@ safe_mode_t port_init(void) { } void reset_port(void) { - #if CIRCUITPY_BUSIO - reset_sercoms(); - #endif #if CIRCUITPY_AUDIOIO audio_dma_reset(); diff --git a/ports/atmel-samd/supervisor/qspi_flash.c b/ports/atmel-samd/supervisor/qspi_flash.c index 956d71044f8..bc1fefe34de 100644 --- a/ports/atmel-samd/supervisor/qspi_flash.c +++ b/ports/atmel-samd/supervisor/qspi_flash.c @@ -233,7 +233,6 @@ void spi_flash_init(void) { gpio_set_pin_direction(pins[i], GPIO_DIRECTION_IN); gpio_set_pin_pull_mode(pins[i], GPIO_PULL_OFF); gpio_set_pin_function(pins[i], GPIO_PIN_FUNCTION_H); - never_reset_pin_number(pins[i]); } } diff --git a/ports/broadcom/common-hal/busio/I2C.c b/ports/broadcom/common-hal/busio/I2C.c index 7c1eafe281d..a867de7581b 100644 --- a/ports/broadcom/common-hal/busio/I2C.c +++ b/ports/broadcom/common-hal/busio/I2C.c @@ -23,23 +23,19 @@ static BSC0_Type *i2c[NUM_I2C] = {BSC0, BSC1, NULL, BSC3, BSC4, BSC5, BSC6, NULL static BSC0_Type *i2c[NUM_I2C] = {BSC0, BSC1, NULL}; #endif -static bool never_reset_i2c[NUM_I2C]; static bool i2c_in_use[NUM_I2C]; void reset_i2c(void) { - // BSC2 is dedicated to the first HDMI output. - never_reset_i2c[2] = true; + // BSC2 is dedicated to the first HDMI output - always mark as in use i2c_in_use[2] = true; #if BCM_VERSION == 2711 - // BSC7 is dedicated to the second HDMI output. - never_reset_i2c[7] = true; + // BSC7 is dedicated to the second HDMI output - always mark as in use i2c_in_use[7] = true; #endif for (size_t i = 0; i < NUM_I2C; i++) { - if (never_reset_i2c[i]) { + if (i2c_in_use[i]) { continue; } - i2c_in_use[i] = false; i2c[i]->C_b.I2CEN = false; COMPLETE_MEMORY_READS; } @@ -252,9 +248,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 return common_hal_busio_i2c_read(self, addr, in_data, in_len); } -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - never_reset_i2c[self->index] = true; - - common_hal_never_reset_pin(self->scl_pin); - common_hal_never_reset_pin(self->sda_pin); -} diff --git a/ports/broadcom/common-hal/busio/SPI.c b/ports/broadcom/common-hal/busio/SPI.c index 9e4834e86f3..9cc0c518f0c 100644 --- a/ports/broadcom/common-hal/busio/SPI.c +++ b/ports/broadcom/common-hal/busio/SPI.c @@ -97,12 +97,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, } } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - common_hal_never_reset_pin(self->clock); - common_hal_never_reset_pin(self->MOSI); - common_hal_never_reset_pin(self->MISO); -} - bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->clock == NULL; } diff --git a/ports/broadcom/common-hal/busio/UART.c b/ports/broadcom/common-hal/busio/UART.c index 55c890475eb..2984ce5f115 100644 --- a/ports/broadcom/common-hal/busio/UART.c +++ b/ports/broadcom/common-hal/busio/UART.c @@ -32,15 +32,13 @@ static ARM_UART_PL011_Type *uart[NUM_UART] = {UART0, NULL}; typedef enum { STATUS_FREE = 0, - STATUS_BUSY, - STATUS_NEVER_RESET + STATUS_BUSY } uart_status_t; static uart_status_t uart_status[NUM_UART]; static busio_uart_obj_t *active_uart[NUM_UART]; void reset_uart(void) { - bool any_pl011_active = false; for (uint8_t num = 0; num < NUM_UART; num++) { if (uart_status[num] == STATUS_BUSY) { if (num == 1) { @@ -54,13 +52,8 @@ void reset_uart(void) { } active_uart[num] = NULL; uart_status[num] = STATUS_FREE; - } else { - any_pl011_active = any_pl011_active || (num != 1 && uart_status[num] == STATUS_NEVER_RESET); } } - if (!any_pl011_active) { - BP_DisableIRQ(UART_IRQn); - } COMPLETE_MEMORY_READS; if (AUX->ENABLES == 0) { BP_DisableIRQ(AUX_IRQn); @@ -126,14 +119,6 @@ void UART5_IRQHandler(void) { } #endif -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - uart_status[self->uart_id] = STATUS_NEVER_RESET; - common_hal_never_reset_pin(self->tx_pin); - common_hal_never_reset_pin(self->rx_pin); - common_hal_never_reset_pin(self->cts_pin); - common_hal_never_reset_pin(self->rts_pin); -} - void common_hal_busio_uart_construct(busio_uart_obj_t *self, const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx, const mcu_pin_obj_t *rts, const mcu_pin_obj_t *cts, diff --git a/ports/broadcom/common-hal/digitalio/DigitalInOut.c b/ports/broadcom/common-hal/digitalio/DigitalInOut.c index b2b0aae404b..08102cd00fd 100644 --- a/ports/broadcom/common-hal/digitalio/DigitalInOut.c +++ b/ports/broadcom/common-hal/digitalio/DigitalInOut.c @@ -25,11 +25,6 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct( return DIGITALINOUT_OK; } -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} - bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) { return self->pin == NULL; } diff --git a/ports/broadcom/common-hal/microcontroller/Pin.c b/ports/broadcom/common-hal/microcontroller/Pin.c index be5c0ff6210..fba19e0ec96 100644 --- a/ports/broadcom/common-hal/microcontroller/Pin.c +++ b/ports/broadcom/common-hal/microcontroller/Pin.c @@ -9,24 +9,10 @@ #include "peripherals/broadcom/gpio.h" static bool pin_in_use[BCM_PIN_COUNT]; -static bool never_reset_pin[BCM_PIN_COUNT]; -void reset_all_pins(void) { - for (size_t i = 0; i < BCM_PIN_COUNT; i++) { - if (never_reset_pin[i]) { - continue; - } - reset_pin_number(i); - } -} - -void never_reset_pin_number(uint8_t pin_number) { - never_reset_pin[pin_number] = true; -} void reset_pin_number(uint8_t pin_number) { pin_in_use[pin_number] = false; - never_reset_pin[pin_number] = false; // Reset JTAG pins back to JTAG. BP_PULL_Enum pull = BP_PULL_NONE; if (22 <= pin_number && pin_number <= 27) { @@ -50,13 +36,6 @@ void reset_pin_number(uint8_t pin_number) { gpio_set_pull(pin_number, pull); } -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - if (pin == NULL) { - return; - } - never_reset_pin_number(pin->number); -} - void common_hal_reset_pin(const mcu_pin_obj_t *pin) { if (pin == NULL) { return; diff --git a/ports/broadcom/common-hal/microcontroller/Pin.h b/ports/broadcom/common-hal/microcontroller/Pin.h index 4e0e2e2e659..aa75a3a0e7f 100644 --- a/ports/broadcom/common-hal/microcontroller/Pin.h +++ b/ports/broadcom/common-hal/microcontroller/Pin.h @@ -13,10 +13,8 @@ #include "peripherals/broadcom/pins.h" -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_number); void claim_pin(const mcu_pin_obj_t *pin); bool pin_number_is_free(uint8_t pin_number); diff --git a/ports/broadcom/common-hal/sdioio/SDCard.c b/ports/broadcom/common-hal/sdioio/SDCard.c index 2c9e6a2bb58..e9b4973049a 100644 --- a/ports/broadcom/common-hal/sdioio/SDCard.c +++ b/ports/broadcom/common-hal/sdioio/SDCard.c @@ -422,11 +422,3 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { self->init = false; } -void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { - never_reset_pin_number(self->command_pin); - never_reset_pin_number(self->clock_pin); - never_reset_pin_number(self->data_pins[0]); - never_reset_pin_number(self->data_pins[1]); - never_reset_pin_number(self->data_pins[2]); - never_reset_pin_number(self->data_pins[3]); -} diff --git a/ports/broadcom/supervisor/internal_flash.c b/ports/broadcom/supervisor/internal_flash.c index 2e75154ea35..97b201253fd 100644 --- a/ports/broadcom/supervisor/internal_flash.c +++ b/ports/broadcom/supervisor/internal_flash.c @@ -40,7 +40,6 @@ void supervisor_flash_init(void) { NULL, NULL, 0, NULL, 8000000); #endif - common_hal_sdioio_sdcard_never_reset(&sd); uint32_t buffer[512 / sizeof(uint32_t)]; mp_buffer_info_t bufinfo; diff --git a/ports/cxd56/common-hal/busio/I2C.c b/ports/cxd56/common-hal/busio/I2C.c index 8e846b2402d..a7e5b9dc608 100644 --- a/ports/cxd56/common-hal/busio/I2C.c +++ b/ports/cxd56/common-hal/busio/I2C.c @@ -127,8 +127,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 return common_hal_busio_i2c_read(self, addr, in_data, in_len); } - -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - never_reset_pin_number(self->scl_pin->number); - never_reset_pin_number(self->sda_pin->number); -} diff --git a/ports/cxd56/common-hal/busio/SPI.c b/ports/cxd56/common-hal/busio/SPI.c index 595b868f348..096dc1ba03e 100644 --- a/ports/cxd56/common-hal/busio/SPI.c +++ b/ports/cxd56/common-hal/busio/SPI.c @@ -168,9 +168,3 @@ uint8_t common_hal_busio_spi_get_phase(busio_spi_obj_t *self) { uint8_t common_hal_busio_spi_get_polarity(busio_spi_obj_t *self) { return self->polarity; } - -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - never_reset_pin_number(self->clock_pin->number); - never_reset_pin_number(self->mosi_pin->number); - never_reset_pin_number(self->miso_pin->number); -} diff --git a/ports/cxd56/common-hal/digitalio/DigitalInOut.c b/ports/cxd56/common-hal/digitalio/DigitalInOut.c index 6936fe4f8cd..855350708b6 100644 --- a/ports/cxd56/common-hal/digitalio/DigitalInOut.c +++ b/ports/cxd56/common-hal/digitalio/DigitalInOut.c @@ -115,7 +115,3 @@ digitalinout_result_t common_hal_digitalio_digitalinout_set_pull(digitalio_digit digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(digitalio_digitalinout_obj_t *self) { return self->pull; } - -void common_hal_digitalio_digitalinout_never_reset(digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} diff --git a/ports/cxd56/common-hal/microcontroller/Pin.c b/ports/cxd56/common-hal/microcontroller/Pin.c index 0f9d6b1f3bd..9ffb04e774b 100644 --- a/ports/cxd56/common-hal/microcontroller/Pin.c +++ b/ports/cxd56/common-hal/microcontroller/Pin.c @@ -15,7 +15,6 @@ typedef struct { const mcu_pin_obj_t *pin; - bool reset; bool free; } pin_status_t; @@ -66,39 +65,39 @@ const mcu_pin_obj_t pin_HPADC0 = PIN(4, true); const mcu_pin_obj_t pin_HPADC1 = PIN(5, true); static pin_status_t pins[] = { - { &pin_UART2_RXD, true, true }, - { &pin_UART2_TXD, true, true }, - { &pin_HIF_IRQ_OUT, true, true }, - { &pin_PWM3, true, true }, - { &pin_SPI2_MOSI, true, true }, - { &pin_PWM1, true, true }, - { &pin_PWM0, true, true }, - { &pin_SPI3_CS1_X, true, true }, - { &pin_SPI2_MISO, true, true }, - { &pin_PWM2, true, true }, - { &pin_SPI4_CS_X, true, true }, - { &pin_SPI4_MOSI, true, true }, - { &pin_SPI4_MISO, true, true }, - { &pin_SPI4_SCK, true, true }, - { &pin_I2C0_BDT, true, true }, - { &pin_I2C0_BCK, true, true }, - { &pin_EMMC_DATA0, true, true }, - { &pin_EMMC_DATA1, true, true }, - { &pin_I2S0_DATA_OUT, true, true }, - { &pin_I2S0_DATA_IN, true, true }, - { &pin_EMMC_DATA2, true, true }, - { &pin_EMMC_DATA3, true, true }, - { &pin_SEN_IRQ_IN, true, true }, - { &pin_EMMC_CLK, true, true }, - { &pin_EMMC_CMD, true, true }, - { &pin_I2S0_LRCK, true, true }, - { &pin_I2S0_BCK, true, true }, - { &pin_UART2_CTS, true, true }, - { &pin_UART2_RTS, true, true }, - { &pin_I2S1_BCK, true, true }, - { &pin_I2S1_LRCK, true, true }, - { &pin_I2S1_DATA_IN, true, true }, - { &pin_I2S1_DATA_OUT, true, true }, + { &pin_UART2_RXD, true }, + { &pin_UART2_TXD, true }, + { &pin_HIF_IRQ_OUT, true }, + { &pin_PWM3, true }, + { &pin_SPI2_MOSI, true }, + { &pin_PWM1, true }, + { &pin_PWM0, true }, + { &pin_SPI3_CS1_X, true }, + { &pin_SPI2_MISO, true }, + { &pin_PWM2, true }, + { &pin_SPI4_CS_X, true }, + { &pin_SPI4_MOSI, true }, + { &pin_SPI4_MISO, true }, + { &pin_SPI4_SCK, true }, + { &pin_I2C0_BDT, true }, + { &pin_I2C0_BCK, true }, + { &pin_EMMC_DATA0, true }, + { &pin_EMMC_DATA1, true }, + { &pin_I2S0_DATA_OUT, true }, + { &pin_I2S0_DATA_IN, true }, + { &pin_EMMC_DATA2, true }, + { &pin_EMMC_DATA3, true }, + { &pin_SEN_IRQ_IN, true }, + { &pin_EMMC_CLK, true }, + { &pin_EMMC_CMD, true }, + { &pin_I2S0_LRCK, true }, + { &pin_I2S0_BCK, true }, + { &pin_UART2_CTS, true }, + { &pin_UART2_RTS, true }, + { &pin_I2S1_BCK, true }, + { &pin_I2S1_LRCK, true }, + { &pin_I2S1_DATA_IN, true }, + { &pin_I2S1_DATA_OUT, true }, }; bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) { @@ -111,14 +110,6 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) { return true; } -void never_reset_pin_number(uint8_t pin_number) { - for (int i = 0; i < MP_ARRAY_SIZE(pins); i++) { - if (pins[i].pin->number == pin_number) { - pins[i].reset = false; - } - } -} - void reset_pin_number(uint8_t pin_number) { for (int i = 0; i < MP_ARRAY_SIZE(pins); i++) { if (pins[i].pin->number == pin_number) { @@ -127,17 +118,6 @@ void reset_pin_number(uint8_t pin_number) { } } -void reset_all_pins(void) { - for (int i = 0; i < MP_ARRAY_SIZE(pins); i++) { - if (!pins[i].free && pins[i].reset) { - board_gpio_write(pins[i].pin->number, -1); - board_gpio_config(pins[i].pin->number, 0, false, true, PIN_FLOAT); - board_gpio_int(pins[i].pin->number, false); - board_gpio_intconfig(pins[i].pin->number, 0, false, NULL); - pins[i].free = true; - } - } -} void claim_pin(const mcu_pin_obj_t *pin) { for (int i = 0; i < MP_ARRAY_SIZE(pins); i++) { diff --git a/ports/cxd56/common-hal/microcontroller/Pin.h b/ports/cxd56/common-hal/microcontroller/Pin.h index 8c27abe76f2..94c01d2b7ad 100644 --- a/ports/cxd56/common-hal/microcontroller/Pin.h +++ b/ports/cxd56/common-hal/microcontroller/Pin.h @@ -69,7 +69,5 @@ extern const mcu_pin_obj_t pin_LPADC3; extern const mcu_pin_obj_t pin_HPADC0; extern const mcu_pin_obj_t pin_HPADC1; -void never_reset_pin_number(uint8_t pin_number); void reset_pin_number(uint8_t pin_number); -void reset_all_pins(void); void claim_pin(const mcu_pin_obj_t *pin); diff --git a/ports/cxd56/common-hal/pwmio/PWMOut.c b/ports/cxd56/common-hal/pwmio/PWMOut.c index f754858f306..7ea96f4d4f2 100644 --- a/ports/cxd56/common-hal/pwmio/PWMOut.c +++ b/ports/cxd56/common-hal/pwmio/PWMOut.c @@ -16,14 +16,13 @@ typedef struct { const char *devpath; const mcu_pin_obj_t *pin; int fd; - bool reset; } pwmout_dev_t; static pwmout_dev_t pwmout_dev[] = { - {"/dev/pwm0", &pin_PWM0, -1, true}, - {"/dev/pwm1", &pin_PWM1, -1, true}, - {"/dev/pwm2", &pin_PWM2, -1, true}, - {"/dev/pwm3", &pin_PWM3, -1, true} + {"/dev/pwm0", &pin_PWM0, -1}, + {"/dev/pwm1", &pin_PWM1, -1}, + {"/dev/pwm2", &pin_PWM2, -1}, + {"/dev/pwm3", &pin_PWM3, -1} }; pwmout_result_t common_hal_pwmio_pwmout_construct(pwmio_pwmout_obj_t *self, @@ -70,8 +69,6 @@ void common_hal_pwmio_pwmout_deinit(pwmio_pwmout_obj_t *self) { return; } - pwmout_dev[self->number].reset = true; - ioctl(pwmout_dev[self->number].fd, PWMIOC_STOP, 0); close(pwmout_dev[self->number].fd); pwmout_dev[self->number].fd = -1; @@ -110,12 +107,6 @@ bool common_hal_pwmio_pwmout_get_variable_frequency(pwmio_pwmout_obj_t *self) { return self->variable_frequency; } -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - never_reset_pin_number(self->pin->number); - - pwmout_dev[self->number].reset = false; -} - void pwmout_start(uint8_t pwm_num) { ioctl(pwmout_dev[pwm_num].fd, PWMIOC_START, 0); } diff --git a/ports/cxd56/common-hal/sdioio/SDCard.c b/ports/cxd56/common-hal/sdioio/SDCard.c index 227011a8871..4e48e0e0a2a 100644 --- a/ports/cxd56/common-hal/sdioio/SDCard.c +++ b/ports/cxd56/common-hal/sdioio/SDCard.c @@ -164,11 +164,3 @@ bool sdioio_sdcard_ioctl(mp_obj_t self_in, size_t cmd, size_t arg, return false; // Unsupported command } } - -void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { - never_reset_pin_number(self->clock_pin->number); - never_reset_pin_number(self->command_pin->number); - for (uint8_t i = 0; i < DATA_PINS_NUM; i++) { - never_reset_pin_number(self->data_pins[i]->number); - } -} diff --git a/ports/espressif/boards/01space_lcd042_esp32c3/board.c b/ports/espressif/boards/01space_lcd042_esp32c3/board.c index c675636bb55..f66ba1eecc1 100644 --- a/ports/espressif/boards/01space_lcd042_esp32c3/board.c +++ b/ports/espressif/boards/01space_lcd042_esp32c3/board.c @@ -37,7 +37,6 @@ void board_init(void) { // What we would do if it wasn't the shared board I2C: (for reference) // busio_i2c_obj_t *i2c = &allocate_display_bus()->i2cdisplay_bus.inline_bus; // common_hal_busio_i2c_construct(i2c, &pin_GPIO23, &pin_GPIO22, 100000, 0); - // common_hal_busio_i2c_never_reset(i2c); i2cdisplaybus_i2cdisplaybus_obj_t *bus = &allocate_display_bus()->i2cdisplay_bus; bus->base.type = &i2cdisplaybus_i2cdisplaybus_type; diff --git a/ports/espressif/boards/adafruit_funhouse/board.c b/ports/espressif/boards/adafruit_funhouse/board.c index 83499f5a492..5ced72da2aa 100644 --- a/ports/espressif/boards/adafruit_funhouse/board.c +++ b/ports/espressif/boards/adafruit_funhouse/board.c @@ -32,7 +32,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO36, &pin_GPIO35, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/adafruit_magtag_2.9_grayscale/board.c b/ports/espressif/boards/adafruit_magtag_2.9_grayscale/board.c index 61659755be2..91d94272267 100644 --- a/ports/espressif/boards/adafruit_magtag_2.9_grayscale/board.c +++ b/ports/espressif/boards/adafruit_magtag_2.9_grayscale/board.c @@ -283,7 +283,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO36, &pin_GPIO35, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/artisense_rd00/board.c b/ports/espressif/boards/artisense_rd00/board.c index 779dfb861e0..634683d053c 100644 --- a/ports/espressif/boards/artisense_rd00/board.c +++ b/ports/espressif/boards/artisense_rd00/board.c @@ -10,6 +10,4 @@ void board_init(void) { // Crystal - common_hal_never_reset_pin(&pin_GPIO15); - common_hal_never_reset_pin(&pin_GPIO16); } diff --git a/ports/espressif/boards/deshipu_ugame_s3/board.c b/ports/espressif/boards/deshipu_ugame_s3/board.c index dc09786e74c..599db3b8436 100644 --- a/ports/espressif/boards/deshipu_ugame_s3/board.c +++ b/ports/espressif/boards/deshipu_ugame_s3/board.c @@ -72,7 +72,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO12, &pin_GPIO11, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/elecrow_crowpanel_3.5/board.c b/ports/espressif/boards/elecrow_crowpanel_3.5/board.c index f52f23a9ae8..e1be66c7c51 100755 --- a/ports/espressif/boards/elecrow_crowpanel_3.5/board.c +++ b/ports/espressif/boards/elecrow_crowpanel_3.5/board.c @@ -49,7 +49,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO14, &pin_GPIO13, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/elecrow_crowpanel_4_2_epaper/board.c b/ports/espressif/boards/elecrow_crowpanel_4_2_epaper/board.c index c292ea113aa..38219e0c5e7 100644 --- a/ports/espressif/boards/elecrow_crowpanel_4_2_epaper/board.c +++ b/ports/espressif/boards/elecrow_crowpanel_4_2_epaper/board.c @@ -44,13 +44,11 @@ void board_init(void) { epd_enable_pin_obj.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&epd_enable_pin_obj, &pin_GPIO7); common_hal_digitalio_digitalinout_switch_to_output(&epd_enable_pin_obj, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&epd_enable_pin_obj); // Set up the SPI object used to control the display fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO12, &pin_GPIO11, NULL, false); - common_hal_busio_spi_never_reset(spi); // Set up the DisplayIO pin object bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/es3ink/board.c b/ports/espressif/boards/es3ink/board.c index 1ecda1cd7f6..868faa6b647 100644 --- a/ports/espressif/boards/es3ink/board.c +++ b/ports/espressif/boards/es3ink/board.c @@ -11,8 +11,6 @@ void board_init(void) { // Debug UART #ifdef DEBUG - common_hal_never_reset_pin(&pin_GPIO43); - common_hal_never_reset_pin(&pin_GPIO44); #endif /* DEBUG */ } diff --git a/ports/espressif/boards/espressif_esp32s3_box/board.c b/ports/espressif/boards/espressif_esp32s3_box/board.c index a27411fd79c..86ba94e67b9 100644 --- a/ports/espressif/boards/espressif_esp32s3_box/board.c +++ b/ports/espressif/boards/espressif_esp32s3_box/board.c @@ -26,7 +26,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO7, &pin_GPIO6, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/espressif_esp32s3_box_lite/board.c b/ports/espressif/boards/espressif_esp32s3_box_lite/board.c index 48a49e03bc3..0a732220337 100644 --- a/ports/espressif/boards/espressif_esp32s3_box_lite/board.c +++ b/ports/espressif/boards/espressif_esp32s3_box_lite/board.c @@ -27,7 +27,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO7, &pin_GPIO6, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/espressif_esp32s3_devkitc_1_n8r8_hacktablet/board.c b/ports/espressif/boards/espressif_esp32s3_devkitc_1_n8r8_hacktablet/board.c index f8435df23f7..3fe525eb712 100644 --- a/ports/espressif/boards/espressif_esp32s3_devkitc_1_n8r8_hacktablet/board.c +++ b/ports/espressif/boards/espressif_esp32s3_devkitc_1_n8r8_hacktablet/board.c @@ -41,7 +41,6 @@ static void display_init(void) { // Turn on backlight // gpio_set_direction(2, GPIO_MODE_DEF_OUTPUT); // gpio_set_level(2, true); - common_hal_never_reset_pin(&pin_GPIO39); dotclockframebuffer_framebuffer_obj_t *framebuffer = &allocate_display_bus_or_raise()->dotclock; framebuffer->base.type = &dotclockframebuffer_framebuffer_type; diff --git a/ports/espressif/boards/espressif_esp32s3_usb_otg_n8/board.c b/ports/espressif/boards/espressif_esp32s3_usb_otg_n8/board.c index 96513a14741..4fa88f21f3d 100644 --- a/ports/espressif/boards/espressif_esp32s3_usb_otg_n8/board.c +++ b/ports/espressif/boards/espressif_esp32s3_usb_otg_n8/board.c @@ -55,7 +55,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO6, &pin_GPIO7, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/espressif_hmi_devkit_1/board.c b/ports/espressif/boards/espressif_hmi_devkit_1/board.c index ec73bf118fc..c6f54b8c80d 100644 --- a/ports/espressif/boards/espressif_hmi_devkit_1/board.c +++ b/ports/espressif/boards/espressif_hmi_devkit_1/board.c @@ -10,8 +10,6 @@ void board_init(void) { // Debug UART - common_hal_never_reset_pin(&pin_GPIO43); - common_hal_never_reset_pin(&pin_GPIO44); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/hardkernel_odroid_go/board.c b/ports/espressif/boards/hardkernel_odroid_go/board.c index 0c2fe8a87c3..34a20d3edb4 100644 --- a/ports/espressif/boards/hardkernel_odroid_go/board.c +++ b/ports/espressif/boards/hardkernel_odroid_go/board.c @@ -47,7 +47,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO23, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/heltec_esp32s3_wifi_lora_v3/board.c b/ports/espressif/boards/heltec_esp32s3_wifi_lora_v3/board.c index d0ae1465042..0960047c0a7 100644 --- a/ports/espressif/boards/heltec_esp32s3_wifi_lora_v3/board.c +++ b/ports/espressif/boards/heltec_esp32s3_wifi_lora_v3/board.c @@ -38,7 +38,6 @@ static void display_init(void) { // & the board can't see the i2c bus at all. common_hal_digitalio_digitalinout_construct(&display_on, &pin_GPIO36); common_hal_digitalio_digitalinout_switch_to_output(&display_on, false, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&display_on); busio_i2c_obj_t *i2c = common_hal_board_create_i2c(0); diff --git a/ports/espressif/boards/heltec_vision_master_e290/board.c b/ports/espressif/boards/heltec_vision_master_e290/board.c index 5a102c7119b..178141b4737 100644 --- a/ports/espressif/boards/heltec_vision_master_e290/board.c +++ b/ports/espressif/boards/heltec_vision_master_e290/board.c @@ -42,13 +42,11 @@ void board_init(void) { vext_pin_obj.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&vext_pin_obj, &pin_GPIO18); common_hal_digitalio_digitalinout_switch_to_output(&vext_pin_obj, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&vext_pin_obj); // Set up the SPI object used to control the display fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO2, &pin_GPIO1, NULL, false); - common_hal_busio_spi_never_reset(spi); // Set up the DisplayIO pin object bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/heltec_wireless_paper/board.c b/ports/espressif/boards/heltec_wireless_paper/board.c index 38f6472e085..dfdf1d04f9d 100644 --- a/ports/espressif/boards/heltec_wireless_paper/board.c +++ b/ports/espressif/boards/heltec_wireless_paper/board.c @@ -82,13 +82,11 @@ void board_init(void) { vext_pin_obj.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&vext_pin_obj, &pin_GPIO45); common_hal_digitalio_digitalinout_switch_to_output(&vext_pin_obj, false, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&vext_pin_obj); // Set up the SPI object used to control the display fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO3, &pin_GPIO2, NULL, false); - common_hal_busio_spi_never_reset(spi); // Set up the DisplayIO pin object bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/hiibot_iots2/board.c b/ports/espressif/boards/hiibot_iots2/board.c index e3af7b45835..33256ea4616 100644 --- a/ports/espressif/boards/hiibot_iots2/board.c +++ b/ports/espressif/boards/hiibot_iots2/board.c @@ -55,7 +55,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/lilygo_tdongle_s3/board.c b/ports/espressif/boards/lilygo_tdongle_s3/board.c index 47fef9ee214..dbb1f1be2f7 100644 --- a/ports/espressif/boards/lilygo_tdongle_s3/board.c +++ b/ports/espressif/boards/lilygo_tdongle_s3/board.c @@ -53,7 +53,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/lilygo_tembed_esp32s3/board.c b/ports/espressif/boards/lilygo_tembed_esp32s3/board.c index 46e2ecf863c..8d921b65177 100644 --- a/ports/espressif/boards/lilygo_tembed_esp32s3/board.c +++ b/ports/espressif/boards/lilygo_tembed_esp32s3/board.c @@ -27,7 +27,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO12, &pin_GPIO11, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/lilygo_ttgo_t8_s2_st7789/board.c b/ports/espressif/boards/lilygo_ttgo_t8_s2_st7789/board.c index 6fcfb5c19a4..4efcfe0d2ca 100644 --- a/ports/espressif/boards/lilygo_ttgo_t8_s2_st7789/board.c +++ b/ports/espressif/boards/lilygo_ttgo_t8_s2_st7789/board.c @@ -55,7 +55,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_16m/board.c b/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_16m/board.c index 8ed5462a2d3..210b132198d 100644 --- a/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_16m/board.c +++ b/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_16m/board.c @@ -35,7 +35,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_4m/board.c b/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_4m/board.c index a90cc5eb66a..36feca47241 100644 --- a/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_4m/board.c +++ b/ports/espressif/boards/lilygo_ttgo_tdisplay_esp32_4m/board.c @@ -34,7 +34,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/lilygo_twatch_2020_v3/board.c b/ports/espressif/boards/lilygo_twatch_2020_v3/board.c index 5ea85ec00c6..e395d4482c5 100644 --- a/ports/espressif/boards/lilygo_twatch_2020_v3/board.c +++ b/ports/espressif/boards/lilygo_twatch_2020_v3/board.c @@ -39,7 +39,6 @@ static void display_init(void) { false // Not half-duplex ); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/lolin_s3_mini_pro/board.c b/ports/espressif/boards/lolin_s3_mini_pro/board.c index 39e645bc7b5..564218e9016 100644 --- a/ports/espressif/boards/lolin_s3_mini_pro/board.c +++ b/ports/espressif/boards/lolin_s3_mini_pro/board.c @@ -33,7 +33,6 @@ void board_init(void) { // busio_spi_obj_t *spi = common_hal_board_create_spi(0); busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO40, &pin_GPIO38, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/espressif/boards/m5stack_atoms3/board.c b/ports/espressif/boards/m5stack_atoms3/board.c index 3dbd8a1a2b8..98f4188c694 100644 --- a/ports/espressif/boards/m5stack_atoms3/board.c +++ b/ports/espressif/boards/m5stack_atoms3/board.c @@ -33,7 +33,6 @@ void board_init(void) { // busio_spi_obj_t *spi = common_hal_board_create_spi(0); busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO17, &pin_GPIO21, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/espressif/boards/m5stack_cores3/board.c b/ports/espressif/boards/m5stack_cores3/board.c index e4e178ee3c9..ed93c914b4f 100644 --- a/ports/espressif/boards/m5stack_cores3/board.c +++ b/ports/espressif/boards/m5stack_cores3/board.c @@ -41,7 +41,6 @@ static bool display_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO36, &pin_GPIO37, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/espressif/boards/m5stack_cores3_se/board.c b/ports/espressif/boards/m5stack_cores3_se/board.c index cb0ed4aea06..08ddfeebd85 100644 --- a/ports/espressif/boards/m5stack_cores3_se/board.c +++ b/ports/espressif/boards/m5stack_cores3_se/board.c @@ -42,7 +42,6 @@ static bool display_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO36, &pin_GPIO37, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/espressif/boards/m5stack_m5paper/board.c b/ports/espressif/boards/m5stack_m5paper/board.c index db68df79c42..16bd4084707 100644 --- a/ports/espressif/boards/m5stack_m5paper/board.c +++ b/ports/espressif/boards/m5stack_m5paper/board.c @@ -27,7 +27,6 @@ void board_init(void) { // // Set up the SPI object used to control the display // busio_spi_obj_t *spi = common_hal_board_create_spi(0); - // common_hal_busio_spi_never_reset(spi); // // Set up the DisplayIO pin object // fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; diff --git a/ports/espressif/boards/m5stack_stick_c/board.c b/ports/espressif/boards/m5stack_stick_c/board.c index 491ddead860..02c574bde7c 100644 --- a/ports/espressif/boards/m5stack_stick_c/board.c +++ b/ports/espressif/boards/m5stack_stick_c/board.c @@ -147,7 +147,6 @@ static bool display_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO13, &pin_GPIO15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/m5stack_stick_c_plus/board.c b/ports/espressif/boards/m5stack_stick_c_plus/board.c index 8902521db8e..f573559f444 100644 --- a/ports/espressif/boards/m5stack_stick_c_plus/board.c +++ b/ports/espressif/boards/m5stack_stick_c_plus/board.c @@ -147,7 +147,6 @@ static bool display_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO13, &pin_GPIO15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/m5stack_stick_c_plus2/board.c b/ports/espressif/boards/m5stack_stick_c_plus2/board.c index d84faa1888d..bc61008e1a1 100644 --- a/ports/espressif/boards/m5stack_stick_c_plus2/board.c +++ b/ports/espressif/boards/m5stack_stick_c_plus2/board.c @@ -43,7 +43,6 @@ static void display_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO13, &pin_GPIO15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/morpheans_morphesp-240/board.c b/ports/espressif/boards/morpheans_morphesp-240/board.c index 44266cce6ed..3ffadb2ac80 100644 --- a/ports/espressif/boards/morpheans_morphesp-240/board.c +++ b/ports/espressif/boards/morpheans_morphesp-240/board.c @@ -131,7 +131,6 @@ void board_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/oxocard_artwork/board.c b/ports/espressif/boards/oxocard_artwork/board.c index 5fe8e814558..062cd1da2f4 100644 --- a/ports/espressif/boards/oxocard_artwork/board.c +++ b/ports/espressif/boards/oxocard_artwork/board.c @@ -36,7 +36,6 @@ static void display_init(void) { &pin_GPIO12, // MISO false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/oxocard_connect/board.c b/ports/espressif/boards/oxocard_connect/board.c index 2c013811474..737788a7dbc 100644 --- a/ports/espressif/boards/oxocard_connect/board.c +++ b/ports/espressif/boards/oxocard_connect/board.c @@ -37,7 +37,6 @@ static void display_init(void) { &pin_GPIO12, // MISO false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/oxocard_galaxy/board.c b/ports/espressif/boards/oxocard_galaxy/board.c index 5fe8e814558..062cd1da2f4 100644 --- a/ports/espressif/boards/oxocard_galaxy/board.c +++ b/ports/espressif/boards/oxocard_galaxy/board.c @@ -36,7 +36,6 @@ static void display_init(void) { &pin_GPIO12, // MISO false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/oxocard_science/board.c b/ports/espressif/boards/oxocard_science/board.c index 5fe8e814558..062cd1da2f4 100644 --- a/ports/espressif/boards/oxocard_science/board.c +++ b/ports/espressif/boards/oxocard_science/board.c @@ -36,7 +36,6 @@ static void display_init(void) { &pin_GPIO12, // MISO false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/spotpear_esp32c3_lcd_1_44/board.c b/ports/espressif/boards/spotpear_esp32c3_lcd_1_44/board.c index f4288ae45ac..7b6e26ebe39 100644 --- a/ports/espressif/boards/spotpear_esp32c3_lcd_1_44/board.c +++ b/ports/espressif/boards/spotpear_esp32c3_lcd_1_44/board.c @@ -35,7 +35,6 @@ static bool display_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO3, &pin_GPIO4, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/spotpear_esp32c3_lcd_1_69/board.c b/ports/espressif/boards/spotpear_esp32c3_lcd_1_69/board.c index 30879e71404..cb9f0e857bb 100644 --- a/ports/espressif/boards/spotpear_esp32c3_lcd_1_69/board.c +++ b/ports/espressif/boards/spotpear_esp32c3_lcd_1_69/board.c @@ -33,7 +33,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO5, &pin_GPIO6, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/espressif/boards/sqfmi_watchy/board.c b/ports/espressif/boards/sqfmi_watchy/board.c index 9cea4e98095..de8be9e2289 100644 --- a/ports/espressif/boards/sqfmi_watchy/board.c +++ b/ports/espressif/boards/sqfmi_watchy/board.c @@ -137,14 +137,11 @@ const uint8_t refresh_sequence[] = { void board_init(void) { // Debug UART #ifdef DEBUG - common_hal_never_reset_pin(&pin_GPIO43); - common_hal_never_reset_pin(&pin_GPIO44); #endif /* DEBUG */ fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO23, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/espressif/boards/sunton_esp32_2424S012/board.c b/ports/espressif/boards/sunton_esp32_2424S012/board.c index 4e56bee7d8b..e3ccac05581 100644 --- a/ports/espressif/boards/sunton_esp32_2424S012/board.c +++ b/ports/espressif/boards/sunton_esp32_2424S012/board.c @@ -100,7 +100,6 @@ static void display_init(void) { NULL, // MISO not connected false // Not half-duplex ); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( bus, diff --git a/ports/espressif/boards/sunton_esp32_2432S024C/board.c b/ports/espressif/boards/sunton_esp32_2432S024C/board.c index d50f19f9972..b5cd7bb5445 100644 --- a/ports/espressif/boards/sunton_esp32_2432S024C/board.c +++ b/ports/espressif/boards/sunton_esp32_2432S024C/board.c @@ -46,7 +46,6 @@ static void display_init(void) { busio_spi_obj_t *spi = &bus->inline_bus; mp_int_t rotation; common_hal_busio_spi_construct(spi, &pin_GPIO14, &pin_GPIO13, &pin_GPIO12, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/sunton_esp32_2432S028/board.c b/ports/espressif/boards/sunton_esp32_2432S028/board.c index 6cd4a080c99..be6a1de8d85 100644 --- a/ports/espressif/boards/sunton_esp32_2432S028/board.c +++ b/ports/espressif/boards/sunton_esp32_2432S028/board.c @@ -46,7 +46,6 @@ static void display_init(void) { busio_spi_obj_t *spi = &bus->inline_bus; mp_int_t rotation; common_hal_busio_spi_construct(spi, &pin_GPIO14, &pin_GPIO13, &pin_GPIO12, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/sunton_esp32_8048S050/board.c b/ports/espressif/boards/sunton_esp32_8048S050/board.c index b1794529ff0..0d3d8f7e8f3 100644 --- a/ports/espressif/boards/sunton_esp32_8048S050/board.c +++ b/ports/espressif/boards/sunton_esp32_8048S050/board.c @@ -45,7 +45,6 @@ static void display_init(void) { // Turn on backlight gpio_set_direction(2, GPIO_MODE_DEF_OUTPUT); gpio_set_level(2, true); - common_hal_never_reset_pin(&pin_GPIO2); dotclockframebuffer_framebuffer_obj_t *framebuffer = &allocate_display_bus_or_raise()->dotclock; framebuffer->base.type = &dotclockframebuffer_framebuffer_type; diff --git a/ports/espressif/boards/sunton_esp32_8048S070/board.c b/ports/espressif/boards/sunton_esp32_8048S070/board.c index 3d6a9c81e6d..50b7cebc1db 100644 --- a/ports/espressif/boards/sunton_esp32_8048S070/board.c +++ b/ports/espressif/boards/sunton_esp32_8048S070/board.c @@ -42,7 +42,6 @@ static void display_init(void) { // Turn on backlight gpio_set_direction(2, GPIO_MODE_DEF_OUTPUT); gpio_set_level(2, true); - common_hal_never_reset_pin(&pin_GPIO2); dotclockframebuffer_framebuffer_obj_t *framebuffer = &allocate_display_bus_or_raise()->dotclock; framebuffer->base.type = &dotclockframebuffer_framebuffer_type; diff --git a/ports/espressif/boards/targett_module_clip_wroom/board.c b/ports/espressif/boards/targett_module_clip_wroom/board.c index a08886fda1d..2a68877035f 100644 --- a/ports/espressif/boards/targett_module_clip_wroom/board.c +++ b/ports/espressif/boards/targett_module_clip_wroom/board.c @@ -10,8 +10,6 @@ void board_init(void) { // Crystal - common_hal_never_reset_pin(&pin_GPIO15); - common_hal_never_reset_pin(&pin_GPIO16); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/targett_module_clip_wrover/board.c b/ports/espressif/boards/targett_module_clip_wrover/board.c index a08886fda1d..2a68877035f 100644 --- a/ports/espressif/boards/targett_module_clip_wrover/board.c +++ b/ports/espressif/boards/targett_module_clip_wrover/board.c @@ -10,8 +10,6 @@ void board_init(void) { // Crystal - common_hal_never_reset_pin(&pin_GPIO15); - common_hal_never_reset_pin(&pin_GPIO16); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/espressif/boards/vidi_x/board.c b/ports/espressif/boards/vidi_x/board.c index 57e2b896213..74cbed9f3b9 100644 --- a/ports/espressif/boards/vidi_x/board.c +++ b/ports/espressif/boards/vidi_x/board.c @@ -47,7 +47,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO23, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/waveshare_esp32_s2_pico_lcd/board.c b/ports/espressif/boards/waveshare_esp32_s2_pico_lcd/board.c index 0bf710ec34c..4d6fa945fc5 100644 --- a/ports/espressif/boards/waveshare_esp32_s2_pico_lcd/board.c +++ b/ports/espressif/boards/waveshare_esp32_s2_pico_lcd/board.c @@ -54,7 +54,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/espressif/boards/waveshare_esp32_s3_amoled_241/board.c b/ports/espressif/boards/waveshare_esp32_s3_amoled_241/board.c index 7b57f48bcdb..966ea8e8295 100644 --- a/ports/espressif/boards/waveshare_esp32_s3_amoled_241/board.c +++ b/ports/espressif/boards/waveshare_esp32_s3_amoled_241/board.c @@ -48,7 +48,6 @@ void board_init(void) { power_pin.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&power_pin, CIRCUITPY_LCD_POWER); common_hal_digitalio_digitalinout_set_value(&power_pin, true); - common_hal_digitalio_digitalinout_never_reset(&power_pin); // Allow power rail to settle before reset/init. mp_hal_delay_ms(200); diff --git a/ports/espressif/boards/waveshare_esp32_s3_lcd_1_28/board.c b/ports/espressif/boards/waveshare_esp32_s3_lcd_1_28/board.c index ee47ccb0bc9..fda6007da49 100644 --- a/ports/espressif/boards/waveshare_esp32_s3_lcd_1_28/board.c +++ b/ports/espressif/boards/waveshare_esp32_s3_lcd_1_28/board.c @@ -100,7 +100,6 @@ static void display_init(void) { NULL, // MISO not connected false // Not half-duplex ); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( bus, diff --git a/ports/espressif/boards/xteink_x4/board.c b/ports/espressif/boards/xteink_x4/board.c index b5b193c65fe..afb5848ef80 100644 --- a/ports/espressif/boards/xteink_x4/board.c +++ b/ports/espressif/boards/xteink_x4/board.c @@ -73,7 +73,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO8, &pin_GPIO10, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/espressif/boards/yoto_mini_2024/board.c b/ports/espressif/boards/yoto_mini_2024/board.c index fb6a96a957d..64aab7e8cb9 100644 --- a/ports/espressif/boards/yoto_mini_2024/board.c +++ b/ports/espressif/boards/yoto_mini_2024/board.c @@ -189,7 +189,6 @@ void board_init(void) { common_hal_sdioio_sdcard_deinit(&sdmmc); return; } - common_hal_sdioio_sdcard_never_reset(&sdmmc); filesystem_set_concurrent_write_protection(vfs, true); filesystem_set_writable_by_usb(vfs, false); diff --git a/ports/espressif/boards/yoto_player_v3/board.c b/ports/espressif/boards/yoto_player_v3/board.c index fd6ee40b9f3..0066b174814 100644 --- a/ports/espressif/boards/yoto_player_v3/board.c +++ b/ports/espressif/boards/yoto_player_v3/board.c @@ -134,7 +134,6 @@ void board_init(void) { common_hal_sdioio_sdcard_deinit(&sdmmc); return; } - common_hal_sdioio_sdcard_never_reset(&sdmmc); filesystem_set_concurrent_write_protection(vfs, true); filesystem_set_writable_by_usb(vfs, false); diff --git a/ports/espressif/common-hal/alarm/pin/PinAlarm.c b/ports/espressif/common-hal/alarm/pin/PinAlarm.c index 3301612356b..ee20f494b4e 100644 --- a/ports/espressif/common-hal/alarm/pin/PinAlarm.c +++ b/ports/espressif/common-hal/alarm/pin/PinAlarm.c @@ -390,7 +390,6 @@ void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_ob if (low) { intr = GPIO_INTR_LOW_LEVEL; } - never_reset_pin_number(pin); gpio_wakeup_enable(pin, intr); gpio_set_intr_type(pin, intr); gpio_intr_enable(pin); diff --git a/ports/espressif/common-hal/alarm/touch/TouchAlarm.c b/ports/espressif/common-hal/alarm/touch/TouchAlarm.c index 93756b3c2ca..bd7e2ba1bc9 100644 --- a/ports/espressif/common-hal/alarm/touch/TouchAlarm.c +++ b/ports/espressif/common-hal/alarm/touch/TouchAlarm.c @@ -75,8 +75,6 @@ void alarm_touch_touchalarm_set_alarm(const bool deep_sleep, const size_t n_alar } touch_alarm = MP_OBJ_TO_PTR(alarms[i]); touch_channel_mask |= 1 << touch_alarm->pin->touch_channel; - // Resetting the pin will set a pull-up, which we don't want. - skip_reset_once_pin_number(touch_alarm->pin->number); touch_alarm_set = true; } } @@ -85,9 +83,8 @@ void alarm_touch_touchalarm_set_alarm(const bool deep_sleep, const size_t n_alar return; } - // Reset touch peripheral and keep it from being reset again + // Reset touch peripheral peripherals_touch_reset(); - peripherals_touch_never_reset(true); // Initialize all touch channels used for alarms for (uint8_t i = TOUCH_MIN_CHAN_ID; i <= TOUCH_MAX_CHAN_ID; i++) { @@ -210,5 +207,4 @@ bool alarm_touch_touchalarm_woke_this_cycle(void) { void alarm_touch_touchalarm_reset(void) { woke_up = false; touch_channel_mask = 0; - peripherals_touch_never_reset(false); } diff --git a/ports/espressif/common-hal/busio/I2C.c b/ports/espressif/common-hal/busio/I2C.c index 30f16276eae..d2655fad972 100644 --- a/ports/espressif/common-hal/busio/I2C.c +++ b/ports/espressif/common-hal/busio/I2C.c @@ -247,7 +247,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 return convert_esp_err(result); } -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - common_hal_never_reset_pin(self->scl_pin); - common_hal_never_reset_pin(self->sda_pin); -} diff --git a/ports/espressif/common-hal/busio/SPI.c b/ports/espressif/common-hal/busio/SPI.c index b85f8cddd2a..006e2c86066 100644 --- a/ports/espressif/common-hal/busio/SPI.c +++ b/ports/espressif/common-hal/busio/SPI.c @@ -148,15 +148,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, claim_pin(clock); } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - common_hal_never_reset_pin(self->clock); - if (self->MOSI != NULL) { - common_hal_never_reset_pin(self->MOSI); - } - if (self->MISO != NULL) { - common_hal_never_reset_pin(self->MISO); - } -} bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->clock == NULL; diff --git a/ports/espressif/common-hal/busio/UART.c b/ports/espressif/common-hal/busio/UART.c index 01c8321843a..158076317c6 100644 --- a/ports/espressif/common-hal/busio/UART.c +++ b/ports/espressif/common-hal/busio/UART.c @@ -20,7 +20,6 @@ #include "supervisor/port.h" #include "supervisor/shared/tick.h" -static uint8_t never_reset_uart_mask = 0; static void uart_event_task(void *param) { busio_uart_obj_t *self = param; @@ -52,27 +51,7 @@ static void uart_event_task(void *param) { } } -void uart_reset(void) { - for (uart_port_t num = 0; num < UART_NUM_MAX; num++) { - #ifdef CONFIG_ESP_CONSOLE_UART_NUM - // Do not reset the UART used by the IDF for logging. - if ((int)num == CONFIG_ESP_CONSOLE_UART_NUM) { - continue; - } - #endif - if (uart_is_driver_installed(num) && !(never_reset_uart_mask & (1 << num))) { - uart_driver_delete(num); - } - } -} -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - common_hal_never_reset_pin(self->rx_pin); - common_hal_never_reset_pin(self->tx_pin); - common_hal_never_reset_pin(self->rts_pin); - common_hal_never_reset_pin(self->cts_pin); - never_reset_uart_mask |= 1 << self->uart_num; -} void common_hal_busio_uart_construct(busio_uart_obj_t *self, const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx, diff --git a/ports/espressif/common-hal/busio/UART.h b/ports/espressif/common-hal/busio/UART.h index b84ef298a7d..2841822029d 100644 --- a/ports/espressif/common-hal/busio/UART.h +++ b/ports/espressif/common-hal/busio/UART.h @@ -29,5 +29,3 @@ typedef struct { QueueHandle_t event_queue; TaskHandle_t event_task; } busio_uart_obj_t; - -void uart_reset(void); diff --git a/ports/espressif/common-hal/digitalio/DigitalInOut.c b/ports/espressif/common-hal/digitalio/DigitalInOut.c index e4272ba1ff5..b528c073205 100644 --- a/ports/espressif/common-hal/digitalio/DigitalInOut.c +++ b/ports/espressif/common-hal/digitalio/DigitalInOut.c @@ -27,10 +27,6 @@ void digitalio_digitalinout_preserve_for_deep_sleep(size_t n_dios, digitalio_dig } } -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} digitalinout_result_t common_hal_digitalio_digitalinout_construct( digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) { diff --git a/ports/espressif/common-hal/dotclockframebuffer/DotClockFramebuffer.c b/ports/espressif/common-hal/dotclockframebuffer/DotClockFramebuffer.c index 5df379432a9..2154b01a452 100644 --- a/ports/espressif/common-hal/dotclockframebuffer/DotClockFramebuffer.c +++ b/ports/espressif/common-hal/dotclockframebuffer/DotClockFramebuffer.c @@ -48,7 +48,6 @@ static void claim_and_record(const mcu_pin_obj_t *pin, uint64_t *used_pins_mask) int number = common_hal_mcu_pin_number(pin); *used_pins_mask |= (UINT64_C(1) << number); claim_pin_number(number); - never_reset_pin_number(number); } } diff --git a/ports/espressif/common-hal/espulp/ULP.c b/ports/espressif/common-hal/espulp/ULP.c index 7756054b06a..199af79de00 100644 --- a/ports/espressif/common-hal/espulp/ULP.c +++ b/ports/espressif/common-hal/espulp/ULP.c @@ -69,7 +69,6 @@ void common_hal_espulp_ulp_run(espulp_ulp_obj_t *self, uint32_t *program, size_t for (uint8_t i = 0; i < 32; i++) { if ((pin_mask & (1 << i)) != 0) { claim_pin_number(i); - never_reset_pin_number(i); } } pins_used = pin_mask; diff --git a/ports/espressif/common-hal/microcontroller/Pin.c b/ports/espressif/common-hal/microcontroller/Pin.c index 0c49318f4bc..942a2ffe827 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.c +++ b/ports/espressif/common-hal/microcontroller/Pin.c @@ -14,8 +14,6 @@ #include "driver/gpio.h" #include "soc/gpio_periph.h" -static uint64_t _never_reset_pin_mask; -static uint64_t _skip_reset_once_pin_mask; static uint64_t _preserved_pin_mask; static uint64_t _in_use_pin_mask; @@ -297,31 +295,6 @@ static const uint64_t pin_mask_reset_forbidden = -void never_reset_pin_number(gpio_num_t pin_number) { - // Some CircuitPython APIs deal in uint8_t pin numbers, but NO_PIN is -1. - // Also allow pin 255 to be treated as NO_PIN to avoid crashes - if (pin_number == NO_PIN || pin_number == (uint8_t)NO_PIN) { - return; - } - _never_reset_pin_mask |= PIN_BIT(pin_number); -} - -void skip_reset_once_pin_number(gpio_num_t pin_number) { - // Some CircuitPython APIs deal in uint8_t pin numbers, but NO_PIN is -1. - // Also allow pin 255 to be treated as NO_PIN to avoid crashes - if (pin_number == NO_PIN || pin_number == (uint8_t)NO_PIN) { - return; - } - _skip_reset_once_pin_mask |= PIN_BIT(pin_number); -} - -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - if (pin == NULL) { - return; - } - never_reset_pin_number(pin->number); -} - MP_WEAK bool espressif_board_reset_pin_number(gpio_num_t pin_number) { return false; } @@ -330,17 +303,6 @@ static bool _reset_forbidden(gpio_num_t pin_number) { return pin_mask_reset_forbidden & PIN_BIT(pin_number); } -static bool _never_reset(gpio_num_t pin_number) { - return _never_reset_pin_mask & PIN_BIT(pin_number); -} - -static bool _skip_reset_once(gpio_num_t pin_number) { - return _skip_reset_once_pin_mask & PIN_BIT(pin_number); -} - -static bool _preserved_pin(gpio_num_t pin_number) { - return _preserved_pin_mask & PIN_BIT(pin_number); -} static void _reset_pin(gpio_num_t pin_number) { // Never ever reset pins used for flash, RAM, and basic communication. @@ -407,7 +369,6 @@ void reset_pin_number(gpio_num_t pin_number) { if (pin_number == NO_PIN || pin_number == (uint8_t)NO_PIN) { return; } - _never_reset_pin_mask &= ~PIN_BIT(pin_number); _in_use_pin_mask &= ~PIN_BIT(pin_number); _reset_pin(pin_number); @@ -432,27 +393,6 @@ void common_hal_reset_pin(const mcu_pin_obj_t *pin) { reset_pin_number(pin->number); } -void reset_all_pins(void) { - // Undo deep sleep holds in case we woke up from deep sleep. - // We still need to unhold individual pins, which is done by _reset_pin. - #if defined(SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP) && !SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP - gpio_deep_sleep_hold_dis(); - #endif - - for (gpio_num_t i = 0; i < SOC_GPIO_PIN_COUNT; i++) { - if (!GPIO_IS_VALID_GPIO(i) || - _never_reset(i) || - _skip_reset_once(i) || - _preserved_pin(i)) { - continue; - } - _reset_pin(i); - } - _in_use_pin_mask = _never_reset_pin_mask | pin_mask_reset_forbidden; - // Don't continue to skip resetting these pins. - _skip_reset_once_pin_mask = 0; -} - void claim_pin_number(gpio_num_t pin_number) { // Some CircuitPython APIs deal in uint8_t pin numbers, but NO_PIN is -1. // Also allow pin 255 to be treated as NO_PIN to avoid crashes diff --git a/ports/espressif/common-hal/microcontroller/Pin.h b/ports/espressif/common-hal/microcontroller/Pin.h index 7925ac9f8de..bc00a27c6d6 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.h +++ b/ports/espressif/common-hal/microcontroller/Pin.h @@ -14,19 +14,13 @@ #define PIN_BIT(pin_number) (((uint64_t)1) << pin_number) extern void common_hal_reset_pin(const mcu_pin_obj_t *pin); -extern void common_hal_never_reset_pin(const mcu_pin_obj_t *pin); -extern void reset_all_pins(void); -// reset_pin_number takes the pin number instead of the pointer so that objects don't -// need to store a full pointer. extern void reset_pin_number(gpio_num_t pin_number); // reset all pins in `bitmask` extern void reset_pin_mask(uint64_t bitmask); -extern void skip_reset_once_pin_number(gpio_num_t pin_number); extern void claim_pin(const mcu_pin_obj_t *pin); extern void claim_pin_number(gpio_num_t pin_number); extern bool pin_number_is_free(gpio_num_t pin_number); -extern void never_reset_pin_number(gpio_num_t pin_number); extern void preserve_pin_number(gpio_num_t pin_number); diff --git a/ports/espressif/common-hal/mipidsi/Display.c b/ports/espressif/common-hal/mipidsi/Display.c index dc70f901437..398a800c7df 100644 --- a/ports/espressif/common-hal/mipidsi/Display.c +++ b/ports/espressif/common-hal/mipidsi/Display.c @@ -147,15 +147,12 @@ void common_hal_mipidsi_display_construct(mipidsi_display_obj_t *self, if (result != PWMOUT_OK) { self->backlight_inout.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->backlight_inout, backlight_pin); - common_hal_never_reset_pin(backlight_pin); } else { self->backlight_pwm.base.type = &pwmio_pwmout_type; - common_hal_pwmio_pwmout_never_reset(&self->backlight_pwm); } #else self->backlight_inout.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->backlight_inout, backlight_pin); - common_hal_never_reset_pin(backlight_pin); #endif // Set initial brightness diff --git a/ports/espressif/common-hal/paralleldisplaybus/ParallelBus.c b/ports/espressif/common-hal/paralleldisplaybus/ParallelBus.c index 52c4b67bf4e..543b5c1e7e9 100644 --- a/ports/espressif/common-hal/paralleldisplaybus/ParallelBus.c +++ b/ports/espressif/common-hal/paralleldisplaybus/ParallelBus.c @@ -70,7 +70,6 @@ void common_hal_paralleldisplaybus_parallelbus_construct_nonsequential(paralleld CHECK_ESP_RESULT(esp_lcd_new_panel_io_i80(self->bus_handle, &panel_io_config, &self->panel_io_handle)); if (read != NULL) { - common_hal_never_reset_pin(read); gpio_config_t read_config = { .pin_bit_mask = 1ull << read->number, .mode = GPIO_MODE_OUTPUT, @@ -85,7 +84,6 @@ void common_hal_paralleldisplaybus_parallelbus_construct_nonsequential(paralleld self->reset_pin_number = NO_PIN; if (reset != NULL) { - common_hal_never_reset_pin(reset); self->reset_pin_number = reset->number; } @@ -100,13 +98,6 @@ void common_hal_paralleldisplaybus_parallelbus_construct_nonsequential(paralleld gpio_config(&chip_select_config); gpio_set_level(self->cs_pin_number, true); - common_hal_never_reset_pin(chip_select); - common_hal_never_reset_pin(command); - common_hal_never_reset_pin(write); - - for (uint8_t i = 0; i < n_pins; i++) { - common_hal_never_reset_pin(data_pins[i]); - } } diff --git a/ports/espressif/common-hal/pwmio/PWMOut.c b/ports/espressif/common-hal/pwmio/PWMOut.c index e3560df60b8..b690c3cf535 100644 --- a/ports/espressif/common-hal/pwmio/PWMOut.c +++ b/ports/espressif/common-hal/pwmio/PWMOut.c @@ -120,9 +120,6 @@ pwmout_result_t common_hal_pwmio_pwmout_construct(pwmio_pwmout_obj_t *self, return PWMOUT_OK; } -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} bool common_hal_pwmio_pwmout_deinited(pwmio_pwmout_obj_t *self) { return self->deinited == true; diff --git a/ports/espressif/common-hal/sdioio/SDCard.c b/ports/espressif/common-hal/sdioio/SDCard.c index 35850f2f8ae..67df073f1fd 100644 --- a/ports/espressif/common-hal/sdioio/SDCard.c +++ b/ports/espressif/common-hal/sdioio/SDCard.c @@ -21,7 +21,6 @@ static const char *TAG = "SDCard.c"; static bool slot_in_use[2]; -static bool never_reset_sdio[2] = { false, false }; static bool host_initialized = false; static void common_hal_sdioio_sdcard_check_for_deinit(sdioio_sdcard_obj_t *self) { @@ -251,7 +250,6 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { return; } - never_reset_sdio[get_slot_index(self)] = false; slot_in_use[get_slot_index(self)] = false; if (!slot_in_use[0] && !slot_in_use[1] && host_initialized) { @@ -271,35 +269,3 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { return; } -void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { - if (common_hal_sdioio_sdcard_deinited(self)) { - return; - } - - if (never_reset_sdio[get_slot_index(self)]) { - return; - } - - never_reset_sdio[get_slot_index(self)] = true; - - never_reset_pin_number(self->command); - never_reset_pin_number(self->clock); - - for (size_t i = 0; i < self->num_data; i++) { - never_reset_pin_number(self->data[i]); - } -} - -void sdioio_reset(void) { - for (size_t i = 0; i < MP_ARRAY_SIZE(slot_in_use); i++) { - if (!never_reset_sdio[i]) { - slot_in_use[i] = false; - } - } - if (!slot_in_use[0] && !slot_in_use[1] && host_initialized) { - sdmmc_host_deinit(); - host_initialized = false; - } - - return; -} diff --git a/ports/espressif/common-hal/sdioio/SDCard.h b/ports/espressif/common-hal/sdioio/SDCard.h index 03fb82b37d5..0c39eb9f50f 100644 --- a/ports/espressif/common-hal/sdioio/SDCard.h +++ b/ports/espressif/common-hal/sdioio/SDCard.h @@ -23,6 +23,4 @@ typedef struct { uint32_t capacity; } sdioio_sdcard_obj_t; -void sdioio_reset(void); - uint8_t get_slot_index(sdioio_sdcard_obj_t *); diff --git a/ports/espressif/module/cardputer_keyboard.c b/ports/espressif/module/cardputer_keyboard.c index 548275001ac..9344ca5a84d 100644 --- a/ports/espressif/module/cardputer_keyboard.c +++ b/ports/espressif/module/cardputer_keyboard.c @@ -118,7 +118,6 @@ static void cardputer_keyboard_init(void) { false // use_gc_allocator ); - demuxkeymatrix_never_reset(&cardputer_keyboard); ringbuf_init(&keyqueue, (uint8_t *)keybuf, sizeof(keybuf)); attach_serial(); } diff --git a/ports/espressif/peripherals/touch.c b/ports/espressif/peripherals/touch.c index fd8436119aa..65afa1e32f4 100644 --- a/ports/espressif/peripherals/touch.c +++ b/ports/espressif/peripherals/touch.c @@ -8,7 +8,6 @@ static touch_sensor_handle_t touch_controller = NULL; static touch_channel_handle_t touch_channels[TOUCH_TOTAL_CHAN_NUM] = {NULL}; -static bool touch_never_reset_flag = false; static bool touch_enabled = false; static bool touch_scanning = false; @@ -25,7 +24,7 @@ touch_channel_handle_t peripherals_touch_get_handle(int channel_id) { } void peripherals_touch_reset(void) { - if (touch_controller != NULL && !touch_never_reset_flag) { + if (touch_controller != NULL) { if (touch_scanning) { touch_sensor_stop_continuous_scanning(touch_controller); touch_scanning = false; @@ -45,10 +44,6 @@ void peripherals_touch_reset(void) { } } -void peripherals_touch_never_reset(const bool enable) { - touch_never_reset_flag = enable; -} - void peripherals_touch_init(const int channel_id) { int idx = chan_index(channel_id); diff --git a/ports/espressif/peripherals/touch.h b/ports/espressif/peripherals/touch.h index 00a96193c88..602fbac0595 100644 --- a/ports/espressif/peripherals/touch.h +++ b/ports/espressif/peripherals/touch.h @@ -11,6 +11,5 @@ extern void peripherals_touch_init(const int channel_id); extern uint16_t peripherals_touch_read(int channel_id); extern void peripherals_touch_reset(void); -extern void peripherals_touch_never_reset(const bool enable); extern touch_sensor_handle_t peripherals_touch_get_controller(void); extern touch_channel_handle_t peripherals_touch_get_handle(int channel_id); diff --git a/ports/espressif/supervisor/port.c b/ports/espressif/supervisor/port.c index f0308975a1e..1f0d3042c65 100644 --- a/ports/espressif/supervisor/port.c +++ b/ports/espressif/supervisor/port.c @@ -176,61 +176,6 @@ void sleep_timer_cb(void *arg); #define PICO_V3_02_PSRAM_CS_IO 9 #endif // CONFIG_SPIRAM -static void _never_reset_spi_ram_flash(void) { - #if defined(CONFIG_IDF_TARGET_ESP32) - #if defined(CONFIG_SPIRAM) - uint32_t pkg_ver = esp_efuse_get_pkg_ver(); - if (pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32D2WDQ5) { - never_reset_pin_number(D2WD_PSRAM_CLK_IO); - never_reset_pin_number(D2WD_PSRAM_CS_IO); - } else if (pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOD4 && efuse_hal_get_major_chip_version() >= 3) { - // This chip is ESP32-PICO-V3 and doesn't have PSRAM. - } else if ((pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOD2) || (pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOD4)) { - never_reset_pin_number(PICO_PSRAM_CLK_IO); - never_reset_pin_number(PICO_PSRAM_CS_IO); - } else if (pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32PICOV302) { - never_reset_pin_number(PICO_V3_02_PSRAM_CLK_IO); - never_reset_pin_number(PICO_V3_02_PSRAM_CS_IO); - } else if ((pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32D0WDQ6) || (pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32D0WDQ5)) { - never_reset_pin_number(D0WD_PSRAM_CLK_IO); - never_reset_pin_number(D0WD_PSRAM_CS_IO); - } else if (pkg_ver == EFUSE_RD_CHIP_VER_PKG_ESP32D0WDR2V3) { - never_reset_pin_number(D0WDR2_V3_PSRAM_CLK_IO); - never_reset_pin_number(D0WDR2_V3_PSRAM_CS_IO); - } - #endif // CONFIG_SPIRAM - - const uint32_t spiconfig = esp_rom_efuse_get_flash_gpio_info(); - if (spiconfig == ESP_ROM_EFUSE_FLASH_DEFAULT_SPI) { - never_reset_pin_number(MSPI_IOMUX_PIN_NUM_CLK); - never_reset_pin_number(MSPI_IOMUX_PIN_NUM_CS0); - never_reset_pin_number(PSRAM_SPIQ_SD0_IO); - never_reset_pin_number(PSRAM_SPID_SD1_IO); - never_reset_pin_number(PSRAM_SPIWP_SD3_IO); - never_reset_pin_number(PSRAM_SPIHD_SD2_IO); - } else if (spiconfig == ESP_ROM_EFUSE_FLASH_DEFAULT_HSPI) { - never_reset_pin_number(FLASH_HSPI_CLK_IO); - never_reset_pin_number(FLASH_HSPI_CS_IO); - never_reset_pin_number(PSRAM_HSPI_SPIQ_SD0_IO); - never_reset_pin_number(PSRAM_HSPI_SPID_SD1_IO); - never_reset_pin_number(PSRAM_HSPI_SPIWP_SD3_IO); - never_reset_pin_number(PSRAM_HSPI_SPIHD_SD2_IO); - } else { - never_reset_pin_number(EFUSE_SPICONFIG_RET_SPICLK(spiconfig)); - never_reset_pin_number(EFUSE_SPICONFIG_RET_SPICS0(spiconfig)); - never_reset_pin_number(EFUSE_SPICONFIG_RET_SPIQ(spiconfig)); - never_reset_pin_number(EFUSE_SPICONFIG_RET_SPID(spiconfig)); - never_reset_pin_number(EFUSE_SPICONFIG_RET_SPIHD(spiconfig)); - never_reset_pin_number(bootloader_flash_get_wp_pin()); - } - #endif // CONFIG_IDF_TARGET_ESP32 - #if defined(CONFIG_IDF_TARGET_ESP32C61) - #if defined(CONFIG_SPIRAM) - common_hal_never_reset_pin(&pin_GPIO14); - #endif - #endif -} - safe_mode_t port_init(void) { esp_timer_create_args_t args; args.callback = &tick_timer_cb; @@ -259,41 +204,6 @@ safe_mode_t port_init(void) { #define pin_GPIOn(n) pin_GPIO##n #define pin_GPIOn_EXPAND(x) pin_GPIOn(x) - #ifdef CONFIG_ESP_CONSOLE_UART_TX_GPIO - common_hal_never_reset_pin(&pin_GPIOn_EXPAND(CONFIG_ESP_CONSOLE_UART_TX_GPIO)); - #endif - - #ifdef CONFIG_ESP_CONSOLE_UART_RX_GPIO - common_hal_never_reset_pin(&pin_GPIOn_EXPAND(CONFIG_ESP_CONSOLE_UART_RX_GPIO)); - #endif - - #ifndef ENABLE_JTAG - #define ENABLE_JTAG (0) - #endif - - #if ENABLE_JTAG - ESP_LOGI(TAG, "Marking JTAG pins never_reset"); - // JTAG - #if defined(CONFIG_IDF_TARGET_ESP32C3) || defined(CONFIG_IDF_TARGET_ESP32C6) - common_hal_never_reset_pin(&pin_GPIO4); - common_hal_never_reset_pin(&pin_GPIO5); - common_hal_never_reset_pin(&pin_GPIO6); - common_hal_never_reset_pin(&pin_GPIO7); - #elif defined(CONFIG_IDF_TARGET_ESP32S2) || defined(CONFIG_IDF_TARGET_ESP32S3) - common_hal_never_reset_pin(&pin_GPIO39); - common_hal_never_reset_pin(&pin_GPIO40); - common_hal_never_reset_pin(&pin_GPIO41); - common_hal_never_reset_pin(&pin_GPIO42); - #elif defined(CONFIG_IDF_TARGET_ESP32P4) || defined(CONFIG_IDF_TARGET_ESP32C61) - common_hal_never_reset_pin(&pin_GPIO3); - common_hal_never_reset_pin(&pin_GPIO4); - common_hal_never_reset_pin(&pin_GPIO5); - common_hal_never_reset_pin(&pin_GPIO6); - #endif - #endif - - _never_reset_spi_ram_flash(); - esp_reset_reason_t reason = esp_reset_reason(); switch (reason) { case ESP_RST_BROWNOUT: @@ -424,13 +334,7 @@ void reset_port(void) { analogout_reset(); #endif - #if CIRCUITPY_BUSIO - uart_reset(); - #endif - #if CIRCUITPY_SDIOIO - sdioio_reset(); - #endif #if CIRCUITPY_DUALBANK dualbank_reset(); diff --git a/ports/litex/common-hal/digitalio/DigitalInOut.c b/ports/litex/common-hal/digitalio/DigitalInOut.c index 30dd3f4addf..3cbb4c68f0e 100644 --- a/ports/litex/common-hal/digitalio/DigitalInOut.c +++ b/ports/litex/common-hal/digitalio/DigitalInOut.c @@ -10,11 +10,6 @@ #include "csr.h" -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - (void)self; -} - digitalinout_result_t common_hal_digitalio_digitalinout_construct( digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) { diff --git a/ports/litex/common-hal/microcontroller/Pin.c b/ports/litex/common-hal/microcontroller/Pin.c index bb3636c5b3f..bff361fe01d 100644 --- a/ports/litex/common-hal/microcontroller/Pin.c +++ b/ports/litex/common-hal/microcontroller/Pin.c @@ -11,9 +11,6 @@ static uint8_t claimed_pins[1]; -void reset_all_pins(void) { - // TODO -} // Mark pin as free and return it to a quiescent state. void reset_pin_number(uint8_t pin_port, uint8_t pin_number) { diff --git a/ports/litex/common-hal/microcontroller/Pin.h b/ports/litex/common-hal/microcontroller/Pin.h index 860a8c9ccad..e5ccf9262e6 100644 --- a/ports/litex/common-hal/microcontroller/Pin.h +++ b/ports/litex/common-hal/microcontroller/Pin.h @@ -26,12 +26,10 @@ extern const mcu_pin_obj_t pin_TOUCH2; extern const mcu_pin_obj_t pin_TOUCH3; extern const mcu_pin_obj_t pin_TOUCH4; -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_port, uint8_t pin_number); void claim_pin(const mcu_pin_obj_t *pin); bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number); // GPIO_TypeDef * pin_port(uint8_t pin_port); uint16_t pin_mask(uint8_t pin_number); diff --git a/ports/mimxrt10xx/common-hal/busio/I2C.c b/ports/mimxrt10xx/common-hal/busio/I2C.c index 93c0ab30123..86ec33f0cc5 100644 --- a/ports/mimxrt10xx/common-hal/busio/I2C.c +++ b/ports/mimxrt10xx/common-hal/busio/I2C.c @@ -145,11 +145,6 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, claim_pin(self->scl->pin); } -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - common_hal_never_reset_pin(self->sda->pin); - common_hal_never_reset_pin(self->scl->pin); -} - bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) { return self->sda == NULL; } diff --git a/ports/mimxrt10xx/common-hal/busio/SPI.c b/ports/mimxrt10xx/common-hal/busio/SPI.c index 90695be4b4e..0fd54e3e779 100644 --- a/ports/mimxrt10xx/common-hal/busio/SPI.c +++ b/ports/mimxrt10xx/common-hal/busio/SPI.c @@ -185,16 +185,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, } } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - common_hal_never_reset_pin(self->clock->pin); - if (self->mosi != NULL) { - common_hal_never_reset_pin(self->mosi->pin); - } - if (self->miso != NULL) { - common_hal_never_reset_pin(self->miso->pin); - } -} - bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->clock == NULL; } diff --git a/ports/mimxrt10xx/common-hal/busio/UART.c b/ports/mimxrt10xx/common-hal/busio/UART.c index d372865e8a1..cd25a400bf1 100644 --- a/ports/mimxrt10xx/common-hal/busio/UART.c +++ b/ports/mimxrt10xx/common-hal/busio/UART.c @@ -33,7 +33,6 @@ // arrays use 0 based numbering: UART1 is stored at index 0 static bool reserved_uart[MP_ARRAY_SIZE(mcu_uart_banks)]; -static bool never_reset_uart[MP_ARRAY_SIZE(mcu_uart_banks)]; #if IMXRT11XX #define UART_CLOCK_FREQ (24000000) @@ -63,15 +62,6 @@ static void config_periph_pin(const mcu_periph_obj_t *periph) { | IOMUXC_SW_PAD_CTL_PAD_SRE(0)); } -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - never_reset_uart[self->index] = true; - common_hal_never_reset_pin(self->tx); - common_hal_never_reset_pin(self->rx); - common_hal_never_reset_pin(self->rts); - common_hal_never_reset_pin(self->cts); - common_hal_never_reset_pin(self->rs485_dir); -} - void common_hal_busio_uart_construct(busio_uart_obj_t *self, const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx, const mcu_pin_obj_t *rts, const mcu_pin_obj_t *cts, @@ -348,7 +338,6 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { gc_free(self->ringbuf); reserved_uart[self->index] = false; - never_reset_uart[self->index] = false; common_hal_reset_pin(self->rx); common_hal_reset_pin(self->tx); diff --git a/ports/mimxrt10xx/common-hal/digitalio/DigitalInOut.c b/ports/mimxrt10xx/common-hal/digitalio/DigitalInOut.c index 48671f3fea9..1e121707c78 100644 --- a/ports/mimxrt10xx/common-hal/digitalio/DigitalInOut.c +++ b/ports/mimxrt10xx/common-hal/digitalio/DigitalInOut.c @@ -52,11 +52,6 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct( return DIGITALINOUT_OK; } -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - common_hal_never_reset_pin(self->pin); -} - bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) { return self->pin == NULL; } diff --git a/ports/mimxrt10xx/common-hal/microcontroller/Pin.c b/ports/mimxrt10xx/common-hal/microcontroller/Pin.c index c20a1738af0..700e384315e 100644 --- a/ports/mimxrt10xx/common-hal/microcontroller/Pin.c +++ b/ports/mimxrt10xx/common-hal/microcontroller/Pin.c @@ -14,7 +14,6 @@ #include "py/gc.h" static bool claimed_pins[PAD_COUNT]; -static bool never_reset_pins[PAD_COUNT]; // Default is that no pins are forbidden to reset. MP_WEAK const mcu_pin_obj_t *mimxrt10xx_reset_forbidden_pins[] = { @@ -36,19 +35,6 @@ static bool _reset_forbidden(const mcu_pin_obj_t *pin) { // IOMUXC index, used for iterating through pins and accessing reset information, // and GPIO port and number, used to store claimed and reset tagging. The two number // systems are not related and one cannot determine the other without a pin object -void reset_all_pins(void) { - for (uint8_t i = 0; i < PAD_COUNT; i++) { - claimed_pins[i] = never_reset_pins[i]; - } - for (uint8_t i = 0; i < PAD_COUNT; i++) { - mcu_pin_obj_t *pin = mcu_pin_globals.map.table[i].value; - if (never_reset_pins[pin->mux_idx]) { - continue; - } - common_hal_reset_pin(pin); - } -} - MP_WEAK bool mimxrt10xx_board_reset_pin_number(const mcu_pin_obj_t *pin) { return false; } @@ -70,7 +56,6 @@ void common_hal_reset_pin(const mcu_pin_obj_t *pin) { } disable_pin_change_interrupt(pin); - never_reset_pins[pin->mux_idx] = false; claimed_pins[pin->mux_idx] = false; // Make sure this pin's GPIO is set to input. Otherwise, output values could interfere @@ -86,13 +71,6 @@ void common_hal_reset_pin(const mcu_pin_obj_t *pin) { *(uint32_t *)pin->cfg_reg = pin->pad_reset; } -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - if (pin == NULL) { - return; - } - never_reset_pins[pin->mux_idx] = true; -} - bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) { return !claimed_pins[pin->mux_idx]; } diff --git a/ports/mimxrt10xx/common-hal/microcontroller/Pin.h b/ports/mimxrt10xx/common-hal/microcontroller/Pin.h index c40a4dc2a68..31f7ce8d758 100644 --- a/ports/mimxrt10xx/common-hal/microcontroller/Pin.h +++ b/ports/mimxrt10xx/common-hal/microcontroller/Pin.h @@ -10,7 +10,6 @@ #include "periph.h" #include "pins.h" -void reset_all_pins(void); void claim_pin(const mcu_pin_obj_t *pin); // List of pins that should never be reset. diff --git a/ports/mimxrt10xx/common-hal/pwmio/PWMOut.c b/ports/mimxrt10xx/common-hal/pwmio/PWMOut.c index 169ce096307..8fe4d16e011 100644 --- a/ports/mimxrt10xx/common-hal/pwmio/PWMOut.c +++ b/ports/mimxrt10xx/common-hal/pwmio/PWMOut.c @@ -65,10 +65,6 @@ static uint16_t _outen_mask(pwm_submodule_t submodule, pwm_channels_t channel) { return outen_mask; } -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - common_hal_never_reset_pin(self->pin); -} - static void _maybe_disable_clock(uint8_t instance) { if ((_flexpwms[instance]->MCTRL & PWM_MCTRL_RUN_MASK) == 0) { CLOCK_DisableClock(_flexpwm_clocks[instance][0]); diff --git a/ports/mimxrt10xx/supervisor/port.c b/ports/mimxrt10xx/supervisor/port.c index 62d2569cfde..a867fa43df3 100644 --- a/ports/mimxrt10xx/supervisor/port.c +++ b/ports/mimxrt10xx/supervisor/port.c @@ -415,7 +415,7 @@ safe_mode_t port_init(void) { #endif // Note that `reset_port` CANNOT GO HERE, unlike other ports, because `board_init` hasn't been - // run yet, which uses `never_reset` to protect critical pins from being reset by `reset_port`. + // run yet, which may claim critical pins that should not be reset by `reset_port`. if (board_requests_safe_mode()) { return SAFE_MODE_USER; diff --git a/ports/nordic/boards/bluemicro833/board.c b/ports/nordic/boards/bluemicro833/board.c index 1abc6f4e79c..13d66ace069 100644 --- a/ports/nordic/boards/bluemicro833/board.c +++ b/ports/nordic/boards/bluemicro833/board.c @@ -13,8 +13,6 @@ #include "nrf_gpio.h" void board_init(void) { - // "never_reset" the pin here because CircuitPython will try to reset pins after a VM run otherwise. - never_reset_pin_number(POWER_SWITCH_PIN->number); // Turn on power to sensors and neopixels. nrf_gpio_cfg(POWER_SWITCH_PIN->number, NRF_GPIO_PIN_DIR_OUTPUT, diff --git a/ports/nordic/boards/clue_nrf52840_express/board.c b/ports/nordic/boards/clue_nrf52840_express/board.c index 0b331b63a96..2d947dc1456 100644 --- a/ports/nordic/boards/clue_nrf52840_express/board.c +++ b/ports/nordic/boards/clue_nrf52840_express/board.c @@ -29,7 +29,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_P0_14, &pin_P0_15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/nordic/boards/espruino_banglejs2/board.c b/ports/nordic/boards/espruino_banglejs2/board.c index 09adb43f8be..8761fa813b1 100644 --- a/ports/nordic/boards/espruino_banglejs2/board.c +++ b/ports/nordic/boards/espruino_banglejs2/board.c @@ -21,18 +21,15 @@ uint32_t last_down_ticks_ms; void board_init(void) { common_hal_digitalio_digitalinout_construct(&extcomin, &pin_P0_06); common_hal_digitalio_digitalinout_switch_to_output(&extcomin, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&extcomin); common_hal_digitalio_digitalinout_construct(&display_on, &pin_P0_07); common_hal_digitalio_digitalinout_switch_to_output(&display_on, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&display_on); sharpdisplay_framebuffer_obj_t *fb = &allocate_display_bus()->sharpdisplay; fb->base.type = &sharpdisplay_framebuffer_type; busio_spi_obj_t *spi = &fb->inline_bus; common_hal_busio_spi_construct(spi, &pin_P0_26, &pin_P0_27, NULL, false); - common_hal_busio_spi_never_reset(spi); common_hal_sharpdisplay_framebuffer_construct(fb, spi, &pin_P0_05, 500000, 176, 176, true); diff --git a/ports/nordic/boards/hiibot_bluefi/board.c b/ports/nordic/boards/hiibot_bluefi/board.c index a05be7a0a63..fe03e94c8ba 100644 --- a/ports/nordic/boards/hiibot_bluefi/board.c +++ b/ports/nordic/boards/hiibot_bluefi/board.c @@ -29,7 +29,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_P0_07, &pin_P1_08, NULL, false); // SCK, MOSI, MISO, not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/nordic/boards/makerdiary_m60_keyboard/board.c b/ports/nordic/boards/makerdiary_m60_keyboard/board.c index 65595a6bca5..9182fde5030 100644 --- a/ports/nordic/boards/makerdiary_m60_keyboard/board.c +++ b/ports/nordic/boards/makerdiary_m60_keyboard/board.c @@ -23,13 +23,10 @@ static void preserve_and_release_battery_pin(void) { // Preserve the battery state. The battery is enabled by default in factory bootloader. // Reset claimed_pins so user can control pin's state in the vm. // The code below doesn't actually reset the pin's state, but only set the flags. - reset_pin_number(POWER_SWITCH_PIN->number); // clear claimed_pins and never_reset_pins - never_reset_pin_number(POWER_SWITCH_PIN->number); // set never_reset_pins } void board_init(void) { // As of cpy 8.1.0, board_init() runs after reset_ports() on first run. That means - // never_reset_pins won't be set at boot, the battery pin is reset, causing system // shutdown. // So if we need to run on battery, we must enable the battery here. power_on(); diff --git a/ports/nordic/boards/makerdiary_nrf52840_m2_devkit/board.c b/ports/nordic/boards/makerdiary_nrf52840_m2_devkit/board.c index 4f9c051478a..5c2427b8142 100644 --- a/ports/nordic/boards/makerdiary_nrf52840_m2_devkit/board.c +++ b/ports/nordic/boards/makerdiary_nrf52840_m2_devkit/board.c @@ -30,7 +30,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_P0_11, &pin_P0_12, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/nordic/boards/ohs2020_badge/board.c b/ports/nordic/boards/ohs2020_badge/board.c index d16d99473f0..1f64494af5f 100644 --- a/ports/nordic/boards/ohs2020_badge/board.c +++ b/ports/nordic/boards/ohs2020_badge/board.c @@ -29,7 +29,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_P0_11, &pin_P0_12, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/nordic/boards/teenage_engineering_sp1/board.c b/ports/nordic/boards/teenage_engineering_sp1/board.c index ad729a5e5fc..94b2fe0d5e5 100644 --- a/ports/nordic/boards/teenage_engineering_sp1/board.c +++ b/ports/nordic/boards/teenage_engineering_sp1/board.c @@ -195,11 +195,11 @@ void board_early_init(void) { nrfx_rtc_enable(&wake_rtc); } -// Pins that must not float. reset_all_pins() and reset_pin_number() ask the -// board for each pin, so this configuration is re-applied after every reset +// Pins that must not float. reset_pin_number() asks the board for each pin, +// so this configuration is re-applied after every reset rather than the pin // rather than the pin being left in its default (disconnected) state. // -// None of these are marked never-reset, so Python can still claim them. This +// None of these are claimed, so Python can still claim them. This // only makes the resting state between runs a defined, safe one. static const uint8_t default_low_pins[] = { // 3.072 MHz oscillator enable. Held low: it draws current straight through @@ -281,9 +281,8 @@ static void apply_all_pin_defaults(void) { } bool board_reset_pin_number(uint8_t pin_number) { - // main() calls reset_all_pins() immediately after port_init(), so without - // this the boot up heartbeat blink would last microseconds and show - // nothing. board_init() hands the pin back. + // A reset of this pin while the heartbeat is lit must not disturb it; + // board_init() hands the pin back. if (heartbeat_lit && pin_number == PIN_LED_HEARTBEAT) { return true; } diff --git a/ports/nordic/common-hal/busio/I2C.c b/ports/nordic/common-hal/busio/I2C.c index 999737f632b..cdcfc293abe 100644 --- a/ports/nordic/common-hal/busio/I2C.c +++ b/ports/nordic/common-hal/busio/I2C.c @@ -41,12 +41,6 @@ static twim_peripheral_t twim_peripherals[] = { #endif }; - -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - never_reset_pin_number(self->scl_pin_number); - never_reset_pin_number(self->sda_pin_number); -} - static mp_negative_errno_t twi_error_to_mp(const nrfx_err_t err) { switch (err) { case NRFX_ERROR_DRV_TWI_ERR_ANACK: diff --git a/ports/nordic/common-hal/busio/SPI.c b/ports/nordic/common-hal/busio/SPI.c index 5e0f2b242dc..24d04e685e4 100644 --- a/ports/nordic/common-hal/busio/SPI.c +++ b/ports/nordic/common-hal/busio/SPI.c @@ -67,17 +67,6 @@ static const spim_peripheral_t spim_peripherals[] = { // https://infocenter.nordicsemi.com/index.jsp?topic=%2Ferrata_nRF52840_Rev2%2FERR%2FnRF52840%2FRev2%2Flatest%2Fanomaly_840_198.html static uint8_t *spim3_transmit_buffer = (uint8_t *)SPIM3_BUFFER_RAM_START_ADDR; -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - for (size_t i = 0; i < MP_ARRAY_SIZE(spim_peripherals); i++) { - if (self->spim_peripheral == &spim_peripherals[i]) { - never_reset_pin_number(self->clock_pin_number); - never_reset_pin_number(self->MOSI_pin_number); - never_reset_pin_number(self->MISO_pin_number); - break; - } - } -} - // Convert frequency to clock-speed-dependent value. Choose the next lower baudrate if in between // available baudrates. static nrf_spim_frequency_t baudrate_to_spim_frequency(const uint32_t baudrate) { diff --git a/ports/nordic/common-hal/busio/UART.c b/ports/nordic/common-hal/busio/UART.c index 7a4219a9728..016ecc2cc64 100644 --- a/ports/nordic/common-hal/busio/UART.c +++ b/ports/nordic/common-hal/busio/UART.c @@ -36,8 +36,6 @@ static nrfx_uarte_t nrfx_uartes[] = { #endif }; -static bool never_reset[NRFX_UARTE0_ENABLED + NRFX_UARTE1_ENABLED]; - static uint32_t get_nrf_baud(uint32_t baudrate) { static const struct { @@ -111,30 +109,6 @@ static void uart_callback_irq(const nrfx_uarte_event_t *event, void *context) { } } -void uart_reset(void) { - for (size_t i = 0; i < MP_ARRAY_SIZE(nrfx_uartes); i++) { - if (never_reset[i]) { - continue; - } - nrfx_uarte_uninit(&nrfx_uartes[i]); - } -} - -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - // Don't never reset objects on the heap. - if (gc_alloc_possible() && gc_ptr_on_heap(self)) { - return; - } - for (size_t i = 0; i < MP_ARRAY_SIZE(nrfx_uartes); i++) { - if (self->uarte == &nrfx_uartes[i]) { - never_reset[i] = true; - break; - } - } - never_reset_pin_number(self->tx_pin_number); - never_reset_pin_number(self->rx_pin_number); -} - void common_hal_busio_uart_construct(busio_uart_obj_t *self, const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx, const mcu_pin_obj_t *rts, const mcu_pin_obj_t *cts, @@ -251,13 +225,6 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { self->rts_pin_number = NO_PIN; self->cts_pin_number = NO_PIN; ringbuf_deinit(&self->ringbuf); - - for (size_t i = 0; i < MP_ARRAY_SIZE(nrfx_uartes); i++) { - if (self->uarte == &nrfx_uartes[i]) { - never_reset[i] = false; - break; - } - } } } diff --git a/ports/nordic/common-hal/digitalio/DigitalInOut.c b/ports/nordic/common-hal/digitalio/DigitalInOut.c index 58205c9b992..a302c94bcc5 100644 --- a/ports/nordic/common-hal/digitalio/DigitalInOut.c +++ b/ports/nordic/common-hal/digitalio/DigitalInOut.c @@ -9,11 +9,6 @@ #include "nrf_gpio.h" -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} - digitalinout_result_t common_hal_digitalio_digitalinout_construct( digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) { claim_pin(pin); diff --git a/ports/nordic/common-hal/emmcio/EMMC.c b/ports/nordic/common-hal/emmcio/EMMC.c index 703d9bcb6fc..043655a7b7f 100644 --- a/ports/nordic/common-hal/emmcio/EMMC.c +++ b/ports/nordic/common-hal/emmcio/EMMC.c @@ -833,8 +833,7 @@ void emmcio_emmc_release_hardware(void) { } static void emmc_claim_pins(const mcu_pin_obj_t *clock, const mcu_pin_obj_t *command, - const mcu_pin_obj_t *data, const mcu_pin_obj_t *reset, const mcu_pin_obj_t *vccq, - bool never_reset) { + const mcu_pin_obj_t *data, const mcu_pin_obj_t *reset, const mcu_pin_obj_t *vccq) { emmc_pinout.clk = clock->number; emmc_pinout.cmd = command->number; emmc_pinout.dat0 = data->number; @@ -853,9 +852,6 @@ static void emmc_claim_pins(const mcu_pin_obj_t *clock, const mcu_pin_obj_t *com continue; } claim_pin(pins[i]); - if (never_reset) { - never_reset_pin_number(pins[i]->number); - } s_claimed_pins[s_claimed_pin_count++] = pins[i]; } } @@ -950,7 +946,7 @@ emmcio_construct_result_t common_hal_emmcio_emmc_construct(emmcio_emmc_obj_t *se if (pin_err != EMMCIO_OK) { return pin_err; } - emmc_claim_pins(clock, command, data, reset, vccq, false); + emmc_claim_pins(clock, command, data, reset, vccq); emmcio_construct_result_t err = emmc_power_up(self, high_speed, detail); if (err != EMMCIO_OK) { @@ -989,7 +985,7 @@ mp_obj_t emmcio_automount_construct(const mcu_pin_obj_t *clock, const mcu_pin_ob if (emmc_check_pins(clock, command, data, reset, vccq, &detail) != EMMCIO_OK) { return MP_OBJ_NULL; } - emmc_claim_pins(clock, command, data, reset, vccq, true); + emmc_claim_pins(clock, command, data, reset, vccq); s_automount_obj.base.type = &emmcio_emmc_type; if (emmc_power_up(&s_automount_obj, high_speed, &detail) != EMMCIO_OK) { return MP_OBJ_NULL; diff --git a/ports/nordic/common-hal/microcontroller/Pin.c b/ports/nordic/common-hal/microcontroller/Pin.c index ea495d32893..4974dab1bd1 100644 --- a/ports/nordic/common-hal/microcontroller/Pin.c +++ b/ports/nordic/common-hal/microcontroller/Pin.c @@ -18,7 +18,6 @@ bool speaker_enable_in_use; // Bit mask of claimed pins on each of up to two ports. nrf52832 has one port; nrf52840 has two. static uint32_t claimed_pins[GPIO_COUNT]; -static uint32_t never_reset_pins[GPIO_COUNT]; static void reset_speaker_enable_pin(void) { #ifdef SPEAKER_ENABLE_PIN @@ -37,26 +36,6 @@ MP_WEAK bool board_reset_pin_number(uint8_t pin_number) { return false; } -void reset_all_pins(void) { - for (size_t i = 0; i < GPIO_COUNT; i++) { - claimed_pins[i] = never_reset_pins[i]; - } - - for (uint32_t pin = 0; pin < NUMBER_OF_PINS; ++pin) { - if ((never_reset_pins[nrf_pin_port(pin)] & (1 << nrf_relative_pin_number(pin))) != 0) { - continue; - } - // Allow the board to override the reset state of any pin. - if (board_reset_pin_number(pin)) { - continue; - } - nrf_gpio_cfg_default(pin); - } - - // After configuring SWD because it may be shared. - reset_speaker_enable_pin(); -} - // Mark pin as free and return it to a quiescent state. void reset_pin_number(uint8_t pin_number) { if (pin_number == NO_PIN) { @@ -65,7 +44,6 @@ void reset_pin_number(uint8_t pin_number) { // Clear claimed bit. claimed_pins[nrf_pin_port(pin_number)] &= ~(1 << nrf_relative_pin_number(pin_number)); - never_reset_pins[nrf_pin_port(pin_number)] &= ~(1 << nrf_relative_pin_number(pin_number)); #ifdef SPEAKER_ENABLE_PIN if (pin_number == SPEAKER_ENABLE_PIN->number) { @@ -78,17 +56,6 @@ void reset_pin_number(uint8_t pin_number) { } -void never_reset_pin_number(uint8_t pin_number) { - if (pin_number == NO_PIN) { - return; - } - never_reset_pins[nrf_pin_port(pin_number)] |= 1 << nrf_relative_pin_number(pin_number); -} - -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - never_reset_pin_number(pin->number); -} - void common_hal_reset_pin(const mcu_pin_obj_t *pin) { if (pin == NULL) { return; diff --git a/ports/nordic/common-hal/microcontroller/Pin.h b/ports/nordic/common-hal/microcontroller/Pin.h index 330a8ef1283..c544c22cad7 100644 --- a/ports/nordic/common-hal/microcontroller/Pin.h +++ b/ports/nordic/common-hal/microcontroller/Pin.h @@ -15,13 +15,11 @@ // pin numbers, `false` for others. bool board_reset_pin_number(uint8_t pin_number); -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin); void claim_pin(const mcu_pin_obj_t *pin); bool pin_number_is_free(uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_number); // Lower 5 bits of a pin number are the pin number in a port. // upper bits (just one bit for current chips) is port number. diff --git a/ports/nordic/common-hal/paralleldisplaybus/ParallelBus.c b/ports/nordic/common-hal/paralleldisplaybus/ParallelBus.c index 5377d020f6b..ac7cfd5c91f 100644 --- a/ports/nordic/common-hal/paralleldisplaybus/ParallelBus.c +++ b/ports/nordic/common-hal/paralleldisplaybus/ParallelBus.c @@ -73,17 +73,8 @@ void common_hal_paralleldisplaybus_parallelbus_construct(paralleldisplaybus_para self->reset.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->reset, reset); common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL); - never_reset_pin_number(reset->number); common_hal_paralleldisplaybus_parallelbus_reset(self); } - - never_reset_pin_number(command->number); - never_reset_pin_number(chip_select->number); - never_reset_pin_number(write->number); - never_reset_pin_number(read->number); - for (uint8_t i = 0; i < 8; i++) { - never_reset_pin_number(data_pin + i); - } } void common_hal_paralleldisplaybus_parallelbus_deinit(paralleldisplaybus_parallelbus_obj_t *self) { diff --git a/ports/nordic/common-hal/pwmio/PWMOut.c b/ports/nordic/common-hal/pwmio/PWMOut.c index 6dc7ff56c71..40e613476a2 100644 --- a/ports/nordic/common-hal/pwmio/PWMOut.c +++ b/ports/nordic/common-hal/pwmio/PWMOut.c @@ -34,8 +34,6 @@ static NRF_PWM_Type *pwms[] = { static uint16_t pwm_seq[MP_ARRAY_SIZE(pwms)][CHANNELS_PER_PWM]; -static uint8_t never_reset_pwm[MP_ARRAY_SIZE(pwms)]; - static int pwm_idx(NRF_PWM_Type *pwm) { for (size_t i = 0; i < MP_ARRAY_SIZE(pwms); i++) { if (pwms[i] == pwm) { @@ -45,12 +43,6 @@ static int pwm_idx(NRF_PWM_Type *pwm) { return -1; } -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - never_reset_pwm[pwm_idx(self->pwm)] |= 1 << self->channel; - - common_hal_never_reset_pin(self->pin); -} - static void reset_single_pwmout(uint8_t i) { NRF_PWM_Type *pwm = pwms[i]; @@ -226,8 +218,6 @@ void common_hal_pwmio_pwmout_deinit(pwmio_pwmout_obj_t *self) { nrf_gpio_cfg_default(self->pin->number); - never_reset_pwm[pwm_idx(self->pwm)] &= ~(1 << self->channel); - NRF_PWM_Type *pwm = self->pwm; self->pwm = NULL; diff --git a/ports/nordic/common-hal/rgbmatrix/RGBMatrix.c b/ports/nordic/common-hal/rgbmatrix/RGBMatrix.c index 01f2cbc737e..b5b8c52bd6d 100644 --- a/ports/nordic/common-hal/rgbmatrix/RGBMatrix.c +++ b/ports/nordic/common-hal/rgbmatrix/RGBMatrix.c @@ -14,7 +14,6 @@ extern void _PM_IRQ_HANDLER(void); void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self) { nrfx_timer_t *timer = nrf_peripherals_allocate_timer_or_throw(); - nrf_peripherals_timer_never_reset(timer); return timer->p_reg; } diff --git a/ports/nordic/peripherals/nrf/timers.c b/ports/nordic/peripherals/nrf/timers.c index ec1bde65877..7f016b41f3c 100644 --- a/ports/nordic/peripherals/nrf/timers.c +++ b/ports/nordic/peripherals/nrf/timers.c @@ -35,28 +35,14 @@ static nrfx_timer_t nrfx_timers[] = { }; static bool nrfx_timer_allocated[ARRAY_SIZE(nrfx_timers)]; -static bool nrfx_timer_never_reset[ARRAY_SIZE(nrfx_timers)]; void timers_reset(void) { for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i++) { - if (nrfx_timer_never_reset[i]) { - continue; - } nrfx_timer_uninit(&nrfx_timers[i]); nrfx_timer_allocated[i] = false; } } -void nrf_peripherals_timer_never_reset(nrfx_timer_t *timer) { - int idx = nrf_peripherals_timer_idx_from_timer(timer); - nrfx_timer_never_reset[idx] = true; -} - -void nrf_peripherals_timer_reset_ok(nrfx_timer_t *timer) { - int idx = nrf_peripherals_timer_idx_from_timer(timer); - nrfx_timer_never_reset[idx] = false; -} - nrfx_timer_t *nrf_peripherals_timer_from_reg(NRF_TIMER_Type *ptr) { for (size_t i = 0; i < ARRAY_SIZE(nrfx_timers); i++) { if (nrfx_timers[i].p_reg == ptr) { @@ -102,7 +88,6 @@ void nrf_peripherals_free_timer(nrfx_timer_t *timer) { size_t idx = nrf_peripherals_timer_idx_from_timer(timer); if (idx != ~(size_t)0) { nrfx_timer_allocated[idx] = false; - nrfx_timer_never_reset[idx] = false; // Safe to call even if not initialized. nrfx_timer_uninit(timer); } diff --git a/ports/nordic/peripherals/nrf/timers.h b/ports/nordic/peripherals/nrf/timers.h index 44b8bc1bf04..526ecb3f34a 100644 --- a/ports/nordic/peripherals/nrf/timers.h +++ b/ports/nordic/peripherals/nrf/timers.h @@ -13,7 +13,5 @@ void timers_reset(void); nrfx_timer_t *nrf_peripherals_allocate_timer(void); nrfx_timer_t *nrf_peripherals_allocate_timer_or_throw(void); void nrf_peripherals_free_timer(nrfx_timer_t *timer); -void nrf_peripherals_timer_never_reset(nrfx_timer_t *timer); -void nrf_peripherals_timer_reset_ok(nrfx_timer_t *timer); nrfx_timer_t *nrf_peripherals_timer_from_reg(NRF_TIMER_Type *ptr); size_t nrf_peripherals_timer_idx_from_timer(nrfx_timer_t *ptr); diff --git a/ports/nordic/supervisor/port.c b/ports/nordic/supervisor/port.c index 6c3897db457..c43f99404f1 100644 --- a/ports/nordic/supervisor/port.c +++ b/ports/nordic/supervisor/port.c @@ -202,10 +202,6 @@ safe_mode_t port_init(void) { } void reset_port(void) { - #if CIRCUITPY_BUSIO - uart_reset(); - #endif - #if CIRCUITPY_NEOPIXEL_WRITE neopixel_write_reset(); #endif diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.c b/ports/raspberrypi/bindings/rp2pio/StateMachine.c index 398685be8a0..2858709ace3 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.c +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.c @@ -1119,6 +1119,7 @@ MP_PROPERTY_GETTER(rp2pio_statemachine_last_write_obj, static const mp_rom_map_elem_t rp2pio_statemachine_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&rp2pio_statemachine_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&rp2pio_statemachine_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, diff --git a/ports/raspberrypi/bindings/rp2pio/StateMachine.h b/ports/raspberrypi/bindings/rp2pio/StateMachine.h index 3c775a96449..310ec32e8dd 100644 --- a/ports/raspberrypi/bindings/rp2pio/StateMachine.h +++ b/ports/raspberrypi/bindings/rp2pio/StateMachine.h @@ -44,7 +44,6 @@ void common_hal_rp2pio_statemachine_deinit(rp2pio_statemachine_obj_t *self); bool common_hal_rp2pio_statemachine_deinited(rp2pio_statemachine_obj_t *self); void common_hal_rp2pio_statemachine_mark_deinit(rp2pio_statemachine_obj_t *self); -void common_hal_rp2pio_statemachine_never_reset(rp2pio_statemachine_obj_t *self); void common_hal_rp2pio_statemachine_restart(rp2pio_statemachine_obj_t *self); void common_hal_rp2pio_statemachine_stop(rp2pio_statemachine_obj_t *self); diff --git a/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c b/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c index ec37b398e22..5846897d97f 100644 --- a/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c +++ b/ports/raspberrypi/boards/adafruit_macropad_rp2040/board.c @@ -41,7 +41,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO26, &pin_GPIO27, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/bradanlanestudio_explorer_rp2040/board.c b/ports/raspberrypi/boards/bradanlanestudio_explorer_rp2040/board.c index f091c4b05a8..d8292c94668 100644 --- a/ports/raspberrypi/boards/bradanlanestudio_explorer_rp2040/board.c +++ b/ports/raspberrypi/boards/bradanlanestudio_explorer_rp2040/board.c @@ -207,7 +207,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO14, &pin_GPIO15, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/heiafr_picomo_v2/board.c b/ports/raspberrypi/boards/heiafr_picomo_v2/board.c index 15324b40ecd..7dbed5d41ca 100644 --- a/ports/raspberrypi/boards/heiafr_picomo_v2/board.c +++ b/ports/raspberrypi/boards/heiafr_picomo_v2/board.c @@ -46,7 +46,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/heiafr_picomo_v3/board.c b/ports/raspberrypi/boards/heiafr_picomo_v3/board.c index 15324b40ecd..7dbed5d41ca 100644 --- a/ports/raspberrypi/boards/heiafr_picomo_v3/board.c +++ b/ports/raspberrypi/boards/heiafr_picomo_v3/board.c @@ -46,7 +46,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/lilygo_t_display_rp2040/board.c b/ports/raspberrypi/boards/lilygo_t_display_rp2040/board.c index 2e9ccd45d56..4379ba681d7 100644 --- a/ports/raspberrypi/boards/lilygo_t_display_rp2040/board.c +++ b/ports/raspberrypi/boards/lilygo_t_display_rp2040/board.c @@ -56,7 +56,6 @@ static void display_init(void) { NULL, // MISO not connected false); // Not half-duplex - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; @@ -105,7 +104,6 @@ static void display_init(void) { 50000 // backlight pwm frequency ); - common_hal_never_reset_pin(&pin_GPIO4); // backlight pin } void board_init(void) { @@ -114,7 +112,6 @@ void board_init(void) { gpio_init(PWR_PIN); gpio_set_dir(PWR_PIN, GPIO_OUT); gpio_put(PWR_PIN, 1); - common_hal_never_reset_pin(&pin_GPIO22); // Display display_init(); diff --git a/ports/raspberrypi/boards/pajenicko_picopad/board.c b/ports/raspberrypi/boards/pajenicko_picopad/board.c index 9edebba57b4..acf893f40c5 100644 --- a/ports/raspberrypi/boards/pajenicko_picopad/board.c +++ b/ports/raspberrypi/boards/pajenicko_picopad/board.c @@ -46,7 +46,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/pimoroni_badger2040/board.c b/ports/raspberrypi/boards/pimoroni_badger2040/board.c index 80eddb49e13..b02ad712bca 100644 --- a/ports/raspberrypi/boards/pimoroni_badger2040/board.c +++ b/ports/raspberrypi/boards/pimoroni_badger2040/board.c @@ -251,13 +251,11 @@ void board_init(void) { common_hal_digitalio_digitalinout_switch_to_output(&enable_pin_obj, true, DRIVE_MODE_PUSH_PULL); // Never reset - common_hal_digitalio_digitalinout_never_reset(&enable_pin_obj); // Set up the SPI object used to control the display fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, &pin_GPIO16, false); - common_hal_busio_spi_never_reset(spi); // Set up the DisplayIO pin object bus->base.type = &fourwire_fourwire_type; diff --git a/ports/raspberrypi/boards/pimoroni_badger2040w/board.c b/ports/raspberrypi/boards/pimoroni_badger2040w/board.c index ef5da7ceabc..f6f2a7c67da 100644 --- a/ports/raspberrypi/boards/pimoroni_badger2040w/board.c +++ b/ports/raspberrypi/boards/pimoroni_badger2040w/board.c @@ -252,11 +252,9 @@ void board_init(void) { common_hal_digitalio_digitalinout_switch_to_output(&enable_pin_obj, true, DRIVE_MODE_PUSH_PULL); // Never reset - common_hal_digitalio_digitalinout_never_reset(&enable_pin_obj); // Set up the SPI object used to control the display busio_spi_obj_t *spi = common_hal_board_create_spi(0); - common_hal_busio_spi_never_reset(spi); // Set up the DisplayIO pin object fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; diff --git a/ports/raspberrypi/boards/pimoroni_badger2350/board.c b/ports/raspberrypi/boards/pimoroni_badger2350/board.c index 1da13b80339..e6588899ab4 100644 --- a/ports/raspberrypi/boards/pimoroni_badger2350/board.c +++ b/ports/raspberrypi/boards/pimoroni_badger2350/board.c @@ -161,12 +161,10 @@ void board_init(void) { &i2c_power_en_pin_obj, &pin_GPIO27); common_hal_digitalio_digitalinout_switch_to_output( &i2c_power_en_pin_obj, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&i2c_power_en_pin_obj); fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO19, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/pimoroni_inky_frame_5_7/board.c b/ports/raspberrypi/boards/pimoroni_inky_frame_5_7/board.c index 58c54334d59..28371b61278 100644 --- a/ports/raspberrypi/boards/pimoroni_inky_frame_5_7/board.c +++ b/ports/raspberrypi/boards/pimoroni_inky_frame_5_7/board.c @@ -51,7 +51,6 @@ void board_init(void) { common_hal_digitalio_digitalinout_switch_to_output(&enable_pin_obj, true, DRIVE_MODE_PUSH_PULL); // Never reset - common_hal_digitalio_digitalinout_never_reset(&enable_pin_obj); fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = common_hal_board_create_spi(0); diff --git a/ports/raspberrypi/boards/pimoroni_inky_frame_7_3/board.c b/ports/raspberrypi/boards/pimoroni_inky_frame_7_3/board.c index fc6ca67f3ae..fa356356945 100644 --- a/ports/raspberrypi/boards/pimoroni_inky_frame_7_3/board.c +++ b/ports/raspberrypi/boards/pimoroni_inky_frame_7_3/board.c @@ -100,7 +100,6 @@ void board_init(void) { common_hal_digitalio_digitalinout_switch_to_output(&enable_pin_obj, true, DRIVE_MODE_PUSH_PULL); // Never reset - common_hal_digitalio_digitalinout_never_reset(&enable_pin_obj); common_hal_digitalio_digitalinout_construct(&sr_clock, &pin_GPIO8); common_hal_digitalio_digitalinout_switch_to_output(&sr_clock, false, DRIVE_MODE_PUSH_PULL); diff --git a/ports/raspberrypi/boards/pimoroni_picosystem/board.c b/ports/raspberrypi/boards/pimoroni_picosystem/board.c index e5956e43ed1..f115dabfa19 100644 --- a/ports/raspberrypi/boards/pimoroni_picosystem/board.c +++ b/ports/raspberrypi/boards/pimoroni_picosystem/board.c @@ -46,7 +46,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO6, &pin_GPIO7, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/teenage_engineering_ep2350/board.c b/ports/raspberrypi/boards/teenage_engineering_ep2350/board.c index 982ebb6deb1..d0354bcb400 100644 --- a/ports/raspberrypi/boards/teenage_engineering_ep2350/board.c +++ b/ports/raspberrypi/boards/teenage_engineering_ep2350/board.c @@ -35,9 +35,9 @@ static void preinit_power_hold(void) { // released or the unit dies. The latch is a true set/reset latch, so a single // high pulse is enough, but the pin must never be left low. // -// reset_all_pins() runs this for every pin at startup and again on every soft -// reload, so the latch is re-asserted instead of being reset to an input. The -// pin is deliberately not claimed with never_reset(), so user code can still +// reset_pin_number() runs this whenever the pin is reset, so the latch is +// re-asserted instead of being reset to an input. The pin is deliberately not +// claimed, so user code can still // take board.POWER_HOLD and drive it low to power the unit off. bool board_reset_pin_number(uint8_t pin_number) { if (pin_number == MICROPY_HW_POWER_HOLD_PIN_NUMBER) { diff --git a/ports/raspberrypi/boards/tinycircuits_thumby_color/board.c b/ports/raspberrypi/boards/tinycircuits_thumby_color/board.c index 17c512cb2a6..b9d5ddfe3e5 100644 --- a/ports/raspberrypi/boards/tinycircuits_thumby_color/board.c +++ b/ports/raspberrypi/boards/tinycircuits_thumby_color/board.c @@ -55,8 +55,6 @@ void board_init(void) { false // Not half-duplex ); - common_hal_busio_spi_never_reset(spi); - bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct( diff --git a/ports/raspberrypi/boards/ugame22/board.c b/ports/raspberrypi/boards/ugame22/board.c index ed17a13ebc1..e5ac867843c 100644 --- a/ports/raspberrypi/boards/ugame22/board.c +++ b/ports/raspberrypi/boards/ugame22/board.c @@ -47,7 +47,6 @@ void board_init(void) { fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus; busio_spi_obj_t *spi = &bus->inline_bus; common_hal_busio_spi_construct(spi, &pin_GPIO2, &pin_GPIO3, NULL, false); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; common_hal_fourwire_fourwire_construct(bus, diff --git a/ports/raspberrypi/boards/waveshare_rp2040_lcd_0_96/board.c b/ports/raspberrypi/boards/waveshare_rp2040_lcd_0_96/board.c index 44d279da43f..62b43f79d0f 100644 --- a/ports/raspberrypi/boards/waveshare_rp2040_lcd_0_96/board.c +++ b/ports/raspberrypi/boards/waveshare_rp2040_lcd_0_96/board.c @@ -53,7 +53,6 @@ static void display_init(void) { false // Not half-duplex ); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/raspberrypi/boards/waveshare_rp2350_lcd_0_96/board.c b/ports/raspberrypi/boards/waveshare_rp2350_lcd_0_96/board.c index 44d279da43f..62b43f79d0f 100644 --- a/ports/raspberrypi/boards/waveshare_rp2350_lcd_0_96/board.c +++ b/ports/raspberrypi/boards/waveshare_rp2350_lcd_0_96/board.c @@ -53,7 +53,6 @@ static void display_init(void) { false // Not half-duplex ); - common_hal_busio_spi_never_reset(spi); bus->base.type = &fourwire_fourwire_type; diff --git a/ports/raspberrypi/common-hal/alarm/pin/PinAlarm.c b/ports/raspberrypi/common-hal/alarm/pin/PinAlarm.c index 350306390ee..4755db26dee 100644 --- a/ports/raspberrypi/common-hal/alarm/pin/PinAlarm.c +++ b/ports/raspberrypi/common-hal/alarm/pin/PinAlarm.c @@ -126,7 +126,6 @@ void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_ob } gpio_set_dir(alarm->pin->number, GPIO_IN); // Don't reset at end of VM (instead, pinalarm_reset will reset before next VM) - common_hal_never_reset_pin(alarm->pin); alarm_reserved_pins |= (1 << alarm->pin->number); uint32_t event; diff --git a/ports/raspberrypi/common-hal/busio/I2C.c b/ports/raspberrypi/common-hal/busio/I2C.c index 54cebee5193..4d9fc715e0d 100644 --- a/ports/raspberrypi/common-hal/busio/I2C.c +++ b/ports/raspberrypi/common-hal/busio/I2C.c @@ -224,7 +224,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 return common_hal_busio_i2c_read(self, addr, in_data, in_len); } -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - never_reset_pin_number(self->scl_pin); - never_reset_pin_number(self->sda_pin); -} diff --git a/ports/raspberrypi/common-hal/busio/SPI.c b/ports/raspberrypi/common-hal/busio/SPI.c index aeb06d919ae..325c558a9dc 100644 --- a/ports/raspberrypi/common-hal/busio/SPI.c +++ b/ports/raspberrypi/common-hal/busio/SPI.c @@ -85,11 +85,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, } } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - common_hal_never_reset_pin(self->clock); - common_hal_never_reset_pin(self->MOSI); - common_hal_never_reset_pin(self->MISO); -} bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->clock == NULL; diff --git a/ports/raspberrypi/common-hal/busio/UART.c b/ports/raspberrypi/common-hal/busio/UART.c index 074c78c2f4a..7e97ea3307b 100644 --- a/ports/raspberrypi/common-hal/busio/UART.c +++ b/ports/raspberrypi/common-hal/busio/UART.c @@ -24,23 +24,11 @@ typedef enum { STATUS_FREE = 0, STATUS_BUSY, - STATUS_NEVER_RESET } uart_status_t; static uart_status_t uart_status[NUM_UARTS]; -void reset_uart(void) { - for (uint8_t num = 0; num < NUM_UARTS; num++) { - if (uart_status[num] == STATUS_BUSY) { - uart_status[num] = STATUS_FREE; - uart_deinit(UART_INST(num)); - } - } -} -void never_reset_uart(uint8_t num) { - uart_status[num] = STATUS_NEVER_RESET; -} static void pin_check(const uint8_t uart, const mcu_pin_obj_t *pin, const uint8_t pin_type) { if (pin == NULL) { @@ -343,17 +331,4 @@ bool common_hal_busio_uart_ready_to_tx(busio_uart_obj_t *self) { return uart_is_writable(self->uart); } -static void pin_never_reset(uint8_t pin) { - if (pin != NO_PIN) { - never_reset_pin_number(pin); - } -} -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - never_reset_uart(self->uart_id); - pin_never_reset(self->tx_pin); - pin_never_reset(self->rx_pin); - pin_never_reset(self->cts_pin); - pin_never_reset(self->rs485_dir_pin); - pin_never_reset(self->rts_pin); -} diff --git a/ports/raspberrypi/common-hal/busio/UART.h b/ports/raspberrypi/common-hal/busio/UART.h index 3709907633c..5d36485be19 100644 --- a/ports/raspberrypi/common-hal/busio/UART.h +++ b/ports/raspberrypi/common-hal/busio/UART.h @@ -28,4 +28,3 @@ typedef struct { } busio_uart_obj_t; extern void reset_uart(void); -extern void never_reset_uart(uint8_t num); diff --git a/ports/raspberrypi/common-hal/digitalio/DigitalInOut.c b/ports/raspberrypi/common-hal/digitalio/DigitalInOut.c index f20facdad7d..edbd0618645 100644 --- a/ports/raspberrypi/common-hal/digitalio/DigitalInOut.c +++ b/ports/raspberrypi/common-hal/digitalio/DigitalInOut.c @@ -44,11 +44,6 @@ digitalinout_result_t common_hal_digitalio_digitalinout_construct( return DIGITALINOUT_OK; } -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} - bool common_hal_digitalio_digitalinout_deinited(digitalio_digitalinout_obj_t *self) { return self->pin == NULL; } diff --git a/ports/raspberrypi/common-hal/microcontroller/Pin.c b/ports/raspberrypi/common-hal/microcontroller/Pin.c index 3c5286d36c4..956a6f658c7 100644 --- a/ports/raspberrypi/common-hal/microcontroller/Pin.c +++ b/ports/raspberrypi/common-hal/microcontroller/Pin.c @@ -25,33 +25,6 @@ void reset_pin_number_cyw(uint8_t pin_no) { } #endif -static uint64_t never_reset_pins; - -void reset_all_pins(void) { - for (size_t i = 0; i < NUM_BANK0_GPIOS; i++) { - if ((never_reset_pins & (1LL << i)) != 0) { - continue; - } - reset_pin_number(i); - } - #if CIRCUITPY_CYW43 - if (cyw_ever_init) { - // reset LED and SMPS_MODE to Low; don't touch VBUS_SENSE - // otherwise it is switched to output mode forever! - cyw43_arch_gpio_put(0, 0); - cyw43_arch_gpio_put(1, 0); - } - cyw_pin_claimed = 0; - #endif -} - -void never_reset_pin_number(uint8_t pin_number) { - if (pin_number >= NUM_BANK0_GPIOS) { - return; - } - - never_reset_pins |= 1LL << pin_number; -} // By default, all pins get reset in the same way MP_WEAK bool board_reset_pin_number(uint8_t pin_number) { @@ -64,7 +37,6 @@ void reset_pin_number(uint8_t pin_number) { } gpio_bank0_pin_claimed &= ~(1LL << pin_number); - never_reset_pins &= ~(1LL << pin_number); // Allow the board to override the reset state of any pin if (board_reset_pin_number(pin_number)) { @@ -80,9 +52,6 @@ void reset_pin_number(uint8_t pin_number) { hw_set_bits(&pads_bank0_hw->io[pin_number], PADS_BANK0_GPIO0_OD_BITS); } -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - never_reset_pin_number(pin->number); -} void common_hal_reset_pin(const mcu_pin_obj_t *pin) { #if CIRCUITPY_CYW43 diff --git a/ports/raspberrypi/common-hal/microcontroller/Pin.h b/ports/raspberrypi/common-hal/microcontroller/Pin.h index ce6e33a24a8..380dd1c8a40 100644 --- a/ports/raspberrypi/common-hal/microcontroller/Pin.h +++ b/ports/raspberrypi/common-hal/microcontroller/Pin.h @@ -19,11 +19,9 @@ // A default weak implementation always returns `false`. bool board_reset_pin_number(uint8_t pin_number); -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_number); void claim_pin(const mcu_pin_obj_t *pin); bool pin_number_is_free(uint8_t pin_number); diff --git a/ports/raspberrypi/common-hal/paralleldisplaybus/ParallelBus.c b/ports/raspberrypi/common-hal/paralleldisplaybus/ParallelBus.c index 517d960b765..f5dc9011429 100644 --- a/ports/raspberrypi/common-hal/paralleldisplaybus/ParallelBus.c +++ b/ports/raspberrypi/common-hal/paralleldisplaybus/ParallelBus.c @@ -52,7 +52,6 @@ void common_hal_paralleldisplaybus_parallelbus_construct(paralleldisplaybus_para self->read.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->read, read); common_hal_digitalio_digitalinout_switch_to_output(&self->read, true, DRIVE_MODE_PUSH_PULL); - never_reset_pin_number(read->number); } self->data0_pin = data_pin; @@ -63,15 +62,10 @@ void common_hal_paralleldisplaybus_parallelbus_construct(paralleldisplaybus_para self->reset.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->reset, reset); common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL); - never_reset_pin_number(reset->number); common_hal_paralleldisplaybus_parallelbus_reset(self); } - never_reset_pin_number(command->number); - never_reset_pin_number(chip_select->number); - never_reset_pin_number(write_pin); for (uint8_t i = 0; i < 8; i++) { - never_reset_pin_number(data_pin + i); } common_hal_rp2pio_statemachine_construct(&self->state_machine, @@ -96,7 +90,6 @@ void common_hal_paralleldisplaybus_parallelbus_construct(paralleldisplaybus_para PIO_FIFO_TYPE_DEFAULT, PIO_MOV_STATUS_DEFAULT, PIO_MOV_N_DEFAULT); - common_hal_rp2pio_statemachine_never_reset(&self->state_machine); } void common_hal_paralleldisplaybus_parallelbus_deinit(paralleldisplaybus_parallelbus_obj_t *self) { diff --git a/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2040.c b/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2040.c index 53ed37cefbe..6c5c73e648d 100644 --- a/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2040.c +++ b/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2040.c @@ -227,15 +227,6 @@ void common_hal_picodvi_framebuffer_construct(picodvi_framebuffer_obj_t *self, } self->pwm_slice = slice; - for (size_t i = 0; i < 4; i++) { - never_reset_pin_number(self->pin_pair[i]); - never_reset_pin_number(self->pin_pair[i] + 1); - } - - for (size_t i = 0; i < 3; i++) { - rp2pio_statemachine_never_reset(pio_get_instance(pio_index), free_state_machines[i]); - } - // For the output. user_irq_claim(DMA_IRQ_1); self->framebuffer_len = framebuffer_size; @@ -341,7 +332,6 @@ void common_hal_picodvi_framebuffer_deinit(picodvi_framebuffer_obj_t *self) { int sm = self->dvi.ser_cfg.sm_tmds[i]; pio_sm_set_enabled(pio, sm, false); pio_sm_unclaim(pio, sm); - rp2pio_statemachine_reset_ok(pio, sm); } pio_remove_program(pio, &program_struct, self->dvi.ser_cfg.prog_offs); diff --git a/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c b/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c index 8c846ffc440..eeec1716514 100644 --- a/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c +++ b/ports/raspberrypi/common-hal/picodvi/Framebuffer_RP2350.c @@ -541,7 +541,6 @@ void common_hal_picodvi_framebuffer_construct(picodvi_framebuffer_obj_t *self, for (int i = 12; i <= 19; ++i) { gpio_set_function(i, 0); // HSTX - never_reset_pin_number(i); } dma_channel_config c; diff --git a/ports/raspberrypi/common-hal/pwmio/PWMOut.c b/ports/raspberrypi/common-hal/pwmio/PWMOut.c index 2a643974291..0b09d5d318a 100644 --- a/ports/raspberrypi/common-hal/pwmio/PWMOut.c +++ b/ports/raspberrypi/common-hal/pwmio/PWMOut.c @@ -22,7 +22,6 @@ uint32_t slice_variable_frequency; #define AB_CHANNELS_PER_SLICE 2 static uint32_t channel_use; -static uint32_t never_reset_channel; // Per the RP2040 datasheet: // @@ -63,9 +62,6 @@ void pwmio_release_slice_ab_channels(uint8_t slice) { channel_use &= ~channel_mask; } -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - never_reset_pin_number(self->pin->number); -} pwmout_result_t pwmout_allocate(uint8_t slice, uint8_t ab_channel, bool variable_frequency, uint32_t frequency) { uint32_t channel_use_mask = _mask(slice, ab_channel); @@ -147,7 +143,6 @@ bool common_hal_pwmio_pwmout_deinited(pwmio_pwmout_obj_t *self) { void pwmout_free(uint8_t slice, uint8_t ab_channel) { uint32_t channel_mask = _mask(slice, ab_channel); channel_use &= ~channel_mask; - never_reset_channel &= ~channel_mask; uint32_t slice_mask = ((1 << AB_CHANNELS_PER_SLICE) - 1) << (slice * AB_CHANNELS_PER_SLICE); if ((channel_use & slice_mask) == 0) { target_slice_frequencies[slice] = 0; diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c index 2f815cd2ee0..91025b3d552 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.c +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.c @@ -33,7 +33,6 @@ static uint8_t _pin_reference_count[NUM_BANK0_GPIOS]; static uint32_t _current_program_id[NUM_PIOS][NUM_PIO_STATE_MACHINES]; static uint8_t _current_program_offset[NUM_PIOS][NUM_PIO_STATE_MACHINES]; static uint8_t _current_program_len[NUM_PIOS][NUM_PIO_STATE_MACHINES]; -static bool _never_reset[NUM_PIOS][NUM_PIO_STATE_MACHINES]; static pio_pinmask_t _current_pins[NUM_PIOS]; static pio_pinmask_t _current_sm_pins[NUM_PIOS][NUM_PIO_STATE_MACHINES]; @@ -191,24 +190,6 @@ static void _reset_statemachine(PIO pio, uint8_t sm, bool leave_pins) { pio_sm_unclaim(pio, sm); } -void reset_rp2pio_statemachine(void) { - for (size_t i = 0; i < NUM_PIOS; i++) { - PIO pio = pio_get_instance(i); - for (size_t j = 0; j < NUM_PIO_STATE_MACHINES; j++) { - if (_never_reset[i][j]) { - continue; - } - _reset_statemachine(pio, j, false); - } - } - for (uint8_t irq = PIO0_IRQ_0; irq <= PIO1_IRQ_1; irq++) { - irq_handler_t int_handler = irq_get_exclusive_handler(irq); - if (int_handler > 0) { - irq_set_enabled(irq, false); - irq_remove_handler(irq, int_handler); - } - } -} static pio_pinmask_t _check_pins_free(const mcu_pin_obj_t *first_pin, uint8_t pin_count, bool exclusive_pin_use) { pio_pinmask_t pins_we_use = PIO_PINMASK_NONE; @@ -933,16 +914,6 @@ void common_hal_rp2pio_statemachine_set_frequency(rp2pio_statemachine_obj_t *sel pio_sm_clkdiv_restart(self->pio, self->state_machine); } -void rp2pio_statemachine_reset_ok(PIO pio, int sm) { - uint8_t pio_index = pio_get_index(pio); - _never_reset[pio_index][sm] = false; -} - -void rp2pio_statemachine_never_reset(PIO pio, int sm) { - uint8_t pio_index = pio_get_index(pio); - _never_reset[pio_index][sm] = true; -} - // Pick a PIO that has room for a program of program_size instructions and at // least sm_count free state machines; returns its index, or NUM_PIOS if none // qualifies. This lets an out-of-tree PIO user (e.g. the sdioio SDIO driver, @@ -985,7 +956,6 @@ void rp2pio_statemachine_deinit(rp2pio_statemachine_obj_t *self, bool leave_pins _interrupt_arg[pio_index][sm] = NULL; _interrupt_handler[pio_index][sm] = NULL; common_hal_mcu_enable_interrupts(); - _never_reset[pio_index][sm] = false; _reset_statemachine(self->pio, sm, leave_pins); self->state_machine = NUM_PIO_STATE_MACHINES; } @@ -998,10 +968,6 @@ void common_hal_rp2pio_statemachine_mark_deinit(rp2pio_statemachine_obj_t *self) self->state_machine = NUM_PIO_STATE_MACHINES; } -void common_hal_rp2pio_statemachine_never_reset(rp2pio_statemachine_obj_t *self) { - rp2pio_statemachine_never_reset(self->pio, self->state_machine); - // TODO: never reset all the pins -} bool common_hal_rp2pio_statemachine_deinited(rp2pio_statemachine_obj_t *self) { return self->state_machine == NUM_PIO_STATE_MACHINES; diff --git a/ports/raspberrypi/common-hal/rp2pio/StateMachine.h b/ports/raspberrypi/common-hal/rp2pio/StateMachine.h index c2007ca1905..88765f3bc07 100644 --- a/ports/raspberrypi/common-hal/rp2pio/StateMachine.h +++ b/ports/raspberrypi/common-hal/rp2pio/StateMachine.h @@ -12,8 +12,7 @@ #include "common-hal/memorymap/AddressRange.h" #include "hardware/pio.h" -// Shared PIO allocator declarations (rp2pio_statemachine_find_pio, -// rp2pio_statemachine_never_reset, rp2pio_statemachine_reset_ok). Kept in a +// Shared PIO allocator declarations (rp2pio_statemachine_find_pio). Kept in a // separate, mp-free header so external C++ drivers can include them too. #include "pio_alloc.h" diff --git a/ports/raspberrypi/common-hal/rp2pio/pio_alloc.h b/ports/raspberrypi/common-hal/rp2pio/pio_alloc.h index ceb4e31631a..d26cce81e34 100644 --- a/ports/raspberrypi/common-hal/rp2pio/pio_alloc.h +++ b/ports/raspberrypi/common-hal/rp2pio/pio_alloc.h @@ -25,12 +25,6 @@ extern "C" { // NUM_PIOS if none qualifies. uint8_t rp2pio_statemachine_find_pio(int program_size, int sm_count); -// Mark / unmark a state machine as surviving (or not) a soft reset, so -// rp2pio's reset path keeps its bookkeeping coherent with the SMs a driver -// claims directly. -void rp2pio_statemachine_never_reset(PIO pio, int sm); -void rp2pio_statemachine_reset_ok(PIO pio, int sm); - #ifdef __cplusplus } #endif diff --git a/ports/raspberrypi/common-hal/sdioio/SDCard.c b/ports/raspberrypi/common-hal/sdioio/SDCard.c index 04b78dbc4d2..18dfa5a3d2b 100644 --- a/ports/raspberrypi/common-hal/sdioio/SDCard.c +++ b/ports/raspberrypi/common-hal/sdioio/SDCard.c @@ -14,38 +14,6 @@ #include "py/mperrno.h" #include "py/runtime.h" -#include "hardware/platform_defs.h" // NUM_PIOS - -// Live-instance tracking for soft-reset cleanup. The vendored SdFat PIO driver -// claims its PIO block through the raw SDK (pio_claim_unused_sm), whose claim -// bitset lives in static RAM and survives a soft reboot. Because the GC heap is -// wiped without running finalizers, a successfully-constructed card would leak -// its whole PIO block on every Ctrl-D (see sdio_init_troubleshooting.md, -// "Error 43 is a PIO-leak red herring"). We keep a static table of the live -// cards so sdioio_reset() can deinit them (→ pioEnd() → SDK unclaim) before the -// heap is reset. A card is registered only after a fully successful construct -// and removed on deinit; each card consumes a whole PIO, so NUM_PIOS slots is a -// hard upper bound. -static sdioio_sdcard_obj_t *_active_cards[NUM_PIOS]; - -static void register_card(sdioio_sdcard_obj_t *self) { - for (size_t i = 0; i < MP_ARRAY_SIZE(_active_cards); i++) { - if (_active_cards[i] == NULL) { - _active_cards[i] = self; - return; - } - } -} - -static void unregister_card(sdioio_sdcard_obj_t *self) { - for (size_t i = 0; i < MP_ARRAY_SIZE(_active_cards); i++) { - if (_active_cards[i] == self) { - _active_cards[i] = NULL; - return; - } - } -} - // Maximum SD clock the PIO driver is allowed to be asked for. At a typical // 150 MHz clk_sys the driver tops out near 37.5 MHz (clkDiv == 1); the cap is // generous and the achieved rate is reported back through the `frequency` @@ -103,10 +71,6 @@ void common_hal_sdioio_sdcard_construct(sdioio_sdcard_obj_t *self, self->frequency = actual_frequency; self->capacity = sdfat_pio_card_sector_count(&self->card); - - // Track the live card so sdioio_reset() can release its leaked PIO block on - // the next soft reboot. - register_card(self); } uint32_t common_hal_sdioio_sdcard_get_count(sdioio_sdcard_obj_t *self) { @@ -213,8 +177,6 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { return; } - unregister_card(self); - sdfat_pio_card_end(&self->card); sdfat_pio_card_free(&self->card); @@ -227,34 +189,3 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { self->data[i] = COMMON_HAL_MCU_NO_PIN; } } - -void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { - if (common_hal_sdioio_sdcard_deinited(self)) { - return; - } - - self->never_reset = true; - - never_reset_pin_number(self->command); - never_reset_pin_number(self->clock); - for (size_t i = 0; i < self->num_data; i++) { - never_reset_pin_number(self->data[i]); - } - - // Also protect the PIO state machines the driver claimed so the rp2pio - // soft-reset path keeps its never-reset bookkeeping coherent with them. - sdfat_pio_card_never_reset(&self->card); -} - -void sdioio_reset(void) { - // Release every live card that isn't protected by never_reset. deinit() - // runs pioEnd(), which unclaims the PIO at the SDK level. - for (size_t i = 0; i < MP_ARRAY_SIZE(_active_cards); i++) { - sdioio_sdcard_obj_t *self = _active_cards[i]; - if (self == NULL || self->never_reset) { - continue; - } - // deinit() calls unregister_card(), clearing this slot. - common_hal_sdioio_sdcard_deinit(self); - } -} diff --git a/ports/raspberrypi/common-hal/sdioio/SDCard.h b/ports/raspberrypi/common-hal/sdioio/SDCard.h index a4dca731f73..c39c4586c03 100644 --- a/ports/raspberrypi/common-hal/sdioio/SDCard.h +++ b/ports/raspberrypi/common-hal/sdioio/SDCard.h @@ -21,9 +21,4 @@ typedef struct { uint8_t command; uint8_t clock; uint8_t data[4]; - bool never_reset; } sdioio_sdcard_obj_t; - -// Called by the supervisor on soft reset to release any card that is not -// protected with never_reset. -void sdioio_reset(void); diff --git a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.cpp b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.cpp index f91515ccef2..e5290e41391 100644 --- a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.cpp +++ b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.cpp @@ -426,18 +426,6 @@ bool PioSdioCard::cardCommand(CmdRsp_t cmd, uint32_t arg, void* rsp) { //------------------------------------------------------------------------------ void PioSdioCard::end() { pioEnd(); } //------------------------------------------------------------------------------ -void PioSdioCard::neverReset() { - if (!m_pio) { - return; - } - if (m_sm0 >= 0) { - rp2pio_statemachine_never_reset(m_pio, m_sm0); - } - if (m_sm1 >= 0) { - rp2pio_statemachine_never_reset(m_pio, m_sm1); - } -} -//------------------------------------------------------------------------------ bool PioSdioCard::erase(uint32_t firstSector, uint32_t lastSector) { Timeout timeout(SD_ERASE_TIMEOUT); if (!syncDevice()) { @@ -509,18 +497,14 @@ void PioSdioCard::pioEnd() { return; } // CIRCUITPY-CHANGE: release only the two state machines we claimed (see - // pioInit) rather than every SM on the block, and clear their rp2pio - // never-reset flag so a later reuse of the same SM number by rp2pio is not - // wrongly protected across a soft reset. + // pioInit) rather than every SM on the block. if (m_sm0 >= 0) { pio_sm_set_enabled(m_pio, m_sm0, false); - rp2pio_statemachine_reset_ok(m_pio, m_sm0); pio_sm_unclaim(m_pio, m_sm0); m_sm0 = -1; } if (m_sm1 >= 0) { pio_sm_set_enabled(m_pio, m_sm1, false); - rp2pio_statemachine_reset_ok(m_pio, m_sm1); pio_sm_unclaim(m_pio, m_sm1); m_sm1 = -1; } diff --git a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.h b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.h index bc1d39a26fb..d3d33051763 100644 --- a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.h +++ b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/SdCard/PioSdio/PioSdioCard.h @@ -135,10 +135,6 @@ class PioSdioCard: public SdCardInterface { * not implemented. */ void end() final; - /** CIRCUITPY-CHANGE: mark this card's PIO state machines as surviving a soft - * reset, keeping rp2pio's never-reset bookkeeping coherent with the SMs this - * driver claims directly. */ - void neverReset(); #ifndef DOXYGEN_SHOULD_SKIP_THIS uint32_t __attribute__((error("use sectorCount()"))) cardSize(); diff --git a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.cpp b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.cpp index 5aeea4c8e94..65d7f208783 100644 --- a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.cpp +++ b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.cpp @@ -73,8 +73,4 @@ void sdfat_pio_card_end(void *storage) { reinterpret_cast(storage)->end(); } -void sdfat_pio_card_never_reset(void *storage) { - reinterpret_cast(storage)->neverReset(); -} - } // extern "C" diff --git a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.h b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.h index c968ea0f734..9cdbe4a22f8 100644 --- a/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.h +++ b/ports/raspberrypi/common-hal/sdioio/sdfat_pio/shim.h @@ -65,10 +65,6 @@ uint8_t sdfat_pio_card_error_code(void *storage); // Release the card's PIO/state-machine resources. void sdfat_pio_card_end(void *storage); -// Mark the card's PIO state machines as surviving a soft reset, so rp2pio's -// reset path leaves them (and their loaded programs) in place. -void sdfat_pio_card_never_reset(void *storage); - #ifdef __cplusplus } #endif diff --git a/ports/raspberrypi/common-hal/usb_host/Port.c b/ports/raspberrypi/common-hal/usb_host/Port.c index f06e9e5d71d..6485c4938a5 100644 --- a/ports/raspberrypi/common-hal/usb_host/Port.c +++ b/ports/raspberrypi/common-hal/usb_host/Port.c @@ -161,18 +161,12 @@ usb_host_port_obj_t *common_hal_usb_host_port_construct(const mcu_pin_obj_t *dp, claim_pin(dp); claim_pin(dm); - PIO pio = pio_get_instance(pio_cfg.pio_tx_num); // Unclaim everything so that the library can. dma_channel_unclaim(pio_cfg.tx_ch); // Set all of the state machines to never reset. - rp2pio_statemachine_never_reset(pio, pio_cfg.sm_tx); - rp2pio_statemachine_never_reset(pio, pio_cfg.sm_rx); - rp2pio_statemachine_never_reset(pio, pio_cfg.sm_eop); - common_hal_never_reset_pin(dp); - common_hal_never_reset_pin(dm); // Core 1 will run the SOF interrupt directly. _core1_ready = false; diff --git a/ports/raspberrypi/supervisor/port.c b/ports/raspberrypi/supervisor/port.c index 34e9fc159fd..bcdd645a204 100644 --- a/ports/raspberrypi/supervisor/port.c +++ b/ports/raspberrypi/supervisor/port.c @@ -209,7 +209,6 @@ static void __no_inline_not_in_flash_func(setup_psram)(void) { reset_pin_number(CIRCUITPY_PSRAM_CHIP_SELECT->number); return; } - never_reset_pin_number(CIRCUITPY_PSRAM_CHIP_SELECT->number); // Enable quad mode. qmi_hw->direct_csr = 30 << QMI_DIRECT_CSR_CLKDIV_LSB | @@ -410,13 +409,6 @@ safe_mode_t port_init(void) { // Set up the critical section to protect the background task queue. critical_section_init(&background_queue_lock); - #if CIRCUITPY_CYW43 - never_reset_pin_number(CYW43_DEFAULT_PIN_WL_REG_ON); - never_reset_pin_number(CYW43_DEFAULT_PIN_WL_DATA_IN); - never_reset_pin_number(CYW43_DEFAULT_PIN_WL_CS); - never_reset_pin_number(CYW43_DEFAULT_PIN_WL_CLOCK); - #endif - // Reset everything into a known state before board_init. reset_port(); @@ -476,22 +468,10 @@ safe_mode_t port_init(void) { } void reset_port(void) { - #if CIRCUITPY_BUSIO - reset_uart(); - #endif - #if CIRCUITPY_COUNTIO reset_countio(); #endif - #if CIRCUITPY_RP2PIO - reset_rp2pio_statemachine(); - #endif - - #if CIRCUITPY_SDIOIO - sdioio_reset(); - #endif - #if CIRCUITPY_RTC rtc_reset(); #endif diff --git a/ports/renode/common-hal/busio/I2C.c b/ports/renode/common-hal/busio/I2C.c index 41649f180b3..51fe3ab2845 100644 --- a/ports/renode/common-hal/busio/I2C.c +++ b/ports/renode/common-hal/busio/I2C.c @@ -58,6 +58,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 uint8_t *out_data, size_t out_len, uint8_t *in_data, size_t in_len) { return -MP_EIO; } - -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { -} diff --git a/ports/renode/common-hal/busio/SPI.c b/ports/renode/common-hal/busio/SPI.c index 1f66fc5ec4a..9a412feac9b 100644 --- a/ports/renode/common-hal/busio/SPI.c +++ b/ports/renode/common-hal/busio/SPI.c @@ -14,9 +14,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, mp_raise_NotImplementedError(NULL); } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { -} - bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return true; } diff --git a/ports/renode/common-hal/busio/UART.c b/ports/renode/common-hal/busio/UART.c index dc71a982e4b..b04d6fd4a0c 100644 --- a/ports/renode/common-hal/busio/UART.c +++ b/ports/renode/common-hal/busio/UART.c @@ -82,6 +82,3 @@ void common_hal_busio_uart_clear_rx_buffer(busio_uart_obj_t *self) { bool common_hal_busio_uart_ready_to_tx(busio_uart_obj_t *self) { return true; } - -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { -} diff --git a/ports/renode/common-hal/microcontroller/Pin.c b/ports/renode/common-hal/microcontroller/Pin.c index 03903343556..83bd0612e8a 100644 --- a/ports/renode/common-hal/microcontroller/Pin.c +++ b/ports/renode/common-hal/microcontroller/Pin.c @@ -8,19 +8,9 @@ #include "shared-bindings/microcontroller/Pin.h" -void reset_all_pins(void) { -} - -void never_reset_pin_number(uint8_t pin_number) { -} - void reset_pin_number(uint8_t pin_number) { } -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - never_reset_pin_number(pin->number); -} - void common_hal_reset_pin(const mcu_pin_obj_t *pin) { reset_pin_number(pin->number); } diff --git a/ports/renode/common-hal/microcontroller/Pin.h b/ports/renode/common-hal/microcontroller/Pin.h index 5e42c5920ac..387ce678a26 100644 --- a/ports/renode/common-hal/microcontroller/Pin.h +++ b/ports/renode/common-hal/microcontroller/Pin.h @@ -25,10 +25,8 @@ extern const mcu_pin_obj_t pin_GPIO1; // A default weak implementation always returns `false`. bool board_reset_pin_number(uint8_t pin_number); -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_number); void claim_pin(const mcu_pin_obj_t *pin); bool pin_number_is_free(uint8_t pin_number); diff --git a/ports/silabs/common-hal/busio/I2C.c b/ports/silabs/common-hal/busio/I2C.c index 6c2b04d821d..31755020695 100644 --- a/ports/silabs/common-hal/busio/I2C.c +++ b/ports/silabs/common-hal/busio/I2C.c @@ -72,12 +72,6 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, } } -// Never reset I2C obj when reload -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - common_hal_never_reset_pin(self->sda); - common_hal_never_reset_pin(self->scl); -} - // Check I2C status, deinited or not bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) { return self->sda == NULL; diff --git a/ports/silabs/common-hal/busio/SPI.c b/ports/silabs/common-hal/busio/SPI.c index fb3b7c4fd20..3c5b146a418 100644 --- a/ports/silabs/common-hal/busio/SPI.c +++ b/ports/silabs/common-hal/busio/SPI.c @@ -99,13 +99,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, common_hal_mcu_pin_claim(miso); } -// Never reset SPI when reload -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - common_hal_never_reset_pin(self->mosi); - common_hal_never_reset_pin(self->miso); - common_hal_never_reset_pin(self->sck); -} - // Check SPI status, deinited or not bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->sck == NULL; diff --git a/ports/silabs/common-hal/busio/UART.c b/ports/silabs/common-hal/busio/UART.c index cfc87b6b6f8..9d3b29cec3b 100644 --- a/ports/silabs/common-hal/busio/UART.c +++ b/ports/silabs/common-hal/busio/UART.c @@ -45,13 +45,12 @@ DEFINE_BUF_QUEUE(UARTDRV_USART_BUFFER_SIZE, uartdrv_usart_tx_buffer); static UARTDRV_HandleData_t uartdrv_usart_handle; static UARTDRV_InitUart_t uartdrv_usart_init; static bool in_used = false; -static bool never_reset = false; busio_uart_obj_t *context; volatile Ecode_t errflag; // Used to restart read halts // Reset uart peripheral void uart_reset(void) { - if ((!never_reset) && in_used) { + if (in_used) { if (UARTDRV_DeInit(&uartdrv_usart_handle) != ECODE_EMDRV_UARTDRV_OK) { mp_raise_ValueError(MP_ERROR_TEXT("UART Deinit fail")); } @@ -138,14 +137,6 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, } } -// Never reset UART obj when reload -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - never_reset = true; - common_hal_never_reset_pin(self->tx); - common_hal_never_reset_pin(self->rx); - return; -} - // Check Uart status, deinited or not bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { return self->handle == NULL; diff --git a/ports/silabs/common-hal/digitalio/DigitalInOut.c b/ports/silabs/common-hal/digitalio/DigitalInOut.c index e9f2767308e..1f9a20f8fab 100644 --- a/ports/silabs/common-hal/digitalio/DigitalInOut.c +++ b/ports/silabs/common-hal/digitalio/DigitalInOut.c @@ -28,12 +28,6 @@ #include "shared-bindings/microcontroller/Pin.h" #include "py/runtime.h" -// Never reset pin when reload -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - common_hal_never_reset_pin(self->pin); -} - // Construct Digitalio obj digitalinout_result_t common_hal_digitalio_digitalinout_construct( digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) { diff --git a/ports/silabs/common-hal/microcontroller/Pin.c b/ports/silabs/common-hal/microcontroller/Pin.c index 249bc5ac482..5b322318e4e 100644 --- a/ports/silabs/common-hal/microcontroller/Pin.c +++ b/ports/silabs/common-hal/microcontroller/Pin.c @@ -33,48 +33,14 @@ GPIO_Port_TypeDef ports[] = {gpioPortA, gpioPortB, gpioPortC, gpioPortD}; static uint16_t claimed_pins[GPIO_PORT_COUNT]; -static uint16_t __ALIGNED(4) never_reset_pins[GPIO_PORT_COUNT]; - -// Reset all pin except pin in never_reset_pins list -void reset_all_pins(void) { - - uint8_t pin_num; - uint8_t port_num; - // Reset claimed pins - for (pin_num = 0; pin_num < GPIO_PORT_COUNT; pin_num++) { - claimed_pins[pin_num] = never_reset_pins[pin_num]; - } - - for (port_num = 0; port_num < GPIO_PORT_COUNT; port_num++) { - for (pin_num = 0; pin_num < 16; pin_num++) { - if (GPIO_PORT_PIN_VALID(ports[port_num], pin_num) - && !(never_reset_pins[port_num] >> pin_num & 0x01)) { - GPIO_PinModeSet(ports[port_num], pin_num, gpioModeInput, 1); - } - } - } -} // Mark pin as free and return it to a quiescent state. void reset_pin_number(uint8_t pin_port, uint8_t pin_number) { // Clear claimed bit & reset claimed_pins[pin_port] &= ~(1 << pin_number); - never_reset_pins[pin_port] &= ~(1 << pin_number); GPIO_PinModeSet(pin_port, pin_number, gpioModeInput, 1); } -// Mark pin as never reset -void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) { - never_reset_pins[pin_port] |= 1 << pin_number; - // Make sure never reset pins are also always claimed - claimed_pins[pin_port] |= 1 << pin_number; -} - -// Mark pin as never reset -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - never_reset_pin_number(pin->port, pin->number); -} - // Reset pin void common_hal_reset_pin(const mcu_pin_obj_t *pin) { if (pin == NULL) { diff --git a/ports/silabs/common-hal/microcontroller/Pin.h b/ports/silabs/common-hal/microcontroller/Pin.h index 20bf8a82f2b..a00f35a9378 100644 --- a/ports/silabs/common-hal/microcontroller/Pin.h +++ b/ports/silabs/common-hal/microcontroller/Pin.h @@ -31,6 +31,5 @@ #include "peripherals/pins.h" -void reset_all_pins(void); #endif // MICROPY_INCLUDED_EFR32_COMMON_HAL_MICROCONTROLLER_PIN_H diff --git a/ports/silabs/common-hal/pwmio/PWMOut.c b/ports/silabs/common-hal/pwmio/PWMOut.c index 495199360f7..844b8966a00 100644 --- a/ports/silabs/common-hal/pwmio/PWMOut.c +++ b/ports/silabs/common-hal/pwmio/PWMOut.c @@ -88,15 +88,6 @@ pwmout_result_t common_hal_pwmio_pwmout_construct(pwmio_pwmout_obj_t *self, return PWMOUT_OK; } -// Mark pwm obj to never reset after reload -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - common_hal_never_reset_pin(self->tim->pin); -} - -// Pwm will be reset after reloading. -void common_hal_pwmio_pwmout_reset_ok(pwmio_pwmout_obj_t *self) { -} - // Check pwm obj status, deinited or not bool common_hal_pwmio_pwmout_deinited(pwmio_pwmout_obj_t *self) { return self->tim == NULL; diff --git a/ports/silabs/supervisor/serial.c b/ports/silabs/supervisor/serial.c index 25dc86c1da9..24d2c3b172e 100644 --- a/ports/silabs/supervisor/serial.c +++ b/ports/silabs/supervisor/serial.c @@ -102,11 +102,9 @@ void port_serial_early_init(void) { EUSART_UartInitHf(EUSART0, &init); - // Claim and never reset UART console pin + // Claim UART console pins common_hal_mcu_pin_claim(&pin_PA5); common_hal_mcu_pin_claim(&pin_PA6); - common_hal_never_reset_pin(&pin_PA5); - common_hal_never_reset_pin(&pin_PA6); } // Enable EUSART0 interrupt, init ring buffer diff --git a/ports/stm/boards/blues_cygnet/board.c b/ports/stm/boards/blues_cygnet/board.c index f6650fb8f9c..eddebad3f5d 100644 --- a/ports/stm/boards/blues_cygnet/board.c +++ b/ports/stm/boards/blues_cygnet/board.c @@ -27,8 +27,6 @@ void initialize_discharge_pin(void) { common_hal_digitalio_digitalinout_construct(&power_pin, &pin_PH00); common_hal_digitalio_digitalinout_construct(&discharge_pin, &pin_PH01); - common_hal_digitalio_digitalinout_never_reset(&power_pin); - common_hal_digitalio_digitalinout_never_reset(&discharge_pin); GPIO_InitTypeDef GPIO_InitStruct; diff --git a/ports/stm/boards/meowbit_v121/board.c b/ports/stm/boards/meowbit_v121/board.c index c3c745f64a1..70d5a0e261f 100644 --- a/ports/stm/boards/meowbit_v121/board.c +++ b/ports/stm/boards/meowbit_v121/board.c @@ -96,7 +96,6 @@ void board_init(void) { board_buzz_obj.base.type = &audiopwmio_pwmaudioout_type; common_hal_audiopwmio_pwmaudioout_construct(&board_buzz_obj, &pin_PB08, NULL, 0x8000); - never_reset_pin_number(pin_PB08.port, pin_PB08.number); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/stm/boards/stm32f746g_discovery/board.c b/ports/stm/boards/stm32f746g_discovery/board.c index 5b4f3470769..26ff68518f6 100644 --- a/ports/stm/boards/stm32f746g_discovery/board.c +++ b/ports/stm/boards/stm32f746g_discovery/board.c @@ -25,7 +25,6 @@ void board_init(void) { HAL_GPIO_Init(GPIOK, &GPIO_InitStructure); HAL_GPIO_WritePin(GPIOK, GPIO_PIN_3, GPIO_PIN_RESET); - never_reset_pin_number(10, 3); } // Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here. diff --git a/ports/stm/boards/swan_r5/board.c b/ports/stm/boards/swan_r5/board.c index 690120bf5ac..a88c53b2389 100644 --- a/ports/stm/boards/swan_r5/board.c +++ b/ports/stm/boards/swan_r5/board.c @@ -28,8 +28,6 @@ void initialize_discharge_pin(void) { common_hal_digitalio_digitalinout_construct(&power_pin, &pin_PE04); common_hal_digitalio_digitalinout_construct(&discharge_pin, &pin_PE06); - common_hal_digitalio_digitalinout_never_reset(&power_pin); - common_hal_digitalio_digitalinout_never_reset(&discharge_pin); GPIO_InitTypeDef GPIO_InitStruct; /* Set the DISCHARGE pin and the USB_DETECT pin to FLOAT */ diff --git a/ports/stm/common-hal/alarm/pin/PinAlarm.c b/ports/stm/common-hal/alarm/pin/PinAlarm.c index 93512953d31..1cda14e0356 100644 --- a/ports/stm/common-hal/alarm/pin/PinAlarm.c +++ b/ports/stm/common-hal/alarm/pin/PinAlarm.c @@ -122,7 +122,6 @@ void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_ob // so we put it off until right before sleeping. deep_wkup_enabled = true; // EXTI needs to persist past the VM cleanup for fake deep sleep - stm_peripherals_exti_never_reset(alarm->pin->number); } if (!stm_peripherals_exti_reserve(alarm->pin->number)) { mp_raise_RuntimeError(MP_ERROR_TEXT("Pin interrupt already in use")); diff --git a/ports/stm/common-hal/audioio/AudioOut.c b/ports/stm/common-hal/audioio/AudioOut.c index e5dd620521c..6b48f504609 100644 --- a/ports/stm/common-hal/audioio/AudioOut.c +++ b/ports/stm/common-hal/audioio/AudioOut.c @@ -772,8 +772,7 @@ void audioout_reset(void) { active_audioout->paused = false; active_audioout->playing = false; // Mark the object deinited and drop both pin references so the next - // construct() starts from a fully clean state. reset_all_pins (run - // elsewhere in reset_port) releases the actual pin claims. + // construct() starts from a fully clean state. active_audioout->left_channel = NULL; active_audioout->right_channel = NULL; active_audioout = NULL; diff --git a/ports/stm/common-hal/busio/I2C.c b/ports/stm/common-hal/busio/I2C.c index 7f7eb990e4d..f2fe734c72a 100644 --- a/ports/stm/common-hal/busio/I2C.c +++ b/ports/stm/common-hal/busio/I2C.c @@ -152,10 +152,6 @@ void common_hal_busio_i2c_construct(busio_i2c_obj_t *self, HAL_NVIC_EnableIRQ(self->irq); } -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - never_reset_pin_number(self->scl->pin->port, self->scl->pin->number); - never_reset_pin_number(self->sda->pin->port, self->sda->pin->number); -} bool common_hal_busio_i2c_deinited(busio_i2c_obj_t *self) { return self->sda == NULL; diff --git a/ports/stm/common-hal/busio/SPI.c b/ports/stm/common-hal/busio/SPI.c index 24b65fbf54c..ecc58f7998b 100644 --- a/ports/stm/common-hal/busio/SPI.c +++ b/ports/stm/common-hal/busio/SPI.c @@ -213,16 +213,6 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self, } } -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - - never_reset_pin_number(self->sck->pin->port, self->sck->pin->number); - if (self->mosi != NULL) { - never_reset_pin_number(self->mosi->pin->port, self->mosi->pin->number); - } - if (self->miso != NULL) { - never_reset_pin_number(self->miso->pin->port, self->miso->pin->number); - } -} bool common_hal_busio_spi_deinited(busio_spi_obj_t *self) { return self->sck == NULL; diff --git a/ports/stm/common-hal/busio/UART.c b/ports/stm/common-hal/busio/UART.c index e44fbc66a6c..813cc997cfc 100644 --- a/ports/stm/common-hal/busio/UART.c +++ b/ports/stm/common-hal/busio/UART.c @@ -20,11 +20,9 @@ // arrays use 0 based numbering: UART1 is stored at index 0 static bool reserved_uart[MAX_UART]; -static bool never_reset_uart[MAX_UART]; int errflag; // Used to restart read halts static void uart_clock_enable(uint16_t mask); -static void uart_clock_disable(uint16_t mask); static void uart_assign_irq(busio_uart_obj_t *self, USART_TypeDef *USARTx); static USART_TypeDef *assign_uart_or_throw(busio_uart_obj_t *self, bool pin_eval, @@ -42,18 +40,6 @@ static USART_TypeDef *assign_uart_or_throw(busio_uart_obj_t *self, bool pin_eval } } -void uart_reset(void) { - uint16_t never_reset_mask = 0x00; - for (uint8_t i = 0; i < MAX_UART; i++) { - if (!never_reset_uart[i]) { - reserved_uart[i] = false; - MP_STATE_PORT(cpy_uart_obj_all)[i] = NULL; - } else { - never_reset_mask |= 1 << i; - } - } - uart_clock_disable(ALL_UARTS & ~(never_reset_mask)); -} void common_hal_busio_uart_construct(busio_uart_obj_t *self, const mcu_pin_obj_t *tx, const mcu_pin_obj_t *rx, @@ -224,16 +210,6 @@ void common_hal_busio_uart_construct(busio_uart_obj_t *self, errflag = HAL_OK; } -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - for (size_t i = 0; i < MP_ARRAY_SIZE(mcu_uart_banks); i++) { - if (mcu_uart_banks[i] == self->handle.Instance) { - never_reset_uart[i] = true; - never_reset_pin_number(self->tx->pin->port, self->tx->pin->number); - never_reset_pin_number(self->rx->pin->port, self->rx->pin->number); - break; - } - } -} bool common_hal_busio_uart_deinited(busio_uart_obj_t *self) { return self->tx == NULL && self->rx == NULL; @@ -247,7 +223,6 @@ void common_hal_busio_uart_deinit(busio_uart_obj_t *self) { for (size_t i = 0; i < MP_ARRAY_SIZE(mcu_uart_banks); i++) { if (mcu_uart_banks[i] == self->handle.Instance) { reserved_uart[i] = false; - never_reset_uart[i] = false; break; } } @@ -529,78 +504,6 @@ static void uart_clock_enable(uint16_t mask) { #endif } -static void uart_clock_disable(uint16_t mask) { - #ifdef USART1 - if (mask & (1 << 0)) { - __HAL_RCC_USART1_FORCE_RESET(); - __HAL_RCC_USART1_RELEASE_RESET(); - __HAL_RCC_USART1_CLK_DISABLE(); - } - #endif - #ifdef USART2 - if (mask & (1 << 1)) { - __HAL_RCC_USART2_FORCE_RESET(); - __HAL_RCC_USART2_RELEASE_RESET(); - __HAL_RCC_USART2_CLK_DISABLE(); - } - #endif - #ifdef USART3 - if (mask & (1 << 2)) { - __HAL_RCC_USART3_FORCE_RESET(); - __HAL_RCC_USART3_RELEASE_RESET(); - __HAL_RCC_USART3_CLK_DISABLE(); - } - #endif - #ifdef UART4 - if (mask & (1 << 3)) { - __HAL_RCC_UART4_FORCE_RESET(); - __HAL_RCC_UART4_RELEASE_RESET(); - __HAL_RCC_UART4_CLK_DISABLE(); - } - #endif - #ifdef UART5 - if (mask & (1 << 4)) { - __HAL_RCC_UART5_FORCE_RESET(); - __HAL_RCC_UART5_RELEASE_RESET(); - __HAL_RCC_UART5_CLK_DISABLE(); - } - #endif - #ifdef USART6 - if (mask & (1 << 5)) { - __HAL_RCC_USART6_FORCE_RESET(); - __HAL_RCC_USART6_RELEASE_RESET(); - __HAL_RCC_USART6_CLK_DISABLE(); - } - #endif - #ifdef UART7 - if (mask & (1 << 6)) { - __HAL_RCC_UART7_FORCE_RESET(); - __HAL_RCC_UART7_RELEASE_RESET(); - __HAL_RCC_UART7_CLK_DISABLE(); - } - #endif - #ifdef UART8 - if (mask & (1 << 7)) { - __HAL_RCC_UART8_FORCE_RESET(); - __HAL_RCC_UART8_RELEASE_RESET(); - __HAL_RCC_UART8_CLK_DISABLE(); - } - #endif - #ifdef UART9 - if (mask & (1 << 8)) { - __HAL_RCC_UART9_FORCE_RESET(); - __HAL_RCC_UART9_RELEASE_RESET(); - __HAL_RCC_UART9_CLK_DISABLE(); - } - #endif - #ifdef UART10 - if (mask & (1 << 9)) { - __HAL_RCC_UART10_FORCE_RESET(); - __HAL_RCC_UART10_RELEASE_RESET(); - __HAL_RCC_UART10_CLK_DISABLE(); - } - #endif -} static void uart_assign_irq(busio_uart_obj_t *self, USART_TypeDef *USARTx) { #ifdef USART1 diff --git a/ports/stm/common-hal/busio/UART.h b/ports/stm/common-hal/busio/UART.h index 5df7d457488..e6f115c38a2 100644 --- a/ports/stm/common-hal/busio/UART.h +++ b/ports/stm/common-hal/busio/UART.h @@ -35,4 +35,3 @@ typedef struct { bool sigint_enabled; } busio_uart_obj_t; -void uart_reset(void); diff --git a/ports/stm/common-hal/digitalio/DigitalInOut.c b/ports/stm/common-hal/digitalio/DigitalInOut.c index 359e278cb02..989052ad940 100644 --- a/ports/stm/common-hal/digitalio/DigitalInOut.c +++ b/ports/stm/common-hal/digitalio/DigitalInOut.c @@ -21,10 +21,6 @@ #error unknown MCU for DigitalInOut #endif -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { - never_reset_pin_number(self->pin->port, self->pin->number); -} digitalinout_result_t common_hal_digitalio_digitalinout_construct( digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) { diff --git a/ports/stm/common-hal/microcontroller/Pin.c b/ports/stm/common-hal/microcontroller/Pin.c index bdf5e5fb16c..a1b045ebce6 100644 --- a/ports/stm/common-hal/microcontroller/Pin.c +++ b/ports/stm/common-hal/microcontroller/Pin.c @@ -31,17 +31,6 @@ GPIO_TypeDef *ports[] = {GPIOA, GPIOB, GPIOC}; #define GPIO_PORT_COUNT (MP_ARRAY_SIZE(ports)) static uint16_t claimed_pins[GPIO_PORT_COUNT]; -static uint16_t __ALIGNED(4) never_reset_pins[GPIO_PORT_COUNT]; - -void reset_all_pins(void) { - // Reset claimed pins - for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) { - claimed_pins[i] = never_reset_pins[i]; - } - for (uint8_t i = 0; i < GPIO_PORT_COUNT; i++) { - HAL_GPIO_DeInit(ports[i], ~never_reset_pins[i]); - } -} // Mark pin as free and return it to a quiescent state. void reset_pin_number(uint8_t pin_port, uint8_t pin_number) { @@ -54,22 +43,9 @@ void reset_pin_number(uint8_t pin_port, uint8_t pin_number) { } // Clear claimed bit & reset claimed_pins[pin_port] &= ~(1 << pin_number); - never_reset_pins[pin_port] &= ~(1 << pin_number); HAL_GPIO_DeInit(ports[pin_port], 1 << pin_number); } -void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number) { - if (pin_number == NO_PIN) { - return; - } - never_reset_pins[pin_port] |= 1 << pin_number; - // Make sure never reset pins are also always claimed - claimed_pins[pin_port] |= 1 << pin_number; -} - -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - never_reset_pin_number(pin->port, pin->number); -} void common_hal_reset_pin(const mcu_pin_obj_t *pin) { if (pin == NULL) { diff --git a/ports/stm/common-hal/microcontroller/Pin.h b/ports/stm/common-hal/microcontroller/Pin.h index a1d347f26da..357e4db7c2e 100644 --- a/ports/stm/common-hal/microcontroller/Pin.h +++ b/ports/stm/common-hal/microcontroller/Pin.h @@ -10,12 +10,10 @@ #include "peripherals/pins.h" -void reset_all_pins(void); // reset_pin_number takes the pin number instead of the pointer so that objects don't // need to store a full pointer. void reset_pin_number(uint8_t pin_port, uint8_t pin_number); void claim_pin(uint8_t pin_port, uint8_t pin_number); bool pin_number_is_free(uint8_t pin_port, uint8_t pin_number); -void never_reset_pin_number(uint8_t pin_port, uint8_t pin_number); GPIO_TypeDef *pin_port(uint8_t pin_port); uint16_t pin_mask(uint8_t pin_number); diff --git a/ports/stm/common-hal/pwmio/PWMOut.c b/ports/stm/common-hal/pwmio/PWMOut.c index fe516065fbd..2c84d9d2dad 100644 --- a/ports/stm/common-hal/pwmio/PWMOut.c +++ b/ports/stm/common-hal/pwmio/PWMOut.c @@ -167,9 +167,6 @@ pwmout_result_t common_hal_pwmio_pwmout_construct(pwmio_pwmout_obj_t *self, return PWMOUT_OK; } -void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self) { - common_hal_never_reset_pin(self->pin); -} bool common_hal_pwmio_pwmout_deinited(pwmio_pwmout_obj_t *self) { return self->tim == NULL; diff --git a/ports/stm/common-hal/rgbmatrix/RGBMatrix.c b/ports/stm/common-hal/rgbmatrix/RGBMatrix.c index a8014222d7d..913953e49ef 100644 --- a/ports/stm/common-hal/rgbmatrix/RGBMatrix.c +++ b/ports/stm/common-hal/rgbmatrix/RGBMatrix.c @@ -16,7 +16,6 @@ extern void _PM_IRQ_HANDLER(void); void *common_hal_rgbmatrix_timer_allocate(rgbmatrix_rgbmatrix_obj_t *self) { TIM_TypeDef *timer = stm_peripherals_find_timer(); stm_peripherals_timer_reserve(timer); - stm_peripherals_timer_never_reset(timer); return timer; } diff --git a/ports/stm/common-hal/sdioio/SDCard.c b/ports/stm/common-hal/sdioio/SDCard.c index ef708248716..64fffa1115b 100644 --- a/ports/stm/common-hal/sdioio/SDCard.c +++ b/ports/stm/common-hal/sdioio/SDCard.c @@ -18,7 +18,6 @@ #include "shared-bindings/microcontroller/Pin.h" static bool reserved_sdio[MP_ARRAY_SIZE(mcu_sdio_banks)]; -static bool never_reset_sdio[MP_ARRAY_SIZE(mcu_sdio_banks)]; static const mcu_periph_obj_t *find_pin_function(const mcu_periph_obj_t *table, size_t sz, const mcu_pin_obj_t *pin, int periph_index) { for (size_t i = 0; i < sz; i++, table++) { @@ -334,12 +333,6 @@ bool common_hal_sdioio_sdcard_deinited(sdioio_sdcard_obj_t *self) { return self->command == NULL; } -static void never_reset_mcu_periph(const mcu_periph_obj_t *periph) { - if (periph) { - never_reset_pin_number(periph->pin->port, periph->pin->number); - } -} - static void reset_mcu_periph(const mcu_periph_obj_t *periph) { if (periph) { reset_pin_number(periph->pin->port, periph->pin->number); @@ -352,7 +345,6 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { } reserved_sdio[self->command->periph_index - 1] = false; - never_reset_sdio[self->command->periph_index - 1] = false; reset_mcu_periph(self->command); self->command = NULL; @@ -366,29 +358,4 @@ void common_hal_sdioio_sdcard_deinit(sdioio_sdcard_obj_t *self) { } } -void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self) { - if (common_hal_sdioio_sdcard_deinited(self)) { - return; - } - - if (never_reset_sdio[self->command->periph_index] - 1) { - return; - } - never_reset_sdio[self->command->periph_index - 1] = true; - - never_reset_mcu_periph(self->command); - never_reset_mcu_periph(self->clock); - - for (size_t i = 0; i < MP_ARRAY_SIZE(self->data); i++) { - never_reset_mcu_periph(self->data[i]); - } -} - -void sdioio_reset(void) { - for (size_t i = 0; i < MP_ARRAY_SIZE(reserved_sdio); i++) { - if (!never_reset_sdio[i]) { - reserved_sdio[i] = false; - } - } -} diff --git a/ports/stm/common-hal/sdioio/SDCard.h b/ports/stm/common-hal/sdioio/SDCard.h index 8f4d9453033..4fc5ba2e63e 100644 --- a/ports/stm/common-hal/sdioio/SDCard.h +++ b/ports/stm/common-hal/sdioio/SDCard.h @@ -24,4 +24,3 @@ typedef struct { uint32_t capacity; } sdioio_sdcard_obj_t; -void sdioio_reset(void); diff --git a/ports/stm/peripherals/exti.c b/ports/stm/peripherals/exti.c index 19fa3079ba0..5fe095f581f 100644 --- a/ports/stm/peripherals/exti.c +++ b/ports/stm/peripherals/exti.c @@ -13,26 +13,18 @@ #if !(CPY_STM32H7) static bool stm_exti_reserved[STM32_GPIO_PORT_SIZE]; -static bool stm_exti_never_reset[STM32_GPIO_PORT_SIZE]; static void (*stm_exti_callback[STM32_GPIO_PORT_SIZE])(uint8_t num); void exti_reset(void) { for (size_t i = 0; i < STM32_GPIO_PORT_SIZE; i++) { - if (!stm_exti_never_reset[i]) { - stm_exti_reserved[i] = false; - stm_exti_callback[i] = NULL; - stm_peripherals_exti_disable(i); - } + stm_exti_reserved[i] = false; + stm_exti_callback[i] = NULL; + stm_peripherals_exti_disable(i); } } -void stm_peripherals_exti_never_reset(uint8_t num) { - stm_exti_never_reset[num] = true; -} - void stm_peripherals_exti_reset_exti(uint8_t num) { stm_peripherals_exti_disable(num); - stm_exti_never_reset[num] = false; stm_exti_reserved[num] = false; stm_exti_callback[num] = NULL; } diff --git a/ports/stm/peripherals/exti.h b/ports/stm/peripherals/exti.h index 94b62f1768e..55e612fa7c1 100644 --- a/ports/stm/peripherals/exti.h +++ b/ports/stm/peripherals/exti.h @@ -11,7 +11,6 @@ #define STM32_GPIO_PORT_SIZE 16 void exti_reset(void); -void stm_peripherals_exti_never_reset(uint8_t num); void stm_peripherals_exti_reset_exti(uint8_t num); bool stm_peripherals_exti_is_free(uint8_t num); bool stm_peripherals_exti_reserve(uint8_t num); diff --git a/ports/stm/peripherals/sdram.c b/ports/stm/peripherals/sdram.c index 6179197fa95..31ffe780035 100644 --- a/ports/stm/peripherals/sdram.c +++ b/ports/stm/peripherals/sdram.c @@ -71,7 +71,6 @@ void sdram_init(const struct stm32_sdram_config *config) { GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF12_FMC; HAL_GPIO_Init(pin_port(sdram_pin_list[i].pin->port), &GPIO_InitStruct); - never_reset_pin_number(sdram_pin_list[i].pin->port, sdram_pin_list[i].pin->number); } } diff --git a/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c b/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c index 7e1809175f5..f9fdf572b6d 100644 --- a/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f401xe/gpio.c @@ -17,8 +17,4 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOH_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK } diff --git a/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c index 9a1e8eac52c..67df78fdc19 100644 --- a/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f405xx/gpio.c @@ -18,18 +18,8 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOG_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 13); // PC13 anti tamp - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK - // never_reset_pin_number(0,15); //PA15 JTDI - // never_reset_pin_number(1,3); //PB3 JTDO - // never_reset_pin_number(1,4); //PB4 JTRST // Port H is not included in GPIO port array - // never_reset_pin_number(5,0); //PH0 JTDO - // never_reset_pin_number(5,1); //PH1 JTRST } void stm32f4_peripherals_status_led(uint8_t led, uint8_t state) { diff --git a/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c index 9a1e8eac52c..67df78fdc19 100644 --- a/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f407xx/gpio.c @@ -18,18 +18,8 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOG_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 13); // PC13 anti tamp - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK - // never_reset_pin_number(0,15); //PA15 JTDI - // never_reset_pin_number(1,3); //PB3 JTDO - // never_reset_pin_number(1,4); //PB4 JTRST // Port H is not included in GPIO port array - // never_reset_pin_number(5,0); //PH0 JTDO - // never_reset_pin_number(5,1); //PH1 JTRST } void stm32f4_peripherals_status_led(uint8_t led, uint8_t state) { diff --git a/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c b/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c index db53087fd24..bfdc49d5597 100644 --- a/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f411xe/gpio.c @@ -20,17 +20,11 @@ void stm32_peripherals_gpio_init(void) { // Never reset pins // TODO: Move this out of peripherals. These helpers shouldn't reference anything CircuitPython // specific. - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT #if !(BOARD_OVERWRITE_SWD) - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK #endif // Port H is not included in GPIO port array - // never_reset_pin_number(5,0); //PH0 JTDO - // never_reset_pin_number(5,1); //PH1 JTRST } // LEDs are inverted on F411 DISCO diff --git a/ports/stm/peripherals/stm32f4/stm32f412cx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f412cx/gpio.c index 4cca79bf9e7..c8e74281d66 100644 --- a/ports/stm/peripherals/stm32f4/stm32f412cx/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f412cx/gpio.c @@ -14,6 +14,4 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOC_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK } diff --git a/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c index 94c2faf68bf..b8544743b0f 100644 --- a/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f412zx/gpio.c @@ -19,16 +19,6 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOD_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 13); // PC13 anti tamp - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK - // never_reset_pin_number(0,15); //PA15 JTDI - // never_reset_pin_number(1,3); //PB3 JTDO - // never_reset_pin_number(1,4); //PB4 JTRST // Port H is not included in GPIO port array - // never_reset_pin_number(5,0); //PH0 JTDO - // never_reset_pin_number(5,1); //PH1 JTRST } diff --git a/ports/stm/peripherals/stm32f4/stm32f446xx/gpio.c b/ports/stm/peripherals/stm32f4/stm32f446xx/gpio.c index 25a7ea5a6b8..bb532e581e7 100644 --- a/ports/stm/peripherals/stm32f4/stm32f446xx/gpio.c +++ b/ports/stm/peripherals/stm32f4/stm32f446xx/gpio.c @@ -16,11 +16,6 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOB_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 13); // PC13 anti tamp - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK } void stm32f4_peripherals_status_led(uint8_t led, uint8_t state) { diff --git a/ports/stm/peripherals/stm32f7/stm32f746xx/gpio.c b/ports/stm/peripherals/stm32f7/stm32f746xx/gpio.c index 96cfd8eaf85..ffe5ca5b557 100644 --- a/ports/stm/peripherals/stm32f7/stm32f746xx/gpio.c +++ b/ports/stm/peripherals/stm32f7/stm32f746xx/gpio.c @@ -23,10 +23,4 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOK_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK - never_reset_pin_number(7, 0); // PH0 OSC_IN - never_reset_pin_number(7, 1); // PH1 OSC_OUT } diff --git a/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c b/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c index a9fecc33540..7f874ec09da 100644 --- a/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c +++ b/ports/stm/peripherals/stm32f7/stm32f767xx/gpio.c @@ -19,8 +19,4 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOD_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK } diff --git a/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c b/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c index a9fecc33540..7f874ec09da 100644 --- a/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c +++ b/ports/stm/peripherals/stm32h7/stm32h743xx/gpio.c @@ -19,8 +19,4 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOD_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK } diff --git a/ports/stm/peripherals/stm32h7/stm32h750xx/gpio.c b/ports/stm/peripherals/stm32h7/stm32h750xx/gpio.c index f5ad843c9a6..42d9c3392c4 100644 --- a/ports/stm/peripherals/stm32h7/stm32h750xx/gpio.c +++ b/ports/stm/peripherals/stm32h7/stm32h750xx/gpio.c @@ -20,16 +20,6 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOI_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(7, 0); // PH00 OSC32_IN - never_reset_pin_number(7, 1); // PH01 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK // qspi flash pins for the Daisy Seed -- TODO ? - never_reset_pin_number(5, 6); // PF06 QSPI IO3 - never_reset_pin_number(5, 7); // PF07 QSPI IO2 - never_reset_pin_number(5, 8); // PF08 QSPI IO0 - never_reset_pin_number(5, 9); // PF09 QSPI IO1 - never_reset_pin_number(5, 10); // PF10 QSPI CLK - never_reset_pin_number(6, 6); // PG06 QSPI NCS } diff --git a/ports/stm/peripherals/stm32l4/stm32l433xx/gpio.c b/ports/stm/peripherals/stm32l4/stm32l433xx/gpio.c index eb8914b5585..907fa25905c 100644 --- a/ports/stm/peripherals/stm32l4/stm32l433xx/gpio.c +++ b/ports/stm/peripherals/stm32l4/stm32l433xx/gpio.c @@ -15,10 +15,6 @@ void stm32_peripherals_gpio_init(void) { __HAL_RCC_GPIOH_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK } void stm32l4_peripherals_status_led(uint8_t led, uint8_t state) { diff --git a/ports/stm/peripherals/stm32l4/stm32l4r5xx/gpio.c b/ports/stm/peripherals/stm32l4/stm32l4r5xx/gpio.c index a4adc58e42a..6ff699d72a9 100644 --- a/ports/stm/peripherals/stm32l4/stm32l4r5xx/gpio.c +++ b/ports/stm/peripherals/stm32l4/stm32l4r5xx/gpio.c @@ -22,17 +22,8 @@ void stm32_peripherals_gpio_init(void) { // __HAL_RCC_GPIOI_CLK_ENABLE(); // Never reset pins - never_reset_pin_number(2, 14); // PC14 OSC32_IN - never_reset_pin_number(2, 15); // PC15 OSC32_OUT - never_reset_pin_number(0, 13); // PA13 SWDIO - never_reset_pin_number(0, 14); // PA14 SWCLK - // never_reset_pin_number(0,15); //PA15 JTDI - // never_reset_pin_number(1,3); //PB3 JTDO - // never_reset_pin_number(1,4); //PB4 JTRST // Port H is not included in GPIO port array - // never_reset_pin_number(5,0); //PH0 JTDO - // never_reset_pin_number(5,1); //PH1 JTRST } void stm32l4_peripherals_status_led(uint8_t led, uint8_t state) { diff --git a/ports/stm/peripherals/timers.c b/ports/stm/peripherals/timers.c index 25cb9efcde0..4ded6c2637a 100644 --- a/ports/stm/peripherals/timers.c +++ b/ports/stm/peripherals/timers.c @@ -20,7 +20,6 @@ #define NULL_IRQ 0xFF static bool stm_timer_reserved[MP_ARRAY_SIZE(mcu_tim_banks)]; -static bool stm_timer_never_reset[MP_ARRAY_SIZE(mcu_tim_banks)]; typedef void (*stm_timer_callback_t)(void); // Array of function pointers. @@ -268,22 +267,6 @@ void stm_peripherals_timer_free(TIM_TypeDef *instance) { stm_timer_callback[tim_idx] = NULL; tim_clock_disable(1 << tim_idx); stm_timer_reserved[tim_idx] = false; - stm_timer_never_reset[tim_idx] = false; -} - -void stm_peripherals_timer_never_reset(TIM_TypeDef *instance) { - size_t tim_idx = stm_peripherals_timer_get_index(instance); - stm_timer_never_reset[tim_idx] = true; -} - -void stm_peripherals_timer_reset_ok(TIM_TypeDef *instance) { - size_t tim_idx = stm_peripherals_timer_get_index(instance); - stm_timer_never_reset[tim_idx] = false; -} - -bool stm_peripherals_timer_is_never_reset(TIM_TypeDef *instance) { - size_t tim_idx = stm_peripherals_timer_get_index(instance); - return stm_timer_never_reset[tim_idx]; } bool stm_peripherals_timer_is_reserved(TIM_TypeDef *instance) { diff --git a/ports/stm/peripherals/timers.h b/ports/stm/peripherals/timers.h index 00c198250cb..65070886b57 100644 --- a/ports/stm/peripherals/timers.h +++ b/ports/stm/peripherals/timers.h @@ -20,8 +20,5 @@ TIM_TypeDef *stm_peripherals_find_timer(void); void stm_peripherals_timer_preinit(TIM_TypeDef *instance, uint8_t prio, void (*callback)(void)); void stm_peripherals_timer_reserve(TIM_TypeDef *instance); void stm_peripherals_timer_free(TIM_TypeDef *instance); -void stm_peripherals_timer_never_reset(TIM_TypeDef *instance); -void stm_peripherals_timer_reset_ok(TIM_TypeDef *instance); -bool stm_peripherals_timer_is_never_reset(TIM_TypeDef *instance); bool stm_peripherals_timer_is_reserved(TIM_TypeDef *instance); size_t stm_peripherals_timer_get_index(TIM_TypeDef *instance); diff --git a/ports/stm/supervisor/port.c b/ports/stm/supervisor/port.c index 21da8b2d653..20e07b47c0e 100644 --- a/ports/stm/supervisor/port.c +++ b/ports/stm/supervisor/port.c @@ -397,11 +397,7 @@ void reset_port(void) { rtc_reset(); #endif - #if CIRCUITPY_BUSIO - uart_reset(); - #endif #if CIRCUITPY_SDIOIO - sdioio_reset(); #endif #if CIRCUITPY_ALARM exti_reset(); diff --git a/ports/stm/supervisor/usb.c b/ports/stm/supervisor/usb.c index 7c782f61d0d..c1387378912 100644 --- a/ports/stm/supervisor/usb.c +++ b/ports/stm/supervisor/usb.c @@ -78,8 +78,6 @@ void init_usb_hardware(void) { #endif HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - never_reset_pin_number(0, 11); - never_reset_pin_number(0, 12); claim_pin(0, 11); claim_pin(0, 12); @@ -89,7 +87,6 @@ void init_usb_hardware(void) { GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - never_reset_pin_number(0, 9); claim_pin(0, 9); #endif @@ -105,7 +102,6 @@ void init_usb_hardware(void) { GPIO_InitStruct.Alternate = GPIO_AF10_OTG_FS; #endif HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - never_reset_pin_number(0, 10); claim_pin(0, 10); #endif @@ -115,7 +111,6 @@ void init_usb_hardware(void) { GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); - never_reset_pin_number(0, 8); claim_pin(0, 8); #endif diff --git a/ports/zephyr-cp/common-hal/busio/I2C.c b/ports/zephyr-cp/common-hal/busio/I2C.c index 84e95721b27..72f5a2d3e4f 100644 --- a/ports/zephyr-cp/common-hal/busio/I2C.c +++ b/ports/zephyr-cp/common-hal/busio/I2C.c @@ -146,7 +146,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 return 0; } - -void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self) { - // Not needed for Zephyr port (devices are managed by Zephyr) -} diff --git a/ports/zephyr-cp/common-hal/busio/SPI.c b/ports/zephyr-cp/common-hal/busio/SPI.c index 2864c90b490..0b65d9c0a1f 100644 --- a/ports/zephyr-cp/common-hal/busio/SPI.c +++ b/ports/zephyr-cp/common-hal/busio/SPI.c @@ -275,7 +275,3 @@ uint8_t common_hal_busio_spi_get_phase(busio_spi_obj_t *self) { uint8_t common_hal_busio_spi_get_polarity(busio_spi_obj_t *self) { return (self->config[self->active_config].operation & SPI_MODE_CPOL) ? 1 : 0; } - -void common_hal_busio_spi_never_reset(busio_spi_obj_t *self) { - // Not needed for Zephyr port (devices are managed by Zephyr) -} diff --git a/ports/zephyr-cp/common-hal/busio/UART.c b/ports/zephyr-cp/common-hal/busio/UART.c index af1de0e9023..deb0f94520d 100644 --- a/ports/zephyr-cp/common-hal/busio/UART.c +++ b/ports/zephyr-cp/common-hal/busio/UART.c @@ -49,10 +49,6 @@ static void serial_cb(const struct device *dev, void *user_data) { } } -void common_hal_busio_uart_never_reset(busio_uart_obj_t *self) { - // Not needed for Zephyr port (devices are managed by Zephyr) -} - // Helper function for Zephyr-specific initialization from device tree mp_obj_t common_hal_busio_uart_construct_from_device(busio_uart_obj_t *self, const struct device *uart_device, uint16_t receiver_buffer_size, byte *receiver_buffer) { self->base.type = &busio_uart_type; diff --git a/ports/zephyr-cp/common-hal/digitalio/DigitalInOut.c b/ports/zephyr-cp/common-hal/digitalio/DigitalInOut.c index 0da16a9b720..099b7b901f6 100644 --- a/ports/zephyr-cp/common-hal/digitalio/DigitalInOut.c +++ b/ports/zephyr-cp/common-hal/digitalio/DigitalInOut.c @@ -9,10 +9,6 @@ #include #include -void common_hal_digitalio_digitalinout_never_reset( - digitalio_digitalinout_obj_t *self) { -} - digitalinout_result_t common_hal_digitalio_digitalinout_construct( digitalio_digitalinout_obj_t *self, const mcu_pin_obj_t *pin) { claim_pin(pin); diff --git a/ports/zephyr-cp/common-hal/microcontroller/Pin.c b/ports/zephyr-cp/common-hal/microcontroller/Pin.c index 66882b6b5f0..9227f86f645 100644 --- a/ports/zephyr-cp/common-hal/microcontroller/Pin.c +++ b/ports/zephyr-cp/common-hal/microcontroller/Pin.c @@ -11,39 +11,12 @@ // Bit mask of claimed pins on each of up to two ports. nrf52832 has one port; nrf52840 has two. // static uint32_t claimed_pins[GPIO_COUNT]; -// static uint32_t never_reset_pins[GPIO_COUNT]; - -void reset_all_pins(void) { - // for (size_t i = 0; i < GPIO_COUNT; i++) { - // claimed_pins[i] = never_reset_pins[i]; - // } - - // for (uint32_t pin = 0; pin < NUMBER_OF_PINS; ++pin) { - // if ((never_reset_pins[nrf_pin_port(pin)] & (1 << nrf_relative_pin_number(pin))) != 0) { - // continue; - // } - // nrf_gpio_cfg_default(pin); - // } - - // // After configuring SWD because it may be shared. - // reset_speaker_enable_pin(); -} // Mark pin as free and return it to a quiescent state. void reset_pin(const mcu_pin_obj_t *pin) { // Clear claimed bit. // claimed_pins[nrf_pin_port(pin_number)] &= ~(1 << nrf_relative_pin_number(pin_number)); - // never_reset_pins[nrf_pin_port(pin_number)] &= ~(1 << nrf_relative_pin_number(pin_number)); -} - - -void never_reset_pin_number(uint8_t pin_number) { - // never_reset_pins[nrf_pin_port(pin_number)] |= 1 << nrf_relative_pin_number(pin_number); -} - -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin) { - never_reset_pin_number(pin->number); } void common_hal_reset_pin(const mcu_pin_obj_t *pin) { diff --git a/ports/zephyr-cp/common-hal/microcontroller/Pin.h b/ports/zephyr-cp/common-hal/microcontroller/Pin.h index d38ab9bd200..9d1e3d04f91 100644 --- a/ports/zephyr-cp/common-hal/microcontroller/Pin.h +++ b/ports/zephyr-cp/common-hal/microcontroller/Pin.h @@ -19,6 +19,5 @@ typedef struct { #include "autogen-pins.h" -void reset_all_pins(void); void reset_pin(const mcu_pin_obj_t *pin); void claim_pin(const mcu_pin_obj_t *pin); diff --git a/shared-bindings/busio/I2C.h b/shared-bindings/busio/I2C.h index 2978a907544..0ade463d9f8 100644 --- a/shared-bindings/busio/I2C.h +++ b/shared-bindings/busio/I2C.h @@ -50,4 +50,3 @@ mp_negative_errno_t common_hal_busio_i2c_write_read(busio_i2c_obj_t *self, uint1 uint8_t *out_data, size_t out_len, uint8_t *in_data, size_t in_len); // This is used by the supervisor to claim I2C devices indefinitely. -extern void common_hal_busio_i2c_never_reset(busio_i2c_obj_t *self); diff --git a/shared-bindings/busio/SPI.h b/shared-bindings/busio/SPI.h index 76ed697d665..b3952b2ffd7 100644 --- a/shared-bindings/busio/SPI.h +++ b/shared-bindings/busio/SPI.h @@ -51,7 +51,6 @@ uint8_t common_hal_busio_spi_get_phase(busio_spi_obj_t *self); uint8_t common_hal_busio_spi_get_polarity(busio_spi_obj_t *self); // This is used by the supervisor to claim SPI devices indefinitely. -extern void common_hal_busio_spi_never_reset(busio_spi_obj_t *self); extern busio_spi_obj_t *validate_obj_is_spi_bus(mp_obj_t obj_in, qstr arg_name); diff --git a/shared-bindings/busio/UART.h b/shared-bindings/busio/UART.h index c8e6755c129..1d10b2ee745 100644 --- a/shared-bindings/busio/UART.h +++ b/shared-bindings/busio/UART.h @@ -47,4 +47,3 @@ extern uint32_t common_hal_busio_uart_rx_characters_available(busio_uart_obj_t * extern void common_hal_busio_uart_clear_rx_buffer(busio_uart_obj_t *self); extern bool common_hal_busio_uart_ready_to_tx(busio_uart_obj_t *self); -extern void common_hal_busio_uart_never_reset(busio_uart_obj_t *self); diff --git a/shared-bindings/digitalio/DigitalInOut.c b/shared-bindings/digitalio/DigitalInOut.c index 52d48e54d32..7c0b1a4330c 100644 --- a/shared-bindings/digitalio/DigitalInOut.c +++ b/shared-bindings/digitalio/DigitalInOut.c @@ -73,7 +73,7 @@ static mp_obj_t digitalio_digitalinout_make_new(const mp_obj_type_t *type, const mcu_pin_obj_t *pin = common_hal_digitalio_validate_pin(args[0]); - digitalio_digitalinout_obj_t *self = mp_obj_malloc(digitalio_digitalinout_obj_t, &digitalio_digitalinout_type); + digitalio_digitalinout_obj_t *self = mp_obj_malloc_with_finaliser(digitalio_digitalinout_obj_t, &digitalio_digitalinout_type); common_hal_digitalio_digitalinout_construct(self, pin); return MP_OBJ_FROM_PTR(self); @@ -332,6 +332,7 @@ MP_PROPERTY_GETSET(digitalio_digitalio_pull_obj, static const mp_rom_map_elem_t digitalio_digitalinout_locals_dict_table[] = { // instance methods { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&digitalio_digitalinout_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&digitalio_digitalinout_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, { MP_ROM_QSTR(MP_QSTR_switch_to_output), MP_ROM_PTR(&digitalio_digitalinout_switch_to_output_obj) }, diff --git a/shared-bindings/digitalio/DigitalInOut.h b/shared-bindings/digitalio/DigitalInOut.h index 8d3fe8c00a2..7b7249efba4 100644 --- a/shared-bindings/digitalio/DigitalInOut.h +++ b/shared-bindings/digitalio/DigitalInOut.h @@ -52,7 +52,6 @@ digitalinout_result_t common_hal_digitalio_digitalinout_set_drive_mode(digitalio digitalio_drive_mode_t common_hal_digitalio_digitalinout_get_drive_mode(digitalio_digitalinout_obj_t *self); digitalinout_result_t common_hal_digitalio_digitalinout_set_pull(digitalio_digitalinout_obj_t *self, digitalio_pull_t pull); digitalio_pull_t common_hal_digitalio_digitalinout_get_pull(digitalio_digitalinout_obj_t *self); -void common_hal_digitalio_digitalinout_never_reset(digitalio_digitalinout_obj_t *self); digitalio_digitalinout_obj_t *assert_digitalinout(mp_obj_t obj); volatile uint32_t *common_hal_digitalio_digitalinout_get_reg(digitalio_digitalinout_obj_t *self, digitalinout_reg_op_t op, uint32_t *mask); diff --git a/shared-bindings/keypad/KeyMatrix.c b/shared-bindings/keypad/KeyMatrix.c index f8d45eac62f..0065c01fda7 100644 --- a/shared-bindings/keypad/KeyMatrix.c +++ b/shared-bindings/keypad/KeyMatrix.c @@ -122,7 +122,7 @@ static mp_obj_t keypad_keymatrix_make_new(const mp_obj_type_t *type, size_t n_ar column_pins_array[column] = pin; } - keypad_keymatrix_obj_t *self = mp_obj_malloc(keypad_keymatrix_obj_t, &keypad_keymatrix_type); + keypad_keymatrix_obj_t *self = mp_obj_malloc_with_finaliser(keypad_keymatrix_obj_t, &keypad_keymatrix_type); common_hal_keypad_keymatrix_construct(self, num_row_pins, row_pins_array, num_column_pins, column_pins_array, args[ARG_columns_to_anodes].u_bool, interval, max_events, debounce_threshold); return MP_OBJ_FROM_PTR(self); @@ -239,6 +239,7 @@ MP_DEFINE_CONST_FUN_OBJ_3(keypad_keymatrix_row_column_to_key_number_obj, keypad_ static const mp_rom_map_elem_t keypad_keymatrix_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&keypad_keymatrix_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&keypad_keymatrix_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, diff --git a/shared-bindings/keypad/Keys.c b/shared-bindings/keypad/Keys.c index 5fd065fc627..bab858e6ee9 100644 --- a/shared-bindings/keypad/Keys.c +++ b/shared-bindings/keypad/Keys.c @@ -111,7 +111,7 @@ static mp_obj_t keypad_keys_make_new(const mp_obj_type_t *type, size_t n_args, s validate_obj_is_free_pin(mp_obj_subscr(pins, MP_OBJ_NEW_SMALL_INT(i), MP_OBJ_SENTINEL), MP_QSTR_pin); } - keypad_keys_obj_t *self = mp_obj_malloc(keypad_keys_obj_t, &keypad_keys_type); + keypad_keys_obj_t *self = mp_obj_malloc_with_finaliser(keypad_keys_obj_t, &keypad_keys_type); common_hal_keypad_keys_construct(self, num_pins, pins_array, value_when_pressed, args[ARG_pull].u_bool, interval, max_events, debounce_threshold); return MP_OBJ_FROM_PTR(self); @@ -170,6 +170,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(keypad_keys_deinit_obj, keypad_keys_deinit); //| static const mp_rom_map_elem_t keypad_keys_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&keypad_keys_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&keypad_keys_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, diff --git a/shared-bindings/keypad/ShiftRegisterKeys.c b/shared-bindings/keypad/ShiftRegisterKeys.c index 7f89a11ecf1..cda0ef2a311 100644 --- a/shared-bindings/keypad/ShiftRegisterKeys.c +++ b/shared-bindings/keypad/ShiftRegisterKeys.c @@ -159,7 +159,7 @@ static mp_obj_t keypad_shiftregisterkeys_make_new(const mp_obj_type_t *type, siz const uint8_t debounce_threshold = (uint8_t)mp_arg_validate_int_range(args[ARG_debounce_threshold].u_int, 1, 127, MP_QSTR_debounce_threshold); keypad_shiftregisterkeys_obj_t *self = - mp_obj_malloc(keypad_shiftregisterkeys_obj_t, &keypad_shiftregisterkeys_type); + mp_obj_malloc_with_finaliser(keypad_shiftregisterkeys_obj_t, &keypad_shiftregisterkeys_type); common_hal_keypad_shiftregisterkeys_construct( self, clock, num_data_pins, data_pins_array, latch, value_to_latch, num_key_counts, key_count_array, value_when_pressed, interval, max_events, debounce_threshold); @@ -219,6 +219,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(keypad_shiftregisterkeys_deinit_obj, keypad_shiftregis static const mp_rom_map_elem_t keypad_shiftregisterkeys_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&keypad_shiftregisterkeys_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&keypad_shiftregisterkeys_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, diff --git a/shared-bindings/keypad_demux/DemuxKeyMatrix.c b/shared-bindings/keypad_demux/DemuxKeyMatrix.c index ba8d857c6a3..b0e94ffabcc 100644 --- a/shared-bindings/keypad_demux/DemuxKeyMatrix.c +++ b/shared-bindings/keypad_demux/DemuxKeyMatrix.c @@ -122,7 +122,7 @@ static mp_obj_t keypad_demux_demuxkeymatrix_make_new(const mp_obj_type_t *type, column_pins_array[column] = pin; } - keypad_demux_demuxkeymatrix_obj_t *self = mp_obj_malloc(keypad_demux_demuxkeymatrix_obj_t, &keypad_demux_demuxkeymatrix_type); + keypad_demux_demuxkeymatrix_obj_t *self = mp_obj_malloc_with_finaliser(keypad_demux_demuxkeymatrix_obj_t, &keypad_demux_demuxkeymatrix_type); // Last arg is use_gc_allocator, true during VM use. common_hal_keypad_demux_demuxkeymatrix_construct(self, num_row_addr_pins, row_addr_pins_array, num_column_pins, column_pins_array, args[ARG_columns_to_anodes].u_bool, args[ARG_transpose].u_bool, interval, max_events, debounce_threshold, true); @@ -235,6 +235,7 @@ MP_DEFINE_CONST_FUN_OBJ_3(keypad_demux_demuxkeymatrix_row_column_to_key_number_o static const mp_rom_map_elem_t keypad_demux_demuxkeymatrix_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&keypad_demux_demuxkeymatrix_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&keypad_demux_demuxkeymatrix_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, diff --git a/shared-bindings/microcontroller/Pin.h b/shared-bindings/microcontroller/Pin.h index 8ddca71bfbb..4e21feaa48e 100644 --- a/shared-bindings/microcontroller/Pin.h +++ b/shared-bindings/microcontroller/Pin.h @@ -28,7 +28,6 @@ MP_NORETURN void raise_ValueError_invalid_pin_name(qstr pin_name); void assert_pin_free(const mcu_pin_obj_t *pin); bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin); -void common_hal_never_reset_pin(const mcu_pin_obj_t *pin); void common_hal_reset_pin(const mcu_pin_obj_t *pin); uint8_t common_hal_mcu_pin_number(const mcu_pin_obj_t *pin); void common_hal_mcu_pin_claim(const mcu_pin_obj_t *pin); diff --git a/shared-bindings/pwmio/PWMOut.h b/shared-bindings/pwmio/PWMOut.h index 3c3093ae628..0f03f60bf0e 100644 --- a/shared-bindings/pwmio/PWMOut.h +++ b/shared-bindings/pwmio/PWMOut.h @@ -34,7 +34,5 @@ extern bool common_hal_pwmio_pwmout_get_variable_frequency(pwmio_pwmout_obj_t *s extern const mcu_pin_obj_t *common_hal_pwmio_pwmout_get_pin(pwmio_pwmout_obj_t *self); // This is used by the supervisor to claim PWMOut devices indefinitely. -extern void common_hal_pwmio_pwmout_never_reset(pwmio_pwmout_obj_t *self); -extern void common_hal_pwmio_pwmout_reset_ok(pwmio_pwmout_obj_t *self); extern void common_hal_pwmio_pwmout_raise_error(pwmout_result_t result); diff --git a/shared-bindings/rgbmatrix/RGBMatrix.c b/shared-bindings/rgbmatrix/RGBMatrix.c index 6242f981fdf..76b5465d6cf 100644 --- a/shared-bindings/rgbmatrix/RGBMatrix.c +++ b/shared-bindings/rgbmatrix/RGBMatrix.c @@ -29,15 +29,10 @@ static uint8_t validate_pin(mp_obj_t obj, qstr arg_name) { return common_hal_mcu_pin_number(result); } -static void claim_and_never_reset_pin(mp_obj_t pin) { - common_hal_mcu_pin_claim(pin); - common_hal_never_reset_pin(pin); -} - -static void claim_and_never_reset_pins(mp_obj_t seq) { +static void claim_pins(mp_obj_t seq) { mp_int_t len = MP_OBJ_SMALL_INT_VALUE(mp_obj_len(seq)); for (mp_int_t i = 0; i < len; i++) { - claim_and_never_reset_pin(mp_obj_subscr(seq, MP_OBJ_NEW_SMALL_INT(i), MP_OBJ_SENTINEL)); + common_hal_mcu_pin_claim(mp_obj_subscr(seq, MP_OBJ_NEW_SMALL_INT(i), MP_OBJ_SENTINEL)); } } @@ -256,11 +251,11 @@ static mp_obj_t rgbmatrix_rgbmatrix_make_new(const mp_obj_type_t *type, size_t n args[ARG_doublebuffer].u_bool, args[ARG_framebuffer].u_obj, tile, args[ARG_serpentine].u_bool, NULL); - claim_and_never_reset_pins(args[ARG_rgb_list].u_obj); - claim_and_never_reset_pins(args[ARG_addr_list].u_obj); - claim_and_never_reset_pin(args[ARG_clock_pin].u_obj); - claim_and_never_reset_pin(args[ARG_output_enable_pin].u_obj); - claim_and_never_reset_pin(args[ARG_latch_pin].u_obj); + claim_pins(args[ARG_rgb_list].u_obj); + claim_pins(args[ARG_addr_list].u_obj); + common_hal_mcu_pin_claim(args[ARG_clock_pin].u_obj); + common_hal_mcu_pin_claim(args[ARG_output_enable_pin].u_obj); + common_hal_mcu_pin_claim(args[ARG_latch_pin].u_obj); return MP_OBJ_FROM_PTR(self); } diff --git a/shared-bindings/sdioio/SDCard.c b/shared-bindings/sdioio/SDCard.c index baf1e1660e8..4466bc5a290 100644 --- a/shared-bindings/sdioio/SDCard.c +++ b/shared-bindings/sdioio/SDCard.c @@ -85,7 +85,7 @@ static mp_obj_t sdioio_sdcard_make_new(const mp_obj_type_t *type, size_t n_args, uint8_t num_data; validate_list_is_free_pins(MP_QSTR_data, data_pins, MP_ARRAY_SIZE(data_pins), args[ARG_data].u_obj, &num_data); - sdioio_sdcard_obj_t *self = mp_obj_malloc(sdioio_sdcard_obj_t, &sdioio_SDCard_type); + sdioio_sdcard_obj_t *self = mp_obj_malloc_with_finaliser(sdioio_sdcard_obj_t, &sdioio_SDCard_type); common_hal_sdioio_sdcard_construct(self, clock, command, num_data, data_pins, args[ARG_frequency].u_int); return MP_OBJ_FROM_PTR(self); } @@ -241,6 +241,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(sdioio_sdcard_deinit_obj, sdioio_sdcard_obj_deinit); static const mp_rom_map_elem_t sdioio_sdcard_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&sdioio_sdcard_deinit_obj) }, + { MP_ROM_QSTR(MP_QSTR___del__), MP_ROM_PTR(&sdioio_sdcard_deinit_obj) }, { MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) }, { MP_ROM_QSTR(MP_QSTR___exit__), MP_ROM_PTR(&default___exit___obj) }, diff --git a/shared-bindings/sdioio/SDCard.h b/shared-bindings/sdioio/SDCard.h index 042521aea50..e33d07305dc 100644 --- a/shared-bindings/sdioio/SDCard.h +++ b/shared-bindings/sdioio/SDCard.h @@ -46,4 +46,3 @@ mp_negative_errno_t sdioio_sdcard_writeblocks(mp_obj_t self_in, uint8_t *buf, ui bool sdioio_sdcard_ioctl(mp_obj_t self_in, size_t cmd, size_t arg, mp_int_t *out_value); // This is used by the supervisor to claim SDIO devices indefinitely. -extern void common_hal_sdioio_sdcard_never_reset(sdioio_sdcard_obj_t *self); diff --git a/shared-module/aurora_epaper/aurora_framebuffer.c b/shared-module/aurora_epaper/aurora_framebuffer.c index 65b08e15b1c..4f900883b29 100644 --- a/shared-module/aurora_epaper/aurora_framebuffer.c +++ b/shared-module/aurora_epaper/aurora_framebuffer.c @@ -69,34 +69,28 @@ void common_hal_aurora_epaper_framebuffer_construct( // CS common_hal_digitalio_digitalinout_construct(&self->chip_select, chip_select); common_hal_digitalio_digitalinout_switch_to_output(&self->chip_select, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(chip_select); // RST common_hal_digitalio_digitalinout_construct(&self->reset, reset); common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(reset); // BUSY common_hal_digitalio_digitalinout_construct(&self->busy, busy); common_hal_digitalio_digitalinout_switch_to_input(&self->busy, PULL_NONE); - common_hal_never_reset_pin(busy); // DC common_hal_digitalio_digitalinout_construct(&self->discharge, discharge); common_hal_digitalio_digitalinout_switch_to_output(&self->discharge, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(discharge); // Power pin (if set) if (power != NULL) { common_hal_digitalio_digitalinout_construct(&self->power, power); common_hal_digitalio_digitalinout_switch_to_output(&self->power, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(power); } else { self->power.pin = NULL; } self->bus = spi; - common_hal_busio_spi_never_reset(self->bus); self->width = width; self->height = height; diff --git a/shared-module/busdisplay/BusDisplay.c b/shared-module/busdisplay/BusDisplay.c index 01e0f7a7896..ee850aced2f 100644 --- a/shared-module/busdisplay/BusDisplay.c +++ b/shared-module/busdisplay/BusDisplay.c @@ -110,16 +110,13 @@ void common_hal_busdisplay_busdisplay_construct(busdisplay_busdisplay_obj_t *sel if (result != PWMOUT_OK) { self->backlight_inout.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->backlight_inout, backlight_pin); - common_hal_never_reset_pin(backlight_pin); } else { self->backlight_pwm.base.type = &pwmio_pwmout_type; - common_hal_pwmio_pwmout_never_reset(&self->backlight_pwm); } #else // Otherwise default to digital self->backlight_inout.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->backlight_inout, backlight_pin); - common_hal_never_reset_pin(backlight_pin); #endif } diff --git a/shared-module/epaperdisplay/EPaperDisplay.c b/shared-module/epaperdisplay/EPaperDisplay.c index d34be9d5c7c..bd5cfb3898d 100644 --- a/shared-module/epaperdisplay/EPaperDisplay.c +++ b/shared-module/epaperdisplay/EPaperDisplay.c @@ -88,7 +88,6 @@ void common_hal_epaperdisplay_epaperdisplay_construct(epaperdisplay_epaperdispla if (args->busy_pin != NULL) { self->busy.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->busy, args->busy_pin); - common_hal_never_reset_pin(args->busy_pin); } // Clear the color memory if it isn't in use. diff --git a/shared-module/fourwire/FourWire.c b/shared-module/fourwire/FourWire.c index d87cb0cec0f..0d1b651df26 100644 --- a/shared-module/fourwire/FourWire.c +++ b/shared-module/fourwire/FourWire.c @@ -23,7 +23,6 @@ void common_hal_fourwire_fourwire_construct(fourwire_fourwire_obj_t *self, uint8_t polarity, uint8_t phase) { self->bus = spi; - common_hal_busio_spi_never_reset(self->bus); self->frequency = baudrate; self->polarity = polarity; @@ -35,20 +34,17 @@ void common_hal_fourwire_fourwire_construct(fourwire_fourwire_obj_t *self, self->command = digitalinout_protocol_from_pin(command, MP_QSTR_command, true, use_port_allocation, &self->own_command); if (self->command != mp_const_none) { digitalinout_protocol_switch_to_output(self->command, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(command); } self->reset = digitalinout_protocol_from_pin(reset, MP_QSTR_reset, true, use_port_allocation, &self->own_reset); if (self->reset != mp_const_none) { digitalinout_protocol_switch_to_output(self->reset, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(reset); common_hal_fourwire_fourwire_reset(self); } self->chip_select = digitalinout_protocol_from_pin(chip_select, MP_QSTR_chip_select, true, use_port_allocation, &self->own_chip_select); if (self->chip_select != mp_const_none) { digitalinout_protocol_switch_to_output(self->chip_select, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(chip_select); } } diff --git a/shared-module/i2cdisplaybus/I2CDisplayBus.c b/shared-module/i2cdisplaybus/I2CDisplayBus.c index 47b5865d158..1e8b029d858 100644 --- a/shared-module/i2cdisplaybus/I2CDisplayBus.c +++ b/shared-module/i2cdisplaybus/I2CDisplayBus.c @@ -27,7 +27,6 @@ void common_hal_i2cdisplaybus_i2cdisplaybus_construct(i2cdisplaybus_i2cdisplaybu self->reset.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&self->reset, reset); common_hal_digitalio_digitalinout_switch_to_output(&self->reset, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(reset); common_hal_i2cdisplaybus_i2cdisplaybus_reset(self); } @@ -40,7 +39,6 @@ void common_hal_i2cdisplaybus_i2cdisplaybus_construct(i2cdisplaybus_i2cdisplaybu // Write to the device and return 0 on success or an appropriate error code from mperrno.h self->bus = i2c; - common_hal_busio_i2c_never_reset(self->bus); self->address = device_address; } @@ -49,8 +47,6 @@ void common_hal_i2cdisplaybus_i2cdisplaybus_deinit(i2cdisplaybus_i2cdisplaybus_o if (self->bus == &self->inline_bus) { common_hal_busio_i2c_deinit(self->bus); } - // TODO figure out how to undo never_reset. maybe only mark never_reset when - // we subsume objects off the mp heap. self->bus = NULL; diff --git a/shared-module/is31fl3741/FrameBuffer.c b/shared-module/is31fl3741/FrameBuffer.c index 7f4660d857c..ddc669622aa 100644 --- a/shared-module/is31fl3741/FrameBuffer.c +++ b/shared-module/is31fl3741/FrameBuffer.c @@ -27,7 +27,6 @@ void common_hal_is31fl3741_framebuffer_construct(is31fl3741_framebuffer_obj_t *s self->is31fl3741 = is31; - common_hal_busio_i2c_never_reset(self->is31fl3741->i2c); mp_obj_t *items; size_t len; diff --git a/shared-module/keypad/__init__.c b/shared-module/keypad/__init__.c index f1d5d395df7..0f788334e14 100644 --- a/shared-module/keypad/__init__.c +++ b/shared-module/keypad/__init__.c @@ -42,9 +42,7 @@ void keypad_reset(void) { keypad_scanner_obj_t *next = MP_STATE_VM(keypad_scanners_linked_list); while (scanner) { next = scanner->next; - if (!scanner->never_reset) { - keypad_deregister_scanner(scanner); - } + keypad_deregister_scanner(scanner); scanner = next; } } @@ -103,8 +101,6 @@ void keypad_construct_common(keypad_scanner_obj_t *self, mp_float_t interval, si self->debounce_threshold = debounce_threshold; - self->never_reset = false; - // Add self to the list of active keypad scanners. keypad_register_scanner(self); keypad_scan_now(self, port_get_raw_ticks(NULL)); @@ -139,9 +135,6 @@ bool keypad_debounce(keypad_scanner_obj_t *self, mp_uint_t key_number, bool curr return false; } -void keypad_never_reset(keypad_scanner_obj_t *self) { - self->never_reset = true; -} void common_hal_keypad_generic_reset(void *self_in) { keypad_scanner_obj_t *self = self_in; diff --git a/shared-module/keypad/__init__.h b/shared-module/keypad/__init__.h index 66fea487854..87ff0fad3d9 100644 --- a/shared-module/keypad/__init__.h +++ b/shared-module/keypad/__init__.h @@ -25,8 +25,7 @@ typedef struct _keypad_scanner_funcs_t { int8_t *debounce_counter; \ struct _keypad_eventqueue_obj_t *events; \ mp_uint_t interval_ticks; \ - uint8_t debounce_threshold; \ - bool never_reset + uint8_t debounce_threshold typedef struct _keypad_scanner_obj_t { KEYPAD_SCANNER_COMMON_FIELDS; @@ -41,7 +40,6 @@ void keypad_register_scanner(keypad_scanner_obj_t *scanner); void keypad_deregister_scanner(keypad_scanner_obj_t *scanner); void keypad_construct_common(keypad_scanner_obj_t *scanner, mp_float_t interval, size_t max_events, uint8_t debounce_cycles, bool use_gc_allocator); bool keypad_debounce(keypad_scanner_obj_t *self, mp_uint_t key_number, bool current); -void keypad_never_reset(keypad_scanner_obj_t *self); size_t common_hal_keypad_generic_get_key_count(void *scanner); void common_hal_keypad_deinit_core(void *scanner); diff --git a/shared-module/keypad_demux/DemuxKeyMatrix.c b/shared-module/keypad_demux/DemuxKeyMatrix.c index 329f7679d3f..1cce579112c 100644 --- a/shared-module/keypad_demux/DemuxKeyMatrix.c +++ b/shared-module/keypad_demux/DemuxKeyMatrix.c @@ -162,12 +162,3 @@ static void demuxkeymatrix_scan_now(void *self_in, mp_obj_t timestamp) { } } -void demuxkeymatrix_never_reset(keypad_demux_demuxkeymatrix_obj_t *self) { - keypad_never_reset((keypad_scanner_obj_t *)self); - for (size_t row_addr = 0; row_addr < self->row_addr_digitalinouts->len; row_addr++) { - common_hal_digitalio_digitalinout_never_reset(self->row_addr_digitalinouts->items[row_addr]); - } - for (size_t column = 0; column < self->column_digitalinouts->len; column++) { - common_hal_digitalio_digitalinout_never_reset(self->column_digitalinouts->items[column]); - } -} diff --git a/shared-module/keypad_demux/DemuxKeyMatrix.h b/shared-module/keypad_demux/DemuxKeyMatrix.h index fe315775dd2..5ec6a4b3c8b 100644 --- a/shared-module/keypad_demux/DemuxKeyMatrix.h +++ b/shared-module/keypad_demux/DemuxKeyMatrix.h @@ -22,4 +22,3 @@ typedef struct { } keypad_demux_demuxkeymatrix_obj_t; void keypad_demux_demuxkeymatrix_scan(keypad_demux_demuxkeymatrix_obj_t *self); -void demuxkeymatrix_never_reset(keypad_demux_demuxkeymatrix_obj_t *self); diff --git a/shared-module/sdcardio/__init__.c b/shared-module/sdcardio/__init__.c index d53f7a3fabd..50f0f01d022 100644 --- a/shared-module/sdcardio/__init__.c +++ b/shared-module/sdcardio/__init__.c @@ -40,7 +40,6 @@ void sdcardio_init(void) { sd_card_detect_pin.base.type = &digitalio_digitalinout_type; common_hal_digitalio_digitalinout_construct(&sd_card_detect_pin, DEFAULT_SD_CARD_DETECT); common_hal_digitalio_digitalinout_switch_to_input(&sd_card_detect_pin, PULL_UP); - common_hal_digitalio_digitalinout_never_reset(&sd_card_detect_pin); #endif } @@ -97,7 +96,6 @@ void automount_sd_card(void) { spi_obj = &busio_spi_obj; spi_obj->base.type = &busio_spi_type; common_hal_busio_spi_construct(spi_obj, DEFAULT_SD_SCK, DEFAULT_SD_MOSI, DEFAULT_SD_MISO, false); - common_hal_busio_spi_never_reset(spi_obj); #endif sdcard.base.type = &sdcardio_SDCard_type; mp_obj_t cs_obj = MP_OBJ_FROM_PTR(DEFAULT_SD_CS); @@ -111,9 +109,6 @@ void automount_sd_card(void) { #endif return; } - if (mp_obj_is_type(cs_obj, &mcu_pin_type)) { - common_hal_digitalio_digitalinout_never_reset(MP_OBJ_TO_PTR(sdcard.cs)); - } fs_user_mount_t *vfs = &_sdcard_usermount; vfs->base.type = &mp_fat_vfs_type; vfs->fatfs.drv = vfs; diff --git a/shared-module/sharpdisplay/SharpMemoryFramebuffer.c b/shared-module/sharpdisplay/SharpMemoryFramebuffer.c index 8b9629b002f..029ad5ef029 100644 --- a/shared-module/sharpdisplay/SharpMemoryFramebuffer.c +++ b/shared-module/sharpdisplay/SharpMemoryFramebuffer.c @@ -122,10 +122,8 @@ void common_hal_sharpdisplay_framebuffer_construct( bool jdi_display) { common_hal_digitalio_digitalinout_construct(&self->chip_select, chip_select); common_hal_digitalio_digitalinout_switch_to_output(&self->chip_select, true, DRIVE_MODE_PUSH_PULL); - common_hal_never_reset_pin(chip_select); self->bus = spi; - common_hal_busio_spi_never_reset(self->bus); self->width = width; self->height = height; diff --git a/supervisor/shared/external_flash/spi_flash.c b/supervisor/shared/external_flash/spi_flash.c index f9ed50ac46f..0fde849cd17 100644 --- a/supervisor/shared/external_flash/spi_flash.c +++ b/supervisor/shared/external_flash/spi_flash.c @@ -126,11 +126,9 @@ void spi_flash_init(void) { // Set CS high (disabled). common_hal_digitalio_digitalinout_switch_to_output(&cs_pin, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&cs_pin); supervisor_flash_spi_bus.base.type = &busio_spi_type; common_hal_busio_spi_construct(&supervisor_flash_spi_bus, SPI_FLASH_SCK_PIN, SPI_FLASH_MOSI_PIN, SPI_FLASH_MISO_PIN, false); - common_hal_busio_spi_never_reset(&supervisor_flash_spi_bus); common_hal_busio_spi_configure(&supervisor_flash_spi_bus, SPI_FLASH_MAX_BAUDRATE, 0, 0, 8); return; diff --git a/supervisor/shared/serial.c b/supervisor/shared/serial.c index 1bfb8d73b3c..571d233a57d 100644 --- a/supervisor/shared/serial.c +++ b/supervisor/shared/serial.c @@ -191,7 +191,6 @@ void serial_early_init(void) { common_hal_busio_uart_construct(&console_uart, console_tx, console_rx, NULL, NULL, NULL, false, CIRCUITPY_CONSOLE_UART_BAUDRATE, 8, BUSIO_UART_PARITY_NONE, 1, 1.0f, sizeof(console_uart_rx_buf), console_uart_rx_buf, true); - common_hal_busio_uart_never_reset(&console_uart); #endif board_serial_early_init(); diff --git a/supervisor/shared/status_leds.c b/supervisor/shared/status_leds.c index ca29fd79212..6d19df9cdb9 100644 --- a/supervisor/shared/status_leds.c +++ b/supervisor/shared/status_leds.c @@ -319,12 +319,10 @@ void init_rxtx_leds(void) { #if CIRCUITPY_DIGITALIO && defined(MICROPY_HW_LED_RX) common_hal_digitalio_digitalinout_construct(&rx_led, MICROPY_HW_LED_RX); common_hal_digitalio_digitalinout_switch_to_output(&rx_led, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&rx_led); #endif #if CIRCUITPY_DIGITALIO && defined(MICROPY_HW_LED_TX) common_hal_digitalio_digitalinout_construct(&tx_led, MICROPY_HW_LED_TX); common_hal_digitalio_digitalinout_switch_to_output(&tx_led, true, DRIVE_MODE_PUSH_PULL); - common_hal_digitalio_digitalinout_never_reset(&tx_led); #endif } From ec7543b70273532794bb198795d79deb82ea963d Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 17 Sep 2026 09:55:13 -0700 Subject: [PATCH 2/3] Recover some default pin states we may still need --- .../common-hal/microcontroller/Pin.c | 21 ++++++++++++++++++ .../common-hal/microcontroller/Pin.h | 1 + ports/espressif/supervisor/port.c | 3 +++ .../boards/teenage_engineering_sp1/board.c | 22 ++++++++++++++----- ports/nordic/common-hal/alarm/pin/PinAlarm.c | 4 ---- ports/nordic/common-hal/microcontroller/Pin.c | 4 ++-- 6 files changed, 43 insertions(+), 12 deletions(-) diff --git a/ports/espressif/common-hal/microcontroller/Pin.c b/ports/espressif/common-hal/microcontroller/Pin.c index 942a2ffe827..8a4d914bf85 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.c +++ b/ports/espressif/common-hal/microcontroller/Pin.c @@ -358,6 +358,14 @@ void preserve_pin_number(gpio_num_t pin_number) { } void common_hal_alarm_clear_pin_preservations(void) { + // Release any actual holds, not just the tracking mask. Without this the + // pins would stay held after a pretend deep sleep ends. + uint64_t mask = _preserved_pin_mask; + for (int i = 0; i < 64; i++, mask >>= 1) { + if ((mask & 1) && GPIO_IS_VALID_OUTPUT_GPIO(i)) { + gpio_hold_dis(i); + } + } _preserved_pin_mask = 0; } @@ -393,6 +401,19 @@ void common_hal_reset_pin(const mcu_pin_obj_t *pin) { reset_pin_number(pin->number); } +// Undo deep sleep holds and re-mark never-reset pins as in use. Called from +// reset_port(); this restores the state-tracking parts of the old +// reset_all_pins(), which no longer exists. +void reset_pin_state(void) { + // Undo deep sleep holds in case we woke up from deep sleep. + // We still need to unhold individual pins, which is done by _reset_pin. + #if defined(SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP) && !SOC_GPIO_SUPPORT_HOLD_SINGLE_IO_IN_DSLP + gpio_deep_sleep_hold_dis(); + #endif + + _in_use_pin_mask = pin_mask_reset_forbidden; +} + void claim_pin_number(gpio_num_t pin_number) { // Some CircuitPython APIs deal in uint8_t pin numbers, but NO_PIN is -1. // Also allow pin 255 to be treated as NO_PIN to avoid crashes diff --git a/ports/espressif/common-hal/microcontroller/Pin.h b/ports/espressif/common-hal/microcontroller/Pin.h index bc00a27c6d6..17441e35686 100644 --- a/ports/espressif/common-hal/microcontroller/Pin.h +++ b/ports/espressif/common-hal/microcontroller/Pin.h @@ -18,6 +18,7 @@ extern void common_hal_reset_pin(const mcu_pin_obj_t *pin); extern void reset_pin_number(gpio_num_t pin_number); // reset all pins in `bitmask` extern void reset_pin_mask(uint64_t bitmask); +extern void reset_pin_state(void); extern void claim_pin(const mcu_pin_obj_t *pin); extern void claim_pin_number(gpio_num_t pin_number); extern bool pin_number_is_free(gpio_num_t pin_number); diff --git a/ports/espressif/supervisor/port.c b/ports/espressif/supervisor/port.c index 1f0d3042c65..b7042f07263 100644 --- a/ports/espressif/supervisor/port.c +++ b/ports/espressif/supervisor/port.c @@ -325,6 +325,9 @@ void reset_port_early(void) { } void reset_port(void) { + // Undo deep sleep holds and re-mark never-reset pins as in use, as the + // old reset_all_pins() did. + reset_pin_state(); #if CIRCUITPY_SSL ssl_reset(); diff --git a/ports/nordic/boards/teenage_engineering_sp1/board.c b/ports/nordic/boards/teenage_engineering_sp1/board.c index 94b2fe0d5e5..1c22b40c68b 100644 --- a/ports/nordic/boards/teenage_engineering_sp1/board.c +++ b/ports/nordic/boards/teenage_engineering_sp1/board.c @@ -110,6 +110,8 @@ static void stop_pwm(NRF_PWM_Type *pwm) { pwm->ENABLE = 0; } +static void apply_all_pin_defaults(void); + void board_early_init(void) { // Feed the bootloader's watchdog before anything else. This is the first // CircuitPython code to run on the board: port_init() calls it before it @@ -193,11 +195,17 @@ void board_early_init(void) { nrfx_rtc_init(&wake_rtc, &wake_rtc_config, wake_rtc_handler); arm_wake_rtc(); nrfx_rtc_enable(&wake_rtc); + + // The old reset_all_pins() used to sweep every pin right after port_init(); + // apply the board's resting state here instead, so nothing floats while we + // wait for code.py. The heartbeat LED is excluded by the guard in + // board_reset_pin_number() because the blink is still lit. + apply_all_pin_defaults(); } // Pins that must not float. reset_pin_number() asks the board for each pin, // so this configuration is re-applied after every reset rather than the pin -// rather than the pin being left in its default (disconnected) state. +// being left in its default (disconnected) state. // // None of these are claimed, so Python can still claim them. This // only makes the resting state between runs a defined, safe one. @@ -268,15 +276,17 @@ static bool apply_pin_default(uint8_t pin_number) { } // Put every pin this board has an opinion about into its resting state at once. +// Goes through board_reset_pin_number(), not apply_pin_default() directly, so +// the boot heartbeat LED is left alone while it is lit. static void apply_all_pin_defaults(void) { - apply_pin_default(PIN_FUNCTION_BUTTON); - apply_pin_default(PIN_EMMC_RESET); - apply_pin_default(PIN_EMMC_VCCQ_EN); + board_reset_pin_number(PIN_FUNCTION_BUTTON); + board_reset_pin_number(PIN_EMMC_RESET); + board_reset_pin_number(PIN_EMMC_VCCQ_EN); for (size_t i = 0; i < MP_ARRAY_SIZE(led_pins); i++) { - apply_pin_default(led_pins[i]); + board_reset_pin_number(led_pins[i]); } for (size_t i = 0; i < MP_ARRAY_SIZE(default_low_pins); i++) { - apply_pin_default(default_low_pins[i]); + board_reset_pin_number(default_low_pins[i]); } } diff --git a/ports/nordic/common-hal/alarm/pin/PinAlarm.c b/ports/nordic/common-hal/alarm/pin/PinAlarm.c index 3359faa74e0..cdafadebae2 100644 --- a/ports/nordic/common-hal/alarm/pin/PinAlarm.c +++ b/ports/nordic/common-hal/alarm/pin/PinAlarm.c @@ -171,8 +171,6 @@ static void configure_pins_for_sleep(void) { void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_obj_t *alarms) { // Bitmask of wake up settings. - size_t high_count = 0; - size_t low_count = 0; int pin_number = -1; for (size_t i = 0; i < n_alarms; i++) { @@ -185,10 +183,8 @@ void alarm_pin_pinalarm_set_alarms(bool deep_sleep, size_t n_alarms, const mp_ob // mp_printf(&mp_plat_print, "alarm_pin_pinalarm_set_alarms(pin#=%d, val=%d, pull=%d)\r\n", pin_number, alarm->value, alarm->pull); if (alarm->value) { high_alarms |= 1ull << pin_number; - high_count++; } else { low_alarms |= 1ull << pin_number; - low_count++; } if (alarm->pull) { pull_pins |= 1ull << pin_number; diff --git a/ports/nordic/common-hal/microcontroller/Pin.c b/ports/nordic/common-hal/microcontroller/Pin.c index 4974dab1bd1..ef14d45504f 100644 --- a/ports/nordic/common-hal/microcontroller/Pin.c +++ b/ports/nordic/common-hal/microcontroller/Pin.c @@ -19,8 +19,8 @@ bool speaker_enable_in_use; // Bit mask of claimed pins on each of up to two ports. nrf52832 has one port; nrf52840 has two. static uint32_t claimed_pins[GPIO_COUNT]; +#ifdef SPEAKER_ENABLE_PIN static void reset_speaker_enable_pin(void) { - #ifdef SPEAKER_ENABLE_PIN speaker_enable_in_use = false; nrf_gpio_cfg(SPEAKER_ENABLE_PIN->number, NRF_GPIO_PIN_DIR_OUTPUT, @@ -29,8 +29,8 @@ static void reset_speaker_enable_pin(void) { NRF_GPIO_PIN_H0H1, NRF_GPIO_PIN_NOSENSE); nrf_gpio_pin_write(SPEAKER_ENABLE_PIN->number, false); - #endif } +#endif MP_WEAK bool board_reset_pin_number(uint8_t pin_number) { return false; From ade9710db60ae282452f4fa23187e20cab0b51c7 Mon Sep 17 00:00:00 2001 From: Scott Shawcroft Date: Thu, 17 Sep 2026 11:50:01 -0700 Subject: [PATCH 3/3] Fix SAMD builds --- ports/atmel-samd/common-hal/spitarget/SPITarget.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/ports/atmel-samd/common-hal/spitarget/SPITarget.c b/ports/atmel-samd/common-hal/spitarget/SPITarget.c index e5011b141fc..de45eed651b 100644 --- a/ports/atmel-samd/common-hal/spitarget/SPITarget.c +++ b/ports/atmel-samd/common-hal/spitarget/SPITarget.c @@ -168,8 +168,6 @@ void common_hal_spitarget_spi_target_deinit(spitarget_spi_target_obj_t *self) { if (common_hal_spitarget_spi_target_deinited(self)) { return; } - allow_reset_sercom(self->spi_desc.dev.prvt); - spi_m_sync_disable(&self->spi_desc); spi_m_sync_deinit(&self->spi_desc); reset_pin_number(self->clock_pin);