* [U-Boot-Users] Altera Stratix II support @ 2007-05-17 21:49 eran liberty 2007-05-17 22:02 ` David Hawkins 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-05-17 21:49 UTC (permalink / raw) To: u-boot Hi All, I am already knee deep in adding Altera Stratix II support to the u-boot via the fpga command (currently xlinix & acex1k are supported)... of course I will re-post when i am done. My only question is, Am i reinventing the wheel? Is it already implemented anywhere? If i am, where can I find a reference to the work already done? If not I will soon give you one :) Liberty ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-17 21:49 [U-Boot-Users] Altera Stratix II support eran liberty @ 2007-05-17 22:02 ` David Hawkins 2007-05-18 5:46 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: David Hawkins @ 2007-05-17 22:02 UTC (permalink / raw) To: u-boot Hi Liberty, > I am already knee deep in adding Altera Stratix II support to the > u-boot via the fpga command (currently xlinix & acex1k are > supported)... > > of course I will re-post when i am done. > > My only question is, > > Am i reinventing the wheel? > Is it already implemented anywhere? > > If i am, where can I find a reference to the work already done? > > If not I will soon give you one :) I haven't looked for it yet, but I plan to add support too eventually (= months from now when I get boards). I haven't looked at the code, but here's how I plan to configure my FPGAs. Your method may be different, so perhaps between us we can come up with a consistent API. The board I am designing will contain an MPC8349E, and Altera Stratix II system controller FPGA on the processor local bus, and then 4 other programmable FPGAs. A board placement PDF is here; http://www.ovro.caltech.edu/~dwh/carma_board/carma_board_placement.pdf and engineering documents are here http://www.ovro.caltech.edu/~dwh/carma_board/ The system controller FPGA will boot from Flash, a MAX II CPLD will configure it on power-up, and then it'll bring the PPC out of reset, which will then boot through Flash located off the system controller FPGA (hence the system controller comes to life before the processor). The other four FPGAs will be programmed as the application dictates. So given U-Boot running, I'd imagine tftp'ing RBF (raw binary format) files generated by Quartus over to the board. I'd then copy the files to a block of memory which maps in my system controller to a fast-passive-parallel (FPP) programmer. That state machine then programs the FPGAs. In Linux the same procedure would be hidden behind a driver so I could dd the RBFs into /dev/fgpa_fpp or /sys/.../firmware. The point of mapping the FPP programmer into a block of local bus memory addresses is so that I can use the MPC8349E DMA controller to DMA the RBF files from SDRAM memory to the programmer memory (eg. from files in a RAM filesystem). According to the datasheet MPC8349E DMA controller won't burst with a fixed destination address (FIFO mode), so I'll just fake it out and let it DMA to what it thinks is an incrementing address location. How are you planning on programming your FPGA? Cheers Dave ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-17 22:02 ` David Hawkins @ 2007-05-18 5:46 ` eran liberty 2007-05-18 15:52 ` David Hawkins 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-05-18 5:46 UTC (permalink / raw) To: u-boot Hi Dave (and all), Well its you lucky day, By the time I you will need it I will already be done with it and you will have it. I am using the a custom board with a MPC8548 as its main processor.. so you should be able to convert it to your use with real ease. the strategy, software wise, is: 1. not touch fpga.c /fpga.h 2. Add the needed enums to altera.h / switch cases to altera.c 3. Add an StratixII.c / StratixII.h general purpose driver 4. Add a vendor specific /board/{VENDOR}}/yourname_fpga.c that contain the board specific function (like enabling gpio and stuff, raise the whatshellwecallit bit, ect. ) hardware wise: we do not have TSEC2 on our board... so by setting the right bits we can its legs as gpio... once its ready I will post a patch (against 1.1.6 stable) and will ready to help if there are any problems. On 5/18/07, David Hawkins <dwh@ovro.caltech.edu> wrote: > Hi Liberty, > > > I am already knee deep in adding Altera Stratix II support to the > > u-boot via the fpga command (currently xlinix & acex1k are > > supported)... > > > > of course I will re-post when i am done. > > > > My only question is, > > > > Am i reinventing the wheel? > > Is it already implemented anywhere? > > > > If i am, where can I find a reference to the work already done? > > > > If not I will soon give you one :) > > I haven't looked for it yet, but I plan to add support > too eventually (= months from now when I get boards). > > I haven't looked at the code, but here's how I plan to > configure my FPGAs. Your method may be different, so > perhaps between us we can come up with a consistent API. > any changes between our boards will be placed in the board specific file, so no worries there. > The board I am designing will contain an MPC8349E, and > Altera Stratix II system controller FPGA on the processor > local bus, and then 4 other programmable FPGAs. A > board placement PDF is here; I have a 3 FPGA on the local bus system so its pretty close. > > http://www.ovro.caltech.edu/~dwh/carma_board/carma_board_placement.pdf > > and engineering documents are here > > http://www.ovro.caltech.edu/~dwh/carma_board/ > > The system controller FPGA will boot from Flash, a MAX II > CPLD will configure it on power-up, and then it'll bring the > PPC out of reset, which will then boot through Flash located > off the system controller FPGA (hence the system controller > comes to life before the processor). The other four FPGAs > will be programmed as the application dictates. > I am going to cut expanses on the CPLD (have it now but intend to solder it out). So the Uboot will reset the FPGA and than program it. > So given U-Boot running, I'd imagine tftp'ing RBF > (raw binary format) files generated by Quartus over to the > board. I'd then copy the files to a block of memory which > maps in my system controller to a fast-passive-parallel (FPP) > programmer. That state machine then programs the FPGAs. > In Linux the same procedure would be hidden behind > a driver so I could dd the RBFs into /dev/fgpa_fpp or > /sys/.../firmware. > I am going to add the Fast Passive Parallel loading style, so again you have a tight fit here. > The point of mapping the FPP programmer into a block of > local bus memory addresses is so that I can use the MPC8349E > DMA controller to DMA the RBF files from SDRAM memory to the > programmer memory (eg. from files in a RAM filesystem). > According to the datasheet MPC8349E DMA controller won't > burst with a fixed destination address (FIFO mode), so I'll > just fake it out and let it DMA to what it thinks > is an incrementing address location. Here we are differ... I intend to do it as simple as possible. This is a rare operation, done only once on start up event. If your up time is so crucial go ahead and DMA it. I can spare the extra 3 sec on directly putting the stuff on the bus. > > How are you planning on programming your FPGA? > > Cheers > Dave > Having said all that... I am still not too proud to stop right now and take someone elses already made job, if anyone will show me it. again, Is There already an implementation for Altera Startix II out there hidden from me? Liberty ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-18 5:46 ` eran liberty @ 2007-05-18 15:52 ` David Hawkins 2007-05-31 23:10 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: David Hawkins @ 2007-05-18 15:52 UTC (permalink / raw) To: u-boot eran liberty wrote: > Hi Dave (and all), > > Well its you lucky day, > > By the time I you will need it I will already be done with it and you > will have it. > Great! Dave ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-18 15:52 ` David Hawkins @ 2007-05-31 23:10 ` eran liberty 2007-05-31 23:46 ` Wolfgang Denk 2007-06-01 16:47 ` David Hawkins 0 siblings, 2 replies; 20+ messages in thread From: eran liberty @ 2007-05-31 23:10 UTC (permalink / raw) To: u-boot Hi David & All, I have successfully integrated Altera Stratix II (fast passive parallel) into the existing FPGA framework within u-boot. so in u-boot it looks like this ==================== u-boot console ===================================== => fpga info Altera Device Descriptor @ 0x0fff474c Family: Stratix II Interface type: Fast Passive Parallel (FPP) Device Size: 1 bytes Cookie: 0x0 (0) Device Function Table @ 0x0fff255c => bunzip ff000000 200000 3c58c BUNZIP2: decompressed image address & size: 0x00200000 0x930d2c (9637164) => fpga load 0 200000 930d2c loading to fpga done. ========================================================================= I have attached two patches which are applied against the latest stable u-boot-1.1.6. The first is only the generic stuff needed for Stratix II support. The second contains my new board with a specific implementation of a Stratix II FPGA along with other add-ons and fixes If there is any wish / demand / need to port any or all of this into the main trunk, tell me what to be done as I have never done so in the past. here is a summery of what can be found in the patches: u-boot-stratixII.patch : the basic generic part for Stratix II /common/altera.c : Added Altera_StratixII case /include/altera.h : Added Macros and Enums to support Stratix II /common/stratixII.c : New file that implements Stratix II based on ACEX1K.c /include/stratixII.h : New file Stratix II header /common/Makefile : Added "stratixII.o" /common/fpga.c : Added "const" to suppress warning /include/common.h : Added ndelay() declaration /include/exports.h : Added ndelay() export /lib_ppc/time.c : Added ndelay() implementation u-boot-exsw6000.patch: contains everything in u-boot-stratixII.patch plus /board/extricom/exsw6000/config.mk : new /board/extricom/exsw6000/exsw6000.c : new /board/extricom/exsw6000/exsw6000_fpga.c : New board specific Stratix II implementation /board/extricom/exsw6000/exsw6000_fpga.h : New board specific Stratix II header /board/extricom/exsw6000/ft_board.c : new /board/extricom/exsw6000/init.S : new /board/extricom/exsw6000/Makefile : new /board/extricom/exsw6000/u-boot.lds : new /include/configs/EXSW6000.h : new /Makefile : added EXSW6000_config target /common/cmd_misc.c : Added bunzip2 command depends on CONFIG_BZIP2 macro defined /cpu/mpc85xx/cpu.c: added reset by using rstcr register depands on CONFIG_RESET_RSCTR or CONFIG_RESET_DBCR0 macro defined. The copyrights for this are not mine. I have taken it from somewhere on the net! alas I cant remember from where. :( /include/asm-ppc/immap_85xx.h: added the rstcr register in the memory map /drivers/cfi_flash.c : added security check to prevent flash function to buffer overrun when Flash size as read from the hardware does not match the flash size define by the config file. Also added CONFIG_FORCE_FLASH_BANK_SIZE that can be used to set the Config size over the read / calculated one. Have fun, The forum bot admin wont let me attach my patches so i put them on yousend it... if the credits run out on some1 let me know... u-boot-statixII.patch http://download.yousendit.com/91048F0F125DDD5E u-boot-exsw6000.patch http://download.yousendit.com/44C713D149624E03 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-31 23:10 ` eran liberty @ 2007-05-31 23:46 ` Wolfgang Denk 2007-06-04 20:09 ` eran liberty 2007-06-01 16:47 ` David Hawkins 1 sibling, 1 reply; 20+ messages in thread From: Wolfgang Denk @ 2007-05-31 23:46 UTC (permalink / raw) To: u-boot In message <ffc2b1d40705311610j405896f7yeb9b89268d9477de@mail.gmail.com> you wrote: > > I have attached two patches which are applied against the latest > stable u-boot-1.1.6. U-Boot 1.1.6 is by far not "latest". Actually it is very old and outdated. Please resubmit your patches against *current* code, i. e. against the top-of-tree version in the git repository. Your patches cannot be applied current code: -> patch -p1 --dry-run </tmp/patch1 patching file common/altera.c Hunk #4 FAILED at 60. Hunk #5 succeeded at 99 (offset 5 lines). Hunk #6 succeeded at 218 with fuzz 2 (offset 90 lines). Hunk #7 FAILED at 243. Hunk #8 FAILED at 263. Hunk #9 FAILED at 306. Hunk #10 succeeded at 164 (offset -71 lines). 4 out of 10 hunks FAILED -- saving rejects to file common/altera.c.rej patching file common/fpga.c patching file common/Makefile Hunk #1 FAILED at 27. 1 out of 1 hunk FAILED -- saving rejects to file common/Makefile.rej patching file common/stratixII.c patching file include/altera.h Hunk #1 FAILED at 27. Hunk #2 FAILED at 49. Hunk #3 succeeded at 92 (offset 4 lines). 2 out of 3 hunks FAILED -- saving rejects to file include/altera.h.rej patching file include/common.h Hunk #1 succeeded at 559 (offset 8 lines). patching file include/exports.h patching file include/stratixII.h patching file lib_ppc/time.c Also, please clean up all your many coding style violations (see http://www.denx.de/wiki/UBoot/CodingStyle): trailing white space, indentation not by TABs, too long lines, indentation not by multiples of 8 characters, missing space after function names, bad brace style (board/extricom/exsw6000/exsw6000_fpga.c), etc. Also, please make sure to keep lists (like of objects) alphabetically sorted (common/Makefile etc.). Also, make sure that "make clean" removes all files and directories you create during your build ($(obj)../../cds/common ?). Finally, please break up your monster patches into smaller, indepen- dent chunks. For example, adding the "bunzip" command to common/cmd_misc.c is unrelated to the rest of your patches and must be submitted as a separate patch. Ditto for your changes to drivers/cfi_flash.c and other similar things. Thanks. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de "In the long run, every program becomes rococo, and then rubble." - Alan Perlis ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-31 23:46 ` Wolfgang Denk @ 2007-06-04 20:09 ` eran liberty 2007-06-04 20:13 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-04 20:09 UTC (permalink / raw) To: u-boot > > Finally, please break up your monster patches into smaller, indepen- > dent chunks. For example, adding the "bunzip" command to > common/cmd_misc.c is unrelated to the rest of your patches and must > be submitted as a separate patch. Ditto for your changes to > drivers/cfi_flash.c and other similar things. > > Thanks. > > Best regards, > > Wolfgang Denk > done. the followong pathces are applied against the latest snapshot... ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-04 20:09 ` eran liberty @ 2007-06-04 20:13 ` eran liberty [not found] ` <ffc2b1d40706041316y7cb61972h1fba91d4ef220ea9@mail.gmail.com> 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-04 20:13 UTC (permalink / raw) To: u-boot Altera Stratix II support (generic implemetation) ===================start of patch ============================= diff -x .svn -Nuar u-boot.git/common/altera.c u-boot-exsw6000/common/altera.c --- u-boot.git/common/altera.c 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/common/altera.c 2007-06-03 22:15:48.000000000 +0300 @@ -1,4 +1,7 @@ /* + * (C) Copyright 2007 + * Eran Liberty, Extricom , eran.liberty at gmail.com + * * (C) Copyright 2003 * Steven Scholz, imc Measurement & Control, steven.scholz at imc-berlin.de * @@ -30,6 +33,7 @@ */ #include <common.h> #include <ACEX1K.h> +#include <stratixII.h> /* Define FPGA_DEBUG to get debug printf's */ /* #define FPGA_DEBUG */ @@ -43,7 +47,7 @@ #if (CONFIG_FPGA & CFG_FPGA_ALTERA) /* Local Static Functions */ -static int altera_validate (Altera_desc * desc, char *fn); +static int altera_validate (Altera_desc * desc,const char *fn); /* ------------------------------------------------------------------------- */ int altera_load( Altera_desc *desc, void *buf, size_t bsize ) @@ -69,6 +73,16 @@ __FUNCTION__); #endif break; + case Altera_StratixII: +#if (CONFIG_FPGA & CFG_STRATIX_II) + PRINTF ("%s: Launching the Stratix II Loader...\n", + __FUNCTION__); + ret_val = StratixII_load (desc, buf, bsize); +#else + printf ("%s: No support for Stratix II devices.\n", + __FUNCTION__); +#endif + break; default: printf ("%s: Unsupported family type, %d\n", @@ -97,6 +111,16 @@ __FUNCTION__); #endif break; + case Altera_StratixII: +#if (CONFIG_FPGA & CFG_STRATIX_II) + PRINTF ("%s: Launching the Stratix II Reader...\n", + __FUNCTION__); + ret_val = StratixII_dump (desc, buf, bsize); +#else + printf ("%s: No support for Stratix II devices.\n", + __FUNCTION__); +#endif + break; default: printf ("%s: Unsupported family type, %d\n", @@ -117,6 +141,9 @@ case Altera_ACEX1K: printf ("ACEX1K\n"); break; + case Altera_StratixII: + printf ("Stratix II\n"); + break; /* Add new family types here */ case Altera_CYC2: printf ("CYCLON II\n"); @@ -142,6 +169,9 @@ case altera_jtag_mode: /* Not used */ printf ("JTAG Mode\n"); break; + case fast_passive_parallel: + printf ("Fast Passive Parallel (FPP)\n"); + break; /* Add new interface types here */ default: printf ("Unsupported interface type, %d\n", desc->iface); @@ -166,6 +196,14 @@ __FUNCTION__); #endif break; + case Altera_StratixII: +#if (CONFIG_FPGA & CFG_STRATIX_II) + StratixII_info (desc); +#else + printf ("%s: No support for Stratix II devices.\n", + __FUNCTION__); +#endif + break; /* Add new family types here */ default: /* we don't need a message here - we give one up above */ @@ -199,6 +237,16 @@ __FUNCTION__); #endif break; + + case Altera_StratixII: +#if (CONFIG_FPGA & CFG_STRATIX_II) + ret_val = StratixII_reloc (desc, reloc_offset); +#else + printf ("%s: No support for Stratix II devices.\n", + __FUNCTION__); +#endif + break; + case Altera_CYC2: #if (CONFIG_FPGA & CFG_CYCLON2) ret_val = CYC2_reloc (desc, reloc_offset); @@ -219,7 +267,7 @@ /* ------------------------------------------------------------------------- */ -static int altera_validate (Altera_desc * desc, char *fn) +static int altera_validate (Altera_desc * desc, const char *fn) { int ret_val = FALSE; diff -x .svn -Nuar u-boot.git/common/Makefile u-boot-exsw6000/common/Makefile --- u-boot.git/common/Makefile 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/common/Makefile 2007-06-03 22:23:57.000000000 +0300 @@ -27,8 +27,9 @@ AOBJS = -COBJS = main.o ACEX1K.o altera.o bedbug.o circbuf.o cmd_autoscript.o \ +COBJS = main.o ACEX1K.o altera.o stratixII.o \ + bedbug.o circbuf.o cmd_autoscript.o \ cmd_bdinfo.o cmd_bedbug.o cmd_bmp.o cmd_boot.o cmd_bootm.o \ cmd_cache.o cmd_console.o \ cmd_date.o cmd_dcr.o cmd_diag.o cmd_display.o cmd_doc.o cmd_dtt.o \ diff -x .svn -Nuar u-boot.git/common/stratixII.c u-boot-exsw6000/common/stratixII.c --- u-boot.git/common/stratixII.c 1970-01-01 02:00:00.000000000 +0200 +++ u-boot-exsw6000/common/stratixII.c 2007-06-03 21:55:51.000000000 +0300 @@ -0,0 +1,186 @@ +/* + * (C) Copyright 2007 + * Eran Liberty, Extricom , eran.liberty at gmail.com + * + * 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 + * + */ + +#include <common.h> /* core U-Boot definitions */ +#include <altera.h> + +#if (CONFIG_FPGA & (CFG_ALTERA | CFG_STRATIX_II)) + +int StratixII_fpp_load(Altera_desc * desc, void *buf, size_t bsize); +int StratixII_fpp_dump(Altera_desc * desc, void *buf, size_t bsize); + +/****************************************************************/ +/* Stratix II Generic Implementation */ +int StratixII_load (Altera_desc * desc, void *buf, size_t bsize) +{ + int ret_val = FPGA_FAIL; + + switch (desc->iface) { + case fast_passive_parallel: + ret_val = StratixII_fpp_load(desc, buf, bsize); + break; + + /* Add new interface types here */ + default: + printf ("%s: Unsupported interface type, %d\n", __FUNCTION__, desc->iface); + } + return ret_val; +} + +int StratixII_dump (Altera_desc * desc, void *buf, size_t bsize) +{ + int ret_val = FPGA_FAIL; + + switch (desc->iface) { + case fast_passive_parallel: + ret_val = StratixII_fpp_dump(desc, buf, bsize); + break; + /* Add new interface types here */ + default: + printf ("%s: Unsupported interface type, %d\n", __FUNCTION__, desc->iface); + } + return ret_val; +} + +int StratixII_info( Altera_desc *desc ) +{ + return FPGA_SUCCESS; +} + +int StratixII_reloc (Altera_desc * desc, ulong reloc_offset) +{ + int i; + void** func_table; + + desc->iface_fns = (void*)((ulong)(desc->iface_fns) + reloc_offset); + for (i=0,func_table = (void**)desc->iface_fns;i< sizeof(altera_board_specific_func)/sizeof(void*);i++) { + func_table[i] = (void*)((ulong)(func_table[i]) + reloc_offset); + } + return FPGA_SUCCESS; +} + +#endif + +/************************************************************/ +/* Stratix II Fast Passive Parallel Generic Implementation */ +int StratixII_fpp_dump(Altera_desc * desc, void *buf, size_t bsize) +{ + printf("Stratix II Fast Passive Parallel dump is not implemented\n"); + return FPGA_FAIL; +} + +int StratixII_fpp_load(Altera_desc * desc, void *buf, size_t bsize) +{ + altera_board_specific_func *fns; + int cookie; + int ret_val = FPGA_FAIL; + int bytecount; + char *buff = buf; + + if (!desc) { + printf("%s(%d) Altera_desc missing\n",__FUNCTION__,__LINE__); + return FPGA_FAIL; + } + if (!buff) { + printf("%s(%d) buffer is missing\n",__FUNCTION__,__LINE__); + return FPGA_FAIL; + } + if (!bsize) { + printf("%s(%d) size is zero\n",__FUNCTION__,__LINE__); + return FPGA_FAIL; + } + if (!desc->iface_fns) { + printf("%s(%d) Altera_desc function interface table is missing\n",__FUNCTION__,__LINE__); + return FPGA_FAIL; + } + fns = (altera_board_specific_func *)(desc->iface_fns); + cookie = desc->cookie; + + if (!(fns->config && fns->status && fns->done && fns->data && fns->abort)) { + printf("%s(%d) Missing some function in the function interface table\n",__FUNCTION__,__LINE__); + return FPGA_FAIL; + } + + /* 1. give board specific a chance to do anything before we start */ + if (fns->pre) { + if ((ret_val = fns->pre(cookie)) < 0 ) { + return ret_val; + } + } + + /* from this point on we must fail gracfully by calling lower layer abort */ + + /* 2. Strat burn cycle by deasserting config for t_CFG and waiting t_CF2CK after reaserted*/ + fns->config(0,1,cookie); + udelay(2); /* nCONFIG low pulse width 2usec*/ + fns->config(1,1,cookie); + udelay(100); /* nCONFIG high to first rising edge on DCLK */ + + /* 3. Start the Data cycle with clk deasserted*/ + bytecount = 0; + fns->clk(0,1,cookie); + + printf("loading to fpga "); + while(bytecount < bsize) { + /* 3.1 check stratix has not signaled us an error */ + if (fns->status(cookie) != 1) { + printf("\n%s(%d) Stratix failed (byte transfered till failure 0x%x)\n",__FUNCTION__,__LINE__,bytecount); + fns->abort(cookie); + return FPGA_FAIL; + } + /* 3.2 put data on the bus */ + fns->data(buff[bytecount++],1,cookie); + ndelay(5); + fns->clk(1,1,cookie); + ndelay(5); + fns->clk(0,1,cookie); + + /* 3.3 while clk is deasserted it is safe to print some progress indication*/ + if ((bytecount % (bsize / 100)) == 0) { + printf("\b\b\b%02d\%",bytecount*100/bsize); + } + } + + /* 4. Set one last clock and check conf done signal */ + fns->clk(1,1,cookie); + udelay(100); + if (!fns->done(cookie)) { + printf(" error!.\n"); + fns->abort(cookie); + return FPGA_FAIL; + } + else { + printf("\b\b\b done.\n"); + } + + /* 5. call lower layer post configuration */ + if (fns->post) { + if ((ret_val = fns->pre(cookie)) < 0 ) { + fns->abort(cookie); + return ret_val; + } + } + + return FPGA_SUCCESS; +} diff -x .svn -Nuar u-boot.git/include/altera.h u-boot-exsw6000/include/altera.h --- u-boot.git/include/altera.h 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/include/altera.h 2007-06-03 22:13:42.000000000 +0300 @@ -27,22 +27,21 @@ #ifndef _ALTERA_H_ #define _ALTERA_H_ -/* - * See include/xilinx.h for another working example. - */ - /* Altera Model definitions *********************************************************************/ #define CFG_ACEX1K CFG_FPGA_DEV( 0x1 ) #define CFG_CYCLON2 CFG_FPGA_DEV( 0x2 ) +#define CFG_STRATIX_II CFG_FPGA_DEV( 0x4 ) #define CFG_ALTERA_ACEX1K (CFG_FPGA_ALTERA | CFG_ACEX1K) #define CFG_ALTERA_CYCLON2 (CFG_FPGA_ALTERA | CFG_CYCLON2) +#define CFG_ALTERA_STRATIX_II (CFG_FPGA_ALTERA | CFG_STRATIX_II) /* Add new models here */ /* Altera Interface definitions *********************************************************************/ #define CFG_ALTERA_IF_PS CFG_FPGA_IF( 0x1 ) /* passive serial */ +#define CFG_ALTERA_IF_FPP CFG_FPGA_IF( 0x2 ) /* fast passive parallel */ /* Add new interfaces here */ typedef enum { /* typedef Altera_iface */ @@ -52,15 +51,17 @@ passive_parallel_asynchronous, /* parallel data */ passive_serial_asynchronous, /* serial data w/ internal clock (not used) */ altera_jtag_mode, /* jtag/tap serial (not used ) */ + fast_passive_parallel, /* fast passive parallel (FPP) */ max_altera_iface_type /* insert all new types before this */ } Altera_iface; /* end, typedef Altera_iface */ typedef enum { /* typedef Altera_Family */ - min_altera_type, /* insert all new types after this */ - Altera_ACEX1K, /* ACEX1K Family */ - Altera_CYC2, /* CYCLONII Family */ -/* Add new models here */ - max_altera_type /* insert all new types before this */ + min_altera_type, /* insert all new types after this */ + Altera_ACEX1K, /* ACEX1K Family */ + Altera_CYC2, /* CYCLONII Family */ + Altera_StratixII, /* StratixII Familiy */ + /* Add new models here */ + max_altera_type /* insert all new types before this */ } Altera_Family; /* end, typedef Altera_Family */ typedef struct { /* typedef Altera_desc */ @@ -91,4 +92,15 @@ typedef int (*Altera_abort_fn)( int cookie ); typedef int (*Altera_post_fn)( int cookie ); +typedef struct { + Altera_pre_fn pre; + Altera_config_fn config; + Altera_status_fn status; + Altera_done_fn done; + Altera_clk_fn clk; + Altera_data_fn data; + Altera_abort_fn abort; + Altera_post_fn post; +} altera_board_specific_func; + #endif /* _ALTERA_H_ */ diff -x .svn -Nuar u-boot.git/include/common.h u-boot-exsw6000/include/common.h --- u-boot.git/include/common.h 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/include/common.h 2007-06-03 19:41:02.000000000 +0300 @@ -559,6 +559,7 @@ /* lib_$(ARCH)/time.c */ void udelay (unsigned long); +void ndelay (unsigned long); ulong usec2ticks (unsigned long usec); ulong ticks2usec (unsigned long ticks); int init_timebase (void); diff -x .svn -Nuar u-boot.git/include/exports.h u-boot-exsw6000/include/exports.h --- u-boot.git/include/exports.h 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/include/exports.h 2007-05-27 13:16:57.000000000 +0300 @@ -17,6 +17,7 @@ void *malloc(size_t); void free(void*); void udelay(unsigned long); +void ndelay(unsigned long); unsigned long get_timer(unsigned long); void vprintf(const char *, va_list); void do_reset (void); diff -x .svn -Nuar u-boot.git/include/stratixII.h u-boot-exsw6000/include/stratixII.h --- u-boot.git/include/stratixII.h 1970-01-01 02:00:00.000000000 +0200 +++ u-boot-exsw6000/include/stratixII.h 2007-05-22 11:45:21.000000000 +0300 @@ -0,0 +1,33 @@ +/* + * (C) Copyright 2007 + * Eran Liberty, Extricom, eran.liberty at gmail.com + * + * 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 _STRATIXII_H_ +#define _STRATIXII_H_ + +extern int StratixII_load( Altera_desc *desc, void *image, size_t size ); +extern int StratixII_dump( Altera_desc *desc, void *buf, size_t bsize ); +extern int StratixII_info( Altera_desc *desc ); +extern int StratixII_reloc( Altera_desc *desc, ulong reloc_off ); + +#endif /* _STRATIXII_H_ */ + diff -x .svn -Nuar u-boot.git/lib_ppc/time.c u-boot-exsw6000/lib_ppc/time.c --- u-boot.git/lib_ppc/time.c 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/lib_ppc/time.c 2007-06-03 22:03:21.000000000 +0300 @@ -60,6 +60,15 @@ /* ------------------------------------------------------------------------- */ +void ndelay(unsigned long nsec) +{ + ulong ticks = usec2ticks(1)*nsec/1000 +1; + + wait_ticks (ticks); +} + +/* ------------------------------------------------------------------------- */ + unsigned long ticks2usec(unsigned long ticks) { ulong tbclk = get_tbclk(); =====================end of patch ======================= ^ permalink raw reply [flat|nested] 20+ messages in thread
[parent not found: <ffc2b1d40706041316y7cb61972h1fba91d4ef220ea9@mail.gmail.com>]
* [U-Boot-Users] Altera Stratix II support [not found] ` <ffc2b1d40706041316y7cb61972h1fba91d4ef220ea9@mail.gmail.com> @ 2007-06-04 20:19 ` eran liberty 2007-06-04 20:25 ` eran liberty 2007-06-05 21:42 ` Andy Fleming 2007-06-05 5:35 ` eran liberty 1 sibling, 2 replies; 20+ messages in thread From: eran liberty @ 2007-06-04 20:19 UTC (permalink / raw) To: u-boot adds the reset register to 85xx immap ================ sof =================== diff -x .svn -Nuar u-boot.git/include/asm-ppc/immap_85xx.h u-boot-exsw6000/include/asm-ppc/immap_85xx.h --- u-boot.git/include/asm-ppc/immap_85xx.h 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/include/asm-ppc/immap_85xx.h 2007-05-29 10:13:11.000000000 +0300 @@ -1548,7 +1548,9 @@ char res9[12]; uint pvr; /* 0xe00a0 - Processor version register */ uint svr; /* 0xe00a4 - System version register */ - char res10[3416]; + char res9a[8]; + uint rstcr; /* 0xe00b0 - Reset control register */ + char res10[3404]; uint clkocr; /* 0xe0e00 - Clock out select register */ char res11[12]; uint ddrdllcr; /* 0xe0e10 - DDR DLL control register */ ================ eof =================== ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-04 20:19 ` eran liberty @ 2007-06-04 20:25 ` eran liberty 2007-06-04 20:26 ` eran liberty 2007-06-05 21:42 ` Andy Fleming 1 sibling, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-04 20:25 UTC (permalink / raw) To: u-boot adds the the sub command loadi to fpga. this will load an fpga image that was u-boot packed with mkimage. the image may be plain, gzip or bzip2 as with the kernel and fs images. =============== sof ======================= diff -x .svn -Nuar u-boot.git/common/cmd_fpga.c u-boot-exsw6000/common/cmd_fpga.c --- u-boot.git/common/cmd_fpga.c 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/common/cmd_fpga.c 2007-06-03 22:13:42.000000000 +0300 @@ -32,6 +32,7 @@ #endif #include <fpga.h> #include <malloc.h> +#include <bzlib.h> #if 0 #define FPGA_DEBUG @@ -45,6 +46,8 @@ #if defined (CONFIG_FPGA) && ( CONFIG_COMMANDS & CFG_CMD_FPGA ) +extern int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp); + /* Local functions */ static void fpga_usage (cmd_tbl_t * cmdtp); static int fpga_get_op (char *opstr); @@ -56,6 +59,89 @@ #define FPGA_LOADB 2 #define FPGA_DUMP 3 #define FPGA_LOADMK 4 +#define FPGA_LOADI 5 + +/* Load an image */ +int fpga_loadi( int devnum, void *buf) +{ + ulong addr = (ulong)(buf); + ulong data, len, checksum; + image_header_t hdr; + unsigned int unc_len; + unsigned int *punc_len = &unc_len; + int i; + + /* Copy header so we can blank CRC field for re-calculation */ +#ifdef CONFIG_HAS_DATAFLASH + if (addr_dataflash(addr)){ + read_dataflash(addr, sizeof(image_header_t), (char *)&hdr); + } else +#endif + memmove (&hdr, (char *)addr, sizeof(image_header_t)); + if (ntohl(hdr.ih_magic) != IH_MAGIC) { + puts ("Bad Magic Number\n"); + return 1; + } + data = (ulong)&hdr; + len = sizeof(image_header_t); + + checksum = ntohl(hdr.ih_hcrc); + hdr.ih_hcrc = 0; + + if (crc32 (0, (uchar *)data, len) != checksum) { + puts ("Bad Header Checksum\n"); + return 1; + } +#ifdef CONFIG_HAS_DATAFLASH + if (addr_dataflash(addr)){ + len = ntohl(hdr.ih_size) + sizeof(image_header_t); + read_dataflash(addr, len, (char *)CFG_LOAD_ADDR); + addr = CFG_LOAD_ADDR; + } +#endif + + print_image_hdr ((image_header_t *)addr); + + data = addr + sizeof(image_header_t); + len = ntohl(hdr.ih_size); + + puts (" Verifying Checksum ... "); + if (crc32 (0, (uchar *)data, len) != ntohl(hdr.ih_dcrc)) { + printf ("Bad Data CRC\n"); + return 1; + } + puts ("OK\n"); + + switch (hdr.ih_comp) { + case IH_COMP_NONE: + memmove ((char *)CFG_LOAD_ADDR,(void *)data,len); + break; + case IH_COMP_GZIP: + if (gunzip ((char *)CFG_LOAD_ADDR,unc_len,(uchar *)data, &len) != 0) { + puts ("GUNZIP ERROR - FPGA not loaded\n"); + return 1; + } + len = unc_len; + break; + +#ifdef CONFIG_BZIP2 + case IH_COMP_BZIP2: + i = BZ2_bzBuffToBuffDecompress ((char *)CFG_LOAD_ADDR,punc_len, (char *)data, len, + 1, 0); + if (i != BZ_OK) { + printf ("BUNZIP2 ERROR %d - FPGA not loaded!\n", i); + return 1; + } + len = unc_len; + break; +#endif /* CONFIG_BZIP2 */ + default: + printf ("Unimplemented compression type %d\n", hdr.ih_comp); + return 1; + } + + return fpga_load(devnum,(char *)CFG_LOAD_ADDR,len); +} /* Convert bitstream data and load into the fpga */ int fpga_loadbitstream(unsigned long dev, char* fpgadata, size_t size) @@ -248,6 +334,10 @@ rc = fpga_load (dev, fpga_data, data_size); break; + case FPGA_LOADI: + rc = fpga_loadi (dev, fpga_data); + break; + case FPGA_LOADB: rc = fpga_loadbitstream(dev, fpga_data, data_size); break; @@ -298,6 +388,8 @@ op = FPGA_INFO; } else if (!strcmp ("loadb", opstr)) { op = FPGA_LOADB; + } else if (!strcmp ("loadi", opstr)) { + op = FPGA_LOADI; } else if (!strcmp ("load", opstr)) { op = FPGA_LOAD; } else if (!strcmp ("loadmk", opstr)) { @@ -313,12 +405,13 @@ } U_BOOT_CMD (fpga, 6, 1, do_fpga, - "fpga - loadable FPGA image support\n", - "fpga [operation type] [device number] [image address] [image size]\n" - "fpga operations:\n" - "\tinfo\tlist known device information\n" - "\tload\tLoad device from memory buffer\n" - "\tloadb\tLoad device from bitstream buffer (Xilinx devices only)\n" - "\tloadmk\tLoad device generated with mkimage\n" - "\tdump\tLoad device to memory buffer\n"); + "fpga - loadable FPGA image support\n", + "fpga [operation type] [device number] [image address] [image size]\n" + "fpga operations:\n" + "\tinfo\tlist known device information\n" + "\tloadi\tLoad device from u-boot image\n" + "\tload\tLoad device from memory buffer\n" + "\tloadb\tLoad device from bitstream buffer (Xilinx devices only)\n" + "\tloadmk\tLoad device generated with mkimage\n" + "\tdump\tLoad device to memory buffer\n"); #endif /* CONFIG_FPGA && CONFIG_COMMANDS & CFG_CMD_FPGA */ =============== eof ======================= ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-04 20:25 ` eran liberty @ 2007-06-04 20:26 ` eran liberty 2007-06-04 20:30 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-04 20:26 UTC (permalink / raw) To: u-boot this patch correct a warining i got about const casting... ============== sof ===================== diff -x .svn -Nuar u-boot.git/common/fpga.c u-boot-exsw6000/common/fpga.c --- u-boot.git/common/fpga.c 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/common/fpga.c 2007-06-03 22:13:42.000000000 +0300 @@ -64,7 +64,7 @@ /* fpga_no_sup * 'no support' message function */ -static void fpga_no_sup( char *fn, char *msg ) +static void fpga_no_sup(const char *fn,const char *msg ) { if ( fn && msg ) { printf( "%s: No support for %s. CONFIG_FPGA defined as 0x%x.\n", @@ -207,10 +207,6 @@ memset( desc_table, 0, sizeof(desc_table)); PRINTF( "%s: CONFIG_FPGA = 0x%x\n", __FUNCTION__, CONFIG_FPGA ); -#if 0 - PRINTF( "%s: CFG_FPGA_XILINX = 0x%x\n", __FUNCTION__, CFG_FPGA_XILINX ); - PRINTF( "%s: CFG_FPGA_ALTERA = 0x%x\n", __FUNCTION__, CFG_FPGA_ALTERA ); -#endif } /* fpga_count ============== eof ===================== ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-04 20:26 ` eran liberty @ 2007-06-04 20:30 ` eran liberty 2007-06-04 20:32 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-04 20:30 UTC (permalink / raw) To: u-boot This patch adds a safety check to the cfi flash. If the config file defined a flash smaller (maybe intentionally) then the physical one. the cfi will read the actual size from the eprom and will try to initialize a buffer of the wrong size... which will cause a memory over run and unpredicted behaviour. ================ sof =================== diff -x .svn -Nuar u-boot.git/drivers/cfi_flash.c u-boot-exsw6000/drivers/cfi_flash.c --- u-boot.git/drivers/cfi_flash.c 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/drivers/cfi_flash.c 2007-06-03 22:13:42.000000000 +0300 @@ -1281,7 +1281,7 @@ erase_region_count = (tmp & 0xffff) + 1; debug ("erase_region_count = %d erase_region_size = %d\n", erase_region_count, erase_region_size); - for (j = 0; j < erase_region_count; j++) { + for (j = 0; j < erase_region_count && sect_cnt < CFG_MAX_FLASH_SECT; j++) { info->start[sect_cnt] = sector; sector += (erase_region_size * size_ratio); @@ -1323,6 +1323,9 @@ } flash_write_cmd (info, 0, 0, info->cmd_reset); +#if defined(CONFIG_FORCE_FLASH_BANK_SIZE) + info->size = CONFIG_FORCE_FLASH_BANK_SIZE; +#endif return (info->size); } ================ eof =================== ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-04 20:30 ` eran liberty @ 2007-06-04 20:32 ` eran liberty 0 siblings, 0 replies; 20+ messages in thread From: eran liberty @ 2007-06-04 20:32 UTC (permalink / raw) To: u-boot This last patch will add the command bunzip2 to the u-boot shell. allowing to uncompress a buffer in memory (or flash) into another location. ============== sof ================= diff -x .svn -Nuar u-boot.git/common/cmd_bzip2.c u-boot-exsw6000/common/cmd_bzip2.c --- u-boot.git/common/cmd_bzip2.c 1970-01-01 02:00:00.000000000 +0200 +++ u-boot-exsw6000/common/cmd_bzip2.c 2007-06-03 22:37:27.000000000 +0300 @@ -0,0 +1,67 @@ +/* + * (C) Copyright 2007 + * Liberty Eran, Extricom, eran.liberty at gmail.com + * + * 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 + */ + +#include <common.h> +#include <command.h> +#include <bzlib.h> + +#if defined(CONFIG_BZIP2) +int do_bunzip2 ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ + ulong addr, dest, count; + unsigned int destSize; + int rc; + + if (argc != 4) { + printf ("Usage:\n%s\n", cmdtp->usage); + return 1; + } + + /* Check for size specification. + */ + addr = simple_strtoul(argv[1], NULL, 16); + dest = simple_strtoul(argv[2], NULL, 16); + count = simple_strtoul(argv[3], NULL, 16); + + if (count == 0) { + puts ("BUNZIP2 ERROR: Zero length ???\n"); + return 1; + } + + if ((rc = BZ2_bzBuffToBuffDecompress((char*)dest,&destSize,(char*)addr,count,1,0)) != BZ_OK) { + printf ("BUNZIP2 ERROR: %d\n", rc); + return 1; + } + printf("BUNZIP2: decompressed image address & size: 0x%08x 0x%x (%d)\n",dest,destSize,destSize); + return 0; + +} + +U_BOOT_CMD( + bunzip2 , 4, 4, do_bunzip2, + "bunzip2 - decompress bz2 buffers\n", + "src dest size_of_src\n" +); +#endif + + diff -x .svn -Nuar u-boot.git/common/Makefile u-boot-exsw6000/common/Makefile --- u-boot.git/common/Makefile 2007-05-28 02:11:11.000000000 +0300 +++ u-boot-exsw6000/common/Makefile 2007-06-03 22:23:57.000000000 +0300 @@ -39,7 +40,7 @@ cmd_nand.o cmd_net.o cmd_nvedit.o \ cmd_pci.o cmd_pcmcia.o cmd_portio.o \ cmd_reginfo.o cmd_reiser.o cmd_scsi.o cmd_spi.o cmd_universe.o \ - cmd_usb.o cmd_vfd.o \ + cmd_usb.o cmd_vfd.o cmd_bzip2.o \ command.o console.o cyclon2.o devices.o dlmalloc.o docecc.o \ environment.o env_common.o \ env_nand.o env_dataflash.o env_flash.o env_eeprom.o \ ============== eof ================= Thats it, Have fun, Liberty. ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-04 20:19 ` eran liberty 2007-06-04 20:25 ` eran liberty @ 2007-06-05 21:42 ` Andy Fleming 1 sibling, 0 replies; 20+ messages in thread From: Andy Fleming @ 2007-06-05 21:42 UTC (permalink / raw) To: u-boot On 6/4/07, eran liberty <eran.liberty@gmail.com> wrote: > adds the reset register to 85xx immap Applied Andy ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support [not found] ` <ffc2b1d40706041316y7cb61972h1fba91d4ef220ea9@mail.gmail.com> 2007-06-04 20:19 ` eran liberty @ 2007-06-05 5:35 ` eran liberty 2007-06-05 21:11 ` Andy Fleming 1 sibling, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-05 5:35 UTC (permalink / raw) To: u-boot This patch adds my corp board along with an example of the Alter Stratix board specific implementation Alas, it is larger than 40k and will be rejected... here is a temporary link till I will find a better place. http://download.yousendit.com/9380CEAB68FA66F3 If anyone experience problem accessing, mail me. Liberty ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-05 5:35 ` eran liberty @ 2007-06-05 21:11 ` Andy Fleming 2007-06-06 5:41 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: Andy Fleming @ 2007-06-05 21:11 UTC (permalink / raw) To: u-boot +/* FIXME: if tsec does not work try thorwing this in (remove the if 0)*/ +int last_stage_init(void) +{ + /* TSEC0 register the first phy so we dont */ + tsec_initialize(gd->bd, 1, "2"); + tsec_initialize(gd->bd, 2, "3"); + tsec_initialize(gd->bd, 3, "4"); + tsec_initialize(gd->bd, 4, "5"); + tsec_initialize(gd->bd, 5, "6"); + tsec_initialize(gd->bd, 6, "7"); + tsec_initialize(gd->bd, 7, "8"); + tsec_initialize(gd->bd, 8, "9"); + tsec_initialize(gd->bd, 9, "10"); + tsec_initialize(gd->bd, 10, "11"); + + return 0; +} Huh? How can you be initializing 10 tsecs? What part is this? +static void cds_pci_fixup(void *blob) +{ Um...you probably want to rename this. Also, are you sure this is a function you want? This is only if your cpu is hooked up to the pci devices through a PCI slot. * reads a little further. Does some math* + slot = 1; + + for (i=0;i<len;i+=7) { + /* We rotate the interrupt pins so that the mapping + * changes depending on the slot the carrier card is in. + */ + map[3] = ((map[3] + slot - 2) % 4) + 1; + + map+=7; + } Do you realize the net effect of this is nothing? Pins 1-4 will remain 1-4, respectively. Delete this function altogether and (of course) the call to it. +#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff) +#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)) + +#define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff) +#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)) These should be CFG_PCIn_MEM_PHYS instead of CFG_PCIn_MEM_BASE. They're defined to be the same thing, but it is the cpu-physical address we want, not the PCI address. +COBJS := $(BOARD).o \ + ft_board.o \ + fpga.o \ + ../../cds/common/eeprom.o \ + ../../cds/common/via.o Um....that seems shady. Maybe we need to move the via.c code into drivers/ Are you sure you have a VIA chip? static struct tsec_info_struct tsec_info[] = { +#if defined CONFIG_EXSW6000 + {TSEC1_PHY_ADDR, TSEC_GIGABIT, TSEC1_PHYIDX}, + {2, TSEC_GIGABIT, 1}, + {3, TSEC_GIGABIT, 2}, + {4, TSEC_GIGABIT, 3}, + {5, TSEC_GIGABIT, 4}, + {6, TSEC_GIGABIT, 5}, + {7, TSEC_GIGABIT, 6}, + {8, TSEC_GIGABIT, 7}, + {9, TSEC_GIGABIT, 8}, + {10, TSEC_GIGABIT, 9}, + {11, TSEC_GIGABIT, 10}, +#else Are you sure about this? You are claiming that you have 11 TSECs, and that all of them use their own registers to access their PHY. +#if defined(CONFIG_EXSW6000) + priv->regs = (volatile tsec_t *)(TSEC_BASE_ADDR); + priv->phyregs = (volatile tsec_t *)(TSEC_BASE_ADDR); +#else priv->regs = (volatile tsec_t *)(TSEC_BASE_ADDR + index * TSEC_SIZE); priv->phyregs = (volatile tsec_t *)(TSEC_BASE_ADDR + - tsec_info[index].phyregidx * - TSEC_SIZE); + tsec_info[index].phyregidx * + TSEC_SIZE); +#endif 1) Random, bad whitespace change. 2) I am *very* confused by what you did, here. Now it looks like you have set the phyregs back to what would happen if your phyregidx had been 0. And all of your TSECs share a single register set. It looks like you have one TSEC and 11 PHYs. What's going on? ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-05 21:11 ` Andy Fleming @ 2007-06-06 5:41 ` eran liberty 2007-06-06 15:44 ` Andy Fleming 0 siblings, 1 reply; 20+ messages in thread From: eran liberty @ 2007-06-06 5:41 UTC (permalink / raw) To: u-boot Most of what you have chosen to comment on is part of my new board. some of it is still dirty work as it is all on progress and would love to get code review on, but keep in mind its fairly young code. On 6/6/07, Andy Fleming <afleming@gmail.com> wrote: > +/* FIXME: if tsec does not work try thorwing this in (remove the if 0)*/ > +int last_stage_init(void) > +{ > + /* TSEC0 register the first phy so we dont */ > + tsec_initialize(gd->bd, 1, "2"); > + tsec_initialize(gd->bd, 2, "3"); > + tsec_initialize(gd->bd, 3, "4"); > + tsec_initialize(gd->bd, 4, "5"); > + tsec_initialize(gd->bd, 5, "6"); > + tsec_initialize(gd->bd, 6, "7"); > + tsec_initialize(gd->bd, 7, "8"); > + tsec_initialize(gd->bd, 8, "9"); > + tsec_initialize(gd->bd, 9, "10"); > + tsec_initialize(gd->bd, 10, "11"); > + > + return 0; > +} > > Huh? How can you be initializing 10 tsecs? What part is this? > I can and i do. :) > +static void cds_pci_fixup(void *blob) > +{ > > Um...you probably want to rename this. Also, are you sure this is a > function you want? This is only if your cpu is hooked up to the pci > devices through a PCI slot. > > * reads a little further. Does some math* > > + slot = 1; > + > + for (i=0;i<len;i+=7) { > + /* We rotate the interrupt pins so that the mapping > + * changes depending on the slot the carrier card is in. > + */ > + map[3] = ((map[3] + slot - 2) % 4) + 1; > + > + map+=7; > + } > > Do you realize the net effect of this is nothing? Pins 1-4 will > remain 1-4, respectively. Delete this function altogether and (of > course) the call to it. > > +#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff) > +#define LAWAR1 (LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & > LAWAR_SIZE_512M)) > + > +#define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff) > +#define LAWAR2 (LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & > LAWAR_SIZE_512M)) > > These should be CFG_PCIn_MEM_PHYS instead of CFG_PCIn_MEM_BASE. > They're defined to be the same thing, but it is the cpu-physical > address we want, not the PCI address. > this code is not mine (i have not wrote it), I will re look if i need it... > > +COBJS := $(BOARD).o \ > + ft_board.o \ > + fpga.o \ > + ../../cds/common/eeprom.o \ > + ../../cds/common/via.o > I need to remove both eeprom.o via.o. I do not use them.. but as it is right now, removing them breaks the build. It is in my todo list. > > Um....that seems shady. Maybe we need to move the via.c code into > drivers/ Are you sure you have a VIA chip? > > static struct tsec_info_struct tsec_info[] = { > +#if defined CONFIG_EXSW6000 > + {TSEC1_PHY_ADDR, TSEC_GIGABIT, TSEC1_PHYIDX}, > + {2, TSEC_GIGABIT, 1}, > + {3, TSEC_GIGABIT, 2}, > + {4, TSEC_GIGABIT, 3}, > + {5, TSEC_GIGABIT, 4}, > + {6, TSEC_GIGABIT, 5}, > + {7, TSEC_GIGABIT, 6}, > + {8, TSEC_GIGABIT, 7}, > + {9, TSEC_GIGABIT, 8}, > + {10, TSEC_GIGABIT, 9}, > + {11, TSEC_GIGABIT, 10}, > +#else > I thought i am doing something shady as well stacking all mdio on the register of tsec0... but then i moved on to linux and saw they do exactly the same. :) > > Are you sure about this? You are claiming that you have 11 TSECs, and > that all of them use their own registers to access their PHY. > > > +#if defined(CONFIG_EXSW6000) > + priv->regs = (volatile tsec_t *)(TSEC_BASE_ADDR); > + priv->phyregs = (volatile tsec_t *)(TSEC_BASE_ADDR); > +#else > priv->regs = (volatile tsec_t *)(TSEC_BASE_ADDR + index * TSEC_SIZE); > priv->phyregs = (volatile tsec_t *)(TSEC_BASE_ADDR + > - tsec_info[index].phyregidx * > - TSEC_SIZE); > + tsec_info[index].phyregidx * > + TSEC_SIZE); > +#endif > > 1) Random, bad whitespace change. would fix this > 2) I am *very* confused by what you did, here. Now it looks like you > have set the phyregs back to what would happen if your phyregidx had > been 0. And all of your TSECs share a single register set. It looks > like you have one TSEC and 11 PHYs. What's going on? > very simple. All mdio are accessed via the same registers. the one that are in the memory space of eTSEC0 thanks for the in depth review. I appreciate the time you took to provide these insight. Liberty ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-06 5:41 ` eran liberty @ 2007-06-06 15:44 ` Andy Fleming 2007-06-06 17:23 ` eran liberty 0 siblings, 1 reply; 20+ messages in thread From: Andy Fleming @ 2007-06-06 15:44 UTC (permalink / raw) To: u-boot On 6/6/07, eran liberty <eran.liberty@gmail.com> wrote: > Most of what you have chosen to comment on is part of my new board. > some of it is still dirty work as it is all on progress and would love > to get code review on, but keep in mind its fairly young code. > > On 6/6/07, Andy Fleming <afleming@gmail.com> wrote: > > +/* FIXME: if tsec does not work try thorwing this in (remove the if 0)*/ > > +int last_stage_init(void) > > +{ > > + /* TSEC0 register the first phy so we dont */ > > + tsec_initialize(gd->bd, 1, "2"); > > + tsec_initialize(gd->bd, 2, "3"); > > + tsec_initialize(gd->bd, 3, "4"); > > + tsec_initialize(gd->bd, 4, "5"); > > + tsec_initialize(gd->bd, 5, "6"); > > + tsec_initialize(gd->bd, 6, "7"); > > + tsec_initialize(gd->bd, 7, "8"); > > + tsec_initialize(gd->bd, 8, "9"); > > + tsec_initialize(gd->bd, 9, "10"); > > + tsec_initialize(gd->bd, 10, "11"); > > + > > + return 0; > > +} > > > > Huh? How can you be initializing 10 tsecs? What part is this? > > > I can and i do. :) I still debate that point. The 8548 has *4* eTSECs. Not 11. At best, you've created 11 virtual tsecs, each with a different PHY. Though how you configure which one is physically connected is beyond me. > > +COBJS := $(BOARD).o \ > > + ft_board.o \ > > + fpga.o \ > > + ../../cds/common/eeprom.o \ > > + ../../cds/common/via.o > > > > I need to remove both eeprom.o via.o. I do not use them.. but as it is > right now, removing them breaks the build. It is in my todo list. Ok, good > > static struct tsec_info_struct tsec_info[] = { > > +#if defined CONFIG_EXSW6000 > > + {TSEC1_PHY_ADDR, TSEC_GIGABIT, TSEC1_PHYIDX}, > > + {2, TSEC_GIGABIT, 1}, > > + {3, TSEC_GIGABIT, 2}, > > + {4, TSEC_GIGABIT, 3}, > > + {5, TSEC_GIGABIT, 4}, > > + {6, TSEC_GIGABIT, 5}, > > + {7, TSEC_GIGABIT, 6}, > > + {8, TSEC_GIGABIT, 7}, > > + {9, TSEC_GIGABIT, 8}, > > + {10, TSEC_GIGABIT, 9}, > > + {11, TSEC_GIGABIT, 10}, > > +#else > > > > I thought i am doing something shady as well stacking all mdio on the > register of tsec0... but then i moved on to linux and saw they do > exactly the same. :) Yes, because only tsec0's MDIO pins are exposed from the package. The others only connect to the internal TBI PHY, which is useful for certain things, but that's not what you've done here. > > 2) I am *very* confused by what you did, here. Now it looks like you > > have set the phyregs back to what would happen if your phyregidx had > > been 0. And all of your TSECs share a single register set. It looks > > like you have one TSEC and 11 PHYs. What's going on? > > > > very simple. All mdio are accessed via the same registers. the one > that are in the memory space of eTSEC0 Yes, that's what phyregidx is for. It defines which registers are used for PHY accesses. But you've also set up 11 tsecs all using the same register space. That's overkill. It looks like you have one tsec, and you want to be able to choose which PHY it is using by creating one driver instances for each PHY. So all you really need is one driver instance, and the ability to change which PHY the tsec configures. That shouldn't be too difficult. If I'm wrong, then I'm still confused as to what the code changes to tsec are doing. Andy ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-06-06 15:44 ` Andy Fleming @ 2007-06-06 17:23 ` eran liberty 0 siblings, 0 replies; 20+ messages in thread From: eran liberty @ 2007-06-06 17:23 UTC (permalink / raw) To: u-boot On 6/6/07, Andy Fleming <afleming@gmail.com> wrote: > On 6/6/07, eran liberty <eran.liberty@gmail.com> wrote: > > Most of what you have chosen to comment on is part of my new board. > > some of it is still dirty work as it is all on progress and would love > > to get code review on, but keep in mind its fairly young code. > > > > On 6/6/07, Andy Fleming <afleming@gmail.com> wrote: > > > +/* FIXME: if tsec does not work try thorwing this in (remove the if 0)*/ > > > +int last_stage_init(void) > > > +{ > > > + /* TSEC0 register the first phy so we dont */ > > > + tsec_initialize(gd->bd, 1, "2"); > > > + tsec_initialize(gd->bd, 2, "3"); > > > + tsec_initialize(gd->bd, 3, "4"); > > > + tsec_initialize(gd->bd, 4, "5"); > > > + tsec_initialize(gd->bd, 5, "6"); > > > + tsec_initialize(gd->bd, 6, "7"); > > > + tsec_initialize(gd->bd, 7, "8"); > > > + tsec_initialize(gd->bd, 8, "9"); > > > + tsec_initialize(gd->bd, 9, "10"); > > > + tsec_initialize(gd->bd, 10, "11"); > > > + > > > + return 0; > > > +} > > > > > > Huh? How can you be initializing 10 tsecs? What part is this? > > > > > I can and i do. :) > > > I still debate that point. The 8548 has *4* eTSECs. Not 11. At > best, you've created 11 virtual tsecs, each with a different PHY. > Though how you configure which one is physically connected is beyond > me. > > > > +COBJS := $(BOARD).o \ > > > + ft_board.o \ > > > + fpga.o \ > > > + ../../cds/common/eeprom.o \ > > > + ../../cds/common/via.o > > > > > > > I need to remove both eeprom.o via.o. I do not use them.. but as it is > > right now, removing them breaks the build. It is in my todo list. > > > Ok, good > > > > static struct tsec_info_struct tsec_info[] = { > > > +#if defined CONFIG_EXSW6000 > > > + {TSEC1_PHY_ADDR, TSEC_GIGABIT, TSEC1_PHYIDX}, > > > + {2, TSEC_GIGABIT, 1}, > > > + {3, TSEC_GIGABIT, 2}, > > > + {4, TSEC_GIGABIT, 3}, > > > + {5, TSEC_GIGABIT, 4}, > > > + {6, TSEC_GIGABIT, 5}, > > > + {7, TSEC_GIGABIT, 6}, > > > + {8, TSEC_GIGABIT, 7}, > > > + {9, TSEC_GIGABIT, 8}, > > > + {10, TSEC_GIGABIT, 9}, > > > + {11, TSEC_GIGABIT, 10}, > > > +#else > > > > > > > I thought i am doing something shady as well stacking all mdio on the > > register of tsec0... but then i moved on to linux and saw they do > > exactly the same. :) > > > Yes, because only tsec0's MDIO pins are exposed from the package. The > others only connect to the internal TBI PHY, which is useful for > certain things, but that's not what you've done here. > > > > > 2) I am *very* confused by what you did, here. Now it looks like you > > > have set the phyregs back to what would happen if your phyregidx had > > > been 0. And all of your TSECs share a single register set. It looks > > > like you have one TSEC and 11 PHYs. What's going on? > > > > > > > very simple. All mdio are accessed via the same registers. the one > > that are in the memory space of eTSEC0 > > > Yes, that's what phyregidx is for. It defines which registers are > used for PHY accesses. But you've also set up 11 tsecs all using the > same register space. That's overkill. It looks like you have one > tsec, and you want to be able to choose which PHY it is using by > creating one driver instances for each PHY. So all you really need is > one driver instance, and the ability to change which PHY the tsec > configures. That shouldn't be too difficult. > > If I'm wrong, then I'm still confused as to what the code changes to > tsec are doing. > > Andy > you are not entirely wrong... but not entirely right either. I do have 1 Tsec which connects via phy 0. I also have 10 more Ethernet phys which will be used by my hardware (not Tsec), which i need to access and configure. The slick solution was to write an my own device with miiphy_read & write callback and not to register a complete TSEC for each one. (indeed an over kill) Yet, I lose nothing doing just that and got it up and running... so i am happy with it as it is. hope i made myself clearer. Liberty ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot-Users] Altera Stratix II support 2007-05-31 23:10 ` eran liberty 2007-05-31 23:46 ` Wolfgang Denk @ 2007-06-01 16:47 ` David Hawkins 1 sibling, 0 replies; 20+ messages in thread From: David Hawkins @ 2007-06-01 16:47 UTC (permalink / raw) To: u-boot > I have successfully integrated Altera Stratix II (fast passive > parallel) into the existing FPGA framework within u-boot. Hi Eran, Sounds great! I'm slammed at the moment working on hardware, so won't get to absorb your work just yet. I notice a few comments from Wolfgang on using the git head, and coding style comments, so I guess you'll be working on those. Just to refresh me, this is an 8548 with a Stratix II configured by bit-banging I/O on the processor? Is the FPGA on the local bus, or is it a PCI device that U-Boot needs to configure? Out of interest, what's the FPGA being used for? From your files ... extricom/exsw6000, and http://www.extricom.com, it looks like this is a new wireless lan based product. I've got schematics that should have been kicked out the door months ago ... so I'll be back to those for a few more weeks :( As soon as I put my software-developer hat back on I'll look in more detail at your patch, and see if I can hack together the MPC8349E-MDS-PB and a Stratix II kit to see if I can configure the FPGA. Cheers Dave ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2007-06-06 17:23 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-05-17 21:49 [U-Boot-Users] Altera Stratix II support eran liberty
2007-05-17 22:02 ` David Hawkins
2007-05-18 5:46 ` eran liberty
2007-05-18 15:52 ` David Hawkins
2007-05-31 23:10 ` eran liberty
2007-05-31 23:46 ` Wolfgang Denk
2007-06-04 20:09 ` eran liberty
2007-06-04 20:13 ` eran liberty
[not found] ` <ffc2b1d40706041316y7cb61972h1fba91d4ef220ea9@mail.gmail.com>
2007-06-04 20:19 ` eran liberty
2007-06-04 20:25 ` eran liberty
2007-06-04 20:26 ` eran liberty
2007-06-04 20:30 ` eran liberty
2007-06-04 20:32 ` eran liberty
2007-06-05 21:42 ` Andy Fleming
2007-06-05 5:35 ` eran liberty
2007-06-05 21:11 ` Andy Fleming
2007-06-06 5:41 ` eran liberty
2007-06-06 15:44 ` Andy Fleming
2007-06-06 17:23 ` eran liberty
2007-06-01 16:47 ` David Hawkins
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox