splash: support raw image from MMC
The user has now the choice to specify the splash location in the MMC as a raw storage. Signed-off-by: Julien Masson <jmasson@baylibre.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									c830e285f4
								
							
						
					
					
						commit
						a638d9a47c
					
				|  | @ -39,6 +39,12 @@ static struct splash_location default_splash_locations[] = { | ||||||
| 		.flags = SPLASH_STORAGE_FS, | 		.flags = SPLASH_STORAGE_FS, | ||||||
| 		.devpart = "0:1", | 		.devpart = "0:1", | ||||||
| 	}, | 	}, | ||||||
|  | 	{ | ||||||
|  | 		.name = "mmc_raw", | ||||||
|  | 		.storage = SPLASH_STORAGE_MMC, | ||||||
|  | 		.flags = SPLASH_STORAGE_RAW, | ||||||
|  | 		.devpart = "0:1", | ||||||
|  | 	}, | ||||||
| 	{ | 	{ | ||||||
| 		.name = "usb_fs", | 		.name = "usb_fs", | ||||||
| 		.storage = SPLASH_STORAGE_USB, | 		.storage = SPLASH_STORAGE_USB, | ||||||
|  |  | ||||||
|  | @ -65,6 +65,30 @@ static int splash_nand_read_raw(u32 bmp_load_addr, int offset, size_t read_size) | ||||||
| } | } | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | static int splash_mmc_read_raw(u32 bmp_load_addr, struct splash_location *location, | ||||||
|  | 			       size_t read_size) | ||||||
|  | { | ||||||
|  | 	struct disk_partition partition; | ||||||
|  | 	struct blk_desc *desc; | ||||||
|  | 	lbaint_t blkcnt; | ||||||
|  | 	int ret, n; | ||||||
|  | 
 | ||||||
|  | 	if (!IS_ENABLED(CONFIG_CMD_MMC)) { | ||||||
|  | 		debug("%s: mmc support not available\n", __func__); | ||||||
|  | 		return -ENOSYS; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	ret = part_get_info_by_dev_and_name_or_num("mmc", location->devpart, &desc, | ||||||
|  | 						   &partition, 1); | ||||||
|  | 	if (ret < 0) | ||||||
|  | 		return ret; | ||||||
|  | 
 | ||||||
|  | 	blkcnt = DIV_ROUND_UP(read_size, partition.blksz); | ||||||
|  | 	n = blk_dread(desc, partition.start, blkcnt, (void *)(uintptr_t)bmp_load_addr); | ||||||
|  | 
 | ||||||
|  | 	return (n == blkcnt) ? 0 : -EIO; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static int splash_storage_read_raw(struct splash_location *location, | static int splash_storage_read_raw(struct splash_location *location, | ||||||
| 			       u32 bmp_load_addr, size_t read_size) | 			       u32 bmp_load_addr, size_t read_size) | ||||||
| { | { | ||||||
|  | @ -75,6 +99,8 @@ static int splash_storage_read_raw(struct splash_location *location, | ||||||
| 
 | 
 | ||||||
| 	offset = location->offset; | 	offset = location->offset; | ||||||
| 	switch (location->storage) { | 	switch (location->storage) { | ||||||
|  | 	case SPLASH_STORAGE_MMC: | ||||||
|  | 		return splash_mmc_read_raw(bmp_load_addr, location, read_size); | ||||||
| 	case SPLASH_STORAGE_NAND: | 	case SPLASH_STORAGE_NAND: | ||||||
| 		return splash_nand_read_raw(bmp_load_addr, offset, read_size); | 		return splash_nand_read_raw(bmp_load_addr, offset, read_size); | ||||||
| 	case SPLASH_STORAGE_SF: | 	case SPLASH_STORAGE_SF: | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue