Skip to content

Commit 6411d57

Browse files
committed
android: persistent_ram: Allow specifying ecc parameters in platform data
Change-Id: If5aaa968f6ce85ac8e18f07cca286f20f0aa6e58 Signed-off-by: Arve Hjønnevåg <[email protected]>
1 parent 6ce7d7a commit 6411d57

File tree

2 files changed

+17
-9
lines changed

2 files changed

+17
-9
lines changed

drivers/staging/android/persistent_ram.c

+12-9
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ static void persistent_ram_ecc_old(struct persistent_ram_zone *prz)
190190
}
191191

192192
static int persistent_ram_init_ecc(struct persistent_ram_zone *prz,
193-
size_t buffer_size)
193+
size_t buffer_size, struct persistent_ram *ram)
194194
{
195195
int numerr;
196196
struct persistent_ram_buffer *buffer = prz->buffer;
@@ -199,10 +199,10 @@ static int persistent_ram_init_ecc(struct persistent_ram_zone *prz,
199199
if (!prz->ecc)
200200
return 0;
201201

202-
prz->ecc_block_size = 128;
203-
prz->ecc_size = 16;
204-
prz->ecc_symsize = 8;
205-
prz->ecc_poly = 0x11d;
202+
prz->ecc_block_size = ram->ecc_block_size ?: 128;
203+
prz->ecc_size = ram->ecc_size ?: 16;
204+
prz->ecc_symsize = ram->ecc_symsize ?: 8;
205+
prz->ecc_poly = ram->ecc_poly ?: 0x11d;
206206

207207
ecc_blocks = DIV_ROUND_UP(prz->buffer_size - prz->ecc_size,
208208
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,
375375
}
376376

377377
static int __devinit persistent_ram_buffer_init(const char *name,
378-
struct persistent_ram_zone *prz)
378+
struct persistent_ram_zone *prz, struct persistent_ram **ramp)
379379
{
380380
int i;
381381
struct persistent_ram *ram;
@@ -386,9 +386,11 @@ static int __devinit persistent_ram_buffer_init(const char *name,
386386
start = ram->start;
387387
for (i = 0; i < ram->num_descs; i++) {
388388
desc = &ram->descs[i];
389-
if (!strcmp(desc->name, name))
389+
if (!strcmp(desc->name, name)) {
390+
*ramp = ram;
390391
return persistent_ram_buffer_map(start,
391392
desc->size, prz);
393+
}
392394
start += desc->size;
393395
}
394396
}
@@ -399,6 +401,7 @@ static int __devinit persistent_ram_buffer_init(const char *name,
399401
static __devinit
400402
struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
401403
{
404+
struct persistent_ram *ram;
402405
struct persistent_ram_zone *prz;
403406
int ret = -ENOMEM;
404407

@@ -410,14 +413,14 @@ struct persistent_ram_zone *__persistent_ram_init(struct device *dev, bool ecc)
410413

411414
INIT_LIST_HEAD(&prz->node);
412415

413-
ret = persistent_ram_buffer_init(dev_name(dev), prz);
416+
ret = persistent_ram_buffer_init(dev_name(dev), prz, &ram);
414417
if (ret) {
415418
pr_err("persistent_ram: failed to initialize buffer\n");
416419
goto err;
417420
}
418421

419422
prz->ecc = ecc;
420-
ret = persistent_ram_init_ecc(prz, prz->buffer_size);
423+
ret = persistent_ram_init_ecc(prz, prz->buffer_size, ram);
421424
if (ret)
422425
goto err;
423426

include/linux/persistent_ram.h

+5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ struct persistent_ram {
3131
phys_addr_t start;
3232
phys_addr_t size;
3333

34+
int ecc_block_size;
35+
int ecc_size;
36+
int ecc_symsize;
37+
int ecc_poly;
38+
3439
int num_descs;
3540
struct persistent_ram_descriptor *descs;
3641

0 commit comments

Comments
 (0)