Lines Matching refs:cfi
1912 struct cfi_private *cfi) in jedec_read_mfr() argument
1923 uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), map, cfi); in jedec_read_mfr()
1924 mask = (1 << (cfi->device_type * 8)) - 1; in jedec_read_mfr()
1935 struct cfi_private *cfi) in jedec_read_id() argument
1939 u32 ofs = cfi_build_cmd_addr(1, map, cfi); in jedec_read_id()
1940 mask = (1 << (cfi->device_type * 8)) -1; in jedec_read_id()
1945 static void jedec_reset(u32 base, struct map_info *map, struct cfi_private *cfi) in jedec_reset() argument
1955 if (cfi->addr_unlock1) { in jedec_reset()
1957 cfi->addr_unlock1,cfi->addr_unlock2); in jedec_reset()
1958 cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL); in jedec_reset()
1959 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL); in jedec_reset()
1962 cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL); in jedec_reset()
1968 cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL); in jedec_reset()
1973 static int cfi_jedec_setup(struct map_info *map, struct cfi_private *cfi, int index) in cfi_jedec_setup() argument
1978 if (!(jedec_table[index].devtypes & cfi->device_type)) { in cfi_jedec_setup()
1980 jedec_table[index].name, 4 * (1<<cfi->device_type)); in cfi_jedec_setup()
1988 cfi->cfiq = kmalloc(sizeof(struct cfi_ident) + num_erase_regions * 4, GFP_KERNEL); in cfi_jedec_setup()
1989 if (!cfi->cfiq) { in cfi_jedec_setup()
1994 memset(cfi->cfiq, 0, sizeof(struct cfi_ident)); in cfi_jedec_setup()
1996 cfi->cfiq->P_ID = jedec_table[index].cmd_set; in cfi_jedec_setup()
1997 cfi->cfiq->NumEraseRegions = jedec_table[index].nr_regions; in cfi_jedec_setup()
1998 cfi->cfiq->DevSize = jedec_table[index].dev_size; in cfi_jedec_setup()
1999 cfi->cfi_mode = CFI_MODE_JEDEC; in cfi_jedec_setup()
2000 cfi->sector_erase_cmd = CMD(0x30); in cfi_jedec_setup()
2003 cfi->cfiq->EraseRegionInfo[i] = jedec_table[index].regions[i]; in cfi_jedec_setup()
2005 cfi->cmdset_priv = NULL; in cfi_jedec_setup()
2008 cfi->mfr = jedec_table[index].mfr_id; in cfi_jedec_setup()
2009 cfi->id = jedec_table[index].dev_id; in cfi_jedec_setup()
2017 cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 / cfi->device_type; in cfi_jedec_setup()
2018 cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 / cfi->device_type; in cfi_jedec_setup()
2033 struct cfi_private *cfi, in jedec_match() argument
2049 switch (cfi->device_type) { in jedec_match()
2075 __func__, cfi->device_type); in jedec_match()
2078 if ( cfi->mfr != mfr || cfi->id != id ) { in jedec_match()
2085 if ( base + cfi_interleave(cfi) * ( 1 << finfo->dev_size ) > map->size ) { in jedec_match()
2092 if (! (finfo->devtypes & cfi->device_type)) in jedec_match()
2098 __func__, cfi->addr_unlock1, cfi->addr_unlock2 ); in jedec_match()
2100 && ( unlock_addrs[uaddr].addr1 / cfi->device_type != cfi->addr_unlock1 || in jedec_match()
2101 unlock_addrs[uaddr].addr2 / cfi->device_type != cfi->addr_unlock2 ) ) { in jedec_match()
2120 jedec_reset( base, map, cfi ); in jedec_match()
2121 mfr = jedec_read_mfr( map, base, cfi ); in jedec_match()
2122 id = jedec_read_id( map, base, cfi ); in jedec_match()
2123 if ( mfr == cfi->mfr && id == cfi->id ) { in jedec_match()
2126 __func__, cfi->mfr, cfi->id ); in jedec_match()
2138 if (cfi->addr_unlock1) { in jedec_match()
2139 cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL); in jedec_match()
2140 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL); in jedec_match()
2142 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL); in jedec_match()
2151 unsigned long *chip_map, struct cfi_private *cfi) in jedec_probe_chip() argument
2158 if (!cfi->numchips) { in jedec_probe_chip()
2164 cfi->addr_unlock1 = unlock_addrs[uaddr_idx].addr1 / cfi->device_type; in jedec_probe_chip()
2165 cfi->addr_unlock2 = unlock_addrs[uaddr_idx].addr2 / cfi->device_type; in jedec_probe_chip()
2177 probe_offset1 = cfi_build_cmd_addr(cfi->addr_unlock1, map, cfi); in jedec_probe_chip()
2178 probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock2, map, cfi); in jedec_probe_chip()
2184 jedec_reset(base, map, cfi); in jedec_probe_chip()
2187 if(cfi->addr_unlock1) { in jedec_probe_chip()
2188 cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL); in jedec_probe_chip()
2189 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL); in jedec_probe_chip()
2191 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL); in jedec_probe_chip()
2194 if (!cfi->numchips) { in jedec_probe_chip()
2198 cfi->mfr = jedec_read_mfr(map, base, cfi); in jedec_probe_chip()
2199 cfi->id = jedec_read_id(map, base, cfi); in jedec_probe_chip()
2201 cfi->mfr, cfi->id, cfi_interleave(cfi), cfi->device_type); in jedec_probe_chip()
2203 if ( jedec_match( base, map, cfi, &jedec_table[i] ) ) { in jedec_probe_chip()
2205 __func__, cfi->mfr, cfi->id, in jedec_probe_chip()
2206 cfi->addr_unlock1, cfi->addr_unlock2 ); in jedec_probe_chip()
2207 if (!cfi_jedec_setup(map, cfi, i)) in jedec_probe_chip()
2218 mfr = jedec_read_mfr(map, base, cfi); in jedec_probe_chip()
2219 id = jedec_read_id(map, base, cfi); in jedec_probe_chip()
2221 if ((mfr != cfi->mfr) || (id != cfi->id)) { in jedec_probe_chip()
2224 jedec_reset(base, map, cfi); in jedec_probe_chip()
2230 for (i=0; i < (base >> cfi->chipshift); i++) { in jedec_probe_chip()
2235 start = i << cfi->chipshift; in jedec_probe_chip()
2236 if (jedec_read_mfr(map, start, cfi) == cfi->mfr && in jedec_probe_chip()
2237 jedec_read_id(map, start, cfi) == cfi->id) { in jedec_probe_chip()
2240 jedec_reset(start, map, cfi); in jedec_probe_chip()
2243 if (jedec_read_mfr(map, base, cfi) != cfi->mfr || in jedec_probe_chip()
2244 jedec_read_id(map, base, cfi) != cfi->id) { in jedec_probe_chip()
2254 jedec_reset(base, map, cfi); in jedec_probe_chip()
2255 if (jedec_read_mfr(map, base, cfi) == cfi->mfr && in jedec_probe_chip()
2256 jedec_read_id(map, base, cfi) == cfi->id) { in jedec_probe_chip()
2266 set_bit((base >> cfi->chipshift), chip_map); /* Update chip map */ in jedec_probe_chip()
2267 cfi->numchips++; in jedec_probe_chip()
2271 jedec_reset(base, map, cfi); in jedec_probe_chip()
2274 map->name, cfi_interleave(cfi), cfi->device_type*8, base, in jedec_probe_chip()