Lines Matching refs:map

16 #include <linux/mtd/map.h>
20 static int lpddr_chip_setup(struct map_info *map, struct lpddr_private *lpddr);
21 struct mtd_info *lpddr_probe(struct map_info *map);
22 static struct lpddr_private *lpddr_probe_chip(struct map_info *map);
23 static int lpddr_pfow_present(struct map_info *map,
44 static long lpddr_get_qinforec_pos(struct map_info *map, char *id_str)
48 int bankwidth = map_bankwidth(map) * 8;
58 printk(KERN_ERR"%s qinfo id string is wrong! \n", map->name);
63 static uint16_t lpddr_info_query(struct map_info *map, char *id_str)
66 int bits_per_chip = map_bankwidth(map) * 8;
67 unsigned long adr = lpddr_get_qinforec_pos(map, id_str);
71 map_write(map, CMD(LPDDR_INFO_QUERY),
72 map->pfow_base + PFOW_COMMAND_CODE);
73 map_write(map, CMD(adr & ((1 << bits_per_chip) - 1)),
74 map->pfow_base + PFOW_COMMAND_ADDRESS_L);
75 map_write(map, CMD(adr >> bits_per_chip),
76 map->pfow_base + PFOW_COMMAND_ADDRESS_H);
77 map_write(map, CMD(LPDDR_START_EXECUTION),
78 map->pfow_base + PFOW_COMMAND_EXECUTE);
81 dsr = CMDVAL(map_read(map, map->pfow_base + PFOW_DSR));
87 val = CMDVAL(map_read(map, map->pfow_base + PFOW_COMMAND_DATA));
91 static int lpddr_pfow_present(struct map_info *map, struct lpddr_private *lpddr)
96 pfow_val[0] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_P);
97 pfow_val[1] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_F);
98 pfow_val[2] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_O);
99 pfow_val[3] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_W);
101 if (!map_word_equal(map, CMD('P'), pfow_val[0]))
104 if (!map_word_equal(map, CMD('F'), pfow_val[1]))
107 if (!map_word_equal(map, CMD('O'), pfow_val[2]))
110 if (!map_word_equal(map, CMD('W'), pfow_val[3]))
116 map->name, map->pfow_base);
120 static int lpddr_chip_setup(struct map_info *map, struct lpddr_private *lpddr)
128 lpddr->ManufactId = CMDVAL(map_read(map, map->pfow_base + PFOW_MANUFACTURER_ID));
130 lpddr->DevId = CMDVAL(map_read(map, map->pfow_base + PFOW_DEVICE_ID));
132 lpddr->qinfo->DevSizeShift = lpddr_info_query(map, "DevSizeShift");
133 lpddr->qinfo->TotalBlocksNum = lpddr_info_query(map, "TotalBlocksNum");
134 lpddr->qinfo->BufSizeShift = lpddr_info_query(map, "BufSizeShift");
135 lpddr->qinfo->HWPartsNum = lpddr_info_query(map, "HWPartsNum");
137 lpddr_info_query(map, "UniformBlockSizeShift");
138 lpddr->qinfo->SuspEraseSupp = lpddr_info_query(map, "SuspEraseSupp");
140 lpddr_info_query(map, "SingleWordProgTime");
141 lpddr->qinfo->ProgBufferTime = lpddr_info_query(map, "ProgBufferTime");
142 lpddr->qinfo->BlockEraseTime = lpddr_info_query(map, "BlockEraseTime");
145 static struct lpddr_private *lpddr_probe_chip(struct map_info *map)
152 if ((map->pfow_base + 0x1000) >= map->size) {
154 "the map(0x%08lx)\n", map->name,
155 (unsigned long)map->pfow_base, map->size - 1);
159 if (!lpddr_pfow_present(map, &lpddr))
162 if (!lpddr_chip_setup(map, &lpddr))
184 struct mtd_info *lpddr_probe(struct map_info *map)
189 /* First probe the map to see if we havecan open PFOW here */
190 lpddr = lpddr_probe_chip(map);
194 map->fldrv_priv = lpddr;
195 mtd = lpddr_cmdset(map);
197 if (mtd->size > map->size) {
200 (unsigned long)map->size >> 10);
201 mtd->size = map->size;
208 map->fldrv_priv = NULL;