[U-Boot-Users] Can U-boot support CFI and None CFI devices on the same board

Hi, I use U-Boot (1.1.4) and try to work with AM29LV040B (AMD None CFI Flash) in addition to known CFI flash devices (AMD, Intel, MXIC, SST).
Does anyone have a way to integrate the CFI deriver with none CFI devices?
Thanks, Yotam

On Thursday 23 November 2006 14:42, Yotam Admon wrote:
Hi, I use U-Boot (1.1.4) and try to work with AM29LV040B (AMD None CFI Flash) in addition to known CFI flash devices (AMD, Intel, MXIC, SST).
Does anyone have a way to integrate the CFI deriver with none CFI devices?
Hi Yotam,
What I did in our local U-boot version was(*):
1. Add a cfi_ prefix to flash functions in drivers/cfi_flash.c: flash_init --> cfi_flash_init flash_erase --> cfi_flash_erase write_buff--> cfi_write_buff ...
2. Change flash base address table, in drivers/cfi_flash.c also: flash_info_t flash_info --> extern flash_info_t flash_info
3. Create in our board specific directory a flash.c file with all the flash interface functions and the declaration of flash_info: flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; flash_init() flash_erase() write_buff() ... 4. From my flash_init() I call cfi_flash_init() first. This will change the flash_id for all CFI compatible flashes in the flash_info table.
5. For all other flash types I use my own flash driver(s).
6. flash_erase(), for example, then looks like this: if (info->flash_id == FLASH_MAN_CFI) return cfi_flash_erase(info, s_first, s_last); else / * call my flash driver specific flash_erase */
Thanks, Yotam
I hope the helps you, Rui
*) I don't see a way for this to be merged into U-boot any time soon since it implies changes for all boards using the CFI driver.

Hi Rui,
On Monday 27 November 2006 23:44, Rui Sousa wrote:
What I did in our local U-boot version was(*):
- Add a cfi_ prefix to flash functions in drivers/cfi_flash.c:
flash_init --> cfi_flash_init flash_erase --> cfi_flash_erase write_buff--> cfi_write_buff ...
- Change flash base address table, in drivers/cfi_flash.c also:
flash_info_t flash_info --> extern flash_info_t flash_info
- Create in our board specific directory a flash.c file with all the flash
interface functions and the declaration of flash_info: flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; flash_init() flash_erase() write_buff()
Hmmm. When I understood Tolunay correctly (Tolunay, please correct me if I am wrong here), he _does_ want to use most of the CFI drivers functions like erasing and programming for those non CFI compatible FLASH's too. Most of those devices are kind of AMD compatible, so this should be possible with not too many changes.
If we don't use this code, then merging those devices into this driver doesn't make much sense to me anymore.
Best regards, Stefan

On Tuesday 28 November 2006 12:41, Stefan Roese wrote:
Hi Rui,
Hi,
On Monday 27 November 2006 23:44, Rui Sousa wrote:
What I did in our local U-boot version was(*):
...
flash_erase() write_buff()
Hmmm. When I understood Tolunay correctly (Tolunay, please correct me if I am wrong here), he _does_ want to use most of the CFI drivers functions like erasing and programming for those non CFI compatible FLASH's too.
Ah. Ok. I thought the main problem was the fact that when you enable the CFI flash driver you can no longer use your own flash drivers (because the function names conflict).
Most of those devices are kind of AMD compatible, so this should be possible with not too many changes.
If we don't use this code, then merging those devices into this driver doesn't make much sense to me anymore.
Best regards, Stefan
Rui

On 11/28/06, Stefan Roese sr@denx.de wrote:
Hmmm. When I understood Tolunay correctly (Tolunay, please correct me if I am wrong here), he _does_ want to use most of the CFI drivers functions like erasing and programming for those non CFI compatible FLASH's too. Most of those devices are kind of AMD compatible, so this should be possible with not too many changes.
It seems to me that for older non-CFI AMD devices, it shouldn't be too hard to use the cfi driver, intercept execution in flash_detect_cfi() or flash_get_size(), fill in the flash_info_t structure appropriately for the device, and continue on with most of the code being none the wiser about what happened.

Stefan Roese wrote:
Hi Rui,
On Monday 27 November 2006 23:44, Rui Sousa wrote:
What I did in our local U-boot version was(*):
- Add a cfi_ prefix to flash functions in drivers/cfi_flash.c:
flash_init --> cfi_flash_init flash_erase --> cfi_flash_erase write_buff--> cfi_write_buff ...
- Change flash base address table, in drivers/cfi_flash.c also:
flash_info_t flash_info --> extern flash_info_t flash_info
- Create in our board specific directory a flash.c file with all the flash
interface functions and the declaration of flash_info: flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; flash_init() flash_erase() write_buff()
Hmmm. When I understood Tolunay correctly (Tolunay, please correct me if I am wrong here), he _does_ want to use most of the CFI drivers functions like erasing and programming for those non CFI compatible FLASH's too. Most of those devices are kind of AMD compatible, so this should be possible with not too many changes.
Yes, that is the plan. I did not have time to work on it yet but I will send a patch this week.
Best regards, Tolunay
participants (5)
-
Andrew Dyer
-
Rui Sousa
-
Stefan Roese
-
Tolunay Orkun
-
Yotam Admon