All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jaehoon Chung <jh80.chung@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH V4 7/9] MMC: APIs to support resize of EMMC boot partition
Date: Fri, 04 Jan 2013 19:27:05 +0900	[thread overview]
Message-ID: <50E6AE79.2080006@samsung.com> (raw)
In-Reply-To: <1357292050-12137-8-git-send-email-amarendra.xt@samsung.com>

Hi Amar,

I wonder that include the moviNAND specific code in mmc.c?
mmc_boot_partiton_size_change() looks like every vendor can use this function.

Best Regards,
Jaehoon Chung

On 01/04/2013 06:34 PM, Amar wrote:
> This patch adds APIs to open, close and to resize boot partiton for EMMC.
> 
> Changes from V1:
> 	New patch.
> 
> Changes from V2:
> 	1)Updation of commit message and resubmition of proper patch set.
> 
> Changes from V3:
>         No change.
> 
> Signed-off-by: Amar <amarendra.xt@samsung.com>
> ---
>  drivers/mmc/mmc.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/mmc.h     |  16 ++++++++
>  2 files changed, 134 insertions(+)
> 
> diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
> index 72e8ce6..8175b49 100644
> --- a/drivers/mmc/mmc.c
> +++ b/drivers/mmc/mmc.c
> @@ -1327,3 +1327,121 @@ int mmc_initialize(bd_t *bis)
>  
>  	return 0;
>  }
> +
> +int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
> +				unsigned long rpmbsize)
> +{
> +	int err;
> +	struct mmc_cmd cmd;
> +
> +	/* Only use this command for raw EMMC moviNAND */
> +	/* Enter backdoor mode */
> +	cmd.cmdidx = MMC_CMD_RES_MAN;
> +	cmd.resp_type = MMC_RSP_R1b;
> +	cmd.cmdarg = MMC_CMD62_ARG1;
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
> +		return err;
> +	}
> +
> +	/* Boot partition changing mode */
> +	cmd.cmdidx = MMC_CMD_RES_MAN;
> +	cmd.resp_type = MMC_RSP_R1b;
> +	cmd.cmdarg = MMC_CMD62_ARG2;
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
> +		return err;
> +	}
> +	/* boot partition size is multiple of 128KB */
> +	bootsize = ((bootsize*1024)/128);
> +
> +	/* Arg: boot partition size */
> +	cmd.cmdidx = MMC_CMD_RES_MAN;
> +	cmd.resp_type = MMC_RSP_R1b;
> +	cmd.cmdarg = bootsize;
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
> +		return err;
> +	}
> +	/* RPMB partition size is multiple of 128KB */
> +	rpmbsize = ((rpmbsize*1024)/128);
> +	/* Arg: RPMB partition size */
> +	cmd.cmdidx = MMC_CMD_RES_MAN;
> +	cmd.resp_type = MMC_RSP_R1b;
> +	cmd.cmdarg = rpmbsize;
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
> +		return err;
> +	}
> +	return 0;
> +}
> +
> +int mmc_boot_open(struct mmc *mmc)
> +{
> +	int err;
> +	struct mmc_cmd cmd;
> +
> +	/* Boot ack enable, boot partition enable , boot partition access */
> +	cmd.cmdidx = MMC_CMD_SWITCH;
> +	cmd.resp_type = MMC_RSP_R1b;
> +
> +	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24 |
> +			EXT_CSD_PART_CONF << 16 |
> +			(EXT_CSD_BOOT_ACK_ENABLE |
> +			EXT_CSD_BOOT_PARTITION_ENABLE |
> +			EXT_CSD_PARTITION_ACCESS_ENABLE) << 8);
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_open: Error1 = %d\n", err);
> +		return err;
> +	}
> +
> +	/* 4bit transfer mode at booting time. */
> +	cmd.cmdidx = MMC_CMD_SWITCH;
> +	cmd.resp_type = MMC_RSP_R1b;
> +
> +	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24|
> +			EXT_CSD_BOOT_BUS_WIDTH << 16|
> +			((1<<0) << 8));
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_open: Error2 = %d\n", err);
> +		return err;
> +	}
> +
> +	return 0;
> +}
> +
> +int mmc_boot_close(struct mmc *mmc)
> +{
> +	int err;
> +	struct mmc_cmd cmd;
> +
> +	/* Boot ack enable, boot partition enable , boot partition access */
> +	cmd.cmdidx = MMC_CMD_SWITCH;
> +	cmd.resp_type = MMC_RSP_R1b;
> +
> +	cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24|
> +			EXT_CSD_PART_CONF << 16|
> +			(EXT_CSD_BOOT_ACK_ENABLE |
> +			EXT_CSD_BOOT_PARTITION_ENABLE |
> +			EXT_CSD_PARTITION_ACCESS_DISABLE) << 8);
> +
> +	err = mmc_send_cmd(mmc, &cmd, NULL);
> +	if (err) {
> +		debug("mmc_boot_close: Error = %d\n", err);
> +		return err;
> +	}
> +
> +	return 0;
> +}
> diff --git a/include/mmc.h b/include/mmc.h
> index a13e2bd..999f0a3 100644
> --- a/include/mmc.h
> +++ b/include/mmc.h
> @@ -86,6 +86,11 @@
>  #define MMC_CMD_APP_CMD			55
>  #define MMC_CMD_SPI_READ_OCR		58
>  #define MMC_CMD_SPI_CRC_ON_OFF		59
> +#define MMC_CMD_RES_MAN			62
> +
> +#define MMC_CMD62_ARG1			0xefac62ec
> +#define MMC_CMD62_ARG2			0xcbaea7
> +
>  
>  #define SD_CMD_SEND_RELATIVE_ADDR	3
>  #define SD_CMD_SWITCH_FUNC		6
> @@ -153,6 +158,7 @@
>   */
>  #define EXT_CSD_PARTITIONING_SUPPORT	160	/* RO */
>  #define EXT_CSD_ERASE_GROUP_DEF		175	/* R/W */
> +#define EXT_CSD_BOOT_BUS_WIDTH		177
>  #define EXT_CSD_PART_CONF		179	/* R/W */
>  #define EXT_CSD_BUS_WIDTH		183	/* R/W */
>  #define EXT_CSD_HS_TIMING		185	/* R/W */
> @@ -177,6 +183,12 @@
>  #define EXT_CSD_BUS_WIDTH_4	1	/* Card is in 4 bit mode */
>  #define EXT_CSD_BUS_WIDTH_8	2	/* Card is in 8 bit mode */
>  
> +#define EXT_CSD_BOOT_ACK_ENABLE			(1<<6)
> +#define EXT_CSD_BOOT_PARTITION_ENABLE		(1<<3)
> +#define EXT_CSD_PARTITION_ACCESS_ENABLE		(1<<0)
> +#define EXT_CSD_PARTITION_ACCESS_DISABLE	(0<<0)
> +
> +
>  #define R1_ILLEGAL_COMMAND		(1 << 22)
>  #define R1_APP_CMD			(1 << 5)
>  
> @@ -275,6 +287,10 @@ int board_mmc_getcd(struct mmc *mmc);
>  int mmc_switch_part(int dev_num, unsigned int part_num);
>  int mmc_getcd(struct mmc *mmc);
>  void spl_mmc_load(void) __noreturn;
> +int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
> +					unsigned long rpmbsize);
> +int mmc_boot_open(struct mmc *mmc);
> +int mmc_boot_close(struct mmc *mmc);
>  
>  #ifdef CONFIG_GENERIC_MMC
>  #define mmc_host_is_spi(mmc)	((mmc)->host_caps & MMC_MODE_SPI)
> 

  reply	other threads:[~2013-01-04 10:27 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-04  9:34 [U-Boot] [PATCH V4 0/9] EXYNOS5: Enable DWMMC, add FDT support for DWMMC and Amar
2013-01-04  9:34 ` [U-Boot] [PATCH V4 1/9] FDT: Add compatible string for DWMMC Amar
2013-01-04  9:34 ` [U-Boot] [PATCH V4 2/9] EXYNOS5: FDT: Add DWMMC device node data Amar
2013-01-10 15:21   ` Simon Glass
2013-01-15  9:11     ` Amarendra Reddy
2013-01-04  9:34 ` [U-Boot] [PATCH V4 3/9] DWMMC: Initialise dwmci and resolve EMMC read write issues Amar
2013-01-10 15:26   ` Simon Glass
2013-01-11  4:01     ` Jaehoon Chung
2013-01-11  5:43       ` Simon Glass
2013-01-15  8:26       ` Amarendra Reddy
2013-01-04  9:34 ` [U-Boot] [PATCH V4 4/9] EXYNOS5: DWMMC: Added FDT support for DWMMC Amar
2013-01-10 15:33   ` Simon Glass
2013-01-11  4:12     ` Jaehoon Chung
2013-01-11  5:44       ` Simon Glass
2013-01-11 13:06         ` Amarendra Reddy
2013-01-22  5:23           ` Joonyoung Shim
2013-01-22  6:41             ` Amarendra Reddy
2013-01-04  9:34 ` [U-Boot] [PATCH V4 5/9] EXYNOS5: DWMMC: API to set mmc clock divisor Amar
2013-01-10 15:35   ` Simon Glass
2013-01-11  3:52     ` Jaehoon Chung
2013-01-11 13:23       ` Amarendra Reddy
2013-01-11 14:28         ` Simon Glass
2013-01-04  9:34 ` [U-Boot] [PATCH V4 6/9] SMDK5250: Initialise and Enable DWMMC, support FDT and non-FDT Amar
2013-01-10 16:57   ` Simon Glass
2013-01-11 17:58     ` Amarendra Reddy
2013-01-12 16:41       ` Simon Glass
2013-01-15  9:16         ` Amarendra Reddy
2013-01-04  9:34 ` [U-Boot] [PATCH V4 7/9] MMC: APIs to support resize of EMMC boot partition Amar
2013-01-04 10:27   ` Jaehoon Chung [this message]
2013-01-07  4:19     ` Amarendra Reddy
2013-01-07  4:34       ` Jaehoon Chung
2013-01-07  5:54         ` Amarendra Reddy
2013-01-07  9:23           ` Jaehoon Chung
2013-01-04  9:34 ` [U-Boot] [PATCH V4 8/9] SMDK5250: Enable EMMC booting Amar
2013-01-10 16:39   ` Simon Glass
2013-01-15  9:14     ` Amarendra Reddy
2013-01-04  9:34 ` [U-Boot] [PATCH V4 9/9] COMMON: MMC: Command to support EMMC booting and to Amar
2013-01-10 16:46   ` Simon Glass
2013-01-11  3:54     ` Jaehoon Chung
2013-01-11  5:41       ` Simon Glass
2013-01-11 13:50         ` Amarendra Reddy
2013-01-11 14:31           ` Simon Glass

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=50E6AE79.2080006@samsung.com \
    --to=jh80.chung@samsung.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.