11 #include <soc/addressmap.h>
13 #include <soc/clock.h>
86 #define SPI_TIMEOUT_US 5000
151 const size_t chip_select,
152 const size_t assert_is_low)
181 const size_t speed_hz,
182 const size_t idle_low,
183 const size_t idle_cycles)
262 const size_t speed_hz,
263 const size_t idle_low,
264 const size_t idle_cycles,
265 const size_t lsb_first,
266 const size_t chip_select,
267 const size_t assert_is_low)
313 size_t bytesin = vector->
bytesin;
324 size_t out_now =
MIN(bytesout, 8);
327 for (i = 0; i < out_now; i++)
332 if (
leavecs || ((bytesout > 8) || bytesin))
348 size_t in_now =
MIN(bytesin, 8);
363 if (sts.
s.
rxnum != in_now) {
365 "SPI: Incorrect number of bytes received: %u.\n",
370 for (i = 0; i < in_now; i++) {
385 for (i = 0; i <
count; i++) {
388 "SPI: Failed to transfer %zu vectors.\n",
count);
void write64(void *addr, uint64_t val)
uint64_t read64(const void *addr)
#define assert(statement)
#define printk(level,...)
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_usecs_expire(struct stopwatch *sw, long us)
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
u64 thunderx_get_io_clock(void)
Returns the I/O clock speed in Hz.
static int spi_ctrlr_xfer_vector(const struct spi_slave *slave, struct spi_op vectors[], size_t count)
void spi_set_cs(const size_t bus, const size_t chip_select, const size_t assert_is_low)
Set SPI Chip select line and level if asserted.
void spi_set_clock(const size_t bus, const size_t speed_hz, const size_t idle_low, const size_t idle_cycles)
Set SPI clock frequency.
void spi_enable(const size_t bus)
Enable the SPI controller.
static struct cavium_spi_slave cavium_spi_slaves[]
static const struct spi_ctrlr spi_ctrlr
void spi_init_custom(const size_t bus, const size_t speed_hz, const size_t idle_low, const size_t idle_cycles, const size_t lsb_first, const size_t chip_select, const size_t assert_is_low)
Init SPI with custom parameters and enable SPI controller.
void spi_disable(const size_t bus)
Disable the SPI controller.
static int cavium_spi_wait(struct cavium_spi *regs)
const struct spi_ctrlr_buses spi_ctrlr_bus_map[]
check_member(cavium_spi, cfg, 0)
void spi_set_lsbmsb(const size_t bus, const size_t lsb_first)
Set SPI LSB/MSB first.
static struct cavium_spi_slave * to_cavium_spi(const struct spi_slave *slave)
uint64_t spi_get_clock(const size_t bus)
Get current SPI clock frequency in Hz.
void spi_init(void)
Init all SPI controllers with default values and enable all SPI controller.
static int do_xfer(const struct spi_slave *slave, struct spi_op *vector, int leavecs)
const size_t spi_ctrlr_bus_map_count
#define SPI_CTRLR_DEFAULT_MAX_XFER_SIZE
static struct spi_slave slave
unsigned long long uint64_t
const struct spi_ctrlr * ctrlr
int(* xfer_vector)(const struct spi_slave *slave, struct spi_op vectors[], size_t count)
struct cavium_spi_cfg::@434 s
struct cavium_spi_sts::@435 s
struct cavium_spi_tx::@436 s