All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: Marek Vasut <marex@denx.de>
Cc: u-boot@lists.denx.de, Jaehoon Chung <jh80.chung@samsung.com>,
	 Peng Fan <peng.fan@nxp.com>
Subject: Re: [PATCH] cmd: mmc: Expand bkops handling
Date: Thu, 22 Dec 2022 10:47:21 -0700	[thread overview]
Message-ID: <CAPnjgZ0CYmtLjZfoi7fC0zST7m3yrrHdzzS0yCzNZ5-y+7i-sA@mail.gmail.com> (raw)
In-Reply-To: <20221222051041.1276885-1-marex@denx.de>

Hi Marek,

On Wed, 21 Dec 2022 at 22:11, Marek Vasut <marex@denx.de> wrote:
>
> Add more capable "bkops" command which allows enabling and disabling both
> manual and automatic bkops. The existing 'mmc bkops-enable' subcommand is
> poorly named to cover all the possibilities, hence the new-ish subcommand.
> Note that both commands are wrappers around the same common code.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> ---
> Cc: Jaehoon Chung <jh80.chung@samsung.com>
> Cc: Peng Fan <peng.fan@nxp.com>
> ---
>  cmd/mmc.c         | 49 +++++++++++++++++++++++++++++++++++++++--------
>  drivers/mmc/mmc.c | 14 +++++++++-----
>  include/mmc.h     |  2 +-
>  3 files changed, 51 insertions(+), 14 deletions(-)

Make a start on docs for this?

>
> diff --git a/cmd/mmc.c b/cmd/mmc.c
> index c79d9407986..94deb9a1686 100644
> --- a/cmd/mmc.c
> +++ b/cmd/mmc.c
> @@ -1020,16 +1020,12 @@ static int do_mmc_setdsr(struct cmd_tbl *cmdtp, int flag,
>  }
>
>  #ifdef CONFIG_CMD_BKOPS_ENABLE
> -static int do_mmc_bkops_enable(struct cmd_tbl *cmdtp, int flag,
> -                              int argc, char *const argv[])
> +static int mmc_bkops_common(char *device, bool autobkops, bool enable)
>  {
> -       int dev;
>         struct mmc *mmc;
> +       int dev;
>
> -       if (argc != 2)
> -               return CMD_RET_USAGE;
> -
> -       dev = dectoul(argv[1], NULL);
> +       dev = dectoul(device, NULL);
>
>         mmc = init_mmc_device(dev, false);
>         if (!mmc)
> @@ -1040,7 +1036,41 @@ static int do_mmc_bkops_enable(struct cmd_tbl *cmdtp, int flag,
>                 return CMD_RET_FAILURE;
>         }
>
> -       return mmc_set_bkops_enable(mmc);
> +       return mmc_set_bkops_enable(mmc, autobkops, enable);
> +}
> +
> +static int do_mmc_bkops(struct cmd_tbl *cmdtp, int flag,
> +                       int argc, char * const argv[])
> +{
> +       bool autobkops, enable;
> +
> +       if (argc != 4)
> +               return CMD_RET_USAGE;
> +
> +       if (!strcmp(argv[2], "manual"))
> +               autobkops = false;
> +       else if (!strcmp(argv[2], "auto"))
> +               autobkops = true;
> +       else
> +               return CMD_RET_FAILURE;
> +
> +       if (!strcmp(argv[3], "disable"))
> +               enable = false;
> +       else if (!strcmp(argv[3], "enable"))
> +               enable = true;
> +       else
> +               return CMD_RET_FAILURE;

You could just check the first letter, perhaps, to save code space?

> +
> +       return mmc_bkops_common(argv[1], autobkops, enable);
> +}
> +
> +static int do_mmc_bkops_enable(struct cmd_tbl *cmdtp, int flag,
> +                              int argc, char * const argv[])
> +{
> +       if (argc != 2)
> +               return CMD_RET_USAGE;
> +
> +       return mmc_bkops_common(argv[1], false, true);
>  }
>  #endif
>
> @@ -1102,6 +1132,7 @@ static struct cmd_tbl cmd_mmc[] = {
>         U_BOOT_CMD_MKENT(setdsr, 2, 0, do_mmc_setdsr, "", ""),
>  #ifdef CONFIG_CMD_BKOPS_ENABLE
>         U_BOOT_CMD_MKENT(bkops-enable, 2, 0, do_mmc_bkops_enable, "", ""),
> +       U_BOOT_CMD_MKENT(bkops, 4, 0, do_mmc_bkops, "", ""),
>  #endif
>  };
>
> @@ -1188,6 +1219,8 @@ U_BOOT_CMD(
>  #ifdef CONFIG_CMD_BKOPS_ENABLE
>         "mmc bkops-enable <dev> - enable background operations handshake on device\n"
>         "   WARNING: This is a write-once setting.\n"
> +       "mmc bkops <dev> [auto|manual] [enable|disable]\n"
> +       " - configure background operations handshake on device\n"
>  #endif
>         );
>
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index 210703ea46b..afbc497b12c 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -3127,9 +3127,10 @@ int mmc_init_device(int num)
>  #endif
>
>  #ifdef CONFIG_CMD_BKOPS_ENABLE

