xref: /aosp_15_r20/external/flashrom/include/chipdrivers.h (revision 0d6140be3aa665ecc836e8907834fcd3e3b018fc)
1*0d6140beSAndroid Build Coastguard Worker /*
2*0d6140beSAndroid Build Coastguard Worker  * This file is part of the flashrom project.
3*0d6140beSAndroid Build Coastguard Worker  *
4*0d6140beSAndroid Build Coastguard Worker  * Copyright (C) 2009 Carl-Daniel Hailfinger
5*0d6140beSAndroid Build Coastguard Worker  *
6*0d6140beSAndroid Build Coastguard Worker  * This program is free software; you can redistribute it and/or modify
7*0d6140beSAndroid Build Coastguard Worker  * it under the terms of the GNU General Public License as published by
8*0d6140beSAndroid Build Coastguard Worker  * the Free Software Foundation; version 2 of the License.
9*0d6140beSAndroid Build Coastguard Worker  *
10*0d6140beSAndroid Build Coastguard Worker  * This program is distributed in the hope that it will be useful,
11*0d6140beSAndroid Build Coastguard Worker  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12*0d6140beSAndroid Build Coastguard Worker  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13*0d6140beSAndroid Build Coastguard Worker  * GNU General Public License for more details.
14*0d6140beSAndroid Build Coastguard Worker  *
15*0d6140beSAndroid Build Coastguard Worker  * Header file for flash chip drivers. Included from flash.h.
16*0d6140beSAndroid Build Coastguard Worker  * As a general rule, every function listed here should take a pointer to
17*0d6140beSAndroid Build Coastguard Worker  * struct flashctx as first parameter.
18*0d6140beSAndroid Build Coastguard Worker  */
19*0d6140beSAndroid Build Coastguard Worker 
20*0d6140beSAndroid Build Coastguard Worker #ifndef __CHIPDRIVERS_H__
21*0d6140beSAndroid Build Coastguard Worker #define __CHIPDRIVERS_H__ 1
22*0d6140beSAndroid Build Coastguard Worker 
23*0d6140beSAndroid Build Coastguard Worker #include "flash.h"	/* for chipaddr and flashctx */
24*0d6140beSAndroid Build Coastguard Worker 
25*0d6140beSAndroid Build Coastguard Worker /* spi.c */
26*0d6140beSAndroid Build Coastguard Worker int spi_aai_write(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
27*0d6140beSAndroid Build Coastguard Worker int spi_chip_write_256(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
28*0d6140beSAndroid Build Coastguard Worker int spi_chip_read(struct flashctx *flash, uint8_t *buf, unsigned int start, int unsigned len);
29*0d6140beSAndroid Build Coastguard Worker bool spi_probe_opcode(const struct flashctx *flash, uint8_t opcode);
30*0d6140beSAndroid Build Coastguard Worker 
31*0d6140beSAndroid Build Coastguard Worker /* spi25.c */
32*0d6140beSAndroid Build Coastguard Worker int probe_spi_rdid(struct flashctx *flash);
33*0d6140beSAndroid Build Coastguard Worker int probe_spi_rdid4(struct flashctx *flash);
34*0d6140beSAndroid Build Coastguard Worker int probe_spi_rems(struct flashctx *flash);
35*0d6140beSAndroid Build Coastguard Worker int probe_spi_res1(struct flashctx *flash);
36*0d6140beSAndroid Build Coastguard Worker int probe_spi_res2(struct flashctx *flash);
37*0d6140beSAndroid Build Coastguard Worker int probe_spi_res3(struct flashctx *flash);
38*0d6140beSAndroid Build Coastguard Worker int probe_spi_at25f(struct flashctx *flash);
39*0d6140beSAndroid Build Coastguard Worker int spi_write_enable(struct flashctx *flash);
40*0d6140beSAndroid Build Coastguard Worker int spi_write_disable(struct flashctx *flash);
41*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_20(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
42*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_21(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
43*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_50(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
44*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_52(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
45*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_53(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
46*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_5c(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
47*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_60(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
48*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_62(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
49*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_81(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
50*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_c4(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
51*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_c7(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
52*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_d7(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
53*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_d8(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
54*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_db(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
55*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_dc(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
56*0d6140beSAndroid Build Coastguard Worker enum block_erase_func spi25_get_erasefn_from_opcode(uint8_t opcode);
57*0d6140beSAndroid Build Coastguard Worker const uint8_t *spi_get_opcode_from_erasefn(enum block_erase_func func);
58*0d6140beSAndroid Build Coastguard Worker int spi_chip_write_1(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
59*0d6140beSAndroid Build Coastguard Worker int spi_nbyte_read(struct flashctx *flash, unsigned int addr, uint8_t *bytes, unsigned int len);
60*0d6140beSAndroid Build Coastguard Worker int spi_read_chunked(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len, unsigned int chunksize);
61*0d6140beSAndroid Build Coastguard Worker int spi_write_chunked(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len, unsigned int chunksize);
62*0d6140beSAndroid Build Coastguard Worker int spi_enter_4ba(struct flashctx *flash);
63*0d6140beSAndroid Build Coastguard Worker int spi_exit_4ba(struct flashctx *flash);
64*0d6140beSAndroid Build Coastguard Worker int spi_set_extended_address(struct flashctx *, uint8_t addr_high);
65*0d6140beSAndroid Build Coastguard Worker 
66*0d6140beSAndroid Build Coastguard Worker 
67*0d6140beSAndroid Build Coastguard Worker /* spi25_statusreg.c */
68*0d6140beSAndroid Build Coastguard Worker int spi_read_register(const struct flashctx *flash, enum flash_reg reg, uint8_t *value);
69*0d6140beSAndroid Build Coastguard Worker int spi_write_register(const struct flashctx *flash, enum flash_reg reg, uint8_t value);
70*0d6140beSAndroid Build Coastguard Worker void spi_prettyprint_status_register_bit(uint8_t status, int bit);
71*0d6140beSAndroid Build Coastguard Worker 
72*0d6140beSAndroid Build Coastguard Worker /* sfdp.c */
73*0d6140beSAndroid Build Coastguard Worker int probe_spi_sfdp(struct flashctx *flash);
74*0d6140beSAndroid Build Coastguard Worker 
75*0d6140beSAndroid Build Coastguard Worker /* opaque.c */
76*0d6140beSAndroid Build Coastguard Worker int probe_opaque(struct flashctx *flash);
77*0d6140beSAndroid Build Coastguard Worker int read_opaque(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len);
78*0d6140beSAndroid Build Coastguard Worker int write_opaque(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
79*0d6140beSAndroid Build Coastguard Worker int erase_opaque(struct flashctx *flash, unsigned int blockaddr, unsigned int blocklen);
80*0d6140beSAndroid Build Coastguard Worker 
81*0d6140beSAndroid Build Coastguard Worker /* at45db.c */
82*0d6140beSAndroid Build Coastguard Worker int probe_spi_at45db(struct flashctx *flash);
83*0d6140beSAndroid Build Coastguard Worker int spi_prettyprint_status_register_at45db(struct flashctx *flash);
84*0d6140beSAndroid Build Coastguard Worker int spi_disable_blockprotect_at45db(struct flashctx *flash);
85*0d6140beSAndroid Build Coastguard Worker int spi_read_at45db(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len);
86*0d6140beSAndroid Build Coastguard Worker int spi_read_at45db_e8(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len);
87*0d6140beSAndroid Build Coastguard Worker int spi_write_at45db(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
88*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_page(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
89*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_block(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
90*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_sector(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
91*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45db_chip(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
92*0d6140beSAndroid Build Coastguard Worker int spi_erase_at45cs_sector(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
93*0d6140beSAndroid Build Coastguard Worker 
94*0d6140beSAndroid Build Coastguard Worker /* 82802ab.c */
95*0d6140beSAndroid Build Coastguard Worker uint8_t wait_82802ab(struct flashctx *flash);
96*0d6140beSAndroid Build Coastguard Worker int probe_82802ab(struct flashctx *flash);
97*0d6140beSAndroid Build Coastguard Worker int erase_block_82802ab(struct flashctx *flash, unsigned int page, unsigned int pagesize);
98*0d6140beSAndroid Build Coastguard Worker int write_82802ab(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
99*0d6140beSAndroid Build Coastguard Worker void print_status_82802ab(uint8_t status);
100*0d6140beSAndroid Build Coastguard Worker blockprotect_func_t *lookup_82802ab_blockprotect_func_ptr(const struct flashchip *const chip);
101*0d6140beSAndroid Build Coastguard Worker 
102*0d6140beSAndroid Build Coastguard Worker /* jedec.c */
103*0d6140beSAndroid Build Coastguard Worker uint8_t oddparity(uint8_t val);
104*0d6140beSAndroid Build Coastguard Worker void toggle_ready_jedec(const struct flashctx *flash, chipaddr dst);
105*0d6140beSAndroid Build Coastguard Worker void data_polling_jedec(const struct flashctx *flash, chipaddr dst, uint8_t data);
106*0d6140beSAndroid Build Coastguard Worker int probe_jedec(struct flashctx *flash);
107*0d6140beSAndroid Build Coastguard Worker int probe_jedec_29gl(struct flashctx *flash);
108*0d6140beSAndroid Build Coastguard Worker int write_jedec(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
109*0d6140beSAndroid Build Coastguard Worker int write_jedec_1(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
110*0d6140beSAndroid Build Coastguard Worker int erase_sector_jedec(struct flashctx *flash, unsigned int page, unsigned int pagesize);
111*0d6140beSAndroid Build Coastguard Worker int erase_block_jedec(struct flashctx *flash, unsigned int page, unsigned int blocksize);
112*0d6140beSAndroid Build Coastguard Worker int erase_chip_block_jedec(struct flashctx *flash, unsigned int page, unsigned int blocksize);
113*0d6140beSAndroid Build Coastguard Worker 
114*0d6140beSAndroid Build Coastguard Worker blockprotect_func_t *lookup_jedec_blockprotect_func_ptr(const struct flashchip *const chip);
115*0d6140beSAndroid Build Coastguard Worker int printlock_regspace2_uniform_64k(struct flashctx *flash);
116*0d6140beSAndroid Build Coastguard Worker int printlock_regspace2_block_eraser_0(struct flashctx *flash);
117*0d6140beSAndroid Build Coastguard Worker int printlock_regspace2_block_eraser_1(struct flashctx *flash);
118*0d6140beSAndroid Build Coastguard Worker 
119*0d6140beSAndroid Build Coastguard Worker /* sst28sf040.c */
120*0d6140beSAndroid Build Coastguard Worker int erase_chip_28sf040(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
121*0d6140beSAndroid Build Coastguard Worker int erase_sector_28sf040(struct flashctx *flash, unsigned int address, unsigned int sector_size);
122*0d6140beSAndroid Build Coastguard Worker int write_28sf040(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
123*0d6140beSAndroid Build Coastguard Worker int unprotect_28sf040(struct flashctx *flash);
124*0d6140beSAndroid Build Coastguard Worker int protect_28sf040(struct flashctx *flash);
125*0d6140beSAndroid Build Coastguard Worker 
126*0d6140beSAndroid Build Coastguard Worker /* sst49lfxxxc.c */
127*0d6140beSAndroid Build Coastguard Worker int erase_sector_49lfxxxc(struct flashctx *flash, unsigned int address, unsigned int sector_size);
128*0d6140beSAndroid Build Coastguard Worker 
129*0d6140beSAndroid Build Coastguard Worker /* sst_fwhub.c */
130*0d6140beSAndroid Build Coastguard Worker int printlock_sst_fwhub(struct flashctx *flash);
131*0d6140beSAndroid Build Coastguard Worker int unlock_sst_fwhub(struct flashctx *flash);
132*0d6140beSAndroid Build Coastguard Worker 
133*0d6140beSAndroid Build Coastguard Worker /* s25f.c */
134*0d6140beSAndroid Build Coastguard Worker int probe_spi_big_spansion(struct flashctx *flash);
135*0d6140beSAndroid Build Coastguard Worker int s25fl_block_erase(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
136*0d6140beSAndroid Build Coastguard Worker int s25fs_block_erase_d8(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
137*0d6140beSAndroid Build Coastguard Worker 
138*0d6140beSAndroid Build Coastguard Worker /* w39.c */
139*0d6140beSAndroid Build Coastguard Worker int printlock_w39f010(struct flashctx * flash);
140*0d6140beSAndroid Build Coastguard Worker int printlock_w39l010(struct flashctx * flash);
141*0d6140beSAndroid Build Coastguard Worker int printlock_w39l020(struct flashctx * flash);
142*0d6140beSAndroid Build Coastguard Worker int printlock_w39l040(struct flashctx * flash);
143*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040a(struct flashctx *flash);
144*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040b(struct flashctx *flash);
145*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040c(struct flashctx *flash);
146*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040fa(struct flashctx *flash);
147*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040fb(struct flashctx *flash);
148*0d6140beSAndroid Build Coastguard Worker int printlock_w39v040fc(struct flashctx *flash);
149*0d6140beSAndroid Build Coastguard Worker int printlock_w39v080a(struct flashctx *flash);
150*0d6140beSAndroid Build Coastguard Worker int printlock_w39v080fa(struct flashctx *flash);
151*0d6140beSAndroid Build Coastguard Worker int printlock_w39v080fa_dual(struct flashctx *flash);
152*0d6140beSAndroid Build Coastguard Worker int printlock_at49f(struct flashctx *flash);
153*0d6140beSAndroid Build Coastguard Worker 
154*0d6140beSAndroid Build Coastguard Worker /* w29ee011.c */
155*0d6140beSAndroid Build Coastguard Worker int probe_w29ee011(struct flashctx *flash);
156*0d6140beSAndroid Build Coastguard Worker bool w29ee011_can_override(const char *const chip_name, const char *const override_chip);
157*0d6140beSAndroid Build Coastguard Worker 
158*0d6140beSAndroid Build Coastguard Worker /* stm50.c */
159*0d6140beSAndroid Build Coastguard Worker int erase_sector_stm50(struct flashctx *flash, unsigned int block, unsigned int blocksize);
160*0d6140beSAndroid Build Coastguard Worker 
161*0d6140beSAndroid Build Coastguard Worker /* en29lv640b.c */
162*0d6140beSAndroid Build Coastguard Worker int probe_en29lv640b(struct flashctx *flash);
163*0d6140beSAndroid Build Coastguard Worker int write_en29lv640b(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
164*0d6140beSAndroid Build Coastguard Worker 
165*0d6140beSAndroid Build Coastguard Worker /* edi.c */
166*0d6140beSAndroid Build Coastguard Worker int edi_chip_block_erase(struct flashctx *flash, unsigned int page, unsigned int size);
167*0d6140beSAndroid Build Coastguard Worker int edi_chip_write(struct flashctx *flash, const uint8_t *buf, unsigned int start, unsigned int len);
168*0d6140beSAndroid Build Coastguard Worker int edi_chip_read(struct flashctx *flash, uint8_t *buf, unsigned int start, unsigned int len);
169*0d6140beSAndroid Build Coastguard Worker int edi_probe_kb9012(struct flashctx *flash);
170*0d6140beSAndroid Build Coastguard Worker 
171*0d6140beSAndroid Build Coastguard Worker /* spi95.c */
172*0d6140beSAndroid Build Coastguard Worker int probe_spi_st95(struct flashctx *flash);
173*0d6140beSAndroid Build Coastguard Worker int spi_block_erase_emulation(struct flashctx *flash, unsigned int addr, unsigned int blocklen);
174*0d6140beSAndroid Build Coastguard Worker 
175*0d6140beSAndroid Build Coastguard Worker /* writeprotect_ranges.c */
176*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len);
177*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25_64k_block(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len);
178*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25_bit_cmp(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len);
179*0d6140beSAndroid Build Coastguard Worker void decode_range_spi25_2x_block(size_t *start, size_t *len, const struct wp_bits *, size_t chip_len);
180*0d6140beSAndroid Build Coastguard Worker 
181*0d6140beSAndroid Build Coastguard Worker #endif /* !__CHIPDRIVERS_H__ */
182