[U-Boot] [PATCH] misc: fs_loader: Replace label with DT phandle
Chee, Tien Fong
tien.fong.chee at intel.com
Tue Feb 26 12:37:05 UTC 2019
On Fri, 2019-02-15 at 14:35 +0800, tien.fong.chee at intel.com wrote:
> From: Tien Fong Chee <tien.fong.chee at intel.com>
>
> In previously label which will be expanded to the node's full path
> was
> used, and now replacing label with most commonly used DT phandle. The
> codes were changed accordingly to the use of DT phandle and
> supporting
> multiple instances.
>
> Signed-off-by: Tien Fong Chee <tien.fong.chee at intel.com>
> ---
> doc/driver-model/fs_firmware_loader.txt | 58
> +++++++++++++++++++++++++------
> drivers/misc/fs_loader.c | 36 ++++++++-----------
> 2 files changed, 62 insertions(+), 32 deletions(-)
>
> diff --git a/doc/driver-model/fs_firmware_loader.txt b/doc/driver-
> model/fs_firmware_loader.txt
> index b9aee84..d9f966e 100644
> --- a/doc/driver-model/fs_firmware_loader.txt
> +++ b/doc/driver-model/fs_firmware_loader.txt
Any comment?
> @@ -1,4 +1,4 @@
> -# Copyright (C) 2018 Intel Corporation <www.intel.com>
> +# Copyright (C) 2018-2019 Intel Corporation <www.intel.com>
> #
> # SPDX-License-Identifier: GPL-2.0
>
> @@ -46,15 +46,48 @@ Firmware storage device described in device tree
> source
> ubivol = "ubi0";
> };
>
> - Then, firmware_loader property would be set with the path of
> fs_loader
> - node under /chosen node such as:
> + Then, firmware-loader property can be added with any device
> node, which
> + driver would use the firmware loader for loading.
> +
> + The value of the firmware-loader property should be set with
> phandle
> + of the fs-loader node.
> + For example:
> + firmware-loader = <&fs_loader0>;
> +
> + If there are majority of devices using the same fs-loader
> node, then
> + firmware-loader property can be added under /chosen node
> instead of
> + adding to each of device node.
> +
> + For example:
> /{
> chosen {
> - firmware_loader = &fs_loader0;
> + firmware-loader = <&fs_loader0>;
> };
> };
>
> - However, this driver is also designed to support U-boot
> environment
> + In each respective driver of devices using firmware loader,
> the firmware
> + loaded instance should be created by DT phandle.
> +
> + For example of getting DT phandle from /chosen and creating
> instance:
> + chosen_node = ofnode_path("/chosen");
> + if (!ofnode_valid(chosen_node)) {
> + debug("/chosen node was not found.\n");
> + return -ENOENT;
> + }
> +
> + phandle_p = ofnode_get_property(chosen_node, "firmware-
> loader", &size);
> + if (!phandle_p) {
> + debug("firmware-loader property was not found.\n");
> + return -ENOENT;
> + }
> +
> + phandle = fdt32_to_cpu(*phandle_p);
> + ret =
> uclass_get_device_by_phandle_id(UCLASS_FS_FIRMWARE_LOADER,
> + phandle, &dev);
> + if (ret)
> + return ret;
> +
> + Firmware loader driver is also designed to support U-boot
> environment
> variables, so all these data from FDT can be overwritten
> through the U-boot environment variable during run time.
> For examples:
> @@ -104,9 +137,12 @@ return:
> Description:
> The firmware is loaded directly into the buffer pointed to
> by buf
>
> -Example of creating firmware loader instance and calling
> -request_firmware_into_buf API:
> - if (uclass_get_device(UCLASS_FS_FIRMWARE_LOADER, 0, &dev)) {
> - request_firmware_into_buf(dev, filename,
> buffer_location,
> - buffer_size,
> offset_ofreading);
> - }
> +Example of calling request_firmware_into_buf API after creating
> firmware loader
> +instance:
> + ret =
> uclass_get_device_by_phandle_id(UCLASS_FS_FIRMWARE_LOADER,
> + phandle, &dev);
> + if (ret)
> + return ret;
> +
> + request_firmware_into_buf(dev, filename, buffer_location,
> buffer_size,
> + offset_ofreading);
> diff --git a/drivers/misc/fs_loader.c b/drivers/misc/fs_loader.c
> index a2e3763..f42eeff 100644
> --- a/drivers/misc/fs_loader.c
> +++ b/drivers/misc/fs_loader.c
> @@ -1,6 +1,6 @@
> // SPDX-License-Identifier: GPL-2.0
> /*
> - * Copyright (C) 2018 Intel Corporation <www.intel.com>
> + * Copyright (C) 2018-2019 Intel Corporation <www.intel.com>
> *
> */
> #include <common.h>
> @@ -219,32 +219,26 @@ int request_firmware_into_buf(struct udevice
> *dev,
>
> static int fs_loader_ofdata_to_platdata(struct udevice *dev)
> {
> - const char *fs_loader_path;
> u32 phandlepart[2];
>
> - fs_loader_path = ofnode_get_chosen_prop("firmware-loader");
> + ofnode fs_loader_node = dev_ofnode(dev);
>
> - if (fs_loader_path) {
> - ofnode fs_loader_node;
> + if (ofnode_valid(fs_loader_node)) {
> + struct device_platdata *plat;
>
> - fs_loader_node = ofnode_path(fs_loader_path);
> - if (ofnode_valid(fs_loader_node)) {
> - struct device_platdata *plat;
> - plat = dev->platdata;
> -
> - if (!ofnode_read_u32_array(fs_loader_node,
> - "phandlepart",
> - phandlepart, 2)) {
> - plat->phandlepart.phandle =
> phandlepart[0];
> - plat->phandlepart.partition =
> phandlepart[1];
> - }
> + plat = dev->platdata;
> + if (!ofnode_read_u32_array(fs_loader_node,
> + "phandlepart",
> + phandlepart, 2)) {
> + plat->phandlepart.phandle = phandlepart[0];
> + plat->phandlepart.partition =
> phandlepart[1];
> + }
>
> - plat->mtdpart = (char *)ofnode_read_string(
> - fs_loader_node, "mtdpart");
> + plat->mtdpart = (char *)ofnode_read_string(
> + fs_loader_node, "mtdpart");
>
> - plat->ubivol = (char *)ofnode_read_string(
> - fs_loader_node, "ubivol");
> - }
> + plat->ubivol = (char *)ofnode_read_string(
> + fs_loader_node, "ubivol");
> }
>
> return 0;
Thanks,
TF
More information about the U-Boot
mailing list