summaryrefslogtreecommitdiff
path: root/drivers/fastboot
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2024-04-18 08:29:35 -0600
committerTom Rini <[email protected]>2024-04-18 08:29:35 -0600
commitcdd20e3f66fe910da0545d3615decf511519b4a6 (patch)
tree9162980e2293b2a2405060f44529fe7a25cd0e1e /drivers/fastboot
parent3434b88d2c2fdad3cc947f9e9b03dabfdd3feb5c (diff)
Revert "Merge patch series "pxe: Allow extlinux booting without CMDLINE enabled""
As reported by Jonas Karlman this series breaks booting on some AArch64 platforms with common use cases. For now the best path forward is to revert the series. This reverts commit 777c28460947371ada40868dc994dfe8537d7115, reversing changes made to ab3453e7b12daef47b9e91da2a2a3d48615dc6fc. Link: https://lore.kernel.org/u-boot/[email protected]/ Signed-off-by: Tom Rini <[email protected]>
Diffstat (limited to 'drivers/fastboot')
-rw-r--r--drivers/fastboot/Kconfig1
-rw-r--r--drivers/fastboot/fb_command.c17
-rw-r--r--drivers/fastboot/fb_common.c37
3 files changed, 29 insertions, 26 deletions
diff --git a/drivers/fastboot/Kconfig b/drivers/fastboot/Kconfig
index d6e2be09cf7..b9e51bde6a2 100644
--- a/drivers/fastboot/Kconfig
+++ b/drivers/fastboot/Kconfig
@@ -1,4 +1,5 @@
menu "Fastboot support"
+ depends on CMDLINE
config FASTBOOT
bool
diff --git a/drivers/fastboot/fb_command.c b/drivers/fastboot/fb_command.c
index b8782bfa7fa..f95f4e4ae15 100644
--- a/drivers/fastboot/fb_command.c
+++ b/drivers/fastboot/fb_command.c
@@ -11,7 +11,6 @@
#include <fastboot-internal.h>
#include <fb_mmc.h>
#include <fb_nand.h>
-#include <mapmem.h>
#include <part.h>
#include <stdlib.h>
#include <linux/printk.h>
@@ -279,7 +278,6 @@ void fastboot_data_download(const void *fastboot_data,
{
#define BYTES_PER_DOT 0x20000
u32 pre_dot_num, now_dot_num;
- void *buf;
if (fastboot_data_len == 0 ||
(fastboot_bytes_received + fastboot_data_len) >
@@ -289,10 +287,8 @@ void fastboot_data_download(const void *fastboot_data,
return;
}
/* Download data to fastboot_buf_addr */
- buf = map_sysmem(fastboot_buf_addr, 0);
- memcpy(buf + fastboot_bytes_received,
+ memcpy(fastboot_buf_addr + fastboot_bytes_received,
fastboot_data, fastboot_data_len);
- unmap_sysmem(buf);
pre_dot_num = fastboot_bytes_received / BYTES_PER_DOT;
fastboot_bytes_received += fastboot_data_len;
@@ -335,16 +331,13 @@ void fastboot_data_complete(char *response)
*/
static void __maybe_unused flash(char *cmd_parameter, char *response)
{
- void *buf = map_sysmem(fastboot_buf_addr, 0);
-
if (IS_ENABLED(CONFIG_FASTBOOT_FLASH_MMC))
- fastboot_mmc_flash_write(cmd_parameter, buf, image_size,
- response);
+ fastboot_mmc_flash_write(cmd_parameter, fastboot_buf_addr,
+ image_size, response);
if (IS_ENABLED(CONFIG_FASTBOOT_FLASH_NAND))
- fastboot_nand_flash_write(cmd_parameter, buf, image_size,
- response);
- unmap_sysmem(buf);
+ fastboot_nand_flash_write(cmd_parameter, fastboot_buf_addr,
+ image_size, response);
}
/**
diff --git a/drivers/fastboot/fb_common.c b/drivers/fastboot/fb_common.c
index 595954542a6..3576b067729 100644
--- a/drivers/fastboot/fb_common.c
+++ b/drivers/fastboot/fb_common.c
@@ -11,7 +11,6 @@
*/
#include <bcb.h>
-#include <bootm.h>
#include <common.h>
#include <command.h>
#include <env.h>
@@ -21,7 +20,7 @@
/**
* fastboot_buf_addr - base address of the fastboot download buffer
*/
-ulong fastboot_buf_addr;
+void *fastboot_buf_addr;
/**
* fastboot_buf_size - size of the fastboot download buffer
@@ -143,19 +142,22 @@ void (*fastboot_get_progress_callback(void))(const char *)
*/
void fastboot_boot(void)
{
- char *s = NULL;
+ char *s;
- if (IS_ENABLED(CONFIG_CMDLINE)) {
- s = env_get("fastboot_bootcmd");
- if (s)
- run_command(s, CMD_FLAG_ENV);
- }
+ s = env_get("fastboot_bootcmd");
+ if (s) {
+ run_command(s, CMD_FLAG_ENV);
+ } else if (IS_ENABLED(CONFIG_CMD_BOOTM)) {
+ static char boot_addr_start[20];
+ static char *const bootm_args[] = {
+ "bootm", boot_addr_start, NULL
+ };
- if (!s && IS_ENABLED(CONFIG_BOOTM)) {
- int ret;
+ snprintf(boot_addr_start, sizeof(boot_addr_start) - 1,
+ "0x%p", fastboot_buf_addr);
+ printf("Booting kernel at %s...\n\n\n", boot_addr_start);
- printf("Booting kernel at %lx...\n\n\n", fastboot_buf_addr);
- ret = bootm_boot_start(fastboot_buf_addr, NULL);
+ do_bootm(NULL, 0, 2, bootm_args);
/*
* This only happens if image is somehow faulty so we start
@@ -212,9 +214,16 @@ void fastboot_set_progress_callback(void (*progress)(const char *msg))
fastboot_progress_callback = progress;
}
-void fastboot_init(ulong buf_addr, u32 buf_size)
+/*
+ * fastboot_init() - initialise new fastboot protocol session
+ *
+ * @buf_addr: Pointer to download buffer, or NULL for default
+ * @buf_size: Size of download buffer, or zero for default
+ */
+void fastboot_init(void *buf_addr, u32 buf_size)
{
- fastboot_buf_addr = buf_addr ? buf_addr : CONFIG_FASTBOOT_BUF_ADDR;
+ fastboot_buf_addr = buf_addr ? buf_addr :
+ (void *)CONFIG_FASTBOOT_BUF_ADDR;
fastboot_buf_size = buf_size ? buf_size : CONFIG_FASTBOOT_BUF_SIZE;
fastboot_set_progress_callback(NULL);
}