All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wang Jian <lark@linux.net.cn>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] Suggestion on flash init
Date: Sun, 25 Dec 2005 12:33:23 +0800	[thread overview]
Message-ID: <20051225120433.F3F6.LARK@linux.net.cn> (raw)

Hi,

After reading many board/*/flash.c and writing customer board driver for
one of my customer, I think the current flash interface can be improved.

I suggest adding a subdir $(TOPDIR)/include/flash/ and putting flash
chip information here. When you use some kinds of flash chips, just
include relevant header files.

If we go further, many information in $(TOPDIR)/include/flash.h can be
put into these header files.

And, even flash operation (non-CFI) sample code can be put into
$(TOPDIR)/contrib/flash/.

The following is an example of AMD Spansion S29AL016M chip.

--snip--
#ifndef _FLASH_S29AL016M_H_ 
#define _FLASH_S29AL016M_H_ 
        
#define FLASH_S29AL016M_T_SECTORS       35
#define FLASH_S29AL016M_B_SECTORS       35
        
#define FLASH_S29AL016M_T_SIZE          0x00200000
#define FLASH_S29AL016M_B_SIZE          0x00200000


int FLASH_S29AL016M_T_BYTE_SA[] = {
        0x000000, 0x010000, 0x020000, 0x030000,
        0x040000, 0x050000, 0x060000, 0x070000,
        0x080000, 0x090000, 0x0A0000, 0x0B0000,
        0x0C0000, 0x0D0000, 0x0E0000, 0x0F0000,
        0x100000, 0x110000, 0x120000, 0x130000,
        0x140000, 0x150000, 0x160000, 0x170000,
        0x180000, 0x190000, 0x1A0000, 0x1B0000,
        0x1C0000, 0x1D0000, 0x1E0000, 0x1F0000,
        0x1F8000, 0x1FA000, 0x1C0000
};

int FLASH_S29AL016M_T_WORD_SA[] = {
        0x000000, 0x008000, 0x010000, 0x018000,
        0x020000, 0x028000, 0x030000, 0x038000,
        0x040000, 0x048000, 0x050000, 0x058000,
        0x060000, 0x068000, 0x070000, 0x078000,
        0x080000, 0x088000, 0x090000, 0x098000,
        0x0A0000, 0x0A8000, 0x0B0000, 0x0B8000,
        0x0C0000, 0x0C8000, 0x0D0000, 0x0D8000,
        0x0E0000, 0x0E8000, 0x0F0000, 0x0F8000,
        0x0FC000, 0x0FD000, 0x0FE000
};

int FLASH_S29AL016M_B_BYTE_SA[] = {
        0x000000, 0x004000, 0x006000, 0x008000,
        0x010000, 0x020000, 0x030000, 0x040000,
        0x050000, 0x060000, 0x070000, 0x080000,
        0x090000, 0x0A0000, 0x0B0000, 0x0C0000,
        0x0D0000, 0x0E0000, 0x0F0000, 0x100000,
        0x110000, 0x120000, 0x130000, 0x140000,
        0x150000, 0x160000, 0x170000, 0x180000,
        0x190000, 0x1A0000, 0x1B0000, 0x1C0000,
        0x1D0000, 0x1E0000, 0x1F0000
};

int FLASH_S29AL016M_B_WORD_SA[] = {
        0x000000, 0x002000, 0x003000, 0x004000,
        0x008000, 0x010000, 0x018000, 0x020000,
        0x028000, 0x030000, 0x038000, 0x040000,
        0x048000, 0x050000, 0x058000, 0x060000,
        0x068000, 0x070000, 0x078000, 0x080000,
        0x088000, 0x090000, 0x098000, 0x0A0000,
        0x0A8000, 0x0B0000, 0x0B8000, 0x0C0000,
        0x0C8000, 0x0D0000, 0x0D8000, 0x0E0000,
        0x0E8000, 0x0F0000, 0x0F8000
};

#endif
--snip--


In flash_get_size()
--snip--
        switch (device) {
        case BYTEME(AMD_ID_S29AL016M_T):
                info->flash_id += FLASH_S29AL016M_T;
                info->sector_count = FLASH_S29AL016M_T_SECTORS;
                info->size = FLASH_S29AL016M_T_SIZE;
                break;

        case BYTEME(AMD_ID_S29AL016M_B):
                info->flash_id += FLASH_S29AL016M_B;
                info->sector_count = FLASH_S29AL016M_B_SECTORS;
                info->size = FLASH_S29AL016M_B_SIZE;
                break;
--snip--


In flash_get_offset()
--snip--
        switch (info->flash_id & FLASH_TYPEMASK) {
        case FLASH_S29AL016M_T:
                for (i = 0; i < info->sector_count; i++) {
                        info->start[i] = base + FLASH_S29AL016M_T_BYTE_SA[i];
                }
                break;
        case FLASH_S29AL016M_B:
                for (i = 0; i < info->sector_count; i++) {
                        info->start[i] = base + FLASH_S29AL016M_B_BYTE_SA[i];
                }
                break;
--snip--

-- 
  lark

             reply	other threads:[~2005-12-25  4:33 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-12-25  4:33 Wang Jian [this message]
2005-12-25 10:19 ` [U-Boot-Users] Suggestion on flash init Wolfgang Denk
2005-12-25 12:02   ` Wang Jian
2005-12-25 16:34     ` Wolfgang Denk
2005-12-26  1:49       ` Wang Jian
2006-01-03 13:16         ` Wang Jian
2006-01-03 14:08           ` Wolfgang Denk
2006-01-03 15:34             ` Wang Jian
2006-01-03 15:44               ` Wolfgang Denk
2006-01-04 22:31         ` Tolunay Orkun
2006-01-04 23:51           ` Wolfgang Denk
  -- strict thread matches above, loose matches on Subject: below --
2006-01-05 16:20 Nuno João (Ext_NBS)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051225120433.F3F6.LARK@linux.net.cn \
    --to=lark@linux.net.cn \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.