coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
spi.c File Reference
#include <arch/cache.h>
#include <device/mmio.h>
#include <assert.h>
#include <console/console.h>
#include <delay.h>
#include <soc/addressmap.h>
#include <soc/dma.h>
#include <soc/spi.h>
#include <spi-generic.h>
#include <spi_flash.h>
#include <timer.h>
#include <types.h>
Include dependency graph for spi.c:

Go to the source code of this file.

Macros

#define DEBUG_SPI(x, ...)
 
#define SPI_PACKET_SIZE_BYTES   1
 
#define SPI_MAX_TRANSFER_BYTES_FIFO   (64 * SPI_PACKET_SIZE_BYTES)
 
#define SPI_MAX_TRANSFER_BYTES_DMA   (65535 * SPI_PACKET_SIZE_BYTES)
 
#define SPI_FIFO_XFER_TIMEOUT_US   1000
 
#define SPI_CMD1_GO   (1 << 31)
 
#define SPI_CMD1_M_S   (1 << 30)
 
#define SPI_CMD1_MODE_MASK   0x3
 
#define SPI_CMD1_MODE_SHIFT   28
 
#define SPI_CMD1_CS_SEL_MASK   0x3
 
#define SPI_CMD1_CS_SEL_SHIFT   26
 
#define SPI_CMD1_CS_POL_INACTIVE3   (1 << 25)
 
#define SPI_CMD1_CS_POL_INACTIVE2   (1 << 24)
 
#define SPI_CMD1_CS_POL_INACTIVE1   (1 << 23)
 
#define SPI_CMD1_CS_POL_INACTIVE0   (1 << 22)
 
#define SPI_CMD1_CS_SW_HW   (1 << 21)
 
#define SPI_CMD1_CS_SW_VAL   (1 << 20)
 
#define SPI_CMD1_IDLE_SDA_MASK   0x3
 
#define SPI_CMD1_IDLE_SDA_SHIFT   18
 
#define SPI_CMD1_BIDIR   (1 << 17)
 
#define SPI_CMD1_LSBI_FE   (1 << 16)
 
#define SPI_CMD1_LSBY_FE   (1 << 15)
 
#define SPI_CMD1_BOTH_EN_BIT   (1 << 14)
 
#define SPI_CMD1_BOTH_EN_BYTE   (1 << 13)
 
#define SPI_CMD1_RX_EN   (1 << 12)
 
#define SPI_CMD1_TX_EN   (1 << 11)
 
#define SPI_CMD1_PACKED   (1 << 5)
 
#define SPI_CMD1_BIT_LEN_MASK   0x1f
 
#define SPI_CMD1_BIT_LEN_SHIFT   0
 
#define SPI_CMD2_TX_CLK_TAP_DELAY   (1 << 6)
 
#define SPI_CMD2_TX_CLK_TAP_DELAY_MASK   (0x3F << 6)
 
#define SPI_CMD2_RX_CLK_TAP_DELAY   (1 << 0)
 
#define SPI_CMD2_RX_CLK_TAP_DELAY_MASK   (0x3F << 0)
 
#define SPI_STATUS_RDY   (1 << 30)
 
#define SPI_STATUS_SLV_IDLE_COUNT_MASK   0xff
 
#define SPI_STATUS_SLV_IDLE_COUNT_SHIFT   16
 
#define SPI_STATUS_BLOCK_COUNT   0xffff
 
#define SPI_STATUS_BLOCK_COUNT_SHIFT   0
 
#define SPI_FIFO_STATUS_CS_INACTIVE   (1 << 31)
 
#define SPI_FIFO_STATUS_FRAME_END   (1 << 30)
 
#define SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_MASK   0x7f
 
#define SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_SHIFT   23
 
#define SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_MASK   0x7f
 
#define SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_SHIFT   16
 
#define SPI_FIFO_STATUS_RX_FIFO_FLUSH   (1 << 15)
 
#define SPI_FIFO_STATUS_TX_FIFO_FLUSH   (1 << 14)
 
#define SPI_FIFO_STATUS_ERR   (1 << 8)
 
#define SPI_FIFO_STATUS_TX_FIFO_OVF   (1 << 7)
 
#define SPI_FIFO_STATUS_TX_FIFO_UNR   (1 << 6)
 
#define SPI_FIFO_STATUS_RX_FIFO_OVF   (1 << 5)
 
#define SPI_FIFO_STATUS_RX_FIFO_UNR   (1 << 4)
 
