]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - drivers/spi/exynos_spi.c
Add GPL-2.0+ SPDX-License-Identifier to source files
[karo-tx-uboot.git] / drivers / spi / exynos_spi.c
1 /*
2  * (C) Copyright 2012 SAMSUNG Electronics
3  * Padmavathi Venna <padma.v@samsung.com>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #include <common.h>
9 #include <malloc.h>
10 #include <spi.h>
11 #include <fdtdec.h>
12 #include <asm/arch/clk.h>
13 #include <asm/arch/clock.h>
14 #include <asm/arch/cpu.h>
15 #include <asm/arch/gpio.h>
16 #include <asm/arch/pinmux.h>
17 #include <asm/arch-exynos/spi.h>
18 #include <asm/io.h>
19
20 DECLARE_GLOBAL_DATA_PTR;
21
22 /* Information about each SPI controller */
23 struct spi_bus {
24         enum periph_id periph_id;
25         s32 frequency;          /* Default clock frequency, -1 for none */
26         struct exynos_spi *regs;
27         int inited;             /* 1 if this bus is ready for use */
28         int node;
29 };
30
31 /* A list of spi buses that we know about */
32 static struct spi_bus spi_bus[EXYNOS5_SPI_NUM_CONTROLLERS];
33 static unsigned int bus_count;
34
35 struct exynos_spi_slave {
36         struct spi_slave slave;
37         struct exynos_spi *regs;
38         unsigned int freq;              /* Default frequency */
39         unsigned int mode;
40         enum periph_id periph_id;       /* Peripheral ID for this device */
41         unsigned int fifo_size;
42         int skip_preamble;
43 };
44
45 static struct spi_bus *spi_get_bus(unsigned dev_index)
46 {
47         if (dev_index < bus_count)
48                 return &spi_bus[dev_index];
49         debug("%s: invalid bus %d", __func__, dev_index);
50
51         return NULL;
52 }
53
54 static inline struct exynos_spi_slave *to_exynos_spi(struct spi_slave *slave)
55 {
56         return container_of(slave, struct exynos_spi_slave, slave);
57 }
58
59 /**
60  * Setup the driver private data
61  *
62  * @param bus           ID of the bus that the slave is attached to
63  * @param cs            ID of the chip select connected to the slave
64  * @param max_hz        Required spi frequency
65  * @param mode          Required spi mode (clk polarity, clk phase and
66  *                      master or slave)
67  * @return new device or NULL
68  */
69 struct spi_slave *spi_setup_slave(unsigned int busnum, unsigned int cs,
70                         unsigned int max_hz, unsigned int mode)
71 {
72         struct exynos_spi_slave *spi_slave;
73         struct spi_bus *bus;
74
75         if (!spi_cs_is_valid(busnum, cs)) {
76                 debug("%s: Invalid bus/chip select %d, %d\n", __func__,
77                       busnum, cs);
78                 return NULL;
79         }
80
81         spi_slave = spi_alloc_slave(struct exynos_spi_slave, busnum, cs);
82         if (!spi_slave) {
83                 debug("%s: Could not allocate spi_slave\n", __func__);
84                 return NULL;
85         }
86
87         bus = &spi_bus[busnum];
88         spi_slave->regs = bus->regs;
89         spi_slave->mode = mode;
90         spi_slave->periph_id = bus->periph_id;
91         if (bus->periph_id == PERIPH_ID_SPI1 ||
92             bus->periph_id == PERIPH_ID_SPI2)
93                 spi_slave->fifo_size = 64;
94         else
95                 spi_slave->fifo_size = 256;
96
97         spi_slave->skip_preamble = 0;
98
99         spi_slave->freq = bus->frequency;
100         if (max_hz)
101                 spi_slave->freq = min(max_hz, spi_slave->freq);
102
103         return &spi_slave->slave;
104 }
105
106 /**
107  * Free spi controller
108  *
109  * @param slave Pointer to spi_slave to which controller has to
110  *              communicate with
111  */
112 void spi_free_slave(struct spi_slave *slave)
113 {
114         struct exynos_spi_slave *spi_slave = to_exynos_spi(slave);
115
116         free(spi_slave);
117 }
118
119 /**
120  * Flush spi tx, rx fifos and reset the SPI controller
121  *
122  * @param slave Pointer to spi_slave to which controller has to
123  *              communicate with
124  */
125 static void spi_flush_fifo(struct spi_slave *slave)
126 {
127         struct exynos_spi_slave *spi_slave = to_exynos_spi(slave);
128         struct exynos_spi *regs = spi_slave->regs;
129
130         clrsetbits_le32(&regs->ch_cfg, SPI_CH_HS_EN, SPI_CH_RST);
131         clrbits_le32(&regs->ch_cfg, SPI_CH_RST);
132         setbits_le32(&regs->ch_cfg, SPI_TX_CH_ON | SPI_RX_CH_ON);
133 }
134
135 /**
136  * Initialize the spi base registers, set the required clock frequency and
137  * initialize the gpios
138  *
139  * @param slave Pointer to spi_slave to which controller has to
140  *              communicate with
141  * @return zero on success else a negative value
142  */
143 int spi_claim_bus(struct spi_slave *slave)
144 {
145         struct exynos_spi_slave *spi_slave = to_exynos_spi(slave);
146         struct exynos_spi *regs = spi_slave->regs;
147         u32 reg = 0;
148         int ret;
149
150         ret = set_spi_clk(spi_slave->periph_id,
151                                         spi_slave->freq);
152         if (ret < 0) {
153                 debug("%s: Failed to setup spi clock\n", __func__);
154                 return ret;
155         }
156
157         exynos_pinmux_config(spi_slave->periph_id, PINMUX_FLAG_NONE);
158
159         spi_flush_fifo(slave);
160
161         reg = readl(&regs->ch_cfg);
162         reg &= ~(SPI_CH_CPHA_B | SPI_CH_CPOL_L);
163
164         if (spi_slave->mode & SPI_CPHA)
165                 reg |= SPI_CH_CPHA_B;
166
167         if (spi_slave->mode & SPI_CPOL)
168                 reg |= SPI_CH_CPOL_L;
169
170         writel(reg, &regs->ch_cfg);
171         writel(SPI_FB_DELAY_180, &regs->fb_clk);
172
173         return 0;
174 }
175
176 /**
177  * Reset the spi H/W and flush the tx and rx fifos
178  *
179  * @param slave Pointer to spi_slave to which controller has to
180  *              communicate with
181  */
182 void spi_release_bus(struct spi_slave *slave)
183 {
184         spi_flush_fifo(slave);
185 }
186
187 static void spi_get_fifo_levels(struct exynos_spi *regs,
188         int *rx_lvl, int *tx_lvl)
189 {
190         uint32_t spi_sts = readl(&regs->spi_sts);
191
192         *rx_lvl = (spi_sts >> SPI_RX_LVL_OFFSET) & SPI_FIFO_LVL_MASK;
193         *tx_lvl = (spi_sts >> SPI_TX_LVL_OFFSET) & SPI_FIFO_LVL_MASK;
194 }
195
196 /**
197  * If there's something to transfer, do a software reset and set a
198  * transaction size.
199  *
200  * @param regs  SPI peripheral registers
201  * @param count Number of bytes to transfer
202  */
203 static void spi_request_bytes(struct exynos_spi *regs, int count)
204 {
205         assert(count && count < (1 << 16));
206         setbits_le32(&regs->ch_cfg, SPI_CH_RST);
207         clrbits_le32(&regs->ch_cfg, SPI_CH_RST);
208         writel(count | SPI_PACKET_CNT_EN, &regs->pkt_cnt);
209 }
210
211 static int spi_rx_tx(struct exynos_spi_slave *spi_slave, int todo,
212                         void **dinp, void const **doutp, unsigned long flags)
213 {
214         struct exynos_spi *regs = spi_slave->regs;
215         uchar *rxp = *dinp;
216         const uchar *txp = *doutp;
217         int rx_lvl, tx_lvl;
218         uint out_bytes, in_bytes;
219         int toread;
220         unsigned start = get_timer(0);
221         int stopping;
222
223         out_bytes = in_bytes = todo;
224
225         stopping = spi_slave->skip_preamble && (flags & SPI_XFER_END) &&
226                                         !(spi_slave->mode & SPI_SLAVE);
227
228         /*
229          * If there's something to send, do a software reset and set a
230          * transaction size.
231          */
232         spi_request_bytes(regs, todo);
233
234         /*
235          * Bytes are transmitted/received in pairs. Wait to receive all the
236          * data because then transmission will be done as well.
237          */
238         toread = in_bytes;
239
240         while (in_bytes) {
241                 int temp;
242
243                 /* Keep the fifos full/empty. */
244                 spi_get_fifo_levels(regs, &rx_lvl, &tx_lvl);
245                 if (tx_lvl < spi_slave->fifo_size && out_bytes) {
246                         temp = txp ? *txp++ : 0xff;
247                         writel(temp, &regs->tx_data);
248                         out_bytes--;
249                 }
250                 if (rx_lvl > 0) {
251                         temp = readl(&regs->rx_data);
252                         if (spi_slave->skip_preamble) {
253                                 if (temp == SPI_PREAMBLE_END_BYTE) {
254                                         spi_slave->skip_preamble = 0;
255                                         stopping = 0;
256                                 }
257                         } else {
258                                 if (rxp || stopping)
259                                         *rxp++ = temp;
260                                 in_bytes--;
261                         }
262                         toread--;
263                 } else if (!toread) {
264                         /*
265                          * We have run out of input data, but haven't read
266                          * enough bytes after the preamble yet. Read some more,
267                          * and make sure that we transmit dummy bytes too, to
268                          * keep things going.
269                          */
270                         assert(!out_bytes);
271                         out_bytes = in_bytes;
272                         toread = in_bytes;
273                         txp = NULL;
274                         spi_request_bytes(regs, toread);
275                 }
276                 if (spi_slave->skip_preamble && get_timer(start) > 100) {
277                         printf("SPI timeout: in_bytes=%d, out_bytes=%d, ",
278                                in_bytes, out_bytes);
279                         return -1;
280                 }
281         }
282
283         *dinp = rxp;
284         *doutp = txp;
285
286         return 0;
287 }
288
289 /**
290  * Transfer and receive data
291  *
292  * @param slave         Pointer to spi_slave to which controller has to
293  *                      communicate with
294  * @param bitlen        No of bits to tranfer or receive
295  * @param dout          Pointer to transfer buffer
296  * @param din           Pointer to receive buffer
297  * @param flags         Flags for transfer begin and end
298  * @return zero on success else a negative value
299  */
300 int spi_xfer(struct spi_slave *slave, unsigned int bitlen, const void *dout,
301              void *din, unsigned long flags)
302 {
303         struct exynos_spi_slave *spi_slave = to_exynos_spi(slave);
304         int upto, todo;
305         int bytelen;
306         int ret = 0;
307
308         /* spi core configured to do 8 bit transfers */
309         if (bitlen % 8) {
310                 debug("Non byte aligned SPI transfer.\n");
311                 return -1;
312         }
313
314         /* Start the transaction, if necessary. */
315         if ((flags & SPI_XFER_BEGIN))
316                 spi_cs_activate(slave);
317
318         /* Exynos SPI limits each transfer to 65535 bytes */
319         bytelen =  bitlen / 8;
320         for (upto = 0; !ret && upto < bytelen; upto += todo) {
321                 todo = min(bytelen - upto, (1 << 16) - 1);
322                 ret = spi_rx_tx(spi_slave, todo, &din, &dout, flags);
323                 if (ret)
324                         break;
325         }
326
327         /* Stop the transaction, if necessary. */
328         if ((flags & SPI_XFER_END) && !(spi_slave->mode & SPI_SLAVE)) {
329                 spi_cs_deactivate(slave);
330                 if (spi_slave->skip_preamble) {
331                         assert(!spi_slave->skip_preamble);
332                         debug("Failed to complete premable transaction\n");
333                         ret = -1;
334                 }
335         }
336
337         return ret;
338 }
339
340 /**
341  * Validates the bus and chip select numbers
342  *
343  * @param bus   ID of the bus that the slave is attached to
344  * @param cs    ID of the chip select connected to the slave
345  * @return one on success else zero
346  */
347 int spi_cs_is_valid(unsigned int bus, unsigned int cs)
348 {
349         return spi_get_bus(bus) && cs == 0;
350 }
351
352 /**
353  * Activate the CS by driving it LOW
354  *
355  * @param slave Pointer to spi_slave to which controller has to
356  *              communicate with
357  */
358 void spi_cs_activate(struct spi_slave *slave)
359 {
360         struct exynos_spi_slave *spi_slave = to_exynos_spi(slave);
361
362         clrbits_le32(&spi_slave->regs->cs_reg, SPI_SLAVE_SIG_INACT);
363         debug("Activate CS, bus %d\n", spi_slave->slave.bus);
364         spi_slave->skip_preamble = spi_slave->mode & SPI_PREAMBLE;
365 }
366
367 /**
368  * Deactivate the CS by driving it HIGH
369  *
370  * @param slave Pointer to spi_slave to which controller has to
371  *              communicate with
372  */
373 void spi_cs_deactivate(struct spi_slave *slave)
374 {
375         struct exynos_spi_slave *spi_slave = to_exynos_spi(slave);
376
377         setbits_le32(&spi_slave->regs->cs_reg, SPI_SLAVE_SIG_INACT);
378         debug("Deactivate CS, bus %d\n", spi_slave->slave.bus);
379 }
380
381 static inline struct exynos_spi *get_spi_base(int dev_index)
382 {
383         if (dev_index < 3)
384                 return (struct exynos_spi *)samsung_get_base_spi() + dev_index;
385         else
386                 return (struct exynos_spi *)samsung_get_base_spi_isp() +
387                                         (dev_index - 3);
388 }
389
390 /*
391  * Read the SPI config from the device tree node.
392  *
393  * @param blob  FDT blob to read from
394  * @param node  Node offset to read from
395  * @param bus   SPI bus structure to fill with information
396  * @return 0 if ok, or -FDT_ERR_NOTFOUND if something was missing
397  */
398 #ifdef CONFIG_OF_CONTROL
399 static int spi_get_config(const void *blob, int node, struct spi_bus *bus)
400 {
401         bus->node = node;
402         bus->regs = (struct exynos_spi *)fdtdec_get_addr(blob, node, "reg");
403         bus->periph_id = pinmux_decode_periph_id(blob, node);
404
405         if (bus->periph_id == PERIPH_ID_NONE) {
406                 debug("%s: Invalid peripheral ID %d\n", __func__,
407                         bus->periph_id);
408                 return -FDT_ERR_NOTFOUND;
409         }
410
411         /* Use 500KHz as a suitable default */
412         bus->frequency = fdtdec_get_int(blob, node, "spi-max-frequency",
413                                         500000);
414
415         return 0;
416 }
417
418 /*
419  * Process a list of nodes, adding them to our list of SPI ports.
420  *
421  * @param blob          fdt blob
422  * @param node_list     list of nodes to process (any <=0 are ignored)
423  * @param count         number of nodes to process
424  * @param is_dvc        1 if these are DVC ports, 0 if standard I2C
425  * @return 0 if ok, -1 on error
426  */
427 static int process_nodes(const void *blob, int node_list[], int count)
428 {
429         int i;
430
431         /* build the i2c_controllers[] for each controller */
432         for (i = 0; i < count; i++) {
433                 int node = node_list[i];
434                 struct spi_bus *bus;
435
436                 if (node <= 0)
437                         continue;
438
439                 bus = &spi_bus[i];
440                 if (spi_get_config(blob, node, bus)) {
441                         printf("exynos spi_init: failed to decode bus %d\n",
442                                 i);
443                         return -1;
444                 }
445
446                 debug("spi: controller bus %d at %p, periph_id %d\n",
447                       i, bus->regs, bus->periph_id);
448                 bus->inited = 1;
449                 bus_count++;
450         }
451
452         return 0;
453 }
454 #endif
455
456 /**
457  * Set up a new SPI slave for an fdt node
458  *
459  * @param blob          Device tree blob
460  * @param node          SPI peripheral node to use
461  * @return 0 if ok, -1 on error
462  */
463 struct spi_slave *spi_setup_slave_fdt(const void *blob, int node,
464                 unsigned int cs, unsigned int max_hz, unsigned int mode)
465 {
466         struct spi_bus *bus;
467         unsigned int i;
468
469         for (i = 0, bus = spi_bus; i < bus_count; i++, bus++) {
470                 if (bus->node == node)
471                         return spi_setup_slave(i, cs, max_hz, mode);
472         }
473
474         debug("%s: Failed to find bus node %d\n", __func__, node);
475         return NULL;
476 }
477
478 /* Sadly there is no error return from this function */
479 void spi_init(void)
480 {
481         int count;
482
483 #ifdef CONFIG_OF_CONTROL
484         int node_list[EXYNOS5_SPI_NUM_CONTROLLERS];
485         const void *blob = gd->fdt_blob;
486
487         count = fdtdec_find_aliases_for_id(blob, "spi",
488                         COMPAT_SAMSUNG_EXYNOS_SPI, node_list,
489                         EXYNOS5_SPI_NUM_CONTROLLERS);
490         if (process_nodes(blob, node_list, count))
491                 return;
492
493 #else
494         struct spi_bus *bus;
495
496         for (count = 0; count < EXYNOS5_SPI_NUM_CONTROLLERS; count++) {
497                 bus = &spi_bus[count];
498                 bus->regs = get_spi_base(count);
499                 bus->periph_id = PERIPH_ID_SPI0 + count;
500
501                 /* Although Exynos5 supports upto 50Mhz speed,
502                  * we are setting it to 10Mhz for safe side
503                  */
504                 bus->frequency = 10000000;
505                 bus->inited = 1;
506                 bus->node = 0;
507                 bus_count = EXYNOS5_SPI_NUM_CONTROLLERS;
508         }
509 #endif
510 }