Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * the ``general-purpose'' memory controller.
 * only works with flash memory.
 */

enum {
        /* syscfg bits */
        Idlemask        = MASK(2) << 3,
        Noidle          = 1 << 3,

        /* config bits */
        Postnandwrites  = 1<<0, /* force nand reg. writes to be posted */

        /* indices of cscfg[].cfg[] */
        Csctl           = 1 - 1,                /* chip-select signal ctl */
        Csmap           = 7 - 1,                /* chip-select addr map cfg */

        /* Csctl bits */
        Muxadddata      = 1 << 9,
        Devtypemask     = MASK(2) << 10,
        Devtypenor      = 0 << 10,
        Devtypenand     = 2 << 10,
        Devsizemask     = 1 << 12,
        Devsize8        = 0 << 12,
        Devsize16       = 1 << 12,
        Writesync       = 1 << 27,
        Readsync        = 1 << 29,

        /* Csmap bits */
        Csvalid         = 1 << 6,
        MB16            = 017 << 8,             /* 16MB size */
        MB128           = 010 << 8,             /* 128MB size */
};

typedef struct Gpmc Gpmc;
typedef struct Gpmccs Gpmccs;

/*
 * configuration for non-dram (e.g., flash) memory
 */
struct Gpmc {                           /* hw registers */
        uchar   _pad0[0x10];
        ulong   syscfg;
        ulong   syssts;
        ulong   irqsts;
        ulong   irqenable;
        uchar   _pad1[0x40 - 0x20];
        ulong   tmout_ctl;
        ulong   erraddr;
        ulong   errtype;
        ulong   _pad7;
        ulong   config;
        ulong   sts;
        uchar   _pad2[0x60 - 0x58];

        /* chip-select config */
        struct Gpmccs {
                ulong   cfg[7];
                ulong   nandcmd;
                ulong   nandaddr;
                ulong   nanddata;
                ulong   _pad6[2];
        } cscfg[8];

        /* prefetch */
        ulong   prefcfg[2];
        ulong   _pad8;
        ulong   prefctl;
        ulong   prefsts;

        /* ecc */
        ulong   ecccfg;
        ulong   eccctl;
        ulong   eccsize;
        ulong   eccres[9];
        uchar   _pad3[0x240 - 0x224];

        /* bch */
        ulong   bchres[8][4];
        uchar   _pad4[0x2d0 - 0x2c0];
        ulong   bchswdata;
};