Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.13-rc4 1143 lines 28 kB view raw
1/* 2 * CARMA Board DATA-FPGA Programmer 3 * 4 * Copyright (c) 2009-2011 Ira W. Snyder <iws@ovro.caltech.edu> 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the 8 * Free Software Foundation; either version 2 of the License, or (at your 9 * option) any later version. 10 */ 11 12#include <linux/dma-mapping.h> 13#include <linux/of_address.h> 14#include <linux/of_irq.h> 15#include <linux/of_platform.h> 16#include <linux/completion.h> 17#include <linux/miscdevice.h> 18#include <linux/dmaengine.h> 19#include <linux/interrupt.h> 20#include <linux/highmem.h> 21#include <linux/kernel.h> 22#include <linux/module.h> 23#include <linux/mutex.h> 24#include <linux/delay.h> 25#include <linux/init.h> 26#include <linux/leds.h> 27#include <linux/slab.h> 28#include <linux/kref.h> 29#include <linux/fs.h> 30#include <linux/io.h> 31 32#include <media/videobuf-dma-sg.h> 33 34/* MPC8349EMDS specific get_immrbase() */ 35#include <sysdev/fsl_soc.h> 36 37static const char drv_name[] = "carma-fpga-program"; 38 39/* 40 * Firmware images are always this exact size 41 * 42 * 12849552 bytes for a CARMA Digitizer Board (EP2S90 FPGAs) 43 * 18662880 bytes for a CARMA Correlator Board (EP2S130 FPGAs) 44 */ 45#define FW_SIZE_EP2S90 12849552 46#define FW_SIZE_EP2S130 18662880 47 48struct fpga_dev { 49 struct miscdevice miscdev; 50 51 /* Reference count */ 52 struct kref ref; 53 54 /* Device Registers */ 55 struct device *dev; 56 void __iomem *regs; 57 void __iomem *immr; 58 59 /* Freescale DMA Device */ 60 struct dma_chan *chan; 61 62 /* Interrupts */ 63 int irq, status; 64 struct completion completion; 65 66 /* FPGA Bitfile */ 67 struct mutex lock; 68 69 struct videobuf_dmabuf vb; 70 bool vb_allocated; 71 72 /* max size and written bytes */ 73 size_t fw_size; 74 size_t bytes; 75}; 76 77/* 78 * FPGA Bitfile Helpers 79 */ 80 81/** 82 * fpga_drop_firmware_data() - drop the bitfile image from memory 83 * @priv: the driver's private data structure 84 * 85 * LOCKING: must hold priv->lock 86 */ 87static void fpga_drop_firmware_data(struct fpga_dev *priv) 88{ 89 videobuf_dma_free(&priv->vb); 90 priv->vb_allocated = false; 91 priv->bytes = 0; 92} 93 94/* 95 * Private Data Reference Count 96 */ 97 98static void fpga_dev_remove(struct kref *ref) 99{ 100 struct fpga_dev *priv = container_of(ref, struct fpga_dev, ref); 101 102 /* free any firmware image that was not programmed */ 103 fpga_drop_firmware_data(priv); 104 105 mutex_destroy(&priv->lock); 106 kfree(priv); 107} 108 109/* 110 * LED Trigger (could be a seperate module) 111 */ 112 113/* 114 * NOTE: this whole thing does have the problem that whenever the led's are 115 * NOTE: first set to use the fpga trigger, they could be in the wrong state 116 */ 117 118DEFINE_LED_TRIGGER(ledtrig_fpga); 119 120static void ledtrig_fpga_programmed(bool enabled) 121{ 122 if (enabled) 123 led_trigger_event(ledtrig_fpga, LED_FULL); 124 else 125 led_trigger_event(ledtrig_fpga, LED_OFF); 126} 127 128/* 129 * FPGA Register Helpers 130 */ 131 132/* Register Definitions */ 133#define FPGA_CONFIG_CONTROL 0x40 134#define FPGA_CONFIG_STATUS 0x44 135#define FPGA_CONFIG_FIFO_SIZE 0x48 136#define FPGA_CONFIG_FIFO_USED 0x4C 137#define FPGA_CONFIG_TOTAL_BYTE_COUNT 0x50 138#define FPGA_CONFIG_CUR_BYTE_COUNT 0x54 139 140#define FPGA_FIFO_ADDRESS 0x3000 141 142static int fpga_fifo_size(void __iomem *regs) 143{ 144 return ioread32be(regs + FPGA_CONFIG_FIFO_SIZE); 145} 146 147#define CFG_STATUS_ERR_MASK 0xfffe 148 149static int fpga_config_error(void __iomem *regs) 150{ 151 return ioread32be(regs + FPGA_CONFIG_STATUS) & CFG_STATUS_ERR_MASK; 152} 153 154static int fpga_fifo_empty(void __iomem *regs) 155{ 156 return ioread32be(regs + FPGA_CONFIG_FIFO_USED) == 0; 157} 158 159static void fpga_fifo_write(void __iomem *regs, u32 val) 160{ 161 iowrite32be(val, regs + FPGA_FIFO_ADDRESS); 162} 163 164static void fpga_set_byte_count(void __iomem *regs, u32 count) 165{ 166 iowrite32be(count, regs + FPGA_CONFIG_TOTAL_BYTE_COUNT); 167} 168 169#define CFG_CTL_ENABLE (1 << 0) 170#define CFG_CTL_RESET (1 << 1) 171#define CFG_CTL_DMA (1 << 2) 172 173static void fpga_programmer_enable(struct fpga_dev *priv, bool dma) 174{ 175 u32 val; 176 177 val = (dma) ? (CFG_CTL_ENABLE | CFG_CTL_DMA) : CFG_CTL_ENABLE; 178 iowrite32be(val, priv->regs + FPGA_CONFIG_CONTROL); 179} 180 181static void fpga_programmer_disable(struct fpga_dev *priv) 182{ 183 iowrite32be(0x0, priv->regs + FPGA_CONFIG_CONTROL); 184} 185 186static void fpga_dump_registers(struct fpga_dev *priv) 187{ 188 u32 control, status, size, used, total, curr; 189 190 /* good status: do nothing */ 191 if (priv->status == 0) 192 return; 193 194 /* Dump all status registers */ 195 control = ioread32be(priv->regs + FPGA_CONFIG_CONTROL); 196 status = ioread32be(priv->regs + FPGA_CONFIG_STATUS); 197 size = ioread32be(priv->regs + FPGA_CONFIG_FIFO_SIZE); 198 used = ioread32be(priv->regs + FPGA_CONFIG_FIFO_USED); 199 total = ioread32be(priv->regs + FPGA_CONFIG_TOTAL_BYTE_COUNT); 200 curr = ioread32be(priv->regs + FPGA_CONFIG_CUR_BYTE_COUNT); 201 202 dev_err(priv->dev, "Configuration failed, dumping status registers\n"); 203 dev_err(priv->dev, "Control: 0x%.8x\n", control); 204 dev_err(priv->dev, "Status: 0x%.8x\n", status); 205 dev_err(priv->dev, "FIFO Size: 0x%.8x\n", size); 206 dev_err(priv->dev, "FIFO Used: 0x%.8x\n", used); 207 dev_err(priv->dev, "FIFO Total: 0x%.8x\n", total); 208 dev_err(priv->dev, "FIFO Curr: 0x%.8x\n", curr); 209} 210 211/* 212 * FPGA Power Supply Code 213 */ 214 215#define CTL_PWR_CONTROL 0x2006 216#define CTL_PWR_STATUS 0x200A 217#define CTL_PWR_FAIL 0x200B 218 219#define PWR_CONTROL_ENABLE 0x01 220 221#define PWR_STATUS_ERROR_MASK 0x10 222#define PWR_STATUS_GOOD 0x0f 223 224/* 225 * Determine if the FPGA power is good for all supplies 226 */ 227static bool fpga_power_good(struct fpga_dev *priv) 228{ 229 u8 val; 230 231 val = ioread8(priv->regs + CTL_PWR_STATUS); 232 if (val & PWR_STATUS_ERROR_MASK) 233 return false; 234 235 return val == PWR_STATUS_GOOD; 236} 237 238/* 239 * Disable the FPGA power supplies 240 */ 241static void fpga_disable_power_supplies(struct fpga_dev *priv) 242{ 243 unsigned long start; 244 u8 val; 245 246 iowrite8(0x0, priv->regs + CTL_PWR_CONTROL); 247 248 /* 249 * Wait 500ms for the power rails to discharge 250 * 251 * Without this delay, the CTL-CPLD state machine can get into a 252 * state where it is waiting for the power-goods to assert, but they 253 * never do. This only happens when enabling and disabling the 254 * power sequencer very rapidly. 255 * 256 * The loop below will also wait for the power goods to de-assert, 257 * but testing has shown that they are always disabled by the time 258 * the sleep completes. However, omitting the sleep and only waiting 259 * for the power-goods to de-assert was not sufficient to ensure 260 * that the power sequencer would not wedge itself. 261 */ 262 msleep(500); 263 264 start = jiffies; 265 while (time_before(jiffies, start + HZ)) { 266 val = ioread8(priv->regs + CTL_PWR_STATUS); 267 if (!(val & PWR_STATUS_GOOD)) 268 break; 269 270 usleep_range(5000, 10000); 271 } 272 273 val = ioread8(priv->regs + CTL_PWR_STATUS); 274 if (val & PWR_STATUS_GOOD) { 275 dev_err(priv->dev, "power disable failed: " 276 "power goods: status 0x%.2x\n", val); 277 } 278 279 if (val & PWR_STATUS_ERROR_MASK) { 280 dev_err(priv->dev, "power disable failed: " 281 "alarm bit set: status 0x%.2x\n", val); 282 } 283} 284 285/** 286 * fpga_enable_power_supplies() - enable the DATA-FPGA power supplies 287 * @priv: the driver's private data structure 288 * 289 * Enable the DATA-FPGA power supplies, waiting up to 1 second for 290 * them to enable successfully. 291 * 292 * Returns 0 on success, -ERRNO otherwise 293 */ 294static int fpga_enable_power_supplies(struct fpga_dev *priv) 295{ 296 unsigned long start = jiffies; 297 298 if (fpga_power_good(priv)) { 299 dev_dbg(priv->dev, "power was already good\n"); 300 return 0; 301 } 302 303 iowrite8(PWR_CONTROL_ENABLE, priv->regs + CTL_PWR_CONTROL); 304 while (time_before(jiffies, start + HZ)) { 305 if (fpga_power_good(priv)) 306 return 0; 307 308 usleep_range(5000, 10000); 309 } 310 311 return fpga_power_good(priv) ? 0 : -ETIMEDOUT; 312} 313 314/* 315 * Determine if the FPGA power supplies are all enabled 316 */ 317static bool fpga_power_enabled(struct fpga_dev *priv) 318{ 319 u8 val; 320 321 val = ioread8(priv->regs + CTL_PWR_CONTROL); 322 if (val & PWR_CONTROL_ENABLE) 323 return true; 324 325 return false; 326} 327 328/* 329 * Determine if the FPGA's are programmed and running correctly 330 */ 331static bool fpga_running(struct fpga_dev *priv) 332{ 333 if (!fpga_power_good(priv)) 334 return false; 335 336 /* Check the config done bit */ 337 return ioread32be(priv->regs + FPGA_CONFIG_STATUS) & (1 << 18); 338} 339 340/* 341 * FPGA Programming Code 342 */ 343 344/** 345 * fpga_program_block() - put a block of data into the programmer's FIFO 346 * @priv: the driver's private data structure 347 * @buf: the data to program 348 * @count: the length of data to program (must be a multiple of 4 bytes) 349 * 350 * Returns 0 on success, -ERRNO otherwise 351 */ 352static int fpga_program_block(struct fpga_dev *priv, void *buf, size_t count) 353{ 354 u32 *data = buf; 355 int size = fpga_fifo_size(priv->regs); 356 int i, len; 357 unsigned long timeout; 358 359 /* enforce correct data length for the FIFO */ 360 BUG_ON(count % 4 != 0); 361 362 while (count > 0) { 363 364 /* Get the size of the block to write (maximum is FIFO_SIZE) */ 365 len = min_t(size_t, count, size); 366 timeout = jiffies + HZ / 4; 367 368 /* Write the block */ 369 for (i = 0; i < len / 4; i++) 370 fpga_fifo_write(priv->regs, data[i]); 371 372 /* Update the amounts left */ 373 count -= len; 374 data += len / 4; 375 376 /* Wait for the fifo to empty */ 377 while (true) { 378 379 if (fpga_fifo_empty(priv->regs)) { 380 break; 381 } else { 382 dev_dbg(priv->dev, "Fifo not empty\n"); 383 cpu_relax(); 384 } 385 386 if (fpga_config_error(priv->regs)) { 387 dev_err(priv->dev, "Error detected\n"); 388 return -EIO; 389 } 390 391 if (time_after(jiffies, timeout)) { 392 dev_err(priv->dev, "Fifo drain timeout\n"); 393 return -ETIMEDOUT; 394 } 395 396 usleep_range(5000, 10000); 397 } 398 } 399 400 return 0; 401} 402 403/** 404 * fpga_program_cpu() - program the DATA-FPGA's using the CPU 405 * @priv: the driver's private data structure 406 * 407 * This is useful when the DMA programming method fails. It is possible to 408 * wedge the Freescale DMA controller such that the DMA programming method 409 * always fails. This method has always succeeded. 410 * 411 * Returns 0 on success, -ERRNO otherwise 412 */ 413static noinline int fpga_program_cpu(struct fpga_dev *priv) 414{ 415 int ret; 416 417 /* Disable the programmer */ 418 fpga_programmer_disable(priv); 419 420 /* Set the total byte count */ 421 fpga_set_byte_count(priv->regs, priv->bytes); 422 dev_dbg(priv->dev, "total byte count %u bytes\n", priv->bytes); 423 424 /* Enable the controller for programming */ 425 fpga_programmer_enable(priv, false); 426 dev_dbg(priv->dev, "enabled the controller\n"); 427 428 /* Write each chunk of the FPGA bitfile to FPGA programmer */ 429 ret = fpga_program_block(priv, priv->vb.vaddr, priv->bytes); 430 if (ret) 431 goto out_disable_controller; 432 433 /* Wait for the interrupt handler to signal that programming finished */ 434 ret = wait_for_completion_timeout(&priv->completion, 2 * HZ); 435 if (!ret) { 436 dev_err(priv->dev, "Timed out waiting for completion\n"); 437 ret = -ETIMEDOUT; 438 goto out_disable_controller; 439 } 440 441 /* Retrieve the status from the interrupt handler */ 442 ret = priv->status; 443 444out_disable_controller: 445 fpga_programmer_disable(priv); 446 return ret; 447} 448 449#define FIFO_DMA_ADDRESS 0xf0003000 450#define FIFO_MAX_LEN 4096 451 452/** 453 * fpga_program_dma() - program the DATA-FPGA's using the DMA engine 454 * @priv: the driver's private data structure 455 * 456 * Program the DATA-FPGA's using the Freescale DMA engine. This requires that 457 * the engine is programmed such that the hardware DMA request lines can 458 * control the entire DMA transaction. The system controller FPGA then 459 * completely offloads the programming from the CPU. 460 * 461 * Returns 0 on success, -ERRNO otherwise 462 */ 463static noinline int fpga_program_dma(struct fpga_dev *priv) 464{ 465 struct videobuf_dmabuf *vb = &priv->vb; 466 struct dma_chan *chan = priv->chan; 467 struct dma_async_tx_descriptor *tx; 468 size_t num_pages, len, avail = 0; 469 struct dma_slave_config config; 470 struct scatterlist *sg; 471 struct sg_table table; 472 dma_cookie_t cookie; 473 int ret, i; 474 475 /* Disable the programmer */ 476 fpga_programmer_disable(priv); 477 478 /* Allocate a scatterlist for the DMA destination */ 479 num_pages = DIV_ROUND_UP(priv->bytes, FIFO_MAX_LEN); 480 ret = sg_alloc_table(&table, num_pages, GFP_KERNEL); 481 if (ret) { 482 dev_err(priv->dev, "Unable to allocate dst scatterlist\n"); 483 ret = -ENOMEM; 484 goto out_return; 485 } 486 487 /* 488 * This is an ugly hack 489 * 490 * We fill in a scatterlist as if it were mapped for DMA. This is 491 * necessary because there exists no better structure for this 492 * inside the kernel code. 493 * 494 * As an added bonus, we can use the DMAEngine API for all of this, 495 * rather than inventing another extremely similar API. 496 */ 497 avail = priv->bytes; 498 for_each_sg(table.sgl, sg, num_pages, i) { 499 len = min_t(size_t, avail, FIFO_MAX_LEN); 500 sg_dma_address(sg) = FIFO_DMA_ADDRESS; 501 sg_dma_len(sg) = len; 502 503 avail -= len; 504 } 505 506 /* Map the buffer for DMA */ 507 ret = videobuf_dma_map(priv->dev, &priv->vb); 508 if (ret) { 509 dev_err(priv->dev, "Unable to map buffer for DMA\n"); 510 goto out_free_table; 511 } 512 513 /* 514 * Configure the DMA channel to transfer FIFO_SIZE / 2 bytes per 515 * transaction, and then put it under external control 516 */ 517 memset(&config, 0, sizeof(config)); 518 config.direction = DMA_MEM_TO_DEV; 519 config.dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; 520 config.dst_maxburst = fpga_fifo_size(priv->regs) / 2 / 4; 521 ret = chan->device->device_control(chan, DMA_SLAVE_CONFIG, 522 (unsigned long)&config); 523 if (ret) { 524 dev_err(priv->dev, "DMA slave configuration failed\n"); 525 goto out_dma_unmap; 526 } 527 528 ret = chan->device->device_control(chan, FSLDMA_EXTERNAL_START, 1); 529 if (ret) { 530 dev_err(priv->dev, "DMA external control setup failed\n"); 531 goto out_dma_unmap; 532 } 533 534 /* setup and submit the DMA transaction */ 535 tx = chan->device->device_prep_dma_sg(chan, 536 table.sgl, num_pages, 537 vb->sglist, vb->sglen, 0); 538 if (!tx) { 539 dev_err(priv->dev, "Unable to prep DMA transaction\n"); 540 ret = -ENOMEM; 541 goto out_dma_unmap; 542 } 543 544 cookie = tx->tx_submit(tx); 545 if (dma_submit_error(cookie)) { 546 dev_err(priv->dev, "Unable to submit DMA transaction\n"); 547 ret = -ENOMEM; 548 goto out_dma_unmap; 549 } 550 551 dma_async_issue_pending(chan); 552 553 /* Set the total byte count */ 554 fpga_set_byte_count(priv->regs, priv->bytes); 555 dev_dbg(priv->dev, "total byte count %u bytes\n", priv->bytes); 556 557 /* Enable the controller for DMA programming */ 558 fpga_programmer_enable(priv, true); 559 dev_dbg(priv->dev, "enabled the controller\n"); 560 561 /* Wait for the interrupt handler to signal that programming finished */ 562 ret = wait_for_completion_timeout(&priv->completion, 2 * HZ); 563 if (!ret) { 564 dev_err(priv->dev, "Timed out waiting for completion\n"); 565 ret = -ETIMEDOUT; 566 goto out_disable_controller; 567 } 568 569 /* Retrieve the status from the interrupt handler */ 570 ret = priv->status; 571 572out_disable_controller: 573 fpga_programmer_disable(priv); 574out_dma_unmap: 575 videobuf_dma_unmap(priv->dev, vb); 576out_free_table: 577 sg_free_table(&table); 578out_return: 579 return ret; 580} 581 582/* 583 * Interrupt Handling 584 */ 585 586static irqreturn_t fpga_irq(int irq, void *dev_id) 587{ 588 struct fpga_dev *priv = dev_id; 589 590 /* Save the status */ 591 priv->status = fpga_config_error(priv->regs) ? -EIO : 0; 592 dev_dbg(priv->dev, "INTERRUPT status %d\n", priv->status); 593 fpga_dump_registers(priv); 594 595 /* Disabling the programmer clears the interrupt */ 596 fpga_programmer_disable(priv); 597 598 /* Notify any waiters */ 599 complete(&priv->completion); 600 601 return IRQ_HANDLED; 602} 603 604/* 605 * SYSFS Helpers 606 */ 607 608/** 609 * fpga_do_stop() - deconfigure (reset) the DATA-FPGA's 610 * @priv: the driver's private data structure 611 * 612 * LOCKING: must hold priv->lock 613 */ 614static int fpga_do_stop(struct fpga_dev *priv) 615{ 616 u32 val; 617 618 /* Set the led to unprogrammed */ 619 ledtrig_fpga_programmed(false); 620 621 /* Pulse the config line to reset the FPGA's */ 622 val = CFG_CTL_ENABLE | CFG_CTL_RESET; 623 iowrite32be(val, priv->regs + FPGA_CONFIG_CONTROL); 624 iowrite32be(0x0, priv->regs + FPGA_CONFIG_CONTROL); 625 626 return 0; 627} 628 629static noinline int fpga_do_program(struct fpga_dev *priv) 630{ 631 int ret; 632 633 if (priv->bytes != priv->fw_size) { 634 dev_err(priv->dev, "Incorrect bitfile size: got %zu bytes, " 635 "should be %zu bytes\n", 636 priv->bytes, priv->fw_size); 637 return -EINVAL; 638 } 639 640 if (!fpga_power_enabled(priv)) { 641 dev_err(priv->dev, "Power not enabled\n"); 642 return -EINVAL; 643 } 644 645 if (!fpga_power_good(priv)) { 646 dev_err(priv->dev, "Power not good\n"); 647 return -EINVAL; 648 } 649 650 /* Set the LED to unprogrammed */ 651 ledtrig_fpga_programmed(false); 652 653 /* Try to program the FPGA's using DMA */ 654 ret = fpga_program_dma(priv); 655 656 /* If DMA failed or doesn't exist, try with CPU */ 657 if (ret) { 658 dev_warn(priv->dev, "Falling back to CPU programming\n"); 659 ret = fpga_program_cpu(priv); 660 } 661 662 if (ret) { 663 dev_err(priv->dev, "Unable to program FPGA's\n"); 664 return ret; 665 } 666 667 /* Drop the firmware bitfile from memory */ 668 fpga_drop_firmware_data(priv); 669 670 dev_dbg(priv->dev, "FPGA programming successful\n"); 671 ledtrig_fpga_programmed(true); 672 673 return 0; 674} 675 676/* 677 * File Operations 678 */ 679 680static int fpga_open(struct inode *inode, struct file *filp) 681{ 682 /* 683 * The miscdevice layer puts our struct miscdevice into the 684 * filp->private_data field. We use this to find our private 685 * data and then overwrite it with our own private structure. 686 */ 687 struct fpga_dev *priv = container_of(filp->private_data, 688 struct fpga_dev, miscdev); 689 unsigned int nr_pages; 690 int ret; 691 692 /* We only allow one process at a time */ 693 ret = mutex_lock_interruptible(&priv->lock); 694 if (ret) 695 return ret; 696 697 filp->private_data = priv; 698 kref_get(&priv->ref); 699 700 /* Truncation: drop any existing data */ 701 if (filp->f_flags & O_TRUNC) 702 priv->bytes = 0; 703 704 /* Check if we have already allocated a buffer */ 705 if (priv->vb_allocated) 706 return 0; 707 708 /* Allocate a buffer to hold enough data for the bitfile */ 709 nr_pages = DIV_ROUND_UP(priv->fw_size, PAGE_SIZE); 710 ret = videobuf_dma_init_kernel(&priv->vb, DMA_TO_DEVICE, nr_pages); 711 if (ret) { 712 dev_err(priv->dev, "unable to allocate data buffer\n"); 713 mutex_unlock(&priv->lock); 714 kref_put(&priv->ref, fpga_dev_remove); 715 return ret; 716 } 717 718 priv->vb_allocated = true; 719 return 0; 720} 721 722static int fpga_release(struct inode *inode, struct file *filp) 723{ 724 struct fpga_dev *priv = filp->private_data; 725 726 mutex_unlock(&priv->lock); 727 kref_put(&priv->ref, fpga_dev_remove); 728 return 0; 729} 730 731static ssize_t fpga_write(struct file *filp, const char __user *buf, 732 size_t count, loff_t *f_pos) 733{ 734 struct fpga_dev *priv = filp->private_data; 735 736 /* FPGA bitfiles have an exact size: disallow anything else */ 737 if (priv->bytes >= priv->fw_size) 738 return -ENOSPC; 739 740 count = min_t(size_t, priv->fw_size - priv->bytes, count); 741 if (copy_from_user(priv->vb.vaddr + priv->bytes, buf, count)) 742 return -EFAULT; 743 744 priv->bytes += count; 745 return count; 746} 747 748static ssize_t fpga_read(struct file *filp, char __user *buf, size_t count, 749 loff_t *f_pos) 750{ 751 struct fpga_dev *priv = filp->private_data; 752 753 count = min_t(size_t, priv->bytes - *f_pos, count); 754 if (copy_to_user(buf, priv->vb.vaddr + *f_pos, count)) 755 return -EFAULT; 756 757 *f_pos += count; 758 return count; 759} 760 761static loff_t fpga_llseek(struct file *filp, loff_t offset, int origin) 762{ 763 struct fpga_dev *priv = filp->private_data; 764 loff_t newpos; 765 766 /* only read-only opens are allowed to seek */ 767 if ((filp->f_flags & O_ACCMODE) != O_RDONLY) 768 return -EINVAL; 769 770 switch (origin) { 771 case SEEK_SET: /* seek relative to the beginning of the file */ 772 newpos = offset; 773 break; 774 case SEEK_CUR: /* seek relative to current position in the file */ 775 newpos = filp->f_pos + offset; 776 break; 777 case SEEK_END: /* seek relative to the end of the file */ 778 newpos = priv->fw_size - offset; 779 break; 780 default: 781 return -EINVAL; 782 } 783 784 /* check for sanity */ 785 if (newpos > priv->fw_size) 786 return -EINVAL; 787 788 filp->f_pos = newpos; 789 return newpos; 790} 791 792static const struct file_operations fpga_fops = { 793 .open = fpga_open, 794 .release = fpga_release, 795 .write = fpga_write, 796 .read = fpga_read, 797 .llseek = fpga_llseek, 798}; 799 800/* 801 * Device Attributes 802 */ 803 804static ssize_t pfail_show(struct device *dev, struct device_attribute *attr, 805 char *buf) 806{ 807 struct fpga_dev *priv = dev_get_drvdata(dev); 808 u8 val; 809 810 val = ioread8(priv->regs + CTL_PWR_FAIL); 811 return snprintf(buf, PAGE_SIZE, "0x%.2x\n", val); 812} 813 814static ssize_t pgood_show(struct device *dev, struct device_attribute *attr, 815 char *buf) 816{ 817 struct fpga_dev *priv = dev_get_drvdata(dev); 818 return snprintf(buf, PAGE_SIZE, "%d\n", fpga_power_good(priv)); 819} 820 821static ssize_t penable_show(struct device *dev, struct device_attribute *attr, 822 char *buf) 823{ 824 struct fpga_dev *priv = dev_get_drvdata(dev); 825 return snprintf(buf, PAGE_SIZE, "%d\n", fpga_power_enabled(priv)); 826} 827 828static ssize_t penable_store(struct device *dev, struct device_attribute *attr, 829 const char *buf, size_t count) 830{ 831 struct fpga_dev *priv = dev_get_drvdata(dev); 832 unsigned long val; 833 int ret; 834 835 ret = kstrtoul(buf, 0, &val); 836 if (ret) 837 return ret; 838 839 if (val) { 840 ret = fpga_enable_power_supplies(priv); 841 if (ret) 842 return ret; 843 } else { 844 fpga_do_stop(priv); 845 fpga_disable_power_supplies(priv); 846 } 847 848 return count; 849} 850 851static ssize_t program_show(struct device *dev, struct device_attribute *attr, 852 char *buf) 853{ 854 struct fpga_dev *priv = dev_get_drvdata(dev); 855 return snprintf(buf, PAGE_SIZE, "%d\n", fpga_running(priv)); 856} 857 858static ssize_t program_store(struct device *dev, struct device_attribute *attr, 859 const char *buf, size_t count) 860{ 861 struct fpga_dev *priv = dev_get_drvdata(dev); 862 unsigned long val; 863 int ret; 864 865 ret = kstrtoul(buf, 0, &val); 866 if (ret) 867 return ret; 868 869 /* We can't have an image writer and be programming simultaneously */ 870 if (mutex_lock_interruptible(&priv->lock)) 871 return -ERESTARTSYS; 872 873 /* Program or Reset the FPGA's */ 874 ret = val ? fpga_do_program(priv) : fpga_do_stop(priv); 875 if (ret) 876 goto out_unlock; 877 878 /* Success */ 879 ret = count; 880 881out_unlock: 882 mutex_unlock(&priv->lock); 883 return ret; 884} 885 886static DEVICE_ATTR(power_fail, S_IRUGO, pfail_show, NULL); 887static DEVICE_ATTR(power_good, S_IRUGO, pgood_show, NULL); 888static DEVICE_ATTR(power_enable, S_IRUGO | S_IWUSR, 889 penable_show, penable_store); 890 891static DEVICE_ATTR(program, S_IRUGO | S_IWUSR, 892 program_show, program_store); 893 894static struct attribute *fpga_attributes[] = { 895 &dev_attr_power_fail.attr, 896 &dev_attr_power_good.attr, 897 &dev_attr_power_enable.attr, 898 &dev_attr_program.attr, 899 NULL, 900}; 901 902static const struct attribute_group fpga_attr_group = { 903 .attrs = fpga_attributes, 904}; 905 906/* 907 * OpenFirmware Device Subsystem 908 */ 909 910#define SYS_REG_VERSION 0x00 911#define SYS_REG_GEOGRAPHIC 0x10 912 913static bool dma_filter(struct dma_chan *chan, void *data) 914{ 915 /* 916 * DMA Channel #0 is the only acceptable device 917 * 918 * This probably won't survive an unload/load cycle of the Freescale 919 * DMAEngine driver, but that won't be a problem 920 */ 921 return chan->chan_id == 0 && chan->device->dev_id == 0; 922} 923 924static int fpga_of_remove(struct platform_device *op) 925{ 926 struct fpga_dev *priv = platform_get_drvdata(op); 927 struct device *this_device = priv->miscdev.this_device; 928 929 sysfs_remove_group(&this_device->kobj, &fpga_attr_group); 930 misc_deregister(&priv->miscdev); 931 932 free_irq(priv->irq, priv); 933 irq_dispose_mapping(priv->irq); 934 935 /* make sure the power supplies are off */ 936 fpga_disable_power_supplies(priv); 937 938 /* unmap registers */ 939 iounmap(priv->immr); 940 iounmap(priv->regs); 941 942 dma_release_channel(priv->chan); 943 944 /* drop our reference to the private data structure */ 945 kref_put(&priv->ref, fpga_dev_remove); 946 return 0; 947} 948 949/* CTL-CPLD Version Register */ 950#define CTL_CPLD_VERSION 0x2000 951 952static int fpga_of_probe(struct platform_device *op) 953{ 954 struct device_node *of_node = op->dev.of_node; 955 struct device *this_device; 956 struct fpga_dev *priv; 957 dma_cap_mask_t mask; 958 u32 ver; 959 int ret; 960 961 /* Allocate private data */ 962 priv = kzalloc(sizeof(*priv), GFP_KERNEL); 963 if (!priv) { 964 dev_err(&op->dev, "Unable to allocate private data\n"); 965 ret = -ENOMEM; 966 goto out_return; 967 } 968 969 /* Setup the miscdevice */ 970 priv->miscdev.minor = MISC_DYNAMIC_MINOR; 971 priv->miscdev.name = drv_name; 972 priv->miscdev.fops = &fpga_fops; 973 974 kref_init(&priv->ref); 975 976 platform_set_drvdata(op, priv); 977 priv->dev = &op->dev; 978 mutex_init(&priv->lock); 979 init_completion(&priv->completion); 980 videobuf_dma_init(&priv->vb); 981 982 dev_set_drvdata(priv->dev, priv); 983 dma_cap_zero(mask); 984 dma_cap_set(DMA_MEMCPY, mask); 985 dma_cap_set(DMA_SLAVE, mask); 986 dma_cap_set(DMA_SG, mask); 987 988 /* Get control of DMA channel #0 */ 989 priv->chan = dma_request_channel(mask, dma_filter, NULL); 990 if (!priv->chan) { 991 dev_err(&op->dev, "Unable to acquire DMA channel #0\n"); 992 ret = -ENODEV; 993 goto out_free_priv; 994 } 995 996 /* Remap the registers for use */ 997 priv->regs = of_iomap(of_node, 0); 998 if (!priv->regs) { 999 dev_err(&op->dev, "Unable to ioremap registers\n"); 1000 ret = -ENOMEM; 1001 goto out_dma_release_channel; 1002 } 1003 1004 /* Remap the IMMR for use */ 1005 priv->immr = ioremap(get_immrbase(), 0x100000); 1006 if (!priv->immr) { 1007 dev_err(&op->dev, "Unable to ioremap IMMR\n"); 1008 ret = -ENOMEM; 1009 goto out_unmap_regs; 1010 } 1011 1012 /* 1013 * Check that external DMA is configured 1014 * 1015 * U-Boot does this for us, but we should check it and bail out if 1016 * there is a problem. Failing to have this register setup correctly 1017 * will cause the DMA controller to transfer a single cacheline 1018 * worth of data, then wedge itself. 1019 */ 1020 if ((ioread32be(priv->immr + 0x114) & 0xE00) != 0xE00) { 1021 dev_err(&op->dev, "External DMA control not configured\n"); 1022 ret = -ENODEV; 1023 goto out_unmap_immr; 1024 } 1025 1026 /* 1027 * Check the CTL-CPLD version 1028 * 1029 * This driver uses the CTL-CPLD DATA-FPGA power sequencer, and we 1030 * don't want to run on any version of the CTL-CPLD that does not use 1031 * a compatible register layout. 1032 * 1033 * v2: changed register layout, added power sequencer 1034 * v3: added glitch filter on the i2c overcurrent/overtemp outputs 1035 */ 1036 ver = ioread8(priv->regs + CTL_CPLD_VERSION); 1037 if (ver != 0x02 && ver != 0x03) { 1038 dev_err(&op->dev, "CTL-CPLD is not version 0x02 or 0x03!\n"); 1039 ret = -ENODEV; 1040 goto out_unmap_immr; 1041 } 1042 1043 /* Set the exact size that the firmware image should be */ 1044 ver = ioread32be(priv->regs + SYS_REG_VERSION); 1045 priv->fw_size = (ver & (1 << 18)) ? FW_SIZE_EP2S130 : FW_SIZE_EP2S90; 1046 1047 /* Find the correct IRQ number */ 1048 priv->irq = irq_of_parse_and_map(of_node, 0); 1049 if (priv->irq == NO_IRQ) { 1050 dev_err(&op->dev, "Unable to find IRQ line\n"); 1051 ret = -ENODEV; 1052 goto out_unmap_immr; 1053 } 1054 1055 /* Request the IRQ */ 1056 ret = request_irq(priv->irq, fpga_irq, IRQF_SHARED, drv_name, priv); 1057 if (ret) { 1058 dev_err(&op->dev, "Unable to request IRQ %d\n", priv->irq); 1059 ret = -ENODEV; 1060 goto out_irq_dispose_mapping; 1061 } 1062 1063 /* Reset and stop the FPGA's, just in case */ 1064 fpga_do_stop(priv); 1065 1066 /* Register the miscdevice */ 1067 ret = misc_register(&priv->miscdev); 1068 if (ret) { 1069 dev_err(&op->dev, "Unable to register miscdevice\n"); 1070 goto out_free_irq; 1071 } 1072 1073 /* Create the sysfs files */ 1074 this_device = priv->miscdev.this_device; 1075 dev_set_drvdata(this_device, priv); 1076 ret = sysfs_create_group(&this_device->kobj, &fpga_attr_group); 1077 if (ret) { 1078 dev_err(&op->dev, "Unable to create sysfs files\n"); 1079 goto out_misc_deregister; 1080 } 1081 1082 dev_info(priv->dev, "CARMA FPGA Programmer: %s rev%s with %s FPGAs\n", 1083 (ver & (1 << 17)) ? "Correlator" : "Digitizer", 1084 (ver & (1 << 16)) ? "B" : "A", 1085 (ver & (1 << 18)) ? "EP2S130" : "EP2S90"); 1086 1087 return 0; 1088 1089out_misc_deregister: 1090 misc_deregister(&priv->miscdev); 1091out_free_irq: 1092 free_irq(priv->irq, priv); 1093out_irq_dispose_mapping: 1094 irq_dispose_mapping(priv->irq); 1095out_unmap_immr: 1096 iounmap(priv->immr); 1097out_unmap_regs: 1098 iounmap(priv->regs); 1099out_dma_release_channel: 1100 dma_release_channel(priv->chan); 1101out_free_priv: 1102 kref_put(&priv->ref, fpga_dev_remove); 1103out_return: 1104 return ret; 1105} 1106 1107static struct of_device_id fpga_of_match[] = { 1108 { .compatible = "carma,fpga-programmer", }, 1109 {}, 1110}; 1111 1112static struct platform_driver fpga_of_driver = { 1113 .probe = fpga_of_probe, 1114 .remove = fpga_of_remove, 1115 .driver = { 1116 .name = drv_name, 1117 .of_match_table = fpga_of_match, 1118 .owner = THIS_MODULE, 1119 }, 1120}; 1121 1122/* 1123 * Module Init / Exit 1124 */ 1125 1126static int __init fpga_init(void) 1127{ 1128 led_trigger_register_simple("fpga", &ledtrig_fpga); 1129 return platform_driver_register(&fpga_of_driver); 1130} 1131 1132static void __exit fpga_exit(void) 1133{ 1134 platform_driver_unregister(&fpga_of_driver); 1135 led_trigger_unregister_simple(ledtrig_fpga); 1136} 1137 1138MODULE_AUTHOR("Ira W. Snyder <iws@ovro.caltech.edu>"); 1139MODULE_DESCRIPTION("CARMA Board DATA-FPGA Programmer"); 1140MODULE_LICENSE("GPL"); 1141 1142module_init(fpga_init); 1143module_exit(fpga_exit);