[U-Boot] [PATCH 06/19] nand: pxa3xx: Increase READ_ID buffer and make the size static

Stefan Roese sr at denx.de
Wed Sep 19 12:30:38 UTC 2018


On 29.08.2018 10:56, kostap at marvell.com wrote:
> From: Ofer Heifetz <oferh at marvell.com>
> 
> The read ID count should be made as large as the maximum READ_ID size,
> so there's no need to have dynamic size. This commit sets the hardware
> maximum read ID count, which should be more than enough on all cases.
> Also, we get rid of the read_id_bytes, and use a macro instead.
> 
> This commit is taken from Linux:
> 'commit b226eca2088'
> ("nand: pxa3xx: Increase READ_ID buffer and make the size static")
> 
> Signed-off-by: Chris Packham <judge.packham at gmail.com>
> Signed-off-by: Ofer Heifetz <oferh at marvell.com>
> Reviewed-by: Igal Liberman <igall at marvell.com>
> Cc: Stefan Roese <sr at denx.de>
> Cc: Simon Glass <sjg at chromium.org>
> ---
>   drivers/mtd/nand/pxa3xx_nand.c | 29 ++++++++++-------------------
>   1 file changed, 10 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c
> index 98bb4c6..575fdd2 100644
> --- a/drivers/mtd/nand/pxa3xx_nand.c
> +++ b/drivers/mtd/nand/pxa3xx_nand.c
> @@ -112,6 +112,13 @@ DECLARE_GLOBAL_DATA_PTR;
>   #define EXT_CMD_TYPE_LAST_RW	1 /* Last naked read/write */
>   #define EXT_CMD_TYPE_MONO	0 /* Monolithic read/write */
>   
> +/*
> + * This should be large enough to read 'ONFI' and 'JEDEC'.
> + * Let's use 7 bytes, which is the maximum ID count supported
> + * by the controller (see NDCR_RD_ID_CNT_MASK).
> + */
> +#define READ_ID_BYTES		7
> +
>   /* macros for registers read/write */
>   #define nand_writel(info, off, val)	\
>   	writel((val), (info)->mmio_base + (off))
> @@ -158,8 +165,6 @@ struct pxa3xx_nand_host {
>   	/* calculated from pxa3xx_nand_flash data */
>   	unsigned int		col_addr_cycles;
>   	unsigned int		row_addr_cycles;
> -	size_t			read_id_bytes;
> -
>   };
>   
>   struct pxa3xx_nand_info {
> @@ -860,7 +865,7 @@ static int prepare_set_command(struct pxa3xx_nand_info *info, int command,
>   		break;
>   
>   	case NAND_CMD_READID:
> -		info->buf_count = host->read_id_bytes;
> +		info->buf_count = READ_ID_BYTES;
>   		info->ndcb0 |= NDCB0_CMD_TYPE(3)
>   				| NDCB0_ADDR_CYC(1)
>   				| command;
> @@ -1240,23 +1245,10 @@ static int pxa3xx_nand_config_flash(struct pxa3xx_nand_info *info)
>   
>   static int pxa3xx_nand_detect_config(struct pxa3xx_nand_info *info)
>   {
> -	/*
> -	 * We set 0 by hard coding here, for we don't support keep_config
> -	 * when there is more than one chip attached to the controller
> -	 */
> -	struct pxa3xx_nand_host *host = info->host[0];
>   	uint32_t ndcr = nand_readl(info, NDCR);
>   
> -	if (ndcr & NDCR_PAGE_SZ) {
> -		/* Controller's FIFO size */
> -		info->chunk_size = 2048;
> -		host->read_id_bytes = 4;
> -	} else {
> -		info->chunk_size = 512;
> -		host->read_id_bytes = 2;
> -	}
> -
>   	/* Set an initial chunk size */
> +	info->chunk_size = ndcr & NDCR_PAGE_SZ ? 2048 : 512;
>   	info->reg_ndcr = ndcr & ~NDCR_INT_MASK;
>   	info->ndtr0cs0 = nand_readl(info, NDTR0CS0);
>   	info->ndtr1cs0 = nand_readl(info, NDTR1CS0);
> @@ -1286,7 +1278,7 @@ static int pxa3xx_nand_sensing(struct pxa3xx_nand_host *host)
>   	/* configure default flash values */
>   	info->reg_ndcr = 0x0; /* enable all interrupts */
>   	info->reg_ndcr |= (pdata->enable_arbiter) ? NDCR_ND_ARB_EN : 0;
> -	info->reg_ndcr |= NDCR_RD_ID_CNT(host->read_id_bytes);
> +	info->reg_ndcr |= NDCR_RD_ID_CNT(READ_ID_BYTES);
>   	info->reg_ndcr |= NDCR_SPARE_EN; /* enable spare by default */
>   
>   	/* use the common timing to make a try */
> @@ -1503,7 +1495,6 @@ static int alloc_nand_resource(struct pxa3xx_nand_info *info)
>   		info->host[cs] = host;
>   		host->cs = cs;
>   		host->info_data = info;
> -		host->read_id_bytes = 4;
>   		mtd->owner = THIS_MODULE;
>   
>   		nand_set_controller_data(chip, host);
> 

Applied to u-boot-marvell/master

Thanks,
Stefan


More information about the U-Boot mailing list