Lines Matching refs:cfi
22 #include <linux/mtd/cfi.h>
1911 struct cfi_private *cfi)
1922 uint32_t ofs = cfi_build_cmd_addr(0 + (bank << 8), map, cfi);
1923 mask = (1 << (cfi->device_type * 8)) - 1;
1934 struct cfi_private *cfi)
1938 u32 ofs = cfi_build_cmd_addr(1, map, cfi);
1939 mask = (1 << (cfi->device_type * 8)) -1;
1944 static void jedec_reset(u32 base, struct map_info *map, struct cfi_private *cfi)
1954 if (cfi->addr_unlock1) {
1956 cfi->addr_unlock1,cfi->addr_unlock2);
1957 cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
1958 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
1961 cfi_send_gen_cmd(0xF0, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
1967 cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL);
1972 static int cfi_jedec_setup(struct map_info *map, struct cfi_private *cfi, int index)
1977 if (!(jedec_table[index].devtypes & cfi->device_type)) {
1979 jedec_table[index].name, 4 * (1<<cfi->device_type));
1987 cfi->cfiq = kmalloc(sizeof(struct cfi_ident) + num_erase_regions * 4, GFP_KERNEL);
1988 if (!cfi->cfiq) {
1993 memset(cfi->cfiq, 0, sizeof(struct cfi_ident));
1995 cfi->cfiq->P_ID = jedec_table[index].cmd_set;
1996 cfi->cfiq->NumEraseRegions = jedec_table[index].nr_regions;
1997 cfi->cfiq->DevSize = jedec_table[index].dev_size;
1998 cfi->cfi_mode = CFI_MODE_JEDEC;
1999 cfi->sector_erase_cmd = CMD(0x30);
2002 cfi->cfiq->EraseRegionInfo[i] = jedec_table[index].regions[i];
2004 cfi->cmdset_priv = NULL;
2007 cfi->mfr = jedec_table[index].mfr_id;
2008 cfi->id = jedec_table[index].dev_id;
2016 cfi->addr_unlock1 = unlock_addrs[uaddr].addr1 / cfi->device_type;
2017 cfi->addr_unlock2 = unlock_addrs[uaddr].addr2 / cfi->device_type;
2032 struct cfi_private *cfi,
2048 switch (cfi->device_type) {
2074 __func__, cfi->device_type);
2077 if ( cfi->mfr != mfr || cfi->id != id ) {
2084 if ( base + cfi_interleave(cfi) * ( 1 << finfo->dev_size ) > map->size ) {
2091 if (! (finfo->devtypes & cfi->device_type))
2097 __func__, cfi->addr_unlock1, cfi->addr_unlock2 );
2099 && ( unlock_addrs[uaddr].addr1 / cfi->device_type != cfi->addr_unlock1 ||
2100 unlock_addrs[uaddr].addr2 / cfi->device_type != cfi->addr_unlock2 ) ) {
2119 jedec_reset( base, map, cfi );
2120 mfr = jedec_read_mfr( map, base, cfi );
2121 id = jedec_read_id( map, base, cfi );
2122 if ( mfr == cfi->mfr && id == cfi->id ) {
2125 __func__, cfi->mfr, cfi->id );
2137 if (cfi->addr_unlock1) {
2138 cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
2139 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
2141 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
2150 unsigned long *chip_map, struct cfi_private *cfi)
2157 if (!cfi->numchips) {
2163 cfi->addr_unlock1 = unlock_addrs[uaddr_idx].addr1 / cfi->device_type;
2164 cfi->addr_unlock2 = unlock_addrs[uaddr_idx].addr2 / cfi->device_type;
2176 probe_offset1 = cfi_build_cmd_addr(cfi->addr_unlock1, map, cfi);
2177 probe_offset2 = cfi_build_cmd_addr(cfi->addr_unlock2, map, cfi);
2183 jedec_reset(base, map, cfi);
2186 if(cfi->addr_unlock1) {
2187 cfi_send_gen_cmd(0xaa, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
2188 cfi_send_gen_cmd(0x55, cfi->addr_unlock2, base, map, cfi, cfi->device_type, NULL);
2190 cfi_send_gen_cmd(0x90, cfi->addr_unlock1, base, map, cfi, cfi->device_type, NULL);
2193 if (!cfi->numchips) {
2197 cfi->mfr = jedec_read_mfr(map, base, cfi);
2198 cfi->id = jedec_read_id(map, base, cfi);
2200 cfi->mfr, cfi->id, cfi_interleave(cfi), cfi->device_type);
2202 if ( jedec_match( base, map, cfi, &jedec_table[i] ) ) {
2204 __func__, cfi->mfr, cfi->id,
2205 cfi->addr_unlock1, cfi->addr_unlock2 );
2206 if (!cfi_jedec_setup(map, cfi, i))
2217 mfr = jedec_read_mfr(map, base, cfi);
2218 id = jedec_read_id(map, base, cfi);
2220 if ((mfr != cfi->mfr) || (id != cfi->id)) {
2223 jedec_reset(base, map, cfi);
2229 for (i=0; i < (base >> cfi->chipshift); i++) {
2234 start = i << cfi->chipshift;
2235 if (jedec_read_mfr(map, start, cfi) == cfi->mfr &&
2236 jedec_read_id(map, start, cfi) == cfi->id) {
2239 jedec_reset(start, map, cfi);
2242 if (jedec_read_mfr(map, base, cfi) != cfi->mfr ||
2243 jedec_read_id(map, base, cfi) != cfi->id) {
2253 jedec_reset(base, map, cfi);
2254 if (jedec_read_mfr(map, base, cfi) == cfi->mfr &&
2255 jedec_read_id(map, base, cfi) == cfi->id) {
2265 set_bit((base >> cfi->chipshift), chip_map); /* Update chip map */
2266 cfi->numchips++;
2270 jedec_reset(base, map, cfi);
2273 map->name, cfi_interleave(cfi), cfi->device_type*8, base,