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