Lines Matching defs:flash

90 /* flash opcodes */
95 /* data structure to maintain flash ids from different vendors */
165 * @cmd_complete: queue to wait for command completion of NOR-flash.
167 * @flash: separate structure for each Serial NOR-flash attached to SMI.
178 struct spear_snor_flash *flash[MAX_NUM_FLASH_CHIP];
184 * @bank: Bank number(0, 1, 2, 3) for each NOR-flash.
185 * @dev_id: Device ID of NOR-flash.
186 * @lock: lock to manage flash read, write and erase operations
187 * @mtd: MTD info for each NOR-flash.
188 * @num_parts: Total number of partition in each bank of NOR-flash.
189 * @parts: Partition info for each bank of NOR-flash.
190 * @page_size: Page size of NOR-flash.
191 * @base_addr: Base address of NOR-flash.
192 * @erase_cmd: erase command may vary on different flash types
193 * @fast_mode: flash supports read in fast mode
214 * spear_smi_read_sr - Read status register of flash through SMI
216 * @bank: bank to which flash is connected
218 * This routine will return the status register of the flash chip present at the
256 * spear_smi_wait_till_ready - wait till flash is ready
258 * @bank: flash corresponding to this bank
350 * get_flash_index - match chip id from a flash list.
351 * @flash_id: a valid nor flash chip id obtained from board.
354 * returns negative. In case of success returns index in to the flash devices
361 /* Matches chip-id to entire list of 'serial-nor flash' ids */
372 * spear_smi_write_enable - Enable the flash to do write operation
374 * @bank: enable write for flash connected to this bank
391 /* give the flash, write enable command */
420 get_sector_erase_cmd(struct spear_snor_flash *flash, u32 offset)
425 x[0] = flash->erase_cmd;
434 * spear_smi_erase_sector - erase one sector of flash
440 * Erase one sector of flash memory at offset ``offset'' which is any
487 * spear_mtd_erase - perform flash erase operation as requested by user
491 * Erase an address range on the flash chip. The address range may extend
496 struct spear_snor_flash *flash = get_flash_data(mtd);
501 if (!flash || !dev)
504 bank = flash->bank;
513 mutex_lock(&flash->lock);
517 command = get_sector_erase_cmd(flash, addr);
518 /* preparing the command for flash */
521 mutex_unlock(&flash->lock);
528 mutex_unlock(&flash->lock);
534 * spear_mtd_read - performs flash read operation as requested by the user
541 * Read an address range from the flash chip. The address range
548 struct spear_snor_flash *flash = get_flash_data(mtd);
554 if (!flash || !dev)
557 if (flash->bank > dev->num_flashes - 1) {
563 src = flash->base_addr + from;
565 mutex_lock(&flash->lock);
568 ret = spear_smi_wait_till_ready(dev, flash->bank, SMI_MAX_TIME_OUT);
570 mutex_unlock(&flash->lock);
578 if (flash->fast_mode)
590 mutex_unlock(&flash->lock);
669 * Write an address range to the flash chip. Data must be written in
677 struct spear_snor_flash *flash = get_flash_data(mtd);
683 if (!flash || !dev)
686 if (flash->bank > dev->num_flashes - 1) {
692 dest = flash->base_addr + to;
693 mutex_lock(&flash->lock);
695 page_offset = (u32)to % flash->page_size;
698 if (page_offset + len <= flash->page_size) {
699 ret = spear_smi_cpy_toio(dev, flash->bank, dest, buf, len);
706 page_size = flash->page_size - page_offset;
708 ret = spear_smi_cpy_toio(dev, flash->bank, dest, buf,
718 if (page_size > flash->page_size)
719 page_size = flash->page_size;
721 ret = spear_smi_cpy_toio(dev, flash->bank, dest + i,
731 mutex_unlock(&flash->lock);
739 * @bank: bank on which flash must be probed
741 * This routine will check whether there exists a flash chip on a given memory
743 * Return index of the probed flash in flash devices structure
814 /* Fill structs for each subnode (flash device) */
847 struct spear_snor_flash *flash;
861 flash = devm_kzalloc(&pdev->dev, sizeof(*flash), GFP_ATOMIC);
862 if (!flash)
864 flash->bank = bank;
865 flash->fast_mode = flash_info->fast_mode ? 1 : 0;
866 mutex_init(&flash->lock);
868 /* verify whether nor flash is really present on board */
874 /* map the memory for nor flash chip */
875 flash->base_addr = devm_ioremap(&pdev->dev, flash_info->mem_base,
877 if (!flash->base_addr)
880 dev->flash[bank] = flash;
881 flash->mtd.priv = dev;
884 flash->mtd.name = flash_info->name;
886 flash->mtd.name = flash_devices[flash_index].name;
888 flash->mtd.dev.parent = &pdev->dev;
889 mtd_set_of_node(&flash->mtd, np);
890 flash->mtd.type = MTD_NORFLASH;
891 flash->mtd.writesize = 1;
892 flash->mtd.flags = MTD_CAP_NORFLASH;
893 flash->mtd.size = flash_info->size;
894 flash->mtd.erasesize = flash_devices[flash_index].sectorsize;
895 flash->page_size = flash_devices[flash_index].pagesize;
896 flash->mtd.writebufsize = flash->page_size;
897 flash->erase_cmd = flash_devices[flash_index].erase_cmd;
898 flash->mtd._erase = spear_mtd_erase;
899 flash->mtd._read = spear_mtd_read;
900 flash->mtd._write = spear_mtd_write;
901 flash->dev_id = flash_devices[flash_index].device_id;
904 flash->mtd.name, flash->mtd.size,
905 flash->mtd.size / (1024 * 1024));
908 flash->mtd.erasesize, flash->mtd.erasesize / 1024);
917 ret = mtd_device_register(&flash->mtd, parts, count);
1014 /* loop for each serial nor-flash which is connected to smi */
1037 struct spear_snor_flash *flash;
1042 /* clean up for all nor flash */
1044 flash = dev->flash[i];
1045 if (!flash)
1049 WARN_ON(mtd_device_unregister(&flash->mtd));
1104 MODULE_DESCRIPTION("MTD SMI driver for serial nor flash chips");