#define SPI_FIFO_STATUS_TX_FIFO_FULL   (1 << 3)
 
#define SPI_FIFO_STATUS_TX_FIFO_EMPTY   (1 << 2)
 
#define SPI_FIFO_STATUS_RX_FIFO_FULL   (1 << 1)
 
#define SPI_FIFO_STATUS_RX_FIFO_EMPTY   (1 << 0)
 
#define SPI_DMA_CTL_DMA   (1 << 31)
 
#define SPI_DMA_CTL_CONT   (1 << 30)
 
#define SPI_DMA_CTL_IE_RX   (1 << 29)
 
#define SPI_DMA_CTL_IE_TX   (1 << 28)
 
#define SPI_DMA_CTL_RX_TRIG_MASK   0x3
 
#define SPI_DMA_CTL_RX_TRIG_SHIFT   19
 
#define SPI_DMA_CTL_TX_TRIG_MASK   0x3
 
#define SPI_DMA_CTL_TX_TRIG_SHIFT   15
 
#define SPI_DMA_CTL_BLOCK_SIZE_MASK   0xffff
 
#define SPI_DMA_CTL_BLOCK_SIZE_SHIFT   0
 
#define MIN_DELAY_US   250
 

Enumerations

enum  spi_direction { SPI_SEND , SPI_RECEIVE , SPI_SEND , SPI_RECEIVE }
 

Functions

struct tegra_spi_channeltegra_spi_init (unsigned int bus)
 
static struct tegra_spi_channel *const to_tegra_spi (int bus)
 
static unsigned int tegra_spi_speed (unsigned int bus)
 
static int spi_ctrlr_claim_bus (const struct spi_slave *slave)
 
static void spi_ctrlr_release_bus (const struct spi_slave *slave)
 
static void dump_fifo_status (struct tegra_spi_channel *spi)
 
static void clear_fifo_status (struct tegra_spi_channel *spi)
 
static void dump_spi_regs (struct tegra_spi_channel *spi)
 
static void dump_dma_regs (struct apb_dma_channel *dma)
 
static unsigned int spi_byte_count (struct tegra_spi_channel *spi)
 
static void spi_delay (struct tegra_spi_channel *spi, unsigned int bytes_remaining)
 
static void tegra_spi_wait (struct tegra_spi_channel *spi)
 
static int fifo_error (struct tegra_spi_channel *spi)
 
static int tegra_spi_pio_prepare (struct tegra_spi_channel *spi, unsigned int bytes, enum spi_direction dir)
 
static void tegra_spi_pio_start (struct tegra_spi_channel *spi)
 
static u32 rx_fifo_count (struct tegra_spi_channel *spi)
 
static int tegra_spi_pio_finish (struct tegra_spi_channel *spi)
 
static void setup_dma_params (struct tegra_spi_channel *spi, struct apb_dma_channel *dma)
 
static int tegra_spi_dma_prepare (struct tegra_spi_channel *spi, unsigned int bytes, enum spi_direction dir)
 
static void tegra_spi_dma_start (struct tegra_spi_channel *spi)
 
static int tegra_spi_dma_finish (struct tegra_spi_channel *spi)
 
static int xfer_setup (struct tegra_spi_channel *spi, void *buf, unsigned int bytes, enum spi_direction dir)
 
static void xfer_start (struct tegra_spi_channel *spi)
 
static void xfer_wait (struct tegra_spi_channel *spi)
 
static int xfer_finish (struct tegra_spi_channel *spi)
 
static int spi_ctrlr_xfer (const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
 

Variables

static struct tegra_spi_channel tegra_spi_channels []
 
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)
 

Macro Definition Documentation

◆ DEBUG_SPI

#define DEBUG_SPI (   x,
  ... 
)

Definition at line 20 of file spi.c.

◆ MIN_DELAY_US

#define MIN_DELAY_US   250

Definition at line 312 of file spi.c.

◆ SPI_CMD1_BIDIR

#define SPI_CMD1_BIDIR   (1 << 17)

Definition at line 53 of file spi.c.

◆ SPI_CMD1_BIT_LEN_MASK

#define SPI_CMD1_BIT_LEN_MASK   0x1f

Definition at line 61 of file spi.c.

◆ SPI_CMD1_BIT_LEN_SHIFT

#define SPI_CMD1_BIT_LEN_SHIFT   0

Definition at line 62 of file spi.c.

◆ SPI_CMD1_BOTH_EN_BIT

