Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions modules/hal_rpi_pico/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,11 @@ if(CONFIG_HAS_RPI_PICO)
${rp2_common_dir}/pico_platform_panic/include
${common_dir}/boot_picoboot_headers/include
${common_dir}/boot_picobin_headers/include
${common_dir}/pico_binary_info/include
${rp2xxx_dir}/hardware_regs/include
${rp2xxx_dir}/hardware_structs/include
${rp2xxx_dir}/pico_platform/include
${boot_stage_dir}/include
${CMAKE_CURRENT_LIST_DIR}
)

Expand Down
6 changes: 5 additions & 1 deletion modules/hal_rpi_pico/pico/config_autogen.h
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@
/* Convert uses of asm, which is not supported in c99, to __asm */
#define asm __asm

/* Disable binary info */
/* Configure binary info */
#ifndef CONFIG_RPI_PICO_BINARY_INFO
#define PICO_NO_BINARY_INFO 1
#else
#define PICO_NO_BINARY_INFO 0
#endif

#ifdef CONFIG_DT_HAS_RASPBERRYPI_PICO_XOSC_ENABLED
#include <zephyr/devicetree.h>
Expand Down
14 changes: 14 additions & 0 deletions soc/raspberrypi/rpi_pico/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,17 @@ zephyr_sources(
)

zephyr_sources_ifdef(CONFIG_RPI_PICO_ROM_BOOTLOADER rom_bootloader.c)

zephyr_library_sources_ifdef(CONFIG_RPI_PICO_BINARY_INFO
binary_info.c
binary_info_pins.c
binary_info_header.S
)

zephyr_linker_sources_ifdef(CONFIG_RPI_PICO_BINARY_INFO
ROM_START SORT_KEY 0x0binary_info_header binary_info_header.ld
)

zephyr_linker_sources_ifdef(CONFIG_RPI_PICO_BINARY_INFO
RODATA binary_info.ld
)
4 changes: 4 additions & 0 deletions soc/raspberrypi/rpi_pico/common/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Copyright (c) 2025 TOKITA Hiroshi
# SPDX-License-Identifier: Apache-2.0

source "soc/raspberrypi/rpi_pico/common/Kconfig.*"
171 changes: 171 additions & 0 deletions soc/raspberrypi/rpi_pico/common/Kconfig.binary_info
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
# Copyright (c) 2024 TOKITA Hiroshi
# SPDX-License-Identifier: Apache-2.0

