mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-29 07:53:44 +02:00
4BA: Add spi_exit_4ba function to switch SPI flash to 3-byte addressing
Change-Id: I553e7fb5028f35e14a3a81b3fa8903c1b321a223 Signed-off-by: Ed Swierk <eswierk@skyportsystems.com> Reviewed-on: https://review.coreboot.org/20509 Reviewed-by: David Hendricks <david.hendricks@gmail.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
parent
7fe85694c4
commit
d94d254262
@ -198,6 +198,8 @@ int write_en29lv640b(struct flashctx *flash, const uint8_t *buf, unsigned int st
|
||||
/* spi4ba.c */
|
||||
int spi_enter_4ba_b7(struct flashctx *flash);
|
||||
int spi_enter_4ba_b7_we(struct flashctx *flash);
|
||||
int spi_exit_4ba_e9(struct flashctx *flash);
|
||||
int spi_exit_4ba_e9_we(struct flashctx *flash);
|
||||
int spi_byte_program_4ba(struct flashctx *flash, unsigned int addr, uint8_t databyte);
|
||||
int spi_nbyte_program_4ba(struct flashctx *flash, unsigned int addr, const uint8_t *bytes, unsigned int len);
|
||||
int spi_nbyte_read_4ba(struct flashctx *flash, unsigned int addr, uint8_t *bytes, unsigned int len);
|
||||
|
43
spi4ba.c
43
spi4ba.c
@ -78,6 +78,49 @@ int spi_enter_4ba_b7_we(struct flashctx *flash)
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Exit 4-bytes addressing mode (without sending WREN before) */
|
||||
int spi_exit_4ba_e9(struct flashctx *flash)
|
||||
{
|
||||
const unsigned char cmd[JEDEC_EXIT_4_BYTE_ADDR_MODE_OUTSIZE] = { JEDEC_EXIT_4_BYTE_ADDR_MODE };
|
||||
|
||||
msg_trace("-> %s\n", __func__);
|
||||
|
||||
/* Switch to 3-bytes addressing mode */
|
||||
return spi_send_command(flash, sizeof(cmd), 0, cmd, NULL);
|
||||
}
|
||||
|
||||
/* Exit 4-bytes addressing mode with sending WREN before */
|
||||
int spi_exit_4ba_e9_we(struct flashctx *flash)
|
||||
{
|
||||
int result;
|
||||
struct spi_command cmds[] = {
|
||||
{
|
||||
.writecnt = JEDEC_WREN_OUTSIZE,
|
||||
.writearr = (const unsigned char[]){ JEDEC_WREN },
|
||||
.readcnt = 0,
|
||||
.readarr = NULL,
|
||||
}, {
|
||||
.writecnt = JEDEC_EXIT_4_BYTE_ADDR_MODE_OUTSIZE,
|
||||
.writearr = (const unsigned char[]){ JEDEC_EXIT_4_BYTE_ADDR_MODE },
|
||||
.readcnt = 0,
|
||||
.readarr = NULL,
|
||||
}, {
|
||||
.writecnt = 0,
|
||||
.writearr = NULL,
|
||||
.readcnt = 0,
|
||||
.readarr = NULL,
|
||||
}};
|
||||
|
||||
msg_trace("-> %s\n", __func__);
|
||||
|
||||
/* Switch to 3-bytes addressing mode */
|
||||
result = spi_send_multicommand(flash, cmds);
|
||||
if (result) {
|
||||
msg_cerr("%s failed during command execution\n", __func__);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/* Program one flash byte from 4-bytes addressing mode */
|
||||
int spi_byte_program_4ba(struct flashctx *flash, unsigned int addr, uint8_t databyte)
|
||||
{
|
||||
|
4
spi4ba.h
4
spi4ba.h
@ -80,6 +80,10 @@
|
||||
int spi_enter_4ba_b7(struct flashctx *flash);
|
||||
int spi_enter_4ba_b7_we(struct flashctx *flash);
|
||||
|
||||
/* exit 4-bytes addressing mode */
|
||||
int spi_exit_4ba_e9(struct flashctx *flash);
|
||||
int spi_exit_4ba_e9_we(struct flashctx *flash);
|
||||
|
||||
/* read/write flash bytes in 4-bytes addressing mode */
|
||||
int spi_byte_program_4ba(struct flashctx *flash, unsigned int addr, uint8_t databyte);
|
||||
int spi_nbyte_program_4ba(struct flashctx *flash, unsigned int addr, const uint8_t *bytes, unsigned int len);
|
||||
|
Loading…
x
Reference in New Issue
Block a user