#define SPI_CMD1_BOTH_EN_BIT   (1 << 14)

Definition at line 56 of file spi.c.

◆ SPI_CMD1_BOTH_EN_BYTE

#define SPI_CMD1_BOTH_EN_BYTE   (1 << 13)

Definition at line 57 of file spi.c.

◆ SPI_CMD1_CS_POL_INACTIVE0

#define SPI_CMD1_CS_POL_INACTIVE0   (1 << 22)

Definition at line 48 of file spi.c.

◆ SPI_CMD1_CS_POL_INACTIVE1

#define SPI_CMD1_CS_POL_INACTIVE1   (1 << 23)

Definition at line 47 of file spi.c.

◆ SPI_CMD1_CS_POL_INACTIVE2

#define SPI_CMD1_CS_POL_INACTIVE2   (1 << 24)

Definition at line 46 of file spi.c.

◆ SPI_CMD1_CS_POL_INACTIVE3

#define SPI_CMD1_CS_POL_INACTIVE3   (1 << 25)

Definition at line 45 of file spi.c.

◆ SPI_CMD1_CS_SEL_MASK

#define SPI_CMD1_CS_SEL_MASK   0x3

Definition at line 43 of file spi.c.

◆ SPI_CMD1_CS_SEL_SHIFT

#define SPI_CMD1_CS_SEL_SHIFT   26

Definition at line 44 of file spi.c.

◆ SPI_CMD1_CS_SW_HW

#define SPI_CMD1_CS_SW_HW   (1 << 21)

Definition at line 49 of file spi.c.

◆ SPI_CMD1_CS_SW_VAL

#define SPI_CMD1_CS_SW_VAL   (1 << 20)

Definition at line 50 of file spi.c.

◆ SPI_CMD1_GO

#define SPI_CMD1_GO   (1 << 31)

Definition at line 39 of file spi.c.

◆ SPI_CMD1_IDLE_SDA_MASK

#define SPI_CMD1_IDLE_SDA_MASK   0x3

Definition at line 51 of file spi.c.

◆ SPI_CMD1_IDLE_SDA_SHIFT

#define SPI_CMD1_IDLE_SDA_SHIFT   18

Definition at line 52 of file spi.c.

◆ SPI_CMD1_LSBI_FE

#define SPI_CMD1_LSBI_FE   (1 << 16)

Definition at line 54 of file spi.c.

◆ SPI_CMD1_LSBY_FE

#define SPI_CMD1_LSBY_FE   (1 << 15)

Definition at line 55 of file spi.c.

◆ SPI_CMD1_M_S

#define SPI_CMD1_M_S   (1 << 30)

Definition at line 40 of file spi.c.

◆ SPI_CMD1_MODE_MASK

#define SPI_CMD1_MODE_MASK   0x3

Definition at line 41 of file spi.c.

◆ SPI_CMD1_MODE_SHIFT

#define SPI_CMD1_MODE_SHIFT   28

Definition at line 42 of file spi.c.

◆ SPI_CMD1_PACKED

#define SPI_CMD1_PACKED   (1 << 5)

Definition at line 60 of file spi.c.

◆ SPI_CMD1_RX_EN

#define SPI_CMD1_RX_EN   (1 << 12)

Definition at line 58 of file spi.c.

◆ SPI_CMD1_TX_EN

#define SPI_CMD1_TX_EN   (1 << 11)

Definition at line 59 of file spi.c.

◆ SPI_CMD2_RX_CLK_TAP_DELAY

#define SPI_CMD2_RX_CLK_TAP_DELAY   (1 << 0)

Definition at line 67 of file spi.c.

◆ SPI_CMD2_RX_CLK_TAP_DELAY_MASK

#define SPI_CMD2_RX_CLK_TAP_DELAY_MASK   (0x3F << 0)

Definition at line 68 of file spi.c.

◆ SPI_CMD2_TX_CLK_TAP_DELAY

#define SPI_CMD2_TX_CLK_TAP_DELAY   (1 << 6)

Definition at line 65 of file spi.c.

◆ SPI_CMD2_TX_CLK_TAP_DELAY_MASK

#define SPI_CMD2_TX_CLK_TAP_DELAY_MASK   (0x3F << 6)

Definition at line 66 of file spi.c.

◆ SPI_DMA_CTL_BLOCK_SIZE_MASK

#define SPI_DMA_CTL_BLOCK_SIZE_MASK   0xffff

Definition at line 107 of file spi.c.

