13 #include <Proc/Fch/FchPlatform.h>
15 #define SPI_REG_OPCODE 0x0
16 #define SPI_REG_CNTRL01 0x1
17 #define SPI_REG_CNTRL02 0x2
18 #define CNTRL02_FIFO_RESET (1 << 4)
19 #define CNTRL02_EXEC_OPCODE (1 << 0)
20 #define SPI_REG_CNTRL03 0x3
21 #define CNTRL03_SPIBUSY (1 << 7)
22 #define SPI_REG_FIFO 0xc
23 #define SPI_REG_CNTRL11 0xd
24 #define CNTRL11_FIFOPTR_MASK 0x07
26 #if CONFIG(SOUTHBRIDGE_AMD_AGESA_YANGTZE)
27 #define AMD_SB_SPI_TX_LEN 64
29 #define AMD_SB_SPI_TX_LEN 8
76 size_t bytesout,
void *din,
size_t bytesin)
79 u8 cmd = *(
u8 *)dout++;
93 printk(
BIOS_DEBUG,
"FCH SPI: Too much to write. Does your SPI chip driver use"
94 " spi_crop_chunk()?\n");
98 readoffby1 = bytesout ? 0 : 1;
100 if (
CONFIG(SOUTHBRIDGE_AMD_AGESA_YANGTZE)) {
106 u8 readwrite = (bytesin + readoffby1) << 4 | bytesout;
134 if (!
CONFIG(HUDSON_IMC_FWM))
143 if (!
CONFIG(HUDSON_IMC_FWM))
static void write8(void *addr, uint8_t val)
static uint8_t read8(const void *addr)
#define printk(level,...)
DEVTREE_CONST struct device * pcidev_on_root(uint8_t dev, uint8_t fn)
static __always_inline u32 pci_read_config32(const struct device *dev, u16 reg)
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
void spi_init(void)
Init all SPI controllers with default values and enable all SPI controller.
const size_t spi_ctrlr_bus_map_count
#define CNTRL02_EXEC_OPCODE
static int xfer_vectors(const struct spi_slave *slave, struct spi_op vectors[], size_t count)
int chipset_volatile_group_begin(const struct spi_flash *flash)
static void spi_write(uint8_t reg, uint8_t val)
#define CNTRL02_FIFO_RESET
static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin)
#define CNTRL11_FIFOPTR_MASK
int chipset_volatile_group_end(const struct spi_flash *flash)
static uint8_t spi_read(uint8_t reg)
#define AMD_SB_SPI_TX_LEN
static void execute_command(void)
static void reset_internal_fifo_pointer(void)
static void ImcWakeup(void)
static void ImcSleep(void)
@ SPI_CNTRLR_DEDUCT_CMD_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)