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 <cbfs.h>
#include <console/console.h>
#include <soc/cpu.h>
#include <soc/spi.h>
#include <spi-generic.h>
#include <stddef.h>
#include <stdint.h>
#include <string.h>
#include <symbols.h>
Include dependency graph for spi.c:

Go to the source code of this file.

Data Structures

struct  exynos_spi_slave
 

Macros

#define EXYNOS_SPI_MAX_TRANSFER_BYTES   (65535)
 
#define DEBUG_SPI(x, ...)
 

Functions

static struct exynos_spi_slaveto_exynos_spi (const struct spi_slave *slave)
 
static void spi_sw_reset (struct exynos_spi *regs, int word)
 
static void exynos_spi_init (struct exynos_spi *regs)
 
static int spi_ctrlr_claim_bus (const struct spi_slave *slave)
 
static void spi_transfer (struct exynos_spi *regs, void *in, const void *out, size_t size)
 
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)
 
static int exynos_spi_read (struct spi_slave *slave, void *dest, uint32_t len, uint32_t off)
 
static ssize_t exynos_spi_readat (const struct region_device *rdev, void *dest, size_t offset, size_t count)
 
static voidexynos_spi_map (const struct region_device *rdev, size_t offset, size_t count)
 
void exynos_init_spi_boot_device (void)
 
const struct region_deviceexynos_spi_boot_device (void)
 

Variables

static struct exynos_spi_slave exynos_spi_slaves [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)
 
static struct exynos_spi_slaveboot_slave
 
static const struct region_device_ops exynos_spi_ops
 
static struct mmap_helper_region_device mdev
 

Macro Definition Documentation

◆ DEBUG_SPI

#define DEBUG_SPI (   x,
  ... 
)

Definition at line 20 of file spi.c.

◆ EXYNOS_SPI_MAX_TRANSFER_BYTES

#define EXYNOS_SPI_MAX_TRANSFER_BYTES   (65535)

Definition at line 15 of file spi.c.

Function Documentation

◆ exynos_init_spi_boot_device()

void exynos_init_spi_boot_device ( void  )

Definition at line 274 of file spi.c.

References boot_slave, boot_slave_regs, EXYNOS5_SPI1_BASE, and exynos_spi_slaves.

Referenced by boot_device_init().

Here is the caller graph for this function:

◆ exynos_spi_boot_device()

const struct region_device* exynos_spi_boot_device ( void  )

Definition at line 279 of file spi.c.

References mdev, and mmap_helper_region_device::rdev.

Referenced by boot_device_ro().

Here is the caller graph for this function:

◆ exynos_spi_init()

static void exynos_spi_init ( struct exynos_spi regs)
static

Definition at line 86 of file spi.c.

References clrbits32, setbits32, SPI_CH_CPOL_L, SPI_CH_HS_EN, SPI_FB_DELAY_180, SPI_RX_BYTE_SWAP, SPI_RX_CH_ON, SPI_RX_HWORD_SWAP, SPI_RX_SWAP_EN, spi_sw_reset(), SPI_TX_CH_ON, and write32().

Here is the call graph for this function:

◆ exynos_spi_map()

static void* exynos_spi_map ( const struct region_device rdev,
size_t  offset,
size_t  count 
)
static

Definition at line 254 of file spi.c.

References count, DEBUG_SPI, mmap_helper_rdev_mmap(), offset, and rdev.

Here is the call graph for this function:

◆ exynos_spi_read()

static int exynos_spi_read ( struct spi_slave slave,
void dest,
uint32_t  len,
uint32_t  off 
)
static

Definition at line 226 of file spi.c.

References ASSERT, htonl, NULL, exynos_spi_slave::regs, SF_READ_DATA_CMD, slave, spi_claim_bus(), spi_release_bus(), spi_transfer(), and to_exynos_spi().

Here is the call graph for this function:

◆ exynos_spi_readat()

static ssize_t exynos_spi_readat ( const struct region_device rdev,
void dest,
size_t  offset,
size_t  count 
)
static

Definition at line 247 of file spi.c.

