rockchip: param: reverve 4MB for emmc

Need to reserver first 4MB for EMMC while use the addr directly for NAND.

Change-Id: I5c6309e41a9c287388cb6c0ff7ba5b1ef9ff29bf
Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
This commit is contained in:
Kever Yang 2018-01-19 15:59:25 +08:00
parent 534066e47b
commit 282f89a3b6
1 changed files with 12 additions and 6 deletions

View File

@ -28,7 +28,8 @@ struct rkparm_part {
static LIST_HEAD(parts_head); static LIST_HEAD(parts_head);
static int rkparm_param_parse(char *param, struct list_head *parts_head) static int rkparm_param_parse(char *param, struct list_head *parts_head,
struct blk_desc *dev_desc)
{ {
struct rkparm_part *part; struct rkparm_part *part;
const char *cmdline = strstr(param, "CMDLINE:"); const char *cmdline = strstr(param, "CMDLINE:");
@ -37,7 +38,7 @@ static int rkparm_param_parse(char *param, struct list_head *parts_head)
const char *blkdev_def = strchr(blkdev_parts, ':') + 1; const char *blkdev_def = strchr(blkdev_parts, ':') + 1;
char *next = (char *)blkdev_def; char *next = (char *)blkdev_def;
char *pend; char *pend;
int len; int len, offset = 0;
unsigned long size, start; unsigned long size, start;
if (!cmdline) { if (!cmdline) {
@ -68,7 +69,9 @@ static int rkparm_param_parse(char *param, struct list_head *parts_head)
printf("out of memory\n"); printf("out of memory\n");
break; break;
} }
part->start = start; if (dev_desc->if_type != IF_TYPE_RKNAND)
offset = RK_PARAM_OFFSET;
part->start = start + offset;
part->size = size; part->size = size;
strncpy(part->name, next, len); strncpy(part->name, next, len);
part->name[len] = '\0'; part->name[len] = '\0';
@ -84,6 +87,7 @@ static int rkparm_init_param(struct blk_desc *dev_desc,
struct list_head *parts_head) struct list_head *parts_head)
{ {
struct rkparm_param *param; struct rkparm_param *param;
int offset = 0;
int ret; int ret;
param = memalign(ARCH_DMA_MINALIGN, MAX_PARAM_SIZE); param = memalign(ARCH_DMA_MINALIGN, MAX_PARAM_SIZE);
@ -92,14 +96,16 @@ static int rkparm_init_param(struct blk_desc *dev_desc,
return -ENOMEM; return -ENOMEM;
} }
ret = blk_dread(dev_desc, RK_PARAM_OFFSET, MAX_PARAM_SIZE >> 9, if (dev_desc->if_type != IF_TYPE_RKNAND)
(ulong *)param); offset = RK_PARAM_OFFSET;
ret = blk_dread(dev_desc, offset, MAX_PARAM_SIZE >> 9, (ulong *)param);
if (ret != (MAX_PARAM_SIZE >> 9)) { if (ret != (MAX_PARAM_SIZE >> 9)) {
printf("%s param read fail\n", __func__); printf("%s param read fail\n", __func__);
return -EINVAL; return -EINVAL;
} }
return rkparm_param_parse(param->params, parts_head); return rkparm_param_parse(param->params, parts_head, dev_desc);
} }