linux/drivers/spi/spi-cavium.h
<<
>>
Prefs
   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 */
 334