For now just drop to the cmdline so that the state can be examined. This will aid debugging. Signed-off-by: Simon Glass <sjg@chromium.org>
68 lines
1.3 KiB
C
68 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
/*
|
|
* Implementation of the logic to perform a boot
|
|
*
|
|
* Copyright 2025 Canonical Ltd
|
|
* Written by Simon Glass <simon.glass@canonical.com>
|
|
*/
|
|
|
|
#define LOG_CATEGORY UCLASS_BOOTCTL
|
|
|
|
#include <bootctl.h>
|
|
#include <dm.h>
|
|
#include <hang.h>
|
|
#include <log.h>
|
|
#include <version.h>
|
|
#include <bootctl/logic.h>
|
|
#include <bootctl/oslist.h>
|
|
#include <bootctl/state.h>
|
|
#include <bootctl/ui.h>
|
|
#include <bootctl/util.h>
|
|
#include <dm/device-internal.h>
|
|
|
|
int bootctl_get_dev(enum uclass_id type, struct udevice **devp)
|
|
{
|
|
struct udevice *dev;
|
|
int ret;
|
|
|
|
ret = uclass_first_device_err(type, &dev);
|
|
if (ret)
|
|
return log_msg_ret("bfd", ret);
|
|
|
|
*devp = dev;
|
|
|
|
return 0;
|
|
}
|
|
|
|
int bootctl_run(void)
|
|
{
|
|
struct udevice *logic;
|
|
int ret;
|
|
|
|
printf("Boot Control (using U-Boot v%d.%02d)\n", U_BOOT_VERSION_NUM,
|
|
U_BOOT_VERSION_NUM_PATCH);
|
|
|
|
/* figure out the bootctl to use */
|
|
ret = bootctl_get_dev(UCLASS_BOOTCTL, &logic);
|
|
if (ret)
|
|
return log_msg_ret("bgl", ret);
|
|
|
|
ret = bc_logic_prepare(logic);
|
|
if (ret)
|
|
return log_msg_ret("bcl", ret);
|
|
ret = bc_logic_start(logic);
|
|
if (ret)
|
|
return log_msg_ret("bcL", ret);
|
|
|
|
do {
|
|
ret = bc_logic_poll(logic);
|
|
if (ret) {
|
|
printf("logic err %dE\n", ret);
|
|
/* could hang here */
|
|
return ret;
|
|
}
|
|
} while (ret != -ESHUTDOWN);
|
|
|
|
return 0;
|
|
}
|