This is an automated email from the ASF dual-hosted git repository.

archer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 806c0632236ccacde28735cfbabafa0ba9b43c45
Author: Ian Douglas Scott <i...@iandouglasscott.com>
AuthorDate: Fri Jan 17 21:11:46 2025 -0800

    arm/rp2040,rp2350: Allow configuring XOSC startup delay
    
    This follows the formula in the "Startup Delay" section of the
    datasheets, where `BOARD_XOSC_STARTUPDELAY` is the time in milliseconds,
    which is then multiplied by the clock fequency in kHz, divided by 256
    cycles, and rounded up.
    
    This differs from `pico-sdk`, which just multiplied the value of the
    expression it previously used by a `PICO_XOSC_STARTUP_DELAY_MULTIPLIER`.
    This seems less correct, though it should be essentially the same except
    rounding. (`BOARD_XOSC_STARTUPDELAY_MULTIPLIER` also wouldn't fit nicely
    the way the `#define`s are aligned.)
    
    This sets `BOARD_XOSC_STARTUPDELAY` to `1` for all boards, so this will
    produce the same output and not change behavior.
    
    Signed-off-by: Ian Douglas Scott <i...@iandouglasscott.com>
---
 arch/arm/src/rp2040/rp2040_xosc.c                           | 4 +++-
 arch/arm/src/rp23xx/rp23xx_xosc.c                           | 4 +++-
 boards/arm/rp2040/adafruit-feather-rp2040/include/board.h   | 1 +
 boards/arm/rp2040/adafruit-kb2040/include/board.h           | 1 +
 boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h     | 1 +
 boards/arm/rp2040/pimoroni-tiny2040/include/board.h         | 1 +
 boards/arm/rp2040/raspberrypi-pico-w/include/board.h        | 1 +
 boards/arm/rp2040/raspberrypi-pico/include/board.h          | 1 +
 boards/arm/rp2040/seeed-xiao-rp2040/include/board.h         | 1 +
 boards/arm/rp2040/w5500-evb-pico/include/board.h            | 1 +
 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h | 1 +
 boards/arm/rp2040/waveshare-rp2040-zero/include/board.h     | 1 +
 boards/arm/rp23xx/pimoroni-pico-2-plus/include/board.h      | 1 +
 boards/arm/rp23xx/raspberrypi-pico-2/include/board.h        | 1 +
 14 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/arch/arm/src/rp2040/rp2040_xosc.c 
b/arch/arm/src/rp2040/rp2040_xosc.c
index 6f8e24e531..2cabaf83ba 100644
--- a/arch/arm/src/rp2040/rp2040_xosc.c
+++ b/arch/arm/src/rp2040/rp2040_xosc.c
@@ -80,7 +80,9 @@ void rp2040_xosc_init(void)
 
   /* Set xosc startup delay */
 
-  uint32_t startup_delay = ((BOARD_XOSC_FREQ / 1000) + 128) / 256;
+  uint32_t startup_delay = ((BOARD_XOSC_FREQ / 1000) *
+                            BOARD_XOSC_STARTUPDELAY + 255) / 256;
+  ASSERT(startup_delay < 1 << 13);
   putreg32(startup_delay, RP2040_XOSC_STARTUP);
 
   /* Set the enable bit now that we have set freq range and startup delay */
diff --git a/arch/arm/src/rp23xx/rp23xx_xosc.c 
b/arch/arm/src/rp23xx/rp23xx_xosc.c
index 7bd7b3a8f0..adeba6bd09 100644
--- a/arch/arm/src/rp23xx/rp23xx_xosc.c
+++ b/arch/arm/src/rp23xx/rp23xx_xosc.c
@@ -78,7 +78,9 @@ void rp23xx_xosc_init(void)
 
   /* Set xosc startup delay */
 
