Blame view
include/spi_flash.h
4.67 KB
d25ce7d24
|
1 |
/* |
a5e8199a1
|
2 |
* Common SPI flash Interface |
d25ce7d24
|
3 4 |
* * Copyright (C) 2008 Atmel Corporation |
a5e8199a1
|
5 |
* Copyright (C) 2013 Jagannadha Sutradharudu Teki, Xilinx Inc. |
d25ce7d24
|
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
|
12 |
* version 2 as published by the Free Software Foundation. |
d25ce7d24
|
13 |
*/ |
a5e8199a1
|
14 |
|
d25ce7d24
|
15 16 17 18 |
#ifndef _SPI_FLASH_H_ #define _SPI_FLASH_H_ #include <spi.h> |
e06ab6546
|
19 |
#include <linux/types.h> |
32b112739
|
20 |
#include <linux/compiler.h> |
d25ce7d24
|
21 |
|
88e34e5ff
|
22 23 24 25 26 27 28 29 30 31 32 33 |
#ifndef CONFIG_SF_DEFAULT_SPEED # define CONFIG_SF_DEFAULT_SPEED 1000000 #endif #ifndef CONFIG_SF_DEFAULT_MODE # define CONFIG_SF_DEFAULT_MODE SPI_MODE_3 #endif #ifndef CONFIG_SF_DEFAULT_CS # define CONFIG_SF_DEFAULT_CS 0 #endif #ifndef CONFIG_SF_DEFAULT_BUS # define CONFIG_SF_DEFAULT_BUS 0 #endif |
2ba863fae
|
34 35 36 37 |
/* sf param flags */ #define SECT_4K 1 << 1 #define SECT_32K 1 << 2 #define E_FSR 1 << 3 |
3163aaa63
|
38 39 40 |
#define WR_QPP 1 << 4 /* Enum list - Full read commands */ |
4e09cc1e2
|
41 42 43 44 |
enum spi_read_cmds { ARRAY_SLOW = 1 << 0, DUAL_OUTPUT_FAST = 1 << 1, DUAL_IO_FAST = 1 << 2, |
3163aaa63
|
45 |
QUAD_OUTPUT_FAST = 1 << 3, |
c4ba0d82d
|
46 |
QUAD_IO_FAST = 1 << 4, |
4e09cc1e2
|
47 48 |
}; #define RD_EXTN ARRAY_SLOW | DUAL_OUTPUT_FAST | DUAL_IO_FAST |
c4ba0d82d
|
49 |
#define RD_FULL RD_EXTN | QUAD_OUTPUT_FAST | QUAD_IO_FAST |
4e09cc1e2
|
50 |
|
f77f46911
|
51 52 53 54 |
/* Dual SPI flash memories */ enum spi_dual_flash { SF_SINGLE_FLASH = 0, SF_DUAL_STACKED_FLASH = 1 << 0, |
056fbc73d
|
55 |
SF_DUAL_PARALLEL_FLASH = 1 << 1, |
f77f46911
|
56 |
}; |
7ab35d922
|
57 |
/** |
33adfb5f9
|
58 59 60 61 62 63 64 65 |
* 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 |
801cec590
|
66 |
* @flags: Important param, for flash specific behaviour |
33adfb5f9
|
67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
*/ 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
|
81 82 83 84 |
* struct spi_flash - SPI flash structure * * @spi: SPI slave * @name: Name of SPI flash |
056fbc73d
|
85 86 |
* @dual_flash: Indicates dual flash memories - dual stacked, parallel * @shift: Flash shift useful in dual parallel |
7ab35d922
|
87 88 89 |
* @size: Total flash size * @page_size: Write (page) size * @sector_size: Sector size |
ce22b922d
|
90 |
* @erase_size: Erase size |
7ab35d922
|
91 92 93 94 95 |
* @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
|
96 97 |
* @read_cmd: Read cmd - Array Fast, Extn read and quad read. * @write_cmd: Write cmd - page and quad program. |
ff063ed48
|
98 |
* @dummy_byte: Dummy cycles for read operation. |
ce22b922d
|
99 |
* @memory_map: Address of read-only SPI flash access |
7ab35d922
|
100 101 |
* @read: Flash read ops: Read len bytes at offset into buf * Supported cmds: Fast Array Read |
801cec590
|
102 |
* @write: Flash write ops: Write len bytes from buf into offset |
7ab35d922
|
103 104 105 |
* Supported cmds: Page Program * @erase: Flash erase ops: Erase len bytes from offset * Supported cmds: Sector erase 4K, 32K, 64K |
801cec590
|
106 |
* return 0 - Success, 1 - Failure |
7ab35d922
|
107 |
*/ |
d25ce7d24
|
108 109 |
struct spi_flash { struct spi_slave *spi; |
7ab35d922
|
110 |
const char *name; |
f77f46911
|
111 |
u8 dual_flash; |
056fbc73d
|
112 |
u8 shift; |
d25ce7d24
|
113 |
|
7ab35d922
|
114 115 116 117 |
u32 size; u32 page_size; u32 sector_size; u32 erase_size; |
1dcd6d038
|
118 |
#ifdef CONFIG_SPI_FLASH_BAR |
7ab35d922
|
119 120 121 |
u8 bank_read_cmd; u8 bank_write_cmd; u8 bank_curr; |
1dcd6d038
|
122 |
#endif |
7ab35d922
|
123 124 |
u8 poll_cmd; u8 erase_cmd; |
4e09cc1e2
|
125 |
u8 read_cmd; |
3163aaa63
|
126 |
u8 write_cmd; |
ff063ed48
|
127 |
u8 dummy_byte; |
615a15616
|
128 |
|
7ab35d922
|
129 130 131 132 133 |
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
|
134 135 136 137 |
}; struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, unsigned int max_hz, unsigned int spi_mode); |
0efc02499
|
138 139 140 141 142 143 144 145 146 147 148 149 |
/** * 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
|
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
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
|
169 |
void spi_boot(void) __noreturn; |
1eaa742d8
|
170 |
void spi_spl_load_image(uint32_t offs, unsigned int size, void *vdst); |
32b112739
|
171 |
|
d25ce7d24
|
172 |
#endif /* _SPI_FLASH_H_ */ |