58 int val,
int us_delay)
124 unsigned int clk_idle_state;
125 unsigned int input_first_mode;
135 input_first_mode = 0;
143 input_first_mode = 0;
151 val |= input_first_mode;
336 unsigned int status_flag;
346 }
while (!status_flag);
384 unsigned int fifo_count;
419 for (i = 0; i < fifo_count; i++) {
463 unsigned int write_len = bytes;
464 unsigned int read_len = bytes;
465 unsigned int fifo_count;
488 while (write_len || read_len) {
506 fifo_count = write_len;
508 for (i = 0; i < fifo_count; i++) {
526 fifo_count = read_len;
528 for (i = 0; i < fifo_count; i++) {
576 size_t out_bytes,
void *din,
size_t in_bytes)
579 u8 *txp = (
u8 *)dout;
628 "SPI error: unsupported bus %d (Supported buses 0, 1 and 2) "
629 "or chipselect\n",
bus);
static void write32(void *addr, uint32_t val)
static uint32_t read32(const void *addr)
#define assert(statement)
#define printk(level,...)
#define clrsetbits32(addr, clear, set)
#define OUTPUT_SERVICE_FLAG
#define QUP_STATE_VALID_MASK
#define INPUT_SERVICE_FLAG
#define INPUT_FIFO_NOT_EMPTY
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
const size_t spi_ctrlr_bus_map_count
#define BLSP0_SPI_ERROR_FLAGS_EN_REG
#define BLSP1_QUP_INPUT_FIFOc_REG(c)
#define SPI_CONFIG_LOOP_BACK_MSK
#define BLSP0_QUP_OUTPUT_FIFOc_REG(c)
#define QUP_IO_MODES_OUTPUT_MODE_MSK
#define BLSP0_QUP_MX_INPUT_COUNT_REG
#define SPI_INPUT_BLOCK_SIZE
#define BLSP1_SPI_ERROR_FLAGS_REG
#define BLSP0_SPI_DEASSERT_WAIT_REG
#define BLSP0_QUP_OPERATIONAL_REG
#define BLSP1_QUP_OUTPUT_FIFOc_REG(c)
#define QUP_CONF_OUTPUT_MSK
#define SPI_CONFIG_INPUT_FIRST
#define SPI_IO_CTRL_CLK_ALWAYS_ON
#define BLSP1_QUP_SW_RESET_REG
#define BLSP1_QUP_MX_INPUT_COUNT_REG
#define QUP_CONF_OUTPUT_ENA
#define QUP_IO_MODES_OUTPUT_BIT_SHIFT_MSK
#define BLSP0_QUP_ERROR_FLAGS_EN_REG
#define BLSP0_QUP_ERROR_FLAGS_REG
#define BLSP0_QUP_OPERATIONAL_MASK
#define BLSP0_SPI_IO_CONTROL_REG
#define SPI_IO_CTRL_CLOCK_IDLE_HIGH
#define BLSP1_QUP_CONFIG_REG
#define BLSP1_QUP_ERROR_FLAGS_EN_REG
#define QUP_CONF_N_SPI_8_BIT_WORD
#define BLSP1_QUP_IO_MODES_REG
#define SPI_OUTPUT_BLOCK_SIZE
#define QUP_CONFIG_MINI_CORE_MSK
#define SPI_IO_CTRL_FORCE_CS_DIS
#define BLSP0_QUP_MX_OUTPUT_COUNT_REG
#define BLSP1_QUP_MX_OUTPUT_COUNT_REG
#define SPI_IO_CTRL_NO_TRI_STATE
#define QUP_IO_MODES_INPUT_MODE_MSK
#define BLSP1_SPI_ERROR_FLAGS_EN_REG
#define QUP_CONF_NO_OUTPUT
#define BLSP0_SPI_ERROR_FLAGS_REG
#define BLSP0_QUP_STATE_REG
#define BLSP1_SPI_DEASSERT_WAIT_REG
#define BLSP1_QUP_OPERATIONAL_REG
#define BLSP1_QUP_ERROR_FLAGS_REG
#define BLSP0_QUP_INPUT_FIFOc_REG(c)
#define SPI_IO_CTRL_FORCE_CS_MSK
#define BLSP1_QUP_OPERATIONAL_MASK
#define SPI_CONFIG_NO_LOOP_BACK
#define QUP_IO_MODES_INPUT_BLOCK_MODE
#define QUP_CONF_NO_INPUT
#define QUP_CONF_INPUT_MSK
#define BLSP0_SPI_CONFIG_REG
#define QUP_IO_MODES_OUTPUT_BIT_SHIFT_EN
#define QUP_CONFIG_MINI_CORE_SPI
#define BLSP0_QUP_CONFIG_REG
#define QUP_CONF_INPUT_ENA
#define BLSP0_QUP_IO_MODES_REG
#define SPI_CONFIG_NO_SLAVE_OPER
#define SPI_IO_CTRL_FORCE_CS_EN
#define BLSP1_QUP_STATE_REG
#define BLSP1_SPI_IO_CONTROL_REG
#define BLSP0_QUP_SW_RESET_REG
#define BLSP1_SPI_CONFIG_REG
#define QUP_IO_MODES_OUTPUT_BLOCK_MODE
#define SPI_CONFIG_NO_SLAVE_OPER_MSK
static int blsp_spi_read(struct ipq_spi_slave *ds, u8 *data_buffer, unsigned int bytes)
static void spi_ctrlr_release_bus(const struct spi_slave *slave)
static unsigned char spi_read_byte(struct ipq_spi_slave *ds)
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 __blsp_spi_write(struct ipq_spi_slave *ds, const u8 *cmd_buffer, unsigned int bytes)
static void spi_set_mode(struct ipq_spi_slave *ds, unsigned int mode)
static int blsp_spi_write(struct ipq_spi_slave *ds, u8 *cmd_buffer, unsigned int bytes)
static void spi_reset(struct ipq_spi_slave *ds)
static int check_fifo_status(void *reg_addr)
static int __blsp_spi_read(struct ipq_spi_slave *ds, u8 *data_buffer, unsigned int bytes)
static int config_spi_state(struct ipq_spi_slave *ds, unsigned int state)
static struct ipq_spi_slave spi_slave_pool[2]
static int spi_hw_init(struct ipq_spi_slave *ds)
static void write_force_cs(const struct spi_slave *slave, int assert)
static int spi_ctrlr_claim_bus(const struct spi_slave *slave)
static int spi_ctrlr_xfer(const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
static void spi_write_byte(struct ipq_spi_slave *ds, unsigned char data)
static void enable_io_config(struct ipq_spi_slave *ds, uint32_t write_cnt, uint32_t read_cnt)
static int spi_ctrlr_setup(const struct spi_slave *slave)
static const struct blsp_spi spi_reg[]
static struct ipq_spi_slave * to_ipq_spi(const struct spi_slave *slave)
static struct spi_slave slave
void * qup_mx_output_count
void * qup_error_flags_en
void * qup_mx_input_count
const struct blsp_spi * regs
const struct spi_ctrlr * ctrlr
int(* setup)(const struct spi_slave *slave)
typedef void(X86APIP X86EMU_intrFuncs)(int num)