diff mbox

[U-Boot,V3,1/2] MMC: unify mmc read and write operation

Message ID 1308798211-21266-2-git-send-email-leiwen@marvell.com
State Accepted
Commit 6be95ccf9ff52d629526d1c20c5343c2a91d9e72
Delegated to: Andy Fleming
Headers show

Commit Message

Lei Wen June 23, 2011, 3:03 a.m. UTC
mmc read and write command has so many in common, unfiy those two to
force consistency across the those two.

Signed-off-by: Lei Wen <leiwen@marvell.com>
---
Changelog:
V2:
unfiy original mmc read and write command together to only place

V3:
put varible statement at the beginning of function.

 common/cmd_mmc.c |   67 ++++++++++++++++++++++++++++-------------------------
 1 files changed, 35 insertions(+), 32 deletions(-)

Comments

Anton Staaf June 23, 2011, 4:10 a.m. UTC | #1
On Wed, Jun 22, 2011 at 8:03 PM, Lei Wen <leiwen@marvell.com> wrote:

> mmc read and write command has so many in common, unfiy those two to
> force consistency across the those two.
>
> Signed-off-by: Lei Wen <leiwen@marvell.com>
> ---
> Changelog:
> V2:
> unfiy original mmc read and write command together to only place
>
> V3:
> put varible statement at the beginning of function.
>
>  common/cmd_mmc.c |   67
> ++++++++++++++++++++++++++++-------------------------
>  1 files changed, 35 insertions(+), 32 deletions(-)
>
> diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
> index 176646d..a645803 100644
> --- a/common/cmd_mmc.c
> +++ b/common/cmd_mmc.c
> @@ -87,6 +87,11 @@ U_BOOT_CMD(
>  );
>  #else /* !CONFIG_GENERIC_MMC */
>
> +enum mmc_state {
> +       MMC_INVALID,
> +       MMC_READ,
> +       MMC_WRITE,
> +};
>  static void print_mmcinfo(struct mmc *mmc)
>  {
>        printf("Device: %s\n", mmc->name);
> @@ -144,6 +149,8 @@ U_BOOT_CMD(
>
>  int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
>  {
> +       enum mmc_state state;
> +
>        if (argc < 2)
>                return cmd_usage(cmdtp);
>
> @@ -239,53 +246,49 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc,
> char * const argv[])
>                                curr_device, mmc->part_num);
>
>                return 0;
> -       } else if (strcmp(argv[1], "read") == 0) {
> -               void *addr = (void *)simple_strtoul(argv[2], NULL, 16);
> -               u32 cnt = simple_strtoul(argv[4], NULL, 16);
> -               u32 n;
> -               u32 blk = simple_strtoul(argv[3], NULL, 16);
> -               struct mmc *mmc = find_mmc_device(curr_device);
> -
> -               if (!mmc) {
> -                       printf("no mmc device at slot %x\n", curr_device);
> -                       return 1;
> -               }
> -
> -               printf("\nMMC read: dev # %d, block # %d, count %d ... ",
> -                               curr_device, blk, cnt);
> -
> -               mmc_init(mmc);
> -
> -               n = mmc->block_dev.block_read(curr_device, blk, cnt, addr);
> +       }
>
> -               /* flush cache after read */
> -               flush_cache((ulong)addr, cnt * 512); /* FIXME */
> +       if (strcmp(argv[1], "read") == 0)
> +               state = MMC_READ;
> +       else if (strcmp(argv[1], "write") == 0)
> +               state = MMC_WRITE;
> +       else
> +               state = MMC_INVALID;
>
> -               printf("%d blocks read: %s\n",
> -                               n, (n==cnt) ? "OK" : "ERROR");
> -               return (n == cnt) ? 0 : 1;
> -       } else if (strcmp(argv[1], "write") == 0) {
> +       if (state != MMC_INVALID) {
> +               struct mmc *mmc = find_mmc_device(curr_device);
>                void *addr = (void *)simple_strtoul(argv[2], NULL, 16);
> +               u32 blk = simple_strtoul(argv[3], NULL, 16);
>                u32 cnt = simple_strtoul(argv[4], NULL, 16);
>                u32 n;
> -               struct mmc *mmc = find_mmc_device(curr_device);
> -
> -               int blk = simple_strtoul(argv[3], NULL, 16);
>
>                if (!mmc) {
>                        printf("no mmc device at slot %x\n", curr_device);
>                        return 1;
>                }
>
> -               printf("\nMMC write: dev # %d, block # %d, count %d ... ",
> -                               curr_device, blk, cnt);
> +               printf("\nMMC %s: dev # %d, block # %d, count %d ... ",
> +                               argv[1], curr_device, blk, cnt);
>
>                mmc_init(mmc);
>
> -               n = mmc->block_dev.block_write(curr_device, blk, cnt,
> addr);
> +               switch (state) {
> +               case MMC_READ:
> +                       n = mmc->block_dev.block_read(curr_device, blk,
> +                                                     cnt, addr);
> +                       /* flush cache after read */
> +                       flush_cache((ulong)addr, cnt * 512); /* FIXME */
> +                       break;
> +               case MMC_WRITE:
> +                       n = mmc->block_dev.block_write(curr_device, blk,
> +                                                     cnt, addr);
> +                       break;
> +               default:
> +                       BUG();
> +               }
>
> -               printf("%d blocks written: %s\n",
> -                               n, (n == cnt) ? "OK" : "ERROR");
> +               printf("%d blocks %s: %s\n",
> +                               n, argv[1], (n == cnt) ? "OK" : "ERROR");
>

A minor nit, this might read more smoothly if it were: printf("%s of %d
blocks: %s\n", argv[1], n, (n == cnt) ? "OK" : "ERROR");  As in "read of 12
blocks: OK" instead of "12 blocks read: OK"

               return (n == cnt) ? 0 : 1;
>        }
>
> --
> 1.7.0.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
>
Mike Frysinger June 23, 2011, 4:31 p.m. UTC | #2
Acked-by: Mike Frysinger <vapier@gentoo.org>
-mike
diff mbox

Patch

diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index 176646d..a645803 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -87,6 +87,11 @@  U_BOOT_CMD(
 );
 #else /* !CONFIG_GENERIC_MMC */
 
+enum mmc_state {
+	MMC_INVALID,
+	MMC_READ,
+	MMC_WRITE,
+};
 static void print_mmcinfo(struct mmc *mmc)
 {
 	printf("Device: %s\n", mmc->name);
@@ -144,6 +149,8 @@  U_BOOT_CMD(
 
 int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
+	enum mmc_state state;
+
 	if (argc < 2)
 		return cmd_usage(cmdtp);
 
@@ -239,53 +246,49 @@  int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 				curr_device, mmc->part_num);
 
 		return 0;
-	} else if (strcmp(argv[1], "read") == 0) {
-		void *addr = (void *)simple_strtoul(argv[2], NULL, 16);
-		u32 cnt = simple_strtoul(argv[4], NULL, 16);
-		u32 n;
-		u32 blk = simple_strtoul(argv[3], NULL, 16);
-		struct mmc *mmc = find_mmc_device(curr_device);
-
-		if (!mmc) {
-			printf("no mmc device at slot %x\n", curr_device);
-			return 1;
-		}
-
-		printf("\nMMC read: dev # %d, block # %d, count %d ... ",
-				curr_device, blk, cnt);
-
-		mmc_init(mmc);
-
-		n = mmc->block_dev.block_read(curr_device, blk, cnt, addr);
+	}
 
-		/* flush cache after read */
-		flush_cache((ulong)addr, cnt * 512); /* FIXME */
+	if (strcmp(argv[1], "read") == 0)
+		state = MMC_READ;
+	else if (strcmp(argv[1], "write") == 0)
+		state = MMC_WRITE;
+	else
+		state = MMC_INVALID;
 
-		printf("%d blocks read: %s\n",
-				n, (n==cnt) ? "OK" : "ERROR");
-		return (n == cnt) ? 0 : 1;
-	} else if (strcmp(argv[1], "write") == 0) {
+	if (state != MMC_INVALID) {
+		struct mmc *mmc = find_mmc_device(curr_device);
 		void *addr = (void *)simple_strtoul(argv[2], NULL, 16);
+		u32 blk = simple_strtoul(argv[3], NULL, 16);
 		u32 cnt = simple_strtoul(argv[4], NULL, 16);
 		u32 n;
-		struct mmc *mmc = find_mmc_device(curr_device);
-
-		int blk = simple_strtoul(argv[3], NULL, 16);
 
 		if (!mmc) {
 			printf("no mmc device at slot %x\n", curr_device);
 			return 1;
 		}
 
-		printf("\nMMC write: dev # %d, block # %d, count %d ... ",
-				curr_device, blk, cnt);
+		printf("\nMMC %s: dev # %d, block # %d, count %d ... ",
+				argv[1], curr_device, blk, cnt);
 
 		mmc_init(mmc);
 
-		n = mmc->block_dev.block_write(curr_device, blk, cnt, addr);
+		switch (state) {
+		case MMC_READ:
+			n = mmc->block_dev.block_read(curr_device, blk,
+						      cnt, addr);
+			/* flush cache after read */
+			flush_cache((ulong)addr, cnt * 512); /* FIXME */
+			break;
+		case MMC_WRITE:
+			n = mmc->block_dev.block_write(curr_device, blk,
+						      cnt, addr);
+			break;
+		default:
+			BUG();
+		}
 
-		printf("%d blocks written: %s\n",
-				n, (n == cnt) ? "OK" : "ERROR");
+		printf("%d blocks %s: %s\n",
+				n, argv[1], (n == cnt) ? "OK" : "ERROR");
 		return (n == cnt) ? 0 : 1;
 	}