5 #include <soc/pci_devs.h>
13 #define GRANULARITY_TEST_4k 0x0000f000
14 #define WORD_TO_DWORD_UPPER(x) ((x << 16) & 0xffff0000)
17 #define SPI_RESTRICTED_CMD1 0x04
18 #define SPI_RESTRICTED_CMD2 0x08
19 #define SPI_CNTRL1 0x0c
20 #define SPI_CMD_CODE 0x45
21 #define SPI_CMD_TRIGGER 0x47
22 #define SPI_CMD_TRIGGER_EXECUTE BIT(7)
23 #define SPI_TX_BYTE_COUNT 0x48
24 #define SPI_RX_BYTE_COUNT 0x4b
25 #define SPI_STATUS 0x4c
26 #define SPI_DONE_BYTE_COUNT_SHIFT 0
27 #define SPI_DONE_BYTE_COUNT_MASK 0xff
28 #define SPI_FIFO_WR_PTR_SHIFT 8
29 #define SPI_FIFO_WR_PTR_MASK 0x7f
30 #define SPI_FIFO_RD_PTR_SHIFT 16
31 #define SPI_FIFO_RD_PTR_MASK 0x7f
44 if (!
CONFIG(SOC_AMD_COMMON_BLOCK_SPI_DEBUG))
63 " Busy: %u, FIFO Read Pointer: %u, FIFO Write Pointer: %u, Done Bytes: %u\n",
126 size_t bytesout,
void *din,
size_t bytesin)
133 if (
CONFIG(SOC_AMD_COMMON_BLOCK_SPI_DEBUG))
221 size_t addr, len, gran_value, total_ranges, range;
222 bool granularity_64k =
true;
235 granularity_64k =
false;
237 granularity_64k =
false;
240 if (granularity_64k) {
241 gran_value = 0x00010000;
242 range_base = range_base >> 16;
244 gran_value = 0x00001000;
245 range_base = range_base >> 12;
247 total_ranges = len / gran_value;
260 for (range = 0; range < total_ranges; range++) {
276 printk(
BIOS_INFO,
"%s: Write Enable and Write Cmd not blocked\n", __func__);
#define printk(level,...)
#define SPI_RX_BYTE_COUNT
#define SPI_RESTRICTED_CMD1
static int wait_for_ready(void)
#define GRANULARITY_TEST_4k
#define SPI_FIFO_WR_PTR_MASK
static int xfer_vectors(const struct spi_slave *slave, struct spi_op vectors[], size_t count)
static int protect_a_range(u32 value)
#define WORD_TO_DWORD_UPPER(x)
static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin)
#define SPI_CMD_TRIGGER_EXECUTE
#define SPI_DONE_BYTE_COUNT_SHIFT
const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
#define SPI_DONE_BYTE_COUNT_MASK
#define SPI_FIFO_WR_PTR_SHIFT
#define SPI_TX_BYTE_COUNT
#define SPI_FIFO_RD_PTR_MASK
static int execute_command(void)
@ SPI_DUMP_STATE_BEFORE_CMD
@ SPI_DUMP_STATE_AFTER_CMD
static const struct spi_ctrlr fch_spi_flash_ctrlr
const size_t spi_ctrlr_bus_map_count
#define SPI_FIFO_RD_PTR_SHIFT
static void dump_state(enum spi_dump_state_phase phase)
static int fch_spi_flash_protect(const struct spi_flash *flash, const struct region *region, const enum ctrlr_prot_type type)
static __always_inline void pci_write_config32(const struct device *dev, u16 reg, u32 val)
static __always_inline u32 pci_read_config32(const struct device *dev, u16 reg)
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_msecs_expire(struct stopwatch *sw, long ms)
void thread_mutex_unlock(struct thread_mutex *mutex)
void thread_mutex_lock(struct thread_mutex *mutex)
void hexdump(const void *memory, size_t length)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
#define ROM_ADDRESS_RANGE2_START
#define MAX_ROM_PROTECT_RANGES
#define ROM_PROTECT_RANGE_REG(n)
void spi_write32(uint8_t reg, uint32_t val)
struct thread_mutex spi_hw_mutex
uint32_t spi_read32(uint8_t reg)
void spi_write8(uint8_t reg, uint8_t val)
uint8_t spi_read8(uint8_t reg)
#define SPI_ACCESS_MAC_ROM_EN
uintptr_t spi_get_bar(void)
@ SPI_CNTRLR_DEDUCT_CMD_LEN
@ SPI_CNTRLR_DEDUCT_OPCODE_LEN
int spi_flash_vector_helper(const struct spi_slave *slave, struct spi_op vectors[], size_t count, int(*func)(const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin))
static struct spi_slave slave
const struct spi_ctrlr * ctrlr
int(* xfer_vector)(const struct spi_slave *slave, struct spi_op vectors[], size_t count)