diff options
author | Akinobu Mita <akinobu.mita@gmail.com> | 2012-01-26 23:24:48 -0500 |
---|---|---|
committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2012-03-07 01:09:05 -0500 |
commit | 2d4b971287cbce16585acda4b76308faa8da0950 (patch) | |
tree | e81c5af906bd73c1b60ee5a2a5e35b3c96c308bb /arch/powerpc/platforms | |
parent | ad5b7f1350c263eef0c99c20f8659d0ed363cb32 (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')
-rw-r--r-- | arch/powerpc/platforms/powermac/nvram.c | 42 |
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 | ||
280 | static int sm_erase_bank(int bank) | 280 | static 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 | ||
347 | static int amd_erase_bank(int bank) | 345 | static 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 | ||