zorro_esp.c (25336B)
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 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) */ 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 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 182static 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{ 221 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; 229} 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 257/* 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{ 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 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{ 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 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{ 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 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 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 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{ 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 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 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 543static int zorro_esp_dma_error(struct esp *esp) 544{ 545 return esp->send_cmd_error; 546} 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, 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 562static 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 574static 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 586static 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 598static 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 610static 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 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 */ 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 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);