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 <console/console.h>
#include <delay.h>
#include <gpio.h>
#include <soc/iomap.h>
#include <soc/spi.h>
#include <soc/clock.h>
#include <spi_flash.h>
#include <timer.h>
Include dependency graph for spi.c:

Go to the source code of this file.

Functions

static int check_bit_state (void *reg_addr, int mask, int val, int us_delay)
 
static int check_qup_state_valid (struct qcs_spi_slave *ds)
 
static int config_spi_state (struct qcs_spi_slave *ds, unsigned int state)
 
static void spi_set_mode (struct qcs_spi_slave *ds, unsigned int mode)
 
static void spi_reset (struct qcs_spi_slave *ds)
 
static struct qcs_spi_slaveto_qcs_spi (const struct spi_slave *slave)
 
static void write_force_cs (const struct spi_slave *slave, int assert)
 
static int spi_hw_init (struct qcs_spi_slave *ds)
 
static int spi_ctrlr_claim_bus (const struct spi_slave *slave)
 
static void spi_ctrlr_release_bus (const struct spi_slave *slave)
 
static void spi_write_byte (struct qcs_spi_slave *ds, unsigned char data)
 
static unsigned char spi_read_byte (struct qcs_spi_slave *ds)
 
static int check_fifo_status (void *reg_addr)
 
static void enable_io_config (struct qcs_spi_slave *ds, uint32_t write_cnt, uint32_t read_cnt)
 
static int __blsp_spi_read (struct qcs_spi_slave *ds, u8 *data_buffer, unsigned int bytes)
 
static int blsp_spi_read (struct qcs_spi_slave *ds, u8 *data_buffer, unsigned int bytes)
 
static int __blsp_spi_write (struct qcs_spi_slave *ds, const u8 *cmd_buffer, unsigned int bytes)
 
static int blsp_spi_write (struct qcs_spi_slave *ds, u8 *cmd_buffer, unsigned int bytes)
 
