cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

spi-cavium.h (7334B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __SPI_CAVIUM_H
      3#define __SPI_CAVIUM_H
      4
      5#include <linux/clk.h>
      6
      7#define OCTEON_SPI_MAX_BYTES 9
      8#define OCTEON_SPI_MAX_CLOCK_HZ 16000000
      9
     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_master *master,
     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_BITFIELD
     45		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#else
     63		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#endif
     81	} s;
     82	struct cvmx_mpi_cfg_cn30xx {
     83#ifdef __BIG_ENDIAN_BITFIELD
     84		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#else
     99		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#endif
    114	} cn30xx;
    115	struct cvmx_mpi_cfg_cn31xx {
    116#ifdef __BIG_ENDIAN_BITFIELD
    117		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#else
    131		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#endif
    145	} cn31xx;
    146	struct cvmx_mpi_cfg_cn30xx cn50xx;
    147	struct cvmx_mpi_cfg_cn61xx {
    148#ifdef __BIG_ENDIAN_BITFIELD
    149		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#else
    166		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#endif
    183	} cn61xx;
    184	struct cvmx_mpi_cfg_cn66xx {
    185#ifdef __BIG_ENDIAN_BITFIELD
    186		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#else
    203		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#endif
    220	} 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_BITFIELD
    228		uint64_t reserved_8_63:56;
    229		uint64_t data:8;
    230#else
    231		uint64_t data:8;
    232		uint64_t reserved_8_63:56;
    233#endif
    234	} 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_BITFIELD
    247		uint64_t reserved_13_63:51;
    248		uint64_t rxnum:5;
    249		uint64_t reserved_1_7:7;
    250		uint64_t busy:1;
    251#else
    252		uint64_t busy:1;
    253		uint64_t reserved_1_7:7;
    254		uint64_t rxnum:5;
    255		uint64_t reserved_13_63:51;
    256#endif
    257	} 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_BITFIELD
    270		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#else
    279		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#endif
    288	} s;
    289	struct cvmx_mpi_tx_cn30xx {
    290#ifdef __BIG_ENDIAN_BITFIELD
    291		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#else
    298		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#endif
    305	} 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_BITFIELD
    310		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#else
    319		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#endif
    328	} cn61xx;
    329	struct cvmx_mpi_tx_s cn66xx;
    330	struct cvmx_mpi_tx_cn61xx cnf71xx;
    331};
    332
    333#endif /* __SPI_CAVIUM_H */