◆ SPI_DMA_CTL_BLOCK_SIZE_SHIFT

#define SPI_DMA_CTL_BLOCK_SIZE_SHIFT   0

Definition at line 108 of file spi.c.

◆ SPI_DMA_CTL_CONT

#define SPI_DMA_CTL_CONT   (1 << 30)

Definition at line 98 of file spi.c.

◆ SPI_DMA_CTL_DMA

#define SPI_DMA_CTL_DMA   (1 << 31)

Definition at line 97 of file spi.c.

◆ SPI_DMA_CTL_IE_RX

#define SPI_DMA_CTL_IE_RX   (1 << 29)

Definition at line 99 of file spi.c.

◆ SPI_DMA_CTL_IE_TX

#define SPI_DMA_CTL_IE_TX   (1 << 28)

Definition at line 100 of file spi.c.

◆ SPI_DMA_CTL_RX_TRIG_MASK

#define SPI_DMA_CTL_RX_TRIG_MASK   0x3

Definition at line 101 of file spi.c.

◆ SPI_DMA_CTL_RX_TRIG_SHIFT

#define SPI_DMA_CTL_RX_TRIG_SHIFT   19

Definition at line 102 of file spi.c.

◆ SPI_DMA_CTL_TX_TRIG_MASK

#define SPI_DMA_CTL_TX_TRIG_MASK   0x3

Definition at line 103 of file spi.c.

◆ SPI_DMA_CTL_TX_TRIG_SHIFT

#define SPI_DMA_CTL_TX_TRIG_SHIFT   15

Definition at line 104 of file spi.c.

◆ SPI_FIFO_STATUS_CS_INACTIVE

#define SPI_FIFO_STATUS_CS_INACTIVE   (1 << 31)

Definition at line 78 of file spi.c.

◆ SPI_FIFO_STATUS_ERR

#define SPI_FIFO_STATUS_ERR   (1 << 8)

Definition at line 86 of file spi.c.

◆ SPI_FIFO_STATUS_FRAME_END

#define SPI_FIFO_STATUS_FRAME_END   (1 << 30)

Definition at line 79 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_EMPTY

#define SPI_FIFO_STATUS_RX_FIFO_EMPTY   (1 << 0)

Definition at line 94 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_FLUSH

#define SPI_FIFO_STATUS_RX_FIFO_FLUSH   (1 << 15)

Definition at line 84 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_FULL

#define SPI_FIFO_STATUS_RX_FIFO_FULL   (1 << 1)

Definition at line 93 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_MASK

#define SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_MASK   0x7f

Definition at line 80 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_SHIFT

#define SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_SHIFT   23

Definition at line 81 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_OVF

#define SPI_FIFO_STATUS_RX_FIFO_OVF   (1 << 5)

Definition at line 89 of file spi.c.

◆ SPI_FIFO_STATUS_RX_FIFO_UNR

#define SPI_FIFO_STATUS_RX_FIFO_UNR   (1 << 4)

Definition at line 90 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_EMPTY

#define SPI_FIFO_STATUS_TX_FIFO_EMPTY   (1 << 2)

Definition at line 92 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_MASK

#define SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_MASK   0x7f

Definition at line 82 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_SHIFT

#define SPI_FIFO_STATUS_TX_FIFO_EMPTY_COUNT_SHIFT   16

Definition at line 83 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_FLUSH

#define SPI_FIFO_STATUS_TX_FIFO_FLUSH   (1 << 14)

Definition at line 85 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_FULL

#define SPI_FIFO_STATUS_TX_FIFO_FULL   (1 << 3)

Definition at line 91 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_OVF

#define SPI_FIFO_STATUS_TX_FIFO_OVF   (1 << 7)

Definition at line 87 of file spi.c.

◆ SPI_FIFO_STATUS_TX_FIFO_UNR

#define SPI_FIFO_STATUS_TX_FIFO_UNR   (1 << 6)

Definition at line 88 of file spi.c.

◆ SPI_FIFO_XFER_TIMEOUT_US

#define SPI_FIFO_XFER_TIMEOUT_US   1000

Definition at line 36 of file spi.c.

◆ SPI_MAX_TRANSFER_BYTES_DMA

#define SPI_MAX_TRANSFER_BYTES_DMA   (65535 * SPI_PACKET_SIZE_BYTES)

Definition at line 29 of file spi.c.

◆ SPI_MAX_TRANSFER_BYTES_FIFO

