android: persistent_ram: Allow specifying ecc parameters in platform data
Change-Id: If5aaa968f6ce85ac8e18f07cca286f20f0aa6e58
Signed-off-by: Arve Hjønnevåg <arve@android.com>
diff --git a/drivers/staging/android/persistent_ram.c b/drivers/staging/android/persistent_ram.c
index b493778..c25bb34 100644
--- a/drivers/staging/android/persistent_ram.c
+++ b/drivers/staging/android/persistent_ram.c
@@ -190,7 +190,7 @@
}
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 @@
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 __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 @@
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 __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 @@
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;
diff --git a/include/linux/persistent_ram.h b/include/linux/persistent_ram.h
index f41e208..2242217 100644
--- a/include/linux/persistent_ram.h
+++ b/include/linux/persistent_ram.h
@@ -31,6 +31,11 @@
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;