References boot_slave, count, DEBUG_SPI, exynos_spi_read(), offset, and exynos_spi_slave::slave.

Here is the call graph for this function:

◆ spi_ctrlr_claim_bus()

static int spi_ctrlr_claim_bus ( const struct spi_slave slave)
static

Definition at line 104 of file spi.c.

References clrbits32, exynos_spi_slave::regs, slave, SPI_SLAVE_SIG_INACT, and to_exynos_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 189 of file spi.c.

References exynos_spi_slave::regs, setbits32, slave, SPI_SLAVE_SIG_INACT, and to_exynos_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 195 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 164 of file spi.c.

References MIN, NULL, exynos_spi_slave::regs, slave, spi_transfer(), and to_exynos_spi().

Here is the call graph for this function:

◆ spi_sw_reset()

static void spi_sw_reset ( struct exynos_spi regs,
int  word 
)
static

◆ spi_transfer()

static void spi_transfer ( struct exynos_spi regs,
void in,
const void out,
size_t  size 
)
static

Definition at line 112 of file spi.c.

References inb(), memcpy(), MIN, outb(), read32(), SPI_PACKET_CNT_EN, exynos_spi::spi_sts, spi_sw_reset(), width, and write32().

Referenced by exynos_spi_read(), and spi_ctrlr_xfer().

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

◆ to_exynos_spi()

static struct exynos_spi_slave* to_exynos_spi ( const struct spi_slave slave)
inlinestatic

Definition at line 49 of file spi.c.

References spi_slave::bus, exynos_spi_slaves, and slave.

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

Here is the caller graph for this function:

Variable Documentation

◆ boot_slave

struct exynos_spi_slave* boot_slave
static

Definition at line 245 of file spi.c.

Referenced by exynos_init_spi_boot_device(), and exynos_spi_readat().

◆ exynos_spi_ops

const struct region_device_ops exynos_spi_ops
static
Initial value:
= {
.mmap = exynos_spi_map,
.readat = exynos_spi_readat,
}
int mmap_helper_rdev_munmap(const struct region_device *, void *)
Definition: region.c:324
static ssize_t exynos_spi_readat(const struct region_device *rdev, void *dest, size_t offset, size_t count)
Definition: spi.c:247
static void * exynos_spi_map(const struct region_device *rdev, size_t offset, size_t count)
Definition: spi.c:254

Definition at line 254 of file spi.c.

◆ exynos_spi_slaves

struct exynos_spi_slave exynos_spi_slaves[3]
static
Initial value:
= {
{
.slave = { .bus = 0, },
.regs = (void *)EXYNOS5_SPI0_BASE,
},
{
.slave = { .bus = 1, },
.regs = (void *)EXYNOS5_SPI1_BASE,
},
{
.slave = { .bus = 2, },
.regs = (void *)EXYNOS5_SPI2_BASE,
},
}
#define EXYNOS5_SPI1_BASE
Definition: cpu.h:40
#define EXYNOS5_SPI0_BASE
Definition: cpu.h:39
#define EXYNOS5_SPI2_BASE
Definition: cpu.h:45

Definition at line 1 of file spi.c.

Referenced by exynos_init_spi_boot_device(), and to_exynos_spi().

◆ mdev

struct mmap_helper_region_device mdev
static
Initial value:
=
struct mem_pool cbfs_cache
Definition: cbfs.c:26
#define MMAP_HELPER_DEV_INIT(ops_, offset_, size_, mpool_)
Definition: region.h:219
static const struct region_device_ops exynos_spi_ops
Definition: spi.c:265

Definition at line 254 of file spi.c.

◆ 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,
}
static void spi_ctrlr_release_bus(const struct spi_slave *slave)
Definition: spi.c:189
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:164
static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
Definition: spi.c:104
static int spi_ctrlr_setup(const struct spi_slave *slave)
Definition: spi.c:195
#define SPI_CTRLR_DEFAULT_MAX_XFER_SIZE
Definition: spi-generic.h:102

Definition at line 195 of file spi.c.

◆ spi_ctrlr_bus_map

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

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