/* * 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; };