Lines Matching refs:map

44 static int get_chip(struct map_info *map, struct flchip *chip, int mode);
45 static int chip_ready(struct map_info *map, struct flchip *chip, int mode);
46 static void put_chip(struct map_info *map, struct flchip *chip);
48 struct mtd_info *lpddr_cmdset(struct map_info *map) in lpddr_cmdset() argument
50 struct lpddr_private *lpddr = map->fldrv_priv; in lpddr_cmdset()
60 mtd->priv = map; in lpddr_cmdset()
73 if (map_is_linear(map)) { in lpddr_cmdset()
111 static int wait_for_ready(struct map_info *map, struct flchip *chip, in wait_for_ready() argument
127 dsr = CMDVAL(map_read(map, map->pfow_base + PFOW_DSR)); in wait_for_ready()
132 map->name, chip_state); in wait_for_ready()
174 map_write(map, CMD(~(DSR_ERR)), map->pfow_base + PFOW_DSR); in wait_for_ready()
176 map->name, dsr); in wait_for_ready()
184 static int get_chip(struct map_info *map, struct flchip *chip, int mode) in get_chip() argument
229 ret = chip_ready(map, contender, mode); in get_chip()
245 put_chip(map, contender); in get_chip()
273 ret = chip_ready(map, chip, mode); in get_chip()
280 static int chip_ready(struct map_info *map, struct flchip *chip, int mode) in chip_ready() argument
282 struct lpddr_private *lpddr = map->fldrv_priv; in chip_ready()
300 map_write(map, CMD(LPDDR_SUSPEND), in chip_ready()
301 map->pfow_base + PFOW_PROGRAM_ERASE_SUSPEND); in chip_ready()
304 ret = wait_for_ready(map, chip, 0); in chip_ready()
308 put_chip(map, chip); in chip_ready()
310 "State may be wrong \n", map->name); in chip_ready()
334 static void put_chip(struct map_info *map, struct flchip *chip) in put_chip() argument
348 put_chip(map, loaner); in put_chip()
373 map_write(map, CMD(LPDDR_RESUME), in put_chip()
374 map->pfow_base + PFOW_COMMAND_CODE); in put_chip()
375 map_write(map, CMD(LPDDR_START_EXECUTION), in put_chip()
376 map->pfow_base + PFOW_COMMAND_EXECUTE); in put_chip()
384 map->name, chip->oldstate); in put_chip()
389 static int do_write_buffer(struct map_info *map, struct flchip *chip, in do_write_buffer() argument
393 struct lpddr_private *lpddr = map->fldrv_priv; in do_write_buffer()
403 ret = get_chip(map, chip, FL_WRITING); in do_write_buffer()
409 word_gap = (-adr & (map_bankwidth(map)-1)); in do_write_buffer()
410 words = (len - word_gap + map_bankwidth(map) - 1) / map_bankwidth(map); in do_write_buffer()
414 word_gap = map_bankwidth(map) - word_gap; in do_write_buffer()
416 datum = map_word_ff(map); in do_write_buffer()
420 prog_buf_ofs = map->pfow_base + CMDVAL(map_read(map, in do_write_buffer()
421 map->pfow_base + PFOW_PROGRAM_BUFFER_OFFSET)); in do_write_buffer()
425 int n = map_bankwidth(map) - word_gap; in do_write_buffer()
432 if (!word_gap && (len < map_bankwidth(map))) in do_write_buffer()
433 datum = map_word_ff(map); in do_write_buffer()
435 datum = map_word_load_partial(map, datum, in do_write_buffer()
440 if (!len || word_gap == map_bankwidth(map)) { in do_write_buffer()
441 map_write(map, datum, prog_buf_ofs); in do_write_buffer()
442 prog_buf_ofs += map_bankwidth(map); in do_write_buffer()
456 send_pfow_command(map, LPDDR_BUFF_PROGRAM, adr, wbufsize, NULL); in do_write_buffer()
458 ret = wait_for_ready(map, chip, (1<<lpddr->qinfo->ProgBufferTime)); in do_write_buffer()
461 map->name, ret, adr); in do_write_buffer()
465 out: put_chip(map, chip); in do_write_buffer()
472 struct map_info *map = mtd->priv; in do_erase_oneblock() local
473 struct lpddr_private *lpddr = map->fldrv_priv; in do_erase_oneblock()
479 ret = get_chip(map, chip, FL_ERASING); in do_erase_oneblock()
484 send_pfow_command(map, LPDDR_BLOCK_ERASE, adr, 0, NULL); in do_erase_oneblock()
486 ret = wait_for_ready(map, chip, (1<<lpddr->qinfo->BlockEraseTime)*1000); in do_erase_oneblock()
489 map->name, ret, adr); in do_erase_oneblock()
492 out: put_chip(map, chip); in do_erase_oneblock()
500 struct map_info *map = mtd->priv; in lpddr_read() local
501 struct lpddr_private *lpddr = map->fldrv_priv; in lpddr_read()
507 ret = get_chip(map, chip, FL_READY); in lpddr_read()
513 map_copy_from(map, buf, adr, len); in lpddr_read()
516 put_chip(map, chip); in lpddr_read()
524 struct map_info *map = mtd->priv; in lpddr_point() local
525 struct lpddr_private *lpddr = map->fldrv_priv; in lpddr_point()
531 if (!map->virt) in lpddr_point()
536 *mtdbuf = (void *)map->virt + chip->start + ofs; in lpddr_point()
556 ret = get_chip(map, chip, FL_POINT); in lpddr_point()
576 struct map_info *map = mtd->priv; in lpddr_unpoint() local
577 struct lpddr_private *lpddr = map->fldrv_priv; in lpddr_unpoint()
604 "pointed region\n", map->name); in lpddr_unpoint()
608 put_chip(map, chip); in lpddr_unpoint()
634 struct map_info *map = mtd->priv; in lpddr_writev() local
635 struct lpddr_private *lpddr = map->fldrv_priv; in lpddr_writev()
660 ret = do_write_buffer(map, &lpddr->chips[chipnum], in lpddr_writev()
682 struct map_info *map = mtd->priv; in lpddr_erase() local
683 struct lpddr_private *lpddr = map->fldrv_priv; in lpddr_erase()
707 struct map_info *map = mtd->priv; in do_xxlock() local
708 struct lpddr_private *lpddr = map->fldrv_priv; in do_xxlock()
713 ret = get_chip(map, chip, FL_LOCKING); in do_xxlock()
720 send_pfow_command(map, LPDDR_LOCK_BLOCK, adr, adr + len, NULL); in do_xxlock()
723 send_pfow_command(map, LPDDR_UNLOCK_BLOCK, adr, adr + len, NULL); in do_xxlock()
728 ret = wait_for_ready(map, chip, 1); in do_xxlock()
731 map->name, ret); in do_xxlock()
734 out: put_chip(map, chip); in do_xxlock()