[U-Boot] ppc, flash init on mpc8247, Unknown FLASH on Bank 0

Hello:
Now I port u-boot into mpc8247, I need everyone's help, thanks!
my board configuration is following: chip select chip size address CS0 AM29LV040B 512K 0xfff00000 CS1 S29GL256P 64M 0xff800000 CS2 SDRAM 256M 0x00000000
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined): CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz Board: ADS 8247 I2C: ready DRAM: 128 MB Top of RAM usable for U-Boot at: 08000000 Reserving 160k for U-Boot at: 07fd7000 Reserving 192k for malloc() at: 07fa7000 Reserving 76 Bytes for Board Info at: 07fa6fb4 Reserving 72 Bytes for Global Data at: 07fa6f6c Stack Pointer at: 07fa6f48 New Stack Pointer is: 07fa6f48 Now running in RAM - U-Boot at: 07fd7000 FLASH: Manuf. ID @ 0xfff00000: 0x00000004 ## Unknown FLASH on Bank 0 - Size = 0x00000000 = 0 MB flash_protect ON: from 0xFFF00000 to 0xFFF22FFF flash_protect ON: from 0xFFF70000 to 0xFFF7FFFF *** failed *** ### ERROR ### Please RESET the board ###
I found the manufacture ID of flash is error , it should be 0x01, but it is 0x04, it is the first byte that u-boot.bin file was burned into AM29LV040. In my flash.c file, the code that I get manufacture ID as following: ... flash_cmd_autoselect (base); mfrId= U8_READ (base); flash_cmd_reset (base); ... The functions that above code called is as following: #define U8_WRITE(reg, val) (*((volatile uchar *)(reg)) = ((uchar)((val)&0xFF))) #define U8_READ(reg) (*((volatile uchar *)(reg))) static void flash_cmd_reset (ulong base) { U8_WRITE (base + 0x0, 0xF0); } static void flash_cmd_unlock (ulong base) { U8_WRITE (base + 0x555, 0xAA); U8_WRITE (base + 0x2AA, 0x55); } static void flash_cmd_autoselect (ulong base) { flash_cmd_unlock (base + 0x555); U8_WRITE (base + 0x555, 0x90); }
I want to get everyone's help, thank you very much!

On Wednesday, October 13, 2010, wind_embedded wind_embedded@sina.com wrote:
Hello:
Now I port u-boot into mpc8247, I need everyone's help, thanks!
my board configuration is following: chip select chip size address CS0 AM29LV040B 512K 0xfff00000 CS1 S29GL256P 64M 0xff800000 CS2 SDRAM 256M 0x00000000
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined):
What version of U-Boot are you using? It looks like you are not using the CFI driver which has supported the AM29LV040B for some time now. Have a look at the eNET board from current mainline - it uses the same flash without issue
CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz Board: ADS 8247 I2C: ready DRAM: 128 MB Top of RAM usable for U-Boot at: 08000000 Reserving 160k for U-Boot at: 07fd7000 Reserving 192k for malloc() at: 07fa7000 Reserving 76 Bytes for Board Info at: 07fa6fb4 Reserving 72 Bytes for Global Data at: 07fa6f6c Stack Pointer at: 07fa6f48 New Stack Pointer is: 07fa6f48 Now running in RAM - U-Boot at: 07fd7000 FLASH: Manuf. ID @ 0xfff00000: 0x00000004 ## Unknown FLASH on Bank 0 - Size = 0x00000000 = 0 MB flash_protect ON: from 0xFFF00000 to 0xFFF22FFF flash_protect ON: from 0xFFF70000 to 0xFFF7FFFF *** failed *** ### ERROR ### Please RESET the board ###
I found the manufacture ID of flash is error , it should be 0x01, but it is 0x04, it is the first byte that u-boot.bin file was burned into AM29LV040. In my flash.c file, the code that I get manufacture ID as following: ... flash_cmd_autoselect (base); mfrId= U8_READ (base); flash_cmd_reset (base); ... The functions that above code called is as following: #define U8_WRITE(reg, val) (*((volatile uchar *)(reg)) = ((uchar)((val)&0xFF))) #define U8_READ(reg) (*((volatile uchar *)(reg))) static void flash_cmd_reset (ulong base) { U8_WRITE (base + 0x0, 0xF0); } static void flash_cmd_unlock (ulong base) { U8_WRITE (base + 0x555, 0xAA); U8_WRITE (base + 0x2AA, 0x55); } static void flash_cmd_autoselect (ulong base) { flash_cmd_unlock (base + 0x555); U8_WRITE (base + 0x555, 0x90); }
I want to get everyone's help, thank you very much!
Use the latest version of U-Boot and the CFI driver rather than this custom driver you are currently using
Regards,
Graeme

