Merge branch 'work.compat' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[linux-2.6-microblaze.git] / drivers / scsi / zorro_esp.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * ESP front-end for Amiga ZORRO SCSI systems.
4  *
5  * Copyright (C) 1996 Jesper Skov (jskov@cygnus.co.uk)
6  *
7  * Copyright (C) 2011,2018 Michael Schmitz (schmitz@debian.org) for
8  *               migration to ESP SCSI core
9  *
10  * Copyright (C) 2013 Tuomas Vainikka (tuomas.vainikka@aalto.fi) for
11  *               Blizzard 1230 DMA and probe function fixes
12  *
13  * Copyright (C) 2017 Finn Thain for PIO code from Mac ESP driver adapted here
14  */
15 /*
16  * ZORRO bus code from:
17  */
18 /*
19  * Detection routine for the NCR53c710 based Amiga SCSI Controllers for Linux.
20  *              Amiga MacroSystemUS WarpEngine SCSI controller.
21  *              Amiga Technologies/DKB A4091 SCSI controller.
22  *
23  * Written 1997 by Alan Hourihane <alanh@fairlite.demon.co.uk>
24  * plus modifications of the 53c7xx.c driver to support the Amiga.
25  *
26  * Rewritten to use 53c700.c by Kars de Jong <jongk@linux-m68k.org>
27  */
28
29 #define pr_fmt(fmt)        KBUILD_MODNAME ": " fmt
30
31 #include <linux/module.h>
32 #include <linux/init.h>
33 #include <linux/interrupt.h>
34 #include <linux/dma-mapping.h>
35 #include <linux/scatterlist.h>
36 #include <linux/delay.h>
37 #include <linux/zorro.h>
38 #include <linux/slab.h>
39
40 #include <asm/page.h>
41 #include <asm/pgtable.h>
42 #include <asm/cacheflush.h>
43 #include <asm/amigahw.h>
44 #include <asm/amigaints.h>
45
46 #include <scsi/scsi_host.h>
47 #include <scsi/scsi_transport_spi.h>
48 #include <scsi/scsi_device.h>
49 #include <scsi/scsi_tcq.h>
50
51 #include "esp_scsi.h"
52
53 MODULE_AUTHOR("Michael Schmitz <schmitz@debian.org>");
54 MODULE_DESCRIPTION("Amiga Zorro NCR5C9x (ESP) driver");
55 MODULE_LICENSE("GPL");
56
57 /* per-board register layout definitions */
58
59 /* Blizzard 1230 DMA interface */
60
61 struct blz1230_dma_registers {
62         unsigned char dma_addr;         /* DMA address      [0x0000] */
63         unsigned char dmapad2[0x7fff];
64         unsigned char dma_latch;        /* DMA latch        [0x8000] */
65 };
66
67 /* Blizzard 1230II DMA interface */
68
69 struct blz1230II_dma_registers {
70         unsigned char dma_addr;         /* DMA address      [0x0000] */
71         unsigned char dmapad2[0xf];
72         unsigned char dma_latch;        /* DMA latch        [0x0010] */
73 };
74
75 /* Blizzard 2060 DMA interface */
76
77 struct blz2060_dma_registers {
78         unsigned char dma_led_ctrl;     /* DMA led control   [0x000] */
79         unsigned char dmapad1[0x0f];
80         unsigned char dma_addr0;        /* DMA address (MSB) [0x010] */
81         unsigned char dmapad2[0x03];
82         unsigned char dma_addr1;        /* DMA address       [0x014] */
83         unsigned char dmapad3[0x03];
84         unsigned char dma_addr2;        /* DMA address       [0x018] */
85         unsigned char dmapad4[0x03];
86         unsigned char dma_addr3;        /* DMA address (LSB) [0x01c] */
87 };
88
89 /* DMA control bits */
90 #define DMA_WRITE 0x80000000
91
92 /* Cyberstorm DMA interface */
93
94 struct cyber_dma_registers {
95         unsigned char dma_addr0;        /* DMA address (MSB) [0x000] */
96         unsigned char dmapad1[1];
97         unsigned char dma_addr1;        /* DMA address       [0x002] */
98         unsigned char dmapad2[1];
99         unsigned char dma_addr2;        /* DMA address       [0x004] */
100         unsigned char dmapad3[1];
101         unsigned char dma_addr3;        /* DMA address (LSB) [0x006] */
102         unsigned char dmapad4[0x3fb];
103         unsigned char cond_reg;         /* DMA cond    (ro)  [0x402] */
104 #define ctrl_reg  cond_reg              /* DMA control (wo)  [0x402] */
105 };
106
107 /* DMA control bits */
108 #define CYBER_DMA_WRITE  0x40   /* DMA direction. 1 = write */
109 #define CYBER_DMA_Z3     0x20   /* 16 (Z2) or 32 (CHIP/Z3) bit DMA transfer */
110
111 /* DMA status bits */
112 #define CYBER_DMA_HNDL_INTR 0x80        /* DMA IRQ pending? */
113
114 /* The CyberStorm II DMA interface */
115 struct cyberII_dma_registers {
116         unsigned char cond_reg;         /* DMA cond    (ro)  [0x000] */
117 #define ctrl_reg  cond_reg              /* DMA control (wo)  [0x000] */
118         unsigned char dmapad4[0x3f];
119         unsigned char dma_addr0;        /* DMA address (MSB) [0x040] */
120         unsigned char dmapad1[3];
121         unsigned char dma_addr1;        /* DMA address       [0x044] */
122         unsigned char dmapad2[3];
123         unsigned char dma_addr2;        /* DMA address       [0x048] */
124         unsigned char dmapad3[3];
125         unsigned char dma_addr3;        /* DMA address (LSB) [0x04c] */
126 };
127
128 /* Fastlane DMA interface */
129
130 struct fastlane_dma_registers {
131         unsigned char cond_reg;         /* DMA status  (ro) [0x0000] */
132 #define ctrl_reg  cond_reg              /* DMA control (wo) [0x0000] */
133         char dmapad1[0x3f];
134         unsigned char clear_strobe;     /* DMA clear   (wo) [0x0040] */
135 };
136
137 /*
138  * The controller registers can be found in the Z2 config area at these
139  * offsets:
140  */
141 #define FASTLANE_ESP_ADDR       0x1000001
142
143 /* DMA status bits */
144 #define FASTLANE_DMA_MINT       0x80
145 #define FASTLANE_DMA_IACT       0x40
146 #define FASTLANE_DMA_CREQ       0x20
147
148 /* DMA control bits */
149 #define FASTLANE_DMA_FCODE      0xa0
150 #define FASTLANE_DMA_MASK       0xf3
151 #define FASTLANE_DMA_WRITE      0x08    /* 1 = write */
152 #define FASTLANE_DMA_ENABLE     0x04    /* Enable DMA */
153 #define FASTLANE_DMA_EDI        0x02    /* Enable DMA IRQ ? */
154 #define FASTLANE_DMA_ESI        0x01    /* Enable SCSI IRQ */
155
156 /*
157  * private data used for driver
158  */
159 struct zorro_esp_priv {
160         struct esp *esp;                /* our ESP instance - for Scsi_host* */
161         void __iomem *board_base;       /* virtual address (Zorro III board) */
162         int error;                      /* PIO error flag */
163         int zorro3;                     /* board is Zorro III */
164         unsigned char ctrl_data;        /* shadow copy of ctrl_reg */
165 };
166
167 /*
168  * On all implementations except for the Oktagon, padding between ESP
169  * registers is three bytes.
170  * On Oktagon, it is one byte - use a different accessor there.
171  *
172  * Oktagon needs PDMA - currently unsupported!
173  */
174
175 static void zorro_esp_write8(struct esp *esp, u8 val, unsigned long reg)
176 {
177         writeb(val, esp->regs + (reg * 4UL));
178 }
179
180 static u8 zorro_esp_read8(struct esp *esp, unsigned long reg)
181 {
182         return readb(esp->regs + (reg * 4UL));
183 }
184
185 static dma_addr_t zorro_esp_map_single(struct esp *esp, void *buf,
186                                       size_t sz, int dir)
187 {
188         return dma_map_single(esp->dev, buf, sz, dir);
189 }
190
191 static int zorro_esp_map_sg(struct esp *esp, struct scatterlist *sg,
192                                   int num_sg, int dir)
193 {
194         return dma_map_sg(esp->dev, sg, num_sg, dir);
195 }
196
197 static void zorro_esp_unmap_single(struct esp *esp, dma_addr_t addr,
198                                   size_t sz, int dir)
199 {
200         dma_unmap_single(esp->dev, addr, sz, dir);
201 }
202
203 static void zorro_esp_unmap_sg(struct esp *esp, struct scatterlist *sg,
204                               int num_sg, int dir)
205 {
206         dma_unmap_sg(esp->dev, sg, num_sg, dir);
207 }
208
209 static int zorro_esp_irq_pending(struct esp *esp)
210 {
211         /* check ESP status register; DMA has no status reg. */
212         if (zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR)
213                 return 1;
214
215         return 0;
216 }
217
218 static int cyber_esp_irq_pending(struct esp *esp)
219 {
220         struct cyber_dma_registers __iomem *dregs = esp->dma_regs;
221         unsigned char dma_status = readb(&dregs->cond_reg);
222
223         /* It's important to check the DMA IRQ bit in the correct way! */
224         return ((zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR) &&
225                 (dma_status & CYBER_DMA_HNDL_INTR));
226 }
227
228 static int fastlane_esp_irq_pending(struct esp *esp)
229 {
230         struct fastlane_dma_registers __iomem *dregs = esp->dma_regs;
231         unsigned char dma_status;
232
233         dma_status = readb(&dregs->cond_reg);
234
235         if (dma_status & FASTLANE_DMA_IACT)
236                 return 0;       /* not our IRQ */
237
238         /* Return non-zero if ESP requested IRQ */
239         return (
240            (dma_status & FASTLANE_DMA_CREQ) &&
241            (!(dma_status & FASTLANE_DMA_MINT)) &&
242            (zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR));
243 }
244
245 static u32 zorro_esp_dma_length_limit(struct esp *esp, u32 dma_addr,
246                                         u32 dma_len)
247 {
248         return dma_len > 0xFFFFFF ? 0xFFFFFF : dma_len;
249 }
250
251 static void zorro_esp_reset_dma(struct esp *esp)
252 {
253         /* nothing to do here */
254 }
255
256 static void zorro_esp_dma_drain(struct esp *esp)
257 {
258         /* nothing to do here */
259 }
260
261 static void zorro_esp_dma_invalidate(struct esp *esp)
262 {
263         /* nothing to do here */
264 }
265
266 static void fastlane_esp_dma_invalidate(struct esp *esp)
267 {
268         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
269         struct fastlane_dma_registers __iomem *dregs = esp->dma_regs;
270         unsigned char *ctrl_data = &zep->ctrl_data;
271
272         *ctrl_data = (*ctrl_data & FASTLANE_DMA_MASK);
273         writeb(0, &dregs->clear_strobe);
274         z_writel(0, zep->board_base);
275 }
276
277 /*
278  * Programmed IO routines follow.
279  */
280
281 static inline unsigned int zorro_esp_wait_for_fifo(struct esp *esp)
282 {
283         int i = 500000;
284
285         do {
286                 unsigned int fbytes = zorro_esp_read8(esp, ESP_FFLAGS)
287                                                         & ESP_FF_FBYTES;
288
289                 if (fbytes)
290                         return fbytes;
291
292                 udelay(2);
293         } while (--i);
294
295         pr_err("FIFO is empty (sreg %02x)\n",
296                zorro_esp_read8(esp, ESP_STATUS));
297         return 0;
298 }
299
300 static inline int zorro_esp_wait_for_intr(struct esp *esp)
301 {
302         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
303         int i = 500000;
304
305         do {
306                 esp->sreg = zorro_esp_read8(esp, ESP_STATUS);
307                 if (esp->sreg & ESP_STAT_INTR)
308                         return 0;
309
310                 udelay(2);
311         } while (--i);
312
313         pr_err("IRQ timeout (sreg %02x)\n", esp->sreg);
314         zep->error = 1;
315         return 1;
316 }
317
318 /*
319  * PIO macros as used in mac_esp.c.
320  * Note that addr and fifo arguments are local-scope variables declared
321  * in zorro_esp_send_pio_cmd(), the macros are only used in that function,
322  * and addr and fifo are referenced in each use of the macros so there
323  * is no need to pass them as macro parameters.
324  */
325 #define ZORRO_ESP_PIO_LOOP(operands, reg1) \
326         asm volatile ( \
327              "1:     moveb " operands "\n" \
328              "       subqw #1,%1       \n" \
329              "       jbne 1b           \n" \
330              : "+a" (addr), "+r" (reg1) \
331              : "a" (fifo));
332
333 #define ZORRO_ESP_PIO_FILL(operands, reg1) \
334         asm volatile ( \
335              "       moveb " operands "\n" \
336              "       moveb " operands "\n" \
337              "       moveb " operands "\n" \
338              "       moveb " operands "\n" \
339              "       moveb " operands "\n" \
340              "       moveb " operands "\n" \
341              "       moveb " operands "\n" \
342              "       moveb " operands "\n" \
343              "       moveb " operands "\n" \
344              "       moveb " operands "\n" \
345              "       moveb " operands "\n" \
346              "       moveb " operands "\n" \
347              "       moveb " operands "\n" \
348              "       moveb " operands "\n" \
349              "       moveb " operands "\n" \
350              "       moveb " operands "\n" \
351              "       subqw #8,%1       \n" \
352              "       subqw #8,%1       \n" \
353              : "+a" (addr), "+r" (reg1) \
354              : "a" (fifo));
355
356 #define ZORRO_ESP_FIFO_SIZE 16
357
358 static void zorro_esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count,
359                                  u32 dma_count, int write, u8 cmd)
360 {
361         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
362         u8 __iomem *fifo = esp->regs + ESP_FDATA * 16;
363         u8 phase = esp->sreg & ESP_STAT_PMASK;
364
365         cmd &= ~ESP_CMD_DMA;
366
367         if (write) {
368                 u8 *dst = (u8 *)addr;
369                 u8 mask = ~(phase == ESP_MIP ? ESP_INTR_FDONE : ESP_INTR_BSERV);
370
371                 scsi_esp_cmd(esp, cmd);
372
373                 while (1) {
374                         if (!zorro_esp_wait_for_fifo(esp))
375                                 break;
376
377                         *dst++ = zorro_esp_read8(esp, ESP_FDATA);
378                         --esp_count;
379
380                         if (!esp_count)
381                                 break;
382
383                         if (zorro_esp_wait_for_intr(esp))
384                                 break;
385
386                         if ((esp->sreg & ESP_STAT_PMASK) != phase)
387                                 break;
388
389                         esp->ireg = zorro_esp_read8(esp, ESP_INTRPT);
390                         if (esp->ireg & mask) {
391                                 zep->error = 1;
392                                 break;
393                         }
394
395                         if (phase == ESP_MIP)
396                                 scsi_esp_cmd(esp, ESP_CMD_MOK);
397
398                         scsi_esp_cmd(esp, ESP_CMD_TI);
399                 }
400         } else {        /* unused, as long as we only handle MIP here */
401                 scsi_esp_cmd(esp, ESP_CMD_FLUSH);
402
403                 if (esp_count >= ZORRO_ESP_FIFO_SIZE)
404                         ZORRO_ESP_PIO_FILL("%0@+,%2@", esp_count)
405                 else
406                         ZORRO_ESP_PIO_LOOP("%0@+,%2@", esp_count)
407
408                 scsi_esp_cmd(esp, cmd);
409
410                 while (esp_count) {
411                         unsigned int n;
412
413                         if (zorro_esp_wait_for_intr(esp))
414                                 break;
415
416                         if ((esp->sreg & ESP_STAT_PMASK) != phase)
417                                 break;
418
419                         esp->ireg = zorro_esp_read8(esp, ESP_INTRPT);
420                         if (esp->ireg & ~ESP_INTR_BSERV) {
421                                 zep->error = 1;
422                                 break;
423                         }
424
425                         n = ZORRO_ESP_FIFO_SIZE -
426                             (zorro_esp_read8(esp, ESP_FFLAGS) & ESP_FF_FBYTES);
427                         if (n > esp_count)
428                                 n = esp_count;
429
430                         if (n == ZORRO_ESP_FIFO_SIZE)
431                                 ZORRO_ESP_PIO_FILL("%0@+,%2@", esp_count)
432                         else {
433                                 esp_count -= n;
434                                 ZORRO_ESP_PIO_LOOP("%0@+,%2@", n)
435                         }
436
437                         scsi_esp_cmd(esp, ESP_CMD_TI);
438                 }
439         }
440 }
441
442 /* Blizzard 1230/60 SCSI-IV DMA */
443
444 static void zorro_esp_send_blz1230_dma_cmd(struct esp *esp, u32 addr,
445                         u32 esp_count, u32 dma_count, int write, u8 cmd)
446 {
447         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
448         struct blz1230_dma_registers __iomem *dregs = esp->dma_regs;
449         u8 phase = esp->sreg & ESP_STAT_PMASK;
450
451         zep->error = 0;
452         /*
453          * Use PIO if transferring message bytes to esp->command_block_dma.
454          * PIO requires a virtual address, so substitute esp->command_block
455          * for addr.
456          */
457         if (phase == ESP_MIP && addr == esp->command_block_dma) {
458                 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block,
459                                         esp_count, dma_count, write, cmd);
460                 return;
461         }
462
463         if (write)
464                 /* DMA receive */
465                 dma_sync_single_for_device(esp->dev, addr, esp_count,
466                                 DMA_FROM_DEVICE);
467         else
468                 /* DMA send */
469                 dma_sync_single_for_device(esp->dev, addr, esp_count,
470                                 DMA_TO_DEVICE);
471
472         addr >>= 1;
473         if (write)
474                 addr &= ~(DMA_WRITE);
475         else
476                 addr |= DMA_WRITE;
477
478         writeb((addr >> 24) & 0xff, &dregs->dma_latch);
479         writeb((addr >> 24) & 0xff, &dregs->dma_addr);
480         writeb((addr >> 16) & 0xff, &dregs->dma_addr);
481         writeb((addr >>  8) & 0xff, &dregs->dma_addr);
482         writeb(addr & 0xff, &dregs->dma_addr);
483
484         scsi_esp_cmd(esp, ESP_CMD_DMA);
485         zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
486         zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
487         zorro_esp_write8(esp, (esp_count >> 16) & 0xff, ESP_TCHI);
488
489         scsi_esp_cmd(esp, cmd);
490 }
491
492 /* Blizzard 1230-II DMA */
493
494 static void zorro_esp_send_blz1230II_dma_cmd(struct esp *esp, u32 addr,
495                         u32 esp_count, u32 dma_count, int write, u8 cmd)
496 {
497         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
498         struct blz1230II_dma_registers __iomem *dregs = esp->dma_regs;
499         u8 phase = esp->sreg & ESP_STAT_PMASK;
500
501         zep->error = 0;
502         /* Use PIO if transferring message bytes to esp->command_block_dma */
503         if (phase == ESP_MIP && addr == esp->command_block_dma) {
504                 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block,
505                                         esp_count, dma_count, write, cmd);
506                 return;
507         }
508
509         if (write)
510                 /* DMA receive */
511                 dma_sync_single_for_device(esp->dev, addr, esp_count,
512                                 DMA_FROM_DEVICE);
513         else
514                 /* DMA send */
515                 dma_sync_single_for_device(esp->dev, addr, esp_count,
516                                 DMA_TO_DEVICE);
517
518         addr >>= 1;
519         if (write)
520                 addr &= ~(DMA_WRITE);
521         else
522                 addr |= DMA_WRITE;
523
524         writeb((addr >> 24) & 0xff, &dregs->dma_latch);
525         writeb((addr >> 16) & 0xff, &dregs->dma_addr);
526         writeb((addr >>  8) & 0xff, &dregs->dma_addr);
527         writeb(addr & 0xff, &dregs->dma_addr);
528
529         scsi_esp_cmd(esp, ESP_CMD_DMA);
530         zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
531         zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
532         zorro_esp_write8(esp, (esp_count >> 16) & 0xff, ESP_TCHI);
533
534         scsi_esp_cmd(esp, cmd);
535 }
536
537 /* Blizzard 2060 DMA */
538
539 static void zorro_esp_send_blz2060_dma_cmd(struct esp *esp, u32 addr,
540                         u32 esp_count, u32 dma_count, int write, u8 cmd)
541 {
542         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
543         struct blz2060_dma_registers __iomem *dregs = esp->dma_regs;
544         u8 phase = esp->sreg & ESP_STAT_PMASK;
545
546         zep->error = 0;
547         /* Use PIO if transferring message bytes to esp->command_block_dma */
548         if (phase == ESP_MIP && addr == esp->command_block_dma) {
549                 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block,
550                                         esp_count, dma_count, write, cmd);
551                 return;
552         }
553
554         if (write)
555                 /* DMA receive */
556                 dma_sync_single_for_device(esp->dev, addr, esp_count,
557                                 DMA_FROM_DEVICE);
558         else
559                 /* DMA send */
560                 dma_sync_single_for_device(esp->dev, addr, esp_count,
561                                 DMA_TO_DEVICE);
562
563         addr >>= 1;
564         if (write)
565                 addr &= ~(DMA_WRITE);
566         else
567                 addr |= DMA_WRITE;
568
569         writeb(addr & 0xff, &dregs->dma_addr3);
570         writeb((addr >>  8) & 0xff, &dregs->dma_addr2);
571         writeb((addr >> 16) & 0xff, &dregs->dma_addr1);
572         writeb((addr >> 24) & 0xff, &dregs->dma_addr0);
573
574         scsi_esp_cmd(esp, ESP_CMD_DMA);
575         zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
576         zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
577         zorro_esp_write8(esp, (esp_count >> 16) & 0xff, ESP_TCHI);
578
579         scsi_esp_cmd(esp, cmd);
580 }
581
582 /* Cyberstorm I DMA */
583
584 static void zorro_esp_send_cyber_dma_cmd(struct esp *esp, u32 addr,
585                         u32 esp_count, u32 dma_count, int write, u8 cmd)
586 {
587         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
588         struct cyber_dma_registers __iomem *dregs = esp->dma_regs;
589         u8 phase = esp->sreg & ESP_STAT_PMASK;
590         unsigned char *ctrl_data = &zep->ctrl_data;
591
592         zep->error = 0;
593         /* Use PIO if transferring message bytes to esp->command_block_dma */
594         if (phase == ESP_MIP && addr == esp->command_block_dma) {
595                 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block,
596                                         esp_count, dma_count, write, cmd);
597                 return;
598         }
599
600         zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
601         zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
602         zorro_esp_write8(esp, (esp_count >> 16) & 0xff, ESP_TCHI);
603
604         if (write) {
605                 /* DMA receive */
606                 dma_sync_single_for_device(esp->dev, addr, esp_count,
607                                 DMA_FROM_DEVICE);
608                 addr &= ~(1);
609         } else {
610                 /* DMA send */
611                 dma_sync_single_for_device(esp->dev, addr, esp_count,
612                                 DMA_TO_DEVICE);
613                 addr |= 1;
614         }
615
616         writeb((addr >> 24) & 0xff, &dregs->dma_addr0);
617         writeb((addr >> 16) & 0xff, &dregs->dma_addr1);
618         writeb((addr >>  8) & 0xff, &dregs->dma_addr2);
619         writeb(addr & 0xff, &dregs->dma_addr3);
620
621         if (write)
622                 *ctrl_data &= ~(CYBER_DMA_WRITE);
623         else
624                 *ctrl_data |= CYBER_DMA_WRITE;
625
626         *ctrl_data &= ~(CYBER_DMA_Z3);  /* Z2, do 16 bit DMA */
627
628         writeb(*ctrl_data, &dregs->ctrl_reg);
629
630         scsi_esp_cmd(esp, cmd);
631 }
632
633 /* Cyberstorm II DMA */
634
635 static void zorro_esp_send_cyberII_dma_cmd(struct esp *esp, u32 addr,
636                         u32 esp_count, u32 dma_count, int write, u8 cmd)
637 {
638         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
639         struct cyberII_dma_registers __iomem *dregs = esp->dma_regs;
640         u8 phase = esp->sreg & ESP_STAT_PMASK;
641
642         zep->error = 0;
643         /* Use PIO if transferring message bytes to esp->command_block_dma */
644         if (phase == ESP_MIP && addr == esp->command_block_dma) {
645                 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block,
646                                         esp_count, dma_count, write, cmd);
647                 return;
648         }
649
650         zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
651         zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
652         zorro_esp_write8(esp, (esp_count >> 16) & 0xff, ESP_TCHI);
653
654         if (write) {
655                 /* DMA receive */
656                 dma_sync_single_for_device(esp->dev, addr, esp_count,
657                                 DMA_FROM_DEVICE);
658                 addr &= ~(1);
659         } else {
660                 /* DMA send */
661                 dma_sync_single_for_device(esp->dev, addr, esp_count,
662                                 DMA_TO_DEVICE);
663                 addr |= 1;
664         }
665
666         writeb((addr >> 24) & 0xff, &dregs->dma_addr0);
667         writeb((addr >> 16) & 0xff, &dregs->dma_addr1);
668         writeb((addr >>  8) & 0xff, &dregs->dma_addr2);
669         writeb(addr & 0xff, &dregs->dma_addr3);
670
671         scsi_esp_cmd(esp, cmd);
672 }
673
674 /* Fastlane DMA */
675
676 static void zorro_esp_send_fastlane_dma_cmd(struct esp *esp, u32 addr,
677                         u32 esp_count, u32 dma_count, int write, u8 cmd)
678 {
679         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
680         struct fastlane_dma_registers __iomem *dregs = esp->dma_regs;
681         u8 phase = esp->sreg & ESP_STAT_PMASK;
682         unsigned char *ctrl_data = &zep->ctrl_data;
683
684         zep->error = 0;
685         /* Use PIO if transferring message bytes to esp->command_block_dma */
686         if (phase == ESP_MIP && addr == esp->command_block_dma) {
687                 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block,
688                                         esp_count, dma_count, write, cmd);
689                 return;
690         }
691
692         zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
693         zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
694         zorro_esp_write8(esp, (esp_count >> 16) & 0xff, ESP_TCHI);
695
696         if (write) {
697                 /* DMA receive */
698                 dma_sync_single_for_device(esp->dev, addr, esp_count,
699                                 DMA_FROM_DEVICE);
700                 addr &= ~(1);
701         } else {
702                 /* DMA send */
703                 dma_sync_single_for_device(esp->dev, addr, esp_count,
704                                 DMA_TO_DEVICE);
705                 addr |= 1;
706         }
707
708         writeb(0, &dregs->clear_strobe);
709         z_writel(addr, ((addr & 0x00ffffff) + zep->board_base));
710
711         if (write) {
712                 *ctrl_data = (*ctrl_data & FASTLANE_DMA_MASK) |
713                                 FASTLANE_DMA_ENABLE;
714         } else {
715                 *ctrl_data = ((*ctrl_data & FASTLANE_DMA_MASK) |
716                                 FASTLANE_DMA_ENABLE |
717                                 FASTLANE_DMA_WRITE);
718         }
719
720         writeb(*ctrl_data, &dregs->ctrl_reg);
721
722         scsi_esp_cmd(esp, cmd);
723 }
724
725 static int zorro_esp_dma_error(struct esp *esp)
726 {
727         struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
728
729         /* check for error in case we've been doing PIO */
730         if (zep->error == 1)
731                 return 1;
732
733         /* do nothing - there seems to be no way to check for DMA errors */
734         return 0;
735 }
736
737 /* per-board ESP driver ops */
738
739 static const struct esp_driver_ops blz1230_esp_ops = {
740         .esp_write8             = zorro_esp_write8,
741         .esp_read8              = zorro_esp_read8,
742         .map_single             = zorro_esp_map_single,
743         .map_sg                 = zorro_esp_map_sg,
744         .unmap_single           = zorro_esp_unmap_single,
745         .unmap_sg               = zorro_esp_unmap_sg,
746         .irq_pending            = zorro_esp_irq_pending,
747         .dma_length_limit       = zorro_esp_dma_length_limit,
748         .reset_dma              = zorro_esp_reset_dma,
749         .dma_drain              = zorro_esp_dma_drain,
750         .dma_invalidate         = zorro_esp_dma_invalidate,
751         .send_dma_cmd           = zorro_esp_send_blz1230_dma_cmd,
752         .dma_error              = zorro_esp_dma_error,
753 };
754
755 static const struct esp_driver_ops blz1230II_esp_ops = {
756         .esp_write8             = zorro_esp_write8,
757         .esp_read8              = zorro_esp_read8,
758         .map_single             = zorro_esp_map_single,
759         .map_sg                 = zorro_esp_map_sg,
760         .unmap_single           = zorro_esp_unmap_single,
761         .unmap_sg               = zorro_esp_unmap_sg,
762         .irq_pending            = zorro_esp_irq_pending,
763         .dma_length_limit       = zorro_esp_dma_length_limit,
764         .reset_dma              = zorro_esp_reset_dma,
765         .dma_drain              = zorro_esp_dma_drain,
766         .dma_invalidate         = zorro_esp_dma_invalidate,
767         .send_dma_cmd           = zorro_esp_send_blz1230II_dma_cmd,
768         .dma_error              = zorro_esp_dma_error,
769 };
770
771 static const struct esp_driver_ops blz2060_esp_ops = {
772         .esp_write8             = zorro_esp_write8,
773         .esp_read8              = zorro_esp_read8,
774         .map_single             = zorro_esp_map_single,
775         .map_sg                 = zorro_esp_map_sg,
776         .unmap_single           = zorro_esp_unmap_single,
777         .unmap_sg               = zorro_esp_unmap_sg,
778         .irq_pending            = zorro_esp_irq_pending,
779         .dma_length_limit       = zorro_esp_dma_length_limit,
780         .reset_dma              = zorro_esp_reset_dma,
781         .dma_drain              = zorro_esp_dma_drain,
782         .dma_invalidate         = zorro_esp_dma_invalidate,
783         .send_dma_cmd           = zorro_esp_send_blz2060_dma_cmd,
784         .dma_error              = zorro_esp_dma_error,
785 };
786
787 static const struct esp_driver_ops cyber_esp_ops = {
788         .esp_write8             = zorro_esp_write8,
789         .esp_read8              = zorro_esp_read8,
790         .map_single             = zorro_esp_map_single,
791         .map_sg                 = zorro_esp_map_sg,
792         .unmap_single           = zorro_esp_unmap_single,
793         .unmap_sg               = zorro_esp_unmap_sg,
794         .irq_pending            = cyber_esp_irq_pending,
795         .dma_length_limit       = zorro_esp_dma_length_limit,
796         .reset_dma              = zorro_esp_reset_dma,
797         .dma_drain              = zorro_esp_dma_drain,
798         .dma_invalidate         = zorro_esp_dma_invalidate,
799         .send_dma_cmd           = zorro_esp_send_cyber_dma_cmd,
800         .dma_error              = zorro_esp_dma_error,
801 };
802
803 static const struct esp_driver_ops cyberII_esp_ops = {
804         .esp_write8             = zorro_esp_write8,
805         .esp_read8              = zorro_esp_read8,
806         .map_single             = zorro_esp_map_single,
807         .map_sg                 = zorro_esp_map_sg,
808         .unmap_single           = zorro_esp_unmap_single,
809         .unmap_sg               = zorro_esp_unmap_sg,
810         .irq_pending            = zorro_esp_irq_pending,
811         .dma_length_limit       = zorro_esp_dma_length_limit,
812         .reset_dma              = zorro_esp_reset_dma,
813         .dma_drain              = zorro_esp_dma_drain,
814         .dma_invalidate         = zorro_esp_dma_invalidate,
815         .send_dma_cmd           = zorro_esp_send_cyberII_dma_cmd,
816         .dma_error              = zorro_esp_dma_error,
817 };
818
819 static const struct esp_driver_ops fastlane_esp_ops = {
820         .esp_write8             = zorro_esp_write8,
821         .esp_read8              = zorro_esp_read8,
822         .map_single             = zorro_esp_map_single,
823         .map_sg                 = zorro_esp_map_sg,
824         .unmap_single           = zorro_esp_unmap_single,
825         .unmap_sg               = zorro_esp_unmap_sg,
826         .irq_pending            = fastlane_esp_irq_pending,
827         .dma_length_limit       = zorro_esp_dma_length_limit,
828         .reset_dma              = zorro_esp_reset_dma,
829         .dma_drain              = zorro_esp_dma_drain,
830         .dma_invalidate         = fastlane_esp_dma_invalidate,
831         .send_dma_cmd           = zorro_esp_send_fastlane_dma_cmd,
832         .dma_error              = zorro_esp_dma_error,
833 };
834
835 /* Zorro driver config data */
836
837 struct zorro_driver_data {
838         const char *name;
839         unsigned long offset;
840         unsigned long dma_offset;
841         int absolute;   /* offset is absolute address */
842         int scsi_option;
843         const struct esp_driver_ops *esp_ops;
844 };
845
846 /* board types */
847
848 enum {
849         ZORRO_BLZ1230,
850         ZORRO_BLZ1230II,
851         ZORRO_BLZ2060,
852         ZORRO_CYBER,
853         ZORRO_CYBERII,
854         ZORRO_FASTLANE,
855 };
856
857 /* per-board config data */
858
859 static const struct zorro_driver_data zorro_esp_boards[] = {
860         [ZORRO_BLZ1230] = {
861                                 .name           = "Blizzard 1230",
862                                 .offset         = 0x8000,
863                                 .dma_offset     = 0x10000,
864                                 .scsi_option    = 1,
865                                 .esp_ops        = &blz1230_esp_ops,
866         },
867         [ZORRO_BLZ1230II] = {
868                                 .name           = "Blizzard 1230II",
869                                 .offset         = 0x10000,
870                                 .dma_offset     = 0x10021,
871                                 .scsi_option    = 1,
872                                 .esp_ops        = &blz1230II_esp_ops,
873         },
874         [ZORRO_BLZ2060] = {
875                                 .name           = "Blizzard 2060",
876                                 .offset         = 0x1ff00,
877                                 .dma_offset     = 0x1ffe0,
878                                 .esp_ops        = &blz2060_esp_ops,
879         },
880         [ZORRO_CYBER] = {
881                                 .name           = "CyberStormI",
882                                 .offset         = 0xf400,
883                                 .dma_offset     = 0xf800,
884                                 .esp_ops        = &cyber_esp_ops,
885         },
886         [ZORRO_CYBERII] = {
887                                 .name           = "CyberStormII",
888                                 .offset         = 0x1ff03,
889                                 .dma_offset     = 0x1ff43,
890                                 .scsi_option    = 1,
891                                 .esp_ops        = &cyberII_esp_ops,
892         },
893         [ZORRO_FASTLANE] = {
894                                 .name           = "Fastlane",
895                                 .offset         = 0x1000001,
896                                 .dma_offset     = 0x1000041,
897                                 .esp_ops        = &fastlane_esp_ops,
898         },
899 };
900
901 static const struct zorro_device_id zorro_esp_zorro_tbl[] = {
902         {       /* Blizzard 1230 IV */
903                 .id = ZORRO_ID(PHASE5, 0x11, 0),
904                 .driver_data = ZORRO_BLZ1230,
905         },
906         {       /* Blizzard 1230 II (Zorro II) or Fastlane (Zorro III) */
907                 .id = ZORRO_ID(PHASE5, 0x0B, 0),
908                 .driver_data = ZORRO_BLZ1230II,
909         },
910         {       /* Blizzard 2060 */
911                 .id = ZORRO_ID(PHASE5, 0x18, 0),
912                 .driver_data = ZORRO_BLZ2060,
913         },
914         {       /* Cyberstorm */
915                 .id = ZORRO_ID(PHASE5, 0x0C, 0),
916                 .driver_data = ZORRO_CYBER,
917         },
918         {       /* Cyberstorm II */
919                 .id = ZORRO_ID(PHASE5, 0x19, 0),
920                 .driver_data = ZORRO_CYBERII,
921         },
922         { 0 }
923 };
924 MODULE_DEVICE_TABLE(zorro, zorro_esp_zorro_tbl);
925
926 static int zorro_esp_probe(struct zorro_dev *z,
927                                        const struct zorro_device_id *ent)
928 {
929         struct scsi_host_template *tpnt = &scsi_esp_template;
930         struct Scsi_Host *host;
931         struct esp *esp;
932         const struct zorro_driver_data *zdd;
933         struct zorro_esp_priv *zep;
934         unsigned long board, ioaddr, dmaaddr;
935         int err;
936
937         board = zorro_resource_start(z);
938         zdd = &zorro_esp_boards[ent->driver_data];
939
940         pr_info("%s found at address 0x%lx.\n", zdd->name, board);
941
942         zep = kzalloc(sizeof(*zep), GFP_KERNEL);
943         if (!zep) {
944                 pr_err("Can't allocate device private data!\n");
945                 return -ENOMEM;
946         }
947
948         /* let's figure out whether we have a Zorro II or Zorro III board */
949         if ((z->rom.er_Type & ERT_TYPEMASK) == ERT_ZORROIII) {
950                 if (board > 0xffffff)
951                         zep->zorro3 = 1;
952         } else {
953                 /*
954                  * Even though most of these boards identify as Zorro II,
955                  * they are in fact CPU expansion slot boards and have full
956                  * access to all of memory. Fix up DMA bitmask here.
957                  */
958                 z->dev.coherent_dma_mask = DMA_BIT_MASK(32);
959         }
960
961         /*
962          * If Zorro III and ID matches Fastlane, our device table entry
963          * contains data for the Blizzard 1230 II board which does share the
964          * same ID. Fix up device table entry here.
965          * TODO: Some Cyberstom060 boards also share this ID but would need
966          * to use the Cyberstorm I driver data ... we catch this by checking
967          * for presence of ESP chip later, but don't try to fix up yet.
968          */
969         if (zep->zorro3 && ent->driver_data == ZORRO_BLZ1230II) {
970                 pr_info("%s at address 0x%lx is Fastlane Z3, fixing data!\n",
971                         zdd->name, board);
972                 zdd = &zorro_esp_boards[ZORRO_FASTLANE];
973         }
974
975         if (zdd->absolute) {
976                 ioaddr  = zdd->offset;
977                 dmaaddr = zdd->dma_offset;
978         } else {
979                 ioaddr  = board + zdd->offset;
980                 dmaaddr = board + zdd->dma_offset;
981         }
982
983         if (!zorro_request_device(z, zdd->name)) {
984                 pr_err("cannot reserve region 0x%lx, abort\n",
985                        board);
986                 err = -EBUSY;
987                 goto fail_free_zep;
988         }
989
990         host = scsi_host_alloc(tpnt, sizeof(struct esp));
991
992         if (!host) {
993                 pr_err("No host detected; board configuration problem?\n");
994                 err = -ENOMEM;
995                 goto fail_release_device;
996         }
997
998         host->base              = ioaddr;
999         host->this_id           = 7;
1000
1001         esp                     = shost_priv(host);
1002         esp->host               = host;
1003         esp->dev                = &z->dev;
1004
1005         esp->scsi_id            = host->this_id;
1006         esp->scsi_id_mask       = (1 << esp->scsi_id);
1007
1008         esp->cfreq = 40000000;
1009
1010         zep->esp = esp;
1011
1012         dev_set_drvdata(esp->dev, zep);
1013
1014         /* additional setup required for Fastlane */
1015         if (zep->zorro3 && ent->driver_data == ZORRO_BLZ1230II) {
1016                 /* map full address space up to ESP base for DMA */
1017                 zep->board_base = ioremap_nocache(board,
1018                                                 FASTLANE_ESP_ADDR-1);
1019                 if (!zep->board_base) {
1020                         pr_err("Cannot allocate board address space\n");
1021                         err = -ENOMEM;
1022                         goto fail_free_host;
1023                 }
1024                 /* initialize DMA control shadow register */
1025                 zep->ctrl_data = (FASTLANE_DMA_FCODE |
1026                                   FASTLANE_DMA_EDI | FASTLANE_DMA_ESI);
1027         }
1028
1029         esp->ops = zdd->esp_ops;
1030
1031         if (ioaddr > 0xffffff)
1032                 esp->regs = ioremap_nocache(ioaddr, 0x20);
1033         else
1034                 /* ZorroII address space remapped nocache by early startup */
1035                 esp->regs = ZTWO_VADDR(ioaddr);
1036
1037         if (!esp->regs) {
1038                 err = -ENOMEM;
1039                 goto fail_unmap_fastlane;
1040         }
1041
1042         /* Check whether a Blizzard 12x0 or CyberstormII really has SCSI */
1043         if (zdd->scsi_option) {
1044                 zorro_esp_write8(esp, (ESP_CONFIG1_PENABLE | 7), ESP_CFG1);
1045                 if (zorro_esp_read8(esp, ESP_CFG1) != (ESP_CONFIG1_PENABLE|7)) {
1046                         err = -ENODEV;
1047                         goto fail_unmap_regs;
1048                 }
1049         }
1050
1051         if (zep->zorro3) {
1052                 /*
1053                  * Only Fastlane Z3 for now - add switch for correct struct
1054                  * dma_registers size if adding any more
1055                  */
1056                 esp->dma_regs = ioremap_nocache(dmaaddr,
1057                                 sizeof(struct fastlane_dma_registers));
1058         } else
1059                 /* ZorroII address space remapped nocache by early startup */
1060                 esp->dma_regs = ZTWO_VADDR(dmaaddr);
1061
1062         if (!esp->dma_regs) {
1063                 err = -ENOMEM;
1064                 goto fail_unmap_regs;
1065         }
1066
1067         esp->command_block = dma_alloc_coherent(esp->dev, 16,
1068                                                 &esp->command_block_dma,
1069                                                 GFP_KERNEL);
1070
1071         if (!esp->command_block) {
1072                 err = -ENOMEM;
1073                 goto fail_unmap_dma_regs;
1074         }
1075
1076         host->irq = IRQ_AMIGA_PORTS;
1077         err = request_irq(host->irq, scsi_esp_intr, IRQF_SHARED,
1078                           "Amiga Zorro ESP", esp);
1079         if (err < 0) {
1080                 err = -ENODEV;
1081                 goto fail_free_command_block;
1082         }
1083
1084         /* register the chip */
1085         err = scsi_esp_register(esp, &z->dev);
1086
1087         if (err) {
1088                 err = -ENOMEM;
1089                 goto fail_free_irq;
1090         }
1091
1092         return 0;
1093
1094 fail_free_irq:
1095         free_irq(host->irq, esp);
1096
1097 fail_free_command_block:
1098         dma_free_coherent(esp->dev, 16,
1099                           esp->command_block,
1100                           esp->command_block_dma);
1101
1102 fail_unmap_dma_regs:
1103         if (zep->zorro3)
1104                 iounmap(esp->dma_regs);
1105
1106 fail_unmap_regs:
1107         if (ioaddr > 0xffffff)
1108                 iounmap(esp->regs);
1109
1110 fail_unmap_fastlane:
1111         if (zep->zorro3)
1112                 iounmap(zep->board_base);
1113
1114 fail_free_host:
1115         scsi_host_put(host);
1116
1117 fail_release_device:
1118         zorro_release_device(z);
1119
1120 fail_free_zep:
1121         kfree(zep);
1122
1123         return err;
1124 }
1125
1126 static void zorro_esp_remove(struct zorro_dev *z)
1127 {
1128         struct zorro_esp_priv *zep = dev_get_drvdata(&z->dev);
1129         struct esp *esp = zep->esp;
1130         struct Scsi_Host *host = esp->host;
1131
1132         scsi_esp_unregister(esp);
1133
1134         free_irq(host->irq, esp);
1135         dma_free_coherent(esp->dev, 16,
1136                           esp->command_block,
1137                           esp->command_block_dma);
1138
1139         if (zep->zorro3) {
1140                 iounmap(zep->board_base);
1141                 iounmap(esp->dma_regs);
1142         }
1143
1144         if (host->base > 0xffffff)
1145                 iounmap(esp->regs);
1146
1147         scsi_host_put(host);
1148
1149         zorro_release_device(z);
1150
1151         kfree(zep);
1152 }
1153
1154 static struct zorro_driver zorro_esp_driver = {
1155         .name     = KBUILD_MODNAME,
1156         .id_table = zorro_esp_zorro_tbl,
1157         .probe    = zorro_esp_probe,
1158         .remove   = zorro_esp_remove,
1159 };
1160
1161 static int __init zorro_esp_scsi_init(void)
1162 {
1163         return zorro_register_driver(&zorro_esp_driver);
1164 }
1165
1166 static void __exit zorro_esp_scsi_exit(void)
1167 {
1168         zorro_unregister_driver(&zorro_esp_driver);
1169 }
1170
1171 module_init(zorro_esp_scsi_init);
1172 module_exit(zorro_esp_scsi_exit);