| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2008, Network Appliance Inc. | 2 * Copyright 2008, Network Appliance Inc. |
| 3 * Author: Jason McMullan <mcmullan <at> netapp.com> | 3 * Author: Jason McMullan <mcmullan <at> netapp.com> |
| 4 * Licensed under the GPL-2 or later. | 4 * Licensed under the GPL-2 or later. |
| 5 */ | 5 */ |
| 6 | 6 |
| 7 #include <common.h> | 7 #include <common.h> |
| 8 #include <malloc.h> | 8 #include <malloc.h> |
| 9 #include <spi_flash.h> | 9 #include <spi_flash.h> |
| 10 | 10 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 #define WINBOND_ID_W25X10A 0x3011 | 27 #define WINBOND_ID_W25X10A 0x3011 |
| 28 #define WINBOND_ID_W25X20A 0x3012 | 28 #define WINBOND_ID_W25X20A 0x3012 |
| 29 #define WINBOND_ID_W25X40A 0x3013 | 29 #define WINBOND_ID_W25X40A 0x3013 |
| 30 #define WINBOND_ID_W25X80A 0x3014 | 30 #define WINBOND_ID_W25X80A 0x3014 |
| 31 | 31 |
| 32 #define WINBOND_ID_W25X16 0x3015 | 32 #define WINBOND_ID_W25X16 0x3015 |
| 33 #define WINBOND_ID_W25X32 0x3016 | 33 #define WINBOND_ID_W25X32 0x3016 |
| 34 #define WINBOND_ID_W25X64 0x3017 | 34 #define WINBOND_ID_W25X64 0x3017 |
| 35 | 35 |
| 36 #define WINBOND_ID_W25Q16B 0x4015 | 36 #define WINBOND_ID_W25Q16B 0x4015 |
| 37 #define WINBOND_ID_W25Q32B 0x4016 |
| 37 | 38 |
| 38 #define WINBOND_SR_WIP (1 << 0) /* Write-in-Progress */ | 39 #define WINBOND_SR_WIP (1 << 0) /* Write-in-Progress */ |
| 39 | 40 |
| 40 struct winbond_spi_flash_params { | 41 struct winbond_spi_flash_params { |
| 41 uint16_t id; | 42 uint16_t id; |
| 42 /* Log2 of page size in power-of-two mode */ | 43 /* Log2 of page size in power-of-two mode */ |
| 43 uint8_t l2_page_size; | 44 uint8_t l2_page_size; |
| 44 uint16_t pages_per_sector; | 45 uint16_t pages_per_sector; |
| 45 uint16_t sectors_per_block; | 46 uint16_t sectors_per_block; |
| 46 uint8_t nr_blocks; | 47 uint8_t nr_blocks; |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 .name = "W25X64", | 118 .name = "W25X64", |
| 118 }, | 119 }, |
| 119 { | 120 { |
| 120 .id = WINBOND_ID_W25Q16B, | 121 .id = WINBOND_ID_W25Q16B, |
| 121 .l2_page_size = 8, | 122 .l2_page_size = 8, |
| 122 .pages_per_sector = 16, | 123 .pages_per_sector = 16, |
| 123 .sectors_per_block = 16, | 124 .sectors_per_block = 16, |
| 124 .nr_blocks = 32, | 125 .nr_blocks = 32, |
| 125 .name = "W25Q16B", | 126 .name = "W25Q16B", |
| 126 }, | 127 }, |
| 128 { |
| 129 .id = WINBOND_ID_W25Q32B, |
| 130 .l2_page_size = 8, |
| 131 .pages_per_sector = 16, |
| 132 .sectors_per_block = 16, |
| 133 .nr_blocks = 64, |
| 134 .name = "W25Q32B", |
| 135 }, |
| 127 | 136 |
| 128 }; | 137 }; |
| 129 | 138 |
| 130 static int winbond_wait_ready(struct spi_flash *flash, unsigned long timeout) | 139 static int winbond_wait_ready(struct spi_flash *flash, unsigned long timeout) |
| 131 { | 140 { |
| 132 struct spi_slave *spi = flash->spi; | 141 struct spi_slave *spi = flash->spi; |
| 133 unsigned long timebase; | 142 unsigned long timebase; |
| 134 int ret; | 143 int ret; |
| 135 u8 status; | 144 u8 status; |
| 136 u8 cmd[4] = { CMD_W25_RDSR, 0xff, 0xff, 0xff }; | 145 u8 cmd[4] = { CMD_W25_RDSR, 0xff, 0xff, 0xff }; |
| (...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 #endif | 398 #endif |
| 390 stm->flash.size = page_size * params->pages_per_sector | 399 stm->flash.size = page_size * params->pages_per_sector |
| 391 * params->sectors_per_block | 400 * params->sectors_per_block |
| 392 * params->nr_blocks; | 401 * params->nr_blocks; |
| 393 | 402 |
| 394 debug("SF: Detected %s with page size %lu, total %lu bytes\n", | 403 debug("SF: Detected %s with page size %lu, total %lu bytes\n", |
| 395 params->name, page_size, stm->flash.size); | 404 params->name, page_size, stm->flash.size); |
| 396 | 405 |
| 397 return &stm->flash; | 406 return &stm->flash; |
| 398 } | 407 } |
| OLD | NEW |