coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
qupv3_spi.c File Reference
#include <assert.h>
#include <lib.h>
#include <soc/clock.h>
#include <soc/gpio.h>
#include <soc/qcom_qup_se.h>
#include <soc/qup_se_handlers_common.h>
#include <soc/qupv3_config_common.h>
#include <soc/qupv3_spi_common.h>
#include <types.h>
Include dependency graph for qupv3_spi.c:

Go to the source code of this file.

Macros

#define LOOPBACK_ENABLE   0x1
 
#define WORD_LEN_MSK   QC_GENMASK(9, 0)
 
#define MIN_WORD_LEN   4
 
#define TRANS_LEN_MSK   QC_GENMASK(23, 0)
 
#define SPI_TX_ONLY   1
 
#define SPI_RX_ONLY   2
 
#define SPI_FULL_DUPLEX   3
 
#define SPI_TX_RX   7
 
#define SPI_CS_ASSERT   8
 
#define SPI_CS_DEASSERT   9
 
#define SPI_SCK_ONLY   10
 
#define M_CMD_FRAGMENTATION   BIT(2)
 
#define BITS_PER_BYTE   8
 
#define BITS_PER_WORD   8
 
#define TX_WATERMARK   1
 
#define IRQ_TRIGGER
 

Functions

static void setup_fifo_params (const struct spi_slave *slave)
 
static void qup_setup_m_cmd (unsigned int se_bus, u32 cmd, u32 params)
 
int qup_spi_xfer (const struct spi_slave *slave, const void *dout, size_t bytes_out, void *din, size_t bytes_in)
 
static int spi_qup_set_cs (const struct spi_slave *slave, bool enable)
 
void qup_spi_init (unsigned int bus, unsigned int speed_hz)
 
int qup_spi_claim_bus (const struct spi_slave *slave)
 
void qup_spi_release_bus (const struct spi_slave *slave)
 

Macro Definition Documentation

◆ BITS_PER_BYTE

#define BITS_PER_BYTE   8

Definition at line 36 of file qupv3_spi.c.

◆ BITS_PER_WORD

#define BITS_PER_WORD   8

Definition at line 37 of file qupv3_spi.c.

◆ IRQ_TRIGGER

#define IRQ_TRIGGER
Value:
M_TX_FIFO_WATERMARK_EN | M_CMD_DONE_EN | \
M_CMD_CANCEL_EN | M_CMD_ABORT_EN)
#define M_CMD_ABORT_EN
#define M_CMD_DONE_EN
#define M_RX_FIFO_WATERMARK_EN
#define M_RX_FIFO_LAST_EN

Definition at line 40 of file qupv3_spi.c.

◆ LOOPBACK_ENABLE

#define LOOPBACK_ENABLE   0x1

Definition at line 14 of file qupv3_spi.c.

◆ M_CMD_FRAGMENTATION

#define M_CMD_FRAGMENTATION   BIT(2)

Definition at line 34 of file qupv3_spi.c.

◆ MIN_WORD_LEN

#define MIN_WORD_LEN   4

Definition at line 18 of file qupv3_spi.c.

◆ SPI_CS_ASSERT

#define SPI_CS_ASSERT   8

Definition at line 28 of file qupv3_spi.c.

◆ SPI_CS_DEASSERT

#define SPI_CS_DEASSERT   9

Definition at line 29 of file qupv3_spi.c.

◆ SPI_FULL_DUPLEX

#define SPI_FULL_DUPLEX   3

Definition at line 26 of file qupv3_spi.c.

◆ SPI_RX_ONLY

#define SPI_RX_ONLY   2

Definition at line 25 of file qupv3_spi.c.

◆ SPI_SCK_ONLY

#define SPI_SCK_ONLY   10

Definition at line 30 of file qupv3_spi.c.

◆ SPI_TX_ONLY

#define SPI_TX_ONLY   1

Definition at line 24 of file qupv3_spi.c.

◆ SPI_TX_RX

#define SPI_TX_RX   7

Definition at line 27 of file qupv3_spi.c.

◆ TRANS_LEN_MSK

#define TRANS_LEN_MSK   QC_GENMASK(23, 0)

Definition at line 21 of file qupv3_spi.c.

◆ TX_WATERMARK

#define TX_WATERMARK   1

Definition at line 38 of file qupv3_spi.c.

◆ WORD_LEN_MSK

#define WORD_LEN_MSK   QC_GENMASK(9, 0)

Definition at line 17 of file qupv3_spi.c.

Function Documentation

◆ qup_setup_m_cmd()

static void qup_setup_m_cmd ( unsigned int  se_bus,
u32  cmd,
u32  params 
)
static

Definition at line 69 of file qupv3_spi.c.

References M_OPCODE_SHFT, M_PARAMS_MSK, params, qup::regs, and write32().

Referenced by qup_spi_xfer(), and spi_qup_set_cs().

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

◆ qup_spi_claim_bus()

int qup_spi_claim_bus ( const struct spi_slave slave)

Definition at line 213 of file qupv3_spi.c.

References slave, and spi_qup_set_cs().

Here is the call graph for this function:

◆ qup_spi_init()

◆ qup_spi_release_bus()

void qup_spi_release_bus ( const struct spi_slave slave)

Definition at line 218 of file qupv3_spi.c.

References slave, and spi_qup_set_cs().

Here is the call graph for this function:

◆ qup_spi_xfer()

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

Definition at line 78 of file qupv3_spi.c.

References assert, spi_slave::bus, M_CMD_FRAGMENTATION, MAX, MIN, NULL, qup_handle_transfer(), qup_setup_m_cmd(), qup_spi_xfer(), qup::regs, setup_fifo_params(), slave, SPI_FULL_DUPLEX, SPI_RX_ONLY, SPI_TX_ONLY, stopwatch_init_msecs_expire(), TRANS_LEN_MSK, TX_WATERMARK, and write32().

Referenced by qup_spi_xfer().

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

◆ setup_fifo_params()

static void setup_fifo_params ( const struct spi_slave slave)
static

Definition at line 44 of file qupv3_spi.c.

References BITS_PER_WORD, spi_slave::bus, spi_slave::cs, log2(), MIN_WORD_LEN, PACK_VECTOR0, PACK_VECTOR1, PACK_VECTOR2, PACK_VECTOR3, qup::regs, slave, WORD_LEN_MSK, and write32().

Referenced by qup_spi_xfer().

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

◆ spi_qup_set_cs()

static int spi_qup_set_cs ( const struct spi_slave slave,
bool  enable 
)
static

Definition at line 128 of file qupv3_spi.c.

References BIOS_INFO, spi_slave::bus, M_CMD_DONE_EN, printk, qup_m_cancel_and_abort(), qup_setup_m_cmd(), qup_wait_for_m_irq(), slave, SPI_CS_ASSERT, SPI_CS_DEASSERT, stopwatch_expired(), stopwatch_init_usecs_expire(), and write32().

Referenced by qup_spi_claim_bus(), and qup_spi_release_bus().

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