root/drivers/spi/spi-cavium.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  10 struct octeon_spi_regs {
  11         int config;
  12         int status;
  13         int tx;
  14         int data;
  15 };
  16 
  17 struct 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 
  31 int 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 
  41 union 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 
 224 union 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 
 243 union 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 
 266 union 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 */

/* [<][>][^][v][top][bottom][index][help] */