mirror of
https://github.com/torvalds/linux.git
synced 2026-06-09 07:03:37 +02:00
drivers: rk_nand: support global partition table
The driver will check cmdline mtd partition table first, if there is no mtd partition table, then the driver will add nand block device and set gd flag GENHD_FL_EXT_DEVT. Change-Id: I262c935a2fac89c2a203dac9b8e90133317860f8 Signed-off-by: Zhaoyifeng <zyf@rock-chips.com>
This commit is contained in:
parent
afc63fcd87
commit
169c390240
|
|
@ -468,7 +468,10 @@ static int nand_prase_cmdline_part(struct nand_part *pdisk_part)
|
||||||
unsigned int cap_size = rk_ftl_get_capacity();
|
unsigned int cap_size = rk_ftl_get_capacity();
|
||||||
char *cmdline;
|
char *cmdline;
|
||||||
|
|
||||||
cmdline = strstr(saved_command_line, "mtdparts=") + 9;
|
cmdline = strstr(saved_command_line, "mtdparts=");
|
||||||
|
if (!cmdline)
|
||||||
|
return 0;
|
||||||
|
cmdline += 9;
|
||||||
if (!memcmp(cmdline, "rk29xxnand:", strlen("rk29xxnand:"))) {
|
if (!memcmp(cmdline, "rk29xxnand:", strlen("rk29xxnand:"))) {
|
||||||
pbuf = cmdline + strlen("rk29xxnand:");
|
pbuf = cmdline + strlen("rk29xxnand:");
|
||||||
rknand_get_part(pbuf, pdisk_part, &part_num);
|
rknand_get_part(pbuf, pdisk_part, &part_num);
|
||||||
|
|
@ -578,6 +581,7 @@ static int nand_add_dev(struct nand_blk_ops *nandr, struct nand_part *part)
|
||||||
|
|
||||||
gd->major = nandr->major;
|
gd->major = nandr->major;
|
||||||
gd->first_minor = (dev->devnum) << nandr->minorbits;
|
gd->first_minor = (dev->devnum) << nandr->minorbits;
|
||||||
|
|
||||||
gd->fops = &nand_blktrans_ops;
|
gd->fops = &nand_blktrans_ops;
|
||||||
|
|
||||||
if (part->name[0])
|
if (part->name[0])
|
||||||
|
|
@ -599,6 +603,15 @@ static int nand_add_dev(struct nand_blk_ops *nandr, struct nand_part *part)
|
||||||
dev->blkcore_priv = gd;
|
dev->blkcore_priv = gd;
|
||||||
gd->queue = nandr->rq;
|
gd->queue = nandr->rq;
|
||||||
gd->queue->bypass_depth = 1;
|
gd->queue->bypass_depth = 1;
|
||||||
|
if (part->size == rk_ftl_get_capacity()) {
|
||||||
|
gd->flags = GENHD_FL_EXT_DEVT;
|
||||||
|
gd->minors = 255;
|
||||||
|
snprintf(gd->disk_name,
|
||||||
|
sizeof(gd->disk_name),
|
||||||
|
"%s%d",
|
||||||
|
nandr->name,
|
||||||
|
dev->devnum);
|
||||||
|
}
|
||||||
|
|
||||||
if (part->type == PART_NO_ACCESS)
|
if (part->type == PART_NO_ACCESS)
|
||||||
dev->disable_access = 1;
|
dev->disable_access = 1;
|
||||||
|
|
@ -646,7 +659,8 @@ static int nand_blk_register(struct nand_blk_ops *nandr)
|
||||||
{
|
{
|
||||||
struct task_struct *tsk;
|
struct task_struct *tsk;
|
||||||
int i, ret;
|
int i, ret;
|
||||||
int offset;
|
u32 offset;
|
||||||
|
u32 part_size;
|
||||||
|
|
||||||
rk_nand_schedule_enable_config(1);
|
rk_nand_schedule_enable_config(1);
|
||||||
nandr->quit = 0;
|
nandr->quit = 0;
|
||||||
|
|
@ -681,15 +695,20 @@ static int nand_blk_register(struct nand_blk_ops *nandr)
|
||||||
tsk = kthread_run(nand_blktrans_thread, (void *)nandr, "rknand");
|
tsk = kthread_run(nand_blktrans_thread, (void *)nandr, "rknand");
|
||||||
|
|
||||||
g_max_part_num = nand_prase_cmdline_part(disk_array);
|
g_max_part_num = nand_prase_cmdline_part(disk_array);
|
||||||
offset = 0;
|
if (g_max_part_num) {
|
||||||
nandr->last_dev_index = 0;
|
offset = 0;
|
||||||
for (i = 0; i < g_max_part_num; i++) {
|
nandr->last_dev_index = 0;
|
||||||
pr_info("%10s: 0x%09llx -- 0x%09llx (%llu MB)\n",
|
for (i = 0; i < g_max_part_num; i++) {
|
||||||
disk_array[i].name,
|
part_size = (disk_array[i].offset + disk_array[i].size);
|
||||||
(u64)disk_array[i].offset * 512,
|
pr_info("%10s: 0x%09llx -- 0x%09llx (%llu MB)\n",
|
||||||
(u64)(disk_array[i].offset + disk_array[i].size) * 512,
|
disk_array[i].name,
|
||||||
(u64)disk_array[i].size / 2048);
|
(u64)disk_array[i].offset * 512,
|
||||||
nand_add_dev(nandr, &disk_array[i]);
|
(u64)part_size * 512,
|
||||||
|
(u64)disk_array[i].size / 2048);
|
||||||
|
nand_add_dev(nandr, &disk_array[i]);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
nand_blk_add_whole_disk();
|
||||||
}
|
}
|
||||||
|
|
||||||
rknand_create_procfs();
|
rknand_create_procfs();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user