summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.azure-pipelines.yml2
-rw-r--r--.gitlab-ci.yml3
-rw-r--r--cmd/bootefi.c6
-rw-r--r--cmd/efidebug.c47
-rw-r--r--drivers/spi/spi-uclass.c15
-rw-r--r--include/efi_loader.h2
-rw-r--r--include/spi.h4
-rw-r--r--lib/efi_loader/efi_console.c30
-rw-r--r--lib/efi_loader/efi_load_initrd.c19
-rw-r--r--tools/docker/Dockerfile1
10 files changed, 80 insertions, 49 deletions
diff --git a/.azure-pipelines.yml b/.azure-pipelines.yml
index f200b40dbb2..bda762451fd 100644
--- a/.azure-pipelines.yml
+++ b/.azure-pipelines.yml
@@ -2,7 +2,7 @@ variables:
windows_vm: windows-2019
ubuntu_vm: ubuntu-22.04
macos_vm: macOS-12
- ci_runner_image: trini/u-boot-gitlab-ci-runner:jammy-20221003-07Oct2022
+ ci_runner_image: trini/u-boot-gitlab-ci-runner:jammy-20221003-17Oct2022
# Add '-u 0' options for Azure pipelines, otherwise we get "permission
# denied" error when it tries to "useradd -m -u 1001 vsts_azpcontainer",
# since our $(ci_runner_image) user is not root.
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 7052a6061cb..6f4c34fc4a3 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,7 +2,7 @@
# Grab our configured image. The source for this is found
# in the u-boot tree at tools/docker/Dockerfile
-image: trini/u-boot-gitlab-ci-runner:jammy-20221003-07Oct2022
+image: trini/u-boot-gitlab-ci-runner:jammy-20221003-17Oct2022
# We run some tests in different order, to catch some failures quicker.
stages:
@@ -92,7 +92,6 @@ build all 64bit ARM platforms:
script:
- virtualenv -p /usr/bin/python3 /tmp/venv
- . /tmp/venv/bin/activate
- - pip install pyelftools
- ret=0;
./tools/buildman/buildman -o /tmp -P -E -W aarch64 || ret=$?;
if [[ $ret -ne 0 ]]; then
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index b93c0d3d4c0..2a7d42925d6 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -394,8 +394,10 @@ static efi_status_t do_bootefi_exec(efi_handle_t handle, void *load_options)
out:
free(load_options);
- if (IS_ENABLED(CONFIG_EFI_LOAD_FILE2_INITRD))
- efi_initrd_deregister();
+ if (IS_ENABLED(CONFIG_EFI_LOAD_FILE2_INITRD)) {
+ if (efi_initrd_deregister() != EFI_SUCCESS)
+ log_err("Failed to remove loadfile2 for initrd\n");
+ }
/* Control is returned to U-Boot, disable EFI watchdog */
efi_set_watchdog(0);
diff --git a/cmd/efidebug.c b/cmd/efidebug.c
index 4b49f30d937..ef239bb34b4 100644
--- a/cmd/efidebug.c
+++ b/cmd/efidebug.c
@@ -25,7 +25,6 @@
#include <linux/err.h>
#define BS systab.boottime
-#define RT systab.runtime
#ifdef CONFIG_EFI_HAVE_CAPSULE_SUPPORT
/**
@@ -76,7 +75,7 @@ static int do_efi_capsule_update(struct cmd_tbl *cmdtp, int flag,
capsule->capsule_image_size);
}
- ret = EFI_CALL(RT->update_capsule(&capsule, 1, 0));
+ ret = EFI_CALL(efi_update_capsule(&capsule, 1, 0));
if (ret) {
printf("Cannot handle a capsule at %p\n", capsule);
return CMD_RET_FAILURE;
@@ -995,17 +994,16 @@ static void show_efi_boot_opt(u16 *varname16)
efi_status_t ret;
size = 0;
- ret = EFI_CALL(efi_get_variable(varname16, &efi_global_variable_guid,
- NULL, &size, NULL));
+ ret = efi_get_variable_int(varname16, &efi_global_variable_guid,
+ NULL, &size, NULL, NULL);
if (ret == EFI_BUFFER_TOO_SMALL) {
data = malloc(size);
if (!data) {
printf("ERROR: Out of memory\n");
return;
}
- ret = EFI_CALL(efi_get_variable(varname16,
- &efi_global_variable_guid,
- NULL, &size, data));
+ ret = efi_get_variable_int(varname16, &efi_global_variable_guid,
+ NULL, &size, data, NULL);
if (ret == EFI_SUCCESS)
show_efi_boot_opt_data(varname16, data, &size);
free(data);
@@ -1057,8 +1055,7 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
var_name16[0] = 0;
for (;;) {
size = buf_size;
- ret = EFI_CALL(efi_get_next_variable_name(&size, var_name16,
- &guid));
+ ret = efi_get_next_variable_name_int(&size, var_name16, &guid);
if (ret == EFI_NOT_FOUND)
break;
if (ret == EFI_BUFFER_TOO_SMALL) {
@@ -1069,9 +1066,8 @@ static int do_efi_boot_dump(struct cmd_tbl *cmdtp, int flag,
return CMD_RET_FAILURE;
}
var_name16 = p;
- ret = EFI_CALL(efi_get_next_variable_name(&size,
- var_name16,
- &guid));
+ ret = efi_get_next_variable_name_int(&size, var_name16,
+ &guid);
}
if (ret != EFI_SUCCESS) {
free(var_name16);
@@ -1114,8 +1110,8 @@ static int show_efi_boot_order(void)
efi_status_t ret;
size = 0;
- ret = EFI_CALL(efi_get_variable(u"BootOrder", &efi_global_variable_guid,
- NULL, &size, NULL));
+ ret = efi_get_variable_int(u"BootOrder", &efi_global_variable_guid,
+ NULL, &size, NULL, NULL);
if (ret != EFI_BUFFER_TOO_SMALL) {
if (ret == EFI_NOT_FOUND) {
printf("BootOrder not defined\n");
@@ -1129,8 +1125,8 @@ static int show_efi_boot_order(void)
printf("ERROR: Out of memory\n");
return CMD_RET_FAILURE;
}
- ret = EFI_CALL(efi_get_variable(u"BootOrder", &efi_global_variable_guid,
- NULL, &size, bootorder));
+ ret = efi_get_variable_int(u"BootOrder", &efi_global_variable_guid,
+ NULL, &size, bootorder, NULL);
if (ret != EFI_SUCCESS) {
ret = CMD_RET_FAILURE;
goto out;
@@ -1142,9 +1138,9 @@ static int show_efi_boot_order(void)
"Boot", bootorder[i]);
size = 0;
- ret = EFI_CALL(efi_get_variable(var_name16,
- &efi_global_variable_guid, NULL,
- &size, NULL));
+ ret = efi_get_variable_int(var_name16,
+ &efi_global_variable_guid, NULL,
+ &size, NULL, NULL);
if (ret != EFI_BUFFER_TOO_SMALL) {
printf("%2d: %ls: (not defined)\n", i + 1, var_name16);
continue;
@@ -1155,9 +1151,9 @@ static int show_efi_boot_order(void)
ret = CMD_RET_FAILURE;
goto out;
}
- ret = EFI_CALL(efi_get_variable(var_name16,
- &efi_global_variable_guid, NULL,
- &size, data));
+ ret = efi_get_variable_int(var_name16,
+ &efi_global_variable_guid, NULL,
+ &size, data, NULL);
if (ret != EFI_SUCCESS) {
free(data);
ret = CMD_RET_FAILURE;
@@ -1444,10 +1440,9 @@ static int do_efi_query_info(struct cmd_tbl *cmdtp, int flag,
EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS;
}
- ret = EFI_CALL(efi_query_variable_info(attr,
- &max_variable_storage_size,
- &remain_variable_storage_size,
- &max_variable_size));
+ ret = efi_query_variable_info_int(attr, &max_variable_storage_size,
+ &remain_variable_storage_size,
+ &max_variable_size);
if (ret != EFI_SUCCESS) {
printf("Error: Cannot query UEFI variables, r = %lu\n",
ret & ~EFI_ERROR_MASK);
diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index f2791c4b88e..c929e7c1d0e 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -130,6 +130,21 @@ void spi_release_bus(struct spi_slave *slave)
dm_spi_release_bus(slave->dev);
}
+int spi_set_speed(struct spi_slave *slave, uint hz)
+{
+ struct dm_spi_ops *ops;
+ int ret;
+
+ ops = spi_get_ops(slave->dev->parent);
+ if (ops->set_speed)
+ ret = ops->set_speed(slave->dev->parent, hz);
+ else
+ ret = -EINVAL;
+ if (ret)
+ dev_err(slave->dev, "Cannot set speed (err=%d)\n", ret);
+ return ret;
+}
+
int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
const void *dout, void *din, unsigned long flags)
{
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 1bac3f49a3e..0c6c95ba464 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -570,7 +570,7 @@ efi_status_t efi_net_register(void);
/* Called by bootefi to make the watchdog available */
efi_status_t efi_watchdog_register(void);
efi_status_t efi_initrd_register(void);
-void efi_initrd_deregister(void);
+efi_status_t efi_initrd_deregister(void);
/* Called by bootefi to make SMBIOS tables available */
/**
* efi_acpi_register() - write out ACPI tables
diff --git a/include/spi.h b/include/spi.h
index 9a8c1fb260e..1bc18e65525 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -352,8 +352,10 @@ void spi_cs_deactivate(struct spi_slave *slave);
* This sets a new speed to be applied for next spi_xfer().
* @slave: The SPI slave
* @hz: The transfer speed
+ *
+ * Returns: 0 on success, or a negative value on error.
*/
-void spi_set_speed(struct spi_slave *slave, uint hz);
+int spi_set_speed(struct spi_slave *slave, uint hz);
/**
* Write 8 bits, then read 8 bits.
diff --git a/lib/efi_loader/efi_console.c b/lib/efi_loader/efi_console.c
index 3354b217a9a..ab83f8bf828 100644
--- a/lib/efi_loader/efi_console.c
+++ b/lib/efi_loader/efi_console.c
@@ -462,6 +462,20 @@ static efi_status_t EFIAPI efi_cout_set_attribute(
/**
* efi_cout_clear_screen() - clear screen
+ */
+static void efi_clear_screen(void)
+{
+ /*
+ * The Linux console wants both a clear and a home command. The video
+ * uclass does not support <ESC>[H without coordinates, yet.
+ */
+ printf(ESC "[2J" ESC "[1;1H");
+ efi_con_mode.cursor_column = 0;
+ efi_con_mode.cursor_row = 0;
+}
+
+/**
+ * efi_cout_clear_screen() - clear screen
*
* This function implements the ClearScreen service of the simple text output
* protocol. See the Unified Extensible Firmware Interface (UEFI) specification
@@ -475,13 +489,7 @@ static efi_status_t EFIAPI efi_cout_clear_screen(
{
EFI_ENTRY("%p", this);
- /*
- * The Linux console wants both a clear and a home command. The video
- * uclass does not support <ESC>[H without coordinates, yet.
- */
- printf(ESC "[2J" ESC "[1;1H");
- efi_con_mode.cursor_column = 0;
- efi_con_mode.cursor_row = 0;
+ efi_clear_screen();
return EFI_EXIT(EFI_SUCCESS);
}
@@ -510,7 +518,7 @@ static efi_status_t EFIAPI efi_cout_set_mode(
return EFI_EXIT(EFI_UNSUPPORTED);
efi_con_mode.mode = mode_number;
- EFI_CALL(efi_cout_clear_screen(this));
+ efi_clear_screen();
return EFI_EXIT(EFI_SUCCESS);
}
@@ -536,7 +544,7 @@ static efi_status_t EFIAPI efi_cout_reset(
efi_con_mode.attribute = 0x07;
printf(ESC "[0;37;40m");
/* Clear screen */
- EFI_CALL(efi_cout_clear_screen(this));
+ efi_clear_screen();
return EFI_EXIT(EFI_SUCCESS);
}
@@ -1351,9 +1359,7 @@ efi_status_t efi_console_get_u16_string(struct efi_simple_text_input_protocol *c
ANSI_CLEAR_LINE_TO_END
ANSI_CURSOR_SHOW, row, col);
- ret = EFI_CALL(cin->reset(cin, false));
- if (ret != EFI_SUCCESS)
- return ret;
+ efi_cin_empty_buffer();
for (;;) {
do {
diff --git a/lib/efi_loader/efi_load_initrd.c b/lib/efi_loader/efi_load_initrd.c
index 87fde3f88c2..193433782c2 100644
--- a/lib/efi_loader/efi_load_initrd.c
+++ b/lib/efi_loader/efi_load_initrd.c
@@ -213,7 +213,7 @@ efi_status_t efi_initrd_register(void)
&efi_guid_device_path, &dp_lf2_handle,
/* LOAD_FILE2 */
&efi_guid_load_file2_protocol,
- (void *)&efi_lf2_protocol,
+ &efi_lf2_protocol,
NULL);
return ret;
@@ -227,11 +227,22 @@ efi_status_t efi_initrd_register(void)
*
* Return: status code
*/
-void efi_initrd_deregister(void)
+efi_status_t efi_initrd_deregister(void)
{
+ efi_status_t ret;
+
if (!efi_initrd_handle)
- return;
+ return EFI_SUCCESS;
- efi_delete_handle(efi_initrd_handle);
+ ret = efi_uninstall_multiple_protocol_interfaces(efi_initrd_handle,
+ /* initramfs */
+ &efi_guid_device_path,
+ &dp_lf2_handle,
+ /* LOAD_FILE2 */
+ &efi_guid_load_file2_protocol,
+ &efi_lf2_protocol,
+ NULL);
efi_initrd_handle = NULL;
+
+ return ret;
}
diff --git a/tools/docker/Dockerfile b/tools/docker/Dockerfile
index 84b7777e888..42ab81283d2 100644
--- a/tools/docker/Dockerfile
+++ b/tools/docker/Dockerfile
@@ -97,6 +97,7 @@ RUN apt-get update && apt-get install -y \
python3 \
python3-dev \
python3-pip \
+ python3-pyelftools \
python3-sphinx \
python3-virtualenv \
rpm2cpio \