config RPI_PICO_BINARY_INFO
bool "Generate RaspberryPi Pico binary info"
default y
help
Binary info is able to embed machine readable information with the binary in flash.
It can read with picotool(https://github.com/raspberrypi/picotool).
Binary info is generated automatically when this option is enabled,

if RPI_PICO_BINARY_INFO

config RPI_PICO_BINARY_INFO_PROGRAM_NAME
bool "Generate program_name in binary info"
default y

if RPI_PICO_BINARY_INFO_PROGRAM_NAME

config RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_NAME
string "Override program_name in binary info"
depends on RPI_PICO_BINARY_INFO_PROGRAM_NAME

config RPI_PICO_BINARY_INFO_PROGRAM_NAME_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_NAME != ""
depends on RPI_PICO_BINARY_INFO_PROGRAM_NAME

endif

config RPI_PICO_BINARY_INFO_PROGRAM_URL
bool "Generate program_url in binary info"
default y

if RPI_PICO_BINARY_INFO_PROGRAM_URL

config RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_URL
string "Override program_url in binary info"
depends on RPI_PICO_BINARY_INFO_PROGRAM_URL

config RPI_PICO_BINARY_INFO_PROGRAM_URL_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_URL != ""
depends on RPI_PICO_BINARY_INFO_PROGRAM_URL

endif

config RPI_PICO_BINARY_INFO_PROGRAM_DESCRIPTION
bool "Generate program_description in binary info"
default y

if RPI_PICO_BINARY_INFO_PROGRAM_DESCRIPTION

config RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_DESCRIPTION
string "Override program_description in binary info"
depends on RPI_PICO_BINARY_INFO_PROGRAM_DESCRIPTION

config RPI_PICO_BINARY_INFO_PROGRAM_DESCRIPTION_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_DESCRIPTION != ""
depends on RPI_PICO_BINARY_INFO_PROGRAM_DESCRIPTION

endif

config RPI_PICO_BINARY_INFO_PROGRAM_BUILD_DATE
bool "Generate program_build_date in binary info"
default y

if RPI_PICO_BINARY_INFO_PROGRAM_BUILD_DATE

config RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_BUILD_DATE
string "Override program_build_date in binary info"
depends on RPI_PICO_BINARY_INFO_PROGRAM_BUILD_DATE

config RPI_PICO_BINARY_INFO_PROGRAM_BUILD_DATE_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_BUILD_DATE != ""
depends on RPI_PICO_BINARY_INFO_PROGRAM_BUILD_DATE

endif

config RPI_PICO_BINARY_INFO_PROGRAM_VERSION_STRING
bool "Generate program_version_string in binary info"
default y

if RPI_PICO_BINARY_INFO_PROGRAM_VERSION_STRING

config RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_VERSION_STRING
string "Override program_version_string in binary info"
depends on RPI_PICO_BINARY_INFO_PROGRAM_VERSION_STRING

config RPI_PICO_BINARY_INFO_PROGRAM_VERSION_STRING_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_PROGRAM_VERSION_STRING != ""
depends on RPI_PICO_BINARY_INFO_PROGRAM_VERSION_STRING

endif

config RPI_PICO_BINARY_INFO_SDK_VERSION_STRING
bool "Generate sdk_version_string in binary info"
default y

if RPI_PICO_BINARY_INFO_SDK_VERSION_STRING

config RPI_PICO_BINARY_INFO_OVERRIDE_SDK_VERSION_STRING
string "Override sdk_version_string in binary info"
depends on RPI_PICO_BINARY_INFO_SDK_VERSION_STRING

config RPI_PICO_BINARY_INFO_SDK_VERSION_STRING_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_SDK_VERSION_STRING != ""
depends on RPI_PICO_BINARY_INFO_SDK_VERSION_STRING

endif

config RPI_PICO_BINARY_INFO_PICO_BOARD
bool "Generate pico_board in binary info"
default y

if RPI_PICO_BINARY_INFO_PICO_BOARD

config RPI_PICO_BINARY_INFO_OVERRIDE_PICO_BOARD
string "Override pico_board in binary info"
depends on RPI_PICO_BINARY_INFO_PICO_BOARD

config RPI_PICO_BINARY_INFO_PICO_BOARD_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_PICO_BOARD != ""
depends on RPI_PICO_BINARY_INFO_PICO_BOARD

endif

config RPI_PICO_BINARY_INFO_ATTRIBUTE_BUILD_TYPE
bool "Generate attribute_build_type in binary info"
default y

if RPI_PICO_BINARY_INFO_ATTRIBUTE_BUILD_TYPE

config RPI_PICO_BINARY_INFO_OVERRIDE_ATTRIBUTE_BUILD_TYPE
string "Override attribute_build_type in binary info"
depends on RPI_PICO_BINARY_INFO_ATTRIBUTE_BUILD_TYPE

config RPI_PICO_BINARY_INFO_ATTRIBUTE_BUILD_TYPE_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_ATTRIBUTE_BUILD_TYPE != ""
depends on RPI_PICO_BINARY_INFO_ATTRIBUTE_BUILD_TYPE

endif

config RPI_PICO_BINARY_INFO_BOOT_STAGE2_NAME
bool "Generate boot_stage2_name in binary info"
default y

if RPI_PICO_BINARY_INFO_BOOT_STAGE2_NAME

config RPI_PICO_BINARY_INFO_OVERRIDE_BOOT_STAGE2_NAME
string "Override boot_stage2_name in binary info"
depends on RPI_PICO_BINARY_INFO_BOOT_STAGE2_NAME

config RPI_PICO_BINARY_INFO_BOOT_STAGE2_NAME_OVERRIDDEN
bool
default RPI_PICO_BINARY_INFO_OVERRIDE_BOOT_STAGE2_NAME != ""
depends on RPI_PICO_BINARY_INFO_BOOT_STAGE2_NAME

endif

config RPI_PICO_BINARY_INFO_PIN_CONFIGURATIONS
bool "Generate pin configuration info in binary info"
default y

endif
53 changes: 53 additions & 0 deletions soc/raspberrypi/rpi_pico/common/binary_info.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Copyright (c) 2023 TOKITA Hiroshi <[email protected]>
*
* SPDX-License-Identifier: Apache-2.0
*/

#include "binary_info.h"

extern uint32_t __rom_region_end;
bi_decl(bi_binary_end((intptr_t)&__rom_region_end));

#ifdef CONFIG_RPI_PICO_BINARY_INFO_PROGRAM_NAME
bi_decl(bi_program_name((uint32_t)BI_PROGRAM_NAME));
#endif

#if defined(CONFIG_RPI_PICO_BINARY_INFO_PROGRAM_VERSION_STRING)
bi_decl(bi_program_version_string((uint32_t)BI_PROGRAM_VERSION_STRING));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_PROGRAM_DESCRIPTION
bi_decl(bi_program_description((uint32_t)BI_PROGRAM_DESCRIPTION));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_PROGRAM_URL
bi_decl(bi_program_url((uint32_t)BI_PROGRAM_URL));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_PROGRAM_BUILD_DATE
bi_decl(bi_program_build_date_string((uint32_t)BI_PROGRAM_BUILD_DATE));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_PICO_BOARD
bi_decl(bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_PICO_BOARD,
(uint32_t)BI_PICO_BOARD));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_SDK_VERSION_STRING
bi_decl(bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_SDK_VERSION,
(uint32_t)BI_SDK_VERSION_STRING));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_BOOT_STAGE2_NAME
bi_decl(bi_string(BINARY_INFO_TAG_RASPBERRY_PI, BINARY_INFO_ID_RP_BOOT2_NAME,
(uint32_t)BI_BOOT_STAGE2_NAME));
#endif

#ifdef CONFIG_RPI_PICO_BINARY_INFO_ATTRIBUTE_BUILD_TYPE
#ifdef CONFIG_DEBUG
bi_decl(bi_program_build_attribute((uint32_t)"Debug"));
#else
bi_decl(bi_program_build_attribute((uint32_t)"Release"));
#endif
#endif
Loading