diff options
Diffstat (limited to 'boot/bootmeth-uclass.c')
| -rw-r--r-- | boot/bootmeth-uclass.c | 29 | 
1 files changed, 24 insertions, 5 deletions
| diff --git a/boot/bootmeth-uclass.c b/boot/bootmeth-uclass.c index 5b5fea39b3b..014b7588e8d 100644 --- a/boot/bootmeth-uclass.c +++ b/boot/bootmeth-uclass.c @@ -6,6 +6,7 @@  #define LOG_CATEGORY UCLASS_BOOTSTD +#include <alist.h>  #include <blk.h>  #include <bootflow.h>  #include <bootmeth.h> @@ -83,14 +84,15 @@ int bootmeth_boot(struct udevice *dev, struct bootflow *bflow)  }  int bootmeth_read_file(struct udevice *dev, struct bootflow *bflow, -		       const char *file_path, ulong addr, ulong *sizep) +		       const char *file_path, ulong addr, +		       enum bootflow_img_t type, ulong *sizep)  {  	const struct bootmeth_ops *ops = bootmeth_get_ops(dev);  	if (!ops->read_file)  		return -ENOSYS; -	return ops->read_file(dev, bflow, file_path, addr, sizep); +	return ops->read_file(dev, bflow, file_path, addr, type, sizep);  }  int bootmeth_get_bootflow(struct udevice *dev, struct bootflow *bflow) @@ -326,8 +328,10 @@ int bootmeth_try_file(struct bootflow *bflow, struct blk_desc *desc,  	return 0;  } -int bootmeth_alloc_file(struct bootflow *bflow, uint size_limit, uint align) +int bootmeth_alloc_file(struct bootflow *bflow, uint size_limit, uint align, +			enum bootflow_img_t type)  { +	struct blk_desc *desc = NULL;  	void *buf;  	uint size;  	int ret; @@ -344,11 +348,18 @@ int bootmeth_alloc_file(struct bootflow *bflow, uint size_limit, uint align)  	bflow->state = BOOTFLOWST_READY;  	bflow->buf = buf; +	if (bflow->blk) +		desc = dev_get_uclass_plat(bflow->blk); + +	if (!bootflow_img_add(bflow, bflow->fname, type, map_to_sysmem(buf), +			      size)) +		return log_msg_ret("bai", -ENOMEM); +  	return 0;  }  int bootmeth_alloc_other(struct bootflow *bflow, const char *fname, -			 void **bufp, uint *sizep) +			 enum bootflow_img_t type, void **bufp, uint *sizep)  {  	struct blk_desc *desc = NULL;  	char path[200]; @@ -377,6 +388,10 @@ int bootmeth_alloc_other(struct bootflow *bflow, const char *fname,  	if (ret)  		return log_msg_ret("all", ret); +	if (!bootflow_img_add(bflow, bflow->fname, type, map_to_sysmem(buf), +			      size)) +		return log_msg_ret("boi", -ENOMEM); +  	*bufp = buf;  	*sizep = size; @@ -384,7 +399,8 @@ int bootmeth_alloc_other(struct bootflow *bflow, const char *fname,  }  int bootmeth_common_read_file(struct udevice *dev, struct bootflow *bflow, -			      const char *file_path, ulong addr, ulong *sizep) +			      const char *file_path, ulong addr, +			      enum bootflow_img_t type, ulong *sizep)  {  	struct blk_desc *desc = NULL;  	loff_t len_read; @@ -413,6 +429,9 @@ int bootmeth_common_read_file(struct udevice *dev, struct bootflow *bflow,  		return ret;  	*sizep = len_read; +	if (!bootflow_img_add(bflow, bflow->fname, type, addr, size)) +		return log_msg_ret("bci", -ENOMEM); +  	return 0;  } | 
