|  | /* | 
|  | * (C) Copyright 2001 | 
|  | * Murray Jensen, CSIRO-MIT, <Murray.Jensen@csiro.au> | 
|  | * | 
|  | * See file CREDITS for list of people who contributed to this | 
|  | * project. | 
|  | * | 
|  | * 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 2 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, write to the Free Software | 
|  | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, | 
|  | * MA 02111-1307 USA | 
|  | */ | 
|  |  | 
|  | #ifndef _HYMOD_H_ | 
|  | #define _HYMOD_H_ | 
|  |  | 
|  | #include <linux/config.h> | 
|  | #ifdef CONFIG_8260 | 
|  | #include <asm/iopin_8260.h> | 
|  | #endif | 
|  |  | 
|  | /* | 
|  | * hymod configuration data - passed by boot code via the board information | 
|  | * structure (only U-Boot has support for this at the moment) | 
|  | * | 
|  | * there are three types of data passed up from the boot monitor. the first | 
|  | * (type hymod_eeprom_t) is the eeprom data that was read off both the main | 
|  | * (or mother) board and the mezzanine board (if any). this data defines how | 
|  | * many Xilinx fpgas are on each board, and their types (among other things). | 
|  | * the second type of data (type xlx_mmap_t, one per Xilinx fpga) defines where | 
|  | * in the physical address space the various Xilinx fpga access regions have | 
|  | * been mapped by the boot rom. the third type of data (type xlx_iopins_t, | 
|  | * one per Xilinx fpga) defines which io port pins are connected to the various | 
|  | * signals required to program a Xilinx fpga. | 
|  | * | 
|  | * A ram/flash "bank" refers to memory controlled by the same chip select. | 
|  | * | 
|  | * the eeprom contents are defined as in technical note #2 - basically, | 
|  | * a header, zero or more records in no particular order, and a 32 bit crc | 
|  | * a record is 1 or more type bytes, a length byte and "length" bytes. | 
|  | */ | 
|  |  | 
|  | #define HYMOD_EEPROM_ID		0xAA	/* eeprom id byte */ | 
|  | #define HYMOD_EEPROM_VER	1	/* eeprom contents version (0-127) */ | 
|  | #define HYMOD_EEPROM_SIZE	256	/* number of bytes in the eeprom */ | 
|  |  | 
|  | /* eeprom header */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned char id;		/* eeprom id byte */ | 
|  | unsigned char :1; | 
|  | unsigned char ver:7;		/* eeprom contents version number */ | 
|  | unsigned long len;		/* total # of bytes btw hdr and crc */ | 
|  | } | 
|  | hymod_eehdr_t; | 
|  |  | 
|  | /* maximum number of bytes available for eeprom data records */ | 
|  | #define HYMOD_EEPROM_MAXLEN	(HYMOD_EEPROM_SIZE \ | 
|  | - sizeof (hymod_eehdr_t) \ | 
|  | - sizeof (unsigned long)) | 
|  |  | 
|  | /* eeprom data record */ | 
|  | typedef | 
|  | union { | 
|  | struct { | 
|  | unsigned char topbit:1; | 
|  | unsigned char type:7; | 
|  | unsigned char len; | 
|  | unsigned char data[1];	/* variable length */ | 
|  | } small; | 
|  | struct { | 
|  | unsigned short topbit:1; | 
|  | unsigned short nxtbit:1; | 
|  | unsigned short type:14; | 
|  | unsigned short len; | 
|  | unsigned char data[1];	/* variable length */ | 
|  | } medium; | 
|  | struct { | 
|  | unsigned long topbit:1; | 
|  | unsigned long nxtbit:1; | 
|  | unsigned long type:30; | 
|  | unsigned long len; | 
|  | unsigned char data[1];	/* variable length */ | 
|  | } large; | 
|  | } | 
|  | hymod_eerec_t; | 
|  |  | 
|  | #define HYMOD_EEOFF_MAIN	0x00	/* i2c addr offset for main eeprom */ | 
|  | #define HYMOD_EEOFF_MEZZ	0x04	/* i2c addr offset for mezz eepomr */ | 
|  |  | 
|  | /* eeprom record types */ | 
|  | #define HYMOD_EEREC_SERNO	1	/* serial number */ | 
|  | #define HYMOD_EEREC_DATE	2	/* date */ | 
|  | #define HYMOD_EEREC_BATCH	3	/* batch id */ | 
|  | #define HYMOD_EEREC_TYPE	4	/* board type */ | 
|  | #define HYMOD_EEREC_REV		5	/* revision number */ | 
|  | #define HYMOD_EEREC_SDRAM	6	/* sdram sizes */ | 
|  | #define HYMOD_EEREC_FLASH	7	/* flash sizes */ | 
|  | #define HYMOD_EEREC_ZBT		8	/* zbt ram sizes */ | 
|  | #define HYMOD_EEREC_XLXTYP	9	/* Xilinx fpga types */ | 
|  | #define HYMOD_EEREC_XLXSPD	10	/* Xilinx fpga speeds */ | 
|  | #define HYMOD_EEREC_XLXTMP	11	/* Xilinx fpga temperatures */ | 
|  | #define HYMOD_EEREC_XLXGRD	12	/* Xilinx fpga grades */ | 
|  | #define HYMOD_EEREC_CPUTYP	13	/* Motorola CPU type */ | 
|  | #define HYMOD_EEREC_CPUSPD	14	/* CPU speed */ | 
|  | #define HYMOD_EEREC_BUSSPD	15	/* bus speed */ | 
|  | #define HYMOD_EEREC_CPMSPD	16	/* CPM speed */ | 
|  | #define HYMOD_EEREC_HSTYPE	17	/* high-speed serial chip type */ | 
|  | #define HYMOD_EEREC_HSCHIN	18	/* high-speed serial input channels */ | 
|  | #define HYMOD_EEREC_HSCHOUT	19	/* high-speed serial output channels */ | 
|  |  | 
|  | /* some dimensions */ | 
|  | #define HYMOD_MAX_BATCH		32	/* max no. of bytes in batch id */ | 
|  | #define HYMOD_MAX_SDRAM		4	/* max sdram "banks" on any board */ | 
|  | #define HYMOD_MAX_FLASH		4	/* max flash "banks" on any board */ | 
|  | #define HYMOD_MAX_ZBT		16	/* max ZBT rams on any board */ | 
|  | #define HYMOD_MAX_XLX		4	/* max Xilinx fpgas on any board */ | 
|  |  | 
|  | #define HYMOD_MAX_BYTES		16	/* enough to store any bytes array */ | 
|  |  | 
|  | /* board types */ | 
|  | #define HYMOD_BDTYPE_NONE	0	/* information not present */ | 
|  | #define HYMOD_BDTYPE_IO		1	/* I/O main board */ | 
|  | #define HYMOD_BDTYPE_CLP	2	/* CLP main board */ | 
|  | #define HYMOD_BDTYPE_DSP	3	/* DSP main board */ | 
|  | #define HYMOD_BDTYPE_INPUT	4	/* video input mezzanine board */ | 
|  | #define HYMOD_BDTYPE_ALTINPUT	5	/* video input mezzanine board */ | 
|  | #define HYMOD_BDTYPE_DISPLAY	6	/* video display mezzanine board */ | 
|  | #define HYMOD_BDTYPE_MAX	7	/* first invalid value */ | 
|  |  | 
|  | /* Xilinx fpga types */ | 
|  | #define HYMOD_XTYP_NONE		0	/* information not present */ | 
|  | #define HYMOD_XTYP_XCV300E	1	/* Xilinx Virtex 300 */ | 
|  | #define HYMOD_XTYP_XCV400E	2	/* Xilinx Virtex 400 */ | 
|  | #define HYMOD_XTYP_XCV600E	3	/* Xilinx Virtex 600 */ | 
|  | #define HYMOD_XTYP_MAX		4	/* first invalid value */ | 
|  |  | 
|  | /* Xilinx fpga speeds */ | 
|  | #define HYMOD_XSPD_NONE		0	/* information not present */ | 
|  | #define HYMOD_XSPD_SIX		1 | 
|  | #define HYMOD_XSPD_SEVEN	2 | 
|  | #define HYMOD_XSPD_EIGHT	3 | 
|  | #define HYMOD_XSPD_MAX		4	/* first invalid value */ | 
|  |  | 
|  | /* Xilinx fpga temperatures */ | 
|  | #define HYMOD_XTMP_NONE		0	/* information not present */ | 
|  | #define HYMOD_XTMP_COM		1 | 
|  | #define HYMOD_XTMP_IND		2 | 
|  | #define HYMOD_XTMP_MAX		3	/* first invalid value */ | 
|  |  | 
|  | /* Xilinx fpga grades */ | 
|  | #define HYMOD_XTMP_NONE		0	/* information not present */ | 
|  | #define HYMOD_XTMP_NORMAL	1 | 
|  | #define HYMOD_XTMP_ENGSAMP	2 | 
|  | #define HYMOD_XTMP_MAX		3	/* first invalid value */ | 
|  |  | 
|  | /* CPU types */ | 
|  | #define HYMOD_CPUTYPE_NONE	0	/* information not present */ | 
|  | #define HYMOD_CPUTYPE_MPC8260	1	/* Motorola MPC8260 embedded powerpc */ | 
|  | #define HYMOD_CPUTYPE_MAX	2	/* first invalid value */ | 
|  |  | 
|  | /* CPU/BUS/CPM clock speeds */ | 
|  | #define HYMOD_CLKSPD_NONE	0	/* information not present */ | 
|  | #define HYMOD_CLKSPD_33MHZ	1 | 
|  | #define HYMOD_CLKSPD_66MHZ	2 | 
|  | #define HYMOD_CLKSPD_100MHZ	3 | 
|  | #define HYMOD_CLKSPD_133MHZ	4 | 
|  | #define HYMOD_CLKSPD_166MHZ	5 | 
|  | #define HYMOD_CLKSPD_200MHZ	6 | 
|  | #define HYMOD_CLKSPD_MAX	7	/* first invalid value */ | 
|  |  | 
|  | /* high speed serial chip types */ | 
|  | #define HYMOD_HSSTYPE_NONE	0	/* information not present */ | 
|  | #define HYMOD_HSSTYPE_AMCC52064	1 | 
|  | #define HYMOD_HSSTYPE_MAX	2	/* first invalid value */ | 
|  |  | 
|  | /* a date (yyyy-mm-dd) */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned short year; | 
|  | unsigned char month; | 
|  | unsigned char day; | 
|  | } | 
|  | hymod_date_t; | 
|  |  | 
|  | /* describes a Xilinx fpga */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned char type;		/* chip type */ | 
|  | unsigned char speed;		/* chip speed rating */ | 
|  | unsigned char temp;		/* chip temperature rating */ | 
|  | unsigned char grade;		/* chip grade */ | 
|  | } | 
|  | hymod_xlx_t; | 
|  |  | 
|  | /* describes a Motorola embedded processor */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned char type;		/* CPU type */ | 
|  | unsigned char cpuspd;		/* speed of the PowerPC core */ | 
|  | unsigned char busspd;		/* speed of the system and 60x bus */ | 
|  | unsigned char cpmspd;		/* speed of the CPM co-processor */ | 
|  | } | 
|  | hymod_mpc_t; | 
|  |  | 
|  | /* info about high-speed (1Gbit) serial interface */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned char type;		/* high-speed serial chip type */ | 
|  | unsigned char nchin;		/* number of input channels mounted */ | 
|  | unsigned char nchout;		/* number of output channels mounted */ | 
|  | } | 
|  | hymod_hss_t; | 
|  |  | 
|  | /* | 
|  | * this defines the contents of the serial eeprom that exists on every | 
|  | * hymod board, including mezzanine boards (the serial eeprom will be | 
|  | * faked for early development boards that don't have one) | 
|  | */ | 
|  |  | 
|  | typedef | 
|  | struct { | 
|  | unsigned char valid:1;		/* contents of this struct is valid */ | 
|  | unsigned char ver:7;		/* eeprom contents version */ | 
|  | unsigned char bdtype;		/* board type */ | 
|  | unsigned char bdrev;		/* board revision */ | 
|  | unsigned char batchlen;		/* length of batch string below */ | 
|  | unsigned long serno;		/* serial number */ | 
|  | hymod_date_t date;		/* manufacture date */ | 
|  | unsigned char batch[32];	/* manufacturer specific batch id */ | 
|  | unsigned char nsdram;		/* # of ram "banks" */ | 
|  | unsigned char nflash;		/* # of flash "banks" */ | 
|  | unsigned char nzbt;		/* # of ZBT rams */ | 
|  | unsigned char nxlx;		/* # of Xilinx fpgas */ | 
|  | unsigned char sdramsz[HYMOD_MAX_SDRAM];	/* log2 of sdram size */ | 
|  | unsigned char flashsz[HYMOD_MAX_FLASH];	/* log2 of flash size */ | 
|  | unsigned char zbtsz[HYMOD_MAX_ZBT];	/* log2 of ZBT ram size */ | 
|  | hymod_xlx_t xlx[HYMOD_MAX_XLX];	/* Xilinx fpga info */ | 
|  | hymod_mpc_t mpc;		/* Motorola MPC CPU info */ | 
|  | hymod_hss_t hss;		/* high-speed serial info */ | 
|  | } | 
|  | hymod_eeprom_t; | 
|  |  | 
|  | /* | 
|  | * this defines a region in the processor's physical address space | 
|  | */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned long exists:1;		/* 1 if the region exists, 0 if not */ | 
|  | unsigned long size:31;		/* size in bytes */ | 
|  | unsigned long base;		/* base address */ | 
|  | } | 
|  | xlx_prgn_t; | 
|  |  | 
|  | /* | 
|  | * this defines where the various Xilinx fpga access regions are mapped | 
|  | * into the physical address space of the processor | 
|  | */ | 
|  | typedef | 
|  | struct { | 
|  | xlx_prgn_t prog;		/* program access region */ | 
|  | xlx_prgn_t reg;			/* register access region */ | 
|  | xlx_prgn_t port;		/* port access region */ | 
|  | } | 
|  | xlx_mmap_t; | 
|  |  | 
|  | /* | 
|  | * this defines which 8260 i/o port pins are connected to the various | 
|  | * signals required for programming a Xilinx fpga | 
|  | */ | 
|  | typedef | 
|  | struct { | 
|  | iopin_t prog_pin;		/* assert for >= 300ns to program */ | 
|  | iopin_t init_pin;		/* goes high when fpga is cleared */ | 
|  | iopin_t done_pin;		/* goes high when program is done */ | 
|  | iopin_t enable_pin;		/* some fpgas need enabling */ | 
|  | } | 
|  | xlx_iopins_t; | 
|  |  | 
|  | /* all info about one Xilinx chip */ | 
|  | typedef | 
|  | struct { | 
|  | xlx_mmap_t mmap; | 
|  | xlx_iopins_t iopins; | 
|  | unsigned long irq:8;		/* h/w intr req number for this fpga */ | 
|  | } | 
|  | xlx_info_t; | 
|  |  | 
|  | /* all info about one hymod board */ | 
|  | typedef | 
|  | struct { | 
|  | hymod_eeprom_t eeprom; | 
|  | xlx_info_t xlx[HYMOD_MAX_XLX]; | 
|  | } | 
|  | hymod_board_t; | 
|  |  | 
|  | /* | 
|  | * this defines the configuration information of a hymod board-set | 
|  | * (main board + possible mezzanine board). In future, there may be | 
|  | * more than one mezzanine board (stackable?) - if so, add a "mezz2" | 
|  | * field, and so on... or make mezz an array? | 
|  | */ | 
|  | typedef | 
|  | struct { | 
|  | unsigned long ver:8;		/* version control */ | 
|  | hymod_board_t main;		/* main board info */ | 
|  | hymod_board_t mezz;		/* mezzanine board info */ | 
|  | unsigned long crc;		/* ensures kernel and boot prom agree */ | 
|  | } | 
|  | hymod_conf_t; | 
|  |  | 
|  | #endif /* _HYMOD_H_ */ |