Re: [U-Boot-Users] Flash write crash on MPC8548CDS

It is too late today but tomorrow I will try to write something in Flash with cp.b and check if this still happens.
Everything works OK with the old U-Boot that came with CDS though...
Ok, I found the problem. Check my tree (u-boot-mpc85xx.git) now. It's got a patch which removes the mappings for INIT_RAM, thus preventing speculative loads from going out on the bus.
Andy

On Wed, 27 Feb 2008, Andy Fleming wrote:
It is too late today but tomorrow I will try to write something in
Flash
with cp.b and check if this still happens.
Everything works OK with the old U-Boot that came with CDS though...
Ok, I found the problem. Check my tree (u-boot-mpc85xx.git) now. It's got a patch which removes the mappings for INIT_RAM, thus preventing speculative loads from going out on the bus.
OK, thanks. I will try it tomorrow after our meetings are over...
--- ****************************************************************** * KSI@home KOI8 Net < > The impossible we do immediately. * * Las Vegas NV, USA < > Miracles require 24-hour notice. * ******************************************************************

Dear Andy,
I experience the same behavior as ksi described.
I experience this over u-boot-1.3.2-rc3 which should have had this fixed. I assume you referred to commit 21fae8b2b4e4e6e648796e07e20ab13e9cb18923.
Are there any follow ups on this subject?
Liberty
this is a flash 2 flash example. It happens on ram 2 flash as well.
=> cp.b FF800000 FF000000 80000 Copy to Flash... External Interrupt Exception at PC: 1ffc1dc0, SR: 29200, vector=500 irq IACK0@e00600a0=3 NIP: 1FFC1DC0 XER: 00000000 LR: 1FFCEBCC REGS: 1fadbc50 TRAP: 0500 DAR: 00000000 MSR: 00029200 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 00
GPR00: 00029200 1FADBD40 1FADBF8C 0000F103 FF00113A 1FADBD32 000000A0 6F1D9410 GPR08: 00000000 FF000000 00000003 1FFFC4D4 48028024 F7B7BFFF 1FFFB200 20040000 GPR16: 00000000 00000000 00000000 00000000 00000000 1FADBCC8 1FADE338 1FADE240 GPR24: FF07FFFF 00000000 00000001 FF00113A F1030000 1FFEFD70 1FFFB8F4 1FFFC4D4 Call backtrace: 1FFEFD70 1FFCEB50 1FFCF1FC 1FFDD9E8 1FFD8E58 1FFDFABC 1FFE0164 1FFE02CC 1FFD16EC 1FFC9558 1FFC15FC Skipping current instr, Returning to 0x1ffc1dc4 done

On Mar 10, 2008, at 7:35 AM, Eran Liberty wrote:
Dear Andy,
I experience the same behavior as ksi described.
I experience this over u-boot-1.3.2-rc3 which should have had this fixed. I assume you referred to commit 21fae8b2b4e4e6e648796e07e20ab13e9cb18923.
Are there any follow ups on this subject?
We pushed a fix and it should be in the 1.3.2 release.
Look for 'Invalidate INIT_RAM TLB mappings'
- k

Kumar Gala <galak <at> kernel.crashing.org> writes:
On Mar 10, 2008, at 7:35 AM, Eran Liberty wrote:
Dear Andy,
I experience the same behavior as ksi described.
I experience this over u-boot-1.3.2-rc3 which should have had this fixed. I assume you referred to commit 21fae8b2b4e4e6e648796e07e20ab13e9cb18923.
Are there any follow ups on this subject?
We pushed a fix and it should be in the 1.3.2 release.
Look for 'Invalidate INIT_RAM TLB mappings'
- k
Exactly my point. I have followed up on the suggested patch, made sure it is indeed in the latest release u-boot-1.3.2-rc3 (it is), And still I get this behavior.
It is worth mentioning that: 1. It is much easier to reproduce this in flash to flash copy. 2. I am still not 100% sure that my hardware is not acting funny.
Cheers, Liberty

On Mon, Mar 10, 2008 at 7:35 AM, Eran Liberty liberty@extricom.com wrote:
Dear Andy,
I experience the same behavior as ksi described.
Sadly, you are experiencing a slightly different behavior.
=> cp.b FF800000 FF000000 80000 Copy to Flash... External Interrupt Exception at PC: 1ffc1dc0, SR: 29200, vector=500 irq IACK0@e00600a0=3
You are getting source vector 3. This means the LBC is throwing off errors, rather than the ECM. Could you show me the result of running "md e005000"? Then we can see what sort of error is causing the exception.
Andy

