android: persistent_ram: Allow specifying ecc parameters in platform data

Change-Id: If5aaa968f6ce85ac8e18f07cca286f20f0aa6e58
Signed-off-by: Arve Hjønnevåg <arve@android.com>
This commit is contained in:
Arve Hjønnevåg
2012-05-22 16:33:23 -07:00
parent 6ce7d7aa4b
commit 6411d5781d
2 changed files with 17 additions and 9 deletions

View File

@@ -190,7 +190,7 @@ static void persistent_ram_ecc_old(struct persistent_ram_zone *prz)
}
static int persistent_ram_init_ecc(struct persistent_ram_zone *prz,
size_t buffer_size)
size_t buffer_size, struct persistent_ram *ram)
{
int numerr;
struct persistent_ram_buffer *buffer = prz->buffer;
@@ -199,10 +199,10 @@ static int persistent_ram_init_ecc(struct persistent_ram_zone *prz,
if (!prz->ecc)
return 0;
prz->ecc_block_size = 128;
prz->ecc_size = 16;
prz->ecc_symsize = 8;
prz->ecc_poly = 0x11d;
prz->ecc_block_size = ram->ecc_block_size ?: 128;
prz->ecc_size = ram->ecc_size ?: 16;
prz->ecc_symsize = ram->ecc_symsize ?: 8;
prz->ecc_poly = ram->ecc_poly ?: 0x11d;
ecc_blocks = DIV_ROUND_UP(prz->buffer_size - prz->ecc_size,
prz->ecc_block_size + prz->ecc_size);
@@ -375,7 +375,7 @@ static int persistent_ram_buffer_map(phys_addr_t start, phys_addr_t size,
}
static int __devinit persistent_ram_buffer_init(const char *name,
struct persistent_ram_zone *prz)
struct persistent_ram_zone *prz, struct persistent_ram **ramp)
{
int i;
struct persistent_ram *ram;
@@ -386,9 +386,11 @@ static int __devinit persistent_ram_buffer_init(const char *name,
start = ram->start;
for (i = 0; i < ram->num_descs; i++) {
desc = &ram->descs[i];
if (!strcmp(desc->name, name))
if (!strcmp(desc->name, name)) {
*ramp = ram;
return persistent_ram_buffer_map(start,
desc->size, prz);
}
start += desc->size;
}
}
@@ -399,6 +401,7 @@ static int __devinit persistent_ram_buffer_init(const char *name,
static __devinit
struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
{
struct persistent_ram *ram;
struct persistent_ram_zone *prz;
int ret = -ENOMEM;
@@ -410,14 +413,14 @@ struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
INIT_LIST_HEAD(&prz->node);
ret = persistent_ram_buffer_init(dev_name(dev), prz);
ret = persistent_ram_buffer_init(dev_name(dev), prz, &ram);
if (ret) {
pr_err("persistent_ram: failed to initialize buffer\n");
goto err;
}
prz->ecc = ecc;
ret = persistent_ram_init_ecc(prz, prz->buffer_size);
ret = persistent_ram_init_ecc(prz, prz->buffer_size, ram);
if (ret)
goto err;

View File

@@ -31,6 +31,11 @@ struct persistent_ram {
phys_addr_t start;
phys_addr_t size;
int ecc_block_size;
int ecc_size;
int ecc_symsize;
int ecc_poly;
int num_descs;
struct persistent_ram_descriptor *descs;