coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
|
#include <device/mmio.h>
#include <console/console.h>
#include <delay.h>
#include <gpio.h>
#include <soc/iomap.h>
#include <soc/spi.h>
#include <types.h>
Go to the source code of this file.
Macros | |
#define | SUCCESS 0 |
#define | DUMMY_DATA_VAL 0 |
#define | TIMEOUT_CNT 100 |
#define | CS_ASSERT 1 |
#define | CS_DEASSERT 0 |
#define | NUM_PORTS 3 |
#define | NUM_GSBI_PINS 3 |
#define | TLMM_ARGS 6 |
#define | NUM_CS 4 |
#define | GSBI_PIN_IDX 0 |
#define | FUNC_SEL_IDX 1 |
#define | GPIO_DIR_IDX 2 |
#define | PULL_CONF_IDX 3 |
#define | DRV_STR_IDX 4 |
#define | GPIO_EN_IDX 5 |
#define | ETIMEDOUT -10 |
#define | EINVAL -11 |
#define | EIO -12 |
#define | GSBI_IDX_TO_GSBI(idx) (idx + 5) |
#define | MAX_PACKET_COUNT ((64 * KiB) - 1) |
Functions | |
static int | check_bit_state (uint32_t reg_addr, int bit_num, int val, int us_delay) |
static int | check_qup_state_valid (struct ipq_spi_slave *ds) |
static int | config_spi_state (struct ipq_spi_slave *ds, unsigned int state) |
static void | spi_set_mode (struct ipq_spi_slave *ds, unsigned int mode) |
static int | check_hclk_state (unsigned int core_num, int enable) |
static int | check_qup_clk_state (unsigned int core_num, int enable) |
static void | CS_change (int port_num, int cs_num, int enable) |
static void | gsbi_pin_config (unsigned int port_num, int cs_num) |
static int | gsbi_clock_init (struct ipq_spi_slave *ds) |
static void | spi_reset (struct ipq_spi_slave *ds) |
static struct ipq_spi_slave * | to_ipq_spi (const struct spi_slave *slave) |
static int | spi_hw_init (struct ipq_spi_slave *ds) |
static int | spi_ctrlr_claim_bus (const struct spi_slave *slave) |
static void | spi_ctrlr_release_bus (const struct spi_slave *slave) |
static int | spi_xfer_tx_packet (struct ipq_spi_slave *ds, const uint8_t *dout, unsigned int out_bytes) |
static int | spi_xfer_rx_packet (struct ipq_spi_slave *ds, uint8_t *din, unsigned int in_bytes) |
static int | spi_ctrlr_xfer (const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes) |
static int | spi_ctrlr_setup (const struct spi_slave *slave) |
Variables | |
static unsigned int | gsbi_pin_conf [NUM_PORTS][NUM_GSBI_PINS][TLMM_ARGS] |
static unsigned int | cs_gpio_array [NUM_PORTS][NUM_CS] |
static unsigned int | hclk_state [NUM_PORTS] |
static unsigned int | qup_apps_clk_state [NUM_PORTS] |
static const struct gsbi_spi | spi_reg [] |
static struct ipq_spi_slave | spi_slave_pool [2] |
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 |
Definition at line 143 of file spi.c.
References count, ETIMEDOUT, readl_i, SUCCESS, TIMEOUT_CNT, udelay(), and val.
Referenced by check_hclk_state(), check_qup_clk_state(), and check_qup_state_valid().
|
static |
Definition at line 257 of file spi.c.
References check_bit_state(), CLK_HALT_CFPB_STATEB_REG, and hclk_state.
Referenced by gsbi_clock_init().
|
static |
Definition at line 266 of file spi.c.
References check_bit_state(), CLK_HALT_CFPB_STATEB_REG, and qup_apps_clk_state.
Referenced by gsbi_clock_init().
|
static |
Definition at line 162 of file spi.c.
References check_bit_state(), blsp_spi::qup_state, QUP_STATE_VALID, QUP_STATE_VALID_BIT, and ipq_spi_slave::regs.
Referenced by config_spi_state().
|
static |
Definition at line 173 of file spi.c.
References BIOS_ERR, check_qup_state_valid(), EINVAL, printk, blsp_spi::qup_state, QUP_STATE_MASK, QUP_STATE_PAUSE_STATE, QUP_STATE_RESET_STATE, QUP_STATE_RUN_STATE, readl_i, ipq_spi_slave::regs, SPI_PAUSE_STATE, SPI_RESET_STATE, SPI_RUN_STATE, SUCCESS, val, and writel_i.
Referenced by spi_ctrlr_xfer(), spi_hw_init(), spi_xfer_rx_packet(), and spi_xfer_tx_packet().
|
static |
Definition at line 275 of file spi.c.
References addr, cs_gpio_array, GPIO_IN_OUT_ADDR, GPIO_OUTPUT, readl_i, val, and write32().
Referenced by gsbi_pin_config(), and spi_ctrlr_xfer().
|
static |
Definition at line 331 of file spi.c.
References BIOS_ERR, spi_slave::bus, check_hclk_state(), check_qup_clk_state(), CLK_ROOT_DIS, CLK_ROOT_ENA, CLK_ROOT_ENA_MSK, clrsetbits32_i, GSBI1_RESET, GSBI1_RESET_MSK, GSBI_CLK_BRANCH_ENA, GSBI_CLK_BRANCH_ENA_MSK, GSBI_D_VAL_SHFT, GSBI_IDX_TO_GSBI, GSBI_M_VAL_SHFT, GSBI_N_VAL_SHFT, GSBI_PRE_DIV_SEL_SHFT, GSBIn_D_VAL_MSK, GSBIn_HCLK_CTL_REG, GSBIn_M_VAL_MSK, GSBIn_N_VAL_MSK, GSBIn_PLL_SRC_MSK, GSBIn_PLL_SRC_PLL8, GSBIn_PRE_DIV_SEL_MSK, GSBIn_RESET_REG, MNCNTR_DIS, MNCNTR_EN, MNCNTR_MODE_DUAL_EDGE, MNCNTR_MODE_MSK, MNCNTR_MSK, MNCNTR_RST_DIS, MNCNTR_RST_ENA, MNCNTR_RST_MSK, printk, QUP_CLK_BRANCH_DIS, QUP_CLK_BRANCH_ENA, QUP_CLK_BRANCH_ENA_MSK, blsp_spi::qup_md_reg, blsp_spi::qup_ns_reg, ipq_spi_slave::regs, ipq_spi_slave::slave, SUCCESS, and udelay().
Referenced by spi_ctrlr_claim_bus().
Definition at line 290 of file spi.c.
References clrsetbits32_i, CS_change(), CS_DEASSERT, cs_gpio_array, DRV_STR_IDX, FUNC_SEL_GPIO, FUNC_SEL_IDX, GPIO_DIR_IDX, GPIO_DRV_STR_10MA, GPIO_EN_IDX, GPIO_FUNC_ENABLE, GPIO_OUTPUT, GPIO_PULL_UP, gpio_tlmm_config(), GSBI1_RESET, GSBI1_RESET_MSK, GSBI_IDX_TO_GSBI, gsbi_pin_conf, GSBI_PIN_IDX, GSBIn_RESET_REG, NUM_GSBI_PINS, and PULL_CONF_IDX.
Referenced by spi_ctrlr_claim_bus().
|
static |
Definition at line 587 of file spi.c.
References spi_slave::bus, spi_slave::cs, EIO, gsbi_clock_init(), gsbi_pin_config(), ipq_spi_slave::initialized, slave, ipq_spi_slave::slave, spi_hw_init(), SUCCESS, and to_ipq_spi().
Definition at line 610 of file spi.c.
References ipq_spi_slave::initialized, slave, spi_reset(), and to_ipq_spi().
|
static |
|
static |
Definition at line 675 of file spi.c.
References spi_slave::bus, clrsetbits32_i, config_spi_state(), spi_slave::cs, CS_ASSERT, CS_change(), CS_DEASSERT, MAX_PACKET_COUNT, MIN, blsp_spi::qup_config, ipq_spi_slave::regs, slave, ipq_spi_slave::slave, SPI_QUP_CONF_INPUT_ENA, SPI_QUP_CONF_INPUT_MSK, SPI_QUP_CONF_OUTPUT_ENA, SPI_QUP_CONF_OUTPUT_MSK, SPI_RESET_STATE, spi_xfer_rx_packet(), spi_xfer_tx_packet(), to_ipq_spi(), and void().
|
static |
Definition at line 513 of file spi.c.
References CLK_ALWAYS_ON, clrsetbits32_i, config_spi_state(), blsp_spi::error_flags_en, ipq_spi_slave::initialized, INPUT_BLOCK_MODE, INPUT_BLOCK_MODE_MSK, blsp_spi::io_control, LOOP_BACK_MSK, ipq_spi_slave::mode, MX_CS_MODE, NO_LOOP_BACK, NO_TRI_STATE, OUTPUT_BIT_SHIFT_EN, OUTPUT_BIT_SHIFT_MSK, OUTPUT_BLOCK_MODE, OUTPUT_BLOCK_MODE_MSK, PROTOCOL_CODE_MSK, PROTOCOL_CODE_SPI, blsp_spi::qup_config, QUP_CONFIG_MINI_CORE_MSK, QUP_CONFIG_MINI_CORE_SPI, blsp_spi::qup_error_flags_en, blsp_spi::qup_io_modes, ipq_spi_slave::regs, SLAVE_OPERATION, SLAVE_OPERATION_MSK, SPI_8_BIT_WORD, SPI_BIT_WORD_MSK, blsp_spi::spi_config, SPI_QUP_CONF_INPUT_MSK, SPI_QUP_CONF_NO_INPUT, SPI_QUP_CONF_NO_OUTPUT, SPI_QUP_CONF_OUTPUT_MSK, spi_reset(), SPI_RESET_STATE, spi_set_mode(), SUCCESS, and writel_i.
Referenced by spi_ctrlr_claim_bus().
|
static |
Definition at line 418 of file spi.c.
Referenced by spi_ctrlr_release_bus(), and spi_hw_init().
|
static |
Definition at line 212 of file spi.c.
References BIOS_ERR, GSBI_SPI_MODE_0, GSBI_SPI_MODE_1, GSBI_SPI_MODE_2, GSBI_SPI_MODE_3, blsp_spi::io_control, printk, readl_i, ipq_spi_slave::regs, blsp_spi::spi_config, SPI_INPUT_FIRST_MODE, SPI_IO_CONTROL_CLOCK_IDLE_HIGH, val, and writel_i.
Referenced by spi_hw_init().
|
static |
Definition at line 647 of file spi.c.
References config_spi_state(), blsp_spi::qup_input_fifo, QUP_INPUT_FIFO_NOT_EMPTY, blsp_spi::qup_mx_input_count, blsp_spi::qup_mx_output_count, blsp_spi::qup_operational, blsp_spi::qup_output_fifo, readl_i, ipq_spi_slave::regs, SPI_RESET_STATE, SPI_RUN_STATE, and writel_i.
Referenced by spi_ctrlr_xfer().
|
static |
Definition at line 619 of file spi.c.
References config_spi_state(), blsp_spi::qup_mx_output_count, blsp_spi::qup_operational, blsp_spi::qup_output_fifo, QUP_OUTPUT_FIFO_FULL, QUP_OUTPUT_FIFO_NOT_EMPTY, readl_i, ipq_spi_slave::regs, SPI_RESET_STATE, SPI_RUN_STATE, and writel_i.
Referenced by spi_ctrlr_xfer().
|
static |
Definition at line 491 of file spi.c.
References ipq_spi_slave::allocated, ARRAY_SIZE, spi_slave::bus, spi_slave::cs, NULL, slave, ipq_spi_slave::slave, and spi_slave_pool.
Referenced by spi_ctrlr_claim_bus(), spi_ctrlr_release_bus(), and spi_ctrlr_xfer().
Definition at line 107 of file spi.c.
Referenced by CS_change(), and gsbi_pin_config().
|
static |
Definition at line 47 of file spi.c.
Referenced by gsbi_pin_config().
const struct spi_ctrlr_buses spi_ctrlr_bus_map[] |
const size_t spi_ctrlr_bus_map_count = ARRAY_SIZE(spi_ctrlr_bus_map) |
|
static |
Definition at line 418 of file spi.c.
Referenced by to_ipq_spi().