On Wednesday, October 13, 2010, wind_embedded wind_embedded@sina.com wrote:
Hello:
Now I port u-boot into mpc8247, I need everyone's help, thanks!
my board configuration is following: chip select chip size address CS0 AM29LV040B 512K 0xfff00000 CS1 S29GL256P 64M 0xff800000 CS2 SDRAM 256M 0x00000000
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined):
What version of U-Boot are you using? It looks like you are not using the CFI driver which has supported the AM29LV040B for some time now. Have a look at the eNET board from current mainline - it uses the same flash without issue
CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz Board: ADS 8247 I2C: ready DRAM: 128 MB Top of RAM usable for U-Boot at: 08000000 Reserving 160k for U-Boot at: 07fd7000 Reserving 192k for malloc() at: 07fa7000 Reserving 76 Bytes for Board Info at: 07fa6fb4 Reserving 72 Bytes for Global Data at: 07fa6f6c Stack Pointer at: 07fa6f48 New Stack Pointer is: 07fa6f48 Now running in RAM - U-Boot at: 07fd7000 FLASH: Manuf. ID @ 0xfff00000: 0x00000004 ## Unknown FLASH on Bank 0 - Size = 0x00000000 = 0 MB flash_protect ON: from 0xFFF00000 to 0xFFF22FFF flash_protect ON: from 0xFFF70000 to 0xFFF7FFFF *** failed *** ### ERROR ### Please RESET the board ###
I found the manufacture ID of flash is error , it should be 0x01, but it is 0x04, it is the first byte that u-boot.bin file was burned into AM29LV040. In my flash.c file, the code that I get manufacture ID as following: ... flash_cmd_autoselect (base); mfrId= U8_READ (base); flash_cmd_reset (base); ... The functions that above code called is as following: #define U8_WRITE(reg, val) (*((volatile uchar *)(reg)) = ((uchar)((val)&0xFF))) #define U8_READ(reg) (*((volatile uchar *)(reg))) static void flash_cmd_reset (ulong base) { U8_WRITE (base + 0x0, 0xF0); } static void flash_cmd_unlock (ulong base) { U8_WRITE (base + 0x555, 0xAA); U8_WRITE (base + 0x2AA, 0x55); } static void flash_cmd_autoselect (ulong base) { flash_cmd_unlock (base + 0x555); U8_WRITE (base + 0x555, 0x90); }
I want to get everyone's help, thank you very much!
Use the latest version of U-Boot and the CFI driver rather than this custom driver you are currently using
Regards,
Graeme
Oh, I use u-boot-1.1.4 or u-boot-1.2.0, I have compared them with the latest version, there is little difference. I port AM29lV0404B driver on VxWorks into u-boot, AM29lV0404B driver on VxWorks works fine!
Best regard

On Wednesday, October 13, 2010, wind_embedded wind_embedded@sina.com wrote:
On Wednesday, October 13, 2010, wind_embedded wind_embedded@sina.com wrote:
Hello:
Oh, I use u-boot-1.1.4 or u-boot-1.2.0, I have compared them with the latest version, there is little difference. I port AM29lV0404B driver on VxWorks into u-boot, AM29lV0404B driver on VxWorks works fine!
Best regard
A few points:
Is the VxWorks driver GPL compatible? If not, you cannot legally distribute your version of U-Boot (private in-house use only)
There is massive differences between 1.2.0 and current mainline
Why bother porting a proprietary driver and risk legal complications when mainline supports your flash using the CFI driver?
Download the latest U-Boot and have a look at the eNET board for getting your flash working
Regards
Graeme

Dear "wind_embedded",
In message 000c01cb6aad$14458d20$a744fea9@E43A you wrote:
Oh, I use u-boot-1.1.4 or u-boot-1.2.0, I have compared them with the latest version, there is little difference. I port AM29lV0404B driver on VxWorks into u-boot, AM29lV0404B driver on VxWorks works fine!
well, when you completely ignore all good advice, including to ignore known-to-be working code, and instead insist on using versions that are > 3 years old and hopelessly obsoleted...
...then you must face the fact that you cannot get much help from the community.
Update to recent code (v2010.09 at least), and use the generic CFI driver.
If you then should still have problems please feel free to ask again.
Best regards,
Wolfgang Denk

well, when you completely ignore all good advice, including to ignore known-to-be working code, and instead insist on using versions that are > 3 years old and hopelessly obsoleted...
..then you must face the fact that you cannot get much help from the community.
Update to recent code (v2010.09 at least), and use the generic CFI driver.
If you then should still have problems please feel free to ask again.
Best regards,
Wolfgang Denk

On Thursday, October 14, 2010, wind_embedded wind_embedded@sina.com wrote:
well, when you completely ignore all good advice, including to ignore known-to-be working code, and instead insist on using versions that are > 3 years old and hopelessly obsoleted...
..then you must face the fact that you cannot get much help from the community.
Update to recent code (v2010.09 at least), and use the generic CFI driver.
If you then should still have problems please feel free to ask again.
Best regards,
Wolfgang Denk
-- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de A list is only as strong as its weakest link. -- Don Knuth
Dear Wolfgang Denk: I have enable u-boot working on version u-boot1-1.1.4 and latest
Do you mean you are using 1.1.4 or do you mean you are using the latest version from the git repository?
version. I found the problem is the time interval between writing and reading flash. The question is very strange, the CPU configuration of
Are you using the CFI driver or a custom driver which uses time delays?
VxWorks is same as u-boot, flash driver on VxWorks is good, but bad on u-boot. Whatever thank you very much;)
I repeat:
Using the CFI driver and the latest version of U-Boot, this flash works without issue.
Look at the eNET board for guidance
Regards
Graeme

