Blame view
include/spi_flash.h
4.31 KB
d25ce7d24 SPI Flash subsystem |
1 |
/* |
a5e8199a1 sf: spi_flash cle... |
2 |
* Common SPI flash Interface |
d25ce7d24 SPI Flash subsystem |
3 4 |
* * Copyright (C) 2008 Atmel Corporation |
a5e8199a1 sf: spi_flash cle... |
5 |
* Copyright (C) 2013 Jagannadha Sutradharudu Teki, Xilinx Inc. |
d25ce7d24 SPI Flash subsystem |
6 7 8 9 10 11 |
* * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License |
3765b3e7b Coding Style clea... |
12 |
* version 2 as published by the Free Software Foundation. |
d25ce7d24 SPI Flash subsystem |
13 |
*/ |
a5e8199a1 sf: spi_flash cle... |
14 |
|
d25ce7d24 SPI Flash subsystem |
15 16 17 18 |
#ifndef _SPI_FLASH_H_ #define _SPI_FLASH_H_ #include <spi.h> |
e06ab6546 spi_flash.h: pull... |
19 |
#include <linux/types.h> |
32b112739 sf: Add spi_boot(... |
20 |
#include <linux/compiler.h> |
d25ce7d24 SPI Flash subsystem |
21 |
|
2ba863fae sf: Code cleanups |
22 23 24 25 |
/* sf param flags */ #define SECT_4K 1 << 1 #define SECT_32K 1 << 2 #define E_FSR 1 << 3 |
3163aaa63 sf: Add quad read... |
26 27 28 |
#define WR_QPP 1 << 4 /* Enum list - Full read commands */ |
4e09cc1e2 sf: Add extended ... |
29 30 31 32 |
enum spi_read_cmds { ARRAY_SLOW = 1 << 0, DUAL_OUTPUT_FAST = 1 << 1, DUAL_IO_FAST = 1 << 2, |
3163aaa63 sf: Add quad read... |
33 |
QUAD_OUTPUT_FAST = 1 << 3, |
c4ba0d82d sf: Add QUAD_IO_F... |
34 |
QUAD_IO_FAST = 1 << 4, |
4e09cc1e2 sf: Add extended ... |
35 36 |
}; #define RD_EXTN ARRAY_SLOW | DUAL_OUTPUT_FAST | DUAL_IO_FAST |
c4ba0d82d sf: Add QUAD_IO_F... |
37 |
#define RD_FULL RD_EXTN | QUAD_OUTPUT_FAST | QUAD_IO_FAST |
4e09cc1e2 sf: Add extended ... |
38 |
|
f77f46911 sf: Add dual memo... |
39 40 41 42 |
/* Dual SPI flash memories */ enum spi_dual_flash { SF_SINGLE_FLASH = 0, SF_DUAL_STACKED_FLASH = 1 << 0, |
056fbc73d sf: Add dual memo... |
43 |
SF_DUAL_PARALLEL_FLASH = 1 << 1, |
f77f46911 sf: Add dual memo... |
44 |
}; |
7ab35d922 sf: Add proper co... |
45 |
/** |
33adfb5f9 sf: Separate the ... |
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
* struct spi_flash_params - SPI/QSPI flash device params structure * * @name: Device name ([MANUFLETTER][DEVTYPE][DENSITY][EXTRAINFO]) * @jedec: Device jedec ID (0x[1byte_manuf_id][2byte_dev_id]) * @ext_jedec: Device ext_jedec ID * @sector_size: Sector size of this device * @nr_sectors: No.of sectors on this device * @e_rd_cmd: Enum list for read commands * @flags: Importent param, for flash specific behaviour */ struct spi_flash_params { const char *name; u32 jedec; u16 ext_jedec; u32 sector_size; u32 nr_sectors; u8 e_rd_cmd; u16 flags; }; extern const struct spi_flash_params spi_flash_params_table[]; /** |
7ab35d922 sf: Add proper co... |
69 70 71 72 |
* struct spi_flash - SPI flash structure * * @spi: SPI slave * @name: Name of SPI flash |
056fbc73d sf: Add dual memo... |
73 74 |
* @dual_flash: Indicates dual flash memories - dual stacked, parallel * @shift: Flash shift useful in dual parallel |
7ab35d922 sf: Add proper co... |
75 76 77 |
* @size: Total flash size * @page_size: Write (page) size * @sector_size: Sector size |
ce22b922d sf: Minor cleanups |
78 |
* @erase_size: Erase size |
7ab35d922 sf: Add proper co... |
79 80 81 82 83 |
* @bank_read_cmd: Bank read cmd * @bank_write_cmd: Bank write cmd * @bank_curr: Current flash bank * @poll_cmd: Poll cmd - for flash erase/program * @erase_cmd: Erase cmd 4K, 32K, 64K |
3163aaa63 sf: Add quad read... |
84 85 |
* @read_cmd: Read cmd - Array Fast, Extn read and quad read. * @write_cmd: Write cmd - page and quad program. |
ff063ed48 sf: Discover read... |
86 |
* @dummy_byte: Dummy cycles for read operation. |
ce22b922d sf: Minor cleanups |
87 |
* @memory_map: Address of read-only SPI flash access |
7ab35d922 sf: Add proper co... |
88 89 90 91 92 93 94 95 |
* @read: Flash read ops: Read len bytes at offset into buf * Supported cmds: Fast Array Read * @write: Flash write ops: Write len bytes from buf into offeset * Supported cmds: Page Program * @erase: Flash erase ops: Erase len bytes from offset * Supported cmds: Sector erase 4K, 32K, 64K * return 0 - Sucess, 1 - Failure */ |
d25ce7d24 SPI Flash subsystem |
96 97 |
struct spi_flash { struct spi_slave *spi; |
7ab35d922 sf: Add proper co... |
98 |
const char *name; |
f77f46911 sf: Add dual memo... |
99 |
u8 dual_flash; |
056fbc73d sf: Add dual memo... |
100 |
u8 shift; |
d25ce7d24 SPI Flash subsystem |
101 |
|
7ab35d922 sf: Add proper co... |
102 103 104 105 |
u32 size; u32 page_size; u32 sector_size; u32 erase_size; |
1dcd6d038 sf: Add bank addr... |
106 |
#ifdef CONFIG_SPI_FLASH_BAR |
7ab35d922 sf: Add proper co... |
107 108 109 |
u8 bank_read_cmd; u8 bank_write_cmd; u8 bank_curr; |
1dcd6d038 sf: Add bank addr... |
110 |
#endif |
7ab35d922 sf: Add proper co... |
111 112 |
u8 poll_cmd; u8 erase_cmd; |
4e09cc1e2 sf: Add extended ... |
113 |
u8 read_cmd; |
3163aaa63 sf: Add quad read... |
114 |
u8 write_cmd; |
ff063ed48 sf: Discover read... |
115 |
u8 dummy_byte; |
615a15616 sf: Add flag stat... |
116 |
|
7ab35d922 sf: Add proper co... |
117 118 119 120 121 |
void *memory_map; int (*read)(struct spi_flash *flash, u32 offset, size_t len, void *buf); int (*write)(struct spi_flash *flash, u32 offset, size_t len, const void *buf); int (*erase)(struct spi_flash *flash, u32 offset, size_t len); |
d25ce7d24 SPI Flash subsystem |
122 123 124 125 |
}; struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, unsigned int max_hz, unsigned int spi_mode); |
0efc02499 spi_flash: Add sp... |
126 127 128 129 130 131 132 133 134 135 136 137 |
/** * Set up a new SPI flash from an fdt node * * @param blob Device tree blob * @param slave_node Pointer to this SPI slave node in the device tree * @param spi_node Cached pointer to the SPI interface this node belongs * to * @return 0 if ok, -1 on error */ struct spi_flash *spi_flash_probe_fdt(const void *blob, int slave_node, int spi_node); |
d25ce7d24 SPI Flash subsystem |
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
void spi_flash_free(struct spi_flash *flash); static inline int spi_flash_read(struct spi_flash *flash, u32 offset, size_t len, void *buf) { return flash->read(flash, offset, len, buf); } static inline int spi_flash_write(struct spi_flash *flash, u32 offset, size_t len, const void *buf) { return flash->write(flash, offset, len, buf); } static inline int spi_flash_erase(struct spi_flash *flash, u32 offset, size_t len) { return flash->erase(flash, offset, len); } |
32b112739 sf: Add spi_boot(... |
157 |
void spi_boot(void) __noreturn; |
d25ce7d24 SPI Flash subsystem |
158 |
#endif /* _SPI_FLASH_H_ */ |