blob: 326d1958040042976c3a28d97133208849dfe5cf [file] [log] [blame]
/*
* Copyright (c) 2018 SiFive Inc.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _SPI_SIFIVE__H
#define _SPI_SIFIVE__H
#include "spi_context.h"
#include <sys_io.h>
#include <device.h>
#include <spi.h>
#define SPI_CFG(dev) ((struct spi_sifive_cfg *) ((dev)->config->config_info))
#define SPI_DATA(dev) ((struct spi_sifive_data *) ((dev)->driver_data))
#define SPI_REG(dev, offset) ((mem_addr_t) (SPI_CFG(dev)->base + (offset)))
/* Register Offsets */
#define REG_SCKDIV 0x000
#define REG_SCKMODE 0x004
#define REG_CSID 0x010
#define REG_CSDEF 0x014
#define REG_CSMODE 0x018
#define REG_DELAY0 0x028
#define REG_DELAY1 0x02C
#define REG_FMT 0x040
#define REG_TXDATA 0x048
#define REG_RXDATA 0x04C
#define REG_TXMARK 0x050
#define REG_RXMARK 0x054
#define REG_FCTRL 0x060
#define REG_FFMT 0x064
#define REG_IE 0x070
#define REG_IP 0x074
/* Masks */
#define SF_SCKDIV_DIV_MASK (0xFFF << 0)
#define SF_FMT_PROTO_MASK (0x3 << 0)
#define SF_FMT_LEN_MASK (0xF << 16)
/* Offsets */
#define SF_SCKMODE_POL 1
#define SF_SCKMODE_PHA 0
#define SF_FMT_LEN 16
#define SF_FMT_ENDIAN 2
#define SF_FCTRL_EN 0
/* Values */
#define SF_CSMODE_AUTO 0
#define SF_CSMODE_HOLD 2
#define SF_CSMODE_OFF 3
#define SF_FMT_PROTO_SINGLE 0
#define SF_TXDATA_FULL (1 << 31)
#define SF_RXDATA_EMPTY (1 << 31)
/* Structure Declarations */
struct spi_sifive_data {
struct spi_context ctx;
};
struct spi_sifive_cfg {
u32_t base;
u32_t f_sys;
};
#endif /* _SPI_SIFIVE__H */