summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README6
-rw-r--r--cmd/trace.c4
-rw-r--r--common/board_f.c6
-rw-r--r--common/board_r.c14
-rw-r--r--common/bootm.c2
-rw-r--r--common/image-fit.c16
-rw-r--r--configs/sandbox_defconfig11
-rw-r--r--drivers/mtd/spi/sandbox.c14
-rw-r--r--drivers/mtd/spi/sf_probe.c4
-rw-r--r--drivers/mtd/spi/spi_flash.c2
-rw-r--r--drivers/net/phy/atheros.c3
-rw-r--r--drivers/pci/pci_auto.c2
-rw-r--r--drivers/timer/Kconfig10
-rw-r--r--drivers/timer/sandbox_timer.c18
-rw-r--r--drivers/timer/timer-uclass.c6
-rw-r--r--include/configs/T208xQDS.h2
-rw-r--r--include/image.h5
-rw-r--r--include/timer.h21
-rw-r--r--lib/div64.c3
-rw-r--r--lib/time.c28
-rw-r--r--net/bootp.c11
-rw-r--r--test/dm/Makefile4
-rwxr-xr-xtest/image/test-fit.py4
-rwxr-xr-xtest/trace/test-trace.sh4
-rw-r--r--test/vboot/sandbox-u-boot.dts3
25 files changed, 158 insertions, 45 deletions
diff --git a/README b/README
index 362ff19..b2eee19 100644
--- a/README
+++ b/README
@@ -5409,6 +5409,12 @@ List of environment variables (most likely not complete):
Ethernet is encapsulated/received over 802.1q
VLAN tagged frames.
+ bootpretryperiod - Period during which BOOTP/DHCP sends retries.
+ Unsigned value, in milliseconds. If not set, the period will
+ be either the default (28000), or a value based on
+ CONFIG_NET_RETRY_COUNT, if defined. This value has
+ precedence over the valu based on CONFIG_NET_RETRY_COUNT.
+
The following image location variables contain the location of images
used in booting. The "Image" column gives the role of the image and is
not an environment variable name. The other columns are environment
diff --git a/cmd/trace.c b/cmd/trace.c
index 1e62a1a..1a6d8c3 100644
--- a/cmd/trace.c
+++ b/cmd/trace.c
@@ -43,7 +43,7 @@ static int create_func_list(int argc, char * const argv[])
err = trace_list_functions(buff + buff_ptr, avail, &needed);
if (err)
printf("Error: truncated (%#x bytes needed)\n", needed);
- used = min(avail, needed);
+ used = min(avail, (size_t)needed);
printf("Function trace dumped to %08lx, size %#zx\n",
(ulong)map_to_sysmem(buff + buff_ptr), used);
setenv_hex("profbase", map_to_sysmem(buff));
@@ -67,7 +67,7 @@ static int create_call_list(int argc, char * const argv[])
err = trace_list_calls(buff + buff_ptr, avail, &needed);
if (err)
printf("Error: truncated (%#x bytes needed)\n", needed);
- used = min(avail, needed);
+ used = min(avail, (size_t)needed);
printf("Call list dumped to %08lx, size %#zx\n",
(ulong)map_to_sysmem(buff + buff_ptr), used);
diff --git a/common/board_f.c b/common/board_f.c
index a960144..622093a 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -45,6 +45,7 @@
#include <post.h>
#include <spi.h>
#include <status_led.h>
+#include <timer.h>
#include <trace.h>
#include <video.h>
#include <watchdog.h>
@@ -805,6 +806,11 @@ static int initf_dm(void)
if (ret)
return ret;
#endif
+#ifdef CONFIG_TIMER_EARLY
+ ret = dm_timer_init();
+ if (ret)
+ return ret;
+#endif
return 0;
}
diff --git a/common/board_r.c b/common/board_r.c
index 6c23865..52a9b26 100644
--- a/common/board_r.c
+++ b/common/board_r.c
@@ -46,6 +46,7 @@
#include <serial.h>
#include <spi.h>
#include <stdio_dev.h>
+#include <timer.h>
#include <trace.h>
#include <watchdog.h>
#ifdef CONFIG_CMD_AMBAPP
@@ -312,13 +313,22 @@ static int initr_noncached(void)
#ifdef CONFIG_DM
static int initr_dm(void)
{
+ int ret;
+
/* Save the pre-reloc driver model and start a new one */
gd->dm_root_f = gd->dm_root;
gd->dm_root = NULL;
-#ifdef CONFIG_TIMER
+ ret = dm_init_and_scan(false);
+ if (ret)
+ return ret;
+#ifdef CONFIG_TIMER_EARLY
gd->timer = NULL;
+ ret = dm_timer_init();
+ if (ret)
+ return ret;
#endif
- return dm_init_and_scan(false);
+
+ return 0;
}
#endif
diff --git a/common/bootm.c b/common/bootm.c
index 99d574d..df27089 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -201,7 +201,7 @@ static int bootm_find_os(cmd_tbl_t *cmdtp, int flag, int argc,
images.ep += images.os.load;
}
- images.os.start = (ulong)os_hdr;
+ images.os.start = map_to_sysmem(os_hdr);
return 0;
}
diff --git a/common/image-fit.c b/common/image-fit.c
index c531ee7..fbd9e0d 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -851,6 +851,11 @@ static int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore)
return 0;
}
+ulong fit_get_end(const void *fit)
+{
+ return map_to_sysmem((void *)(fit + fdt_totalsize(fit)));
+}
+
/**
* fit_set_timestamp - set node timestamp property
* @fit: pointer to the FIT format image header
@@ -1030,10 +1035,15 @@ int fit_image_verify(const void *fit, int image_noffset)
strlen(FIT_SIG_NODENAME))) {
ret = fit_image_check_sig(fit, noffset, data,
size, -1, &err_msg);
- if (ret) {
+
+ /*
+ * Show an indication on failure, but do not return
+ * an error. Only keys marked 'required' can cause
+ * an image validation failure. See the call to
+ * fit_image_verify_required_sigs() above.
+ */
+ if (ret)
puts("- ");
- goto error;
- }
else
puts("+ ");
}
diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index b5b81ca..02534bf 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -1,10 +1,13 @@
CONFIG_SYS_MALLOC_F_LEN=0x2000
CONFIG_PCI=y
CONFIG_DEFAULT_DEVICE_TREE="sandbox"
-CONFIG_DM_PCI_COMPAT=y
CONFIG_FIT=y
CONFIG_FIT_VERBOSE=y
CONFIG_FIT_SIGNATURE=y
+CONFIG_BOOTSTAGE=y
+CONFIG_BOOTSTAGE_REPORT=y
+CONFIG_CONSOLE_RECORD=y
+CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
# CONFIG_CMD_ELF is not set
# CONFIG_CMD_IMLS is not set
# CONFIG_CMD_FLASH is not set
@@ -12,14 +15,10 @@ CONFIG_CMD_REMOTEPROC=y
CONFIG_CMD_GPIO=y
# CONFIG_CMD_SETEXPR is not set
CONFIG_CMD_SOUND=y
-CONFIG_BOOTSTAGE=y
-CONFIG_BOOTSTAGE_REPORT=y
CONFIG_CMD_PMIC=y
CONFIG_CMD_REGULATOR=y
CONFIG_CMD_TPM=y
CONFIG_CMD_TPM_TEST=y
-CONFIG_CONSOLE_RECORD=y
-CONFIG_CONSOLE_RECORD_OUT_SIZE=0x1000
CONFIG_OF_CONTROL=y
CONFIG_OF_HOSTFILE=y
CONFIG_REGMAP=y
@@ -52,6 +51,7 @@ CONFIG_SPI_FLASH_SST=y
CONFIG_SPI_FLASH_WINBOND=y
CONFIG_DM_ETH=y
CONFIG_DM_PCI=y
+CONFIG_DM_PCI_COMPAT=y
CONFIG_PCI_SANDBOX=y
CONFIG_PINCTRL=y
CONFIG_PINCONF=y
@@ -68,6 +68,7 @@ CONFIG_SOUND=y
CONFIG_SOUND_SANDBOX=y
CONFIG_SANDBOX_SPI=y
CONFIG_TIMER=y
+CONFIG_TIMER_EARLY=y
CONFIG_SANDBOX_TIMER=y
CONFIG_TPM_TIS_SANDBOX=y
CONFIG_USB=y
diff --git a/drivers/mtd/spi/sandbox.c b/drivers/mtd/spi/sandbox.c
index 895604d..53470b9 100644
--- a/drivers/mtd/spi/sandbox.c
+++ b/drivers/mtd/spi/sandbox.c
@@ -142,13 +142,15 @@ static int sandbox_sf_probe(struct udevice *dev)
if (bus->seq < CONFIG_SANDBOX_SPI_MAX_BUS)
spec = state->spi[bus->seq][cs].spec;
if (!spec) {
+ debug("%s: No spec found for bus %d, cs %d\n",
+ __func__, bus->seq, cs);
ret = -ENOENT;
goto error;
}
file = strchr(spec, ':');
if (!file) {
- printf("sandbox_sf: unable to parse file\n");
+ printf("%s: unable to parse file\n", __func__);
ret = -EINVAL;
goto error;
}
@@ -174,7 +176,7 @@ static int sandbox_sf_probe(struct udevice *dev)
break;
}
if (!data->name) {
- printf("sandbox_sf: unknown flash '%*s'\n", (int)idname_len,
+ printf("%s: unknown flash '%*s'\n", __func__, (int)idname_len,
spec);
ret = -EINVAL;
goto error;
@@ -185,8 +187,7 @@ static int sandbox_sf_probe(struct udevice *dev)
sbsf->fd = os_open(pdata->filename, 02);
if (sbsf->fd == -1) {
- free(sbsf);
- printf("sandbox_sf: unable to open file '%s'\n",
+ printf("%s: unable to open file '%s'\n", __func__,
pdata->filename);
ret = -EIO;
goto error;
@@ -553,6 +554,9 @@ static int sandbox_cmdline_cb_spi_sf(struct sandbox_state *state,
* yet. Perhaps we can figure something out.
*/
state->spi[bus][cs].spec = spec;
+ debug("%s: Setting up spec '%s' for bus %ld, cs %ld\n", __func__,
+ spec, bus, cs);
+
return 0;
}
SANDBOX_CMDLINE_OPT(spi_sf, 1, "connect a SPI flash: <bus>:<cs>:<id>:<file>");
@@ -671,6 +675,8 @@ int dm_scan_other(bool pre_reloc_only)
__func__, busnum, cs);
return ret;
}
+ debug("%s: Setting up spec '%s' for bus %d, cs %d\n",
+ __func__, spec, busnum, cs);
}
}
}
diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c
index daa1d5b..7b29637 100644
--- a/drivers/mtd/spi/sf_probe.c
+++ b/drivers/mtd/spi/sf_probe.c
@@ -42,10 +42,8 @@ static int spi_flash_probe_slave(struct spi_flash *flash)
}
ret = spi_flash_scan(flash);
- if (ret) {
- ret = -EINVAL;
+ if (ret)
goto err_read_id;
- }
#ifdef CONFIG_SPI_FLASH_MTD
ret = spi_flash_mtd_register(flash);
diff --git a/drivers/mtd/spi/spi_flash.c b/drivers/mtd/spi/spi_flash.c
index 3c365d5..2ae2e3c 100644
--- a/drivers/mtd/spi/spi_flash.c
+++ b/drivers/mtd/spi/spi_flash.c
@@ -989,7 +989,7 @@ int spi_flash_scan(struct spi_flash *flash)
ret = spi_flash_cmd(spi, CMD_READ_ID, idcode, sizeof(idcode));
if (ret) {
printf("SF: Failed to get idcodes\n");
- return -EINVAL;
+ return ret;
}
#ifdef DEBUG
diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c
index ba57b1a..e57c412 100644
--- a/drivers/net/phy/atheros.c
+++ b/drivers/net/phy/atheros.c
@@ -33,6 +33,9 @@ static int ar8035_config(struct phy_device *phydev)
phydev->supported = phydev->drv->features;
+ genphy_config_aneg(phydev);
+ genphy_restart_aneg(phydev);
+
return 0;
}
diff --git a/drivers/pci/pci_auto.c b/drivers/pci/pci_auto.c
index 88bc416..ee9a854 100644
--- a/drivers/pci/pci_auto.c
+++ b/drivers/pci/pci_auto.c
@@ -30,7 +30,7 @@ void dm_pciauto_setup_device(struct udevice *dev, int bars_num,
u8 header_type;
int rom_addr;
pci_addr_t bar_value;
- struct pci_region *bar_res;
+ struct pci_region *bar_res = NULL;
int found_mem64 = 0;
u16 class;
diff --git a/drivers/timer/Kconfig b/drivers/timer/Kconfig
index ff65a73..cb18f12 100644
--- a/drivers/timer/Kconfig
+++ b/drivers/timer/Kconfig
@@ -9,6 +9,16 @@ config TIMER
will be used. The timer is usually a 32 bits free-running up
counter. There may be no real tick, and no timer interrupt.
+config TIMER_EARLY
+ bool "Allow timer to be used early in U-Boot"
+ depends on TIMER
+ help
+ In some cases the timer must be accessible before driver model is
+ active. Examples include when using CONFIG_TRACE to trace U-Boot's
+ execution before driver model is set up. Enable this option to
+ use an early timer. These functions must be supported by your timer
+ driver: timer_early_get_count() and timer_early_get_rate().
+
config ALTERA_TIMER
bool "Altera timer support"
depends on TIMER
diff --git a/drivers/timer/sandbox_timer.c b/drivers/timer/sandbox_timer.c
index a8da936..6a6411a 100644
--- a/drivers/timer/sandbox_timer.c
+++ b/drivers/timer/sandbox_timer.c
@@ -10,6 +10,8 @@
#include <timer.h>
#include <os.h>
+#define SANDBOX_TIMER_RATE 1000000
+
/* system timer offset in ms */
static unsigned long sandbox_timer_offset;
@@ -18,9 +20,19 @@ void sandbox_timer_add_offset(unsigned long offset)
sandbox_timer_offset += offset;
}
-static int sandbox_timer_get_count(struct udevice *dev, u64 *count)
+u64 notrace timer_early_get_count(void)
+{
+ return os_get_nsec() / 1000 + sandbox_timer_offset * 1000;
+}
+
+unsigned long notrace timer_early_get_rate(void)
+{
+ return SANDBOX_TIMER_RATE;
+}
+
+static notrace int sandbox_timer_get_count(struct udevice *dev, u64 *count)
{
- *count = os_get_nsec() / 1000 + sandbox_timer_offset * 1000;
+ *count = timer_early_get_count();
return 0;
}
@@ -30,7 +42,7 @@ static int sandbox_timer_probe(struct udevice *dev)
struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
if (!uc_priv->clock_rate)
- uc_priv->clock_rate = 1000000;
+ uc_priv->clock_rate = SANDBOX_TIMER_RATE;
return 0;
}
diff --git a/drivers/timer/timer-uclass.c b/drivers/timer/timer-uclass.c
index 83d1a35..382c0f2 100644
--- a/drivers/timer/timer-uclass.c
+++ b/drivers/timer/timer-uclass.c
@@ -22,7 +22,7 @@ DECLARE_GLOBAL_DATA_PTR;
* tick, and no timer interrupt.
*/
-int timer_get_count(struct udevice *dev, u64 *count)
+int notrace timer_get_count(struct udevice *dev, u64 *count)
{
const struct timer_ops *ops = device_get_ops(dev);
@@ -32,9 +32,9 @@ int timer_get_count(struct udevice *dev, u64 *count)
return ops->get_count(dev, count);
}
-unsigned long timer_get_rate(struct udevice *dev)
+unsigned long notrace timer_get_rate(struct udevice *dev)
{
- struct timer_dev_priv *uc_priv = dev_get_uclass_priv(dev);
+ struct timer_dev_priv *uc_priv = dev->uclass_priv;
return uc_priv->clock_rate;
}
diff --git a/include/configs/T208xQDS.h b/include/configs/T208xQDS.h
index a56208c..3caf40b 100644
--- a/include/configs/T208xQDS.h
+++ b/include/configs/T208xQDS.h
@@ -748,7 +748,7 @@ unsigned long get_board_ddr_clk(void);
#ifdef CONFIG_MMC
#define CONFIG_CMD_MMC
#define CONFIG_FSL_ESDHC
-#define define CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
+#define CONFIG_FSL_ESDHC_USE_PERIPHERAL_CLK
#define CONFIG_SYS_FSL_ESDHC_ADDR CONFIG_SYS_MPC85xx_ESDHC_ADDR
#define CONFIG_SYS_FSL_ESDHC_BROKEN_TIMEOUT
#define CONFIG_SYS_FSL_MMC_HAS_CAPBLT_VS33
diff --git a/include/image.h b/include/image.h
index 299d6d2..518a4f5 100644
--- a/include/image.h
+++ b/include/image.h
@@ -818,10 +818,7 @@ static inline ulong fit_get_size(const void *fit)
* returns:
* end address of the FIT image (blob) in memory
*/
-static inline ulong fit_get_end(const void *fit)
-{
- return (ulong)fit + fdt_totalsize(fit);
-}
+ulong fit_get_end(const void *fit);
/**
* fit_get_name - get FIT node name
diff --git a/include/timer.h b/include/timer.h
index f14725c..dcc803c 100644
--- a/include/timer.h
+++ b/include/timer.h
@@ -67,4 +67,25 @@ struct timer_dev_priv {
unsigned long clock_rate;
};
+/**
+ * timer_early_get_count() - Implement timer_get_count() before driver model
+ *
+ * If CONFIG_TIMER_EARLY is enabled, this function wil be called to return
+ * the current timer value before the proper driver model timer is ready.
+ * It should be implemented by one of the timer values. This is mostly useful
+ * for tracing.
+ */
+u64 timer_early_get_count(void);
+
+/**
+ * timer_early_get_rate() - Get the timer rate before driver model
+ *
+ * If CONFIG_TIMER_EARLY is enabled, this function wil be called to return
+ * the current timer rate in Hz before the proper driver model timer is ready.
+ * It should be implemented by one of the timer values. This is mostly useful
+ * for tracing. This corresponds to the clock_rate value in struct
+ * timer_dev_priv.
+ */
+unsigned long timer_early_get_rate(void);
+
#endif /* _TIMER_H_ */
diff --git a/lib/div64.c b/lib/div64.c
index 795ef0e..319fca5 100644
--- a/lib/div64.c
+++ b/lib/div64.c
@@ -18,8 +18,9 @@
#include <div64.h>
#include <linux/types.h>
+#include <linux/compiler.h>
-uint32_t __div64_32(uint64_t *n, uint32_t base)
+uint32_t notrace __div64_32(uint64_t *n, uint32_t base)
{
uint64_t rem = *n;
uint64_t b = base;
diff --git a/lib/time.c b/lib/time.c
index e9f6861..f37150f 100644
--- a/lib/time.c
+++ b/lib/time.c
@@ -43,11 +43,17 @@ extern unsigned long __weak timer_read_counter(void);
#ifdef CONFIG_TIMER
ulong notrace get_tbclk(void)
{
- int ret;
+ if (!gd->timer) {
+#ifdef CONFIG_TIMER_EARLY
+ return timer_early_get_rate();
+#else
+ int ret;
- ret = dm_timer_init();
- if (ret)
- return ret;
+ ret = dm_timer_init();
+ if (ret)
+ return ret;
+#endif
+ }
return timer_get_rate(gd->timer);
}
@@ -57,9 +63,17 @@ uint64_t notrace get_ticks(void)
u64 count;
int ret;
- ret = dm_timer_init();
- if (ret)
- return ret;
+ if (!gd->timer) {
+#ifdef CONFIG_TIMER_EARLY
+ return timer_early_get_count();
+#else
+ int ret;
+
+ ret = dm_timer_init();
+ if (ret)
+ return ret;
+#endif
+ }
ret = timer_get_count(gd->timer, &count);
if (ret)
diff --git a/net/bootp.c b/net/bootp.c
index f2978a2..aefc808 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -60,6 +60,8 @@ char net_nis_domain[32] = {0,}; /* Our NIS domain */
char net_hostname[32] = {0,}; /* Our hostname */
char net_root_path[64] = {0,}; /* Our bootpath */
+static ulong time_taken_max;
+
#if defined(CONFIG_CMD_DHCP)
static dhcp_state_t dhcp_state = INIT;
static u32 dhcp_leasetime;
@@ -380,7 +382,7 @@ static void bootp_timeout_handler(void)
{
ulong time_taken = get_timer(bootp_start);
- if (time_taken >= TIMEOUT_MS) {
+ if (time_taken >= time_taken_max) {
#ifdef CONFIG_BOOTP_MAY_FAIL
puts("\nRetry time exceeded\n");
net_set_state(NETLOOP_FAIL);
@@ -675,12 +677,19 @@ void bootp_request(void)
u32 bootp_id;
struct in_addr zero_ip;
struct in_addr bcast_ip;
+ char *ep; /* Environment pointer */
bootstage_mark_name(BOOTSTAGE_ID_BOOTP_START, "bootp_start");
#if defined(CONFIG_CMD_DHCP)
dhcp_state = INIT;
#endif
+ ep = getenv("bootpretryperiod");
+ if (ep != NULL)
+ time_taken_max = simple_strtoul(ep, NULL, 10);
+ else
+ time_taken_max = TIMEOUT_MS;
+
#ifdef CONFIG_BOOTP_RANDOM_DELAY /* Random BOOTP delay */
if (bootp_try == 0)
srand_mac();
diff --git a/test/dm/Makefile b/test/dm/Makefile
index d4f3f22..fd0198f 100644
--- a/test/dm/Makefile
+++ b/test/dm/Makefile
@@ -27,8 +27,8 @@ obj-y += regmap.o
obj-$(CONFIG_REMOTEPROC) += remoteproc.o
obj-$(CONFIG_RESET) += reset.o
obj-$(CONFIG_DM_RTC) += rtc.o
-#obj-$(CONFIG_DM_SPI_FLASH) += sf.o
-#obj-$(CONFIG_DM_SPI) += spi.o
+obj-$(CONFIG_DM_SPI_FLASH) += sf.o
+obj-$(CONFIG_DM_SPI) += spi.o
obj-y += syscon.o
obj-$(CONFIG_DM_USB) += usb.o
obj-$(CONFIG_DM_PMIC) += pmic.o
diff --git a/test/image/test-fit.py b/test/image/test-fit.py
index d5143cb..db0649f 100755
--- a/test/image/test-fit.py
+++ b/test/image/test-fit.py
@@ -108,6 +108,10 @@ base_fdt = '''
model = "Sandbox Verified Boot Test";
compatible = "sandbox";
+ reset@0 {
+ compatible = "sandbox,reset";
+ };
+
};
'''
diff --git a/test/trace/test-trace.sh b/test/trace/test-trace.sh
index 3e8651e..746793c 100755
--- a/test/trace/test-trace.sh
+++ b/test/trace/test-trace.sh
@@ -45,7 +45,9 @@ check_results() {
# between calls 2 and 3, where tracing is paused.
# This code gets the sign of the difference between each number and
# its predecessor.
- counts="$(tr -d , <${tmp} | awk '/traced function calls/ { diff = $1 - upto; upto = $1; printf "%d ", diff < 0 ? -1 : (diff > 0 ? 1 : 0)}')"
+ counts="$(tr -d ',\r' <${tmp} | awk \
+ '/traced function calls/ { diff = $1 - upto; upto = $1; \
+ printf "%d ", diff < 0 ? -1 : (diff > 0 ? 1 : 0)}')"
if [ "${counts}" != "1 1 0 1 " ]; then
fail "trace collection error: ${counts}"
diff --git a/test/vboot/sandbox-u-boot.dts b/test/vboot/sandbox-u-boot.dts
index a1e853c..63f8f40 100644
--- a/test/vboot/sandbox-u-boot.dts
+++ b/test/vboot/sandbox-u-boot.dts
@@ -4,4 +4,7 @@
model = "Sandbox Verified Boot Test";
compatible = "sandbox";
+ reset@0 {
+ compatible = "sandbox,reset";
+ };
};