From 3051398316e77bf7a0347813aa2c9a295aefc35d Mon Sep 17 00:00:00 2001 From: Qubot <1445788683@qq.com> Date: Wed, 3 Jun 2026 08:21:33 +0800 Subject: [PATCH] sun60iw2: load Armbian logo from rootfs boot --- configs/bananapi_m8_defconfig | 3 ++ drivers/video/drm/sunxi_drm_drv.c | 62 ++++++++++++++++++++++--------- 2 files changed, 48 insertions(+), 17 deletions(-) diff --git a/configs/bananapi_m8_defconfig b/configs/bananapi_m8_defconfig index c39ee5ea..850ec1bc 100644 --- a/configs/bananapi_m8_defconfig +++ b/configs/bananapi_m8_defconfig @@ -28,6 +28,9 @@ CONFIG_SUNXI_HDCP_IN_SECURESTORAGE=y CONFIG_SUNXI_RKP=y CONFIG_SUNXI_RNG_SEED=y CONFIG_CMD_FASTBOOT=y +CONFIG_CMD_EXT2=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FS_GENERIC=y CONFIG_CMD_PART=y CONFIG_CMD_USB=y CONFIG_CMD_SUNXI_TIMER=y diff --git a/drivers/video/drm/sunxi_drm_drv.c b/drivers/video/drm/sunxi_drm_drv.c index 7714e3e0..5e6a5796 100644 --- a/drivers/video/drm/sunxi_drm_drv.c +++ b/drivers/video/drm/sunxi_drm_drv.c @@ -72,28 +72,23 @@ static int armbian_print_file_info(struct file_info_t *file) return 0; } -static struct file_info_t *load_armbian_boot_logo(const char *name) +static struct file_info_t *load_armbian_boot_logo_from(const char *dev_part, + int fstype, + const char *path) { loff_t file_size, read_size; struct file_info_t *file; - static bool mmc_ready; - if (!name) + if (!dev_part || !path) return NULL; - if (!mmc_ready) { - run_command("mmc dev 0", 0); - run_command("mmc rescan", 0); - mmc_ready = true; - } - - if (fs_set_blk_dev("mmc", "0:1", FS_TYPE_FAT)) + if (fs_set_blk_dev("mmc", dev_part, fstype)) return NULL; - if (!fs_exists(name)) + if (!fs_exists(path)) return NULL; - if (fs_size(name, &file_size) || !file_size) + if (fs_size(path, &file_size) || !file_size) return NULL; file = malloc(sizeof(*file)); @@ -102,16 +97,16 @@ static struct file_info_t *load_armbian_boot_logo(const char *name) memset(file, 0, sizeof(*file)); file->file_size = (unsigned int)file_size; - file->name = malloc(strlen(name) + 1); - file->path = malloc(strlen("mmc0:1") + 1); + file->name = malloc(strlen(path) + 1); + file->path = malloc(strlen("mmc") + strlen(dev_part) + 1); file->file_addr = memalign(4096, file->file_size); if (!file->name || !file->path || !file->file_addr) goto err_free; - strncpy(file->name, name, strlen(name) + 1); - strncpy(file->path, "mmc0:1", strlen("mmc0:1") + 1); + strncpy(file->name, path, strlen(path) + 1); + sprintf(file->path, "mmc%s", dev_part); - if (fs_read(name, (ulong)file->file_addr, 0, 0, &read_size) || + if (fs_read(path, (ulong)file->file_addr, 0, 0, &read_size) || read_size != file_size) goto err_free; @@ -135,6 +130,39 @@ err_free: return NULL; } +static struct file_info_t *load_armbian_boot_logo(const char *name) +{ + struct file_info_t *file; + char boot_path[64]; + static bool mmc_ready; + + if (!name) + return NULL; + + if (!mmc_ready) { + run_command("mmc dev 0", 0); + run_command("mmc rescan", 0); + mmc_ready = true; + } + + /* FAT /boot partition layout: mmc 0:1 root contains boot.bmp. */ + file = load_armbian_boot_logo_from("0:1", FS_TYPE_FAT, name); + if (file) + return file; + + /* + * H618-style Armbian logo loading reads /boot/boot.bmp from rootfs. + * Keep this fallback for images where the splash is installed in + * rootfs /boot rather than the FAT boot partition root. + */ + snprintf(boot_path, sizeof(boot_path), "/boot/%s", name); + file = load_armbian_boot_logo_from("0:2", FS_TYPE_EXT, boot_path); + if (file) + return file; + + return load_armbian_boot_logo_from("0:2", FS_TYPE_EXT, name); +} + int check_drm_debug_mode(void) { int debug_mode;