1 /* 2 * SPI Flash Core 3 * 4 * Copyright (C) 2015 Jagan Teki <jteki@openedev.com> 5 * Copyright (C) 2013 Jagannadha Sutradharudu Teki, Xilinx Inc. 6 * Copyright (C) 2010 Reinhard Meyer, EMK Elektronik 7 * Copyright (C) 2008 Atmel Corporation 8 * 9 * SPDX-License-Identifier: GPL-2.0+ 10 */ 11 12 #include <common.h> 13 #include <errno.h> 14 #include <malloc.h> 15 #include <mapmem.h> 16 #include <spi.h> 17 #include <spi_flash.h> 18 #include <linux/log2.h> 19 #include <dma.h> 20 21 #include "sf_internal.h" 22 23 DECLARE_GLOBAL_DATA_PTR; 24 25 static void spi_flash_addr(u32 addr, u8 *cmd) 26 { 27 /* cmd[0] is actual command */ 28 cmd[1] = addr >> 16; 29 cmd[2] = addr >> 8; 30 cmd[3] = addr >> 0; 31 } 32 33 static int read_sr(struct spi_flash *flash, u8 *rs) 34 { 35 int ret; 36 u8 cmd; 37 38 cmd = CMD_READ_STATUS; 39 ret = spi_flash_read_common(flash, &cmd, 1, rs, 1); 40 if (ret < 0) { 41 debug("SF: fail to read status register\n"); 42 return ret; 43 } 44 45 return 0; 46 } 47 48 static int read_fsr(struct spi_flash *flash, u8 *fsr) 49 { 50 int ret; 51 const u8 cmd = CMD_FLAG_STATUS; 52 53 ret = spi_flash_read_common(flash, &cmd, 1, fsr, 1); 54 if (ret < 0) { 55 debug("SF: fail to read flag status register\n"); 56 return ret; 57 } 58 59 return 0; 60 } 61 62 static int write_sr(struct spi_flash *flash, u8 ws) 63 { 64 u8 cmd; 65 int ret; 66 67 cmd = CMD_WRITE_STATUS; 68 ret = spi_flash_write_common(flash, &cmd, 1, &ws, 1); 69 if (ret < 0) { 70 debug("SF: fail to write status register\n"); 71 return ret; 72 } 73 74 return 0; 75 } 76 77 #if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND) 78 static int read_cr(struct spi_flash *flash, u8 *rc) 79 { 80 int ret; 81 u8 cmd; 82 83 cmd = CMD_READ_CONFIG; 84 ret = spi_flash_read_common(flash, &cmd, 1, rc, 1); 85 if (ret < 0) { 86 debug("SF: fail to read config register\n"); 87 return ret; 88 } 89 90 return 0; 91 } 92 93 static int write_cr(struct spi_flash *flash, u8 wc) 94 { 95 u8 data[2]; 96 u8 cmd; 97 int ret; 98 99 ret = read_sr(flash, &data[0]); 100 if (ret < 0) 101 return ret; 102 103 cmd = CMD_WRITE_STATUS; 104 data[1] = wc; 105 ret = spi_flash_write_common(flash, &cmd, 1, &data, 2); 106 if (ret) { 107 debug("SF: fail to write config register\n"); 108 return ret; 109 } 110 111 return 0; 112 } 113 #endif 114 115 #ifdef CONFIG_SPI_FLASH_BAR 116 /* 117 * This "clean_bar" is necessary in a situation when one was accessing 118 * spi flash memory > 16 MiB by using Bank Address Register's BA24 bit. 119 * 120 * After it the BA24 bit shall be cleared to allow access to correct 121 * memory region after SW reset (by calling "reset" command). 122 * 123 * Otherwise, the BA24 bit may be left set and then after reset, the 124 * ROM would read/write/erase SPL from 16 MiB * bank_sel address. 125 */ 126 static int clean_bar(struct spi_flash *flash) 127 { 128 u8 cmd, bank_sel = 0; 129 130 if (flash->bank_curr == 0) 131 return 0; 132 cmd = flash->bank_write_cmd; 133 134 return spi_flash_write_common(flash, &cmd, 1, &bank_sel, 1); 135 } 136 137 static int write_bar(struct spi_flash *flash, u32 offset) 138 { 139 u8 cmd, bank_sel; 140 int ret; 141 142 bank_sel = offset / (SPI_FLASH_16MB_BOUN << flash->shift); 143 if (bank_sel == flash->bank_curr) 144 goto bar_end; 145 146 cmd = flash->bank_write_cmd; 147 ret = spi_flash_write_common(flash, &cmd, 1, &bank_sel, 1); 148 if (ret < 0) { 149 debug("SF: fail to write bank register\n"); 150 return ret; 151 } 152 153 bar_end: 154 flash->bank_curr = bank_sel; 155 return flash->bank_curr; 156 } 157 158 static int read_bar(struct spi_flash *flash, const struct spi_flash_info *info) 159 { 160 u8 curr_bank = 0; 161 int ret; 162 163 if (flash->size <= SPI_FLASH_16MB_BOUN) 164 goto bar_end; 165 166 switch (JEDEC_MFR(info)) { 167 case SPI_FLASH_CFI_MFR_SPANSION: 168 flash->bank_read_cmd = CMD_BANKADDR_BRRD; 169 flash->bank_write_cmd = CMD_BANKADDR_BRWR; 170 break; 171 default: 172 flash->bank_read_cmd = CMD_EXTNADDR_RDEAR; 173 flash->bank_write_cmd = CMD_EXTNADDR_WREAR; 174 } 175 176 ret = spi_flash_read_common(flash, &flash->bank_read_cmd, 1, 177 &curr_bank, 1); 178 if (ret) { 179 debug("SF: fail to read bank addr register\n"); 180 return ret; 181 } 182 183 bar_end: 184 flash->bank_curr = curr_bank; 185 return 0; 186 } 187 #endif 188 189 #ifdef CONFIG_SF_DUAL_FLASH 190 static void spi_flash_dual(struct spi_flash *flash, u32 *addr) 191 { 192 switch (flash->dual_flash) { 193 case SF_DUAL_STACKED_FLASH: 194 if (*addr >= (flash->size >> 1)) { 195 *addr -= flash->size >> 1; 196 flash->flags |= SNOR_F_USE_UPAGE; 197 } else { 198 flash->flags &= ~SNOR_F_USE_UPAGE; 199 } 200 break; 201 case SF_DUAL_PARALLEL_FLASH: 202 *addr >>= flash->shift; 203 break; 204 default: 205 debug("SF: Unsupported dual_flash=%d\n", flash->dual_flash); 206 break; 207 } 208 } 209 #endif 210 211 static int spi_flash_sr_ready(struct spi_flash *flash) 212 { 213 u8 sr; 214 int ret; 215 216 ret = read_sr(flash, &sr); 217 if (ret < 0) 218 return ret; 219 220 return !(sr & STATUS_WIP); 221 } 222 223 static int spi_flash_fsr_ready(struct spi_flash *flash) 224 { 225 u8 fsr; 226 int ret; 227 228 ret = read_fsr(flash, &fsr); 229 if (ret < 0) 230 return ret; 231 232 return fsr & STATUS_PEC; 233 } 234 235 static int spi_flash_ready(struct spi_flash *flash) 236 { 237 int sr, fsr; 238 239 sr = spi_flash_sr_ready(flash); 240 if (sr < 0) 241 return sr; 242 243 fsr = 1; 244 if (flash->flags & SNOR_F_USE_FSR) { 245 fsr = spi_flash_fsr_ready(flash); 246 if (fsr < 0) 247 return fsr; 248 } 249 250 return sr && fsr; 251 } 252 253 static int spi_flash_wait_till_ready(struct spi_flash *flash, 254 unsigned long timeout) 255 { 256 unsigned long timebase; 257 int ret; 258 259 timebase = get_timer(0); 260 261 while (get_timer(timebase) < timeout) { 262 ret = spi_flash_ready(flash); 263 if (ret < 0) 264 return ret; 265 if (ret) 266 return 0; 267 } 268 269 printf("SF: Timeout!\n"); 270 271 return -ETIMEDOUT; 272 } 273 274 int spi_flash_write_common(struct spi_flash *flash, const u8 *cmd, 275 size_t cmd_len, const void *buf, size_t buf_len) 276 { 277 struct spi_slave *spi = flash->spi; 278 unsigned long timeout = SPI_FLASH_PROG_TIMEOUT; 279 int ret; 280 281 if (buf == NULL) 282 timeout = SPI_FLASH_PAGE_ERASE_TIMEOUT; 283 284 ret = spi_claim_bus(spi); 285 if (ret) { 286 debug("SF: unable to claim SPI bus\n"); 287 return ret; 288 } 289 290 ret = spi_flash_cmd_write_enable(flash); 291 if (ret < 0) { 292 debug("SF: enabling write failed\n"); 293 return ret; 294 } 295 296 ret = spi_flash_cmd_write(spi, cmd, cmd_len, buf, buf_len); 297 if (ret < 0) { 298 debug("SF: write cmd failed\n"); 299 return ret; 300 } 301 302 ret = spi_flash_wait_till_ready(flash, timeout); 303 if (ret < 0) { 304 debug("SF: write %s timed out\n", 305 timeout == SPI_FLASH_PROG_TIMEOUT ? 306 "program" : "page erase"); 307 return ret; 308 } 309 310 spi_release_bus(spi); 311 312 return ret; 313 } 314 315 int spi_flash_cmd_erase_ops(struct spi_flash *flash, u32 offset, size_t len) 316 { 317 u32 erase_size, erase_addr; 318 u8 cmd[SPI_FLASH_CMD_LEN]; 319 int ret = -1; 320 321 erase_size = flash->erase_size; 322 if (offset % erase_size || len % erase_size) { 323 debug("SF: Erase offset/length not multiple of erase size\n"); 324 return -1; 325 } 326 327 if (flash->flash_is_locked) { 328 if (flash->flash_is_locked(flash, offset, len) > 0) { 329 printf("offset 0x%x is protected and cannot be erased\n", 330 offset); 331 return -EINVAL; 332 } 333 } 334 335 cmd[0] = flash->erase_cmd; 336 while (len) { 337 erase_addr = offset; 338 339 #ifdef CONFIG_SF_DUAL_FLASH 340 if (flash->dual_flash > SF_SINGLE_FLASH) 341 spi_flash_dual(flash, &erase_addr); 342 #endif 343 #ifdef CONFIG_SPI_FLASH_BAR 344 ret = write_bar(flash, erase_addr); 345 if (ret < 0) 346 return ret; 347 #endif 348 spi_flash_addr(erase_addr, cmd); 349 350 debug("SF: erase %2x %2x %2x %2x (%x)\n", cmd[0], cmd[1], 351 cmd[2], cmd[3], erase_addr); 352 353 ret = spi_flash_write_common(flash, cmd, sizeof(cmd), NULL, 0); 354 if (ret < 0) { 355 debug("SF: erase failed\n"); 356 break; 357 } 358 359 offset += erase_size; 360 len -= erase_size; 361 } 362 363 #ifdef CONFIG_SPI_FLASH_BAR 364 ret = clean_bar(flash); 365 #endif 366 367 return ret; 368 } 369 370 int spi_flash_cmd_write_ops(struct spi_flash *flash, u32 offset, 371 size_t len, const void *buf) 372 { 373 struct spi_slave *spi = flash->spi; 374 unsigned long byte_addr, page_size; 375 u32 write_addr; 376 size_t chunk_len, actual; 377 u8 cmd[SPI_FLASH_CMD_LEN]; 378 int ret = -1; 379 380 page_size = flash->page_size; 381 382 if (flash->flash_is_locked) { 383 if (flash->flash_is_locked(flash, offset, len) > 0) { 384 printf("offset 0x%x is protected and cannot be written\n", 385 offset); 386 return -EINVAL; 387 } 388 } 389 390 cmd[0] = flash->write_cmd; 391 for (actual = 0; actual < len; actual += chunk_len) { 392 write_addr = offset; 393 394 #ifdef CONFIG_SF_DUAL_FLASH 395 if (flash->dual_flash > SF_SINGLE_FLASH) 396 spi_flash_dual(flash, &write_addr); 397 #endif 398 #ifdef CONFIG_SPI_FLASH_BAR 399 ret = write_bar(flash, write_addr); 400 if (ret < 0) 401 return ret; 402 #endif 403 byte_addr = offset % page_size; 404 chunk_len = min(len - actual, (size_t)(page_size - byte_addr)); 405 406 if (spi->max_write_size) 407 chunk_len = min(chunk_len, 408 (size_t)spi->max_write_size); 409 410 spi_flash_addr(write_addr, cmd); 411 412 debug("SF: 0x%p => cmd = { 0x%02x 0x%02x%02x%02x } chunk_len = %zu\n", 413 buf + actual, cmd[0], cmd[1], cmd[2], cmd[3], chunk_len); 414 415 ret = spi_flash_write_common(flash, cmd, sizeof(cmd), 416 buf + actual, chunk_len); 417 if (ret < 0) { 418 debug("SF: write failed\n"); 419 break; 420 } 421 422 offset += chunk_len; 423 } 424 425 #ifdef CONFIG_SPI_FLASH_BAR 426 ret = clean_bar(flash); 427 #endif 428 429 return ret; 430 } 431 432 int spi_flash_read_common(struct spi_flash *flash, const u8 *cmd, 433 size_t cmd_len, void *data, size_t data_len) 434 { 435 struct spi_slave *spi = flash->spi; 436 int ret; 437 438 ret = spi_claim_bus(spi); 439 if (ret) { 440 debug("SF: unable to claim SPI bus\n"); 441 return ret; 442 } 443 444 ret = spi_flash_cmd_read(spi, cmd, cmd_len, data, data_len); 445 if (ret < 0) { 446 debug("SF: read cmd failed\n"); 447 return ret; 448 } 449 450 spi_release_bus(spi); 451 452 return ret; 453 } 454 455 /* 456 * TODO: remove the weak after all the other spi_flash_copy_mmap 457 * implementations removed from drivers 458 */ 459 void __weak spi_flash_copy_mmap(void *data, void *offset, size_t len) 460 { 461 #ifdef CONFIG_DMA 462 if (!dma_memcpy(data, offset, len)) 463 return; 464 #endif 465 memcpy(data, offset, len); 466 } 467 468 int spi_flash_cmd_read_ops(struct spi_flash *flash, u32 offset, 469 size_t len, void *data) 470 { 471 struct spi_slave *spi = flash->spi; 472 u8 *cmd, cmdsz; 473 u32 remain_len, read_len, read_addr; 474 int bank_sel = 0; 475 int ret = -1; 476 477 /* Handle memory-mapped SPI */ 478 if (flash->memory_map) { 479 ret = spi_claim_bus(spi); 480 if (ret) { 481 debug("SF: unable to claim SPI bus\n"); 482 return ret; 483 } 484 spi_xfer(spi, 0, NULL, NULL, SPI_XFER_MMAP); 485 spi_flash_copy_mmap(data, flash->memory_map + offset, len); 486 spi_xfer(spi, 0, NULL, NULL, SPI_XFER_MMAP_END); 487 spi_release_bus(spi); 488 return 0; 489 } 490 491 cmdsz = SPI_FLASH_CMD_LEN + flash->dummy_byte; 492 cmd = calloc(1, cmdsz); 493 if (!cmd) { 494 debug("SF: Failed to allocate cmd\n"); 495 return -ENOMEM; 496 } 497 498 cmd[0] = flash->read_cmd; 499 while (len) { 500 read_addr = offset; 501 502 #ifdef CONFIG_SF_DUAL_FLASH 503 if (flash->dual_flash > SF_SINGLE_FLASH) 504 spi_flash_dual(flash, &read_addr); 505 #endif 506 #ifdef CONFIG_SPI_FLASH_BAR 507 ret = write_bar(flash, read_addr); 508 if (ret < 0) 509 return ret; 510 bank_sel = flash->bank_curr; 511 #endif 512 remain_len = ((SPI_FLASH_16MB_BOUN << flash->shift) * 513 (bank_sel + 1)) - offset; 514 if (len < remain_len) 515 read_len = len; 516 else 517 read_len = remain_len; 518 519 spi_flash_addr(read_addr, cmd); 520 521 ret = spi_flash_read_common(flash, cmd, cmdsz, data, read_len); 522 if (ret < 0) { 523 debug("SF: read failed\n"); 524 break; 525 } 526 527 offset += read_len; 528 len -= read_len; 529 data += read_len; 530 } 531 532 #ifdef CONFIG_SPI_FLASH_BAR 533 ret = clean_bar(flash); 534 #endif 535 536 free(cmd); 537 return ret; 538 } 539 540 #ifdef CONFIG_SPI_FLASH_SST 541 static int sst_byte_write(struct spi_flash *flash, u32 offset, const void *buf) 542 { 543 struct spi_slave *spi = flash->spi; 544 int ret; 545 u8 cmd[4] = { 546 CMD_SST_BP, 547 offset >> 16, 548 offset >> 8, 549 offset, 550 }; 551 552 debug("BP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n", 553 spi_w8r8(spi, CMD_READ_STATUS), buf, cmd[0], offset); 554 555 ret = spi_flash_cmd_write_enable(flash); 556 if (ret) 557 return ret; 558 559 ret = spi_flash_cmd_write(spi, cmd, sizeof(cmd), buf, 1); 560 if (ret) 561 return ret; 562 563 return spi_flash_wait_till_ready(flash, SPI_FLASH_PROG_TIMEOUT); 564 } 565 566 int sst_write_wp(struct spi_flash *flash, u32 offset, size_t len, 567 const void *buf) 568 { 569 struct spi_slave *spi = flash->spi; 570 size_t actual, cmd_len; 571 int ret; 572 u8 cmd[4]; 573 574 ret = spi_claim_bus(spi); 575 if (ret) { 576 debug("SF: Unable to claim SPI bus\n"); 577 return ret; 578 } 579 580 /* If the data is not word aligned, write out leading single byte */ 581 actual = offset % 2; 582 if (actual) { 583 ret = sst_byte_write(flash, offset, buf); 584 if (ret) 585 goto done; 586 } 587 offset += actual; 588 589 ret = spi_flash_cmd_write_enable(flash); 590 if (ret) 591 goto done; 592 593 cmd_len = 4; 594 cmd[0] = CMD_SST_AAI_WP; 595 cmd[1] = offset >> 16; 596 cmd[2] = offset >> 8; 597 cmd[3] = offset; 598 599 for (; actual < len - 1; actual += 2) { 600 debug("WP[%02x]: 0x%p => cmd = { 0x%02x 0x%06x }\n", 601 spi_w8r8(spi, CMD_READ_STATUS), buf + actual, 602 cmd[0], offset); 603 604 ret = spi_flash_cmd_write(spi, cmd, cmd_len, 605 buf + actual, 2); 606 if (ret) { 607 debug("SF: sst word program failed\n"); 608 break; 609 } 610 611 ret = spi_flash_wait_till_ready(flash, SPI_FLASH_PROG_TIMEOUT); 612 if (ret) 613 break; 614 615 cmd_len = 1; 616 offset += 2; 617 } 618 619 if (!ret) 620 ret = spi_flash_cmd_write_disable(flash); 621 622 /* If there is a single trailing byte, write it out */ 623 if (!ret && actual != len) 624 ret = sst_byte_write(flash, offset, buf + actual); 625 626 done: 627 debug("SF: sst: program %s %zu bytes @ 0x%zx\n", 628 ret ? "failure" : "success", len, offset - actual); 629 630 spi_release_bus(spi); 631 return ret; 632 } 633 634 int sst_write_bp(struct spi_flash *flash, u32 offset, size_t len, 635 const void *buf) 636 { 637 struct spi_slave *spi = flash->spi; 638 size_t actual; 639 int ret; 640 641 ret = spi_claim_bus(spi); 642 if (ret) { 643 debug("SF: Unable to claim SPI bus\n"); 644 return ret; 645 } 646 647 for (actual = 0; actual < len; actual++) { 648 ret = sst_byte_write(flash, offset, buf + actual); 649 if (ret) { 650 debug("SF: sst byte program failed\n"); 651 break; 652 } 653 offset++; 654 } 655 656 if (!ret) 657 ret = spi_flash_cmd_write_disable(flash); 658 659 debug("SF: sst: program %s %zu bytes @ 0x%zx\n", 660 ret ? "failure" : "success", len, offset - actual); 661 662 spi_release_bus(spi); 663 return ret; 664 } 665 #endif 666 667 #if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST) 668 static void stm_get_locked_range(struct spi_flash *flash, u8 sr, loff_t *ofs, 669 u64 *len) 670 { 671 u8 mask = SR_BP2 | SR_BP1 | SR_BP0; 672 int shift = ffs(mask) - 1; 673 int pow; 674 675 if (!(sr & mask)) { 676 /* No protection */ 677 *ofs = 0; 678 *len = 0; 679 } else { 680 pow = ((sr & mask) ^ mask) >> shift; 681 *len = flash->size >> pow; 682 *ofs = flash->size - *len; 683 } 684 } 685 686 /* 687 * Return 1 if the entire region is locked, 0 otherwise 688 */ 689 static int stm_is_locked_sr(struct spi_flash *flash, loff_t ofs, u64 len, 690 u8 sr) 691 { 692 loff_t lock_offs; 693 u64 lock_len; 694 695 stm_get_locked_range(flash, sr, &lock_offs, &lock_len); 696 697 return (ofs + len <= lock_offs + lock_len) && (ofs >= lock_offs); 698 } 699 700 /* 701 * Check if a region of the flash is (completely) locked. See stm_lock() for 702 * more info. 703 * 704 * Returns 1 if entire region is locked, 0 if any portion is unlocked, and 705 * negative on errors. 706 */ 707 int stm_is_locked(struct spi_flash *flash, u32 ofs, size_t len) 708 { 709 int status; 710 u8 sr; 711 712 status = read_sr(flash, &sr); 713 if (status < 0) 714 return status; 715 716 return stm_is_locked_sr(flash, ofs, len, sr); 717 } 718 719 /* 720 * Lock a region of the flash. Compatible with ST Micro and similar flash. 721 * Supports only the block protection bits BP{0,1,2} in the status register 722 * (SR). Does not support these features found in newer SR bitfields: 723 * - TB: top/bottom protect - only handle TB=0 (top protect) 724 * - SEC: sector/block protect - only handle SEC=0 (block protect) 725 * - CMP: complement protect - only support CMP=0 (range is not complemented) 726 * 727 * Sample table portion for 8MB flash (Winbond w25q64fw): 728 * 729 * SEC | TB | BP2 | BP1 | BP0 | Prot Length | Protected Portion 730 * -------------------------------------------------------------------------- 731 * X | X | 0 | 0 | 0 | NONE | NONE 732 * 0 | 0 | 0 | 0 | 1 | 128 KB | Upper 1/64 733 * 0 | 0 | 0 | 1 | 0 | 256 KB | Upper 1/32 734 * 0 | 0 | 0 | 1 | 1 | 512 KB | Upper 1/16 735 * 0 | 0 | 1 | 0 | 0 | 1 MB | Upper 1/8 736 * 0 | 0 | 1 | 0 | 1 | 2 MB | Upper 1/4 737 * 0 | 0 | 1 | 1 | 0 | 4 MB | Upper 1/2 738 * X | X | 1 | 1 | 1 | 8 MB | ALL 739 * 740 * Returns negative on errors, 0 on success. 741 */ 742 int stm_lock(struct spi_flash *flash, u32 ofs, size_t len) 743 { 744 u8 status_old, status_new; 745 u8 mask = SR_BP2 | SR_BP1 | SR_BP0; 746 u8 shift = ffs(mask) - 1, pow, val; 747 int ret; 748 749 ret = read_sr(flash, &status_old); 750 if (ret < 0) 751 return ret; 752 753 /* SPI NOR always locks to the end */ 754 if (ofs + len != flash->size) { 755 /* Does combined region extend to end? */ 756 if (!stm_is_locked_sr(flash, ofs + len, flash->size - ofs - len, 757 status_old)) 758 return -EINVAL; 759 len = flash->size - ofs; 760 } 761 762 /* 763 * Need smallest pow such that: 764 * 765 * 1 / (2^pow) <= (len / size) 766 * 767 * so (assuming power-of-2 size) we do: 768 * 769 * pow = ceil(log2(size / len)) = log2(size) - floor(log2(len)) 770 */ 771 pow = ilog2(flash->size) - ilog2(len); 772 val = mask - (pow << shift); 773 if (val & ~mask) 774 return -EINVAL; 775 776 /* Don't "lock" with no region! */ 777 if (!(val & mask)) 778 return -EINVAL; 779 780 status_new = (status_old & ~mask) | val; 781 782 /* Only modify protection if it will not unlock other areas */ 783 if ((status_new & mask) <= (status_old & mask)) 784 return -EINVAL; 785 786 write_sr(flash, status_new); 787 788 return 0; 789 } 790 791 /* 792 * Unlock a region of the flash. See stm_lock() for more info 793 * 794 * Returns negative on errors, 0 on success. 795 */ 796 int stm_unlock(struct spi_flash *flash, u32 ofs, size_t len) 797 { 798 uint8_t status_old, status_new; 799 u8 mask = SR_BP2 | SR_BP1 | SR_BP0; 800 u8 shift = ffs(mask) - 1, pow, val; 801 int ret; 802 803 ret = read_sr(flash, &status_old); 804 if (ret < 0) 805 return ret; 806 807 /* Cannot unlock; would unlock larger region than requested */ 808 if (stm_is_locked_sr(flash, ofs - flash->erase_size, flash->erase_size, 809 status_old)) 810 return -EINVAL; 811 /* 812 * Need largest pow such that: 813 * 814 * 1 / (2^pow) >= (len / size) 815 * 816 * so (assuming power-of-2 size) we do: 817 * 818 * pow = floor(log2(size / len)) = log2(size) - ceil(log2(len)) 819 */ 820 pow = ilog2(flash->size) - order_base_2(flash->size - (ofs + len)); 821 if (ofs + len == flash->size) { 822 val = 0; /* fully unlocked */ 823 } else { 824 val = mask - (pow << shift); 825 /* Some power-of-two sizes are not supported */ 826 if (val & ~mask) 827 return -EINVAL; 828 } 829 830 status_new = (status_old & ~mask) | val; 831 832 /* Only modify protection if it will not lock other areas */ 833 if ((status_new & mask) >= (status_old & mask)) 834 return -EINVAL; 835 836 write_sr(flash, status_new); 837 838 return 0; 839 } 840 #endif 841 842 843 #if defined(CONFIG_SPI_FLASH_MACRONIX) || defined(CONFIG_SPI_FLASH_GIGADEVICE) 844 static int macronix_quad_enable(struct spi_flash *flash) 845 { 846 u8 qeb_status; 847 int ret; 848 849 ret = read_sr(flash, &qeb_status); 850 if (ret < 0) 851 return ret; 852 853 if (qeb_status & STATUS_QEB_MXIC) 854 return 0; 855 856 ret = write_sr(flash, qeb_status | STATUS_QEB_MXIC); 857 if (ret < 0) 858 return ret; 859 860 /* read SR and check it */ 861 ret = read_sr(flash, &qeb_status); 862 if (!(ret >= 0 && (qeb_status & STATUS_QEB_MXIC))) { 863 printf("SF: Macronix SR Quad bit not clear\n"); 864 return -EINVAL; 865 } 866 867 return ret; 868 } 869 #endif 870 871 #if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND) 872 static int spansion_quad_enable(struct spi_flash *flash) 873 { 874 u8 qeb_status; 875 int ret; 876 877 ret = read_cr(flash, &qeb_status); 878 if (ret < 0) 879 return ret; 880 881 if (qeb_status & STATUS_QEB_WINSPAN) 882 return 0; 883 884 ret = write_cr(flash, qeb_status | STATUS_QEB_WINSPAN); 885 if (ret < 0) 886 return ret; 887 888 /* read CR and check it */ 889 ret = read_cr(flash, &qeb_status); 890 if (!(ret >= 0 && (qeb_status & STATUS_QEB_WINSPAN))) { 891 printf("SF: Spansion CR Quad bit not clear\n"); 892 return -EINVAL; 893 } 894 895 return ret; 896 } 897 #endif 898 899 static const struct spi_flash_info *spi_flash_read_id(struct spi_flash *flash) 900 { 901 int tmp; 902 u8 id[SPI_FLASH_MAX_ID_LEN]; 903 const struct spi_flash_info *info; 904 905 tmp = spi_flash_cmd(flash->spi, CMD_READ_ID, id, SPI_FLASH_MAX_ID_LEN); 906 if (tmp < 0) { 907 printf("SF: error %d reading JEDEC ID\n", tmp); 908 return ERR_PTR(tmp); 909 } 910 911 info = spi_flash_ids; 912 for (; info->name != NULL; info++) { 913 if (info->id_len) { 914 if (!memcmp(info->id, id, info->id_len)) 915 return info; 916 } 917 } 918 919 printf("SF: unrecognized JEDEC id bytes: %02x, %02x, %02x\n", 920 id[0], id[1], id[2]); 921 return ERR_PTR(-ENODEV); 922 } 923 924 static int set_quad_mode(struct spi_flash *flash, 925 const struct spi_flash_info *info) 926 { 927 switch (JEDEC_MFR(info)) { 928 #if defined(CONFIG_SPI_FLASH_MACRONIX) || defined(CONFIG_SPI_FLASH_GIGADEVICE) 929 case SPI_FLASH_CFI_MFR_MACRONIX: 930 case SPI_FLASH_CIF_MFR_GIGADEVICE: 931 return macronix_quad_enable(flash); 932 #endif 933 #if defined(CONFIG_SPI_FLASH_SPANSION) || defined(CONFIG_SPI_FLASH_WINBOND) 934 case SPI_FLASH_CFI_MFR_SPANSION: 935 case SPI_FLASH_CFI_MFR_WINBOND: 936 return spansion_quad_enable(flash); 937 #endif 938 #ifdef CONFIG_SPI_FLASH_STMICRO 939 case SPI_FLASH_CFI_MFR_STMICRO: 940 debug("SF: QEB is volatile for %02x flash\n", JEDEC_MFR(info)); 941 return 0; 942 #endif 943 default: 944 printf("SF: Need set QEB func for %02x flash\n", 945 JEDEC_MFR(info)); 946 return -1; 947 } 948 } 949 950 #if CONFIG_IS_ENABLED(OF_CONTROL) 951 int spi_flash_decode_fdt(struct spi_flash *flash) 952 { 953 #ifdef CONFIG_DM_SPI_FLASH 954 fdt_addr_t addr; 955 fdt_size_t size; 956 957 addr = dev_read_addr_size(flash->dev, "memory-map", &size); 958 if (addr == FDT_ADDR_T_NONE) { 959 debug("%s: Cannot decode address\n", __func__); 960 return 0; 961 } 962 963 if (flash->size > size) { 964 debug("%s: Memory map must cover entire device\n", __func__); 965 return -1; 966 } 967 flash->memory_map = map_sysmem(addr, size); 968 #endif 969 970 return 0; 971 } 972 #endif /* CONFIG_IS_ENABLED(OF_CONTROL) */ 973 974 int spi_flash_scan(struct spi_flash *flash) 975 { 976 struct spi_slave *spi = flash->spi; 977 const struct spi_flash_info *info = NULL; 978 int ret; 979 980 info = spi_flash_read_id(flash); 981 if (IS_ERR_OR_NULL(info)) 982 return -ENOENT; 983 984 /* 985 * Flash powers up read-only, so clear BP# bits. 986 * 987 * Note on some flash (like Macronix), QE (quad enable) bit is in the 988 * same status register as BP# bits, and we need preserve its original 989 * value during a reboot cycle as this is required by some platforms 990 * (like Intel ICH SPI controller working under descriptor mode). 991 */ 992 if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_ATMEL || 993 (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SST) || 994 (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX)) { 995 u8 sr = 0; 996 997 if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_MACRONIX) { 998 read_sr(flash, &sr); 999 sr &= STATUS_QEB_MXIC; 1000 } 1001 write_sr(flash, sr); 1002 } 1003 1004 flash->name = info->name; 1005 flash->memory_map = spi->memory_map; 1006 1007 if (info->flags & SST_WR) 1008 flash->flags |= SNOR_F_SST_WR; 1009 1010 #ifndef CONFIG_DM_SPI_FLASH 1011 flash->write = spi_flash_cmd_write_ops; 1012 #if defined(CONFIG_SPI_FLASH_SST) 1013 if (flash->flags & SNOR_F_SST_WR) { 1014 if (spi->mode & SPI_TX_BYTE) 1015 flash->write = sst_write_bp; 1016 else 1017 flash->write = sst_write_wp; 1018 } 1019 #endif 1020 flash->erase = spi_flash_cmd_erase_ops; 1021 flash->read = spi_flash_cmd_read_ops; 1022 #endif 1023 1024 #if defined(CONFIG_SPI_FLASH_STMICRO) || defined(CONFIG_SPI_FLASH_SST) 1025 /* NOR protection support for STmicro/Micron chips and similar */ 1026 if (JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_STMICRO || 1027 JEDEC_MFR(info) == SPI_FLASH_CFI_MFR_SST) { 1028 flash->flash_lock = stm_lock; 1029 flash->flash_unlock = stm_unlock; 1030 flash->flash_is_locked = stm_is_locked; 1031 } 1032 #endif 1033 1034 /* Compute the flash size */ 1035 flash->shift = (flash->dual_flash & SF_DUAL_PARALLEL_FLASH) ? 1 : 0; 1036 flash->page_size = info->page_size; 1037 /* 1038 * The Spansion S25FL032P and S25FL064P have 256b pages, yet use the 1039 * 0x4d00 Extended JEDEC code. The rest of the Spansion flashes with 1040 * the 0x4d00 Extended JEDEC code have 512b pages. All of the others 1041 * have 256b pages. 1042 */ 1043 if (JEDEC_EXT(info) == 0x4d00) { 1044 if ((JEDEC_ID(info) != 0x0215) && 1045 (JEDEC_ID(info) != 0x0216)) 1046 flash->page_size = 512; 1047 } 1048 flash->page_size <<= flash->shift; 1049 flash->sector_size = info->sector_size << flash->shift; 1050 flash->size = flash->sector_size * info->n_sectors << flash->shift; 1051 #ifdef CONFIG_SF_DUAL_FLASH 1052 if (flash->dual_flash & SF_DUAL_STACKED_FLASH) 1053 flash->size <<= 1; 1054 #endif 1055 1056 #ifdef CONFIG_SPI_FLASH_USE_4K_SECTORS 1057 /* Compute erase sector and command */ 1058 if (info->flags & SECT_4K) { 1059 flash->erase_cmd = CMD_ERASE_4K; 1060 flash->erase_size = 4096 << flash->shift; 1061 } else 1062 #endif 1063 { 1064 flash->erase_cmd = CMD_ERASE_64K; 1065 flash->erase_size = flash->sector_size; 1066 } 1067 1068 /* Now erase size becomes valid sector size */ 1069 flash->sector_size = flash->erase_size; 1070 1071 /* Look for read commands */ 1072 flash->read_cmd = CMD_READ_ARRAY_FAST; 1073 if (spi->mode & SPI_RX_SLOW) 1074 flash->read_cmd = CMD_READ_ARRAY_SLOW; 1075 else if (spi->mode & SPI_RX_QUAD && info->flags & RD_QUAD) 1076 flash->read_cmd = CMD_READ_QUAD_OUTPUT_FAST; 1077 else if (spi->mode & SPI_RX_DUAL && info->flags & RD_DUAL) 1078 flash->read_cmd = CMD_READ_DUAL_OUTPUT_FAST; 1079 1080 /* Look for write commands */ 1081 if (info->flags & WR_QPP && spi->mode & SPI_TX_QUAD) 1082 flash->write_cmd = CMD_QUAD_PAGE_PROGRAM; 1083 else 1084 /* Go for default supported write cmd */ 1085 flash->write_cmd = CMD_PAGE_PROGRAM; 1086 1087 /* Set the quad enable bit - only for quad commands */ 1088 if ((flash->read_cmd == CMD_READ_QUAD_OUTPUT_FAST) || 1089 (flash->read_cmd == CMD_READ_QUAD_IO_FAST) || 1090 (flash->write_cmd == CMD_QUAD_PAGE_PROGRAM)) { 1091 ret = set_quad_mode(flash, info); 1092 if (ret) { 1093 debug("SF: Fail to set QEB for %02x\n", 1094 JEDEC_MFR(info)); 1095 return -EINVAL; 1096 } 1097 } 1098 1099 /* Read dummy_byte: dummy byte is determined based on the 1100 * dummy cycles of a particular command. 1101 * Fast commands - dummy_byte = dummy_cycles/8 1102 * I/O commands- dummy_byte = (dummy_cycles * no.of lines)/8 1103 * For I/O commands except cmd[0] everything goes on no.of lines 1104 * based on particular command but incase of fast commands except 1105 * data all go on single line irrespective of command. 1106 */ 1107 switch (flash->read_cmd) { 1108 case CMD_READ_QUAD_IO_FAST: 1109 flash->dummy_byte = 2; 1110 break; 1111 case CMD_READ_ARRAY_SLOW: 1112 flash->dummy_byte = 0; 1113 break; 1114 default: 1115 flash->dummy_byte = 1; 1116 } 1117 1118 #ifdef CONFIG_SPI_FLASH_STMICRO 1119 if (info->flags & E_FSR) 1120 flash->flags |= SNOR_F_USE_FSR; 1121 #endif 1122 1123 /* Configure the BAR - discover bank cmds and read current bank */ 1124 #ifdef CONFIG_SPI_FLASH_BAR 1125 ret = read_bar(flash, info); 1126 if (ret < 0) 1127 return ret; 1128 #endif 1129 1130 #if CONFIG_IS_ENABLED(OF_CONTROL) && !CONFIG_IS_ENABLED(OF_PLATDATA) 1131 ret = spi_flash_decode_fdt(flash); 1132 if (ret) { 1133 debug("SF: FDT decode error\n"); 1134 return -EINVAL; 1135 } 1136 #endif 1137 1138 #ifndef CONFIG_SPL_BUILD 1139 printf("SF: Detected %s with page size ", flash->name); 1140 print_size(flash->page_size, ", erase size "); 1141 print_size(flash->erase_size, ", total "); 1142 print_size(flash->size, ""); 1143 if (flash->memory_map) 1144 printf(", mapped at %p", flash->memory_map); 1145 puts("\n"); 1146 #endif 1147 1148 #ifndef CONFIG_SPI_FLASH_BAR 1149 if (((flash->dual_flash == SF_SINGLE_FLASH) && 1150 (flash->size > SPI_FLASH_16MB_BOUN)) || 1151 ((flash->dual_flash > SF_SINGLE_FLASH) && 1152 (flash->size > SPI_FLASH_16MB_BOUN << 1))) { 1153 puts("SF: Warning - Only lower 16MiB accessible,"); 1154 puts(" Full access #define CONFIG_SPI_FLASH_BAR\n"); 1155 } 1156 #endif 1157 1158 return 0; 1159 } 1160