blob: 928c8adf5cb33f4faefab872beae878cd7b18b59 [file] [log] [blame]
Michael Schmitz3109e5a2018-04-12 13:53:26 +12001// 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
Michael Schmitz3109e5a2018-04-12 13:53:26 +120012 */
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>
Mike Rapoport65fddcf2020-06-08 21:32:42 -070037#include <linux/pgtable.h>
Michael Schmitz3109e5a2018-04-12 13:53:26 +120038
39#include <asm/page.h>
Michael Schmitz3109e5a2018-04-12 13:53:26 +120040#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
51MODULE_AUTHOR("Michael Schmitz <schmitz@debian.org>");
52MODULE_DESCRIPTION("Amiga Zorro NCR5C9x (ESP) driver");
53MODULE_LICENSE("GPL");
54
55/* per-board register layout definitions */
56
57/* Blizzard 1230 DMA interface */
58
59struct 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
67struct 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
75struct 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
92struct 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 */
113struct 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
128struct 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 */
157struct zorro_esp_priv {
158 struct esp *esp; /* our ESP instance - for Scsi_host* */
159 void __iomem *board_base; /* virtual address (Zorro III board) */
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200160 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
172static void zorro_esp_write8(struct esp *esp, u8 val, unsigned long reg)
173{
174 writeb(val, esp->regs + (reg * 4UL));
175}
176
177static u8 zorro_esp_read8(struct esp *esp, unsigned long reg)
178{
179 return readb(esp->regs + (reg * 4UL));
180}
181
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200182static 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
191static 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
201static 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
218static u32 zorro_esp_dma_length_limit(struct esp *esp, u32 dma_addr,
219 u32 dma_len)
220{
Kars de Jong02f7e9f2019-11-12 18:55:23 +0100221 return dma_len > (1U << 16) ? (1U << 16) : dma_len;
222}
223
224static 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;
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200229}
230
231static void zorro_esp_reset_dma(struct esp *esp)
232{
233 /* nothing to do here */
234}
235
236static void zorro_esp_dma_drain(struct esp *esp)
237{
238 /* nothing to do here */
239}
240
241static void zorro_esp_dma_invalidate(struct esp *esp)
242{
243 /* nothing to do here */
244}
245
246static 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
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200257/* Blizzard 1230/60 SCSI-IV DMA */
258
259static void zorro_esp_send_blz1230_dma_cmd(struct esp *esp, u32 addr,
260 u32 esp_count, u32 dma_count, int write, u8 cmd)
261{
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200262 struct blz1230_dma_registers __iomem *dregs = esp->dma_regs;
263 u8 phase = esp->sreg & ESP_STAT_PMASK;
264
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200265 /*
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) {
Finn Thain53dce332018-10-16 16:31:25 +1100271 esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
272 dma_count, write, cmd);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200273 return;
274 }
275
Finn Thain53dce332018-10-16 16:31:25 +1100276 /* 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
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200280 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);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200304
305 scsi_esp_cmd(esp, cmd);
306}
307
308/* Blizzard 1230-II DMA */
309
310static void zorro_esp_send_blz1230II_dma_cmd(struct esp *esp, u32 addr,
311 u32 esp_count, u32 dma_count, int write, u8 cmd)
312{
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200313 struct blz1230II_dma_registers __iomem *dregs = esp->dma_regs;
314 u8 phase = esp->sreg & ESP_STAT_PMASK;
315
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200316 /* Use PIO if transferring message bytes to esp->command_block_dma */
317 if (phase == ESP_MIP && addr == esp->command_block_dma) {
Finn Thain53dce332018-10-16 16:31:25 +1100318 esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
319 dma_count, write, cmd);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200320 return;
321 }
322
Finn Thain53dce332018-10-16 16:31:25 +1100323 esp->send_cmd_error = 0;
324 esp->send_cmd_residual = 0;
325
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200326 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);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200349
350 scsi_esp_cmd(esp, cmd);
351}
352
353/* Blizzard 2060 DMA */
354
355static void zorro_esp_send_blz2060_dma_cmd(struct esp *esp, u32 addr,
356 u32 esp_count, u32 dma_count, int write, u8 cmd)
357{
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200358 struct blz2060_dma_registers __iomem *dregs = esp->dma_regs;
359 u8 phase = esp->sreg & ESP_STAT_PMASK;
360
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200361 /* Use PIO if transferring message bytes to esp->command_block_dma */
362 if (phase == ESP_MIP && addr == esp->command_block_dma) {
Finn Thain53dce332018-10-16 16:31:25 +1100363 esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
364 dma_count, write, cmd);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200365 return;
366 }
367
Finn Thain53dce332018-10-16 16:31:25 +1100368 esp->send_cmd_error = 0;
369 esp->send_cmd_residual = 0;
370
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200371 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);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200394
395 scsi_esp_cmd(esp, cmd);
396}
397
398/* Cyberstorm I DMA */
399
400static 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
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200408 /* Use PIO if transferring message bytes to esp->command_block_dma */
409 if (phase == ESP_MIP && addr == esp->command_block_dma) {
Finn Thain53dce332018-10-16 16:31:25 +1100410 esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
411 dma_count, write, cmd);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200412 return;
413 }
414
Finn Thain53dce332018-10-16 16:31:25 +1100415 esp->send_cmd_error = 0;
416 esp->send_cmd_residual = 0;
417
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200418 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
419 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200420
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
452static void zorro_esp_send_cyberII_dma_cmd(struct esp *esp, u32 addr,
453 u32 esp_count, u32 dma_count, int write, u8 cmd)
454{
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200455 struct cyberII_dma_registers __iomem *dregs = esp->dma_regs;
456 u8 phase = esp->sreg & ESP_STAT_PMASK;
457
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200458 /* Use PIO if transferring message bytes to esp->command_block_dma */
459 if (phase == ESP_MIP && addr == esp->command_block_dma) {
Finn Thain53dce332018-10-16 16:31:25 +1100460 esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
461 dma_count, write, cmd);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200462 return;
463 }
464
Finn Thain53dce332018-10-16 16:31:25 +1100465 esp->send_cmd_error = 0;
466 esp->send_cmd_residual = 0;
467
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200468 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
469 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200470
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
493static 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
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200501 /* Use PIO if transferring message bytes to esp->command_block_dma */
502 if (phase == ESP_MIP && addr == esp->command_block_dma) {
Finn Thain53dce332018-10-16 16:31:25 +1100503 esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
504 dma_count, write, cmd);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200505 return;
506 }
507
Finn Thain53dce332018-10-16 16:31:25 +1100508 esp->send_cmd_error = 0;
509 esp->send_cmd_residual = 0;
510
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200511 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
512 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200513
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
543static int zorro_esp_dma_error(struct esp *esp)
544{
Finn Thain53dce332018-10-16 16:31:25 +1100545 return esp->send_cmd_error;
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200546}
547
548/* per-board ESP driver ops */
549
550static const struct esp_driver_ops blz1230_esp_ops = {
551 .esp_write8 = zorro_esp_write8,
552 .esp_read8 = zorro_esp_read8,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200553 .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
562static const struct esp_driver_ops blz1230II_esp_ops = {
563 .esp_write8 = zorro_esp_write8,
564 .esp_read8 = zorro_esp_read8,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200565 .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
574static const struct esp_driver_ops blz2060_esp_ops = {
575 .esp_write8 = zorro_esp_write8,
576 .esp_read8 = zorro_esp_read8,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200577 .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
586static const struct esp_driver_ops cyber_esp_ops = {
587 .esp_write8 = zorro_esp_write8,
588 .esp_read8 = zorro_esp_read8,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200589 .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
598static const struct esp_driver_ops cyberII_esp_ops = {
599 .esp_write8 = zorro_esp_write8,
600 .esp_read8 = zorro_esp_read8,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200601 .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
610static const struct esp_driver_ops fastlane_esp_ops = {
611 .esp_write8 = zorro_esp_write8,
612 .esp_read8 = zorro_esp_read8,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200613 .irq_pending = fastlane_esp_irq_pending,
Kars de Jong02f7e9f2019-11-12 18:55:23 +0100614 .dma_length_limit = fastlane_esp_dma_length_limit,
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200615 .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
624struct 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
635enum {
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
646static 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
688static 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};
711MODULE_DEVICE_TABLE(zorro, zorro_esp_zorro_tbl);
712
713static 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 */
Geert Uytterhoeven0d963002020-02-12 09:51:38 +0100804 zep->board_base = ioremap(board, FASTLANE_ESP_ADDR - 1);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200805 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)
Christoph Hellwig4bdc0d62020-01-06 09:43:50 +0100818 esp->regs = ioremap(ioaddr, 0x20);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200819 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
Finn Thain53dce332018-10-16 16:31:25 +1100828 esp->fifo_reg = esp->regs + ESP_FDATA * 4;
829
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200830 /* 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 */
Christoph Hellwig4bdc0d62020-01-06 09:43:50 +0100844 esp->dma_regs = ioremap(dmaaddr,
Geert Uytterhoeven0d963002020-02-12 09:51:38 +0100845 sizeof(struct fastlane_dma_registers));
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200846 } 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 */
Christoph Hellwig44b1b4d2018-10-13 09:26:26 +0200873 err = scsi_esp_register(esp);
Michael Schmitz3109e5a2018-04-12 13:53:26 +1200874
875 if (err) {
876 err = -ENOMEM;
877 goto fail_free_irq;
878 }
879
880 return 0;
881
882fail_free_irq:
883 free_irq(host->irq, esp);
884
885fail_free_command_block:
886 dma_free_coherent(esp->dev, 16,
887 esp->command_block,
888 esp->command_block_dma);
889
890fail_unmap_dma_regs:
891 if (zep->zorro3)
892 iounmap(esp->dma_regs);
893
894fail_unmap_regs:
895 if (ioaddr > 0xffffff)
896 iounmap(esp->regs);
897
898fail_unmap_fastlane:
899 if (zep->zorro3)
900 iounmap(zep->board_base);
901
902fail_free_host:
903 scsi_host_put(host);
904
905fail_release_device:
906 zorro_release_device(z);
907
908fail_free_zep:
909 kfree(zep);
910
911 return err;
912}
913
914static 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
942static 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
949static int __init zorro_esp_scsi_init(void)
950{
951 return zorro_register_driver(&zorro_esp_driver);
952}
953
954static void __exit zorro_esp_scsi_exit(void)
955{
956 zorro_unregister_driver(&zorro_esp_driver);
957}
958
959module_init(zorro_esp_scsi_init);
960module_exit(zorro_esp_scsi_exit);