Hello wind_embedded,
wind_embedded wrote:
Hello:
Now I port u-boot into mpc8247, I need everyone's help, thanks!
my board configuration is following: chip select chip size address CS0 AM29LV040B 512K 0xfff00000 CS1 S29GL256P 64M 0xff800000 CS2 SDRAM 256M 0x00000000
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined): CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz
Which version of u-boot do you use?
Board: ADS 8247 I2C: ready DRAM: 128 MB Top of RAM usable for U-Boot at: 08000000 Reserving 160k for U-Boot at: 07fd7000 Reserving 192k for malloc() at: 07fa7000 Reserving 76 Bytes for Board Info at: 07fa6fb4 Reserving 72 Bytes for Global Data at: 07fa6f6c Stack Pointer at: 07fa6f48 New Stack Pointer is: 07fa6f48 Now running in RAM - U-Boot at: 07fd7000 FLASH: Manuf. ID @ 0xfff00000: 0x00000004 ## Unknown FLASH on Bank 0 - Size = 0x00000000 = 0 MB flash_protect ON: from 0xFFF00000 to 0xFFF22FFF flash_protect ON: from 0xFFF70000 to 0xFFF7FFFF *** failed *** ### ERROR ### Please RESET the board ###
I found the manufacture ID of flash is error , it should be 0x01, but it is 0x04, it is the first byte that u-boot.bin file was burned into AM29LV040. In my flash.c file, the code that I get manufacture ID as following: ... flash_cmd_autoselect (base); mfrId= U8_READ (base); flash_cmd_reset (base);
Hmm.. what code is this? It looks to me, that you don;t use the CFI drvier! Please try this driver to access your flash.
bye, Heiko

Hello wind_embedded,
wind_embedded wrote:
Hello:
Now I port u-boot into mpc8247, I need everyone's help, thanks!
my board configuration is following: chip select chip size address CS0 AM29LV040B 512K 0xfff00000 CS1 S29GL256P 64M 0xff800000 CS2 SDRAM 256M 0x00000000
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined): CPU: MPC8247 (HiP7 Rev 14, Mask 1.0 1K50M) at 400 MHz
Which version of u-boot do you use?
Board: ADS 8247 I2C: ready DRAM: 128 MB Top of RAM usable for U-Boot at: 08000000 Reserving 160k for U-Boot at: 07fd7000 Reserving 192k for malloc() at: 07fa7000 Reserving 76 Bytes for Board Info at: 07fa6fb4 Reserving 72 Bytes for Global Data at: 07fa6f6c Stack Pointer at: 07fa6f48 New Stack Pointer is: 07fa6f48 Now running in RAM - U-Boot at: 07fd7000 FLASH: Manuf. ID @ 0xfff00000: 0x00000004 ## Unknown FLASH on Bank 0 - Size = 0x00000000 = 0 MB flash_protect ON: from 0xFFF00000 to 0xFFF22FFF flash_protect ON: from 0xFFF70000 to 0xFFF7FFFF *** failed *** ### ERROR ### Please RESET the board ###
I found the manufacture ID of flash is error , it should be 0x01,
but
it is 0x04, it is the first byte that u-boot.bin file was burned into AM29LV040. In my flash.c file, the code that I get manufacture ID as following: ... flash_cmd_autoselect (base); mfrId= U8_READ (base); flash_cmd_reset (base);
Hmm.. what code is this? It looks to me, that you don;t use the CFI drvier! Please try this driver to access your flash.
bye, Heiko

Dear "wind_embedded",
In message 000001cb6a92$34979570$a744fea9@E43A you wrote:
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined):
You must never copy any code without trying to understand it. When adapting code from another board, you need to understand not only your own hardware in detail, but also the hardware you are copying from.
In your case, you should not use the old flash driver in flash.c at all. Remove that file, and use the CFI flash driver instead.
Best regards,
Wolfgang Denk

Dear "wind_embedded",
In message 000001cb6a92$34979570$a744fea9@E43A you wrote:
Before I use VxWorks, it works fine. When I port u-boot, my project based on IDS8247. I changed configuration in IDS8247.h and updated flash.c, after I compiled u-boot, I burned u-boot.bin into AM29LV040B. Console output(DEBUG is defined):
You must never copy any code without trying to understand it. When adapting code from another board, you need to understand not only your own hardware in detail, but also the hardware you are copying from.
In your case, you should not use the old flash driver in flash.c at all. Remove that file, and use the CFI flash driver instead.
Best regards,
Wolfgang Denk
participants (4)
-
Graeme Russ
-
Heiko Schocher
-
wind_embedded
-
Wolfgang Denk