Lines Matching refs:map
34 static int lpddr_chip_setup(struct map_info *map, struct lpddr_private *lpddr);
35 struct mtd_info *lpddr_probe(struct map_info *map);
36 static struct lpddr_private *lpddr_probe_chip(struct map_info *map);
37 static int lpddr_pfow_present(struct map_info *map,
58 static long lpddr_get_qinforec_pos(struct map_info *map, char *id_str) in lpddr_get_qinforec_pos() argument
62 int bankwidth = map_bankwidth(map) * 8; in lpddr_get_qinforec_pos()
72 printk(KERN_ERR"%s qinfo id string is wrong! \n", map->name); in lpddr_get_qinforec_pos()
77 static uint16_t lpddr_info_query(struct map_info *map, char *id_str) in lpddr_info_query() argument
80 int bits_per_chip = map_bankwidth(map) * 8; in lpddr_info_query()
81 unsigned long adr = lpddr_get_qinforec_pos(map, id_str); in lpddr_info_query()
85 map_write(map, CMD(LPDDR_INFO_QUERY), in lpddr_info_query()
86 map->pfow_base + PFOW_COMMAND_CODE); in lpddr_info_query()
87 map_write(map, CMD(adr & ((1 << bits_per_chip) - 1)), in lpddr_info_query()
88 map->pfow_base + PFOW_COMMAND_ADDRESS_L); in lpddr_info_query()
89 map_write(map, CMD(adr >> bits_per_chip), in lpddr_info_query()
90 map->pfow_base + PFOW_COMMAND_ADDRESS_H); in lpddr_info_query()
91 map_write(map, CMD(LPDDR_START_EXECUTION), in lpddr_info_query()
92 map->pfow_base + PFOW_COMMAND_EXECUTE); in lpddr_info_query()
95 dsr = CMDVAL(map_read(map, map->pfow_base + PFOW_DSR)); in lpddr_info_query()
101 val = CMDVAL(map_read(map, map->pfow_base + PFOW_COMMAND_DATA)); in lpddr_info_query()
105 static int lpddr_pfow_present(struct map_info *map, struct lpddr_private *lpddr) in lpddr_pfow_present() argument
110 pfow_val[0] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_P); in lpddr_pfow_present()
111 pfow_val[1] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_F); in lpddr_pfow_present()
112 pfow_val[2] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_O); in lpddr_pfow_present()
113 pfow_val[3] = map_read(map, map->pfow_base + PFOW_QUERY_STRING_W); in lpddr_pfow_present()
115 if (!map_word_equal(map, CMD('P'), pfow_val[0])) in lpddr_pfow_present()
118 if (!map_word_equal(map, CMD('F'), pfow_val[1])) in lpddr_pfow_present()
121 if (!map_word_equal(map, CMD('O'), pfow_val[2])) in lpddr_pfow_present()
124 if (!map_word_equal(map, CMD('W'), pfow_val[3])) in lpddr_pfow_present()
130 map->name, map->pfow_base); in lpddr_pfow_present()
134 static int lpddr_chip_setup(struct map_info *map, struct lpddr_private *lpddr) in lpddr_chip_setup() argument
142 lpddr->ManufactId = CMDVAL(map_read(map, map->pfow_base + PFOW_MANUFACTURER_ID)); in lpddr_chip_setup()
144 lpddr->DevId = CMDVAL(map_read(map, map->pfow_base + PFOW_DEVICE_ID)); in lpddr_chip_setup()
146 lpddr->qinfo->DevSizeShift = lpddr_info_query(map, "DevSizeShift"); in lpddr_chip_setup()
147 lpddr->qinfo->TotalBlocksNum = lpddr_info_query(map, "TotalBlocksNum"); in lpddr_chip_setup()
148 lpddr->qinfo->BufSizeShift = lpddr_info_query(map, "BufSizeShift"); in lpddr_chip_setup()
149 lpddr->qinfo->HWPartsNum = lpddr_info_query(map, "HWPartsNum"); in lpddr_chip_setup()
151 lpddr_info_query(map, "UniformBlockSizeShift"); in lpddr_chip_setup()
152 lpddr->qinfo->SuspEraseSupp = lpddr_info_query(map, "SuspEraseSupp"); in lpddr_chip_setup()
154 lpddr_info_query(map, "SingleWordProgTime"); in lpddr_chip_setup()
155 lpddr->qinfo->ProgBufferTime = lpddr_info_query(map, "ProgBufferTime"); in lpddr_chip_setup()
156 lpddr->qinfo->BlockEraseTime = lpddr_info_query(map, "BlockEraseTime"); in lpddr_chip_setup()
159 static struct lpddr_private *lpddr_probe_chip(struct map_info *map) in lpddr_probe_chip() argument
166 if ((map->pfow_base + 0x1000) >= map->size) { in lpddr_probe_chip()
168 "the map(0x%08lx)\n", map->name, in lpddr_probe_chip()
169 (unsigned long)map->pfow_base, map->size - 1); in lpddr_probe_chip()
173 if (!lpddr_pfow_present(map, &lpddr)) in lpddr_probe_chip()
176 if (!lpddr_chip_setup(map, &lpddr)) in lpddr_probe_chip()
198 struct mtd_info *lpddr_probe(struct map_info *map) in lpddr_probe() argument
204 lpddr = lpddr_probe_chip(map); in lpddr_probe()
208 map->fldrv_priv = lpddr; in lpddr_probe()
209 mtd = lpddr_cmdset(map); in lpddr_probe()
211 if (mtd->size > map->size) { in lpddr_probe()
214 (unsigned long)map->size >> 10); in lpddr_probe()
215 mtd->size = map->size; in lpddr_probe()
222 map->fldrv_priv = NULL; in lpddr_probe()