1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

sys/riotboot: move magic address to common file

This commit is contained in:
Benjamin Valentin 2021-01-13 22:05:11 +01:00 committed by Benjamin Valentin
parent a82d4e6683
commit cabe639d04
6 changed files with 55 additions and 18 deletions

View File

@ -14,7 +14,7 @@ At startup, the DFU mode is entered when either
- the first button was pressed when the board started (configurable at board level using @ref BTN_BOOTLOADER_PIN), or
- the last running firmware asked the bootloader to go to DFU mode by using a magic number (see @ref RIOTBOOT_DFU_ADDR).
- the last running firmware asked the bootloader to go to DFU mode by using a magic number (see @ref RIOTBOOT_MAGIC_ADDR).
# Prerequisites

View File

@ -0,0 +1,47 @@
/*
* Copyright (C) 2020 Mesotic SAS
*
* This file is subject to the terms and conditions of the GNU Lesser
* General Public License v2.1. See the file LICENSE in the top level
* directory for more details.
*/
/**
* @defgroup sys_riotboot_magic Magic values for riotboot
* @ingroup sys
* @{
*
* @file
* @brief USB DFU/serial initialization constants for riotboot
*
* @author Dylan Laduranty <dylan.laduranty@mesotic.com>
*
* @}
*/
#ifndef RIOTBOOT_MAGIC_H
#define RIOTBOOT_MAGIC_H
#include "riotboot/hdr.h"
#ifdef __cplusplus
extern "C" {
#endif
/**
* @name USB RAM information for riotboot
* @{
*/
#ifndef RIOTBOOT_MAGIC_ADDR
#define RIOTBOOT_MAGIC_ADDR (CPU_RAM_BASE + CPU_RAM_SIZE - 4) /**< default magic address */
#endif
#ifndef RIOTBOOT_MAGIC_NUMBER
#define RIOTBOOT_MAGIC_NUMBER RIOTBOOT_MAGIC /**< default magic value */
#endif
/** @} */
#ifdef __cplusplus
}
#endif
#endif /* RIOTBOOT_MAGIC_H */

View File

@ -29,18 +29,6 @@
extern "C" {
#endif
/**
* @name USB DFU RAM information for riotboot
* @{
*/
#ifndef RIOTBOOT_DFU_ADDR
#define RIOTBOOT_DFU_ADDR (CPU_RAM_BASE + CPU_RAM_SIZE - 4) /**< DFU default magic address */
#endif
#ifndef RIOTBOOT_MAGIC_NUMBER
#define RIOTBOOT_MAGIC_NUMBER RIOTBOOT_MAGIC /**< DFU default magic value */
#endif
/** @} */
/**
* @name USB DFU Default slots name
* @{

View File

@ -24,6 +24,7 @@
#include "usb/usbus.h"
#include "usb/dfu.h"
#include "usb/usbus/dfu.h"
#include "riotboot/magic.h"
#include "riotboot/usb_dfu.h"
static usbus_dfu_device_t dfu;
@ -32,7 +33,7 @@ static usbus_t usbus;
void riotboot_usb_dfu_init(unsigned forced)
{
uint32_t *reset_addr = (uint32_t *)RIOTBOOT_DFU_ADDR;
uint32_t *reset_addr = (uint32_t *)RIOTBOOT_MAGIC_ADDR;
if (forced == 1 || *reset_addr == RIOTBOOT_MAGIC_NUMBER) {
*reset_addr = 0;

View File

@ -23,13 +23,13 @@ config USB_DFU_DETACH_TIMEOUT_MS
the host USB. Host USB should abort the pending operation if
device doesn't detach after this timeout.
config CUSTOM_RIOTBOOT_DFU_ADDR
config CUSTOM_RIOTBOOT_MAGIC_ADDR
bool "Use custom DFU magic address"
help
Say n to use the default address, which is the last in RAM.
config RIOTBOOT_DFU_ADDR
config RIOTBOOT_MAGIC_ADDR
int "DFU magic address"
depends on CUSTOM_RIOTBOOT_DFU_ADDR
depends on CUSTOM_RIOTBOOT_MAGIC_ADDR
endif # KCONFIG_USEMODULE_USBUS_DFU

View File

@ -23,6 +23,7 @@
#include "usb/usbus.h"
#include "usb/usbus/control.h"
#include "usb/usbus/dfu.h"
#include "riotboot/magic.h"
#include "riotboot/usb_dfu.h"
#ifdef MODULE_RIOTBOOT_USB_DFU
#include "xtimer.h"
@ -169,7 +170,7 @@ static void _dfu_class_control_req(usbus_t *usbus, usbus_dfu_device_t *dfu, usb_
/* Detach USB bus */
usbdev_set(usbus->dev, USBOPT_ATTACH, &disable, sizeof(usbopt_enable_t));
/* Restart and jump into the bootloader */
uint32_t *reset_addr = (uint32_t *)RIOTBOOT_DFU_ADDR;
uint32_t *reset_addr = (uint32_t *)RIOTBOOT_MAGIC_ADDR;
*reset_addr = RIOTBOOT_MAGIC_NUMBER;
pm_reboot();
break;