static int spi_ctrlr_xfer (const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
 
static int spi_ctrlr_setup (const struct spi_slave *slave)
 
static int xfer_vectors (const struct spi_slave *slave, struct spi_op vectors[], size_t count)
 

Variables

static const struct blsp_spi spi_reg []
 
static struct qcs_spi_slave spi_slave_pool [3]
 
static const struct spi_ctrlr 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

◆ __blsp_spi_read()

static int __blsp_spi_read ( struct qcs_spi_slave ds,
u8 data_buffer,
unsigned int  bytes 
)
static

◆ __blsp_spi_write()

◆ blsp_spi_read()

static int blsp_spi_read ( struct qcs_spi_slave ds,
u8 data_buffer,
unsigned int  bytes 
)
static

Definition at line 496 of file spi.c.

References __blsp_spi_read(), length, MAX_COUNT_SIZE, and SUCCESS.

Referenced by spi_ctrlr_xfer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ blsp_spi_write()

static int blsp_spi_write ( struct qcs_spi_slave ds,
u8 cmd_buffer,
unsigned int  bytes 
)
static

Definition at line 625 of file spi.c.

References __blsp_spi_write(), BIOS_ERR, length, MAX_COUNT_SIZE, printk, and SUCCESS.

Referenced by spi_ctrlr_xfer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_bit_state()

static int check_bit_state ( void reg_addr,
int  mask,
int  val,
int  us_delay 
)
static

Definition at line 83 of file spi.c.

References count, ETIMEDOUT, mask, read32(), SUCCESS, TIMEOUT_CNT, udelay(), and val.

Referenced by check_qup_state_valid().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_fifo_status()

static int check_fifo_status ( void reg_addr)
static

Definition at line 382 of file spi.c.

References count, ETIMEDOUT, INPUT_SERVICE_FLAG, OUTPUT_SERVICE_FLAG, read32(), SUCCESS, TIMEOUT_CNT, and val.

Referenced by __blsp_spi_read(), and __blsp_spi_write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ check_qup_state_valid()

static int check_qup_state_valid ( struct qcs_spi_slave ds)
static

Definition at line 101 of file spi.c.

References check_bit_state(), blsp_spi::qup_state, QUP_STATE_VALID, QUP_STATE_VALID_MASK, and qcs_spi_slave::regs.

Referenced by config_spi_state(), and spi_reset().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ config_spi_state()

static int config_spi_state ( struct qcs_spi_slave ds,
unsigned int  state 
)
static

Definition at line 110 of file spi.c.

References BIOS_ERR, check_qup_state_valid(), EINVAL, printk, blsp_spi::qup_state, QUP_STATE_MASK, QUP_STATE_RESET, QUP_STATE_RUN, read32(), qcs_spi_slave::regs, SUCCESS, val, and write32().

Referenced by __blsp_spi_read(), __blsp_spi_write(), spi_ctrlr_xfer(), and spi_hw_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ enable_io_config()

static void enable_io_config ( struct qcs_spi_slave ds,
uint32_t  write_cnt,
uint32_t  read_cnt 
)
static

◆ spi_ctrlr_claim_bus()

static int spi_ctrlr_claim_bus ( const struct spi_slave slave)
static

◆ spi_ctrlr_release_bus()

static void spi_ctrlr_release_bus ( const struct spi_slave slave)
static

Definition at line 342 of file spi.c.

References qcs_spi_slave::initialized, slave, spi_reset(), to_qcs_spi(), and write_force_cs().

Here is the call graph for this function:

◆ spi_ctrlr_setup()

static int spi_ctrlr_setup ( const struct spi_slave slave)
static

◆ spi_ctrlr_xfer()

static int spi_ctrlr_xfer ( const struct spi_slave slave,
const void dout,
size_t  out_bytes,
void din,
size_t  in_bytes 
)
static

Definition at line 650 of file spi.c.

References blsp_spi_read(), blsp_spi_write(), config_spi_state(), NULL, QUP_STATE_RESET, slave, SUCCESS, to_qcs_spi(), and void().

Here is the call graph for this function:

◆ spi_hw_init()

◆ spi_read_byte()

static unsigned char spi_read_byte ( struct qcs_spi_slave ds)
static

Definition at line 368 of file spi.c.

References INPUT_FIFO_NOT_EMPTY, blsp_spi::qup_input_fifo, blsp_spi::qup_operational, read32(), qcs_spi_slave::regs, and udelay().

Referenced by __blsp_spi_read(), and __blsp_spi_write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spi_reset()

static void spi_reset ( struct qcs_spi_slave ds)
static

Definition at line 190 of file spi.c.

References check_qup_state_valid(), blsp_spi::qup_sw_reset, qcs_spi_slave::regs, udelay(), and write32().

Referenced by spi_ctrlr_release_bus(), and spi_hw_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spi_set_mode()

static void spi_set_mode ( struct qcs_spi_slave ds,
unsigned int  mode 
)
static

Definition at line 146 of file spi.c.

References BIOS_ERR, blsp_spi::io_control, printk, read32(), qcs_spi_slave::regs, blsp_spi::spi_config, SPI_CONFIG_INPUT_FIRST, SPI_IO_CTRL_CLOCK_IDLE_HIGH, SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3, val, and write32().

Referenced by spi_hw_init().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ spi_write_byte()

static void spi_write_byte ( struct qcs_spi_slave ds,
unsigned char  data 
)
static

Definition at line 355 of file spi.c.

References OUTPUT_FIFO_FULL, blsp_spi::qup_operational, blsp_spi::qup_output_fifo, read32(), qcs_spi_slave::regs, udelay(), and write32().

Referenced by __blsp_spi_write().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ to_qcs_spi()

static struct qcs_spi_slave* to_qcs_spi ( const struct spi_slave slave)
static

Definition at line 199 of file spi.c.

References qcs_spi_slave::allocated, ARRAY_SIZE, spi_slave::bus, spi_slave::cs, NULL, slave, qcs_spi_slave::slave, and spi_slave_pool.

Referenced by spi_ctrlr_claim_bus(), spi_ctrlr_release_bus(), spi_ctrlr_xfer(), and write_force_cs().

Here is the caller graph for this function:

◆ write_force_cs()

static void write_force_cs ( const struct spi_slave slave,
int  assert 
)
static

Definition at line 218 of file spi.c.

References assert, clrsetbits32, blsp_spi::io_control, qcs_spi_slave::regs, slave, SPI_IO_CTRL_FORCE_CS_DIS, SPI_IO_CTRL_FORCE_CS_EN, SPI_IO_CTRL_FORCE_CS_MSK, and to_qcs_spi().

Referenced by spi_ctrlr_claim_bus(), and spi_ctrlr_release_bus().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ xfer_vectors()

static int xfer_vectors ( const struct spi_slave slave,
struct spi_op  vectors[],
size_t  count 
)
static

Definition at line 727 of file spi.c.

Variable Documentation

◆ spi_ctrlr

const struct spi_ctrlr spi_ctrlr
static
Initial value:
= {
.setup = spi_ctrlr_setup,
.claim_bus = spi_ctrlr_claim_bus,
.release_bus = spi_ctrlr_release_bus,
.xfer = spi_ctrlr_xfer,
.xfer_vector = xfer_vectors,
.max_xfer_size = MAX_PACKET_COUNT,
}
#define MAX_PACKET_COUNT
Definition: spi.c:37
static void spi_ctrlr_release_bus(const struct spi_slave *slave)
Definition: spi.c:342
static int xfer_vectors(const struct spi_slave *slave, struct spi_op vectors[], size_t count)
Definition: spi.c:727
static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
Definition: spi.c:303
static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
Definition: spi.c:650
static int spi_ctrlr_setup(const struct spi_slave *slave)
Definition: spi.c:684

Definition at line 727 of file spi.c.

◆ spi_ctrlr_bus_map

const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
Initial value:
= {
{
.ctrlr = &spi_ctrlr,
.bus_start = BLSP5_SPI,
.bus_end = BLSP5_SPI,
},
{
.ctrlr = &spi_ctrlr,
.bus_start = BLSP4_SPI,
.bus_end = BLSP4_SPI,
},
}
const struct spi_ctrlr spi_ctrlr
Definition: spi.c:261
#define BLSP4_SPI
Definition: spi.h:133
#define BLSP5_SPI
Definition: spi.h:134

Definition at line 727 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 755 of file spi.c.

◆ spi_reg

const struct blsp_spi spi_reg[]
static

Definition at line 1 of file spi.c.

Referenced by spi_ctrlr_setup().

◆ spi_slave_pool

struct qcs_spi_slave spi_slave_pool[3]
static

Definition at line 190 of file spi.c.

Referenced by spi_ctrlr_setup(), and to_qcs_spi().