Blame view
include/spi_flash.h
5.83 KB
83d290c56 SPDX: Convert all... |
1 |
/* SPDX-License-Identifier: GPL-2.0 */ |
d25ce7d24 SPI Flash subsystem |
2 |
/* |
a5e8199a1 sf: spi_flash cle... |
3 |
* Common SPI flash Interface |
d25ce7d24 SPI Flash subsystem |
4 5 |
* * Copyright (C) 2008 Atmel Corporation |
a5e8199a1 sf: spi_flash cle... |
6 |
* Copyright (C) 2013 Jagannadha Sutradharudu Teki, Xilinx Inc. |
d25ce7d24 SPI Flash subsystem |
7 |
*/ |
a5e8199a1 sf: spi_flash cle... |
8 |
|
d25ce7d24 SPI Flash subsystem |
9 10 |
#ifndef _SPI_FLASH_H_ #define _SPI_FLASH_H_ |
4c2dbefde dm: sf: Add a ucl... |
11 |
#include <dm.h> /* Because we dereference struct udevice here */ |
e06ab6546 spi_flash.h: pull... |
12 |
#include <linux/types.h> |
c4e886230 mtd: spi: Switch ... |
13 |
#include <linux/mtd/spi-nor.h> |
d25ce7d24 SPI Flash subsystem |
14 |
|
abe66b1b5 Convert CONFIG_EN... |
15 16 17 18 19 20 21 22 23 24 25 26 27 |
/* by default ENV use the same parameters than SF command */ #ifndef CONFIG_ENV_SPI_BUS # define CONFIG_ENV_SPI_BUS CONFIG_SF_DEFAULT_BUS #endif #ifndef CONFIG_ENV_SPI_CS # define CONFIG_ENV_SPI_CS CONFIG_SF_DEFAULT_CS #endif #ifndef CONFIG_ENV_SPI_MAX_HZ # define CONFIG_ENV_SPI_MAX_HZ CONFIG_SF_DEFAULT_SPEED #endif #ifndef CONFIG_ENV_SPI_MODE # define CONFIG_ENV_SPI_MODE CONFIG_SF_DEFAULT_MODE #endif |
ff0960f9a sf: Tidy up publi... |
28 |
struct spi_slave; |
33adfb5f9 sf: Separate the ... |
29 |
|
4c2dbefde dm: sf: Add a ucl... |
30 31 32 33 34 |
struct dm_spi_flash_ops { int (*read)(struct udevice *dev, u32 offset, size_t len, void *buf); int (*write)(struct udevice *dev, u32 offset, size_t len, const void *buf); int (*erase)(struct udevice *dev, u32 offset, size_t len); |
a58986ca8 sf: Add a method ... |
35 36 37 38 39 40 41 42 43 44 45 46 47 |
/** * get_sw_write_prot() - Check state of software write-protect feature * * SPI flash chips can lock a region of the flash defined by a * 'protected area'. This function checks if this protected area is * defined. * * @dev: SPI flash device * @return 0 if no region is write-protected, 1 if a region is * write-protected, -ENOSYS if the driver does not implement this, * other -ve value on error */ int (*get_sw_write_prot)(struct udevice *dev); |
d25ce7d24 SPI Flash subsystem |
48 |
}; |
4c2dbefde dm: sf: Add a ucl... |
49 50 51 52 |
/* Access the serial operations for a device */ #define sf_get_ops(dev) ((struct dm_spi_flash_ops *)(dev)->driver->ops) #ifdef CONFIG_DM_SPI_FLASH |
8d987abc6 dm: sf: Add drive... |
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
/** * spi_flash_read_dm() - Read data from SPI flash * * @dev: SPI flash device * @offset: Offset into device in bytes to read from * @len: Number of bytes to read * @buf: Buffer to put the data that is read * @return 0 if OK, -ve on error */ int spi_flash_read_dm(struct udevice *dev, u32 offset, size_t len, void *buf); /** * spi_flash_write_dm() - Write data to SPI flash * * @dev: SPI flash device * @offset: Offset into device in bytes to write to * @len: Number of bytes to write * @buf: Buffer containing bytes to write * @return 0 if OK, -ve on error */ int spi_flash_write_dm(struct udevice *dev, u32 offset, size_t len, const void *buf); /** * spi_flash_erase_dm() - Erase blocks of the SPI flash * * Note that @len must be a muiltiple of the flash sector size. * * @dev: SPI flash device * @offset: Offset into device in bytes to start erasing * @len: Number of bytes to erase * @return 0 if OK, -ve on error */ int spi_flash_erase_dm(struct udevice *dev, u32 offset, size_t len); |
a58986ca8 sf: Add a method ... |
87 88 89 90 91 92 93 94 95 96 97 98 99 |
/** * spl_flash_get_sw_write_prot() - Check state of software write-protect feature * * SPI flash chips can lock a region of the flash defined by a * 'protected area'. This function checks if this protected area is * defined. * * @dev: SPI flash device * @return 0 if no region is write-protected, 1 if a region is * write-protected, -ENOSYS if the driver does not implement this, * other -ve value on error */ int spl_flash_get_sw_write_prot(struct udevice *dev); |
4806fcea1 mtd: spi: Export ... |
100 101 102 103 104 105 106 107 108 109 110 |
/** * spi_flash_std_probe() - Probe a SPI flash device * * This is the standard internal method for probing a SPI flash device to * determine its type. It can be used in chip-specific drivers which need to * do this, typically with of-platdata * * @dev: SPI-flash device to probe * @return 0 if OK, -ve on error */ int spi_flash_std_probe(struct udevice *dev); |
4c2dbefde dm: sf: Add a ucl... |
111 112 113 114 115 116 117 118 119 120 |
int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs, unsigned int max_hz, unsigned int spi_mode, struct udevice **devp); /* Compatibility function - this is the old U-Boot API */ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, unsigned int max_hz, unsigned int spi_mode); /* Compatibility function - this is the old U-Boot API */ void spi_flash_free(struct spi_flash *flash); |
4c2dbefde dm: sf: Add a ucl... |
121 |
static inline int spi_flash_read(struct spi_flash *flash, u32 offset, |
8d987abc6 dm: sf: Add drive... |
122 |
size_t len, void *buf) |
4c2dbefde dm: sf: Add a ucl... |
123 |
{ |
8d987abc6 dm: sf: Add drive... |
124 |
return spi_flash_read_dm(flash->dev, offset, len, buf); |
4c2dbefde dm: sf: Add a ucl... |
125 126 127 |
} static inline int spi_flash_write(struct spi_flash *flash, u32 offset, |
8d987abc6 dm: sf: Add drive... |
128 |
size_t len, const void *buf) |
4c2dbefde dm: sf: Add a ucl... |
129 |
{ |
8d987abc6 dm: sf: Add drive... |
130 |
return spi_flash_write_dm(flash->dev, offset, len, buf); |
4c2dbefde dm: sf: Add a ucl... |
131 132 133 |
} static inline int spi_flash_erase(struct spi_flash *flash, u32 offset, |
8d987abc6 dm: sf: Add drive... |
134 |
size_t len) |
4c2dbefde dm: sf: Add a ucl... |
135 |
{ |
8d987abc6 dm: sf: Add drive... |
136 |
return spi_flash_erase_dm(flash->dev, offset, len); |
4c2dbefde dm: sf: Add a ucl... |
137 138 139 140 141 |
} struct sandbox_state; int sandbox_sf_bind_emul(struct sandbox_state *state, int busnum, int cs, |
008dcddf9 dm: spi: Update s... |
142 |
struct udevice *bus, ofnode node, const char *spec); |
4c2dbefde dm: sf: Add a ucl... |
143 144 145 146 |
void sandbox_sf_unbind_emul(struct sandbox_state *state, int busnum, int cs); #else |
d25ce7d24 SPI Flash subsystem |
147 148 |
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... |
149 |
|
d25ce7d24 SPI Flash subsystem |
150 151 152 153 154 |
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) { |
c4e886230 mtd: spi: Switch ... |
155 156 157 158 |
struct mtd_info *mtd = &flash->mtd; size_t retlen; return mtd->_read(mtd, offset, len, &retlen, buf); |
d25ce7d24 SPI Flash subsystem |
159 160 161 162 163 |
} static inline int spi_flash_write(struct spi_flash *flash, u32 offset, size_t len, const void *buf) { |
c4e886230 mtd: spi: Switch ... |
164 165 166 167 |
struct mtd_info *mtd = &flash->mtd; size_t retlen; return mtd->_write(mtd, offset, len, &retlen, buf); |
d25ce7d24 SPI Flash subsystem |
168 169 170 171 172 |
} static inline int spi_flash_erase(struct spi_flash *flash, u32 offset, size_t len) { |
c4e886230 mtd: spi: Switch ... |
173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
struct mtd_info *mtd = &flash->mtd; struct erase_info instr; if (offset % mtd->erasesize || len % mtd->erasesize) { printf("SF: Erase offset/length not multiple of erase size "); return -EINVAL; } memset(&instr, 0, sizeof(instr)); instr.addr = offset; instr.len = len; return mtd->_erase(mtd, &instr); |
d25ce7d24 SPI Flash subsystem |
187 |
} |
4c2dbefde dm: sf: Add a ucl... |
188 |
#endif |
d25ce7d24 SPI Flash subsystem |
189 |
|
c3c016cf7 sf: Add SPI NOR p... |
190 191 192 |
static inline int spi_flash_protect(struct spi_flash *flash, u32 ofs, u32 len, bool prot) { |
439fcb9b4 sf: Fix NULL poin... |
193 |
if (!flash->flash_lock || !flash->flash_unlock) |
c3c016cf7 sf: Add SPI NOR p... |
194 195 196 197 198 199 200 |
return -EOPNOTSUPP; if (prot) return flash->flash_lock(flash, ofs, len); else return flash->flash_unlock(flash, ofs, len); } |
d25ce7d24 SPI Flash subsystem |
201 |
#endif /* _SPI_FLASH_H_ */ |