Here is my sequence narrated:
U-Boot 1.3.2-rc3 (Mar 6 2008 - 12:00:30)
CPU: 8548, Version: 2.0, (0x80310020) Core: E500, Version: 2.0, (0x80210020) Clock Configuration: CPU: 990 MHz, CCB: 396 MHz, DDR: 198 MHz, LBC: 49 MHz L1: D-cache 32 kB enabled I-cache 32 kB enabled Board: EXSW1600 I2C: ready DRAM: Initializing DDR: 512 MB * * I give less sectors then needed for the flash, * forcefully restricting its size.... * don't think it should matter *\ FLASH: ERROR: too many flash sectors ERROR: too many flash sectors 16 MB L2 cache 512KB: enabled PCI: 64 bit, unknown MHz, async, host, arbiter Scanning PCI bus 00 PCI on bus 00 - 00 In: serial Out: serial Err: serial /* * My print add-on, so i can calc the address in the objdump file */ gd->reloc_off = 0x20040000 /* * My board FPGA burn process */ FPGA loading Image Name: 20080219:1741 Image Type: PowerPC Linux Kernel Image (bzip2 compressed) Data Size: 415310 Bytes = 405.6 kB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK loading to fpga done. Net: eTSEC0 Hit any key to stop autoboot: 0 /* * I don't think you wanted e005000 */ => md e005000 0e005000: deadbeef deadbeef deadbeef deadbeef ................ 0e005010: deadbeef deadbeef deadbeef deadbeef ................ 0e005020: deadbeef deadbeef deadbeef deadbeef ................ 0e005030: deadbeef deadbeef deadbeef deadbeef ................ 0e005040: deadbeef deadbeef deadbeef deadbeef ................ 0e005050: deadbeef deadbeef deadbeef deadbeef ................ 0e005060: deadbeef deadbeef deadbeef deadbeef ................ 0e005070: deadbeef deadbeef deadbeef deadbeef ................ 0e005080: deadbeef deadbeef deadbeef deadbeef ................ 0e005090: deadbeef deadbeef deadbeef deadbeef ................ 0e0050a0: deadbeef deadbeef deadbeef deadbeef ................ 0e0050b0: deadbeef deadbeef deadbeef deadbeef ................ 0e0050c0: deadbeef deadbeef deadbeef deadbeef ................ 0e0050d0: deadbeef deadbeef deadbeef deadbeef ................ 0e0050e0: deadbeef deadbeef deadbeef deadbeef ................ 0e0050f0: deadbeef deadbeef deadbeef deadbeef ................ /* * nor e0050000 */ => md e0050000 e0050000: 80000000 80000000 80000000 80000000 ................ e0050010: 00000001 00000001 00000001 00000001 ................ e0050020: 80000000 80000000 80000000 80000000 ................ e0050030: 00000001 00000001 00000001 00000001 ................ e0050040: 80000000 80000000 80000000 80000000 ................ e0050050: 00000001 00000001 00000001 00000001 ................ e0050060: 80000000 80000000 80000000 80000000 ................ e0050070: 00000001 00000001 00000001 00000001 ................ e0050080: 80000000 80000000 80000000 80000000 ................ e0050090: 00000001 00000001 00000001 00000001 ................ e00500a0: 80000000 80000000 80000000 80000000 ................ e00500b0: 00000001 00000001 00000001 00000001 ................ e00500c0: 80000000 80000000 80000000 80000000 ................ e00500d0: 00000001 00000001 00000001 00000001 ................ e00500e0: 80000000 80000000 80000000 80000000 ................ e00500f0: 00000001 00000001 00000001 00000001 ................ /* * You probably wanted this. */ => md e0005000 e0005000: ff801001 ff806e65 ff001001 ff806e65 ......ne......ne e0005010: f0001861 fc006901 f8001001 fff00ff7 ...a..i......... e0005020: 00000000 00000000 00000000 00000000 ................ e0005030: 00000000 00000000 00000000 00000000 ................ e0005040: 00000000 00000000 00000000 00000000 ................ e0005050: 00000000 00000000 00000000 00000000 ................ e0005060: 00000000 00000000 00000000 00000000 ................ e0005070: 00000000 00000000 00000000 00000000 ................ e0005080: 00000000 00000000 00000000 00000000 ................ e0005090: 00000000 00000000 00000000 00000000 ................ e00050a0: 00000000 20000000 00000000 00000000 .... ........... e00050b0: 00000000 00000000 ffffffff 00000000 ................ e00050c0: 00000000 00000000 00000000 00000000 ................ e00050d0: 00000000 80030008 00000000 00000000 ................ e00050e0: 00000000 00000000 00000000 00000000 ................ e00050f0: 00000000 00000000 00000000 00000000 ................ => fli
Bank # 1: CFI conformant FLASH (16 x 16) Size: 8 MB in 64 Sectors AMD Standard command set, Manufacturer ID: 0x01, Device ID: 0x7E2301 Erase timeout: 16384 ms, write timeout: 2 ms Buffer write timeout: 5 ms, buffer size: 32 bytes
Sector Start Addresses: FF800000 FF820000 FF840000 FF860000 FF880000 FF8A0000 FF8C0000 FF8E0000 FF900000 FF920000 FF940000 FF960000 FF980000 FF9A0000 FF9C0000 FF9E0000 FFA00000 FFA20000 FFA40000 FFA60000 FFA80000 FFAA0000 FFAC0000 FFAE0000 FFB00000 FFB20000 FFB40000 FFB60000 FFB80000 FFBA0000 FFBC0000 FFBE0000 FFC00000 FFC20000 FFC40000 FFC60000 FFC80000 FFCA0000 FFCC0000 FFCE0000 FFD00000 FFD20000 FFD40000 FFD60000 FFD80000 E FFDA0000 E FFDC0000 E FFDE0000 E FFE00000 E FFE20000 E FFE40000 E FFE60000 E FFE80000 E FFEA0000 E FFEC0000 E FFEE0000 E FFF00000 E FFF20000 E FFF40000 E FFF60000 E FFF80000 RO FFFA0000 RO FFFC0000 RO FFFE0000 RO
Bank # 2: CFI conformant FLASH (16 x 16) Size: 8 MB in 64 Sectors AMD Standard command set, Manufacturer ID: 0x01, Device ID: 0x7E2301 Erase timeout: 16384 ms, write timeout: 2 ms Buffer write timeout: 5 ms, buffer size: 32 bytes
Sector Start Addresses: FF000000 E FF020000 E FF040000 E FF060000 E FF080000 E FF0A0000 E FF0C0000 E FF0E0000 E FF100000 E FF120000 E FF140000 E FF160000 E FF180000 E FF1A0000 E FF1C0000 E FF1E0000 E FF200000 E FF220000 E FF240000 E FF260000 E FF280000 E FF2A0000 E FF2C0000 E FF2E0000 E FF300000 E FF320000 E FF340000 E FF360000 E FF380000 E FF3A0000 E FF3C0000 E FF3E0000 E FF400000 E FF420000 E FF440000 E FF460000 E FF480000 E FF4A0000 E FF4C0000 E FF4E0000 E FF500000 E FF520000 E FF540000 E FF560000 E FF580000 E FF5A0000 E FF5C0000 E FF5E0000 E FF600000 E FF620000 E FF640000 E FF660000 E FF680000 E FF6A0000 E FF6C0000 E FF6E0000 E FF700000 E FF720000 E FF740000 E FF760000 E FF780000 E FF7A0000 E FF7C0000 E FF7E0000 E /* * Here is the first attempt */ => cp.b FF800000 FF000000 80000 Copy to Flash... External Interrupt Exception at PC: 1ffc1dc0, SR: 29200, vector=500 irq IACK0@e00600a0=3 NIP: 1FFC1DC0 XER: 00000000 LR: 1FFCEBCC REGS: 1fadbc50 TRAP: 0500 DAR: 00000000 MSR: 00029200 EE: 1 PR: 0 FP: 0 ME: 1 IR/DR: 00
GPR00: 00029200 1FADBD40 1FADBF8C 0000F103 FF00113A 1FADBD32 000000A0 2C4D2B8E GPR08: 00000000 FF000000 00000003 1FFFC4D4 48028024 FFB7FFFF 1FFFB200 20040000 GPR16: 00000000 00000000 00000000 00000000 00000000 EFFFF5EF 1FADE338 1FADE240 GPR24: FF07FFFF 00000000 00000001 FF00113A F1030000 1FFEFD48 1FFFB8F4 1FFFC4D4 Call backtrace: /* * Tracing the callback indicates the exception happened as soon * as enable_interrupts () is called in flash_write_cfiword() */ 1FFEFD48 1FFCEB50 1FFCF1FC 1FFDD9D4 1FFD8E44 1FFDFAA8 1FFE0150 1FFE02B8 1FFD16D8 1FFC9558 1FFC15FC Skipping current instr, Returning to 0x1ffc1dc4 done /* * You can see that the flash was copied ok despite the exception. * rebooting the machine and re-checking the crc confirms that it * was indeed copied to flash (and not ram) */ => crc FF800000 80000 CRC32 for ff800000 ... ff87ffff ==> d5f0d2a3 => crc FF000000 80000 CRC32 for ff000000 ... ff07ffff ==> d5f0d2a3 => erase FF000000 ff07ffff .... done Erased 4 sectors /* * Second attempt succeeds quietly as in ksi case. */ => cp.b FF800000 FF000000 80000 Copy to Flash... done =>
participants (4)
-
Andy Fleming
-
Eran Liberty
-
ksi@koi8.net
-
Kumar Gala