diff options
Diffstat (limited to 'drivers/net/sfc/spi.h')
-rw-r--r-- | drivers/net/sfc/spi.h | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/drivers/net/sfc/spi.h b/drivers/net/sfc/spi.h index feef61942377..c4aca132348a 100644 --- a/drivers/net/sfc/spi.h +++ b/drivers/net/sfc/spi.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define SPI_WRDI 0x04 /* Reset write enable latch */ | 25 | #define SPI_WRDI 0x04 /* Reset write enable latch */ |
26 | #define SPI_RDSR 0x05 /* Read status register */ | 26 | #define SPI_RDSR 0x05 /* Read status register */ |
27 | #define SPI_WREN 0x06 /* Set write enable latch */ | 27 | #define SPI_WREN 0x06 /* Set write enable latch */ |
28 | #define SPI_SST_EWSR 0x50 /* SST: Enable write to status register */ | ||
28 | 29 | ||
29 | #define SPI_STATUS_WPEN 0x80 /* Write-protect pin enabled */ | 30 | #define SPI_STATUS_WPEN 0x80 /* Write-protect pin enabled */ |
30 | #define SPI_STATUS_BP2 0x10 /* Block protection bit 2 */ | 31 | #define SPI_STATUS_BP2 0x10 /* Block protection bit 2 */ |
@@ -36,6 +37,7 @@ | |||
36 | /** | 37 | /** |
37 | * struct efx_spi_device - an Efx SPI (Serial Peripheral Interface) device | 38 | * struct efx_spi_device - an Efx SPI (Serial Peripheral Interface) device |
38 | * @efx: The Efx controller that owns this device | 39 | * @efx: The Efx controller that owns this device |
40 | * @mtd: MTD state | ||
39 | * @device_id: Controller's id for the device | 41 | * @device_id: Controller's id for the device |
40 | * @size: Size (in bytes) | 42 | * @size: Size (in bytes) |
41 | * @addr_len: Number of address bytes in read/write commands | 43 | * @addr_len: Number of address bytes in read/write commands |
@@ -44,23 +46,51 @@ | |||
44 | * use bit 3 of the command byte as address bit A8, rather | 46 | * use bit 3 of the command byte as address bit A8, rather |
45 | * than having a two-byte address. If this flag is set, then | 47 | * than having a two-byte address. If this flag is set, then |
46 | * commands should be munged in this way. | 48 | * commands should be munged in this way. |
49 | * @erase_command: Erase command (or 0 if sector erase not needed). | ||
50 | * @erase_size: Erase sector size (in bytes) | ||
51 | * Erase commands affect sectors with this size and alignment. | ||
52 | * This must be a power of two. | ||
47 | * @block_size: Write block size (in bytes). | 53 | * @block_size: Write block size (in bytes). |
48 | * Write commands are limited to blocks with this size and alignment. | 54 | * Write commands are limited to blocks with this size and alignment. |
49 | * @read: Read function for the device | ||
50 | * @write: Write function for the device | ||
51 | */ | 55 | */ |
52 | struct efx_spi_device { | 56 | struct efx_spi_device { |
53 | struct efx_nic *efx; | 57 | struct efx_nic *efx; |
58 | #ifdef CONFIG_SFC_MTD | ||
59 | void *mtd; | ||
60 | #endif | ||
54 | int device_id; | 61 | int device_id; |
55 | unsigned int size; | 62 | unsigned int size; |
56 | unsigned int addr_len; | 63 | unsigned int addr_len; |
57 | unsigned int munge_address:1; | 64 | unsigned int munge_address:1; |
65 | u8 erase_command; | ||
66 | unsigned int erase_size; | ||
58 | unsigned int block_size; | 67 | unsigned int block_size; |
59 | }; | 68 | }; |
60 | 69 | ||
70 | int falcon_spi_cmd(const struct efx_spi_device *spi, unsigned int command, | ||
71 | int address, const void* in, void *out, unsigned int len); | ||
72 | int falcon_spi_fast_wait(const struct efx_spi_device *spi); | ||
61 | int falcon_spi_read(const struct efx_spi_device *spi, loff_t start, | 73 | int falcon_spi_read(const struct efx_spi_device *spi, loff_t start, |
62 | size_t len, size_t *retlen, u8 *buffer); | 74 | size_t len, size_t *retlen, u8 *buffer); |
63 | int falcon_spi_write(const struct efx_spi_device *spi, loff_t start, | 75 | int falcon_spi_write(const struct efx_spi_device *spi, loff_t start, |
64 | size_t len, size_t *retlen, const u8 *buffer); | 76 | size_t len, size_t *retlen, const u8 *buffer); |
65 | 77 | ||
78 | /* | ||
79 | * SFC4000 flash is partitioned into: | ||
80 | * 0-0x400 chip and board config (see falcon_hwdefs.h) | ||
81 | * 0x400-0x8000 unused (or may contain VPD if EEPROM not present) | ||
82 | * 0x8000-end boot code (mapped to PCI expansion ROM) | ||
83 | * SFC4000 small EEPROM (size < 0x400) is used for VPD only. | ||
84 | * SFC4000 large EEPROM (size >= 0x400) is partitioned into: | ||
85 | * 0-0x400 chip and board config | ||
86 | * configurable VPD | ||
87 | * 0x800-0x1800 boot config | ||
88 | * Aside from the chip and board config, all of these are optional and may | ||
89 | * be absent or truncated depending on the devices used. | ||
90 | */ | ||
91 | #define FALCON_NVCONFIG_END 0x400U | ||
92 | #define FALCON_FLASH_BOOTCODE_START 0x8000U | ||
93 | #define EFX_EEPROM_BOOTCONFIG_START 0x800U | ||
94 | #define EFX_EEPROM_BOOTCONFIG_END 0x1800U | ||
95 | |||
66 | #endif /* EFX_SPI_H */ | 96 | #endif /* EFX_SPI_H */ |