#include <linux/autoconf.h>
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/ioport.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/string.h>
#include <linux/init.h>
#include <asm/arch/hwregs/reg_map.h>
#include <asm/arch/hwregs/reg_rdwr.h>
#include <asm/arch/hwregs/gio_defs.h>
#include <asm/arch/hwregs/intr_vect_defs.h>
#include <asm/arch/hwregs/pinmux_defs.h>
#include <asm/io.h>
#include <asm/system.h>
#include <asm/irq.h>
#include <asm/elphel/driver_numbers.h>
#include <asm/elphel/fpgaconfa.h>
#include <asm/delay.h>
#include <asm/uaccess.h>
#include "fpgactrl.h"
#include "x3x3.h"
Include dependency graph for fpgajtag353.c:
Go to the source code of this file.
Data Structures | |
struct | JTAG_channel_t |
Defines | |
#define | D(x) |
#define | FPGAJTAG_TDO_BIT 0 |
#define | FPGAJTAG_TDI_BIT 1 |
#define | FPGAJTAG_TMS_BIT 2 |
#define | FPGAJTAG_TCK_BIT 3 |
#define | FPGAJTAG_DONE_BIT 5 |
#define | FPGAJTAG_RSTBTN_BIT 6 |
#define | FPGAJTAG_PGM_BIT 7 |
#define | XC3S1000_BITSIZE 3223488 |
#define | XC3S1200E_BITSIZE 3841189 |
#define | XC3S1200E_BOUNDARY_SIZE 772 |
#define | FJTAG_BUF_SIZE 0x77000 |
#define | FJTAG_MAX_HEAD 0x1000 |
#define | FJTAG_RAW_WSIZE 0x40000 |
#define | FJTAG_RAW_RSIZE 0x30000 |
#define | FJTAG_IDSIZE 0x40 |
#define | FPGA_JTAG_DRIVER_NAME "Elphel (R) model 353 FPGA (Xilinx (R) XC3S1200E) configuration driver" |
#define | FPGA_JTAG_MAXMINOR 10 |
#define | JTAG_RAW 0 |
#define | JTAG_MAIN_FPGA 1 |
#define | JTAG_SENSOR_FPGA 2 |
#define | JTAG_AUX_FPGA 3 |
#define | JTAG_NCHANNELS 4 |
#define | JTAG_MODE_CLOSED 0 |
#define | JTAG_MODE_RDID 1 |
#define | JTAG_MODE_PGM 2 |
#define | JTAG_MODE_BOUNDARY 3 |
#define | JTAG_MODE_SAMPLE 4 |
#define | JTAG_MODE_EXTEST 5 |
#define | JTAG_MODE_RAW 6 |
#define | PC_DOUT_INITIAL 0 |
#define | JTAG_RAW_SEND 0x10 |
#define | JTAG_RAW_SETCHN 0x20 |
#define | JTAG_RAW_DEACT 0x22 |
#define | JTAG_RAW_ACT 0x23 |
#define | JTAG_RAW_PGMOFF 0x24 |
#define | JTAG_RAW_PGMON 0x25 |
#define | JTAG_RAW_WAIT 0x80 |
Functions | |
static int | fpga_jtag_open (struct inode *inode, struct file *filp) |
static int | fpga_jtag_release (struct inode *inode, struct file *filp) |
static ssize_t | fpga_jtag_write (struct file *file, const char *buf, size_t count, loff_t *off) |
static loff_t | fpga_jtag_lseek (struct file *file, loff_t offset, int orig) |
static ssize_t | fpga_jtag_read (struct file *file, char *buf, size_t count, loff_t *off) |
static int __init | fpga_jtag_init (void) |
loff_t | fjtag_bitsize (int minor) |
loff_t | fjtag_bytesize (int minor) |
int | JTAG_channel (int minor) |
void | initPortC (void) |
void | set_pgm_mode (int chn, int en) |
void | set_pgm (int chn, int pgmon) |
int | read_done (int chn) |
int | jtag_send (int chn, int tms, int len, int d) |
int | jtag_write_bits (int chn, unsigned char *buf, int len, int check, int last, int prev[2]) |
int | JTAG_configure (int chn, unsigned char *buf, int len) |
int | JTAG_readID (int chn, unsigned char *buf) |
int | JTAG_openChannel (int chn) |
int | JTAG_resetChannel (int chn) |
int | JTAG_CAPTURE (int chn, unsigned char *buf, int len) |
int | JTAG_EXTEST (int chn, unsigned char *buf, int len) |
void | JTAG_push_raw (int b) |
int | JTAG_process_raw (void) |
int | JTAG_whatopen (void) |
module_init (fpga_jtag_init) | |
MODULE_LICENSE ("GPL") | |
MODULE_AUTHOR ("Andrey Filippov <andrey@elphel.com>.") | |
MODULE_DESCRIPTION (FPGA_JTAG_DRIVER_NAME) | |
Variables | |
static unsigned char | bitstream_data [FJTAG_BUF_SIZE] |
static unsigned char * | raw_fifo_w = &bitstream_data[0] |
static unsigned char * | raw_fifo_r = &bitstream_data[FJTAG_RAW_WSIZE] |
static struct JTAG_channel_t | JTAG_channels [JTAG_NCHANNELS] |
static int | data_modified = 0 |
static reg_gio_rw_pc_dout | pc_dout |
static const char | fpga_jtag_name [] = "fpga_jtag_loader" |
static int | minors [FPGA_JTAG_MAXMINOR+1] |
static struct file_operations | fpga_jtag_fops |
static int | raw_fifo_w_wp |
static int | raw_fifo_w_rp |
static int | raw_fifo_r_wp |
static int | raw_fifo_r_rp |
static int | raw_chn |
#define D | ( | x | ) |
*************************************************************************** ! FILE NAME : fpgajtag353.c ! DESCRIPTION: TBD ! Copyright 2002-2007 (C) Elphel, Inc. ! -----------------------------------------------------------------------------** ! ! This program is free software: you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation, either version 3 of the License, or ! (at your option) any later version. ! ! This program is distributed in the hope that it will be useful, ! but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. ! ! You should have received a copy of the GNU General Public License ! along with this program. If not, see <http://www.gnu.org/licenses/>. ! -----------------------------------------------------------------------------** !
TODO: replace static buffer (what a waste!) I suspect "somebody" is is playing with portA during JTAG configuration. To test that I'll use 256K static buffer, copy all the bitstream there, disable interrupts and do the programming. No debug with printk ...
Definition at line 119 of file fpgajtag353.c.
#define FJTAG_BUF_SIZE 0x77000 |
Definition at line 147 of file fpgajtag353.c.
#define FJTAG_IDSIZE 0x40 |
Definition at line 151 of file fpgajtag353.c.
#define FJTAG_MAX_HEAD 0x1000 |
Definition at line 148 of file fpgajtag353.c.
#define FJTAG_RAW_RSIZE 0x30000 |
Definition at line 150 of file fpgajtag353.c.
#define FJTAG_RAW_WSIZE 0x40000 |
Definition at line 149 of file fpgajtag353.c.
#define FPGA_JTAG_DRIVER_NAME "Elphel (R) model 353 FPGA (Xilinx (R) XC3S1200E) configuration driver" |
Definition at line 155 of file fpgajtag353.c.
#define FPGA_JTAG_MAXMINOR 10 |
Definition at line 156 of file fpgajtag353.c.
#define FPGAJTAG_DONE_BIT 5 |
Definition at line 137 of file fpgajtag353.c.
#define FPGAJTAG_PGM_BIT 7 |
Definition at line 139 of file fpgajtag353.c.
#define FPGAJTAG_RSTBTN_BIT 6 |
Definition at line 138 of file fpgajtag353.c.
#define FPGAJTAG_TCK_BIT 3 |
Definition at line 136 of file fpgajtag353.c.
#define FPGAJTAG_TDI_BIT 1 |
Definition at line 134 of file fpgajtag353.c.
#define FPGAJTAG_TDO_BIT 0 |
Definition at line 133 of file fpgajtag353.c.
#define FPGAJTAG_TMS_BIT 2 |
Definition at line 135 of file fpgajtag353.c.
#define JTAG_AUX_FPGA 3 |
Definition at line 162 of file fpgajtag353.c.
#define JTAG_MAIN_FPGA 1 |
Definition at line 160 of file fpgajtag353.c.
#define JTAG_MODE_BOUNDARY 3 |
Definition at line 168 of file fpgajtag353.c.
#define JTAG_MODE_CLOSED 0 |
Definition at line 165 of file fpgajtag353.c.
#define JTAG_MODE_EXTEST 5 |
Definition at line 170 of file fpgajtag353.c.
#define JTAG_MODE_PGM 2 |
Definition at line 167 of file fpgajtag353.c.
#define JTAG_MODE_RAW 6 |
Definition at line 171 of file fpgajtag353.c.
#define JTAG_MODE_RDID 1 |
Definition at line 166 of file fpgajtag353.c.
#define JTAG_MODE_SAMPLE 4 |
Definition at line 169 of file fpgajtag353.c.
#define JTAG_NCHANNELS 4 |
Definition at line 163 of file fpgajtag353.c.
#define JTAG_RAW 0 |
Definition at line 159 of file fpgajtag353.c.
#define JTAG_RAW_ACT 0x23 |
Definition at line 290 of file fpgajtag353.c.
#define JTAG_RAW_DEACT 0x22 |
Definition at line 289 of file fpgajtag353.c.
#define JTAG_RAW_PGMOFF 0x24 |
Definition at line 291 of file fpgajtag353.c.
#define JTAG_RAW_PGMON 0x25 |
Definition at line 292 of file fpgajtag353.c.
#define JTAG_RAW_SEND 0x10 |
Definition at line 287 of file fpgajtag353.c.
#define JTAG_RAW_SETCHN 0x20 |
Definition at line 288 of file fpgajtag353.c.
#define JTAG_RAW_WAIT 0x80 |
Definition at line 293 of file fpgajtag353.c.
#define JTAG_SENSOR_FPGA 2 |
Definition at line 161 of file fpgajtag353.c.
#define PC_DOUT_INITIAL 0 |
Definition at line 194 of file fpgajtag353.c.
#define XC3S1000_BITSIZE 3223488 |
Definition at line 143 of file fpgajtag353.c.
#define XC3S1200E_BITSIZE 3841189 |
Definition at line 144 of file fpgajtag353.c.
#define XC3S1200E_BOUNDARY_SIZE 772 |
Definition at line 145 of file fpgajtag353.c.
loff_t fjtag_bitsize | ( | int | minor | ) |
loff_t fjtag_bytesize | ( | int | minor | ) |
static int __init fpga_jtag_init | ( | void | ) | [static] |
Definition at line 1169 of file fpgajtag353.c.
References FPGA_JTAG_DRIVER_NAME, fpga_jtag_fops, FPGA_JTAG_MAJOR, FPGA_JTAG_MAXMINOR, fpga_jtag_name, fpga_state, initPortC(), KERN_ERR, minors, and printk.
static loff_t fpga_jtag_lseek | ( | struct file * | file, | |
loff_t | offset, | |||
int | orig | |||
) | [static] |
Definition at line 598 of file fpgajtag353.c.
References D, FJTAG_RAW_RSIZE, JTAG_channel(), JTAG_channels, JTAG_MODE_RDID, JTAG_RAW, mode, printk, size, JTAG_channel_t::sizer, and JTAG_channel_t::sizew.
static int fpga_jtag_open | ( | struct inode * | inode, | |
struct file * | filp | |||
) | [static] |
Definition at line 351 of file fpgajtag353.c.
References JTAG_channel_t::bitsr, bitstream_data, JTAG_channel_t::bitsw, D, JTAG_channel_t::dbuf, FJTAG_BUF_SIZE, FJTAG_IDSIZE, FJTAG_RAW_RSIZE, FJTAG_RAW_WSIZE, FPGA_AJTAG_BOUNDARY_MINOR, FPGA_AJTAG_MINOR, FPGA_JTAG_BOUNDARY_MINOR, FPGA_JTAG_MINOR, FPGA_JTAG_RESET_MINOR, FPGA_SJTAG_BOUNDARY_MINOR, FPGA_SJTAG_MINOR, fpga_state, FPGA_STATE_LOADED, FPGA_STATE_SDRAM_INIT, JTAG_channel(), JTAG_channels, JTAG_MODE_BOUNDARY, JTAG_MODE_CLOSED, JTAG_MODE_PGM, JTAG_MODE_RAW, JTAG_NCHANNELS, JTAG_openChannel(), JTAG_whatopen(), minors, JTAG_channel_t::mode, mode, printk, JTAG_channel_t::rp, JTAG_channel_t::sizer, JTAG_channel_t::sizew, JTAG_channel_t::wdirty, JTAG_channel_t::wp, XC3S1200E_BITSIZE, and XC3S1200E_BOUNDARY_SIZE.
ssize_t fpga_jtag_read | ( | struct file * | file, | |
char * | buf, | |||
size_t | count, | |||
loff_t * | off | |||
) | [static] |
Definition at line 529 of file fpgajtag353.c.
References D, FPGA_AJTAG_BOUNDARY_MINOR, FPGA_AJTAG_MINOR, FPGA_JTAG_BOUNDARY_MINOR, FPGA_JTAG_MINOR, FPGA_JTAG_RESET_MINOR, FPGA_SJTAG_BOUNDARY_MINOR, FPGA_SJTAG_MINOR, JTAG_CAPTURE(), JTAG_channel(), JTAG_channels, JTAG_EXTEST(), JTAG_MODE_BOUNDARY, JTAG_MODE_EXTEST, JTAG_MODE_RDID, JTAG_MODE_SAMPLE, JTAG_readID(), mode, JTAG_channel_t::mode, printk, raw_fifo_r, raw_fifo_w, JTAG_channel_t::rp, rp, size, JTAG_channel_t::sizer, JTAG_channel_t::wdirty, and wp.
static int fpga_jtag_release | ( | struct inode * | inode, | |
struct file * | filp | |||
) | [static] |
Definition at line 433 of file fpgajtag353.c.
References D, FPGA_AJTAG_BOUNDARY_MINOR, FPGA_AJTAG_MINOR, FPGA_JTAG_BOUNDARY_MINOR, FPGA_JTAG_MINOR, FPGA_JTAG_RESET_MINOR, FPGA_SJTAG_BOUNDARY_MINOR, FPGA_SJTAG_MINOR, fpga_state, FPGA_STATE_INITIALIZED, JTAG_channel(), JTAG_channels, JTAG_configure(), JTAG_EXTEST(), JTAG_MAIN_FPGA, JTAG_MODE_CLOSED, JTAG_resetChannel(), minors, JTAG_channel_t::mode, port_csp0_addr, printk, rp, wp, and X313__RA__MODEL.
static ssize_t fpga_jtag_write | ( | struct file * | file, | |
const char * | buf, | |||
size_t | count, | |||
loff_t * | off | |||
) | [static] |
Definition at line 474 of file fpgajtag353.c.
References D, FPGA_AJTAG_BOUNDARY_MINOR, FPGA_AJTAG_MINOR, FPGA_JTAG_BOUNDARY_MINOR, FPGA_JTAG_MINOR, FPGA_JTAG_RESET_MINOR, FPGA_SJTAG_BOUNDARY_MINOR, FPGA_SJTAG_MINOR, JTAG_channel(), JTAG_channels, JTAG_EXTEST(), JTAG_MODE_EXTEST, JTAG_process_raw(), JTAG_channel_t::mode, printk, raw_fifo_w, size, JTAG_channel_t::sizew, JTAG_channel_t::wdirty, JTAG_channel_t::wp, and wp.
void initPortC | ( | void | ) |
int JTAG_CAPTURE | ( | int | chn, | |
unsigned char * | buf, | |||
int | len | |||
) |
int JTAG_channel | ( | int | minor | ) |
int JTAG_configure | ( | int | chn, | |
unsigned char * | buf, | |||
int | len | |||
) |
int JTAG_EXTEST | ( | int | chn, | |
unsigned char * | buf, | |||
int | len | |||
) |
int JTAG_openChannel | ( | int | chn | ) |
int JTAG_process_raw | ( | void | ) |
void JTAG_push_raw | ( | int | b | ) |
int JTAG_readID | ( | int | chn, | |
unsigned char * | buf | |||
) |
int JTAG_resetChannel | ( | int | chn | ) |
int jtag_send | ( | int | chn, | |
int | tms, | |||
int | len, | |||
int | d | |||
) |
int JTAG_whatopen | ( | void | ) |
int jtag_write_bits | ( | int | chn, | |
unsigned char * | buf, | |||
int | len, | |||
int | check, | |||
int | last, | |||
int | prev[2] | |||
) |
MODULE_AUTHOR | ( | "Andrey Filippov <andrey@elphel.com>." | ) |
MODULE_DESCRIPTION | ( | FPGA_JTAG_DRIVER_NAME | ) |
module_init | ( | fpga_jtag_init | ) |
MODULE_LICENSE | ( | "GPL" | ) |
int read_done | ( | int | chn | ) |
void set_pgm | ( | int | chn, | |
int | pgmon | |||
) |
void set_pgm_mode | ( | int | chn, | |
int | en | |||
) |
unsigned char bitstream_data[FJTAG_BUF_SIZE] [static] |
Definition at line 185 of file fpgajtag353.c.
int data_modified = 0 [static] |
Definition at line 191 of file fpgajtag353.c.
struct file_operations fpga_jtag_fops [static] |
Initial value:
{ owner: THIS_MODULE, open: fpga_jtag_open, release: fpga_jtag_release, llseek: fpga_jtag_lseek, read: fpga_jtag_read, write: fpga_jtag_write }
Definition at line 213 of file fpgajtag353.c.
const char fpga_jtag_name[] = "fpga_jtag_loader" [static] |
Definition at line 203 of file fpgajtag353.c.
struct JTAG_channel_t JTAG_channels[JTAG_NCHANNELS] [static] |
Definition at line 189 of file fpgajtag353.c.
int minors[FPGA_JTAG_MAXMINOR+1] [static] |
Definition at line 204 of file fpgajtag353.c.
reg_gio_rw_pc_dout pc_dout [static] |
Definition at line 193 of file fpgajtag353.c.
int raw_chn [static] |
Definition at line 270 of file fpgajtag353.c.
unsigned char* raw_fifo_r = &bitstream_data[FJTAG_RAW_WSIZE] [static] |
Definition at line 188 of file fpgajtag353.c.
int raw_fifo_r_rp [static] |
Definition at line 269 of file fpgajtag353.c.
int raw_fifo_r_wp [static] |
Definition at line 268 of file fpgajtag353.c.
unsigned char* raw_fifo_w = &bitstream_data[0] [static] |
Definition at line 187 of file fpgajtag353.c.
int raw_fifo_w_rp [static] |
Definition at line 267 of file fpgajtag353.c.
int raw_fifo_w_wp [static] |
Definition at line 266 of file fpgajtag353.c.