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 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 ipq_spi_slave *ds)
 
static int config_spi_state (struct ipq_spi_slave *ds, unsigned int state)
 
static void spi_set_mode (struct ipq_spi_slave *ds, unsigned int mode)
 
static void spi_reset (struct ipq_spi_slave *ds)
 
static struct ipq_spi_slaveto_ipq_spi (const struct spi_slave *slave)
 
static int spi_hw_init (struct ipq_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 write_force_cs (const struct spi_slave *slave, int assert)
 
static void spi_write_byte (struct ipq_spi_slave *ds, unsigned char data)
 
static unsigned char spi_read_byte (struct ipq_spi_slave *ds)
 
static int check_fifo_status (void *reg_addr)
 
static void enable_io_config (struct ipq_spi_slave *ds, uint32_t write_cnt, uint32_t read_cnt)
 
static int __blsp_spi_read (struct ipq_spi_slave *ds, u8 *data_buffer, unsigned int bytes)
 
static int blsp_spi_read (struct ipq_spi_slave *ds, u8 *data_buffer, unsigned int bytes)
 
static int __blsp_spi_write (struct ipq_spi_slave *ds, const u8 *cmd_buffer, unsigned int bytes)
 
static int blsp_spi_write (struct ipq_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)
 

Variables

static const struct blsp_spi spi_reg []
 
static struct ipq_spi_slave spi_slave_pool [2]
 
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 ipq_spi_slave ds,
u8 data_buffer,
unsigned int  bytes 
)
static

Definition at line 379 of file spi.c.

References check_fifo_status(), config_spi_state(), enable_io_config(), INPUT_SERVICE_FLAG, blsp_spi::qup_mx_input_count, blsp_spi::qup_operational, QUP_STATE_RESET, QUP_STATE_RUN, read32(), ipq_spi_slave::regs, SPI_INPUT_BLOCK_SIZE, spi_read_byte(), SUCCESS, val, void(), and write32().

Referenced by blsp_spi_read().

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 ipq_spi_slave ds,
const u8 cmd_buffer,
unsigned int  bytes 
)
static

◆ blsp_spi_read()

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

Definition at line 436 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 ipq_spi_slave ds,
u8 cmd_buffer,
unsigned int  bytes 
)
static

Definition at line 552 of file spi.c.

References __blsp_spi_write(), 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:

◆ check_bit_state()

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

Definition at line 57 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 333 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 ipq_spi_slave ds)
static

Definition at line 75 of file spi.c.

References check_bit_state(), blsp_spi::qup_state, QUP_STATE_VALID, QUP_STATE_VALID_MASK, and ipq_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 ipq_spi_slave ds,
unsigned int  state 
)
static

Definition at line 86 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(), ipq_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 ipq_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

Definition at line 269 of file spi.c.

References EIO, slave, spi_hw_init(), SUCCESS, and to_ipq_spi().

Here is the call graph for this function:

◆ spi_ctrlr_release_bus()

static void spi_ctrlr_release_bus ( const struct spi_slave slave)
static

Definition at line 281 of file spi.c.

References ipq_spi_slave::initialized, slave, spi_reset(), and to_ipq_spi().

Here is the call graph for this function:

◆ spi_ctrlr_setup()

static int spi_ctrlr_setup ( const struct spi_slave slave)
static

Definition at line 617 of file spi.c.

◆ 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 575 of file spi.c.

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

Here is the call graph for this function:

◆ spi_hw_init()

◆ spi_read_byte()

static unsigned char spi_read_byte ( struct ipq_spi_slave ds)
static

Definition at line 319 of file spi.c.

References INPUT_FIFO_NOT_EMPTY, blsp_spi::qup_input_fifo, blsp_spi::qup_operational, read32(), ipq_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 ipq_spi_slave ds)
static

Definition at line 166 of file spi.c.

References check_qup_state_valid(), blsp_spi::qup_sw_reset, ipq_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 ipq_spi_slave ds,
unsigned int  mode 
)
static

Definition at line 122 of file spi.c.

References BIOS_ERR, blsp_spi::io_control, printk, read32(), ipq_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 ipq_spi_slave ds,
unsigned char  data 
)
static

Definition at line 306 of file spi.c.

References OUTPUT_FIFO_FULL, blsp_spi::qup_operational, blsp_spi::qup_output_fifo, read32(), ipq_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_ipq_spi()

static struct ipq_spi_slave* to_ipq_spi ( const struct spi_slave slave)
static

Definition at line 175 of file spi.c.

References ipq_spi_slave::allocated, ARRAY_SIZE, spi_slave::bus, spi_slave::cs, NULL, slave, ipq_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 290 of file spi.c.

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

Referenced by spi_ctrlr_xfer().

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

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,
.max_xfer_size = MAX_PACKET_COUNT,
}
static void spi_ctrlr_release_bus(const struct spi_slave *slave)
Definition: spi.c:281
static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
Definition: spi.c:269
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:575
static int spi_ctrlr_setup(const struct spi_slave *slave)
Definition: spi.c:617
#define MAX_PACKET_COUNT
Definition: spi.c:37

Definition at line 617 of file spi.c.

◆ spi_ctrlr_bus_map

const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
Initial value:
= {
{
.ctrlr = &spi_ctrlr,
.bus_start = BLSP0_SPI,
.bus_end = BLSP1_SPI,
},
}
const struct spi_ctrlr spi_ctrlr
Definition: spi.c:261
#define BLSP0_SPI
Definition: spi.h:112
#define BLSP1_SPI
Definition: spi.h:113

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

◆ spi_reg

const struct blsp_spi spi_reg[]
static

Definition at line 1 of file spi.c.

◆ spi_slave_pool

struct ipq_spi_slave spi_slave_pool[2]
static

Definition at line 166 of file spi.c.

Referenced by to_ipq_spi().