We shouldn't really need this #ifdef, since if it is not called it
won't be included in the binary.

> -int mmc_set_bkops_enable(struct mmc *mmc)
> +int mmc_set_bkops_enable(struct mmc *mmc, bool autobkops, bool enable)
>  {
>         int err;
> +       u32 bit = autobkops ? BIT(1) : BIT(0);
>         ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
>
>         err = mmc_send_ext_csd(mmc, ext_csd);
> @@ -3143,18 +3144,21 @@ int mmc_set_bkops_enable(struct mmc *mmc)
>                 return -EMEDIUMTYPE;
>         }
>
> -       if (ext_csd[EXT_CSD_BKOPS_EN] & 0x1) {
> +       if (enable && (ext_csd[EXT_CSD_BKOPS_EN] & bit)) {
>                 puts("Background operations already enabled\n");
>                 return 0;
>         }
>
> -       err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN, 1);
> +       err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_BKOPS_EN,
> +                        enable ? bit : 0);
>         if (err) {
> -               puts("Failed to enable manual background operations\n");
> +               printf("Failed to %sable manual background operations\n",
> +                      enable ? "en" : "dis");
>                 return err;
>         }
>
> -       puts("Enabled manual background operations\n");
> +       printf("%sabled %s background operations\n",
> +              enable ? "En" : "Dis", autobkops ? "auto" : "manual");
>
>         return 0;
>  }
> diff --git a/include/mmc.h b/include/mmc.h
> index 571fa625d02..e116e78f343 100644
> --- a/include/mmc.h
> +++ b/include/mmc.h
> @@ -893,7 +893,7 @@ int mmc_rpmb_route_frames(struct mmc *mmc, void *req, unsigned long reqlen,
>                           void *rsp, unsigned long rsplen);
>
>  #ifdef CONFIG_CMD_BKOPS_ENABLE

Same here

> -int mmc_set_bkops_enable(struct mmc *mmc);
> +int mmc_set_bkops_enable(struct mmc *mmc, bool autobkops, bool enable);

Please add comments for these two

>  #endif
>
>  /**
> --
> 2.35.1
>

Regards,
Simon

  reply	other threads:[~2022-12-22 17:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20221222051100epcas1p3abf869f8bccb2fb68e5c8b20178e1f59@epcas1p3.samsung.com>
2022-12-22  5:10 ` [PATCH] cmd: mmc: Expand bkops handling Marek Vasut
2022-12-22 17:47   ` Simon Glass [this message]
2023-01-05 14:20     ` Marek Vasut
2022-12-26 23:55   ` Jaehoon Chung
2023-01-05 14:14     ` Marek Vasut

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=CAPnjgZ0CYmtLjZfoi7fC0zST7m3yrrHdzzS0yCzNZ5-y+7i-sA@mail.gmail.com \
    --to=sjg@chromium.org \
    --cc=jh80.chung@samsung.com \
    --cc=marex@denx.de \
    --cc=peng.fan@nxp.com \
    --cc=u-boot@lists.denx.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.