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 <assert.h>
#include <console/console.h>
#include <endian.h>
#include <gpio.h>
#include <soc/pll.h>
#include <soc/spi.h>
#include <timer.h>
#include <types.h>
Include dependency graph for spi.c:

Go to the source code of this file.

Macros

#define MTK_SPI_DEBUG   0
 

Enumerations

enum  { MTK_FIFO_DEPTH = 32 , MTK_TXRX_TIMEOUT_US = 1000 * 1000 , MTK_ARBITRARY_VALUE = 0xdeaddead }
 
enum  { MTK_SPI_IDLE = 0 , MTK_SPI_PAUSE_IDLE = 1 }
 
enum  { MTK_SPI_BUSY_STATUS = 1 , MTK_SPI_PAUSE_FINISH_INT_STATUS = 3 }
 

Functions

static struct mtk_spi_busto_mtk_spi (const struct spi_slave *slave)
 
void mtk_spi_set_timing (struct mtk_spi_regs *regs, u32 sck_ticks, u32 cs_ticks, unsigned int tick_dly)
 
static void spi_sw_reset (struct mtk_spi_regs *regs)
 
void mtk_spi_init (unsigned int bus, enum spi_pad_mask pad_select, unsigned int speed_hz, unsigned int tick_dly)
 
static void mtk_spi_dump_data (const char *name, const uint8_t *data, int size)
 
static int spi_ctrlr_claim_bus (const struct spi_slave *slave)
 
static int do_transfer (const struct spi_slave *slave, void *in, const void *out, size_t *bytes_in, size_t *bytes_out)
 
static int spi_ctrlr_xfer (const struct spi_slave *slave, const void *dout, size_t bytes_out, void *din, size_t bytes_in)
 
static void spi_ctrlr_release_bus (const struct spi_slave *slave)
 
static int spi_ctrlr_setup (const struct spi_slave *slave)
 

Variables

const struct spi_ctrlr spi_ctrlr
 

Macro Definition Documentation

◆ MTK_SPI_DEBUG

#define MTK_SPI_DEBUG   0

Definition at line 13 of file spi.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
MTK_FIFO_DEPTH 
MTK_TXRX_TIMEOUT_US 
MTK_ARBITRARY_VALUE 

Definition at line 15 of file spi.c.

◆ anonymous enum

anonymous enum
Enumerator
MTK_SPI_IDLE 
MTK_SPI_PAUSE_IDLE 

Definition at line 21 of file spi.c.

◆ anonymous enum

anonymous enum
Enumerator
MTK_SPI_BUSY_STATUS 
MTK_SPI_PAUSE_FINISH_INT_STATUS 

Definition at line 26 of file spi.c.

Function Documentation

◆ do_transfer()

static int do_transfer ( const struct spi_slave slave,
void in,
const void out,
size_t bytes_in,
size_t bytes_out 
)
static

◆ mtk_spi_dump_data()

static void mtk_spi_dump_data ( const char *  name,
const uint8_t data,
int  size 
)
static

Definition at line 95 of file spi.c.

References BIOS_DEBUG, BIOS_INFO, MTK_SPI_DEBUG, name, and printk.

Referenced by do_transfer().

Here is the caller graph for this function:

◆ mtk_spi_init()

◆ mtk_spi_set_timing()

void mtk_spi_set_timing ( struct mtk_spi_regs regs,
u32  sck_ticks,
u32  cs_ticks,
unsigned int  tick_dly 
)

Definition at line 37 of file spi.c.

References GET_SCK_REG, and SET32_BITFIELDS.

Referenced by mtk_spi_init().

Here is the caller graph for this function:

◆ spi_ctrlr_claim_bus()

static int spi_ctrlr_claim_bus ( const struct spi_slave slave)
static

Definition at line 107 of file spi.c.

References mtk_spi_bus::cs_gpio, gpio_output(), MTK_SPI_IDLE, mtk_spi_bus::regs, setbits32, slave, SPI_CMD_PAUSE_EN_SHIFT, mtk_spi_bus::state, and to_mtk_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 241 of file spi.c.

References clrbits32, mtk_spi_bus::cs_gpio, gpio_output(), MTK_SPI_IDLE, mtk_spi_bus::regs, slave, SPI_CMD_PAUSE_EN, spi_sw_reset(), mtk_spi_bus::state, and to_mtk_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 253 of file spi.c.

◆ spi_ctrlr_xfer()

static int spi_ctrlr_xfer ( const struct spi_slave slave,
const void dout,
size_t  bytes_out,
void din,
size_t  bytes_in 
)
static

Definition at line 212 of file spi.c.

References do_transfer(), MIN, MTK_FIFO_DEPTH, and slave.

Here is the call graph for this function:

◆ spi_sw_reset()

static void spi_sw_reset ( struct mtk_spi_regs regs)
static

Definition at line 50 of file spi.c.

References clrbits32, setbits32, and SPI_CMD_RST_EN.

Referenced by do_transfer(), and spi_ctrlr_release_bus().

Here is the caller graph for this function:

◆ to_mtk_spi()

static struct mtk_spi_bus* to_mtk_spi ( const struct spi_slave slave)
inlinestatic

Definition at line 31 of file spi.c.

References assert, spi_slave::bus, slave, spi_bus, and SPI_BUS_NUMBER.

Referenced by do_transfer(), spi_ctrlr_claim_bus(), and spi_ctrlr_release_bus().

Here is the caller graph for this function:

Variable Documentation

◆ spi_ctrlr

const struct spi_ctrlr spi_ctrlr
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 = 65535,
}
static void spi_ctrlr_release_bus(const struct spi_slave *slave)
Definition: spi.c:241
static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, size_t bytes_out, void *din, size_t bytes_in)
Definition: spi.c:212
static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
Definition: spi.c:107
static int spi_ctrlr_setup(const struct spi_slave *slave)
Definition: spi.c:253

Definition at line 253 of file spi.c.