#define SPI_MAX_TRANSFER_BYTES_FIFO   (64 * SPI_PACKET_SIZE_BYTES)

Definition at line 28 of file spi.c.

◆ SPI_PACKET_SIZE_BYTES

#define SPI_PACKET_SIZE_BYTES   1

Definition at line 27 of file spi.c.

◆ SPI_STATUS_BLOCK_COUNT

#define SPI_STATUS_BLOCK_COUNT   0xffff

Definition at line 74 of file spi.c.

◆ SPI_STATUS_BLOCK_COUNT_SHIFT

#define SPI_STATUS_BLOCK_COUNT_SHIFT   0

Definition at line 75 of file spi.c.

◆ SPI_STATUS_RDY

#define SPI_STATUS_RDY   (1 << 30)

Definition at line 71 of file spi.c.

◆ SPI_STATUS_SLV_IDLE_COUNT_MASK

#define SPI_STATUS_SLV_IDLE_COUNT_MASK   0xff

Definition at line 72 of file spi.c.

◆ SPI_STATUS_SLV_IDLE_COUNT_SHIFT

#define SPI_STATUS_SLV_IDLE_COUNT_SHIFT   16

Definition at line 73 of file spi.c.

Enumeration Type Documentation

◆ spi_direction

Enumerator
SPI_SEND 
SPI_RECEIVE 
SPI_SEND 
SPI_RECEIVE 

Definition at line 151 of file spi.c.

Function Documentation

◆ clear_fifo_status()

◆ dump_dma_regs()

static void dump_dma_regs ( struct apb_dma_channel dma)
static

Definition at line 273 of file spi.c.

References BIOS_INFO, dma, NULL, printk, and read32().

Referenced by tegra_spi_dma_finish().

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

◆ dump_fifo_status()

static void dump_fifo_status ( struct tegra_spi_channel spi)
static

◆ dump_spi_regs()

static void dump_spi_regs ( struct tegra_spi_channel spi)
static

Definition at line 260 of file spi.c.

References BIOS_INFO, tegra_spi_regs::command1, tegra_spi_regs::dma_blk, tegra_spi_regs::dma_ctl, printk, read32(), tegra_spi_channel::regs, and tegra_spi_regs::trans_status.

Referenced by tegra_spi_dma_finish(), and tegra_spi_pio_finish().

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

◆ fifo_error()

static int fifo_error ( struct tegra_spi_channel spi)
static

Definition at line 338 of file spi.c.

References tegra_spi_regs::fifo_status, read32(), tegra_spi_channel::regs, and SPI_FIFO_STATUS_ERR.

Referenced by tegra_spi_dma_finish(), and tegra_spi_pio_finish().

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

◆ rx_fifo_count()

static u32 rx_fifo_count ( struct tegra_spi_channel spi)
inlinestatic

Definition at line 388 of file spi.c.

References tegra_spi_regs::fifo_status, read32(), tegra_spi_channel::regs, SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_MASK, and SPI_FIFO_STATUS_RX_FIFO_FULL_COUNT_SHIFT.

Referenced by tegra_spi_pio_finish().

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

◆ setup_dma_params()

static void setup_dma_params ( struct tegra_spi_channel spi,
struct apb_dma_channel dma 
)
static

◆ spi_byte_count()

static unsigned int spi_byte_count ( struct tegra_spi_channel spi)
inlinestatic

Definition at line 299 of file spi.c.

References read32(), tegra_spi_channel::regs, SPI_STATUS_BLOCK_COUNT, SPI_STATUS_BLOCK_COUNT_SHIFT, and tegra_spi_regs::trans_status.

Referenced by tegra_spi_dma_finish(), tegra_spi_pio_finish(), and tegra_spi_wait().

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

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

References spi_slave::bus, spi_slave::cs, read32(), tegra_spi_channel::regs, slave, SPI_CMD1_CS_POL_INACTIVE0, SPI_CMD1_CS_SW_VAL, to_tegra_spi(), val, and write32().

Here is the call graph for this function:

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

◆ spi_delay()

static void spi_delay ( struct tegra_spi_channel spi,
unsigned int  bytes_remaining 
)
static

Definition at line 313 of file spi.c.

References spi_slave::bus, MIN_DELAY_US, tegra_spi_channel::slave, tegra_spi_speed(), and udelay().

Referenced by tegra_spi_dma_finish(), and tegra_spi_wait().

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

◆ tegra_spi_dma_finish()

