Lines Matching +full:milli +full:- +full:seconds

1 // SPDX-License-Identifier: GPL-2.0+
81 * smi_wait_xfer_finish - Wait until TFF is set in status register
91 if (readl(&smicntl->smi_sr) & TFF) in smi_wait_xfer_finish()
98 return -1; in smi_wait_xfer_finish()
102 * smi_read_id - Read flash id
112 writel(readl(&smicntl->smi_cr1) | SW_MODE, &smicntl->smi_cr1); in smi_read_id()
113 writel(READ_ID, &smicntl->smi_tr); in smi_read_id()
115 &smicntl->smi_cr2); in smi_read_id()
118 return -EIO; in smi_read_id()
120 value = (readl(&smicntl->smi_rr) & 0x00FFFFFF); in smi_read_id()
122 writel(readl(&smicntl->smi_sr) & ~TFF, &smicntl->smi_sr); in smi_read_id()
123 writel(readl(&smicntl->smi_cr1) & ~SW_MODE, &smicntl->smi_cr1); in smi_read_id()
129 * flash_get_size - Detect the SMI flash by reading the ID.
149 /* Matches chip-id to entire list of 'serial-nor flash' ids */ in flash_get_size()
152 info->size = flash_devices[i].size_in_bytes; in flash_get_size()
153 info->flash_id = value; in flash_get_size()
154 info->start[0] = base; in flash_get_size()
155 info->sector_count = in flash_get_size()
156 info->size/flash_devices[i].sectorsize; in flash_get_size()
158 return info->size; in flash_get_size()
166 * smi_read_sr - Read status register of SMI
177 ctrlreg1 = readl(&smicntl->smi_cr1); in smi_read_sr()
180 writel(readl(&smicntl->smi_cr1) & ~(SW_MODE | WB_MODE), in smi_read_sr()
181 &smicntl->smi_cr1); in smi_read_sr()
184 writel((bank << BANKSEL_SHIFT) | RD_STATUS_REG, &smicntl->smi_cr2); in smi_read_sr()
187 return -1; in smi_read_sr()
189 val = readl(&smicntl->smi_sr); in smi_read_sr()
192 writel(ctrlreg1, &smicntl->smi_cr1); in smi_read_sr()
198 * smi_wait_till_ready - Wait till last operation is over.
202 * This routine checks for WIP(write in progress)bit in Status register(SMSR-b0)
203 * The routine checks for #timeout loops, each at interval of 1 milli-second.
212 but potentially three seconds (!) after page erase. */ in smi_wait_till_ready()
220 } while (timeout--); in smi_wait_till_ready()
223 return -EIO; in smi_wait_till_ready()
227 * smi_write_enable - Enable the flash to do write operation
241 ctrlreg1 = readl(&smicntl->smi_cr1); in smi_write_enable()
244 writel(readl(&smicntl->smi_cr1) & ~SW_MODE, &smicntl->smi_cr1); in smi_write_enable()
247 writel((bank << BANKSEL_SHIFT) | WE, &smicntl->smi_cr2); in smi_write_enable()
250 return -1; in smi_write_enable()
253 writel(ctrlreg1, &smicntl->smi_cr1); in smi_write_enable()
265 return -1; in smi_write_enable()
269 * smi_init - SMI initialization routine
277 &smicntl->smi_cr1); in smi_init()
281 * smi_sector_erase - Erase flash sector
294 switch (info->start[0]) { in smi_sector_erase()
308 return -1; in smi_sector_erase()
311 sect_add = sector * (info->size / info->sector_count); in smi_sector_erase()
314 writel(readl(&smicntl->smi_sr) & ~(ERF1 | ERF2), &smicntl->smi_sr); in smi_sector_erase()
318 return -EBUSY; in smi_sector_erase()
322 return -EIO; in smi_sector_erase()
325 writel(readl(&smicntl->smi_cr1) | SW_MODE, &smicntl->smi_cr1); in smi_sector_erase()
328 writel(instruction, &smicntl->smi_tr); in smi_sector_erase()
330 &smicntl->smi_cr2); in smi_sector_erase()
332 return -EIO; in smi_sector_erase()
335 return -EBUSY; in smi_sector_erase()
338 writel(readl(&smicntl->smi_cr1) & ~SW_MODE, in smi_sector_erase()
339 &smicntl->smi_cr1); in smi_sector_erase()
345 * smi_write - Write to SMI flash
375 return -1; in smi_write()
379 return -EBUSY; in smi_write()
382 writel(readl(&smicntl->smi_cr1) & ~SW_MODE, &smicntl->smi_cr1); in smi_write()
385 return -EIO; in smi_write()
392 return -EBUSY; in smi_write()
395 return -EIO; in smi_write()
411 if ((readl(&smicntl->smi_sr) & (ERF1 | ERF2))) in smi_write()
412 return -EIO; in smi_write()
416 return -EBUSY; in smi_write()
418 writel(readl(&smicntl->smi_sr) & ~(WCF), &smicntl->smi_sr); in smi_write()
424 * write_buff - Write to SMI flash
435 length, info->start[0]); in write_buff()
439 * flash_init - SMI flash initialization
458 flash_info[j].start[i - 1] + in flash_init()
459 flash_info->size / flash_info->sector_count; in flash_init()
467 * flash_print_info - Print SMI flash information
474 if (info->flash_id == FLASH_UNKNOWN) { in flash_print_info()
479 if (info->size >= 0x100000) in flash_print_info()
481 info->size >> 20, info->sector_count); in flash_print_info()
484 info->size >> 10, info->sector_count); in flash_print_info()
487 for (i = 0; i < info->sector_count; ++i) { in flash_print_info()
496 size = (info->size) / (info->sector_count); in flash_print_info()
497 flash = (u32 *) info->start[i]; in flash_print_info()
500 while ((size--) && (*flash++ == ~0)) in flash_print_info()
513 info->start[i], in flash_print_info()
514 erased ? " E" : " ", info->protect[i] ? "RO " : " "); in flash_print_info()
519 info->start[i], info->protect[i] ? " (RO) " : " "); in flash_print_info()
527 * flash_erase - Erase SMI flash
538 puts("- no sectors to erase\n"); in flash_erase()
543 if (info->protect[sect]) in flash_erase()
547 printf("- Warning: %d protected sectors will not be erased!\n", in flash_erase()
554 if (info->protect[sect] == 0) { in flash_erase()