aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/powermac
diff options
context:
space:
mode:
authorAkinobu Mita <akinobu.mita@gmail.com>2012-01-26 23:24:48 -0500
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2012-03-07 01:09:05 -0500
commit2d4b971287cbce16585acda4b76308faa8da0950 (patch)
treee81c5af906bd73c1b60ee5a2a5e35b3c96c308bb /arch/powerpc/platforms/powermac
parentad5b7f1350c263eef0c99c20f8659d0ed363cb32 (diff)
powerpc/pmac: Use string library in nvram code
- Use memchr_inv to check if the data contains all 0xFF bytes. It is faster than looping for each byte. - Use memcmp to compare memory areas Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: linuxppc-dev@lists.ozlabs.org Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/platforms/powermac')
-rw-r--r--arch/powerpc/platforms/powermac/nvram.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/arch/powerpc/platforms/powermac/nvram.c b/arch/powerpc/platforms/powermac/nvram.c
index 54d227127c9f..da18b26dcc6f 100644
--- a/arch/powerpc/platforms/powermac/nvram.c
+++ b/arch/powerpc/platforms/powermac/nvram.c
@@ -279,7 +279,7 @@ static u32 core99_check(u8* datas)
279 279
280static int sm_erase_bank(int bank) 280static int sm_erase_bank(int bank)
281{ 281{
282 int stat, i; 282 int stat;
283 unsigned long timeout; 283 unsigned long timeout;
284 284
285 u8 __iomem *base = (u8 __iomem *)nvram_data + core99_bank*NVRAM_SIZE; 285 u8 __iomem *base = (u8 __iomem *)nvram_data + core99_bank*NVRAM_SIZE;
@@ -301,11 +301,10 @@ static int sm_erase_bank(int bank)
301 out_8(base, SM_FLASH_CMD_CLEAR_STATUS); 301 out_8(base, SM_FLASH_CMD_CLEAR_STATUS);
302 out_8(base, SM_FLASH_CMD_RESET); 302 out_8(base, SM_FLASH_CMD_RESET);
303 303
304 for (i=0; i<NVRAM_SIZE; i++) 304 if (memchr_inv(base, 0xff, NVRAM_SIZE)) {
305 if (base[i] != 0xff) { 305 printk(KERN_ERR "nvram: Sharp/Micron flash erase failed !\n");
306 printk(KERN_ERR "nvram: Sharp/Micron flash erase failed !\n"); 306 return -ENXIO;
307 return -ENXIO; 307 }
308 }
309 return 0; 308 return 0;
310} 309}
311 310
@@ -336,17 +335,16 @@ static int sm_write_bank(int bank, u8* datas)
336 } 335 }
337 out_8(base, SM_FLASH_CMD_CLEAR_STATUS); 336 out_8(base, SM_FLASH_CMD_CLEAR_STATUS);
338 out_8(base, SM_FLASH_CMD_RESET); 337 out_8(base, SM_FLASH_CMD_RESET);
339 for (i=0; i<NVRAM_SIZE; i++) 338 if (memcmp(base, datas, NVRAM_SIZE)) {
340 if (base[i] != datas[i]) { 339 printk(KERN_ERR "nvram: Sharp/Micron flash write failed !\n");
341 printk(KERN_ERR "nvram: Sharp/Micron flash write failed !\n"); 340 return -ENXIO;
342 return -ENXIO; 341 }
343 }
344 return 0; 342 return 0;
345} 343}
346 344
347static int amd_erase_bank(int bank) 345static int amd_erase_bank(int bank)
348{ 346{
349 int i, stat = 0; 347 int stat = 0;
350 unsigned long timeout; 348 unsigned long timeout;
351 349
352 u8 __iomem *base = (u8 __iomem *)nvram_data + core99_bank*NVRAM_SIZE; 350 u8 __iomem *base = (u8 __iomem *)nvram_data + core99_bank*NVRAM_SIZE;
@@ -382,12 +380,11 @@ static int amd_erase_bank(int bank)
382 /* Reset */ 380 /* Reset */
383 out_8(base, 0xf0); 381 out_8(base, 0xf0);
384 udelay(1); 382 udelay(1);
385 383
386 for (i=0; i<NVRAM_SIZE; i++) 384 if (memchr_inv(base, 0xff, NVRAM_SIZE)) {
387 if (base[i] != 0xff) { 385 printk(KERN_ERR "nvram: AMD flash erase failed !\n");
388 printk(KERN_ERR "nvram: AMD flash erase failed !\n"); 386 return -ENXIO;
389 return -ENXIO; 387 }
390 }
391 return 0; 388 return 0;
392} 389}
393 390
@@ -429,11 +426,10 @@ static int amd_write_bank(int bank, u8* datas)
429 out_8(base, 0xf0); 426 out_8(base, 0xf0);
430 udelay(1); 427 udelay(1);
431 428
432 for (i=0; i<NVRAM_SIZE; i++) 429 if (memcmp(base, datas, NVRAM_SIZE)) {
433 if (base[i] != datas[i]) { 430 printk(KERN_ERR "nvram: AMD flash write failed !\n");
434 printk(KERN_ERR "nvram: AMD flash write failed !\n"); 431 return -ENXIO;
435 return -ENXIO; 432 }
436 }
437 return 0; 433 return 0;
438} 434}
439 435