-  uint32_t startup_delay = ((BOARD_XOSC_FREQ / 1000) + 128) / 256;
+  uint32_t startup_delay = ((BOARD_XOSC_FREQ / 1000) *
+                            BOARD_XOSC_STARTUPDELAY + 255) / 256;
+  ASSERT(startup_delay < 1 << 13);
   putreg32(startup_delay, RP23XX_XOSC_STARTUP);
 
   /* Set the enable bit now that we have set freq range and startup delay */
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/include/board.h 
b/boards/arm/rp2040/adafruit-feather-rp2040/include/board.h
index e6680e9e0f..19c7e72ce0 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/include/board.h
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/adafruit-kb2040/include/board.h 
b/boards/arm/rp2040/adafruit-kb2040/include/board.h
index 6d7d1279ba..965ab389c2 100644
--- a/boards/arm/rp2040/adafruit-kb2040/include/board.h
+++ b/boards/arm/rp2040/adafruit-kb2040/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h 
b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
index 952b024a93..ef22c36bda 100644
--- a/boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/include/board.h 
b/boards/arm/rp2040/pimoroni-tiny2040/include/board.h
index 115cd1fbd8..4903ec3058 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/include/board.h
+++ b/boards/arm/rp2040/pimoroni-tiny2040/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/raspberrypi-pico-w/include/board.h 
b/boards/arm/rp2040/raspberrypi-pico-w/include/board.h
index 3a24cc3eba..8209624d0e 100644
--- a/boards/arm/rp2040/raspberrypi-pico-w/include/board.h
+++ b/boards/arm/rp2040/raspberrypi-pico-w/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/raspberrypi-pico/include/board.h 
b/boards/arm/rp2040/raspberrypi-pico/include/board.h
index 68e7701384..89970505eb 100644
--- a/boards/arm/rp2040/raspberrypi-pico/include/board.h
+++ b/boards/arm/rp2040/raspberrypi-pico/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/seeed-xiao-rp2040/include/board.h 
b/boards/arm/rp2040/seeed-xiao-rp2040/include/board.h
index 4a88838746..03981d4d3e 100644
--- a/boards/arm/rp2040/seeed-xiao-rp2040/include/board.h
+++ b/boards/arm/rp2040/seeed-xiao-rp2040/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/w5500-evb-pico/include/board.h 
b/boards/arm/rp2040/w5500-evb-pico/include/board.h
index 5da8cd15ed..4f1ecc318b 100644
--- a/boards/arm/rp2040/w5500-evb-pico/include/board.h
+++ b/boards/arm/rp2040/w5500-evb-pico/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h 
b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h
index 21d038640c..ad693517a0 100644
--- a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h
@@ -48,6 +48,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp2040/waveshare-rp2040-zero/include/board.h 
b/boards/arm/rp2040/waveshare-rp2040-zero/include/board.h
index 4435c37233..ddb58675e0 100644
--- a/boards/arm/rp2040/waveshare-rp2040-zero/include/board.h
+++ b/boards/arm/rp2040/waveshare-rp2040-zero/include/board.h
@@ -46,6 +46,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (125 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp23xx/pimoroni-pico-2-plus/include/board.h 
b/boards/arm/rp23xx/pimoroni-pico-2-plus/include/board.h
index 6327185a15..687fc6f602 100644
--- a/boards/arm/rp23xx/pimoroni-pico-2-plus/include/board.h
+++ b/boards/arm/rp23xx/pimoroni-pico-2-plus/include/board.h
@@ -44,6 +44,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (150 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 
diff --git a/boards/arm/rp23xx/raspberrypi-pico-2/include/board.h 
b/boards/arm/rp23xx/raspberrypi-pico-2/include/board.h
index 0b5ca2b0b3..5a5dba2d7e 100644
--- a/boards/arm/rp23xx/raspberrypi-pico-2/include/board.h
+++ b/boards/arm/rp23xx/raspberrypi-pico-2/include/board.h
@@ -45,6 +45,7 @@
 #define MHZ                     1000000
 
 #define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_XOSC_STARTUPDELAY 1
 #define BOARD_PLL_SYS_FREQ      (150 * MHZ)
 #define BOARD_PLL_USB_FREQ      (48 * MHZ)
 

Reply via email to