◆ tegra_spi_dma_prepare()

◆ tegra_spi_dma_start()

static void tegra_spi_dma_start ( struct tegra_spi_channel spi)
static

Definition at line 502 of file spi.c.

References tegra_spi_regs::command1, tegra_spi_regs::dma_ctl, tegra_spi_channel::dma_in, tegra_spi_channel::dma_out, dma_start(), tegra_spi_channel::regs, setbits32, SPI_CMD1_RX_EN, SPI_CMD1_TX_EN, SPI_DMA_CTL_DMA, SPI_STATUS_RDY, and tegra_spi_regs::trans_status.

Referenced by xfer_start().

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

◆ tegra_spi_init()

struct tegra_spi_channel* tegra_spi_init ( unsigned int  bus)

Definition at line 156 of file spi.c.

Referenced by spi_ctrlr_claim_bus().

Here is the caller graph for this function:

◆ tegra_spi_pio_finish()

◆ tegra_spi_pio_prepare()

static int tegra_spi_pio_prepare ( struct tegra_spi_channel spi,
unsigned int  bytes,
enum spi_direction  dir 
)
static

◆ tegra_spi_pio_start()

static void tegra_spi_pio_start ( struct tegra_spi_channel spi)
static

Definition at line 380 of file spi.c.

References tegra_spi_regs::command1, read32(), tegra_spi_channel::regs, setbits32, SPI_CMD1_GO, SPI_STATUS_RDY, and tegra_spi_regs::trans_status.

Referenced by xfer_start().

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

◆ tegra_spi_speed()

static unsigned int tegra_spi_speed ( unsigned int  bus)
static

Definition at line 186 of file spi.c.

Referenced by spi_delay().

Here is the caller graph for this function:

◆ tegra_spi_wait()

static void tegra_spi_wait ( struct tegra_spi_channel spi)
static

Definition at line 327 of file spi.c.

References count, tegra_spi_regs::dma_blk, read32(), tegra_spi_channel::regs, spi_byte_count(), spi_delay(), SPI_DMA_CTL_BLOCK_SIZE_MASK, and SPI_DMA_CTL_BLOCK_SIZE_SHIFT.

Referenced by xfer_wait().

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

◆ to_tegra_spi()

static struct tegra_spi_channel* const to_tegra_spi ( int  bus)
static

Definition at line 182 of file spi.c.

References tegra_spi_channels.

Referenced by spi_ctrlr_claim_bus(), and spi_ctrlr_release_bus().

Here is the caller graph for this function:

◆ xfer_finish()

static int xfer_finish ( struct tegra_spi_channel spi)
static

Definition at line 687 of file spi.c.

References tegra_spi_dma_finish(), tegra_spi_pio_finish(), tegra_spi_channel::xfer_mode, XFER_MODE_DMA, and XFER_MODE_NONE.

Here is the call graph for this function:

◆ xfer_setup()

static int xfer_setup ( struct tegra_spi_channel spi,
void buf,
unsigned int  bytes,
enum spi_direction  dir 
)
static

◆ xfer_start()

static void xfer_start ( struct tegra_spi_channel spi)
static

Definition at line 674 of file spi.c.

References tegra_spi_dma_start(), tegra_spi_pio_start(), tegra_spi_channel::xfer_mode, and XFER_MODE_DMA.

Here is the call graph for this function:

◆ xfer_wait()

static void xfer_wait ( struct tegra_spi_channel spi)
static

Definition at line 682 of file spi.c.

References tegra_spi_wait().

Here is the call graph for this function:

Variable Documentation

◆ spi_ctrlr

const struct spi_ctrlr spi_ctrlr
static
Initial value:
= {
.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:215
static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
Definition: spi.c:192
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:700
#define SPI_CTRLR_DEFAULT_MAX_XFER_SIZE
Definition: spi-generic.h:102

Definition at line 700 of file spi.c.

◆ spi_ctrlr_bus_map

const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
Initial value:
= {
{
.ctrlr = &spi_ctrlr,
.bus_start = 1,
},
}
#define ARRAY_SIZE(a)
Definition: helpers.h:12
const struct spi_ctrlr spi_ctrlr
Definition: spi.c:261
static struct tegra_spi_channel tegra_spi_channels[]
Definition: spi.c:110

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

◆ tegra_spi_channels

struct tegra_spi_channel tegra_spi_channels[]
static

Definition at line 1 of file spi.c.

Referenced by tegra_spi_init(), and to_tegra_spi().