coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
spi.c File Reference
#include <device/mmio.h>
#include <soc/spi.h>
#include <soc/clock.h>
#include <soc/addressmap.h>
#include "spi_internal.h"
Include dependency graph for spi.c:

Go to the source code of this file.

Functions

static void spi_tx (volatile struct spi_ctrl *spictrl, uint8_t in)
 Wait until SPI is ready for transmission and transmit byte. More...
 
static uint8_t spi_rx (volatile struct spi_ctrl *spictrl)
 Wait until SPI receive queue has data and read byte. More...
 
static int spi_claim_bus_ (const struct spi_slave *slave)
 
static void spi_release_bus_ (const struct spi_slave *slave)
 
static int spi_xfer_ (const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin)
 
static int spi_setup_ (const struct spi_slave *slave)
 
int fu540_spi_setup (unsigned int bus, unsigned int cs, struct spi_slave *slave, struct fu540_spi_config *config)
 
int fu540_spi_mmap (const struct spi_slave *slave, const struct fu540_spi_mmap_config *config)
 

Variables

static struct spi_ctrlspictrls []
 
struct spi_ctrlr fu540_spi_ctrlr
 
const struct spi_ctrlr_buses spi_ctrlr_bus_map []
 
const size_t spi_ctrlr_bus_map_count = ARRAY_SIZE(spi_ctrlr_bus_map)
 

Function Documentation

◆ fu540_spi_mmap()

int fu540_spi_mmap ( const struct spi_slave slave,
const struct fu540_spi_mmap_config config 
)

◆ fu540_spi_setup()

◆ spi_claim_bus_()

static int spi_claim_bus_ ( const struct spi_slave slave)
static

Definition at line 48 of file spi.c.

References spi_slave::bus, spi_ctrl::csmode, FU540_SPI_CSMODE_HOLD, spi_reg_csmode::mode, spi_reg_csmode::raw_bits, slave, spictrls, and write32().

Here is the call graph for this function:

◆ spi_release_bus_()

static void spi_release_bus_ ( const struct spi_slave slave)
static

Definition at line 58 of file spi.c.

References spi_slave::bus, spi_ctrl::csmode, FU540_SPI_CSMODE_OFF, spi_reg_csmode::mode, spi_reg_csmode::raw_bits, slave, spictrls, and write32().

Here is the call graph for this function:

◆ spi_rx()

static uint8_t spi_rx ( volatile struct spi_ctrl spictrl)
static

Wait until SPI receive queue has data and read byte.

Definition at line 40 of file spi.c.

References spi_reg_rxdata::raw_bits, and spi_ctrl::rxdata.

Referenced by spi_xfer_().

Here is the caller graph for this function:

◆ spi_setup_()

static int spi_setup_ ( const struct spi_slave slave)
static

Definition at line 113 of file spi.c.

◆ spi_tx()

static void spi_tx ( volatile struct spi_ctrl spictrl,
uint8_t  in 
)
static

Wait until SPI is ready for transmission and transmit byte.

Definition at line 19 of file spi.c.

References spi_reg_txdata::data, spi_reg_txdata::raw_bits, and spi_ctrl::txdata.

Referenced by fu540_spi_mmap(), and spi_xfer_().

Here is the caller graph for this function:

◆ spi_xfer_()

static int spi_xfer_ ( const struct spi_slave slave,
const void dout,
size_t  bytesout,
void din,
size_t  bytesin 
)
static

Definition at line 67 of file spi.c.

References spi_slave::bus, spi_ctrl::fmt, FU540_SPI_PROTO_S, spi_reg_fmt::proto, spi_reg_fmt::raw_bits, read32(), slave, spi_rx(), spi_tx(), and spictrls.

Here is the call graph for this function:

Variable Documentation

◆ fu540_spi_ctrlr

struct spi_ctrlr fu540_spi_ctrlr
Initial value:
= {
.xfer = spi_xfer_,
.setup = spi_setup_,
.claim_bus = spi_claim_bus_,
.release_bus = spi_release_bus_,
}
static void spi_release_bus_(const struct spi_slave *slave)
Definition: spi.c:58
static int spi_xfer_(const struct spi_slave *slave, const void *dout, size_t bytesout, void *din, size_t bytesin)
Definition: spi.c:67
static int spi_setup_(const struct spi_slave *slave)
Definition: spi.c:113
static int spi_claim_bus_(const struct spi_slave *slave)
Definition: spi.c:48

Definition at line 113 of file spi.c.

Referenced by fu540_spi_setup().

◆ spi_ctrlr_bus_map

const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
Initial value:
= {
{
.bus_start = 0,
.bus_end = 2,
.ctrlr = &fu540_spi_ctrlr,
}
}
struct spi_ctrlr fu540_spi_ctrlr
Definition: spi.c:148

Definition at line 113 of file spi.c.

◆ spi_ctrlr_bus_map_count

const size_t spi_ctrlr_bus_map_count = ARRAY_SIZE(spi_ctrlr_bus_map)

Definition at line 163 of file spi.c.

◆ spictrls

struct spi_ctrl* spictrls[]
static
Initial value:
= {
(struct spi_ctrl *)FU540_QSPI0,
(struct spi_ctrl *)FU540_QSPI1,
}
#define FU540_QSPI2
Definition: addressmap.h:12
#define FU540_QSPI1
Definition: addressmap.h:11
#define FU540_QSPI0
Definition: addressmap.h:10
SPI control register memory map.
Definition: spi_internal.h:151

Definition at line 10 of file spi.c.

Referenced by fu540_spi_mmap(), fu540_spi_setup(), spi_claim_bus_(), spi_release_bus_(), and spi_xfer_().