1875c7893SWolfgang Denk /* 2875c7893SWolfgang Denk * (C) Copyright 2002 3875c7893SWolfgang Denk * Rich Ireland, Enterasys Networks, rireland@enterasys.com. 4875c7893SWolfgang Denk * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 6875c7893SWolfgang Denk */ 7875c7893SWolfgang Denk 8875c7893SWolfgang Denk #ifndef _SPARTAN3_H_ 9875c7893SWolfgang Denk #define _SPARTAN3_H_ 10875c7893SWolfgang Denk 11875c7893SWolfgang Denk #include <xilinx.h> 12875c7893SWolfgang Denk 13875c7893SWolfgang Denk /* Slave Parallel Implementation function table */ 14875c7893SWolfgang Denk typedef struct { 152df9d5c4SMichal Simek xilinx_pre_fn pre; 162df9d5c4SMichal Simek xilinx_pgm_fn pgm; 172df9d5c4SMichal Simek xilinx_init_fn init; 182df9d5c4SMichal Simek xilinx_err_fn err; 192df9d5c4SMichal Simek xilinx_done_fn done; 202df9d5c4SMichal Simek xilinx_clk_fn clk; 212df9d5c4SMichal Simek xilinx_cs_fn cs; 222df9d5c4SMichal Simek xilinx_wr_fn wr; 232df9d5c4SMichal Simek xilinx_rdata_fn rdata; 242df9d5c4SMichal Simek xilinx_wdata_fn wdata; 252df9d5c4SMichal Simek xilinx_busy_fn busy; 262df9d5c4SMichal Simek xilinx_abort_fn abort; 272df9d5c4SMichal Simek xilinx_post_fn post; 282a6e3869SMichal Simek } xilinx_spartan3_slave_parallel_fns; 29875c7893SWolfgang Denk 30875c7893SWolfgang Denk /* Slave Serial Implementation function table */ 31875c7893SWolfgang Denk typedef struct { 322df9d5c4SMichal Simek xilinx_pre_fn pre; 332df9d5c4SMichal Simek xilinx_pgm_fn pgm; 342df9d5c4SMichal Simek xilinx_clk_fn clk; 352df9d5c4SMichal Simek xilinx_init_fn init; 362df9d5c4SMichal Simek xilinx_done_fn done; 372df9d5c4SMichal Simek xilinx_wr_fn wr; 382df9d5c4SMichal Simek xilinx_post_fn post; 392df9d5c4SMichal Simek xilinx_bwr_fn bwr; /* block write function */ 402df9d5c4SMichal Simek xilinx_abort_fn abort; 412a6e3869SMichal Simek } xilinx_spartan3_slave_serial_fns; 42875c7893SWolfgang Denk 43*14cfc4f3SMichal Simek extern struct xilinx_fpga_op spartan3_op; 44*14cfc4f3SMichal Simek 45875c7893SWolfgang Denk /* Device Image Sizes 46875c7893SWolfgang Denk *********************************************************************/ 47875c7893SWolfgang Denk /* Spartan-III (1.2V) */ 48875c7893SWolfgang Denk #define XILINX_XC3S50_SIZE 439264/8 49875c7893SWolfgang Denk #define XILINX_XC3S200_SIZE 1047616/8 50875c7893SWolfgang Denk #define XILINX_XC3S400_SIZE 1699136/8 51875c7893SWolfgang Denk #define XILINX_XC3S1000_SIZE 3223488/8 52875c7893SWolfgang Denk #define XILINX_XC3S1500_SIZE 5214784/8 53875c7893SWolfgang Denk #define XILINX_XC3S2000_SIZE 7673024/8 54875c7893SWolfgang Denk #define XILINX_XC3S4000_SIZE 11316864/8 55875c7893SWolfgang Denk #define XILINX_XC3S5000_SIZE 13271936/8 56875c7893SWolfgang Denk 57923efd28SBruce Adler /* Spartan-3E (v3.4) */ 58923efd28SBruce Adler #define XILINX_XC3S100E_SIZE 581344/8 59923efd28SBruce Adler #define XILINX_XC3S250E_SIZE 1353728/8 60923efd28SBruce Adler #define XILINX_XC3S500E_SIZE 2270208/8 61923efd28SBruce Adler #define XILINX_XC3S1200E_SIZE 3841184/8 62923efd28SBruce Adler #define XILINX_XC3S1600E_SIZE 5969696/8 63923efd28SBruce Adler 6428cdc1c8SStefano Babic /* 6528cdc1c8SStefano Babic * Spartan-6 : the Spartan-6 family can be programmed 6628cdc1c8SStefano Babic * exactly as the Spartan-3 6728cdc1c8SStefano Babic */ 6828cdc1c8SStefano Babic #define XILINK_XC6SLX4_SIZE (3713568/8) 6928cdc1c8SStefano Babic 70875c7893SWolfgang Denk /* Descriptor Macros 71875c7893SWolfgang Denk *********************************************************************/ 723bff4ffaSMatthias Fuchs /* Spartan-III devices */ 73875c7893SWolfgang Denk #define XILINX_XC3S50_DESC(iface, fn_table, cookie) \ 74*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S50_SIZE, fn_table, cookie, &spartan3_op } 75875c7893SWolfgang Denk 76875c7893SWolfgang Denk #define XILINX_XC3S200_DESC(iface, fn_table, cookie) \ 77*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S200_SIZE, fn_table, cookie, &spartan3_op } 78875c7893SWolfgang Denk 79875c7893SWolfgang Denk #define XILINX_XC3S400_DESC(iface, fn_table, cookie) \ 80*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S400_SIZE, fn_table, cookie, &spartan3_op } 81875c7893SWolfgang Denk 82875c7893SWolfgang Denk #define XILINX_XC3S1000_DESC(iface, fn_table, cookie) \ 83*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S1000_SIZE, fn_table, cookie, &spartan3_op } 84875c7893SWolfgang Denk 85875c7893SWolfgang Denk #define XILINX_XC3S1500_DESC(iface, fn_table, cookie) \ 86*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S1500_SIZE, fn_table, cookie, &spartan3_op } 87875c7893SWolfgang Denk 88875c7893SWolfgang Denk #define XILINX_XC3S2000_DESC(iface, fn_table, cookie) \ 89*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S2000_SIZE, fn_table, cookie, &spartan3_op } 90875c7893SWolfgang Denk 91875c7893SWolfgang Denk #define XILINX_XC3S4000_DESC(iface, fn_table, cookie) \ 92*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S4000_SIZE, fn_table, cookie, &spartan3_op } 93875c7893SWolfgang Denk 94875c7893SWolfgang Denk #define XILINX_XC3S5000_DESC(iface, fn_table, cookie) \ 95*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S5000_SIZE, fn_table, cookie, &spartan3_op } 96875c7893SWolfgang Denk 97923efd28SBruce Adler /* Spartan-3E devices */ 98923efd28SBruce Adler #define XILINX_XC3S100E_DESC(iface, fn_table, cookie) \ 99*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S100E_SIZE, fn_table, cookie, &spartan3_op } 100923efd28SBruce Adler 101923efd28SBruce Adler #define XILINX_XC3S250E_DESC(iface, fn_table, cookie) \ 102*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S250E_SIZE, fn_table, cookie, &spartan3_op } 103923efd28SBruce Adler 104923efd28SBruce Adler #define XILINX_XC3S500E_DESC(iface, fn_table, cookie) \ 105*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S500E_SIZE, fn_table, cookie, &spartan3_op } 106923efd28SBruce Adler 107923efd28SBruce Adler #define XILINX_XC3S1200E_DESC(iface, fn_table, cookie) \ 108*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S1200E_SIZE, fn_table, cookie, \ 109*14cfc4f3SMichal Simek &spartan3_op } 110923efd28SBruce Adler 111923efd28SBruce Adler #define XILINX_XC3S1600E_DESC(iface, fn_table, cookie) \ 112*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINX_XC3S1600E_SIZE, fn_table, cookie, \ 113*14cfc4f3SMichal Simek &spartan3_op } 114923efd28SBruce Adler 11528cdc1c8SStefano Babic #define XILINX_XC6SLX4_DESC(iface, fn_table, cookie) \ 116*14cfc4f3SMichal Simek { xilinx_spartan3, iface, XILINK_XC6SLX4_SIZE, fn_table, cookie, &spartan3_op } 11728cdc1c8SStefano Babic 118875c7893SWolfgang Denk #endif /* _SPARTAN3_H_ */ 119