5 #include <arch/cache.h>
7 #include <soc/addressmap.h>
10 #include <soc/clock.h>
16 #define CACHE_LINE_SIZE 64
62 } *
dma = (
void *)_dma_coherent;
113 next = &
dma->descriptors[index];
170 memcpy(ptr, data, data_bytes);
177 desc->
length = data_bytes;
189 desc->
length = data_bytes;
202 uint32_t prolog_bytes, aligned_bytes, epilog_bytes;
210 prolog_bytes =
MIN(data_bytes, aligned_ptr - data);
212 epilog_bytes = data_bytes - prolog_bytes - aligned_bytes;
214 epilog_ptr = data + prolog_bytes + aligned_bytes;
227 uint32_t tx_data_oe_delay, tx_data_delay;
232 tx_data_oe_delay = 0;
271 void *din,
size_t in_bytes)
273 if ((out_bytes && !dout) || (in_bytes && !din) ||
274 (in_bytes && out_bytes)) {
279 in_bytes | out_bytes, mode, !!out_bytes);
287 size_t out_bytes,
void *din,
size_t in_bytes)
293 size_t out_bytes,
void *din,
size_t in_bytes)
void dcache_clean_by_mva(void const *addr, size_t len)
unsigned int dcache_line_bytes(void)
static void write32(void *addr, uint32_t val)
static uint32_t read32(const void *addr)
void * memcpy(void *dest, const void *src, size_t n)
#define assert(statement)
void gpio_output(gpio_t gpio, int value)
void gpio_set(gpio_t gpio, int value)
struct cmd_desc descriptors[3]
static int xfer(enum qspi_mode mode, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
static void queue_bounce_data(uint8_t *data, uint32_t data_bytes, enum qspi_mode data_mode, bool write)
static void cs_change(enum cs_state state)
static void reg_init(void)
void quadspi_init(uint32_t hz)
static struct cmd_desc * allocate_descriptor(void)
static void configure_gpios(void)
int qspi_claim_bus(const struct spi_slave *slave)
uint8_t buffers[3][CACHE_LINE_SIZE]
int qspi_xfer_dual(const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
static void queue_direct_data(uint8_t *data, uint32_t data_bytes, enum qspi_mode data_mode, bool write)
static void queue_data(uint8_t *data, uint32_t data_bytes, enum qspi_mode data_mode, bool write)
static void dma_transfer_chain(struct cmd_desc *chain)
static void flush_chain(void)
void qspi_release_bus(const struct spi_slave *slave)
int qspi_xfer(const struct spi_slave *slave, const void *dout, size_t out_bytes, void *din, size_t in_bytes)
#define TX_DATA_OE_DELAY_SHIFT
static struct qcom_qspi_regs *const qcom_qspi
#define TX_DATA_DELAY_SHIFT
void gpio_configure(gpio_t gpio, uint32_t func, uint32_t pull, uint32_t drive_str, uint32_t enable)
int clock_configure_qspi(uint32_t hz)
#define GPIO_FUNC_QSPI_DATA_0
#define GPIO_FUNC_QSPI_CLK
#define GPIO_FUNC_QSPI_DATA_1
static struct spi_slave slave
unsigned long long uint64_t
#define dcache_invalidate_by_mva(addr, len)