1*b3b810bfSDavid du Colombier /* 2*b3b810bfSDavid du Colombier * the ``general-purpose'' memory controller. 3*b3b810bfSDavid du Colombier * only works with flash memory. 4*b3b810bfSDavid du Colombier */ 5*b3b810bfSDavid du Colombier 6*b3b810bfSDavid du Colombier enum { 7*b3b810bfSDavid du Colombier /* syscfg bits */ 8*b3b810bfSDavid du Colombier Idlemask = MASK(2) << 3, 9*b3b810bfSDavid du Colombier Noidle = 1 << 3, 10*b3b810bfSDavid du Colombier 11*b3b810bfSDavid du Colombier /* config bits */ 12*b3b810bfSDavid du Colombier Postnandwrites = 1<<0, /* force nand reg. writes to be posted */ 13*b3b810bfSDavid du Colombier 14*b3b810bfSDavid du Colombier /* indices of cscfg[].cfg[] */ 15*b3b810bfSDavid du Colombier Csctl = 1 - 1, /* chip-select signal ctl */ 16*b3b810bfSDavid du Colombier Csmap = 7 - 1, /* chip-select addr map cfg */ 17*b3b810bfSDavid du Colombier 18*b3b810bfSDavid du Colombier /* Csctl bits */ 19*b3b810bfSDavid du Colombier Muxadddata = 1 << 9, 20*b3b810bfSDavid du Colombier Devtypemask = MASK(2) << 10, 21*b3b810bfSDavid du Colombier Devtypenor = 0 << 10, 22*b3b810bfSDavid du Colombier Devtypenand = 2 << 10, 23*b3b810bfSDavid du Colombier Devsizemask = 1 << 12, 24*b3b810bfSDavid du Colombier Devsize8 = 0 << 12, 25*b3b810bfSDavid du Colombier Devsize16 = 1 << 12, 26*b3b810bfSDavid du Colombier Writesync = 1 << 27, 27*b3b810bfSDavid du Colombier Readsync = 1 << 29, 28*b3b810bfSDavid du Colombier 29*b3b810bfSDavid du Colombier /* Csmap bits */ 30*b3b810bfSDavid du Colombier Csvalid = 1 << 6, 31*b3b810bfSDavid du Colombier MB16 = 017 << 8, /* 16MB size */ 32*b3b810bfSDavid du Colombier MB128 = 010 << 8, /* 128MB size */ 33*b3b810bfSDavid du Colombier }; 34*b3b810bfSDavid du Colombier 35*b3b810bfSDavid du Colombier typedef struct Gpmc Gpmc; 36*b3b810bfSDavid du Colombier typedef struct Gpmccs Gpmccs; 37*b3b810bfSDavid du Colombier 38*b3b810bfSDavid du Colombier /* 39*b3b810bfSDavid du Colombier * configuration for non-dram (e.g., flash) memory 40*b3b810bfSDavid du Colombier */ 41*b3b810bfSDavid du Colombier struct Gpmc { /* hw registers */ 42*b3b810bfSDavid du Colombier uchar _pad0[0x10]; 43*b3b810bfSDavid du Colombier ulong syscfg; 44*b3b810bfSDavid du Colombier ulong syssts; 45*b3b810bfSDavid du Colombier ulong irqsts; 46*b3b810bfSDavid du Colombier ulong irqenable; 47*b3b810bfSDavid du Colombier uchar _pad1[0x40 - 0x20]; 48*b3b810bfSDavid du Colombier ulong tmout_ctl; 49*b3b810bfSDavid du Colombier ulong erraddr; 50*b3b810bfSDavid du Colombier ulong errtype; 51*b3b810bfSDavid du Colombier ulong _pad7; 52*b3b810bfSDavid du Colombier ulong config; 53*b3b810bfSDavid du Colombier ulong sts; 54*b3b810bfSDavid du Colombier uchar _pad2[0x60 - 0x58]; 55*b3b810bfSDavid du Colombier 56*b3b810bfSDavid du Colombier /* chip-select config */ 57*b3b810bfSDavid du Colombier struct Gpmccs { 58*b3b810bfSDavid du Colombier ulong cfg[7]; 59*b3b810bfSDavid du Colombier ulong nandcmd; 60*b3b810bfSDavid du Colombier ulong nandaddr; 61*b3b810bfSDavid du Colombier ulong nanddata; 62*b3b810bfSDavid du Colombier ulong _pad6[2]; 63*b3b810bfSDavid du Colombier } cscfg[8]; 64*b3b810bfSDavid du Colombier 65*b3b810bfSDavid du Colombier /* prefetch */ 66*b3b810bfSDavid du Colombier ulong prefcfg[2]; 67*b3b810bfSDavid du Colombier ulong _pad8; 68*b3b810bfSDavid du Colombier ulong prefctl; 69*b3b810bfSDavid du Colombier ulong prefsts; 70*b3b810bfSDavid du Colombier 71*b3b810bfSDavid du Colombier /* ecc */ 72*b3b810bfSDavid du Colombier ulong ecccfg; 73*b3b810bfSDavid du Colombier ulong eccctl; 74*b3b810bfSDavid du Colombier ulong eccsize; 75*b3b810bfSDavid du Colombier ulong eccres[9]; 76*b3b810bfSDavid du Colombier uchar _pad3[0x240 - 0x224]; 77*b3b810bfSDavid du Colombier 78*b3b810bfSDavid du Colombier /* bch */ 79*b3b810bfSDavid du Colombier ulong bchres[8][4]; 80*b3b810bfSDavid du Colombier uchar _pad4[0x2d0 - 0x2c0]; 81*b3b810bfSDavid du Colombier ulong bchswdata; 82*b3b810bfSDavid du Colombier }; 83