brintos

brintos / linux-shallow public Read only

0
0
Text · 7.2 KiB · af53a0c Raw
334 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __SPI_CAVIUM_H3#define __SPI_CAVIUM_H4 5#include <linux/clk.h>6 7#define OCTEON_SPI_MAX_BYTES 98#define OCTEON_SPI_MAX_CLOCK_HZ 160000009 10struct octeon_spi_regs {11	int config;12	int status;13	int tx;14	int data;15};16 17struct octeon_spi {18	void __iomem *register_base;19	u64 last_cfg;20	u64 cs_enax;21	int sys_freq;22	struct octeon_spi_regs regs;23	struct clk *clk;24};25 26#define OCTEON_SPI_CFG(x)	(x->regs.config)27#define OCTEON_SPI_STS(x)	(x->regs.status)28#define OCTEON_SPI_TX(x)	(x->regs.tx)29#define OCTEON_SPI_DAT0(x)	(x->regs.data)30 31int octeon_spi_transfer_one_message(struct spi_controller *ctlr,32				    struct spi_message *msg);33 34/* MPI register descriptions */35 36#define CVMX_MPI_CFG (CVMX_ADD_IO_SEG(0x0001070000001000ull))37#define CVMX_MPI_DATX(offset) (CVMX_ADD_IO_SEG(0x0001070000001080ull) + ((offset) & 15) * 8)38#define CVMX_MPI_STS (CVMX_ADD_IO_SEG(0x0001070000001008ull))39#define CVMX_MPI_TX (CVMX_ADD_IO_SEG(0x0001070000001010ull))40 41union cvmx_mpi_cfg {42	uint64_t u64;43	struct cvmx_mpi_cfg_s {44#ifdef __BIG_ENDIAN_BITFIELD45		uint64_t reserved_29_63:35;46		uint64_t clkdiv:13;47		uint64_t csena3:1;48		uint64_t csena2:1;49		uint64_t csena1:1;50		uint64_t csena0:1;51		uint64_t cslate:1;52		uint64_t tritx:1;53		uint64_t idleclks:2;54		uint64_t cshi:1;55		uint64_t csena:1;56		uint64_t int_ena:1;57		uint64_t lsbfirst:1;58		uint64_t wireor:1;59		uint64_t clk_cont:1;60		uint64_t idlelo:1;61		uint64_t enable:1;62#else63		uint64_t enable:1;64		uint64_t idlelo:1;65		uint64_t clk_cont:1;66		uint64_t wireor:1;67		uint64_t lsbfirst:1;68		uint64_t int_ena:1;69		uint64_t csena:1;70		uint64_t cshi:1;71		uint64_t idleclks:2;72		uint64_t tritx:1;73		uint64_t cslate:1;74		uint64_t csena0:1;75		uint64_t csena1:1;76		uint64_t csena2:1;77		uint64_t csena3:1;78		uint64_t clkdiv:13;79		uint64_t reserved_29_63:35;80#endif81	} s;82	struct cvmx_mpi_cfg_cn30xx {83#ifdef __BIG_ENDIAN_BITFIELD84		uint64_t reserved_29_63:35;85		uint64_t clkdiv:13;86		uint64_t reserved_12_15:4;87		uint64_t cslate:1;88		uint64_t tritx:1;89		uint64_t idleclks:2;90		uint64_t cshi:1;91		uint64_t csena:1;92		uint64_t int_ena:1;93		uint64_t lsbfirst:1;94		uint64_t wireor:1;95		uint64_t clk_cont:1;96		uint64_t idlelo:1;97		uint64_t enable:1;98#else99		uint64_t enable:1;100		uint64_t idlelo:1;101		uint64_t clk_cont:1;102		uint64_t wireor:1;103		uint64_t lsbfirst:1;104		uint64_t int_ena:1;105		uint64_t csena:1;106		uint64_t cshi:1;107		uint64_t idleclks:2;108		uint64_t tritx:1;109		uint64_t cslate:1;110		uint64_t reserved_12_15:4;111		uint64_t clkdiv:13;112		uint64_t reserved_29_63:35;113#endif114	} cn30xx;115	struct cvmx_mpi_cfg_cn31xx {116#ifdef __BIG_ENDIAN_BITFIELD117		uint64_t reserved_29_63:35;118		uint64_t clkdiv:13;119		uint64_t reserved_11_15:5;120		uint64_t tritx:1;121		uint64_t idleclks:2;122		uint64_t cshi:1;123		uint64_t csena:1;124		uint64_t int_ena:1;125		uint64_t lsbfirst:1;126		uint64_t wireor:1;127		uint64_t clk_cont:1;128		uint64_t idlelo:1;129		uint64_t enable:1;130#else131		uint64_t enable:1;132		uint64_t idlelo:1;133		uint64_t clk_cont:1;134		uint64_t wireor:1;135		uint64_t lsbfirst:1;136		uint64_t int_ena:1;137		uint64_t csena:1;138		uint64_t cshi:1;139		uint64_t idleclks:2;140		uint64_t tritx:1;141		uint64_t reserved_11_15:5;142		uint64_t clkdiv:13;143		uint64_t reserved_29_63:35;144#endif145	} cn31xx;146	struct cvmx_mpi_cfg_cn30xx cn50xx;147	struct cvmx_mpi_cfg_cn61xx {148#ifdef __BIG_ENDIAN_BITFIELD149		uint64_t reserved_29_63:35;150		uint64_t clkdiv:13;151		uint64_t reserved_14_15:2;152		uint64_t csena1:1;153		uint64_t csena0:1;154		uint64_t cslate:1;155		uint64_t tritx:1;156		uint64_t idleclks:2;157		uint64_t cshi:1;158		uint64_t reserved_6_6:1;159		uint64_t int_ena:1;160		uint64_t lsbfirst:1;161		uint64_t wireor:1;162		uint64_t clk_cont:1;163		uint64_t idlelo:1;164		uint64_t enable:1;165#else166		uint64_t enable:1;167		uint64_t idlelo:1;168		uint64_t clk_cont:1;169		uint64_t wireor:1;170		uint64_t lsbfirst:1;171		uint64_t int_ena:1;172		uint64_t reserved_6_6:1;173		uint64_t cshi:1;174		uint64_t idleclks:2;175		uint64_t tritx:1;176		uint64_t cslate:1;177		uint64_t csena0:1;178		uint64_t csena1:1;179		uint64_t reserved_14_15:2;180		uint64_t clkdiv:13;181		uint64_t reserved_29_63:35;182#endif183	} cn61xx;184	struct cvmx_mpi_cfg_cn66xx {185#ifdef __BIG_ENDIAN_BITFIELD186		uint64_t reserved_29_63:35;187		uint64_t clkdiv:13;188		uint64_t csena3:1;189		uint64_t csena2:1;190		uint64_t reserved_12_13:2;191		uint64_t cslate:1;192		uint64_t tritx:1;193		uint64_t idleclks:2;194		uint64_t cshi:1;195		uint64_t reserved_6_6:1;196		uint64_t int_ena:1;197		uint64_t lsbfirst:1;198		uint64_t wireor:1;199		uint64_t clk_cont:1;200		uint64_t idlelo:1;201		uint64_t enable:1;202#else203		uint64_t enable:1;204		uint64_t idlelo:1;205		uint64_t clk_cont:1;206		uint64_t wireor:1;207		uint64_t lsbfirst:1;208		uint64_t int_ena:1;209		uint64_t reserved_6_6:1;210		uint64_t cshi:1;211		uint64_t idleclks:2;212		uint64_t tritx:1;213		uint64_t cslate:1;214		uint64_t reserved_12_13:2;215		uint64_t csena2:1;216		uint64_t csena3:1;217		uint64_t clkdiv:13;218		uint64_t reserved_29_63:35;219#endif220	} cn66xx;221	struct cvmx_mpi_cfg_cn61xx cnf71xx;222};223 224union cvmx_mpi_datx {225	uint64_t u64;226	struct cvmx_mpi_datx_s {227#ifdef __BIG_ENDIAN_BITFIELD228		uint64_t reserved_8_63:56;229		uint64_t data:8;230#else231		uint64_t data:8;232		uint64_t reserved_8_63:56;233#endif234	} s;235	struct cvmx_mpi_datx_s cn30xx;236	struct cvmx_mpi_datx_s cn31xx;237	struct cvmx_mpi_datx_s cn50xx;238	struct cvmx_mpi_datx_s cn61xx;239	struct cvmx_mpi_datx_s cn66xx;240	struct cvmx_mpi_datx_s cnf71xx;241};242 243union cvmx_mpi_sts {244	uint64_t u64;245	struct cvmx_mpi_sts_s {246#ifdef __BIG_ENDIAN_BITFIELD247		uint64_t reserved_13_63:51;248		uint64_t rxnum:5;249		uint64_t reserved_1_7:7;250		uint64_t busy:1;251#else252		uint64_t busy:1;253		uint64_t reserved_1_7:7;254		uint64_t rxnum:5;255		uint64_t reserved_13_63:51;256#endif257	} s;258	struct cvmx_mpi_sts_s cn30xx;259	struct cvmx_mpi_sts_s cn31xx;260	struct cvmx_mpi_sts_s cn50xx;261	struct cvmx_mpi_sts_s cn61xx;262	struct cvmx_mpi_sts_s cn66xx;263	struct cvmx_mpi_sts_s cnf71xx;264};265 266union cvmx_mpi_tx {267	uint64_t u64;268	struct cvmx_mpi_tx_s {269#ifdef __BIG_ENDIAN_BITFIELD270		uint64_t reserved_22_63:42;271		uint64_t csid:2;272		uint64_t reserved_17_19:3;273		uint64_t leavecs:1;274		uint64_t reserved_13_15:3;275		uint64_t txnum:5;276		uint64_t reserved_5_7:3;277		uint64_t totnum:5;278#else279		uint64_t totnum:5;280		uint64_t reserved_5_7:3;281		uint64_t txnum:5;282		uint64_t reserved_13_15:3;283		uint64_t leavecs:1;284		uint64_t reserved_17_19:3;285		uint64_t csid:2;286		uint64_t reserved_22_63:42;287#endif288	} s;289	struct cvmx_mpi_tx_cn30xx {290#ifdef __BIG_ENDIAN_BITFIELD291		uint64_t reserved_17_63:47;292		uint64_t leavecs:1;293		uint64_t reserved_13_15:3;294		uint64_t txnum:5;295		uint64_t reserved_5_7:3;296		uint64_t totnum:5;297#else298		uint64_t totnum:5;299		uint64_t reserved_5_7:3;300		uint64_t txnum:5;301		uint64_t reserved_13_15:3;302		uint64_t leavecs:1;303		uint64_t reserved_17_63:47;304#endif305	} cn30xx;306	struct cvmx_mpi_tx_cn30xx cn31xx;307	struct cvmx_mpi_tx_cn30xx cn50xx;308	struct cvmx_mpi_tx_cn61xx {309#ifdef __BIG_ENDIAN_BITFIELD310		uint64_t reserved_21_63:43;311		uint64_t csid:1;312		uint64_t reserved_17_19:3;313		uint64_t leavecs:1;314		uint64_t reserved_13_15:3;315		uint64_t txnum:5;316		uint64_t reserved_5_7:3;317		uint64_t totnum:5;318#else319		uint64_t totnum:5;320		uint64_t reserved_5_7:3;321		uint64_t txnum:5;322		uint64_t reserved_13_15:3;323		uint64_t leavecs:1;324		uint64_t reserved_17_19:3;325		uint64_t csid:1;326		uint64_t reserved_21_63:43;327#endif328	} cn61xx;329	struct cvmx_mpi_tx_s cn66xx;330	struct cvmx_mpi_tx_cn61xx cnf71xx;331};332 333#endif /* __SPI_CAVIUM_H */334