blob: 384567b8eac333766e89d71a1b9f5df84a3e5068 [file] [log] [blame]
Christopher Collinscf18a032017-02-06 15:10:45 -08001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19
Fabio Utzig1a2e41a2017-11-17 12:13:09 -020020#ifdef MCUBOOT_MYNEWT
21#include "mcuboot_config/mcuboot_config.h"
22#endif
23
Christopher Collinscf18a032017-02-06 15:10:45 -080024#include <assert.h>
25#include <stddef.h>
26#include <inttypes.h>
27#include "syscfg/syscfg.h"
28#include <flash_map/flash_map.h>
29#include <os/os.h>
30#include <bsp/bsp.h>
31#include <hal/hal_bsp.h>
32#include <hal/hal_system.h>
33#include <hal/hal_flash.h>
Fabio Utzig19356bf2017-05-11 16:19:36 -030034#ifdef MCUBOOT_SERIAL
Christopher Collinscf18a032017-02-06 15:10:45 -080035#include <hal/hal_gpio.h>
36#include <boot_serial/boot_serial.h>
37#include <sysinit/sysinit.h>
38#endif
39#include <console/console.h>
40#include "bootutil/image.h"
41#include "bootutil/bootutil.h"
42
43#define BOOT_AREA_DESC_MAX (256)
44#define AREA_DESC_MAX (BOOT_AREA_DESC_MAX)
45
Fabio Utzig19356bf2017-05-11 16:19:36 -030046#ifdef MCUBOOT_SERIAL
Christopher Collinscf18a032017-02-06 15:10:45 -080047#define BOOT_SER_CONS_INPUT 128
48#endif
49
Marti Bolivareb940802017-05-01 23:15:29 -040050/*
51 * Temporary flash_device_base() implementation.
52 *
53 * TODO: remove this when mynewt needs to support flash_device_base()
54 * for devices with nonzero base addresses.
55 */
56int flash_device_base(uint8_t fd_id, uintptr_t *ret)
57{
58 *ret = 0;
59 return 0;
60}
61
Christopher Collinscf18a032017-02-06 15:10:45 -080062int
63main(void)
64{
65 struct boot_rsp rsp;
Marti Bolivareb940802017-05-01 23:15:29 -040066 uintptr_t flash_base;
Christopher Collinscf18a032017-02-06 15:10:45 -080067 int rc;
68
Andrzej Kaczmarekc49099c2018-02-16 17:10:51 +010069 hal_bsp_init();
70 os_dev_initialize_all(OS_DEV_INIT_PRIMARY);
71 os_dev_initialize_all(OS_DEV_INIT_SECONDARY);
Fabio Utzig19356bf2017-05-11 16:19:36 -030072#ifdef MCUBOOT_SERIAL
Christopher Collinscf18a032017-02-06 15:10:45 -080073 sysinit();
74#else
75 flash_map_init();
Christopher Collinscf18a032017-02-06 15:10:45 -080076#endif
77
Fabio Utzig19356bf2017-05-11 16:19:36 -030078#ifdef MCUBOOT_SERIAL
Christopher Collinscf18a032017-02-06 15:10:45 -080079 /*
80 * Configure a GPIO as input, and compare it against expected value.
81 * If it matches, await for download commands from serial.
82 */
Fabio Utzig1a2e41a2017-11-17 12:13:09 -020083 hal_gpio_init_in(MYNEWT_VAL(BOOT_SERIAL_DETECT_PIN),
84 MYNEWT_VAL(BOOT_SERIAL_DETECT_PIN_CFG));
85 if (hal_gpio_read(MYNEWT_VAL(BOOT_SERIAL_DETECT_PIN)) ==
86 MYNEWT_VAL(BOOT_SERIAL_DETECT_PIN_VAL)) {
Christopher Collinscf18a032017-02-06 15:10:45 -080087 boot_serial_start(BOOT_SER_CONS_INPUT);
88 assert(0);
89 }
90#endif
91 rc = boot_go(&rsp);
92 assert(rc == 0);
93
Fabio Utzigb00d6482017-06-20 19:28:22 -030094 rc = flash_device_base(rsp.br_flash_dev_id, &flash_base);
Marti Bolivareb940802017-05-01 23:15:29 -040095 assert(rc == 0);
96
97 hal_system_start((void *)(flash_base + rsp.br_image_off +
98 rsp.br_hdr->ih_hdr_size));
Christopher Collinscf18a032017-02-06 15:10:45 -080099
100 return 0;
101}