Skip to content

Commit

Permalink
Minor header cleanups and ASM compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
kilograham committed Nov 4, 2024
1 parent 3708588 commit dee8272
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

#define REBOOT2_TYPE_MASK 0x0f

// note these match REBOOT_TYPE in pico/bootrom_constants.h (also 0 is used for PC_SP for backwards compatibility with RP2040)
// note these match REBOOT_TYPE in pico/bootrom_constants.h
// values 0-7 are secure/non-secure
#define REBOOT2_FLAG_REBOOT_TYPE_NORMAL 0x0 // param0 = diagnostic partition
#define REBOOT2_FLAG_REBOOT_TYPE_BOOTSEL 0x2 // param0 = bootsel_flags, param1 = gpio_config
Expand Down
11 changes: 7 additions & 4 deletions src/common/boot_uf2_headers/include/boot/uf2.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,11 @@
#define UF2_MAGIC_START1 0x9E5D5157u
#define UF2_MAGIC_END 0x0AB16F30u

#define UF2_FLAG_NOT_MAIN_FLASH 0x00000001u
#define UF2_FLAG_FILE_CONTAINER 0x00001000u
#define UF2_FLAG_FAMILY_ID_PRESENT 0x00002000u
#define UF2_FLAG_MD5_PRESENT 0x00004000u
#define UF2_FLAG_NOT_MAIN_FLASH 0x00000001u
#define UF2_FLAG_FILE_CONTAINER 0x00001000u
#define UF2_FLAG_FAMILY_ID_PRESENT 0x00002000u
#define UF2_FLAG_MD5_PRESENT 0x00004000u
#define UF2_FLAG_EXTENSION_FLAGS_PRESENT 0x00008000u

#define RP2040_FAMILY_ID 0xe48bff56u
#define ABSOLUTE_FAMILY_ID 0xe48bff57u
Expand All @@ -33,6 +34,8 @@
#define RP2350_ARM_NS_FAMILY_ID 0xe48bff5bu
#define FAMILY_ID_MAX 0xe48bff5bu

// 04 e3 57 99
#define UF2_EXTENSION_RP2_IGNORE_BLOCK 0x9957e304

struct uf2_block {
// 32 byte header
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,6 +255,12 @@ typedef int (*bootrom_api_callback_generic_t)(uint32_t r0, uint32_t r1, uint32_t
#define BOOTROM_NS_API_get_b_partition 7
#define BOOTROM_NS_API_COUNT 8

#define OTP_CMD_ROW_BITS 0x0000ffffu
#define OTP_CMD_ROW_LSB _u(0)
#define OTP_CMD_WRITE_BITS 0x00010000u
#define OTP_CMD_WRITE_LSB _u(6)
#define OTP_CMD_ECC_BITS 0x00020000u

#ifndef __ASSEMBLER__

typedef struct {
Expand All @@ -263,11 +269,6 @@ typedef struct {
} resident_partition_t;
static_assert(sizeof(resident_partition_t) == 8, "");

#define OTP_CMD_ROW_BITS 0x0000ffffu
#define OTP_CMD_ROW_LSB 0u
#define OTP_CMD_WRITE_BITS 0x00010000u
#define OTP_CMD_ECC_BITS 0x00020000u

typedef struct otp_cmd {
uint32_t flags;
} otp_cmd_t;
Expand Down Expand Up @@ -304,37 +305,37 @@ typedef struct cflash_flags {
uint32_t flags;
} cflash_flags_t;

#endif

// Bits which are permitted to be set in a flags variable -- any other bits being set is an error
#define CFLASH_FLAGS_BITS 0x00070301u

// Used to tell checked flash API which space a given address belongs to
#define CFLASH_ASPACE_BITS 0x00000001u
#define CFLASH_ASPACE_LSB 0u
#define CFLASH_ASPACE_VALUE_STORAGE 0u
#define CFLASH_ASPACE_VALUE_RUNTIME 1u
#define CFLASH_ASPACE_LSB _u(0)
#define CFLASH_ASPACE_VALUE_STORAGE _u(0)
#define CFLASH_ASPACE_VALUE_RUNTIME _u(1)

// Used to tell checked flash APIs the effective security level of a flash access (may be forced to
// one of these values for the NonSecure-exported version of this API)
#define CFLASH_SECLEVEL_BITS 0x00000300u
#define CFLASH_SECLEVEL_LSB 8u
#define CFLASH_SECLEVEL_LSB _u(8)
// Zero is not a valid security level:
#define CFLASH_SECLEVEL_VALUE_SECURE 1u
#define CFLASH_SECLEVEL_VALUE_NONSECURE 2u
#define CFLASH_SECLEVEL_VALUE_BOOTLOADER 3u
#define CFLASH_SECLEVEL_VALUE_SECURE _u(1)
#define CFLASH_SECLEVEL_VALUE_NONSECURE _u(2)
#define CFLASH_SECLEVEL_VALUE_BOOTLOADER _u(3)

#define CFLASH_OP_BITS 0x00070000u
#define CFLASH_OP_LSB 16u
#define CFLASH_OP_LSB _u(16)
// Erase size_bytes bytes of flash, starting at address addr. Both addr and size_bytes must be a
// multiple of 4096 bytes (one flash sector).
#define CFLASH_OP_VALUE_ERASE 0u
#define CFLASH_OP_VALUE_ERASE _u(0)
// Program size_bytes bytes of flash, starting at address addr. Both addr and size_bytes must be a
// multiple of 256 bytes (one flash page).
#define CFLASH_OP_VALUE_PROGRAM 1u
#define CFLASH_OP_VALUE_PROGRAM _u(1)
// Read size_bytes bytes of flash, starting at address addr. There are no alignment restrictions on
// addr or size_bytes.
#define CFLASH_OP_VALUE_READ 2u
#define CFLASH_OP_MAX 2u

#endif
#define CFLASH_OP_VALUE_READ _u(2)
#define CFLASH_OP_MAX _u(2)

#endif
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,12 @@ extern "C" {
#define pico_default_asm(...) __asm (".syntax unified\n" __VA_ARGS__)
#define pico_default_asm_volatile(...) __asm volatile (".syntax unified\n" __VA_ARGS__)
#define pico_default_asm_goto(...) __asm goto (".syntax unified\n" __VA_ARGS__)
#define pico_default_asm_volatile_goto(...) __asm volatile goto (".syntax unified\n" __VA_ARGS__)
#else
#define pico_default_asm(...) __asm (__VA_ARGS__)
#define pico_default_asm_volatile(...) __asm volatile (__VA_ARGS__)
#define pico_default_asm_goto(...) __asm goto (__VA_ARGS__)
#define pico_default_asm_volatile_goto(...) __asm volatile goto (__VA_ARGS__)
#endif

/*! \brief Ensure that the compiler does not move memory access across this method call
Expand Down

0 comments on commit dee8272

Please sign in to comment.