drivers: hwinfo: Added unique ID support for RPi Pico
Added support for hwinfo's hwinfo_get_device_id for the RPi Pico series. Signed-off-by: Yonatan Schachter <yonatan.schachter@gmail.com>
This commit is contained in:
parent
36888b1fb7
commit
90b20fffa4
|
@ -16,6 +16,7 @@ zephyr_library_sources_ifdef(CONFIG_HWINFO_MCUX_SRC hwinfo_mcux_src.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_HWINFO_MCUX_SYSCON hwinfo_mcux_syscon.c)
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_MCUX_SYSCON hwinfo_mcux_syscon.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_HWINFO_NRF hwinfo_nrf.c)
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_NRF hwinfo_nrf.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_HWINFO_PSOC6 hwinfo_psoc6.c)
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_PSOC6 hwinfo_psoc6.c)
|
||||||
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_RPI_PICO hwinfo_rpi_pico.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_HWINFO_SAM_RSTC hwinfo_sam_rstc.c)
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_SAM_RSTC hwinfo_sam_rstc.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_HWINFO_SAM hwinfo_sam.c)
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_SAM hwinfo_sam.c)
|
||||||
zephyr_library_sources_ifdef(CONFIG_HWINFO_SAM0 hwinfo_sam0.c)
|
zephyr_library_sources_ifdef(CONFIG_HWINFO_SAM0 hwinfo_sam0.c)
|
||||||
|
|
|
@ -70,6 +70,14 @@ config HWINFO_IMXRT
|
||||||
help
|
help
|
||||||
Enable NXP i.mx RT hwinfo driver.
|
Enable NXP i.mx RT hwinfo driver.
|
||||||
|
|
||||||
|
config HWINFO_RPI_PICO
|
||||||
|
bool "Raspberry Pi Pico hwinfo driver"
|
||||||
|
default y
|
||||||
|
depends on SOC_SERIES_RP2XXX
|
||||||
|
select PICOSDK_USE_FLASH
|
||||||
|
help
|
||||||
|
Enable Raspberry Pi Pico hwinfo driver.
|
||||||
|
|
||||||
config HWINFO_SAM_RSTC
|
config HWINFO_SAM_RSTC
|
||||||
bool "Atmel SAM reset cause"
|
bool "Atmel SAM reset cause"
|
||||||
default y
|
default y
|
||||||
|
|
34
drivers/hwinfo/hwinfo_rpi_pico.c
Normal file
34
drivers/hwinfo/hwinfo_rpi_pico.c
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2022 Yonatan Schachter
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <drivers/hwinfo.h>
|
||||||
|
#include <hardware/flash.h>
|
||||||
|
|
||||||
|
#define FLASH_RUID_DATA_BYTES 8
|
||||||
|
|
||||||
|
ssize_t z_impl_hwinfo_get_device_id(uint8_t *buffer, size_t length)
|
||||||
|
{
|
||||||
|
uint8_t id[FLASH_RUID_DATA_BYTES];
|
||||||
|
uint32_t key;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* flash_get_unique_id temporarily disables XIP to query the
|
||||||
|
* flash for its ID. If the CPU is interrupted while XIP is
|
||||||
|
* disabled, it will halt. Therefore, interrupts must be disabled
|
||||||
|
* before fetching the ID.
|
||||||
|
*/
|
||||||
|
key = irq_lock();
|
||||||
|
flash_get_unique_id(id);
|
||||||
|
irq_unlock(key);
|
||||||
|
|
||||||
|
if (length > sizeof(id)) {
|
||||||
|
length = sizeof(id);
|
||||||
|
}
|
||||||
|
memcpy(buffer, id, length);
|
||||||
|
|
||||||
|
return length;
|
||||||
|
}
|
|
@ -80,4 +80,21 @@ if(CONFIG_HAS_RPI_PICO)
|
||||||
${rp2_common_dir}/hardware_uart/uart.c)
|
${rp2_common_dir}/hardware_uart/uart.c)
|
||||||
zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_UART
|
zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_UART
|
||||||
${rp2_common_dir}/hardware_uart/include)
|
${rp2_common_dir}/hardware_uart/include)
|
||||||
|
|
||||||
|
zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_FLASH
|
||||||
|
${rp2_common_dir}/hardware_flash/flash.c)
|
||||||
|
zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_FLASH
|
||||||
|
${rp2_common_dir}/hardware_flash/include)
|
||||||
|
|
||||||
|
# Some flash driver functions must be executed from the RAM.
|
||||||
|
# Originally pico-sdk places them in the RW data section, so this
|
||||||
|
# implementation does the same.
|
||||||
|
zephyr_linker_sources_ifdef(CONFIG_PICOSDK_USE_FLASH RWDATA timecritical.ld)
|
||||||
|
|
||||||
|
# A function in flash.c adds 1 to a function pointer, causing a warning
|
||||||
|
set_source_files_properties(
|
||||||
|
${rp2_common_dir}/hardware_flash/flash.c
|
||||||
|
PROPERTIES
|
||||||
|
COMPILE_FLAGS $<TARGET_PROPERTY:compiler,warning_no_pointer_arithmetic>
|
||||||
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -13,3 +13,8 @@ config PICOSDK_USE_GPIO
|
||||||
bool
|
bool
|
||||||
help
|
help
|
||||||
Use the GPIO driver from pico-sdk
|
Use the GPIO driver from pico-sdk
|
||||||
|
|
||||||
|
config PICOSDK_USE_FLASH
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Use the flash driver from pico-sdk
|
||||||
|
|
|
@ -35,4 +35,11 @@
|
||||||
#define __always_inline ALWAYS_INLINE
|
#define __always_inline ALWAYS_INLINE
|
||||||
#endif /* __always_inline */
|
#endif /* __always_inline */
|
||||||
|
|
||||||
|
/* Two definitions required for the flash driver */
|
||||||
|
#define __STRING(x) #x
|
||||||
|
|
||||||
|
#ifndef __noinline
|
||||||
|
#define __noinline __attribute__((noinline))
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
1
modules/hal_rpi_pico/timecritical.ld
Normal file
1
modules/hal_rpi_pico/timecritical.ld
Normal file
|
@ -0,0 +1 @@
|
||||||
|
*(.time_critical*)
|
Loading…
Reference in a new issue