From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
To: jassisinghbrar@gmail.com
Cc: u-boot@lists.denx.de, sughosh.ganu@linaro.org,
etienne.carriere@linaro.org, trini@konsulko.com,
sjg@chromium.org, xypron.glpk@gmx.de,
patrick.delaunay@foss.st.com, patrice.chotard@foss.st.com,
Jassi Brar <jaswinder.singh@linaro.org>
Subject: Re: [PATCHv2 1/4] fwu: gpt: use cached meta-data partition numbers
Date: Thu, 22 Dec 2022 14:45:06 +0200 [thread overview]
Message-ID: <Y6RRUiJjpw5f+Lko@hera> (raw)
In-Reply-To: <20221203031651.579771-1-jassisinghbrar@gmail.com>
On Fri, Dec 02, 2022 at 09:16:51PM -0600, jassisinghbrar@gmail.com wrote:
> From: Jassi Brar <jaswinder.singh@linaro.org>
>
> Use cached values and avoid parsing and scanning through partitions
> everytime for meta-data partitions because they can't change after bootup.
>
> Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
> ---
> drivers/fwu-mdata/gpt_blk.c | 43 +++++++++++++++++++++----------------
> 1 file changed, 24 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/fwu-mdata/gpt_blk.c b/drivers/fwu-mdata/gpt_blk.c
> index d35ce49c5c..28f5d23e1e 100644
> --- a/drivers/fwu-mdata/gpt_blk.c
> +++ b/drivers/fwu-mdata/gpt_blk.c
> @@ -24,8 +24,9 @@ enum {
> MDATA_WRITE,
> };
>
> -static int gpt_get_mdata_partitions(struct blk_desc *desc,
> - uint mdata_parts[2])
> +static uint g_mdata_part[2]; /* = {0, 0} to check against uninit parts */
> +
> +static int gpt_get_mdata_partitions(struct blk_desc *desc)
> {
> int i, ret;
> u32 nparts;
> @@ -33,18 +34,19 @@ static int gpt_get_mdata_partitions(struct blk_desc *desc,
> struct disk_partition info;
> const efi_guid_t fwu_mdata_guid = FWU_MDATA_GUID;
>
> + /* if primary and secondary partitions already found */
> + if (g_mdata_part[0] && g_mdata_part[1])
> + return 0;
> +
> nparts = 0;
> - for (i = 1; i < MAX_SEARCH_PARTITIONS; i++) {
> + for (i = 1; i < MAX_SEARCH_PARTITIONS && nparts < 2; i++) {
> if (part_get_info(desc, i, &info))
> continue;
> uuid_str_to_bin(info.type_guid, part_type_guid.b,
> UUID_STR_FORMAT_GUID);
>
> - if (!guidcmp(&fwu_mdata_guid, &part_type_guid)) {
> - if (nparts < 2)
> - mdata_parts[nparts] = i;
> - ++nparts;
> - }
> + if (!guidcmp(&fwu_mdata_guid, &part_type_guid))
> + g_mdata_part[nparts++] = i;
The reason the 'if (nparts < 2)' was outside the main loop was to show
errors in case the user defined more than two partitions. Can we keep it
like that or am I the only being paranoid here?
> }
>
> if (nparts != 2) {
> @@ -127,26 +129,25 @@ static int fwu_gpt_update_mdata(struct udevice *dev, struct fwu_mdata *mdata)
> {
> int ret;
> struct blk_desc *desc;
> - uint mdata_parts[2];
> struct fwu_mdata_gpt_blk_priv *priv = dev_get_priv(dev);
>
> desc = dev_get_uclass_plat(priv->blk_dev);
>
> - ret = gpt_get_mdata_partitions(desc, mdata_parts);
> + ret = gpt_get_mdata_partitions(desc);
> if (ret < 0) {
> log_debug("Error getting the FWU metadata partitions\n");
> return -ENOENT;
> }
>
> /* First write the primary partition */
> - ret = gpt_read_write_mdata(desc, mdata, MDATA_WRITE, mdata_parts[0]);
> + ret = gpt_read_write_mdata(desc, mdata, MDATA_WRITE, g_mdata_part[0]);
> if (ret < 0) {
> log_debug("Updating primary FWU metadata partition failed\n");
> return ret;
> }
>
> /* And now the replica */
> - ret = gpt_read_write_mdata(desc, mdata, MDATA_WRITE, mdata_parts[1]);
> + ret = gpt_read_write_mdata(desc, mdata, MDATA_WRITE, g_mdata_part[1]);
> if (ret < 0) {
> log_debug("Updating secondary FWU metadata partition failed\n");
> return ret;
> @@ -158,16 +159,14 @@ static int fwu_gpt_update_mdata(struct udevice *dev, struct fwu_mdata *mdata)
> static int gpt_get_mdata(struct blk_desc *desc, struct fwu_mdata *mdata)
> {
> int ret;
> - uint mdata_parts[2];
> -
> - ret = gpt_get_mdata_partitions(desc, mdata_parts);
>
> + ret = gpt_get_mdata_partitions(desc);
> if (ret < 0) {
> log_debug("Error getting the FWU metadata partitions\n");
> return -ENOENT;
> }
>
> - ret = gpt_read_write_mdata(desc, mdata, MDATA_READ, mdata_parts[0]);
> + ret = gpt_read_write_mdata(desc, mdata, MDATA_READ, g_mdata_part[0]);
> if (ret < 0) {
> log_debug("Failed to read the FWU metadata from the device\n");
> return -EIO;
> @@ -182,7 +181,7 @@ static int gpt_get_mdata(struct blk_desc *desc, struct fwu_mdata *mdata)
> * Try to read the replica.
> */
> memset(mdata, '\0', sizeof(struct fwu_mdata));
> - ret = gpt_read_write_mdata(desc, mdata, MDATA_READ, mdata_parts[1]);
> + ret = gpt_read_write_mdata(desc, mdata, MDATA_READ, g_mdata_part[1]);
> if (ret < 0) {
> log_debug("Failed to read the FWU metadata from the device\n");
> return -EIO;
> @@ -206,9 +205,15 @@ static int fwu_gpt_get_mdata(struct udevice *dev, struct fwu_mdata *mdata)
> static int fwu_gpt_get_mdata_partitions(struct udevice *dev, uint *mdata_parts)
> {
> struct fwu_mdata_gpt_blk_priv *priv = dev_get_priv(dev);
> + int err;
> +
> + err = gpt_get_mdata_partitions(dev_get_uclass_plat(priv->blk_dev));
> + if (!err) {
> + mdata_parts[0] = g_mdata_part[0];
> + mdata_parts[1] = g_mdata_part[1];
> + }
>
> - return gpt_get_mdata_partitions(dev_get_uclass_plat(priv->blk_dev),
> - mdata_parts);
> + return err;
> }
>
> static int fwu_gpt_read_mdata_partition(struct udevice *dev,
> --
> 2.34.1
>
Thanks
/Ilias
next prev parent reply other threads:[~2022-12-22 12:45 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-03 3:15 [PATCHv2 0/4] FWU: Handle meta-data in common code jassisinghbrar
2022-12-03 3:16 ` [PATCHv2 1/4] fwu: gpt: use cached meta-data partition numbers jassisinghbrar
2022-12-22 12:45 ` Ilias Apalodimas [this message]
2023-01-02 17:15 ` Jassi Brar
2023-01-04 11:45 ` Etienne Carriere
2022-12-03 3:17 ` [PATCHv2 2/4] fwu: move meta-data management in core jassisinghbrar
2022-12-13 14:59 ` Etienne Carriere
2023-01-02 16:05 ` Jassi Brar
2022-12-03 3:17 ` [PATCHv2 3/4] fwu: gpt: implement read_mdata and write_mdata callbacks jassisinghbrar
2022-12-22 12:59 ` Ilias Apalodimas
2023-01-02 9:48 ` Etienne Carriere
2023-01-02 16:04 ` Jassi Brar
2022-12-03 3:17 ` [PATCHv2 4/4] fwu: meta-data: switch to management by common code jassisinghbrar
2023-01-02 9:48 ` Etienne Carriere
2022-12-03 3:28 ` [PATCHv2 5/4] fwu: rename fwu_get_verified_mdata to fwu_get_mdata jassisinghbrar
2022-12-22 13:00 ` Ilias Apalodimas
2023-01-02 9:48 ` Etienne Carriere
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y6RRUiJjpw5f+Lko@hera \
--to=ilias.apalodimas@linaro.org \
--cc=etienne.carriere@linaro.org \
--cc=jassisinghbrar@gmail.com \
--cc=jaswinder.singh@linaro.org \
--cc=patrice.chotard@foss.st.com \
--cc=patrick.delaunay@foss.st.com \
--cc=sjg@chromium.org \
--cc=sughosh.ganu@linaro.org \
--cc=trini@konsulko.com \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.