diff options
221 files changed, 12293 insertions, 2440 deletions
@@ -1,3 +1,1354 @@ +commit c440bfe6d6d92d66478a7e84402b31f48413617b +Author: Stefan Roese <sr@denx.de> +Date:	Wed Jun 6 11:42:13 2007 +0200 + +    ppc4xx: Add NAND booting support for AMCC Acadia (405EZ) eval board + +    This patch adds NAND booting support for the AMCC Acadia eval board. + +    Please make sure to configure jumper J7 to position 2-3 when booting +    from NOR, and to position 1-2 when booting for NAND. + +    I also added a board command to configure the I2C bootstrap EEPROM +    values. Right now only 267MHz is support for booting either via NOR +    or NAND FLASH. Here the usage: + +    => bootstrap 267 nor	;to configure the board for 267MHz NOR booting +    => bootstrap 267 nand	;to configure the board for 267MHz NNAND booting + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 32922cdc470fdfd39bea0c1c4f582d3fb340421e +Author: Ed Swarthout <Ed.Swarthout@freescale.com> +Date:	Tue Jun 5 12:30:52 2007 -0500 + +    mpc8641 image size cleanup + +    e600 does not have a bootpg restriction. +    Move the version string to beginning of image at fff00000. +    Resetvec.S is not needed. +    Update flash copy instructions. +    Add tftpflash env variable + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit e3cbe1f93c5722f8ebbad468e30c069a2b511097 +Author: Benoît Monin <bmonin@adeneo.eu> +Date:	Mon Jun 4 08:36:05 2007 +0200 + +    [PATCH] Fix ppc4xx bootstrap letter displayed on startup + +    The attached patch is mainly cosmetic, allowing u-boot to +    display the correct bootstrap option letter according to the +    datasheets. + +    The original patch was extended with 405EZ support by Stefan +    Roese. + +    Signed-off-by: Benoit Monin <bmonin@adeneo.eu> +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 18d156eb37c90fadc8ec7a81a3b89176161f85b7 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 16:18:17 2007 +0200 + +    ppc4xx: Add missing file for Bamboo NAND booting support + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 155a96478a0881e6da96cbbbcf34952d6a3b1b4b +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:58:19 2007 +0200 + +    ppc4xx: Undo Sequoia patch for dynamic EBC speed support of 83MHz + +    This patch undoes the patch by Jeff Mann with commit-id ada4697d. As +    suggested by AMCC it is not recommended to dynamically change the EBC +    speed after bootup. So we undo this change to be on the safe side. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 9d9096043e8f713d4bf1743d32e1459e6a11644b +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:29:04 2007 +0200 + +    ppc4xx: Update Sequoia NAND booting support with ECC + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit cf959c7d6687567c308e366e9581e1a5aff5cc5b +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:27:11 2007 +0200 + +    ppc4xx: Add NAND booting support for AMCC Bamboo (440EP) eval board + +    This patch adds NAND booting support for the AMCC Bamboo eval board. +    Since the NAND-SPL boot image is limited to 4kbytes, this version +    only supports the onboard 64MBytes of DDR. The DIMM modules can't be +    supported, since the setup code for I2C DIMM autodetection and +    configuration is too big for this NAND bootloader. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 42be56f53c8b107868e6125c8524ae84293e95a7 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:23:04 2007 +0200 + +    NAND: Add ECC support to NAND booting support in nand_spl/nand_boot.c + +    The U-Boot NAND booting support is now extended to support ECC +    upon loading of the NAND U-Boot image. + +    Tested on AMCC Sequoia (440EPx) and Bamboo (440EP). + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit a471db07fbb65a841ffc9f4f112562b945230f98 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:19:29 2007 +0200 + +    ppc4xx: Prepare Bamboo port for NAND booting support + +    This patch updates the "normal" Bamboo NOR booting port, so +    that it is compatible with the coming soon NAND booting +    Bamboo port. + +    It also enables the 2nd NAND flash on the Bamboo. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 53ad02103fb8be4138a9937a8ab91fcdff7b4987 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:16:58 2007 +0200 + +    ppc4xx: Update in_be32() functions and friends to latest Linux version + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 91da09cfbce0c1de05d6d84aa8363d666fa7ea3c +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:15:12 2007 +0200 + +    NAND: Add hardware ECC support to the PPC4xx NAND driver ndfc.c + +    This patch adds hardware ECC support to the NDFC driver. It also +    changes the register access from using the "simple" in32/out32 +    functions to the in_be32/out_be32 functions, which make sure +    that the access is correctly synced. This is the only recommended +    access to SoC registers in the current Linux kernel. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 17b5e862287cca76f19dcf8b741e61a7d06617f2 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:12:15 2007 +0200 + +    NAND: Update nand_ecc.c to latest Linux version + +    This patch updates the nand_ecc code to the latest Linux version. +    The main reason for this is the more compact code. This makes +    it possible to include the ECC code into the NAND bootloader +    image (NAND_SPL) for PPC4xx. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit d2d432760d2199d0e8558fdd9d1789b8131abcf7 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 15:09:50 2007 +0200 + +    ppc4xx: 44x DDR driver code cleanup and small fix for Bamboo + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit e4bbed2803a2ad0521c7362f5d3e065f99abaedc +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 13:45:24 2007 +0200 + +    ppc4xx: Change Luan config file to support ECC + +    With the updated 44x DDR2 driver the Luan board now supports +    ECC generation and checking. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 7187db73491c8de0fb56efb5e5134ba5ec443089 +Author: Stefan Roese <sr@denx.de> +Date:	Fri Jun 1 13:45:00 2007 +0200 + +    ppc4xx: Update 44x_spd_ddr2 code (440SP/440SPe) + +    Add config option for 180 degree advance clock control as needed +    for the AMCC Luan eval board. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit ee1529838abbfaa35f14e3ffbeaaba693159475f +Author: Wolfgang Denk <wd@denx.de> +Date:	Thu May 31 17:20:09 2007 +0200 + +    Add support for STX GP3SSA (stxssa) Board with 4 MiB flash. + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 7049288fb1f16f1b317140226cdebd07bd416395 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 17:26:46 2007 +0200 + +    Motion-PRO: Code cleanup, fix of a typo in OF_STDOUT_PATH. + +    Signed-off-by: Bartlomiej Sieka <tur@semihalf.com> + +commit 4520fd4d2c450da49637216aa0e53739b61c60ac +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 17:06:36 2007 +0200 + +    Motion-PRO: Add support for redundant environment. + +    Enable redundant environment, add a MTD partition for it; also add env. +    variable command for passing MTD partitions to the kernel command line. + +    Signed-off-by: Piotr Kruszynski <ppk@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit a26eabeec31746f06d309103690892805696e344 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 17:05:11 2007 +0200 + +    Motion-PRO: Change maximum console buffer size from 256 to 1024 bytes. + +    Allow passing longer command line to the kernel - useful especially +    for passing MTD partition layout. + +    Signed-off-by: Piotr Kruszynski <ppk@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit 9160b96f71483a116de81c68985e8ee306d36764 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 17:04:18 2007 +0200 + +    Fix: Add missing NULL termination in strings expanded by macros parser. + +    Signed-off-by: Piotr Kruszynski <ppk@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit 630ec84aef7228fc1dbfb38dec78541403a786cd +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 17:03:37 2007 +0200 + +    Motion-PRO: Update EEPROM's page write bits and write delay. + +    Change EEPROM configuration according to the datasheet: "The 24C01A and 24C02A +    have a page write capability of two bytes", and "This device offers fast (1ms) +    byte write". Add 3ms of extra delay. + +    Signed-off-by: Piotr Kruszynski <ppk@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit c00125e07c1ebc125bab40e1e18bceed8be0c162 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 16:58:45 2007 +0200 + +    MPC5XXX, Motion-PRO: Fix PHY initialization problem. + +    After being reset in mpc5xxx_fec_init_phy(), PHY goes into FX mode, in which +    networking does not function. This commit switches PHY to TX mode by clearing +    the FX_SEL bit of Mode Control Register. It also reverses commit +    008861a2f3ef2c062744d733787c7e530a1b8761, i.e., a temporary workaround. + +    Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit 93b78f534a6e708b4cf1a4ffb4d8438c67a007db +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 16:57:15 2007 +0200 + +    Motion-PRO: Add support for the temperature sensor. + +    Signed-off-by: Piotr Kruszynski <ppk@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit c75e639630cc132dc19cd1ecda5922c0db0bfbba +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 16:55:23 2007 +0200 + +    Motion-PRO: Add displaying of CPLD revision information during boot. + +    Signed-off-by: Jan Wrobel <wrr@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit c99512d6bd3973f01ca2fc4896d829b46e68f150 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 16:53:43 2007 +0200 + +    MPC5xxx: Change names of defines related to IPB and PCI clocks. + +    Both CFG_PCISPEED_66 and CFG_IPBSPEED_133 are misnamed, as defining +    them does not cause PCI or IPB clocks to run at the specified speed. +    Instead, they configure divisors used to calculate said clocks. This +    patch renames the defines according to their real function. + +    Signed-off-by: Grzegorz Bernacki <gjb@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit a11c0b85dc3664bb3c1e781137118730c8f619ab +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Sun May 27 16:51:48 2007 +0200 + +    Motion-PRO: Add LED support. + +    Signed-off-by: Jan Wrobel <wrr@semihalf.com> +    Signed-off-by: Marian Balakowicz <m8@semihalf.com> +    Acked-by: Bartlomiej Sieka <tur@semihalf.com> + +commit d756894722c888d09a9fa1df8323753772d3dcce +Author: Stefan Roese <sr@denx.de> +Date:	Thu May 24 09:49:00 2007 +0200 + +    ppc4xx: Fix small 405EZ OCM initilization bug in start.S + +    As pointed out by Bruce Adler <bruce.adler@acm.org> this patch +    fixes a small bug in the 405EZ OCM initialization. Thanks for +    spotting. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 5d4a179013d59a76446462e1eb0a969fba63eb81 +Author: Stefan Roese <sr@denx.de> +Date:	Thu May 24 08:22:09 2007 +0200 + +    ppc4xx: Update AMCC Acadia support for board revision 1.1 + +    This patch updates the Acadia (405EZ) support for the new 1.1 board +    revision. It also adds support for NAND FLASH via the 4xx NDFC. + +    Please note that the jumper J7 must be in position 2-3 for this +    NAND support. Position 1-2 is for NAND booting only. NAND booting +    support will follow later. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 9f0077abd69f7a7c756a915b961037302be3e6f2 +Author: Stefan Roese <sr@denx.de> +Date:	Tue May 22 12:48:09 2007 +0200 + +    ppc4xx: Use do { ... } while (0) for CPR & SDR access macros + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 6f3dfc139a838b0841c151efe00ad47db2366e79 +Author: Stefan Roese <sr@denx.de> +Date:	Tue May 22 12:46:10 2007 +0200 + +    ppc4xx: Add 405 support to 4xx NAND driver ndfc.c + +    This patch adds support for 405 PPC's to the 4xx NAND driver +    ndfc.c. This is in preparation for the new AMCC 405EZ. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 10603d76767426be803dadd4fb688b97eb69481c +Author: Stefan Roese <sr@denx.de> +Date:	Mon May 21 07:41:22 2007 +0200 + +    ppc4xx: Fix problem in 405EZ OCM initialization + +    As spotted by Bruce Adler this patch fixes an initialization problem +    for the 405EZ OCM. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 3e3b956906eba9e4ad7931581ecedaad10eccce8 +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Fri May 18 16:47:03 2007 +0100 + +    Reduce line lengths to 80 characters max. + +commit 93ef45c9ddfdd9fc17c4e74bd8e2f2456580eb72 +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Fri May 18 14:34:07 2007 +0100 + +    Makefile permissions + +commit 1443a31457d68f7e8f0b9403e9832ec1e79dc59d +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Fri May 18 14:33:11 2007 +0100 + +    Makefile permissions + +commit 70124c2602ae2d4c5d3dba05b482d91548242de8 +Author: Stefano Babic <sbabic@denx.de> +Date:	Wed May 16 14:49:12 2007 +0200 + +    Fix compile problem cause my Microblaze merge + +    Signed-off-by: Stefano Babic <sbabic@denx.de> + +commit ada4697d0230d6da552867777f98a67ec3ba2579 +Author: Jeffrey Mann <mannj@embeddedplanet.com> +Date:	Wed May 16 13:23:10 2007 +0200 + +    [PATCH] Run new sequoia boards with an EBC speed of 83MHz + +    Because the Sequoia board does not boot with an EBC faster than 66MHz, +    the clock divider are changed after the initial boot process. + +    This allows for maximum clocking speeds  to be achieved on newer boards. +    Sequoia boards with 666.66 MHz processors require that the EBC divider +    be set to 3 in order to start the initial boot process at a slower EBC +    speed. After the initial boot process, the divider can be set back to 2, +    which will cause the boards to run at 83.333MHz. This is backward +    compatible with boards with 533.33 MHz processors, as these boards will +    already be set with an EBC divider of 2. + +    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com> + +commit a7676ea7732f3c596805079fed7e5c9fac652cfc +Author: Wolfgang Denk <wd@denx.de> +Date:	Wed May 16 01:16:53 2007 +0200 + +    Minor Coding Style cleanup, update CHANGELOG. + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit d62f64cc23a940eafe712c776b3249e4160753d1 +Author: Wolfgang Denk <wd@denx.de> +Date:	Wed May 16 00:13:33 2007 +0200 + +    Coding Style Cleanup, new CHANGELOG + +commit 61936667e86a250ae12fd2dc189d3588f0a59e0b +Author: Stefan Roese <sr@denx.de> +Date:	Fri May 11 12:01:49 2007 +0200 + +    ppc4xx: Add mtcpr/mfcpr access macros + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 343c48bd84606c4025c8a7c7263fda465d6e284c +Author: Stefan Roese <sr@denx.de> +Date:	Fri May 11 12:01:06 2007 +0200 + +    ppc4xx: Set bd->bi_pci_busfreq on 440EPx/GRx too + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 7d98ba770a7eaefa29ce927f31a0956df85bf650 +Author: Piotr Kruszynski <ppk@semihalf.com> +Date:	Thu May 10 16:55:52 2007 +0200 + +    [Motion-PRO] Add MTD and JFFS2 support, also add default partition +    definition. + +commit 65fb6a676e821f9570a2a376dc204bf611ce5f81 +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Wed May 9 11:42:44 2007 +0100 + +    Add the board directory for SMN42 + +commit 160131bf965785419626df6c388729fe0b597992 +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Wed May 9 11:41:58 2007 +0100 + +    Add the files for the SMN42 board + +commit 5c6d2b5a500f8c49670de8910150b78a41f781fc +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Wed May 9 11:40:34 2007 +0100 + +    Remove the deleted files for the SMN42 patch + +commit b0d8f5bf0d215adc9424cb228b2484dbf07f7761 +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Wed May 9 11:37:56 2007 +0100 + +    New board SMN42 branch + +commit 29f3be0caf0799ca6b89dfd9824c15619a50000f +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Wed May 9 10:24:38 2007 +0100 + +    Makefile permissions + +commit b84289b595731e8851df46e893845cc1322c9b9b +Author: Ed Swarthout <Ed.Swarthout@freescale.com> +Date:	Tue May 8 14:17:07 2007 -0500 + +    8641hpcn: Fix Makefile after moving pixis to board/freescale. + +    The OBJTREE != SRCTREE build scenario was broken. +    This fixes it. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit e69f66c6ebe82bbbd1da766bc4eda40ec7ee5af1 +Author: Michal Simek <monstr@monstr.eu> +Date:	Tue May 8 15:57:43 2007 +0200 + +    add: reading special purpose registers + +commit 1a50f164beb065f360fbddb76029607d6b099698 +Author: Michal Simek <monstr@monstr.eu> +Date:	Tue May 8 14:52:52 2007 +0200 + +    add: Microblaze V5 exception handling + +commit ab874d5047e5d30dbc1e517ff26083efffa98ecb +Author: Michal Simek <monstr@monstr.eu> +Date:	Tue May 8 14:39:11 2007 +0200 + +    add: FSL control read and write + +commit de1de02a7cbf05e6b63e0d8ffc624f12493f6ba3 +Author: Piotr Kruszynski <ppk@semihalf.com> +Date:	Tue May 8 13:05:44 2007 +0200 + +    [Motion-PRO] Add support for I2C, EEPROM and RTC. + +commit fa5c2ba123b1bf88455bfc21db5e786ca045029d +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Tue May 8 10:23:56 2007 +0200 + +    [Motion-PRO] Add ATA support. Add CF-booting commands to the default +    environment. + +commit 06241d50a3ab1b20a0b08baeeaffcaa23ae4b839 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Tue May 8 09:39:12 2007 +0200 + +    [Motion-PRO] Change IPB clock frequency from 50MHz to 100MHz. This +    eliminates networking problems in Linux (timeouts). + +commit 1f1369c34b629be94702684d41d3fddf0f6193e7 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Tue May 8 09:21:57 2007 +0200 + +    [Motion-PRO] Enable Flat Device Tree support and modify default environment +    to allow booting of FDT-expecting kernels. + +commit fb05f6da35ea1c15c553abe6f23f656bf18dc5db +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 23:58:31 2007 +0200 + +    new: USE_MSR_INTR support + +commit 008861a2f3ef2c062744d733787c7e530a1b8761 +Author: Bartlomiej Sieka <tur@semihalf.com> +Date:	Mon May 7 22:36:15 2007 +0200 + +    [MPC5xxx] There are networking problems on the Motion-PRO board with +    current PHY initalization code (tftp timeouts all the time). This commit +    temporarily disables PHY initalization sequence to make the networking +    operational, until a fix is found. + +commit abca901869c3760b6c5fecb825db6c1d91a78a93 +Author: Wolfgang Denk <wd@denx.de> +Date:	Mon May 7 22:10:36 2007 +0200 + +    Get rid of duplicated file (see include/configs/sbc8560.h instead) + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 207b7b2c9d9752e0f6478c30c29b7087f6e6cbb6 +Author: Wolfgang Denk <wd@denx.de> +Date:	Mon May 7 22:07:08 2007 +0200 + +    Get rid of duplicated file (see doc/README.SBC8560 instead) + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit a7bac7e9b57ba948051beb19ec5be3a75ce75383 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 19:43:10 2007 +0200 + +    fix: read and write MSR - repair number of parameters + +commit 193b4a3bb3acaddf798da8de0da05d94ba8774ee +Author: Jeffrey Mann <mannj@embeddedplanet.com> +Date:	Mon May 7 19:42:49 2007 +0200 + +    [PATCH] ppc4xx: Fix CONFIG_SYS_CLK_FREQ definition in Sequoia config file + +    A '3' got cut off in the formatting of the last patch to automatically +    change the clock speed of the system clock on sequoia board. + +    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com> +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 19bf1fbad7f19d5a120be9b1daf136e052fcab39 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 19:33:51 2007 +0200 + +    new: fsl interrupt support +    FSL_Has_data is connected to INTC. + +commit 792032baa7d625e34c981ab6df521911bd8dc861 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 19:30:12 2007 +0200 + +    fix: interrupt handler +    remove asm code + +commit f3f001a341ef185d0f13841be5b5dc3395aacc31 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 19:25:08 2007 +0200 + +    fix: remove asm code + +commit fb7c2dbef02c9f6f8d7b04ec4c2bfb91418b9c01 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 19:12:43 2007 +0200 + +    fix: clean interrupt + +commit 42efed6130c8fcf7da881385b5427065d2801757 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 17:22:25 2007 +0200 + +    fix: interrupt handler for multiple sources + +commit 48fbd3a4cdabbebc1debd7eed73c00c2caf914f6 +Author: Michal Simek <monstr@monstr.eu> +Date:	Mon May 7 17:11:09 2007 +0200 + +    new: add writing to msr register + +commit ac4cd59d59c9bf3f89cb7a344abf8184d678f562 +Author: Timur Tabi <timur@freescale.com> +Date:	Sat May 5 08:12:30 2007 +0200 + +    5xxx: write MAC address to mac-address and local-mac-address + +    Some device trees have a mac-address property, some have local-mac-address, +    and some have both.  To support all of these device trees, ftp_cpu_setup() +    should write the MAC address to mac-address and local-mac-address, if they +    exist. + +    Signed-off-by: Timur Tabi <timur@freescale.com> +    Acked-by: Grant Likely <grant.likely@secretlab.ca> + +commit a9d87e2707dcb249f6bb7f7ff7e00acd8cda9fd2 +Author: Grzegorz Wianecki <grzegorz.wianecki@gmail.com> +Date:	Sun Apr 29 14:01:54 2007 +0200 + +    [PATCH] Use PVR to distinguish MPC5200B from MPC5200 in boot message + +    MPC5200B systems are incorrectly reported as MPC5200 in U-Boot start-up +    message. Use PVR to distinguish between the two variants, and print proper CPU +    information. + +    Signed-off-by: Grzegorz Wianecki <grzegorz.wianecki@gmail.com> +    Signed-off-by: Bartlomiej Sieka <tur@semihalf.com> +    Signed-off-by: Grant Likely <grant.likely@secretlab.ca> + +commit 4ec5bd55ed1ffa91a774af298769621f4fbb18c1 +Author: Ladislav Michl <ladis@linux-mips.org> +Date:	Wed Apr 25 16:01:26 2007 +0200 + +    [PATCH] simplify silent console + +    Signed-off-by: Ladislav Michl <ladis@linux-mips.org> +    Acked-by: Stefan Roese <sr@denx.de> + +commit b7598a43f2b421a713d8135e98a42c37d9eb9df0 +Author: Sergei Shtylyov <sshtylyov@ru.mvista.com> +Date:	Mon Apr 23 15:30:39 2007 +0200 + +    [PATCH] Avoid assigning PCI resources from zero address + +    If a PCI IDE card happens to get a zero address assigned to it, the Linux IDE +    core complains and IDE drivers fails to work.  Also, assigning zero to a BAR +    was illegal according to PCI 2.1 (the later revisions seem to have excluded the +    sentence about "0" being considered an invalid address) -- so, use a reasonable +    starting value of 0x1000 (that's what the most Linux archs are using). + +    Alternatively, one might have fixed the calls to pci_set_region() individually +    (some code even seems to have taken care of this issue) but that would have +    been a lot more work. :-) + +    Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> +    Acked-by: Stefan Roese <sr@denx.de> + +commit 9ffd451afeb08e5be7ddae680487ec962b2bca25 +Author: Jeffrey Mann <mannj@embeddedplanet.com> +Date:	Mon Apr 23 14:00:11 2007 +0200 + +    [patch] setenv(...) can delete environmentalvariables + +    update setenv() function so that entering a NULL value for the +    variable's value will delete the environmental variable + +    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com> +    Acked-by: Stefan Roese <sr@denx.de> + +commit ebd0a0ae05a44769c4e27458ad4e9f3438250443 +Author: Mike Frysinger <vapier@gentoo.org> +Date:	Mon Apr 23 13:54:24 2007 +0200 + +    [patch] use unsigned char in smc91111 driver for mac + +    the v_mac variable in the smc91111 driver is declared as a signed char ... +    this causes problems when one of the bytes in the MAC is "signed" like 0xE0 +    because when it gets printed out, you get a display like: +    0xFFFFFFE0 and that's no good + +    Signed-off-by: Mike Frysinger <vapier@gentoo.org> + +commit ffc50f9bb194343c6303517a517708457a5eb6b8 +Author: Michal Simek <monstr@monstr.eu> +Date:	Sat May 5 18:54:42 2007 +0200 + +    new: FSL and MSR support #2 + +commit f7e2e0eb0668136305f78bb9c21be79b48a34247 +Author: Michal Simek <monstr@monstr.eu> +Date:	Sat May 5 18:27:16 2007 +0200 + +    new: FSL and MSR support + +commit 2f15278c2eb911c668b4fe562130b78cf554d139 +Author: Wolfgang Denk <wd@denx.de> +Date:	Sat May 5 18:23:11 2007 +0200 + +    Coding stylke cleanup; update CHANGELOG. + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 885ec89b648a899a2f32393fd3ffd9f7234c4402 +Author: Wolfgang Denk <wd@denx.de> +Date:	Sat May 5 18:05:02 2007 +0200 + +    Add STX GP3 SSA board to MAKEALL script; update CHANGELOG. + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 5499645b3fe17a548af9dfc479ca6e2455f179a2 +Author: Wolfgang Denk <wd@denx.de> +Date:	Sat May 5 17:15:50 2007 +0200 + +    Make "file" command happy with some config.mk files; update CHANGELOG + +commit e3b8c78bc2489c27ae020986ef0eaca684866cef +Author: Jeffrey Mann <mannj@embeddedplanet.com> +Date:	Sat May 5 08:32:14 2007 +0200 + +    ppc4xx: Detect if the sysclk on Sequoia is 33 or 33.333 MHz + +    The AMCC Secquoia board has been changed in a new revision from using a +    33.000 MHz clock to a 33.333 MHz system clock. A bit in the CPLD +    indicates the difference. This patch reads that bit and uses the correct +    clock speed for the board. This code is backward compatable will all +    prior boards. All prior boards will be read as 33.000. + +    Signed-off-by: Jeffrey Mann <mannj@embeddedplanet.com> +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit f544ff6656fca263ed1ebe39899b6d95da67c8b8 +Author: Stefan Roese <sr@denx.de> +Date:	Sat May 5 08:29:01 2007 +0200 + +    ppc4xx: Sequoia: Remove cpu/ppc4xx/speed.c from NAND booting + +    Using cpu/ppc4xx/speed.c to calculate the bus frequency is too big +    for the 4k NAND boot image so define bus_frequency to 133MHz here +    which is save for the refresh counter setup. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit a79886590593ba1d667c840caa4940c61639f18f +Author: Thomas Knobloch <knobloch@siemens.com> +Date:	Sat May 5 07:04:42 2007 +0200 + +    NAND: Wrong calculation of page number in nand_block_bad() + +    In case that there is no memory based bad block table available the +    function nand_block_checkbad() in drivers/mtd/nand/nand_base.c will call +    nand_block_bad() directly. When parameter 'getchip' is set to zero, +    nand_block_bad() will not right shift the offset to calculate the +    correct page number. + +    Signed-off-by: Thomas Knobloch <knobloch@siemens.com> +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 9877d7dcd1eebe61aa5d8b8ffe9c048ea426e6f6 +Author: Wolfgang Denk <wd@denx.de> +Date:	Fri May 4 10:02:33 2007 +0200 + +    Fix initrd length corruption in bootm command. + +    When using FDT Images, the length of an inital ramdisk was +    overwritten (bug introduced by commit 87a449c8, 22 Aug 2006). + +    Patches by Timur Tabi & Johns Daniel. + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 068aab660bc3912b930be5540e6b3f3fd6ad3c96 +Author: Kim Phillips <kim.phillips@freescale.com> +Date:	Thu May 3 19:43:52 2007 -0500 + +    mpc83xx: fix trivial error in MAKEALL + +    Signed-off-by: Kim Phillips <kim.phillips@freescale.com> + +commit c64a89d6ce8584b9fc64f4e85da9ecac3cfc2c2a +Author: Wolfgang Denk <wd@denx.de> +Date:	Thu May 3 16:34:41 2007 +0200 + +    Update board configuration for STX GP3SSA board: + +    Enable hush shell, environment in flash rather in EEPROM, +    more user-friendly default environment, etc. +    The simple EEPROM environment can be selected easily in the board +    config file. + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 2c6fb199dc5756fc72f49d1f4de105e089049d65 +Author: Wolfgang Denk <wd@denx.de> +Date:	Tue Apr 24 14:37:49 2007 +0200 + +    Cleanup STX GP3SSA code; fix build and compile problems. + +commit 35171dc04e028ecacc23ad916a66295472555dbf +Author: Dan Malek <dan@embeddedalley.com> +Date:	Fri Jan 5 09:15:34 2007 +0100 + +    Add support for STX GP3SSA (stxssa) Board + +    Signed-off-by Dan Malek, <dan@embeddedalley.com> + +commit ffa621a0d12a1ccd81c936c567f8917a213787a8 +Author: Andy Fleming <afleming@freescale.com> +Date:	Sat Feb 24 01:08:13 2007 -0600 + +    Cleaned up some 85xx PCI bugs + +    * Cleaned up the CDS PCI Config Tables and added NULL entries to +      the end +    * Fixed PCIe LAWBAR assignemt to use the cpu-relative address +    * Fixed 85xx PCI code to assign powar region sizes based on the +      config values (rather than hard-coding them) +    * Fixed the 8548 CDS PCI2 IO to once again have 0 as the base address + +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit 6743105988fc44d5b0d30388c790607835aae7a6 +Author: Andy Fleming <afleming@freescale.com> +Date:	Mon Apr 23 02:54:25 2007 -0500 + +    Add support for the 8568 MDS board + +    This included some changes to common files: +    * Add 8568 processor SVR to various places +    * Add support for setting the qe bus-frequency value in the dts +    * Add the 8568MDS target to the Makefile + +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit af1c2b84bf27c8565baddc82d1abb93700d10e2e +Author: David Updegraff <dave@cray.com> +Date:	Fri Apr 20 14:34:48 2007 -0500 + +    Add support for treating unknown PHYs as generic PHYs. + +    When bringing up u-boot on new boards, PHY support sometimes gets +    neglected.	Most PHYs don't really need any special support, +    though.  By adding a generic entry that always matches if nothing +    else does, we can provide support for "unsupported" PHYs for the +    tsec. + +    The generic PHY driver supports most PHYs, including gigabit. + +    Signed-off-by: David Updegraff <dave@cray.com> +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit a75af9bfd8fff0499efdbb90601cec5a2afef117 +Author: James Yang <James.Yang@freescale.com> +Date:	Wed Feb 7 15:28:04 2007 -0600 + +    Conditionalize 8641 Rev1.0 MCM workarounds + +    Signed-off-by: James Yang <James.Yang@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit f64702b7fc8f8df39d31add770df6e372f9e9ce3 +Author: Timur Tabi <timur@freescale.com> +Date:	Mon Apr 30 13:59:50 2007 -0500 + +    Fix memory initialization on MPC8349E-mITX + +    Define CFG_DDR_SDRAM_CLK_CNTL for the MPC8349E-mITX and MPC8349E-mITX-GP. +    This allows ddr->sdram_clk_cntl to be properly initialized.  This is necessary +    on some ITX boards, notably those with a revision 3.1 CPU. + +    Also change spd_sdram() in cpu/mpc83xx/spd_sdram.c to not write anything into +    ddr->sdram_clk_cntl if CFG_DDR_SDRAM_CLK_CNTL is not defined. + +    Signed-off-by: Timur Tabi <timur@freescale.com> +    Acked-by: Michael Benedict <MBenedict@twacs.com> +    Signed-off-by: Kim Phillips <kim.phillips@freescale.com> + +commit 54b2d434ae9d01787936f34fe1759cf3d7624ae3 +Author: Kim Phillips <kim.phillips@freescale.com> +Date:	Mon Apr 30 15:26:21 2007 -0500 + +    mpc83xx: replace elaborate boottime verbosity with 'clocks' command + +    and fix CPU: to align with Board: display text. + +    Signed-off-by: Kim Phillips <kim.phillips@freescale.com> + +commit c1ab82669d9525998c34e802a12cad662723f22a +Author: James Yang <James.Yang@freescale.com> +Date:	Fri Mar 16 13:02:53 2007 -0500 + +    Rewrote picos_to_clk() to avoid rounding errors. +    Clarified that conversion is to DRAM clocks rather than platform clocks. +    Made function static to spd_sdram.c. + +    Signed-off-by: James Yang <James.Yang@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit 8b39501d28754e72726ce7fb02310e56dbdf116a +Author: Stefan Roese <sr@denx.de> +Date:	Sun Apr 29 14:13:01 2007 +0200 + +    ppc4xx: Bamboo: Use current NAND driver and *not* the legacy driver + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 5c5d3242935cf3543af01142627494434834cf98 +Author: Kim Phillips <kim.phillips@freescale.com> +Date:	Wed Apr 25 12:34:38 2007 -0500 + +    mpc83xx: minor fixups for 8313rdb introduction + +commit 144876a380f5756f57412caf74c1d6dc201dd796 +Author: Michal Simek <monstr@monstr.eu> +Date:	Tue Apr 24 23:01:02 2007 +0200 + +    [PATCH] MTD partition support, JFFS2 support + +commit 37ed6cdd4159195bfad68d8a237f6adda8f482cb +Author: Matthias Fuchs <matthias.fuchs@esd-electronics.com> +Date:	Tue Apr 24 14:03:45 2007 +0200 + +    ppc4xx: setup 440EPx/GRx ZMII/RGMII bridge depending on PFC register content. + +    Signed-off-by: Matthias Fuchs <matthias.fuchs@esd-electronics.com> + +commit 66ed6cca3f340f7a8a06d9272ae2ef8e96f0273d +Author: Andy Fleming <afleming@freescale.com> +Date:	Mon Apr 23 02:37:47 2007 -0500 + +    Reworked 85xx speed detection code + +    Changed the code to read the registers and calculate the clock +    rates, rather than using a "switch" statement. + +    Idea from Andrew Klossner <andrew@cesa.opbu.xerox.com> + +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit 81f481ca708ed6a56bf9c410e3191dbad581c565 +Author: Andy Fleming <afleming@freescale.com> +Date:	Mon Apr 23 02:24:28 2007 -0500 + +    Enable 8544 support + +    * Add support to the Makefile +    * Add 8544 configuration support to the tsec driver +    * Add 8544 SVR numbers to processor.h + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit 0d8c3a2096eaff8d7de89d45e9af4d4b0d4868fe +Author: Andy Fleming <afleming@freescale.com> +Date:	Fri Feb 23 17:12:25 2007 -0600 + +    Support 1G size on 8548 + +    e500v2 and newer cores support 1G page sizes. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit 45cef612cc601d2d1c890fbbd7cdc9609a189a46 +Author: Andy Fleming <afleming@freescale.com> +Date:	Fri Feb 23 17:11:16 2007 -0600 + +    Changed BOOKE_PAGESZ_nGB to BOOKE_PAGESZ_nG + +    The other pagesz constants use one letter to specify order of +    magnitude.	Also change the one reference to it in mpc8548cds/init.S + +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit 1f9a318cea14272edd10d63739e2d326c90f430e +Author: Andy Fleming <afleming@freescale.com> +Date:	Fri Feb 23 16:28:46 2007 -0600 + +    Only set ddrioovcr for 8548 rev1. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit 9343dbf85bc03033f2102d8e8543567c2c1ad2d2 +Author: Andy Fleming <afleming@freescale.com> +Date:	Sat Feb 24 01:16:45 2007 -0600 + +    Tweak DDR ECC error counter + +    Enable single-bit error counter when memory was cleared by ddr controller. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Andy Fleming <afleming@freescale.com> + +commit 85e7c7a45e3dd9c7ce3e722352ba60f8df1a7a4b +Author: Timur Tabi <timur@freescale.com> +Date:	Mon Feb 12 13:34:55 2007 -0600 + +    85xx: write MAC address to mac-address and local-mac-address + +    Some device trees have a mac-address property, some have local-mac-address, +    and some have both.  To support all of these device trees, ftp_cpu_setup() +    should write the MAC address to mac-address and local-mac-address, if they +    exist. + +    Signed-off-by: Timur Tabi <timur@freescale.com> + +commit 03b81b48eec0ad249ec97a4ae16c36fa2e014ff4 +Author: Andy Fleming <afleming@freescale.com> +Date:	Mon Apr 23 01:44:44 2007 -0500 + +    Some 85xx cpu cleanups + +    * Cleaned up the TSR[WIS] clearing +    * Cleaned up DMA initialization + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> +    Acked-by: Andy Fleming <afleming@freescale.com> + +commit 151d5d992eab8c497b24c816c73dc1ad8bffb4eb +Author: Andy Fleming <afleming@freescale.com> +Date:	Mon Apr 23 01:32:22 2007 -0500 + +    Add cpu support for the 8544 + +    Recognize new SVR values, and add a few register definitions + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> +    Acked-by: Andy Fleming <afleming@freescale.com> + +commit 25d83d7f4ac65727182d8ddaf7ba42fa74cf65ae +Author: Jon Loeliger <jdl@freescale.com> +Date:	Wed Apr 11 16:51:02 2007 -0500 + +    Add MPC8544DS basic port board files. + +    Add board port under new board/freescale directory +    structure and reuse existing PIXIS FPGA support there. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit 0cde4b00fc7393b89f379d83a9d436dcb1334bfa +Author: Jon Loeliger <jdl@freescale.com> +Date:	Wed Apr 11 16:50:57 2007 -0500 + +    Add MPC8544DS main configuration file. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit 362dd83077ac04c0296bca3e824ec2fb3d44d9d6 +Author: Sergei Shtylyov <sshtylyov@ru.mvista.com> +Date:	Wed Dec 27 22:07:15 2006 +0300 + +    Fix PCI I/O space mapping on Freescale MPC85x0ADS + +    The PCI I/O space mapping for Freescale MPC8540ADS board was broken by commit +    52c7a68b8d587ebcf5a6b051b58b3d3ffa377ddc which failed to update the #define's +    describing the local address window used for the PCI I/O space accesses -- fix +    this and carry over the necessary changes into the MPC8560ADS code since the +    PCI I/O space mapping was also broken for this board (by the earlier commit +    087454609e47295443af793a282cddcd91a5f49c).	Add the comments clarifying how +    the PCI I/O space must be mapped to all the MPC85xx board config. headers. + +    Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com> + +     board/mpc8540ads/init.S	  |    4 ++-- +     board/mpc8560ads/init.S	  |    4 ++-- +     include/configs/MPC8540ADS.h |    5 ++--- +     include/configs/MPC8541CDS.h |    2 +- +     include/configs/MPC8548CDS.h |    2 +- +     include/configs/MPC8560ADS.h |    8 ++++---- +     6 files changed, 12 insertions(+), 13 deletions(-) + +commit 96629cbabdb727d4a5e62542deefc01d498db6dc +Author: Zang Roy-r61911 <tie-fei.zang@freescale.com> +Date:	Tue Dec 5 16:42:30 2006 +0800 + +    u-boot: Fix e500 v2 core reset bug + +    The following patch fixes the e500 v2 core reset bug. +    For e500 v2 core, a new reset control register is added to reset the +    processor. + +    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> + +commit 63247a5acd58032e6cf33f525bc3923b467bac88 +Author: Zang Roy-r61911 <tie-fei.zang@freescale.com> +Date:	Wed Dec 20 11:01:00 2006 +0800 + +    u-boot: v2: Remove the fixed TLB and LAW entrynubmer + +    Remove the fixed TLB and LAW entry nubmer. Use actually TLB and LAW +    entry number to control the loop.  This can reduce the potential risk +    for the 85xx processor increasing its TLB adn LAW entry number. + +    Signed-off-by: Swarthout Edward <swarthout@freescale.com> +    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> + +commit 0b1934ba12fd408fcc3b8bd9f4b04864c42a42bf +Author: Zang Roy-r61911 <tie-fei.zang@freescale.com> +Date:	Mon Dec 18 17:01:04 2006 +0800 + +    u-boot: Fix the 85xxcds tsec bug + +    Fix the 85xxcds tsec bug. +    When enable PCI, tsec.o should be added to u-boot.lds to make tsec work. + +    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> + +commit 7337b237ffc4aaf1b9467024fe472a880d852598 +Author: Zang Roy-r61911 <tie-fei.zang@freescale.com> +Date:	Fri Dec 15 14:43:31 2006 +0800 + +    u-boot: Fix CPU2 errata on MPC8548CDS board + +    This patch apply workaround of CPU2 errata on MPC8548CDS board. + +    Signed-off-by:Ebony Zhu <ebony.zhu@freescale.com> + +commit 39b18c4f3e0b6d0dc00f4e68bad2da3766c85f09 +Author: ebony.zhu@freescale.com <ebony.zhu@freescale.com> +Date:	Mon Dec 18 16:25:15 2006 +0800 + +    u-boot: Disables MPC8548CDS 2T_TIMING for DDR by default + +    This patch disables MPC8548CDS 2T_TIMING for DDR by default. + +    Signed-off-by:Ebony Zhu <ebony.zhu@freescale.com> + +commit 41fb7e0f1ec9b91bdae2565bab5f2e3ee15039c7 +Author: Zang Roy-r61911 <tie-fei.zang@freescale.com> +Date:	Thu Dec 14 14:14:55 2006 +0800 + +    u-boot: Enable PCI function and add PEX & rapidio memory map on MPC8548CDS board + +    Enable PCI function and add PEX & rapidio memory map on MPC8548CDS +    board. +    Signed-off-by: Roy Zang <tie-fei.zang@freescale.com> + +commit 96b8a05432f346f36493535c85320b70ec9c7c1b +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:54:15 2007 -0500 + +    mpc83xx: Add MPC8313ERDB support. + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit 49ea3b6eafe606285ae4d5c378026153dde53200 +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:34:21 2007 -0500 + +    mpc83xx: Add generic PCI setup code. + +    Board code can now request the generic setup code rather than having to +    copy-and-paste it for themselves.  Boards should be converted to use this +    once they're tested with it. + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit 7c98e5193e93df6b9b651851d54b638a61ebb0ea +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:34:19 2007 -0500 + +    mpc83xx: Add 831x support to speed.c. + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit 0f253283a32d91e06844d7f87f9b33f4f4fbce8f +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:34:18 2007 -0500 + +    mpc83xx: Add 831x support to global_data.h + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit 95e7ef897e54591e615fc1b458b74c286fe1fb06 +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:34:16 2007 -0500 + +    mpc83xx: Change PVR_83xx to PVR_E300C1-3, and update checkcpu(). + +    Rather than misleadingly define PVR_83xx as the specific type of 83xx +    being built for, the PVR of each core revision is defined. checkcpu() now +    prints the core that it detects, rather than aborting if it doesn't find +    what it thinks it wants. + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit a35b0c4950d84cf9e3a9e32b916135956d1ac636 +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:34:15 2007 -0500 + +    mpc83xx: Recognize SPR values for MPC8311 and MPC8313. + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit d87c57b201b4572d16f1b642998faa00c9912b16 +Author: Scott Wood <scottwood@freescale.com> +Date:	Mon Apr 16 14:31:55 2007 -0500 + +    mpc83xx: Add register definitions for MPC831x. + +    Signed-off-by: Scott Wood <scottwood@freescale.com> + +commit 323bfa8f436dc3bc57187c9b1488bc3146ff1522 +Author: Stefan Roese <sr@denx.de> +Date:	Mon Apr 23 12:00:22 2007 +0200 + +    Remove BOARDLIBS usage completely + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 32556443840f127170e4baa8bdd5b567039f6c36 +Author: Michal Simek <monstr@monstr.eu> +Date:	Sat Apr 21 21:07:22 2007 +0200 + +    [PATCH] SystemACE support for Microblaze + +commit 0643631aa1036cd746bf5d15f5a34bc7bc01ea4f +Author: Michal Simek <monstr@monstr.eu> +Date:	Sat Apr 21 21:02:40 2007 +0200 + +    16bit read/write little endian + +commit 9d1d6a34d26c5933bc097ce73c9348f95573cdd4 +Author: Michal Simek <monstr@monstr.eu> +Date:	Sat Apr 21 20:53:31 2007 +0200 + +    Change ML401 parameters - Xilinx BSP + +commit 2e343b9a57f32e1bd08c35c9976910333fb4e13d +Author: Ed Swarthout <Ed.Swarthout@freescale.com> +Date:	Wed Feb 28 05:37:29 2007 -0600 + +    mpc8641hpcn: Fix LAW and TLB setup to use the IO_PHYS #defines. + +    Signed-off-by: Ed Swarthout <Ed.Swarthout@freescale.com> + +commit 79cb47391eebef85acadb3f6961ef6c55cace6ac +Author: Zhang Wei <wei.zhang@freescale.com> +Date:	Fri Jan 19 10:42:37 2007 +0800 + +    Enable LAWs for MPC8641 PCI-Ex2. + +    Signed-off-by: Zhang Wei <wei.zhang@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit bd7851ce1e1f140665b520026abf1042968b1102 +Author: Jon Loeliger <jdl@freescale.com> +Date:	Fri Apr 20 14:12:26 2007 -0500 + +    mpc86xx; Write MAC address to mac-address and local-mac-address + +    Some device trees have a mac-address property, some have local-mac-address, +    and some have both.  To support all of these device trees, ftp_cpu_setup() +    should write the MAC address to mac-address and local-mac-address, if they +    exist. + +    Signed-off-by: Timur Tabi <timur@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit 7dbdf28b8bd855a8530dc3292e4982575a197060 +Author: Jon Loeliger <jdl@freescale.com> +Date:	Fri Apr 20 14:11:38 2007 -0500 + +    mpc86xx: protect memcpy to bad address if a mac-address is missing from dt + +    Signed-off-by: Kim Phillips <kim.phillips@freescale.com> +    Signed-off-by: Jon Loeliger <jdl@freescale.com> + +commit 14da5f7675bbb427c469e3f45006e027b6e21db9 +Author: Wolfgang Denk <wd@denx.de> +Date:	Fri Apr 20 17:43:28 2007 +0200 + +    Cleanup compiler warnings, update CHANGELOG + +    Signed-off-by: Wolfgang Denk <wd@denx.de> + +commit 6923565db12af34fd5e02d354ee65a8c78ac460f +Author: Detlev Zundel <dzu@denx.de> +Date:	Fri Apr 20 12:01:47 2007 +0200 + +    Fix breakage of NC650 board with respect to nand support. + +    Signed-off-by: Detlev Zundel <dzu@denx.de> + +commit 39f23cd90947639ac278a18ff277ec786b5ac167 +Author: Domen Puncer <domen.puncer@telargo.com> +Date:	Fri Apr 20 11:13:16 2007 +0200 + +    [RFC PATCH] icecube/lite5200b: fix OF_TBCLK (timebase-frequency) calculation + +    G2 core reference manual says decrementer and time base +    are decreasing/increasing once every 4 bus clock cycles. +    Lets fix it, so time in Linux won't run twice as fast + +    Signed-off-by: Domen Puncer <domen.puncer@telargo.com> +    Acked-by: Grant Likely <grant.likely@secretlab.ca> + +commit 7651f8bdbba03bb0b4f241e2d2c4cb65b230bd56 +Author: Gerald Van Baren <vanbaren@cideas.com> +Date:	Thu Apr 19 23:14:39 2007 -0400 + +    Fix serious pointer bug with bootm and reserve map. + +    What was suppose to be a stack variable was declared as a pointer, +      overwriting random memory. +    Also moved the libfdt.a requirement into the main Makefile.  That is +      The U-Boot Way. + +commit d21686263574e95cb3e9e9b0496f968b1b897fdb +Author: Stefan Roese <sr@denx.de> +Date:	Thu Apr 19 09:53:52 2007 +0200 + +    ppc4xx: Fix chip select timing for SysACE access on AMCC Katmai + +    Previous versions used full wait states for the chip select #1 which +    is connected to the Xilinix SystemACE controller on the AMCC Katmai +    evaluation board. This leads to really slow access and therefore low +    performance. This patch now sets up the chip select a lot faster +    resulting in much better read/write performance of the Linux driver. + +    Signed-off-by: Stefan Roese <sr@denx.de> + +commit 37837828d89084879bee2f2b8c7c68d4695940df +Author: Wolfgang Denk <wd@denx.de> +Date:	Wed Apr 18 17:49:29 2007 +0200 + +    Clenaup, update CHANGELOG + +    Signed-off-by: Wolfgang Denk <wd@denx.de> +  commit fd094c6379e2ef8a4d0ceb5640b24cb0c8d04449  Author: Wolfgang Denk <wd@denx.de>  Date:	Wed Apr 18 17:20:58 2007 +0200 @@ -62,6 +1413,14 @@ Date:	Wed Apr 18 12:05:59 2007 +0200      Signed-off-by: Stefan Roese <sr@denx.de> +commit 9c00dfb0bf89c8c23e8af5b5bdf49cf66d769f85 +Author: Peter Pearse <peter.pearse@arm.com> +Date:	Tue Apr 17 13:30:33 2007 +0100 + +    Move ppearse to ARM board list +    Add Konstantin Kletschke for scb9328. +    Signed-off-by: Peter Pearse <peter.pearse@arm.com> +  commit d3832e8fe1b214ec62424eac36cfda9fc56d21b3  Author: Domen Puncer <domen.puncer@telargo.com>  Date:	Mon Apr 16 14:00:13 2007 +0200 @@ -370,6 +1729,18 @@ Date:	Fri Apr 13 08:02:24 2007 +0200      Signed-of-by: Greg Lopp <lopp@pobox.com>      Acked-by: Grant Likely <grant.likely@secretlab.ca> +commit 6fbf261f8df294e589cfadebebe5468e3c0f29e9 +Author: Xie Xiaobo <r63061@freescale.com> +Date:	Fri Mar 9 19:08:25 2007 +0800 + +    Fix two bugs for MPC83xx DDR2 controller SPD Init + +    There are a few bugs in the cpu/mpc83xx/spd_sdram.c +    the first bug is that the picos_to_clk routine introduces a huge +    rounding error in 83xx. +    the second bug is that the mode register write recovery field is +    tWR-1, not tWR >> 1. +  commit 2ad3aba01d37b72e7c957b07e102fccd64fe6d13  Author: Jeffrey Mann <mannj@embeddedplanet.com>  Date:	Thu Apr 12 14:15:59 2007 +0200 diff --git a/MAINTAINERS b/MAINTAINERS index 2a43848fc..2eaef1784 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -221,10 +221,11 @@ Jon Loeliger <jdl@freescale.com>  	MPC8641HPCN		MPC8641D -Dan Malek <dan@embeddededge.com> +Dan Malek <dan@embeddedalley.com> -	STxGP3			MPC85xx -	STxXTc			MPC8xx +	stxgp3			MPC85xx +	stxssa			MPC85xx +	stxxtc			MPC8xx  Eran Man <eran@nbase.co.il> @@ -257,15 +258,6 @@ Frank Panno <fpanno@delphintech.com>  	ep8260			MPC8260 -Peter Pearse <peter.pearse@arm.com> -	integratorcp		All current ARM supplied & -				supported core modules -				- see http://www.arm.com -				/products/DevTools -				/Hardware_Platforms.html -	versatile		ARM926EJ-S -	versatile		ARM926EJ-S -  Denis Peter <d.peter@mpl.ch>  	MIP405			PPC4xx @@ -444,6 +436,9 @@ Gary Jennejohn <gj@denx.de>  	smdk2400		ARM920T  	trab			ARM920T +Konstantin Kletschke <kletschke@synertronixx.de> +	scb9328			ARM920T +  Nishant Kamat <nskamat@ti.com>  	omap1610h2		ARM926EJS @@ -461,6 +456,15 @@ Rolf Offermanns <rof@sysgo.de>  	shannon			SA1100 +Peter Pearse <peter.pearse@arm.com> +	integratorcp		All current ARM supplied & +				supported core modules +				-see http://www.arm.com +				/products/DevTools +				/Hardware_Platforms.html +	versatile		ARM926EJ-S +	versatile		ARM926EJ-S +  Dave Peverley <dpeverley@mpc-data.co.uk>  	omap730p2		ARM926EJS @@ -75,22 +75,23 @@ LIST_8xx="	\  #########################################################################  LIST_4xx="	\ -	acadia		ADCIOP		alpr		AP1000		\ -	AR405		ASH405		bamboo		bubinga		\ -	CANBT		CMS700		CPCI2DP		CPCI405		\ -	CPCI4052	CPCI405AB	CPCI405DT	CPCI440		\ -	CPCIISER4	CRAYL1		csb272		csb472		\ -	DASA_SIM	DP405		DU405		ebony		\ -	ERIC		EXBITGEN	G2000		HH405		\ -	HUB405		JSE		KAREF		katmai		\ -	luan		METROBOX	MIP405		MIP405T		\ -	ML2		ml300		ocotea		OCRTC		\ -	ORSG		p3p440		PCI405		pcs440ep	\ -	PIP405		PLU405		PMC405		PPChameleonEVB	\ -	sbc405		sc3		sequoia		sequoia_nand	\ -	taishan		VOH405		VOM405		W7OLMC		\ -	W7OLMG		walnut		WUH405		XPEDITE1K	\ -	yellowstone	yosemite	yucca				\ +	acadia		acadia_nand	ADCIOP		alpr		\ +	AP1000		AR405		ASH405		bamboo		\ +	bamboo_nand	bubinga		CANBT		CMS700		\ +	CPCI2DP		CPCI405		CPCI4052	CPCI405AB	\ +	CPCI405DT	CPCI440		CPCIISER4	CRAYL1		\ +	csb272		csb472		DASA_SIM	DP405		\ +	DU405		ebony		ERIC		EXBITGEN	\ +	G2000		HH405		HUB405		JSE		\ +	KAREF		katmai		luan		METROBOX	\ +	MIP405		MIP405T		ML2		ml300		\ +	ocotea		OCRTC		ORSG		p3p440		\ +	PCI405		pcs440ep	PIP405		PLU405		\ +	PMC405		PPChameleonEVB	sbc405		sc3		\ +	sequoia		sequoia_nand	taishan		VOH405		\ +	VOM405		W7OLMC		W7OLMG		walnut		\ +	WUH405		XPEDITE1K	yellowstone	yosemite	\ +	yucca								\  "  ######################################################################### @@ -132,8 +133,8 @@ LIST_8260="	\  #########################################################################  LIST_83xx="	\ -	MPC832XEMDS	MPC8349EMDS	MPC8349ITX	MPC8349ITXGP	\ -	MPC8360EMDS	sbc8349		TQM834x				\ +	MPC8313ERDB	MPC832XEMDS	MPC8349EMDS	MPC8349ITX	\ +	MPC8349ITXGP	MPC8360EMDS	sbc8349		TQM834x		\  " @@ -142,10 +143,11 @@ LIST_83xx="	\  #########################################################################  LIST_85xx="	\ -	MPC8540ADS	MPC8540EVAL	MPC8541CDS	MPC8548CDS	\ -	MPC8555CDS	MPC8560ADS	PM854		PM856		\ -	sbc8540		sbc8560		stxgp3		TQM8540		\ -	TQM8541		TQM8555		TQM8560				\ +	MPC8540ADS	MPC8540EVAL	MPC8541CDS	MPC8544DS	\ +	MPC8548CDS	MPC8555CDS	MPC8560ADS	PM854		\ +	PM856		sbc8540		sbc8560		stxgp3		\ +	stxssa		TQM8540		TQM8541		TQM8555		\ +	TQM8560								\  "  ######################################################################### @@ -184,7 +186,7 @@ LIST_SA="assabet dnp1110 gcplus lart shannon"  LIST_ARM7="	\  	armadillo	B2		ep7312		evb4510		\  	impa7		integratorap	ap7		ap720t		\ -	lpc2292sodimm	modnet50					\ +	lpc2292sodimm	modnet50	SMN42				\  "  ######################################################################### @@ -173,9 +173,6 @@ endif  ifeq ($(CPU),mpc85xx)  OBJS += cpu/$(CPU)/resetvec.o  endif -ifeq ($(CPU),mpc86xx) -OBJS += cpu/$(CPU)/resetvec.o -endif  ifeq ($(CPU),bf533)  OBJS += cpu/$(CPU)/start1.o	cpu/$(CPU)/interrupt.o	cpu/$(CPU)/cache.o  OBJS += cpu/$(CPU)/flush.o	cpu/$(CPU)/init_sdram.o @@ -197,6 +194,9 @@ LIBS += cpu/$(CPU)/lib$(CPU).a  ifdef SOC  LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a  endif +ifeq ($(CPU),ixp) +LIBS += cpu/ixp/npe/libnpe.a +endif  LIBS += lib_$(ARCH)/lib$(ARCH).a  LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a \  	fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a @@ -219,7 +219,7 @@ LIBS += $(shell if [ -d post/cpu/$(CPU) ]; then echo \  LIBS += $(shell if [ -d post/board/$(BOARDDIR) ]; then echo \  	"post/board/$(BOARDDIR)/libpost$(BOARD).a"; fi)  LIBS += common/libcommon.a -LIBS += $(BOARDLIBS) +LIBS += libfdt/libfdt.a  LIBS := $(addprefix $(obj),$(LIBS))  .PHONY : $(LIBS) @@ -1014,6 +1014,15 @@ xtract_4xx = $(subst _25,,$(subst _33,,$(subst _BA,,$(subst _ME,,$(subst _HI,,$(  acadia_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx acadia amcc +acadia_nand_config:	unconfig +	@mkdir -p $(obj)include +	@mkdir -p $(obj)nand_spl +	@mkdir -p $(obj)board/amcc/acadia +	@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h +	@$(MKCONFIG) -n $@ -a acadia ppc ppc4xx acadia amcc +	@echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/acadia/config.tmp +	@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk +  ADCIOP_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx adciop esd @@ -1035,6 +1044,15 @@ ASH405_config:	unconfig  bamboo_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx bamboo amcc +bamboo_nand_config:	unconfig +	@mkdir -p $(obj)include +	@mkdir -p $(obj)nand_spl +	@mkdir -p $(obj)board/amcc/bamboo +	@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h +	@$(MKCONFIG) -n $@ -a bamboo ppc ppc4xx bamboo amcc +	@echo "TEXT_BASE = 0x01000000" > $(obj)board/amcc/bamboo/config.tmp +	@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk +  bubinga_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc ppc4xx bubinga amcc @@ -1623,6 +1641,19 @@ r5200_config :		unconfig  ## MPC83xx Systems  ######################################################################### +MPC8313ERDB_33_config \ +MPC8313ERDB_66_config: unconfig +	@echo "" >include/config.h ; \ +	if [ "$(findstring _33_,$@)" ] ; then \ +		echo -n "...33M ..." ; \ +		echo "#define CFG_33MHZ" >>include/config.h ; \ +	fi ; \ +	if [ "$(findstring _66_,$@)" ] ; then \ +		echo -n "...66M..." ; \ +		echo "#define CFG_66MHZ" >>include/config.h ; \ +	fi ; +	@$(MKCONFIG) -a MPC8313ERDB ppc mpc83xx mpc8313erdb +  MPC832XEMDS_config \  MPC832XEMDS_HOST_33_config \  MPC832XEMDS_HOST_66_config \ @@ -1729,12 +1760,18 @@ MPC8560ADS_config:	unconfig  MPC8541CDS_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8541cds cds +MPC8544DS_config:	unconfig +	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8544ds freescale +  MPC8548CDS_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8548cds cds  MPC8555CDS_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8555cds cds +MPC8568MDS_config:	unconfig +	@$(MKCONFIG) $(@:_config=) ppc mpc85xx mpc8568mds +  PM854_config:	unconfig  	@$(MKCONFIG) $(@:_config=) ppc mpc85xx pm854 @@ -1770,6 +1807,17 @@ sbc8560_66_config:      unconfig  stxgp3_config:		unconfig  	@$(MKCONFIG) $(@:_config=) ppc mpc85xx stxgp3 +stxssa_config		\ +stxssa_4M_config:	unconfig +	@mkdir -p $(obj)include +	@if [ "$(findstring _4M_,$@)" ] ; then \ +		echo "#define CONFIG_STXSSA_4M" >>$(obj)include/config.h ; \ +		echo "... with 4 MiB flash memory" ; \ +	else \ +		>$(obj)include/config.h ; \ +	fi +	@$(MKCONFIG) -a stxssa ppc mpc85xx stxssa +  TQM8540_config		\  TQM8541_config		\  TQM8555_config		\ @@ -2088,7 +2136,10 @@ evb4510_config :	unconfig  	@$(MKCONFIG) $(@:_config=) arm arm720t evb4510  lpc2292sodimm_config:	unconfig -	@$(MKCONFIG) $(@:_config=) arm arm720t lpc2292sodimm +	@$(MKCONFIG) $(@:_config=) arm arm720t lpc2292sodimm NULL lpc2292 + +SMN42_config	:	unconfig +	@$(MKCONFIG) $(@:_config=) arm arm720t SMN42 siemens lpc2292  #########################################################################  ## XScale Systems @@ -718,6 +718,7 @@ The following options need to be configured:  		CFG_CMD_VFD	* VFD support (TRAB)  		CFG_CMD_BSP	* Board SPecific functions  		CFG_CMD_CDP	* Cisco Discover Protocol support +		CFG_CMD_FSL	* Microblaze FSL support  		-----------------------------------------------  		CFG_CMD_ALL	all diff --git a/board/amcc/acadia/Makefile b/board/amcc/acadia/Makefile index abcbf3e43..ddbcb8091 100644 --- a/board/amcc/acadia/Makefile +++ b/board/amcc/acadia/Makefile @@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(BOARD).a -COBJS	= $(BOARD).o cpr.o memory.o +COBJS	= $(BOARD).o cmd_acadia.o cpr.o memory.o  SOBJS	=  SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) diff --git a/board/amcc/acadia/acadia.c b/board/amcc/acadia/acadia.c index baf598c67..46d63e630 100644 --- a/board/amcc/acadia/acadia.c +++ b/board/amcc/acadia/acadia.c @@ -62,6 +62,16 @@ int board_early_init_f(void)  	acadia_gpio_init(); +	/* Configure 405EZ for NAND usage */ +	mtsdr(sdrnand0, SDR_NAND0_NDEN | SDR_NAND0_NDAREN | SDR_NAND0_NDRBEN); +	mfsdr(sdrultra0, reg); +	reg &= ~SDR_ULTRA0_CSN_MASK; +	reg |= (SDR_ULTRA0_CSNSEL0 >> CFG_NAND_CS) | +		SDR_ULTRA0_NDGPIOBP | +		SDR_ULTRA0_EBCRDYEN | +		SDR_ULTRA0_NFSRSTEN; +	mtsdr(sdrultra0, reg); +  	/* USB Host core needs this bit set */  	mfsdr(sdrultra1, reg);  	mtsdr(sdrultra1, reg | SDR_ULTRA1_LEDNENABLE); @@ -91,8 +101,11 @@ int misc_init_f(void)  int checkboard(void)  {  	char *s = getenv("serial#"); +	u8 rev; + +	rev = in8(CFG_CPLD_BASE + 0); +	printf("Board: Acadia - AMCC PPC405EZ Evaluation Board, Rev. %X", rev); -	printf("Board: Acadia - AMCC PPC405EZ Evaluation Board");  	if (s != NULL) {  		puts(", serial# ");  		puts(s); diff --git a/board/amcc/acadia/cmd_acadia.c b/board/amcc/acadia/cmd_acadia.c new file mode 100644 index 000000000..fb7ea3595 --- /dev/null +++ b/board/amcc/acadia/cmd_acadia.c @@ -0,0 +1,101 @@ +/* + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * 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 <i2c.h> + +static u8 boot_267_nor[] = { +	0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8e, 0x00, +	0x14, 0xc0, 0x36, 0xcc, 0x00, 0x0c, 0x00, 0x00, +	0x00, 0x00, 0x00, 0x00 +}; + +static u8 boot_267_nand[] = { +	0xd0, 0x38, 0xc3, 0x50, 0x13, 0x88, 0x8e, 0x00, +	0x14, 0xc0, 0x36, 0xcc, 0x00, 0x0c, 0x00, 0x00, +	0x00, 0x00, 0x00, 0x00 +}; + +static int do_bootstrap(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +{ +	u8 chip; +	u8 *buf; +	int cpu_freq; + +	if (argc < 3) { +		printf("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	cpu_freq = simple_strtol(argv[1], NULL, 10); +	if (cpu_freq != 267) { +		printf("Unsupported cpu-frequency - only 267 supported\n"); +		return 1; +	} + +	/* use 0x50 as I2C EEPROM address for now */ +	chip = 0x50; + +	if ((strcmp(argv[2], "nor") != 0) && +	    (strcmp(argv[2], "nand") != 0)) { +		printf("Unsupported boot-device - only nor|nand support\n"); +		return 1; +	} + +	if (strcmp(argv[2], "nand") == 0) { +		switch (cpu_freq) { +		case 267: +			buf = boot_267_nand; +			break; +		default: +			break; +		} +	} else { +		switch (cpu_freq) { +		case 267: +			buf = boot_267_nor; +			break; +		default: +			break; +		} +	} + +	if (i2c_write(chip, 0, 1, buf, 16) != 0) +		printf("Error writing to EEPROM at address 0x%x\n", chip); +	udelay(CFG_EEPROM_PAGE_WRITE_DELAY_MS * 1000); +	if (i2c_write(chip, 0x10, 1, buf+16, 4) != 0) +		printf("Error2 writing to EEPROM at address 0x%x\n", chip); + +	printf("Done\n"); +	printf("Please power-cycle the board for the changes to take effect\n"); + +	return 0; +} + +U_BOOT_CMD( +	bootstrap,	3,	0,	do_bootstrap, +	"bootstrap - program the I2C bootstrap EEPROM\n", +	"<cpu-freq> <nor|nand> - program the I2C bootstrap EEPROM\n" +	); diff --git a/board/amcc/acadia/config.mk b/board/amcc/acadia/config.mk index c8566ecc7..af5a46c2a 100644 --- a/board/amcc/acadia/config.mk +++ b/board/amcc/acadia/config.mk @@ -21,6 +21,12 @@  # MA 02111-1307 USA  # +# +# AMCC 405EZ Reference Platform (Acadia) board +# + +sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp +  ifndef TEXT_BASE  TEXT_BASE = 0xFFFC0000  endif diff --git a/board/amcc/acadia/memory.c b/board/amcc/acadia/memory.c index 5375d36c9..25904d3b9 100644 --- a/board/amcc/acadia/memory.c +++ b/board/amcc/acadia/memory.c @@ -39,6 +39,7 @@ void sdram_init(void)  	return;  } +#if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)  static void cram_bcr_write(u32 wr_val)  {  	wr_val <<= 2; @@ -62,9 +63,12 @@ static void cram_bcr_write(u32 wr_val)  	return;  } +#endif  long int initdram(int board_type)  { +#if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL) +	int i;  	u32 val;  	/* 1. EBC need to program READY, CLK, ADV for ASync mode */ @@ -92,7 +96,12 @@ long int initdram(int board_type)  	/* Config EBC to use RDY */  	mfsdr(sdrultra0, val); -	mtsdr(sdrultra0, val | 0x04000000); +	mtsdr(sdrultra0, val | SDR_ULTRA0_EBCRDYEN); + +	/* Wait a short while, since for NAND booting this is too fast */ +	for (i=0; i<200000; i++) +		; +#endif  	return (CFG_MBYTES_RAM << 20);  } diff --git a/board/amcc/acadia/u-boot-nand.lds b/board/amcc/acadia/u-boot-nand.lds new file mode 100644 index 000000000..a5dae0e98 --- /dev/null +++ b/board/amcc/acadia/u-boot-nand.lds @@ -0,0 +1,137 @@ +/* + * (C) Copyright 2007 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +SECTIONS +{ +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + +    cpu/ppc4xx/start.o	(.text) + +    /* Align to next NAND block */ +    . = ALIGN(0x4000); +    common/environment.o  (.ppcenv) +    /* Keep some space here for redundant env and potential bad env blocks */ +    . = ALIGN(0x10000); + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; +  __fixup_entries = (. - _FIXUP_TABLE_)>>2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } + +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/amcc/bamboo/Makefile b/board/amcc/bamboo/Makefile index 5da96e9e1..d01cc49e2 100644 --- a/board/amcc/bamboo/Makefile +++ b/board/amcc/bamboo/Makefile @@ -1,5 +1,5 @@  # -# (C) Copyright 2002-2006 +# (C) Copyright 2002-2007  # Wolfgang Denk, DENX Software Engineering, wd@denx.de.  #  # See file CREDITS for list of people who contributed to this @@ -33,7 +33,7 @@ OBJS	:= $(addprefix $(obj),$(COBJS))  SOBJS	:= $(addprefix $(obj),$(SOBJS))  $(LIB):	$(OBJS) $(SOBJS) -	$(AR) $(ARFLAGS) $@ $(OBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)  clean:  	rm -f $(SOBJS) $(OBJS) diff --git a/board/amcc/bamboo/bamboo.c b/board/amcc/bamboo/bamboo.c index b5bb14580..2e651df3b 100644 --- a/board/amcc/bamboo/bamboo.c +++ b/board/amcc/bamboo/bamboo.c @@ -1,5 +1,5 @@  /* - * (C) Copyright 2005 + * (C) Copyright 2005-2007   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * See file CREDITS for list of people who contributed to this @@ -277,87 +277,6 @@ int board_early_init_f(void)  	return 0;  } -#if (CONFIG_COMMANDS & CFG_CMD_NAND) -#include <linux/mtd/nand_legacy.h> -extern struct nand_chip nand_dev_desc[CFG_MAX_NAND_DEVICE]; - -/*----------------------------------------------------------------------------+ -  | nand_reset. -  |   Reset Nand flash -  |   This routine will abort previous cmd -  +----------------------------------------------------------------------------*/ -int nand_reset(ulong addr) -{ -	int wait=0, stat=0; - -	out8(addr + NAND_CMD_REG, NAND0_CMD_RESET); -	out8(addr + NAND_CMD_REG, NAND0_CMD_READ_STATUS); - -	while ((stat != 0xc0) && (wait != 0xffff)) { -		stat = in8(addr + NAND_DATA_REG); -		wait++; -	} - -	if (stat == 0xc0) { -		return 0; -	} else { -		printf("NAND Reset timeout.\n"); -		return -1; -	} -} - -void board_nand_set_device(int cs, ulong addr) -{ -	/* Set NandFlash Core Configuration Register */ -	out32(addr + NAND_CCR_REG, 0x00001000 | (cs << 24)); - -	switch (cs) { -	case 1: -		/* ------- -		 *  NAND0 -		 * ------- -		 * K9F1208U0A : 4 addr cyc, 1 col + 3 Row -		 * Set NDF1CR - Enable External CS1 in NAND FLASH controller -		 */ -		out32(addr + NAND_CR1_REG, 0x80002222); -		break; - -	case 2: -		/* ------- -		 *  NAND1 -		 * ------- -		 * K9K2G0B : 5 addr cyc, 2 col + 3 Row -		 * Set NDF2CR : Enable External CS2 in NAND FLASH controller -		 */ -		out32(addr + NAND_CR2_REG, 0xC0007777); -		break; -	} - -	/* Perform Reset Command */ -	if (nand_reset(addr) != 0) -		return; -} - -void nand_init(void) -{ -	board_nand_set_device(1, CFG_NAND_ADDR); - -	nand_probe(CFG_NAND_ADDR); -	if (nand_dev_desc[0].ChipID != NAND_ChipID_UNKNOWN) { -		print_size(nand_dev_desc[0].totlen, "\n"); -	} - -#if 0 /* NAND1 not supported yet */ -	board_nand_set_device(2, CFG_NAND2_ADDR); - -	nand_probe(CFG_NAND2_ADDR); -	if (nand_dev_desc[0].ChipID != NAND_ChipID_UNKNOWN) { -		print_size(nand_dev_desc[0].totlen, "\n"); -	} -#endif -} -#endif /* (CONFIG_COMMANDS & CFG_CMD_NAND) */ -  int checkboard(void)  {  	char *s = getenv("serial#"); @@ -372,6 +291,7 @@ int checkboard(void)  	return (0);  } +#if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))  /*************************************************************************   *   * init_spd_array -- Bamboo has one bank onboard sdram (plus DIMM) @@ -426,10 +346,12 @@ static void init_spd_array(void)  	cfg_simulate_spd_eeprom[25]    = 0x00;    /* SDRAM Cycle Time (cas latency 1.5) = N.A */  	cfg_simulate_spd_eeprom[12]    = 0x82;    /* refresh Rate Type: Normal (15.625us) + Self refresh */  } +#endif  long int initdram (int board_type)  { -	long dram_size = 0; +#if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL)) +	long dram_size;  	/*  	 * First write simulated values in eeprom array for onboard bank 0 @@ -439,6 +361,9 @@ long int initdram (int board_type)  	dram_size = spd_sdram();  	return dram_size; +#else +	return CFG_MBYTES_SDRAM << 20; +#endif  }  #if defined(CFG_DRAM_TEST) @@ -962,11 +887,11 @@ void ext_bus_cntlr_init(void)  		/*------------------------------------------------------------------------- */  	case BOOT_FROM_NAND_FLASH0:  		/*------------------------------------------------------------------------- */ -		ebc0_cs0_bnap_value = 0; -		ebc0_cs0_bncr_value = 0; +		ebc0_cs0_bnap_value = EBC0_BNAP_NAND_FLASH; +		ebc0_cs0_bncr_value = EBC0_BNCR_NAND_FLASH_CS1; -		ebc0_cs1_bnap_value = EBC0_BNAP_NAND_FLASH; -		ebc0_cs1_bncr_value = EBC0_BNCR_NAND_FLASH_CS1; +		ebc0_cs1_bnap_value = 0; +		ebc0_cs1_bncr_value = 0;  		ebc0_cs2_bnap_value = 0;  		ebc0_cs2_bncr_value = 0;  		ebc0_cs3_bnap_value = 0; @@ -1490,10 +1415,10 @@ void update_ndfc_ios(void)  	gpio_tab[GPIO0][6].in_out = GPIO_OUT;	    /* EBC_CS_N(1) */  	gpio_tab[GPIO0][6].alt_nb = GPIO_ALT1; -#if 0  	gpio_tab[GPIO0][7].in_out = GPIO_OUT;	    /* EBC_CS_N(2) */  	gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1; +#if 0  	gpio_tab[GPIO0][7].in_out = GPIO_OUT;	    /* EBC_CS_N(3) */  	gpio_tab[GPIO0][7].alt_nb = GPIO_ALT1;  #endif @@ -1981,12 +1906,21 @@ void configure_ppc440ep_pins(void)  	{  		update_ndfc_ios(); +#if !(defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL))  		mtsdr(sdr_cust0, SDR0_CUST0_MUX_NDFC_SEL   |  		      SDR0_CUST0_NDFC_ENABLE	|  		      SDR0_CUST0_NDFC_BW_8_BIT	|  		      SDR0_CUST0_NDFC_ARE_MASK	|  		      SDR0_CUST0_CHIPSELGAT_EN1 |  		      SDR0_CUST0_CHIPSELGAT_EN2); +#else +		mtsdr(sdr_cust0, SDR0_CUST0_MUX_NDFC_SEL   | +		      SDR0_CUST0_NDFC_ENABLE	| +		      SDR0_CUST0_NDFC_BW_8_BIT	| +		      SDR0_CUST0_NDFC_ARE_MASK	| +		      SDR0_CUST0_CHIPSELGAT_EN0 | +		      SDR0_CUST0_CHIPSELGAT_EN2); +#endif  		ndfc_selection_in_fpga();  	} diff --git a/board/amcc/bamboo/config.mk b/board/amcc/bamboo/config.mk index 9d7f4c310..b46527dcc 100644 --- a/board/amcc/bamboo/config.mk +++ b/board/amcc/bamboo/config.mk @@ -1,5 +1,5 @@  # -# (C) Copyright 2002-2006 +# (C) Copyright 2002-2007  # Wolfgang Denk, DENX Software Engineering, wd@denx.de.  #  # See file CREDITS for list of people who contributed to this @@ -21,7 +21,11 @@  # MA 02111-1307 USA  # +sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp + +ifndef TEXT_BASE  TEXT_BASE = 0xFFFA0000 +endif  PLATFORM_CPPFLAGS += -DCONFIG_440=1 diff --git a/board/amcc/bamboo/flash.c b/board/amcc/bamboo/flash.c index a30ab7ada..8a2e832cf 100644 --- a/board/amcc/bamboo/flash.c +++ b/board/amcc/bamboo/flash.c @@ -53,7 +53,7 @@ flash_info_t flash_info[CFG_MAX_FLASH_BANKS];	/* info for FLASH chips        */  static unsigned long flash_addr_table[][CFG_MAX_FLASH_BANKS] = {  	{0x87800001, 0xFFF00000, 0xFFF80000}, /* 0:boot from small flash */  	{0x00000000, 0x00000000, 0x00000000}, /* 1:boot from pci 66      */ -	{0x00000000, 0x00000000, 0x00000000}, /* 2:boot from nand flash  */ +	{0x87800001, 0x00000000, 0x00000000}, /* 0:boot from nand flash  */  	{0x87F00000, 0x87F80000, 0xFFC00001}, /* 3:boot from big flash 33*/  	{0x87F00000, 0x87F80000, 0xFFC00001}, /* 4:boot from big flash 66*/  	{0x00000000, 0x00000000, 0x00000000}, /* 5:boot from             */ @@ -134,10 +134,10 @@ unsigned long flash_init(void)  		flash_info[i].size = 0;  		/* check whether the address is 0 */ -		if (flash_addr_table[index][i] == 0) { +		if (flash_addr_table[index][i] == 0)  			continue; -		} +		DEBUGF("Detection bank %d...\n", i);  		/* call flash_get_size() to initialize sector address */  		size_b[i] = flash_get_size((vu_long *) flash_addr_table[index][i],  				   &flash_info[i]); diff --git a/board/amcc/bamboo/init.S b/board/amcc/bamboo/init.S index 7820107aa..1459eec36 100644 --- a/board/amcc/bamboo/init.S +++ b/board/amcc/bamboo/init.S @@ -1,74 +1,31 @@  /* -* -* 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 -*/ + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + *  Copyright (C) 2002 Scott McNutt <smcnutt@artesyncp.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 <ppc_asm.tmpl>  #include <config.h> - -/* General */ -#define TLB_VALID   0x00000200 - -/* Supported page sizes */ - -#define SZ_1K	    0x00000000 -#define SZ_4K	    0x00000010 -#define SZ_16K	    0x00000020 -#define SZ_64K	    0x00000030 -#define SZ_256K	    0x00000040 -#define SZ_1M	    0x00000050 -#define SZ_8M       0x00000060 -#define SZ_16M	    0x00000070 -#define SZ_256M	    0x00000090 - -/* Storage attributes */ -#define SA_W	    0x00000800	    /* Write-through */ -#define SA_I	    0x00000400	    /* Caching inhibited */ -#define SA_M	    0x00000200	    /* Memory coherence */ -#define SA_G	    0x00000100	    /* Guarded */ -#define SA_E	    0x00000080	    /* Endian */ - -/* Access control */ -#define AC_X	    0x00000024	    /* Execute */ -#define AC_W	    0x00000012	    /* Write */ -#define AC_R	    0x00000009	    /* Read */ - -/* Some handy macros */ - -#define EPN(e)		((e) & 0xfffffc00) -#define TLB0(epn,sz)	( (EPN((epn)) | (sz) | TLB_VALID ) ) -#define TLB1(rpn,erpn)	( ((rpn)&0xfffffc00) | (erpn) ) -#define TLB2(a)		( (a)&0x00000fbf ) - -#define tlbtab_start\ -	mflr    r1  ;\ -	bl 0f	    ; - -#define tlbtab_end\ -	.long 0, 0, 0	;   \ -0:	mflr    r0	;   \ -	mtlr    r1	;   \ -	blr		; - -#define tlbentry(epn,sz,rpn,erpn,attr)\ -	.long TLB0(epn,sz),TLB1(rpn,erpn),TLB2(attr) - +#include <asm-ppc/mmu.h>  /**************************************************************************   * TLB TABLE @@ -80,34 +37,68 @@   *  Pointer to the table is returned in r1   *   *************************************************************************/ - -    .section .bootpg,"ax" -    .globl tlbtab +	.section .bootpg,"ax" +	.globl tlbtab  tlbtab: -    tlbtab_start +	tlbtab_start + +	/* +	 * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the +	 * speed up boot process. It is patched after relocation to enable SA_I +	 */ +#ifndef CONFIG_NAND_SPL +	tlbentry(CFG_BOOT_BASE_ADDR, SZ_256M, CFG_BOOT_BASE_ADDR, 0, AC_R|AC_W|AC_X|SA_G) +#else +	tlbentry(CFG_NAND_BOOT_SPL_SRC, SZ_4K, CFG_NAND_BOOT_SPL_SRC, 0, AC_R|AC_W|AC_X|SA_G) +#endif + +	/* TLB-entry for init-ram in dcache (SA_I must be turned off!) */ +	tlbentry(CFG_INIT_RAM_ADDR, SZ_4K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G) + +	tlbentry(CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I) + +	/* PCI base & peripherals */ +	tlbentry(CFG_PCI_BASE, SZ_256M, CFG_PCI_BASE, 0, AC_R|AC_W|SA_G|SA_I) -    /* -     * BOOT_CS (FLASH) must be first. Before relocation SA_I can be off to use the -     * speed up boot process. It is patched after relocation to enable SA_I -     */ -    tlbentry( CFG_BOOT_BASE_ADDR, SZ_256M, CFG_BOOT_BASE_ADDR, 0, AC_R|AC_W|AC_X|SA_G/*|SA_I*/) +	tlbentry(CFG_NVRAM_BASE_ADDR, SZ_256M, CFG_NVRAM_BASE_ADDR, 0, AC_R|AC_W|AC_X|SA_W|SA_I) +	tlbentry(CFG_NAND_ADDR, SZ_4K, CFG_NAND_ADDR, 0, AC_R|AC_W|AC_X|SA_W|SA_I) -    /* TLB-entry for init-ram in dcache (SA_I must be turned off!) */ -    tlbentry( CFG_INIT_RAM_ADDR, SZ_64K, CFG_INIT_RAM_ADDR, 0, AC_R|AC_W|AC_X|SA_G ) +	/* PCI */ +	tlbentry(CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 0, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 0, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 0, AC_R|AC_W|SA_G|SA_I) +	tlbentry(CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 0, AC_R|AC_W|SA_G|SA_I) -    tlbentry( CFG_SDRAM_BASE, SZ_256M, CFG_SDRAM_BASE, 0, AC_R|AC_W|AC_X|SA_G|SA_I ) -    tlbentry( CFG_PCI_BASE, SZ_256M, CFG_PCI_BASE, 0, AC_R|AC_W|SA_G|SA_I ) -    tlbentry( CFG_NVRAM_BASE_ADDR, SZ_256M, CFG_NVRAM_BASE_ADDR, 0, AC_R|AC_W|AC_X|SA_W|SA_I ) -    tlbentry( CFG_NAND_ADDR, SZ_256M, CFG_NAND_ADDR, 0, AC_R|AC_W|AC_X|SA_W|SA_I ) +	/* USB 2.0 Device */ +	tlbentry(CFG_USB_DEVICE, SZ_1K, CFG_USB_DEVICE, 0, AC_R|AC_W|SA_G|SA_I) -    /* PCI */ -    tlbentry( CFG_PCI_MEMBASE, SZ_256M, CFG_PCI_MEMBASE, 0, AC_R|AC_W|SA_G|SA_I ) -    tlbentry( CFG_PCI_MEMBASE1, SZ_256M, CFG_PCI_MEMBASE1, 0, AC_R|AC_W|SA_G|SA_I ) -    tlbentry( CFG_PCI_MEMBASE2, SZ_256M, CFG_PCI_MEMBASE2, 0, AC_R|AC_W|SA_G|SA_I ) -    tlbentry( CFG_PCI_MEMBASE3, SZ_256M, CFG_PCI_MEMBASE3, 0, AC_R|AC_W|SA_G|SA_I ) +	tlbtab_end -    /* USB 2.0 Device */ -    tlbentry( CFG_USB_DEVICE, SZ_1K, CFG_USB_DEVICE, 0, AC_R|AC_W|SA_G|SA_I ) +#if defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) +	/* +	 * For NAND booting the first TLB has to be reconfigured to full size +	 * and with caching disabled after running from RAM! +	 */ +#define TLB00	TLB0(CFG_BOOT_BASE_ADDR, SZ_256M) +#define TLB01	TLB1(CFG_BOOT_BASE_ADDR, 0) +#define TLB02	TLB2(AC_R|AC_W|AC_X|SA_G|SA_I) -    tlbtab_end +	.globl	reconfig_tlb0 +reconfig_tlb0: +	sync +	isync +	addi	r4,r0,0x0000		/* TLB entry #0 */ +	lis	r5,TLB00@h +	ori	r5,r5,TLB00@l +	tlbwe	r5,r4,0x0000		/* Save it out */ +	lis	r5,TLB01@h +	ori	r5,r5,TLB01@l +	tlbwe	r5,r4,0x0001		/* Save it out */ +	lis	r5,TLB02@h +	ori	r5,r5,TLB02@l +	tlbwe	r5,r4,0x0002		/* Save it out */ +	sync +	isync +	blr +#endif diff --git a/board/amcc/bamboo/u-boot-nand.lds b/board/amcc/bamboo/u-boot-nand.lds new file mode 100644 index 000000000..a5dae0e98 --- /dev/null +++ b/board/amcc/bamboo/u-boot-nand.lds @@ -0,0 +1,137 @@ +/* + * (C) Copyright 2007 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +SECTIONS +{ +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    /* WARNING - the following is hand-optimized to fit within	*/ +    /* the sector layout of our flash chips!	XXX FIXME XXX	*/ + +    cpu/ppc4xx/start.o	(.text) + +    /* Align to next NAND block */ +    . = ALIGN(0x4000); +    common/environment.o  (.ppcenv) +    /* Keep some space here for redundant env and potential bad env blocks */ +    . = ALIGN(0x10000); + +    *(.text) +    *(.fixup) +    *(.got1) +  } +  _etext = .; +  PROVIDE (etext = .); +  .rodata    : +  { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >>2; +  __fixup_entries = (. - _FIXUP_TABLE_)>>2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } + +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/amcc/bamboo/u-boot.lds b/board/amcc/bamboo/u-boot.lds index 176900ec2..f6d718319 100644 --- a/board/amcc/bamboo/u-boot.lds +++ b/board/amcc/bamboo/u-boot.lds @@ -68,19 +68,7 @@ SECTIONS      cpu/ppc4xx/start.o	(.text)      board/amcc/bamboo/init.o	(.text) -    cpu/ppc4xx/kgdb.o	(.text) -    cpu/ppc4xx/traps.o	(.text) -    cpu/ppc4xx/interrupts.o	(.text) -    cpu/ppc4xx/serial.o	(.text) -    cpu/ppc4xx/cpu_init.o	(.text) -    cpu/ppc4xx/speed.o	(.text) -    common/dlmalloc.o	(.text) -    lib_generic/crc32.o		(.text) -    lib_ppc/extable.o	(.text) -    lib_generic/zlib.o		(.text) - -/*    . = env_offset;*/ -/*    common/environment.o(.text)*/ +    board/amcc/bamboo/bamboo.o	(.text)      *(.text)      *(.fixup) diff --git a/board/amcc/sequoia/sdram.c b/board/amcc/sequoia/sdram.c index f8b837ed2..78e2cb42a 100644 --- a/board/amcc/sequoia/sdram.c +++ b/board/amcc/sequoia/sdram.c @@ -371,6 +371,14 @@ void denali_core_search_data_eye(unsigned long memory_size)  }  #endif /* CONFIG_DDR_DATA_EYE */ +#if defined(CONFIG_NAND_SPL) +/* Using cpu/ppc4xx/speed.c to calculate the bus frequency is too big + * for the 4k NAND boot image so define bus_frequency to 133MHz here + * which is save for the refresh counter setup. + */ +#define get_bus_freq(val)	133000000 +#endif +  /*************************************************************************   *   * initdram -- 440EPx's DDR controller is a DENALI Core @@ -379,7 +387,11 @@ void denali_core_search_data_eye(unsigned long memory_size)  long int initdram (int board_type)  {  #if !defined(CONFIG_NAND_U_BOOT) || defined(CONFIG_NAND_SPL) +#if !defined(CONFIG_NAND_SPL)  	ulong speed = get_bus_freq(0); +#else +	ulong speed = 133333333;	/* 133MHz is on the safe side	*/ +#endif  	mtsdram(DDR0_02, 0x00000000); @@ -404,7 +416,7 @@ long int initdram (int board_type)  	mtsdram(DDR0_22, 0x00267F0B);  	mtsdram(DDR0_23, 0x00000000);  	mtsdram(DDR0_24, 0x01010002); -	if (speed > 133333333) +	if (speed > 133333334)  		mtsdram(DDR0_26, 0x5B26050C);  	else  		mtsdram(DDR0_26, 0x5B260408); diff --git a/board/amcc/sequoia/sequoia.c b/board/amcc/sequoia/sequoia.c index 930fa71cb..ba365aea3 100644 --- a/board/amcc/sequoia/sequoia.c +++ b/board/amcc/sequoia/sequoia.c @@ -363,8 +363,8 @@ int checkboard(void)  	printf("Board: Rainier - AMCC PPC440GRx Evaluation Board");  #endif -	rev = *(u8 *)(CFG_BCSR_BASE + 0); -	val = *(u8 *)(CFG_BCSR_BASE + 5) & 0x01; +	rev = in8(CFG_BCSR_BASE + 0); +	val = in8(CFG_BCSR_BASE + 5) & 0x01;  	printf(", Rev. %X, PCI=%d MHz", rev, val ? 66 : 33);  	if (s != NULL) { diff --git a/board/cds/mpc8541cds/mpc8541cds.c b/board/cds/mpc8541cds/mpc8541cds.c index a42904cf7..419232483 100644 --- a/board/cds/mpc8541cds/mpc8541cds.c +++ b/board/cds/mpc8541cds/mpc8541cds.c @@ -477,11 +477,14 @@ void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_ta  static struct pci_config_table pci_mpc85xxcds_config_table[] = {  	{0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},  	{0x1106, 0x0686, PCI_ANY_ID, 1, 2, 0, mpc85xx_config_via, {0,0,0}}, -	{0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, mpc85xx_config_via_usbide, {0,0,0}}, +	{0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, +		mpc85xx_config_via_usbide, {0,0,0}},  	{0x1105, 0x3038, PCI_ANY_ID, 1, 2, 2, mpc85xx_config_via_usb, {0,0,0}},  	{0x1106, 0x3038, PCI_ANY_ID, 1, 2, 3, mpc85xx_config_via_usb2, {0,0,0}}, -	{0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, mpc85xx_config_via_power, {0,0,0}}, -	{0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}} +	{0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, +		mpc85xx_config_via_power, {0,0,0}}, +	{0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}}, +	{},  };  static struct pci_controller hose[] = { diff --git a/board/cds/mpc8541cds/u-boot.lds b/board/cds/mpc8541cds/u-boot.lds index 1bea0074f..dc87a122a 100644 --- a/board/cds/mpc8541cds/u-boot.lds +++ b/board/cds/mpc8541cds/u-boot.lds @@ -69,6 +69,7 @@ SECTIONS      cpu/mpc85xx/interrupts.o (.text)      cpu/mpc85xx/cpu_init.o (.text)      cpu/mpc85xx/cpu.o (.text) +    drivers/tsec.o (.text)      cpu/mpc85xx/speed.o (.text)      cpu/mpc85xx/pci.o (.text)      common/dlmalloc.o (.text) diff --git a/board/cds/mpc8548cds/init.S b/board/cds/mpc8548cds/init.S index 978bda5e4..d468f5b61 100644 --- a/board/cds/mpc8548cds/init.S +++ b/board/cds/mpc8548cds/init.S @@ -64,8 +64,9 @@ tlb1_entry:  	/*  	 * Number of TLB0 and TLB1 entries in the following table  	 */ -	.long 13 +	.long (2f-1f)/16 +1:  #if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR)  	/*  	 * TLB0		4K	Non-cacheable, guarded @@ -134,7 +135,7 @@ tlb1_entry:  	/*  	 * TLB 1:	256M	Non-cacheable, guarded -	 * 0x80000000	256M	PCI1 MEM First half +	 * 0x80000000	256M	PCI1 MEM  	 */  	.long TLB1_MAS0(1, 1, 0)  	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) @@ -143,40 +144,37 @@ tlb1_entry:  	/*  	 * TLB 2:	256M	Non-cacheable, guarded -	 * 0x90000000	256M	PCI1 MEM Second half +	 * 0x90000000	256M	PCI2 MEM  	 */  	.long TLB1_MAS0(1, 2, 0)  	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) -	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE + 0x10000000), +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE),  			0,0,0,0,1,0,1,0) -	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE + 0x10000000), +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE),  			0,0,0,0,0,1,0,1,0,1)  	/* -	 * TLB 3:	256M	Non-cacheable, guarded -	 * 0xa0000000	256M	PCI2 MEM First half +	 * TLB 3:	1GB	Non-cacheable, guarded +	 * 0xa0000000	256M	PEX MEM First half +	 * 0xb0000000	256M	PEX MEM Second half +	 * 0xc0000000	256M	Rapid IO MEM First half +	 * 0xd0000000	256M	Rapid IO MEM Second half  	 */  	.long TLB1_MAS0(1, 3, 0) -	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) -	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE), 0,0,0,0,1,0,1,0) -	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PEX_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PEX_MEM_BASE), 0,0,0,0,0,1,0,1,0,1)  	/* -	 * TLB 4:	256M	Non-cacheable, guarded -	 * 0xb0000000	256M	PCI2 MEM Second half +	 * TLB 4:	Reserved for future usage  	 */ -	.long TLB1_MAS0(1, 4, 0) -	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) -	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE + 0x10000000), -			0,0,0,0,1,0,1,0) -	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE + 0x10000000), -			0,0,0,0,0,1,0,1,0,1)  	/*  	 * TLB 5:	64M	Non-cacheable, guarded  	 * 0xe000_0000	1M	CCSRBAR -	 * 0xe200_0000	16M	PCI1 IO -	 * 0xe300_0000	16M	PCI2 IO +	 * 0xe200_0000	8M	PCI1 IO +	 * 0xe280_0000	8M	PCI2 IO +	 * 0xe300_0000	16M	PEX IO  	 */  	.long TLB1_MAS0(1, 5, 0)  	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) @@ -200,19 +198,22 @@ tlb1_entry:  	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1M)  	.long TLB1_MAS2(E500_TLB_EPN(CADMUS_BASE_ADDR), 0,0,0,0,1,0,1,0)  	.long TLB1_MAS3(E500_TLB_RPN(CADMUS_BASE_ADDR), 0,0,0,0,0,1,0,1,0,1) - +2:  	entry_end  /*   * LAW(Local Access Window) configuration:   *   * 0x0000_0000     0x7fff_ffff     DDR                     2G - * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M - * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M + * 0x8000_0000     0x8fff_ffff     PCI1 MEM                256M + * 0x9000_0000     0x9fff_ffff     PCI2 MEM                256M + * 0xa000_0000     0xbfff_ffff     PEX MEM                 512M + * 0xc000_0000     0xdfff_ffff     RapidIO                 512M   * 0xe000_0000     0xe000_ffff     CCSR                    1M - * 0xe200_0000     0xe20f_ffff     PCI1 IO                 1M - * 0xe210_0000     0xe21f_ffff     PCI2 IO                 1M - * 0xf000_0000     0xf7ff_ffff     SDRAM                   128M + * 0xe200_0000     0xe27f_ffff     PCI1 IO                 8M + * 0xe280_0000     0xe2ff_ffff     PCI2 IO                 8M + * 0xe300_0000     0xe3ff_ffff     PEX IO                  16M + * 0xf000_0000     0xf3ff_ffff     SDRAM                   64M   * 0xf800_0000     0xf80f_ffff     NVRAM/CADMUS (*)        1M   * 0xff00_0000     0xff7f_ffff     FLASH (2nd bank)        8M   * 0xff80_0000     0xffff_ffff     FLASH (boot bank)       8M @@ -229,27 +230,39 @@ tlb1_entry:  #define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN)  #define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff) -#define LAWAR1 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M)) +#define LAWAR1 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_256M))  #define LAWBAR2 ((CFG_PCI2_MEM_BASE>>12) & 0xfffff) -#define LAWAR2 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M)) +#define LAWAR2 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_256M))  #define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff) -#define LAWAR3 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_1M)) +#define LAWAR3 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_8M))  #define LAWBAR4 ((CFG_PCI2_IO_PHYS>>12) & 0xfffff) -#define LAWAR4 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_1M)) +#define LAWAR4 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_8M))  /* LBC window - maps 256M 0xf0000000 -> 0xffffffff */  #define LAWBAR5 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)  #define LAWAR5 	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)) +#define LAWBAR6 ((CFG_PEX_MEM_BASE>>12) & 0xfffff) +#define LAWAR6 	(LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_512M)) + +#define LAWBAR7 ((CFG_PEX_IO_PHYS>>12) & 0xfffff) +#define LAWAR7 	(LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_16M)) + +#define LAWBAR8 ((CFG_RIO_MEM_BASE>>12) & 0xfffff) +#define LAWAR8  (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M)) +  	.section .bootpg, "ax"  	.globl	law_entry  law_entry:  	entry_start -	.long 6 +	.long (4f-3f)/8 +3:  	.long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3 -	.long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5 +	.long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5,LAWBAR6,LAWAR6,LAWBAR7,LAWAR7 +	.long LAWBAR8,LAWAR8 +4:  	entry_end diff --git a/board/cds/mpc8548cds/mpc8548cds.c b/board/cds/mpc8548cds/mpc8548cds.c index 7433ebf25..929ff2e66 100644 --- a/board/cds/mpc8548cds/mpc8548cds.c +++ b/board/cds/mpc8548cds/mpc8548cds.c @@ -51,6 +51,7 @@ int checkboard (void)  {  	volatile immap_t *immap = (immap_t *) CFG_CCSRBAR;  	volatile ccsr_gur_t *gur = &immap->im_gur; +	volatile ccsr_local_ecm_t *ecm = &immap->im_local_ecm;  	/* PCI slot in USER bits CSR[6:7] by convention. */  	uint pci_slot = get_pci_slot (); @@ -89,6 +90,12 @@ int checkboard (void)  	 */  	local_bus_init (); +	/* +	 * Fix CPU2 errata: A core hang possible while executing a +	 * msync instruction and a snoopable transaction from an I/O +	 * master tagged to make quick forward progress is present. +	 */ +	ecm->eebpcr |= (1 << 16);  	/*  	 * Hack TSEC 3 and 4 IO voltages. @@ -303,11 +310,14 @@ void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_ta  static struct pci_config_table pci_mpc85xxcds_config_table[] = {  	{0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},  	{0x1106, 0x0686, PCI_ANY_ID, 1, 2, 0, mpc85xx_config_via, {0,0,0}}, -	{0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, mpc85xx_config_via_usbide, {0,0,0}}, +	{0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, +		mpc85xx_config_via_usbide, {0,0,0}},  	{0x1105, 0x3038, PCI_ANY_ID, 1, 2, 2, mpc85xx_config_via_usb, {0,0,0}},  	{0x1106, 0x3038, PCI_ANY_ID, 1, 2, 3, mpc85xx_config_via_usb2, {0,0,0}}, -	{0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, mpc85xx_config_via_power, {0,0,0}}, -	{0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}} +	{0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, +		mpc85xx_config_via_power, {0,0,0}}, +	{0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}}, +	{},  };  static struct pci_controller hose[] = { diff --git a/board/cds/mpc8548cds/u-boot.lds b/board/cds/mpc8548cds/u-boot.lds index 2c8fe9603..c1f3495d7 100644 --- a/board/cds/mpc8548cds/u-boot.lds +++ b/board/cds/mpc8548cds/u-boot.lds @@ -69,6 +69,7 @@ SECTIONS      cpu/mpc85xx/interrupts.o (.text)      cpu/mpc85xx/cpu_init.o (.text)      cpu/mpc85xx/cpu.o (.text) +    drivers/tsec.o (.text)      cpu/mpc85xx/speed.o (.text)      cpu/mpc85xx/pci.o (.text)      common/dlmalloc.o (.text) diff --git a/board/cds/mpc8555cds/mpc8555cds.c b/board/cds/mpc8555cds/mpc8555cds.c index d980ea631..704bf0316 100644 --- a/board/cds/mpc8555cds/mpc8555cds.c +++ b/board/cds/mpc8555cds/mpc8555cds.c @@ -474,11 +474,14 @@ void dummy_func(struct pci_controller* hose, pci_dev_t dev, struct pci_config_ta  static struct pci_config_table pci_mpc85xxcds_config_table[] = {  	{0x10e3, 0x0513, PCI_ANY_ID, 1, 3, PCI_ANY_ID, dummy_func, {0,0,0}},  	{0x1106, 0x0686, PCI_ANY_ID, 1, 2, 0, mpc85xx_config_via, {0,0,0}}, -	{0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, mpc85xx_config_via_usbide, {0,0,0}}, +	{0x1106, 0x0571, PCI_ANY_ID, 1, 2, 1, +		mpc85xx_config_via_usbide, {0,0,0}},  	{0x1105, 0x3038, PCI_ANY_ID, 1, 2, 2, mpc85xx_config_via_usb, {0,0,0}},  	{0x1106, 0x3038, PCI_ANY_ID, 1, 2, 3, mpc85xx_config_via_usb2, {0,0,0}}, -	{0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, mpc85xx_config_via_power, {0,0,0}}, -	{0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}} +	{0x1106, 0x3058, PCI_ANY_ID, 1, 2, 5, +		mpc85xx_config_via_power, {0,0,0}}, +	{0x1106, 0x3068, PCI_ANY_ID, 1, 2, 6, mpc85xx_config_via_ac97, {0,0,0}}, +	{},  }; @@ -487,7 +490,7 @@ static struct pci_controller hose[] = {  	config_table: pci_mpc85xxcds_config_table,  	},  #ifdef CONFIG_MPC85XX_PCI2 -	{ } +	{},  #endif  }; diff --git a/board/cds/mpc8555cds/u-boot.lds b/board/cds/mpc8555cds/u-boot.lds index 2aa2ad78f..9285928dc 100644 --- a/board/cds/mpc8555cds/u-boot.lds +++ b/board/cds/mpc8555cds/u-boot.lds @@ -69,6 +69,7 @@ SECTIONS      cpu/mpc85xx/interrupts.o (.text)      cpu/mpc85xx/cpu_init.o (.text)      cpu/mpc85xx/cpu.o (.text) +    drivers/tsec.o (.text)      cpu/mpc85xx/speed.o (.text)      cpu/mpc85xx/pci.o (.text)      common/dlmalloc.o (.text) diff --git a/board/freescale/mpc8544ds/Makefile b/board/freescale/mpc8544ds/Makefile new file mode 100644 index 000000000..bec216863 --- /dev/null +++ b/board/freescale/mpc8544ds/Makefile @@ -0,0 +1,58 @@ +# +# Copyright 2007 Freescale Semiconductor, Inc. +# (C) Copyright 2001-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 $(TOPDIR)/config.mk + +# ifneq ($(OBJTREE),$(SRCTREE)) +# $(shell mkdir -p $(obj)./common) +# endif + +LIB	= $(obj)lib$(BOARD).a + +COBJS	:= $(BOARD).o \ +	   ../common/pixis.o + +SOBJS	:= init.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) crv $@ $(OBJS) + +clean: +	rm -f $(OBJS) $(SOBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/freescale/mpc8544ds/config.mk b/board/freescale/mpc8544ds/config.mk new file mode 100644 index 000000000..85663ef02 --- /dev/null +++ b/board/freescale/mpc8544ds/config.mk @@ -0,0 +1,32 @@ +# +# Copyright 2007 Freescale Semiconductor, Inc. +# +# 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 +# + +# +# mpc8544ds board +# +ifndef TEXT_BASE +TEXT_BASE = 0xfff80000 +endif + +PLATFORM_CPPFLAGS += -DCONFIG_E500=1 +PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1 +PLATFORM_CPPFLAGS += -DCONFIG_MPC8544=1 diff --git a/board/freescale/mpc8544ds/init.S b/board/freescale/mpc8544ds/init.S new file mode 100644 index 000000000..296fee5e6 --- /dev/null +++ b/board/freescale/mpc8544ds/init.S @@ -0,0 +1,243 @@ +/* + * Copyright 2007 Freescale Semiconductor, Inc. + * + * 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 <ppc_asm.tmpl> +#include <ppc_defs.h> +#include <asm/cache.h> +#include <asm/mmu.h> +#include <config.h> +#include <mpc85xx.h> + +#define LAWAR_TRGT_PCI1		0x00000000 +#define LAWAR_TRGT_PCIE1	0x00200000 +#define LAWAR_TRGT_PCIE2	0x00100000 +#define LAWAR_TRGT_PCIE3	0x00300000 +#define LAWAR_TRGT_LBC		0x00400000 +#define LAWAR_TRGT_DDR		0x00f00000 + +/* + * TLB0 and TLB1 Entries + * + * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR. + * However, CCSRBAR is then relocated to CFG_CCSRBAR right after + * these TLB entries are established. + * + * The TLB entries for DDR are dynamically setup in spd_sdram() + * and use TLB1 Entries 8 through 15 as needed according to the + * size of DDR memory. + * + * MAS0: tlbsel, esel, nv + * MAS1: valid, iprot, tid, ts, tsize + * MAS2: epn, sharen, x0, x1, w, i, m, g, e + * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr + */ + +#define	entry_start \ +	mflr	r1 	;	\ +	bl	0f 	; + +#define	entry_end \ +0:	mflr	r0	;	\ +	mtlr	r1	;	\ +	blr		; + + +	.section	.bootpg, "ax" +	.globl	tlb1_entry +tlb1_entry: +	entry_start + +	/* +	 * Number of TLB0 and TLB1 entries in the following table +	 */ +	.long (2f-1f)/16 +1: +	/* +	 * TLB0		4K	Non-cacheable, guarded +	 * 0xff700000	4K	Initial CCSRBAR mapping +	 * +	 * This ends up at a TLB0 Index==0 entry, and must not collide +	 * with other TLB0 Entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB0		16K	Cacheable, guarded +	 * Temporary Global data for initialization +	 * +	 * Use four 4K TLB0 entries.  These entries must be cacheable +	 * as they provide the bootstrap memory before the memory +	 * controler and real memory have been configured. +	 * +	 * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c, +	 * and must not collide with other TLB0 entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR), +			0,0,0,0,0,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024), +			0,0,0,0,0,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024), +			0,0,0,0,0,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 8 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024), +			0,0,0,0,0,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024), +			0,0,0,0,0,1,0,1,0,1) + + +	/* +	 * TLB 0:	64M	Non-cacheable, guarded +	 * 0xfc000000	64M	Covers FLASH at 0xFE800000 and 0xFF800000 +	 * Out of reset this entry is only 4K. +	 */ +	.long TLB1_MAS0(1, 0, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_BOOT_BLOCK), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_BOOT_BLOCK), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 1:	1G	Non-cacheable, guarded +	 * 0x80000000	1G	PCIE  8,9,a,b +	 */ +	.long TLB1_MAS0(1, 1, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_1G) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCIE_PHYS), +		0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCIE_PHYS), +		0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 2:	256M	Non-cacheable, guarded +	 */ +	.long TLB1_MAS0(1, 2, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI_PHYS), +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI_PHYS),	0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 3:	256M	Non-cacheable, guarded +	 */ +	.long TLB1_MAS0(1, 3, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI_PHYS + 0x10000000), +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI_PHYS + 0x10000000), +			0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 4:	64M	Non-cacheable, guarded +	 * 0xe000_0000	1M	CCSRBAR +	 * 0xe100_0000	255M	PCI IO range +	 */ +	.long TLB1_MAS0(1, 4, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1) + +#ifdef CFG_LBC_CACHE_BASE +	/* +	 * TLB 5:	64M	Cacheable, non-guarded +	 */ +	.long TLB1_MAS0(1, 5, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_CACHE_BASE), 0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_CACHE_BASE), 0,0,0,0,0,1,0,1,0,1) +#endif +	/* +	 * TLB 6:	64M	Non-cacheable, guarded +	 * 0xf8000000	64M	PIXIS 0xF8000000 - 0xFBFFFFFF +	 */ +	.long TLB1_MAS0(1, 6, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_NONCACHE_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_NONCACHE_BASE), 0,0,0,0,0,1,0,1,0,1) +2: +	entry_end + +/* + * LAW(Local Access Window) configuration: + * + * + * Notes: + *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window. + *    If flash is 8M at default position (last 8M), no LAW needed. + * + * LAW 0 is reserved for boot mapping + */ + +	.section .bootpg, "ax" +	.globl	law_entry +law_entry: +	entry_start + +	.long (4f-3f)/8 +3: +	.long	0 +	.long	(LAWAR_TRGT_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN + +	.long	(CFG_PCI1_MEM_BASE>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M) + +	.long	(CFG_PCI1_IO_PHYS>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M) + +	.long	(CFG_LBC_CACHE_BASE>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M) + +	.long	(CFG_PCIE1_MEM_PHYS>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCIE1 | (LAWAR_SIZE & LAWAR_SIZE_256M) + +	/* To keep to 10 LAWs, PCIE1_IO_PHYS must use top of mem region  */ + +	.long	(CFG_PCIE2_MEM_PHYS>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_512M) + +	.long	(CFG_PCIE2_IO_PHYS>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCIE2 | (LAWAR_SIZE & LAWAR_SIZE_16M) + +	.long	(CFG_PCIE3_MEM_PHYS>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCIE3 | (LAWAR_SIZE & LAWAR_SIZE_256M) + +	.long	(CFG_PCIE3_IO_PHYS>>12) & 0xfffff +	.long	LAWAR_EN | LAWAR_TRGT_PCIE3 | (LAWAR_SIZE & LAWAR_SIZE_16M) +4: +	entry_end diff --git a/board/freescale/mpc8544ds/mpc8544ds.c b/board/freescale/mpc8544ds/mpc8544ds.c new file mode 100644 index 000000000..4ff1da930 --- /dev/null +++ b/board/freescale/mpc8544ds/mpc8544ds.c @@ -0,0 +1,201 @@ +/* + * Copyright 2007 Freescale Semiconductor, Inc. + * + * 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 <asm/processor.h> +#include <asm/immap_85xx.h> +#include <spd.h> +#include <miiphy.h> + +#include "../common/pixis.h" + +#if defined(CONFIG_OF_FLAT_TREE) +#include <ft_build.h> +extern void ft_cpu_setup(void *blob, bd_t *bd); +#endif + +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +extern void ddr_enable_ecc(unsigned int dram_size); +#endif + +extern long int spd_sdram(void); + +void sdram_init(void); + +int board_early_init_f (void) +{ +	return 0; +} + +int checkboard (void) +{ +	volatile immap_t *immap = (immap_t *) CFG_CCSRBAR; +	volatile ccsr_gur_t *gur = &immap->im_gur; + +	if ((uint)&gur->porpllsr != 0xe00e0000) { +		printf("immap size error %x\n",&gur->porpllsr); +	} +	printf ("Board: MPC8544DS\n"); + +	return 0; +} + +long int +initdram(int board_type) +{ +	long dram_size = 0; + +	puts("Initializing\n"); + +	dram_size = spd_sdram(); + +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +	/* +	 * Initialize and enable DDR ECC. +	 */ +	ddr_enable_ecc(dram_size); +#endif +	puts("    DDR: "); +	return dram_size; +} + +#if defined(CFG_DRAM_TEST) +int +testdram(void) +{ +	uint *pstart = (uint *) CFG_MEMTEST_START; +	uint *pend = (uint *) CFG_MEMTEST_END; +	uint *p; + +	printf("Testing DRAM from 0x%08x to 0x%08x\n", +	       CFG_MEMTEST_START, +	       CFG_MEMTEST_END); + +	printf("DRAM test phase 1:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0xaaaaaaaa; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0xaaaaaaaa) { +			printf ("DRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("DRAM test phase 2:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0x55555555; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0x55555555) { +			printf ("DRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("DRAM test passed.\n"); +	return 0; +} +#endif + +int last_stage_init(void) +{ +	return 0; +} + + +unsigned long +get_board_sys_clk(ulong dummy) +{ +	u8 i, go_bit, rd_clks; +	ulong val = 0; + +	go_bit = in8(PIXIS_BASE + PIXIS_VCTL); +	go_bit &= 0x01; + +	rd_clks = in8(PIXIS_BASE + PIXIS_VCFGEN0); +	rd_clks &= 0x1C; + +	/* +	 * Only if both go bit and the SCLK bit in VCFGEN0 are set +	 * should we be using the AUX register. Remember, we also set the +	 * GO bit to boot from the alternate bank on the on-board flash +	 */ + +	if (go_bit) { +		if (rd_clks == 0x1c) +			i = in8(PIXIS_BASE + PIXIS_AUX); +		else +			i = in8(PIXIS_BASE + PIXIS_SPD); +	} else { +		i = in8(PIXIS_BASE + PIXIS_SPD); +	} + +	i &= 0x07; + +	switch (i) { +	case 0: +		val = 33333333; +		break; +	case 1: +		val = 40000000; +		break; +	case 2: +		val = 50000000; +		break; +	case 3: +		val = 66666666; +		break; +	case 4: +		val = 83000000; +		break; +	case 5: +		val = 100000000; +		break; +	case 6: +		val = 133333333; +		break; +	case 7: +		val = 166666666; +		break; +	} + +	return val; +} + +#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) +void +ft_board_setup(void *blob, bd_t *bd) +{ +	u32 *p; +	int len; + +	ft_cpu_setup(blob, bd); + +	p = ft_get_prop(blob, "/memory/reg", &len); +	if (p != NULL) { +		*p++ = cpu_to_be32(bd->bi_memstart); +		*p = cpu_to_be32(bd->bi_memsize); +	} +} +#endif diff --git a/board/freescale/mpc8544ds/u-boot.lds b/board/freescale/mpc8544ds/u-boot.lds new file mode 100644 index 000000000..1a8aaa905 --- /dev/null +++ b/board/freescale/mpc8544ds/u-boot.lds @@ -0,0 +1,148 @@ +/* + * Copyright 2007 Freescale Semiconductor, Inc. + * + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  .resetvec 0xFFFFFFFC : +  { +    *(.resetvec) +  } = 0xffff + +  .bootpg 0xFFFFF000 : +  { +    cpu/mpc85xx/start.o	(.bootpg) +    board/freescale/mpc8544ds/init.o (.bootpg) +  } = 0xffff + +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    cpu/mpc85xx/start.o	(.text) +    board/freescale/mpc8544ds/init.o (.text) +    cpu/mpc85xx/traps.o (.text) +    cpu/mpc85xx/interrupts.o (.text) +    cpu/mpc85xx/cpu_init.o (.text) +    cpu/mpc85xx/cpu.o (.text) +    cpu/mpc85xx/speed.o (.text) +    common/dlmalloc.o (.text) +    lib_generic/crc32.o (.text) +    lib_ppc/extable.o (.text) +    lib_generic/zlib.o (.text) +    *(.text) +    *(.fixup) +    *(.got1) +   } +    _etext = .; +    PROVIDE (etext = .); +    .rodata    : +   { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2; +  __fixup_entries = (. - _FIXUP_TABLE_) >> 2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/ixdp425/config.mk b/board/ixdp425/config.mk index d49c0e7e6..ecff8d741 100644 --- a/board/ixdp425/config.mk +++ b/board/ixdp425/config.mk @@ -1,4 +1,2 @@ +#  TEXT_BASE = 0x00f80000 - -# include NPE ethernet driver -BOARDLIBS = $(obj)cpu/ixp/npe/libnpe.a diff --git a/board/lpc2292sodimm/Makefile b/board/lpc2292sodimm/Makefile index 5a30198e2..18a95d7f9 100644 --- a/board/lpc2292sodimm/Makefile +++ b/board/lpc2292sodimm/Makefile @@ -1,7 +1,6 @@  # -# (C) Copyright 2002 -# Sysgo Real-Time Solutions, GmbH <www.elinos.com> -# Marius Groeger <mgroeger@sysgo.de> +# (C) Copyright 2007 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de.  #  # See file CREDITS for list of people who contributed to this  # project. @@ -24,35 +23,29 @@  include $(TOPDIR)/config.mk -LIB	= lib$(BOARD).a +LIB	= $(obj)lib$(BOARD).a -OBJS	:= lpc2292sodimm.o flash.o mmc.o spi.o mmc_hw.o eth.o -SOBJS	:= lowlevel_init.o iap_entry.o +COBJS	:= flash.o lpc2292sodimm.o +SOBJTS	:= lowlevel_init.o -$(LIB):	$(OBJS) $(SOBJS) -	$(AR) crv $@ $(OBJS) $(SOBJS) +SRCS	:= $(SOBJTS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJTS)) -# this MUST be compiled as thumb code! -iap_entry.o: -	arm-linux-gcc  -D__ASSEMBLY__ -g  -Os   -fno-strict-aliasing  \ -	-fno-common -ffixed-r8 -msoft-float  -D__KERNEL__ \ -	-DTEXT_BASE=0x81500000  -I/home/garyj/proj/LPC/u-boot/include \ -	-fno-builtin -ffreestanding -nostdinc -isystem \ -	/opt/eldk/arm/usr/bin/../lib/gcc/arm-linux/4.0.0/include -pipe  \ -	-DCONFIG_ARM -D__ARM__ -march=armv4t -mtune=arm7tdmi -mabi=apcs-gnu \ -	-c -o iap_entry.o iap_entry.S +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) crv $@ $(OBJS) $(SOBJS)  clean:  	rm -f $(SOBJS) $(OBJS)  distclean:	clean -	rm -f $(LIB) core *.bak .depend +	rm -f $(LIB) core *.bak $(obj).depend  ######################################################################### -.depend:	Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) -		$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ +# defines $(obj).depend target +include $(SRCTREE)/rules.mk --include .depend +sinclude $(obj).depend  ######################################################################### diff --git a/board/lpc2292sodimm/flash.c b/board/lpc2292sodimm/flash.c index 55aaabfe6..0fb08430c 100644 --- a/board/lpc2292sodimm/flash.c +++ b/board/lpc2292sodimm/flash.c @@ -1,6 +1,9 @@  /*   * (C) Copyright 2006 Embedded Artists AB <www.embeddedartists.com>   * + * Modified to use the routines in cpu/arm720t/lpc2292/flash.c by + * Gary Jennejohn <garyj@denx,de> + *   * 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 @@ -20,84 +23,16 @@  #include <common.h>  #include <asm/arch/hardware.h> -/* IAP commands use 32 bytes at the top of CPU internal sram, we -   use 512 bytes below that */ -#define COPY_BUFFER_LOCATION 0x40003de0 - -#define IAP_LOCATION 0x7ffffff1 -#define IAP_CMD_PREPARE 50 -#define IAP_CMD_COPY 51 -#define IAP_CMD_ERASE 52 -#define IAP_CMD_CHECK 53 -#define IAP_CMD_ID 54 -#define IAP_CMD_VERSION 55 -#define IAP_CMD_COMPARE 56 - -#define IAP_RET_CMD_SUCCESS 0 -  #define SST_BASEADDR 0x80000000  #define SST_ADDR1 ((volatile ushort*)(SST_BASEADDR + (0x5555 << 1)))  #define SST_ADDR2 ((volatile ushort*)(SST_BASEADDR + (0x2AAA << 1))) -static unsigned long command[5]; -static unsigned long result[2]; -  flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; -extern void iap_entry(unsigned long * command, unsigned long * result); - -/*----------------------------------------------------------------------- - * - */ -int get_flash_sector(flash_info_t * info, ulong flash_addr) -{ -	int i; - -	for(i=1; i < (info->sector_count); i++) { -		if (flash_addr < (info->start[i])) -			break; -	} - -	return (i-1); -} - -/*----------------------------------------------------------------------- - * This function assumes that flash_addr is aligned on 512 bytes boundary - * in flash. This function also assumes that prepare have been called - * for the sector in question. - */ -int copy_buffer_to_flash(flash_info_t * info, ulong flash_addr) -{ -	int first_sector; -	int last_sector; - -	first_sector = get_flash_sector(info, flash_addr); -	last_sector = get_flash_sector(info, flash_addr + 512 - 1); - -	/* prepare sectors for write */ -	command[0] = IAP_CMD_PREPARE; -	command[1] = first_sector; -	command[2] = last_sector; -	iap_entry(command, result); -	if (result[0] != IAP_RET_CMD_SUCCESS) { -		printf("IAP prepare failed\n"); -		return ERR_PROG_ERROR; -	} - -	command[0] = IAP_CMD_COPY; -	command[1] = flash_addr; -	command[2] = COPY_BUFFER_LOCATION; -	command[3] = 512; -	command[4] = CFG_SYS_CLK_FREQ >> 10; -	iap_entry(command, result); -	if (result[0] != IAP_RET_CMD_SUCCESS) { -		printf("IAP copy failed\n"); -		return 1; -	} - -	return 0; -} +extern int lpc2292_copy_buffer_to_flash(flash_info_t *, ulong); +extern int lpc2292_flash_erase(flash_info_t *, int, int); +extern int lpc2292_write_buff (flash_info_t *, uchar *, ulong, ulong);  /*-----------------------------------------------------------------------   * @@ -220,56 +155,6 @@ void flash_print_info (flash_info_t * info)  	printf ("\n");  } -/*----------------------------------------------------------------------- - */ - -int flash_erase_philips (flash_info_t * info, int s_first, int s_last) -{ -	int flag; -	int prot; -	int sect; - -	prot = 0; -	for (sect = s_first; sect <= s_last; ++sect) { -		if (info->protect[sect]) { -			prot++; -		} -	} -	if (prot) -		return ERR_PROTECTED; - - -	flag = disable_interrupts(); - -	printf ("Erasing %d sectors starting at sector %2d.\n" -	"This make take some time ... ", -	s_last - s_first + 1, s_first); - -	command[0] = IAP_CMD_PREPARE; -	command[1] = s_first; -	command[2] = s_last; -	iap_entry(command, result); -	if (result[0] != IAP_RET_CMD_SUCCESS) { -		printf("IAP prepare failed\n"); -		return ERR_PROTECTED; -	} - -	command[0] = IAP_CMD_ERASE; -	command[1] = s_first; -	command[2] = s_last; -	command[3] = CFG_SYS_CLK_FREQ >> 10; -	iap_entry(command, result); -	if (result[0] != IAP_RET_CMD_SUCCESS) { -		printf("IAP erase failed\n"); -		return ERR_PROTECTED; -	} - -	if (flag) -		enable_interrupts(); - -	return ERR_OK; -} -  int flash_erase_sst (flash_info_t * info, int s_first, int s_last)  {  	int i; @@ -294,7 +179,7 @@ int flash_erase (flash_info_t * info, int s_first, int s_last)  		case (SST_MANUFACT & FLASH_VENDMASK):  			return flash_erase_sst(info, s_first, s_last);  		case (PHILIPS_LPC2292 & FLASH_VENDMASK): -			return flash_erase_philips(info, s_first, s_last); +			return lpc2292_flash_erase(info, s_first, s_last);  		default:  			return ERR_PROTECTED;  	} @@ -353,122 +238,13 @@ int write_buff_sst (flash_info_t * info, uchar * src, ulong addr, ulong cnt)  	return ret;  } -int write_buff_philips (flash_info_t * info, -			uchar * src, -			ulong addr, -			ulong cnt) -{ -	int first_copy_size; -	int last_copy_size; -	int first_block; -	int last_block; -	int nbr_mid_blocks; -	uchar memmap_value; -	ulong i; -	uchar* src_org; -	uchar* dst_org; -	int ret = ERR_OK; - -	src_org = src; -	dst_org = (uchar*)addr; - -	first_block = addr / 512; -	last_block = (addr + cnt) / 512; -	nbr_mid_blocks = last_block - first_block - 1; - -	first_copy_size = 512 - (addr % 512); -	last_copy_size = (addr + cnt) % 512; - -#if 0 -	printf("\ncopy first block: (1) %lX -> %lX 0x200 bytes, " -		"(2) %lX -> %lX 0x%X bytes, (3) %lX -> %lX 0x200 bytes\n", -	(ulong)(first_block * 512), -	(ulong)COPY_BUFFER_LOCATION, -	(ulong)src, -	(ulong)(COPY_BUFFER_LOCATION + 512 - first_copy_size), -	first_copy_size, -	(ulong)COPY_BUFFER_LOCATION, -	(ulong)(first_block * 512)); -#endif - -	/* copy first block */ -	memcpy((void*)COPY_BUFFER_LOCATION, -		(void*)(first_block * 512), 512); -	memcpy((void*)(COPY_BUFFER_LOCATION + 512 - first_copy_size), -		src, first_copy_size); -	copy_buffer_to_flash(info, first_block * 512); -	src += first_copy_size; -	addr += first_copy_size; - -	/* copy middle blocks */ -	for (i = 0; i < nbr_mid_blocks; i++) { -#if 0 -		printf("copy middle block: %lX -> %lX 512 bytes, " -		"%lX -> %lX 512 bytes\n", -		(ulong)src, -		(ulong)COPY_BUFFER_LOCATION, -		(ulong)COPY_BUFFER_LOCATION, -		(ulong)addr); -#endif -		memcpy((void*)COPY_BUFFER_LOCATION, src, 512); -		copy_buffer_to_flash(info, addr); -		src += 512; -		addr += 512; -	} - - -	if (last_copy_size > 0) { -#if 0 -		printf("copy last block: (1) %lX -> %lX 0x200 bytes, " -		"(2) %lX -> %lX 0x%X bytes, (3) %lX -> %lX x200 bytes\n", -		(ulong)(last_block * 512), -		(ulong)COPY_BUFFER_LOCATION, -		(ulong)src, -		(ulong)(COPY_BUFFER_LOCATION), -		last_copy_size, -		(ulong)COPY_BUFFER_LOCATION, -		(ulong)addr); -#endif -		/* copy last block */ -		memcpy((void*)COPY_BUFFER_LOCATION, -			(void*)(last_block * 512), 512); -		memcpy((void*)COPY_BUFFER_LOCATION, -			src, last_copy_size); -		copy_buffer_to_flash(info, addr); -	} - -	/* verify write */ -	memmap_value = GET8(MEMMAP); - -	disable_interrupts(); - -	PUT8(MEMMAP, 01);		/* we must make sure that initial 64 -							   bytes are taken from flash when we -							   do the compare */ - -	for (i = 0; i < cnt; i++) { -		if (*dst_org != *src_org){ -			printf("Write failed. Byte %lX differs\n", i); -			ret = ERR_PROG_ERROR; -			break; -		} -		dst_org++; -		src_org++; -	} - -	PUT8(MEMMAP, memmap_value); -	enable_interrupts(); - -	return ret; -} -  int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)  {  	switch (info->flash_id & FLASH_VENDMASK) {  		case (SST_MANUFACT & FLASH_VENDMASK):  			return write_buff_sst(info, src, addr, cnt);  		case (PHILIPS_LPC2292 & FLASH_VENDMASK): -			return write_buff_philips(info, src, addr, cnt); +			return lpc2292_write_buff(info, src, addr, cnt);  		default:  			return ERR_PROG_ERROR;  	} diff --git a/board/motionpro/motionpro.c b/board/motionpro/motionpro.c index d60d23332..6eb5fe9cf 100644 --- a/board/motionpro/motionpro.c +++ b/board/motionpro/motionpro.c @@ -28,7 +28,14 @@  #include <common.h>  #include <mpc5xxx.h> +#include <miiphy.h> +#if defined(CONFIG_OF_FLAT_TREE) +#include <ft_build.h> +#endif +#if defined(CONFIG_STATUS_LED) +#include <status_led.h> +#endif /* CONFIG_STATUS_LED */  /* Kollmorgen DPR initialization data */  struct init_elem { @@ -75,11 +82,27 @@ int board_early_init_r(void)  } +/* + * Additional PHY intialization. After being reset in mpc5xxx_fec_init_phy(), + * PHY goes into FX mode.  To take it out of the FX mode and switch into + * desired TX operation, one needs to clear the FX_SEL bit of Mode Control + * Register. + */ +void reset_phy(void) +{ +	unsigned short mode_control; + +	miiphy_read("FEC ETHERNET", CONFIG_PHY_ADDR, 0x15, &mode_control); +	miiphy_write("FEC ETHERNET", CONFIG_PHY_ADDR, 0x15, +			mode_control & 0xfffe); +	return; +} +  #ifndef CFG_RAMBOOT  /*   * Helper function to initialize SDRAM controller.   */ -static void sdram_start (int hi_addr) +static void sdram_start(int hi_addr)  {  	long hi_addr_bit = hi_addr ? 0x01000000 : 0; @@ -111,7 +134,7 @@ static void sdram_start (int hi_addr)  /*   * Initalize SDRAM - configure SDRAM controller, detect memory size.   */ -long int initdram (int board_type) +long int initdram(int board_type)  {  	ulong dramsize = 0;  #ifndef CFG_RAMBOOT @@ -165,8 +188,43 @@ long int initdram (int board_type)  } -int checkboard (void) +int checkboard(void)  { -	puts("Board: Promess Motion-PRO board\n"); +	uchar rev = *(vu_char *)CPLD_REV_REGISTER; +	printf("Board: Promess Motion-PRO board (CPLD rev. 0x%02x)\n", rev);  	return 0;  } + + +#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) +void ft_board_setup(void *blob, bd_t *bd) +{ +	ft_cpu_setup(blob, bd); +} +#endif /* defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) */ + + +#if defined(CONFIG_STATUS_LED) +void __led_init(led_id_t regaddr, int state) +{ +	*((vu_long *) regaddr) |= ENABLE_GPIO_OUT; + +	if (state == STATUS_LED_ON) +		*((vu_long *) regaddr) |= LED_ON; +	else +		*((vu_long *) regaddr) &= ~LED_ON; +} + +void __led_set(led_id_t regaddr, int state) +{ +	if (state == STATUS_LED_ON) +		*((vu_long *) regaddr) |= LED_ON; +	else +		*((vu_long *) regaddr) &= ~LED_ON; +} + +void __led_toggle(led_id_t regaddr) +{ +	*((vu_long *) regaddr) ^= LED_ON; +} +#endif /* CONFIG_STATUS_LED */ diff --git a/board/mpc8313erdb/Makefile b/board/mpc8313erdb/Makefile new file mode 100644 index 000000000..a987e510d --- /dev/null +++ b/board/mpc8313erdb/Makefile @@ -0,0 +1,50 @@ +# +# (C) Copyright 2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).a + +COBJS	:= $(BOARD).o sdram.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) +	$(AR) crv $@ $(OBJS) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/mpc8313erdb/config.mk b/board/mpc8313erdb/config.mk new file mode 100644 index 000000000..f76826495 --- /dev/null +++ b/board/mpc8313erdb/config.mk @@ -0,0 +1 @@ +TEXT_BASE = 0xFE000000 diff --git a/board/mpc8313erdb/mpc8313erdb.c b/board/mpc8313erdb/mpc8313erdb.c new file mode 100644 index 000000000..999fe9e39 --- /dev/null +++ b/board/mpc8313erdb/mpc8313erdb.c @@ -0,0 +1,116 @@ +/* + * Copyright (C) Freescale Semiconductor, Inc. 2006-2007 + * + * Author: Scott Wood <scottwood@freescale.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 <ft_build.h> +#include <pci.h> +#include <mpc83xx.h> + +DECLARE_GLOBAL_DATA_PTR; + +int board_early_init_f(void) +{ +#ifndef CFG_8313ERDB_BROKEN_PMC +	volatile immap_t *im = (immap_t *)CFG_IMMR; + +	if (im->pmc.pmccr1 & PMCCR1_POWER_OFF) +		gd->flags |= GD_FLG_SILENT; +#endif + +	return 0; +} + +int checkboard(void) +{ +	puts("Board: Freescale MPC8313ERDB\n"); +	return 0; +} + +static struct pci_region pci_regions[] = { +	{ +		bus_start: CFG_PCI1_MEM_BASE, +		phys_start: CFG_PCI1_MEM_PHYS, +		size: CFG_PCI1_MEM_SIZE, +		flags: PCI_REGION_MEM | PCI_REGION_PREFETCH +	}, +	{ +		bus_start: CFG_PCI1_MMIO_BASE, +		phys_start: CFG_PCI1_MMIO_PHYS, +		size: CFG_PCI1_MMIO_SIZE, +		flags: PCI_REGION_MEM +	}, +	{ +		bus_start: CFG_PCI1_IO_BASE, +		phys_start: CFG_PCI1_IO_PHYS, +		size: CFG_PCI1_IO_SIZE, +		flags: PCI_REGION_IO +	} +}; + +void pci_init_board(void) +{ +	volatile immap_t *immr = (volatile immap_t *)CFG_IMMR; +	volatile clk83xx_t *clk = (volatile clk83xx_t *)&immr->clk; +	volatile law83xx_t *pci_law = immr->sysconf.pcilaw; +	struct pci_region *reg[] = { pci_regions }; +	int warmboot; + +	/* Enable all 3 PCI_CLK_OUTPUTs. */ +	clk->occr |= 0xe0000000; + +	/* +	 * Configure PCI Local Access Windows +	 */ +	pci_law[0].bar = CFG_PCI1_MEM_PHYS & LAWBAR_BAR; +	pci_law[0].ar = LBLAWAR_EN | LBLAWAR_512MB; + +	pci_law[1].bar = CFG_PCI1_IO_PHYS & LAWBAR_BAR; +	pci_law[1].ar = LBLAWAR_EN | LBLAWAR_1MB; + +	warmboot = gd->bd->bi_bootflags & BOOTFLAG_WARM; +#ifndef CFG_8313ERDB_BROKEN_PMC +	warmboot |= immr->pmc.pmccr1 & PMCCR1_POWER_OFF; +#endif + +	mpc83xx_pci_init(1, reg, warmboot); +} + +#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) +void ft_board_setup(void *blob, bd_t *bd) +{ +	u32 *p; +	int len; + +#ifdef CONFIG_PCI +	ft_pci_setup(blob, bd); +#endif +	ft_cpu_setup(blob, bd); + +	p = ft_get_prop(blob, "/memory/reg", &len); +	if (p) { +		*p++ = cpu_to_be32(bd->bi_memstart); +		*p = cpu_to_be32(bd->bi_memsize); +	} +} +#endif diff --git a/board/mpc8313erdb/sdram.c b/board/mpc8313erdb/sdram.c new file mode 100644 index 000000000..4b6778837 --- /dev/null +++ b/board/mpc8313erdb/sdram.c @@ -0,0 +1,133 @@ +/* + * Copyright (C) Freescale Semiconductor, Inc. 2006-2007 + * + * Authors: Nick.Spence@freescale.com + *          Wilson.Lo@freescale.com + *          scottwood@freescale.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 <mpc83xx.h> +#include <spd_sdram.h> + +#include <asm/bitops.h> +#include <asm/io.h> + +#include <asm/processor.h> + +#ifndef CFG_8313ERDB_BROKEN_PMC +static void resume_from_sleep(void) +{ +	DECLARE_GLOBAL_DATA_PTR; +	u32 magic = *(u32 *)0; + +	typedef void (*func_t)(void); +	func_t resume = *(func_t *)4; + +	if (magic == 0xf5153ae5) +		resume(); + +	gd->flags &= ~GD_FLG_SILENT; +	puts("\nResume from sleep failed: bad magic word\n"); +} +#endif + +/* Fixed sdram init -- doesn't use serial presence detect. + * + * This is useful for faster booting in configs where the RAM is unlikely + * to be changed, or for things like NAND booting where space is tight. + */ +static long fixed_sdram(void) +{ +	volatile immap_t *im = (volatile immap_t *)CFG_IMMR; +	u32 msize = CFG_DDR_SIZE * 1024 * 1024; +	u32 msize_log2 = __ilog2(msize); + +	im->sysconf.ddrlaw[0].bar = CFG_DDR_SDRAM_BASE >> 12; +	im->sysconf.ddrlaw[0].ar = LBLAWAR_EN | (msize_log2 - 1); +	im->sysconf.ddrcdr = CFG_DDRCDR_VALUE; + +	/* +	 * Erratum DDR3 requires a 50ms delay after clearing DDRCDR[DDR_cfg], +	 * or the DDR2 controller may fail to initialize correctly. +	 */ +	udelay(50000); + +	im->ddr.csbnds[0].csbnds = (msize - 1) >> 24; +	im->ddr.cs_config[0] = CFG_DDR_CONFIG; + +	/* Currently we use only one CS, so disable the other bank. */ +	im->ddr.cs_config[1] = 0; + +	im->ddr.sdram_clk_cntl = CFG_DDR_CLK_CNTL; +	im->ddr.timing_cfg_3 = CFG_DDR_TIMING_3; +	im->ddr.timing_cfg_1 = CFG_DDR_TIMING_1; +	im->ddr.timing_cfg_2 = CFG_DDR_TIMING_2; +	im->ddr.timing_cfg_0 = CFG_DDR_TIMING_0; + +#ifndef CFG_8313ERDB_BROKEN_PMC +	if (im->pmc.pmccr1 & PMCCR1_POWER_OFF) +		im->ddr.sdram_cfg = CFG_SDRAM_CFG | SDRAM_CFG_BI; +	else +#endif +		im->ddr.sdram_cfg = CFG_SDRAM_CFG; + +	im->ddr.sdram_cfg2 = CFG_SDRAM_CFG2; +	im->ddr.sdram_mode = CFG_DDR_MODE; +	im->ddr.sdram_mode2 = CFG_DDR_MODE_2; + +	im->ddr.sdram_interval = CFG_DDR_INTERVAL; +	sync(); + +	/* enable DDR controller */ +	im->ddr.sdram_cfg |= SDRAM_CFG_MEM_EN; + +	return msize; +} + +long int initdram(int board_type) +{ +	volatile immap_t *im = (volatile immap_t *)CFG_IMMR; +	volatile lbus83xx_t *lbc = &im->lbus; +	u32 msize; + +	if ((im->sysconf.immrbar & IMMRBAR_BASE_ADDR) != (u32)im) +		return -1; + +	puts("Initializing\n"); + +	/* DDR SDRAM - Main SODIMM */ +	msize = fixed_sdram(); + +	/* Local Bus setup lbcr and mrtpr */ +	lbc->lbcr = CFG_LBC_LBCR; +	lbc->mrtpr = CFG_LBC_MRTPR; +	sync(); + +#ifndef CFG_8313ERDB_BROKEN_PMC +	if (im->pmc.pmccr1 & PMCCR1_POWER_OFF) +		resume_from_sleep(); +#endif + +	puts("   DDR RAM: "); +	/* return total bus SDRAM size(bytes)  -- DDR */ +	return msize; +} diff --git a/board/mpc8313erdb/u-boot.lds b/board/mpc8313erdb/u-boot.lds new file mode 100644 index 000000000..937c87a27 --- /dev/null +++ b/board/mpc8313erdb/u-boot.lds @@ -0,0 +1,123 @@ +/* + * (C) Copyright 2006 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +OUTPUT_ARCH(powerpc) +SECTIONS +{ +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    cpu/mpc83xx/start.o	(.text) +    *(.text) +    *(.fixup) +    *(.got1) +    . = ALIGN(16); +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x0FFF) & 0xFFFFF000; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2; +  __fixup_entries = (. - _FIXUP_TABLE_) >> 2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(4096); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(4096); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} +ENTRY(_start) diff --git a/board/mpc8349itx/mpc8349itx.c b/board/mpc8349itx/mpc8349itx.c index 2b3ded176..178b1d36f 100644 --- a/board/mpc8349itx/mpc8349itx.c +++ b/board/mpc8349itx/mpc8349itx.c @@ -80,8 +80,7 @@ int fixed_sdram(void)  	im->ddr.sdram_interval =  	    (0x0410 << SDRAM_INTERVAL_REFINT_SHIFT) | (0x0100 <<  						       SDRAM_INTERVAL_BSTOPRE_SHIFT); -	im->ddr.sdram_clk_cntl = -	    DDR_SDRAM_CLK_CNTL_SS_EN | DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05; +	im->ddr.sdram_clk_cntl = CFG_DDR_SDRAM_CLK_CNTL;  	udelay(200); diff --git a/board/mpc8360emds/config.mk b/board/mpc8360emds/config.mk index 5801a5f17..9ace8860c 100644 --- a/board/mpc8360emds/config.mk +++ b/board/mpc8360emds/config.mk @@ -26,8 +26,3 @@  #  TEXT_BASE = 0xFE000000 - -# -# Additional board-specific libraries -# -BOARDLIBS = libfdt/libfdt.a diff --git a/board/mpc8540ads/init.S b/board/mpc8540ads/init.S index 242cb9fbc..544fde94c 100644 --- a/board/mpc8540ads/init.S +++ b/board/mpc8540ads/init.S @@ -260,8 +260,8 @@ tlb1_entry:  #define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)  #define LAWAR2	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)) -#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff) -#define LAWAR3	(LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M)) +#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff) +#define LAWAR3	(LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_1M))  /*   * Rapid IO at 0xc000_0000 for 512 M diff --git a/board/mpc8560ads/init.S b/board/mpc8560ads/init.S index 242cb9fbc..544fde94c 100644 --- a/board/mpc8560ads/init.S +++ b/board/mpc8560ads/init.S @@ -260,8 +260,8 @@ tlb1_entry:  #define LAWBAR2 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff)  #define LAWAR2	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)) -#define LAWBAR3 ((CFG_PCI1_IO_BASE>>12) & 0xfffff) -#define LAWAR3	(LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_16M)) +#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff) +#define LAWAR3	(LAWAR_EN | LAWAR_TRGT_IF_PCIX | (LAWAR_SIZE & LAWAR_SIZE_1M))  /*   * Rapid IO at 0xc000_0000 for 512 M diff --git a/board/mpc8568mds/Makefile b/board/mpc8568mds/Makefile new file mode 100644 index 000000000..a799aa4cc --- /dev/null +++ b/board/mpc8568mds/Makefile @@ -0,0 +1,58 @@ +# +# Copyright 2004-2007 Freescale Semiconductor. +# (C) Copyright 2001-2006 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 $(TOPDIR)/config.mk +ifneq ($(OBJTREE),$(SRCTREE)) +$(shell mkdir -p $(obj)../common) +endif + +LIB	= $(obj)lib$(BOARD).a + +COBJS	:= $(BOARD).o \ +	bcsr.o \ +	ft_board.o + +SOBJS	:= init.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) + +clean: +	rm -f $(OBJS) $(SOBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/mpc8568mds/bcsr.c b/board/mpc8568mds/bcsr.c new file mode 100644 index 000000000..2e2e8cd18 --- /dev/null +++ b/board/mpc8568mds/bcsr.c @@ -0,0 +1,49 @@ +/* + * Copyright 2007 Freescale Semiconductor. + * + * 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 "bcsr.h" + +void enable_8568mds_duart() +{ +	volatile uint* duart_mux	= (uint *)(CFG_CCSRBAR + 0xe0060); +	volatile uint* devices		= (uint *)(CFG_CCSRBAR + 0xe0070); +	volatile u8 *bcsr		= (u8 *)(CFG_BCSR); + +	*duart_mux = 0x80000000;	/* Set the mux to Duart on PMUXCR */ +	*devices  = 0;			/* Enable all peripheral devices */ +	bcsr[5] |= 0x01;		/* Enable Duart in BCSR*/ +} + +void enable_8568mds_flash_write() +{ +	volatile u8 *bcsr = (u8 *)(CFG_BCSR); + +	bcsr[9] |= 0x01; +} + +void disable_8568mds_flash_write() +{ +	volatile u8 *bcsr = (u8 *)(CFG_BCSR); + +	bcsr[9] &= ~(0x01); +} diff --git a/board/mpc8568mds/bcsr.h b/board/mpc8568mds/bcsr.h new file mode 100644 index 000000000..8d4cb2f14 --- /dev/null +++ b/board/mpc8568mds/bcsr.h @@ -0,0 +1,99 @@ +/* + * Copyright 2007 Freescale Semiconductor. + * + * 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 __BCSR_H_ +#define __BCSR_H_ + +#include <common.h> + +/* BCSR Bit definitions +	* BCSR 0 * +	0:3	ccb sys pll +	4:6	cfg core pll +	7	cfg boot seq + +	* BCSR 1 * +	0:2 	cfg rom lock +	3:5 	cfg host agent +	6	PCI IO +	7	cfg RIO size + +	* BCSR 2 * +	0:4	QE PLL +	5	QE clock +	6	cfg PCI arbiter + +	* BCSR 3 * +	0	TSEC1 reduce +	1	TSEC2 reduce +	2:3	TSEC1 protocol +	4:5 	TSEC2 protocol +	6	PHY1 slave +	7	PHY2 slave + +	* BCSR 4 * +	4	clock enable +	5	boot EPROM +	6	GETH transactive reset +	7	BRD write potect + +	* BCSR 5 * +	1:3	Leds 1-3 +	4	UPC1 enable +	5	UPC2 enable +	6	UPC2 pos +	7	RS232 enable + +	* BCSR 6 * +	0	CFG ver 0 +	1	CFG ver 1 +	6	Register config led +	7	Power on reset + +	* BCSR 7 * +	2 	board host mode indication +	5 	enable TSEC1 PHY +	6 	enable TSEC2 PHY + +	* BCSR 8 * +	0	UCC GETH1 enable +	1	UCC GMII enable +	3	UCC TBI enable +	5	UCC MII enable +	7	Real time clock reset + +	* BCSR 9 * +	0	UCC2 GETH enable +	1	UCC2 GMII enable +	3	UCC2 TBI enable +	5	UCC2 MII enable +	6	Ready only - indicate flash ready after burning +	7	Flash write protect +*/ + +/*BCSR Utils functions*/ + +void enable_8568mds_duart(void); +void enable_8568mds_flash_write(void); +void disable_8568mds_flash_write(void); + +#endif	/* __BCSR_H_ */ diff --git a/board/mpc8568mds/config.mk b/board/mpc8568mds/config.mk new file mode 100644 index 000000000..021522caf --- /dev/null +++ b/board/mpc8568mds/config.mk @@ -0,0 +1,30 @@ +# +# Copyright 2007 Freescale Semiconductor. +# +# 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 +# + +# +# mpc8568mds board +# +TEXT_BASE = 0xfff80000 + +PLATFORM_CPPFLAGS += -DCONFIG_E500=1 +PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1 +PLATFORM_CPPFLAGS += -DCONFIG_MPC8568=1 diff --git a/cpu/microblaze/disable_int.S b/board/mpc8568mds/ft_board.c index aecd79513..36815ccfb 100644 --- a/cpu/microblaze/disable_int.S +++ b/board/mpc8568mds/ft_board.c @@ -1,7 +1,5 @@  /* - * (C) Copyright 2007 Michal Simek - * - * Michal  SIMEK <monstr@monstr.eu> + * Copyright 2004-2007 Freescale Semiconductor.   *   * See file CREDITS for list of people who contributed to this   * project. @@ -13,7 +11,7 @@   *   * 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 + * 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 @@ -22,25 +20,26 @@   * MA 02111-1307 USA   */ -	.text -	.globl	microblaze_disable_interrupts -	.ent	microblaze_disable_interrupts -	.align	2 -microblaze_disable_interrupts: -	#Make space on stack for a temporary -	addi	r1, r1, -4 -	#Save register r12 -	swi	r12, r1, 0 -	#Read the MSR register -	mfs	r12, rmsr -	#Clear the interrupt enable bit -	andi	r12, r12, ~2 -	#Save the MSR register -	mts	rmsr, r12 -	#Load register r12 -	lwi	r12, r1, 0 -	#Return -	rtsd	r15, 8 -	#Update stack in the delay slot -	addi	r1, r1, 4 -	.end	microblaze_disable_interrupts +#include <common.h> + +#include <ft_build.h> + +extern void ft_cpu_setup(void *blob, bd_t *bd); + +#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) +void +ft_board_setup(void *blob, bd_t *bd) +{ +	u32 *p; +	int len; +#ifdef CONFIG_PCI +	ft_pci_setup(blob, bd); +#endif +	ft_cpu_setup(blob, bd); +	p = ft_get_prop(blob, "/memory/reg", &len); +	if (p != NULL) { +		*p++ = cpu_to_be32(bd->bi_memstart); +		*p = cpu_to_be32(bd->bi_memsize); +	} +} +#endif /* CONFIG_OF_FLAT_TREE && CONFIG_OF_BOARD_SETUP */ diff --git a/board/mpc8568mds/init.S b/board/mpc8568mds/init.S new file mode 100644 index 000000000..0d879821e --- /dev/null +++ b/board/mpc8568mds/init.S @@ -0,0 +1,258 @@ +/* + * Copyright 2004-2007 Freescale Semiconductor. + * Copyright 2002,2003, Motorola Inc. + * + * 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 <ppc_asm.tmpl> +#include <ppc_defs.h> +#include <asm/cache.h> +#include <asm/mmu.h> +#include <config.h> +#include <mpc85xx.h> + + +/* + * TLB0 and TLB1 Entries + * + * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR. + * However, CCSRBAR is then relocated to CFG_CCSRBAR right after + * these TLB entries are established. + * + * The TLB entries for DDR are dynamically setup in spd_sdram() + * and use TLB1 Entries 8 through 15 as needed according to the + * size of DDR memory. + * + * MAS0: tlbsel, esel, nv + * MAS1: valid, iprot, tid, ts, tsize + * MAS2: epn, sharen, x0, x1, w, i, m, g, e + * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr + */ +#define	entry_start \ +	mflr	r1	;	\ +	bl	0f	; + +#define	entry_end \ +0:	mflr	r0	;	\ +	mtlr	r1	;	\ +	blr		; + + +	.section	.bootpg, "ax" +	.globl	tlb1_entry +tlb1_entry: +	entry_start + +	/* +	 * Number of TLB0 and TLB1 entries in the following table +	 */ +	.long (2f-1f)/16 + +1: +#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR) +	/* +	 * TLB0		4K	Non-cacheable, guarded +	 * 0xff700000	4K	Initial CCSRBAR mapping +	 * +	 * This ends up at a TLB0 Index==0 entry, and must not collide +	 * with other TLB0 Entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1) +#else +#error("Update the number of table entries in tlb1_entry") +#endif + +	/* +	 * TLB0		16K	Cacheable, non-guarded +	 * 0xd001_0000	16K	Temporary Global data for initialization +	 * +	 * Use four 4K TLB0 entries.  These entries must be cacheable +	 * as they provide the bootstrap memory before the memory +	 * controler and real memory have been configured. +	 * +	 * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c, +	 * and must not collide with other TLB0 entries. +	 */ + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR), 0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR), 0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024), +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024), +			0,0,0,0,0,1,0,1,0,1) + +	/* TLB 1 Initializations */ +	/* +	 * TLBe 0:	16M	Non-cacheable, guarded +	 * 0xff000000	16M	FLASH (upper half) +	 * Out of reset this entry is only 4K. +	 */ +	.long TLB1_MAS0(1, 0, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE + 0x1000000), +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE + 0x1000000), +			0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLBe 1:	16M	Non-cacheable, guarded +	 * 0xfe000000	16M	FLASH (lower half) +	 */ +	.long TLB1_MAS0(1, 1, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_16M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLBe 2:	256M	Non-cacheable, guarded +	 * 0x80000000	256M	PCI1 MEM +	 */ +	.long TLB1_MAS0(1, 2, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLBe 3:	256M	Non-cacheable, guarded +	 * 0xa0000000	256M	PCIe Mem +	 */ +	.long TLB1_MAS0(1, 3, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PEX_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PEX_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLBe 4:	Reserved for future usage +	 */ + +	/* +	 * TLBe 5:	64M	Non-cacheable, guarded +	 * 0xe000_0000	1M	CCSRBAR +	 * 0xe200_0000	8M	PCI1 IO +	 * 0xe280_0000	8M	PCIe IO +	 */ +	.long TLB1_MAS0(1, 5, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLBe 6:	64M	Cacheable, non-guarded +	 * 0xf000_0000	64M	LBC SDRAM +	 */ +	.long TLB1_MAS0(1, 6, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_SDRAM_BASE), 0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_SDRAM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLBe 7:	256K	Non-cacheable, guarded +	 * 0xf8000000	32K BCSR +	 * 0xf8008000	32K PIB (CS4) +	 * 0xf8010000	32K PIB (CS5) +	 */ +	.long TLB1_MAS0(1, 7, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256K) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_BCSR_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_BCSR_BASE), 0,0,0,0,0,1,0,1,0,1) + +2: +	entry_end + +/* + * LAW(Local Access Window) configuration: + * + *0)   0x0000_0000   0x7fff_ffff     DDR                     2G + *1)   0x8000_0000   0x9fff_ffff     PCI1 MEM                256MB + *2)   0xa000_0000   0xbfff_ffff     PCIe MEM                256MB + *5)   0xc000_0000   0xdfff_ffff     SRIO                    256MB + *-)   0xe000_0000   0xe00f_ffff     CCSR                    1M + *3)   0xe200_0000   0xe27f_ffff     PCI1 I/O                8M + *4)   0xe280_0000   0xe2ff_ffff     PCIe I/0                8M + *6.a) 0xf000_0000   0xf3ff_ffff     SDRAM                   64MB + *6.b) 0xf800_0000   0xf800_7fff     BCSR                    32KB + *6.c) 0xf800_8000   0xf800_ffff     PIB (CS4)		     32KB + *6.d) 0xf801_0000   0xf801_7fff     PIB (CS5)		     32KB + *6.e) 0xfe00_0000   0xffff_ffff     Flash                   32MB + * + *Notes: + *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window. + *    If flash is 8M at default position (last 8M), no LAW needed. + * + * The defines below are 1-off of the actual LAWAR0 usage. + * So LAWAR3 define uses the LAWAR4 register in the ECM. + */ + +#define LAWBAR0 0 +#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN) + +#define LAWBAR1 ((CFG_PCI1_MEM_BASE>>12) & 0xfffff) +#define LAWAR1	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_256M)) + +#define LAWBAR2 ((CFG_PEX_MEM_BASE>>12) & 0xfffff) +#define LAWAR2	(LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_256M)) + +#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff) +#define LAWAR3	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_8M)) + +#define LAWBAR4 ((CFG_PEX_IO_PHYS>>12) & 0xfffff) +#define LAWAR4  (LAWAR_EN | LAWAR_TRGT_IF_PEX | (LAWAR_SIZE & LAWAR_SIZE_16M)) + + +#define LAWBAR5 ((CFG_SRIO_MEM_BASE>>12) & 0xfffff) +#define LAWAR5	(LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_256M)) + +/* LBC window - maps 256M.  That's SDRAM, BCSR, PIBs, and Flash */ +#define LAWBAR6 ((CFG_LBC_SDRAM_BASE>>12) & 0xfffff) +#define LAWAR6	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)) + +	.section .bootpg, "ax" +	.globl	law_entry + +law_entry: +	entry_start +	.long (4f-3f)/8 +3: +	.long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3 +	.long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5,LAWBAR6,LAWAR6 +4: +	entry_end diff --git a/board/mpc8568mds/mpc8568mds.c b/board/mpc8568mds/mpc8568mds.c new file mode 100644 index 000000000..9c7960d47 --- /dev/null +++ b/board/mpc8568mds/mpc8568mds.c @@ -0,0 +1,288 @@ +/* + * Copyright 2007 Freescale Semiconductor. + * + * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.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 <pci.h> +#include <asm/processor.h> +#include <asm/immap_85xx.h> +#include <spd.h> + +#include "bcsr.h" + + +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +extern void ddr_enable_ecc(unsigned int dram_size); +#endif + +extern long int spd_sdram(void); + +void local_bus_init(void); +void sdram_init(void); + +int board_early_init_f (void) +{ +	/* +	 * Initialize local bus. +	 */ +	local_bus_init (); + +	enable_8568mds_duart(); +	enable_8568mds_flash_write(); + +	return 0; +} + +int checkboard (void) +{ +	printf ("Board: 8568 MDS\n"); + +	return 0; +} + +long int +initdram(int board_type) +{ +	long dram_size = 0; +	volatile immap_t *immap = (immap_t *)CFG_IMMR; + +	puts("Initializing\n"); + +#if defined(CONFIG_DDR_DLL) +	{ +		/* +		 * Work around to stabilize DDR DLL MSYNC_IN. +		 * Errata DDR9 seems to have been fixed. +		 * This is now the workaround for Errata DDR11: +		 *    Override DLL = 1, Course Adj = 1, Tap Select = 0 +		 */ + +		volatile ccsr_gur_t *gur= &immap->im_gur; + +		gur->ddrdllcr = 0x81000000; +		asm("sync;isync;msync"); +		udelay(200); +	} +#endif +	dram_size = spd_sdram(); + +#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +	/* +	 * Initialize and enable DDR ECC. +	 */ +	ddr_enable_ecc(dram_size); +#endif +	/* +	 * SDRAM Initialization +	 */ +	sdram_init(); + +	puts("    DDR: "); +	return dram_size; +} + +/* + * Initialize Local Bus + */ +void +local_bus_init(void) +{ +	volatile immap_t *immap = (immap_t *)CFG_IMMR; +	volatile ccsr_gur_t *gur = &immap->im_gur; +	volatile ccsr_lbc_t *lbc = &immap->im_lbc; + +	uint clkdiv; +	uint lbc_hz; +	sys_info_t sysinfo; + +	get_sys_info(&sysinfo); +	clkdiv = (lbc->lcrr & 0x0f) * 2; +	lbc_hz = sysinfo.freqSystemBus / 1000000 / clkdiv; + +	gur->lbiuiplldcr1 = 0x00078080; +	if (clkdiv == 16) { +		gur->lbiuiplldcr0 = 0x7c0f1bf0; +	} else if (clkdiv == 8) { +		gur->lbiuiplldcr0 = 0x6c0f1bf0; +	} else if (clkdiv == 4) { +		gur->lbiuiplldcr0 = 0x5c0f1bf0; +	} + +	lbc->lcrr |= 0x00030000; + +	asm("sync;isync;msync"); +} + +/* + * Initialize SDRAM memory on the Local Bus. + */ +void +sdram_init(void) +{ +#if defined(CFG_OR2_PRELIM) && defined(CFG_BR2_PRELIM) + +	uint idx; +	volatile immap_t *immap = (immap_t *)CFG_IMMR; +	volatile ccsr_lbc_t *lbc = &immap->im_lbc; +	uint *sdram_addr = (uint *)CFG_LBC_SDRAM_BASE; +	uint lsdmr_common; + +	puts("    SDRAM: "); + +	print_size (CFG_LBC_SDRAM_SIZE * 1024 * 1024, "\n"); + +	/* +	 * Setup SDRAM Base and Option Registers +	 */ +	lbc->or2 = CFG_OR2_PRELIM; +	asm("msync"); + +	lbc->br2 = CFG_BR2_PRELIM; +	asm("msync"); + +	lbc->lbcr = CFG_LBC_LBCR; +	asm("msync"); + + +	lbc->lsrt = CFG_LBC_LSRT; +	lbc->mrtpr = CFG_LBC_MRTPR; +	asm("msync"); + +	/* +	 * MPC8568 uses "new" 15-16 style addressing. +	 */ +	lsdmr_common = CFG_LBC_LSDMR_COMMON; +	lsdmr_common |= CFG_LBC_LSDMR_BSMA1516; + +	/* +	 * Issue PRECHARGE ALL command. +	 */ +	lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_PCHALL; +	asm("sync;msync"); +	*sdram_addr = 0xff; +	ppcDcbf((unsigned long) sdram_addr); +	udelay(100); + +	/* +	 * Issue 8 AUTO REFRESH commands. +	 */ +	for (idx = 0; idx < 8; idx++) { +		lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_ARFRSH; +		asm("sync;msync"); +		*sdram_addr = 0xff; +		ppcDcbf((unsigned long) sdram_addr); +		udelay(100); +	} + +	/* +	 * Issue 8 MODE-set command. +	 */ +	lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_MRW; +	asm("sync;msync"); +	*sdram_addr = 0xff; +	ppcDcbf((unsigned long) sdram_addr); +	udelay(100); + +	/* +	 * Issue NORMAL OP command. +	 */ +	lbc->lsdmr = lsdmr_common | CFG_LBC_LSDMR_OP_NORMAL; +	asm("sync;msync"); +	*sdram_addr = 0xff; +	ppcDcbf((unsigned long) sdram_addr); +	udelay(200);    /* Overkill. Must wait > 200 bus cycles */ + +#endif	/* enable SDRAM init */ +} + +#if defined(CFG_DRAM_TEST) +int +testdram(void) +{ +	uint *pstart = (uint *) CFG_MEMTEST_START; +	uint *pend = (uint *) CFG_MEMTEST_END; +	uint *p; + +	printf("Testing DRAM from 0x%08x to 0x%08x\n", +	       CFG_MEMTEST_START, +	       CFG_MEMTEST_END); + +	printf("DRAM test phase 1:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0xaaaaaaaa; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0xaaaaaaaa) { +			printf ("DRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("DRAM test phase 2:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0x55555555; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0x55555555) { +			printf ("DRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("DRAM test passed.\n"); +	return 0; +} +#endif + +#if defined(CONFIG_PCI) +#ifndef CONFIG_PCI_PNP +static struct pci_config_table pci_mpc8568mds_config_table[] = { +	{ +	 PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, +	 pci_cfgfunc_config_device, +	 {PCI_ENET0_IOADDR, +	  PCI_ENET0_MEMADDR, +	  PCI_COMMON_MEMORY | PCI_COMMAND_MASTER} +	 }, +	{} +}; +#endif + +static struct pci_controller hose[] = { +#ifndef CONFIG_PCI_PNP +	{ config_table: pci_mpc8568mds_config_table,}, +#endif +#ifdef CONFIG_MPC85XX_PCI2 +	{}, +#endif +}; + +#endif	/* CONFIG_PCI */ + +void +pci_init_board(void) +{ +#ifdef CONFIG_PCI +	pci_mpc85xx_init(&hose); +#endif +} diff --git a/board/mpc8568mds/u-boot.lds b/board/mpc8568mds/u-boot.lds new file mode 100644 index 000000000..71099f6f1 --- /dev/null +++ b/board/mpc8568mds/u-boot.lds @@ -0,0 +1,152 @@ +/* + * Copyright 2004-2007 Freescale Semiconductor. + * + * 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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ + +SECTIONS +{ + /* ELIOR - From RAM:  From FLASH: 0xFFFFFFFC*/ +  .resetvec 0xFFFFFFFC: +  { +    *(.resetvec) +  } = 0xffff + +  /*(ELIOR - From RAM:  From FLASH: 0xFFFFF000*/ +  .bootpg 0xFFFFF000: +  { +	cpu/mpc85xx/start.o	(.bootpg) +	board/mpc8568mds/init.o (.bootpg) +  } = 0xffff + +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    cpu/mpc85xx/start.o	(.text) +    board/mpc8568mds/init.o (.text) +    cpu/mpc85xx/traps.o (.text) +    cpu/mpc85xx/interrupts.o (.text) +    cpu/mpc85xx/cpu_init.o (.text) +    cpu/mpc85xx/cpu.o (.text) +    cpu/mpc85xx/speed.o (.text) +    cpu/mpc85xx/pci.o (.text) +    common/dlmalloc.o (.text) +    lib_generic/crc32.o (.text) +    lib_ppc/extable.o (.text) +    lib_generic/zlib.o (.text) +    *(.text) +    *(.fixup) +    *(.got1) +   } +    _etext = .; +    PROVIDE (etext = .); +    .rodata    : +   { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2; +  __fixup_entries = (. - _FIXUP_TABLE_) >> 2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/mpc8641hpcn/Makefile b/board/mpc8641hpcn/Makefile index 962521166..df56b31e5 100644 --- a/board/mpc8641hpcn/Makefile +++ b/board/mpc8641hpcn/Makefile @@ -23,6 +23,10 @@  include $(TOPDIR)/config.mk +ifneq ($(OBJTREE),$(SRCTREE)) +$(shell mkdir -p $(obj)../freescale/common) +endif +  LIB	= $(obj)lib$(BOARD).a  COBJS	:= $(BOARD).o sys_eeprom.o \ diff --git a/board/mpc8641hpcn/config.mk b/board/mpc8641hpcn/config.mk index 989a40b01..f778dcbe0 100644 --- a/board/mpc8641hpcn/config.mk +++ b/board/mpc8641hpcn/config.mk @@ -25,7 +25,7 @@  # default CCSRBAR is at 0xff700000  # assume U-Boot is less than 0.5MB  # -TEXT_BASE = 0xfff01000 +TEXT_BASE = 0xfff00000  PLATFORM_CPPFLAGS += -DCONFIG_MPC86xx=1  PLATFORM_CPPFLAGS += -DCONFIG_MPC8641=1 -maltivec -mabi=altivec -msoft-float diff --git a/board/mpc8641hpcn/init.S b/board/mpc8641hpcn/init.S index 6b3e2d275..cb21ba6a7 100644 --- a/board/mpc8641hpcn/init.S +++ b/board/mpc8641hpcn/init.S @@ -59,7 +59,7 @@  #define LAWAR2	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_512M))  #define LAWBAR3 ((CFG_PCI2_MEM_BASE>>12) & 0xffffff) -#define LAWAR3	(~LAWAR_EN & (LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))) +#define LAWAR3	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_512M))  /*   * This is not so much the SDRAM map as it is the whole localbus map. @@ -67,11 +67,11 @@  #define LAWBAR4 ((0xf8100000>>12) & 0xffffff)  #define LAWAR4	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_2M)) -#define LAWBAR5 ((CFG_PCI1_IO_BASE>>12) & 0xffffff) +#define LAWBAR5 ((CFG_PCI1_IO_PHYS>>12) & 0xffffff)  #define LAWAR5	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M)) -#define LAWBAR6 ((CFG_PCI2_IO_BASE>>12) & 0xffffff) -#define LAWAR6	(~LAWAR_EN &( LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M))) +#define LAWBAR6 ((CFG_PCI2_IO_PHYS>>12) & 0xffffff) +#define LAWAR6	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M))  #define LAWBAR7 ((0xfe000000 >>12) & 0xffffff)  #define LAWAR7	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_32M)) @@ -84,7 +84,7 @@  #define LAWAR8  ((LAWAR_TRGT_IF_DDR2 | (LAWAR_SIZE & LAWAR_SIZE_512M)) & ~LAWAR_EN)  #endif -#define LAWBAR9 ((CFG_RIO_MEM_BASE>>12) & 0xfffff) +#define LAWBAR9 ((CFG_RIO_MEM_PHYS>>12) & 0xfffff)  #define LAWAR9  (LAWAR_EN | LAWAR_TRGT_IF_RIO | (LAWAR_SIZE & LAWAR_SIZE_512M))  	.section .bootpg, "ax" diff --git a/board/mpc8641hpcn/u-boot.lds b/board/mpc8641hpcn/u-boot.lds index 13c1acf80..34b50e4be 100644 --- a/board/mpc8641hpcn/u-boot.lds +++ b/board/mpc8641hpcn/u-boot.lds @@ -1,7 +1,5 @@  /* - * (C) Copyright 2004, Freescale, Inc. - * (C) Copyright 2002,2003, Motorola,Inc. - * Jeff Brown + * Copyright 2006, 2007 Freescale Semiconductor, Inc.   *   * See file CREDITS for list of people who contributed to this   * project. @@ -23,24 +21,11 @@   */  OUTPUT_ARCH(powerpc) -SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); -/* Do we need any of these for elf? -   __DYNAMIC = 0;    */ +  SECTIONS  { -  .resetvec 0xFFF00100 : -  { -    *(.resetvec) -  } = 0xffff - -  .bootpg 0xFFF70000 : -  { -    cpu/mpc86xx/start.o	(.bootpg) -    board/mpc8641hpcn/init.o (.bootpg) -  } = 0xffff    /* Read-only sections, merged into text segment: */ -  . = + 1024;    .interp : { *(.interp) }    .hash          : { *(.hash)		}    .dynsym        : { *(.dynsym)		} @@ -66,7 +51,7 @@ SECTIONS    .text      :    {      cpu/mpc86xx/start.o	(.text) -    board/mpc8641hpcn/init.o (.text) +    board/mpc8641hpcn/init.o (.bootpg)      cpu/mpc86xx/traps.o (.text)      cpu/mpc86xx/interrupts.o (.text)      cpu/mpc86xx/cpu_init.o (.text) @@ -88,6 +73,7 @@ SECTIONS      *(.rodata)      *(.rodata1)      *(.rodata.str1.4) +    *(.eh_frame)    }    .fini      : { *(.fini)    } =0    .ctors     : { *(.ctors)   } diff --git a/board/nc650/config.mk b/board/nc650/config.mk index 52c8ffe35..9d9b89260 100644 --- a/board/nc650/config.mk +++ b/board/nc650/config.mk @@ -1,5 +1,5 @@  # -# (C) Copyright 2006 Detlev Zundel, dzu@denx.de +# (C) Copyright 2006, 2007 Detlev Zundel, dzu@denx.de  # (C) Copyright 2004  # Wolfgang Denk, DENX Software Engineering, wd@denx.de.  # @@ -27,4 +27,3 @@  #  TEXT_BASE = 0x40700000 -BOARDLIBS = $(obj)drivers/nand/libnand.a diff --git a/board/nc650/nc650.c b/board/nc650/nc650.c index 8a6b5b00a..707e4b97d 100644 --- a/board/nc650/nc650.c +++ b/board/nc650/nc650.c @@ -177,16 +177,14 @@ long int initdram (int board_type)  	 *  	 * try 8 column mode  	 */ -	size8 = dram_size (CFG_MAMR_8COL, (ulong *) SDRAM_BASE3_PRELIM, -					   SDRAM_MAX_SIZE); +	size8 = dram_size (CFG_MAMR_8COL, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);  	udelay (1000);  	/*  	 * try 9 column mode  	 */ -	size9 = dram_size (CFG_MAMR_9COL, (ulong *) SDRAM_BASE3_PRELIM, -					  SDRAM_MAX_SIZE); +	size9 = dram_size (CFG_MAMR_9COL, SDRAM_BASE3_PRELIM, SDRAM_MAX_SIZE);  	udelay (1000); diff --git a/board/prodrive/pdnb3/config.mk b/board/prodrive/pdnb3/config.mk index 767075884..51dee86ae 100644 --- a/board/prodrive/pdnb3/config.mk +++ b/board/prodrive/pdnb3/config.mk @@ -1,4 +1,2 @@ +#  TEXT_BASE = 0x01f00000 - -# include NPE ethernet driver -BOARDLIBS = $(obj)cpu/ixp/npe/libnpe.a diff --git a/board/siemens/SMN42/Makefile b/board/siemens/SMN42/Makefile new file mode 100644 index 000000000..2c7b54b08 --- /dev/null +++ b/board/siemens/SMN42/Makefile @@ -0,0 +1,51 @@ +# +# (C) Copyright 2007 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).a + +COBJS	:= flash.o smn42.o +SOBJTS	:= lowlevel_init.o + +SRCS	:= $(SOBJTS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJTS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) crv $@ $(OBJS) $(SOBJS) + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak $(obj).depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/siemens/SMN42/config.mk b/board/siemens/SMN42/config.mk new file mode 100644 index 000000000..b28f418df --- /dev/null +++ b/board/siemens/SMN42/config.mk @@ -0,0 +1,30 @@ +# +# (C) Copyright 2000 +# Sysgo Real-Time Solutions, GmbH <www.elinos.com> +# Marius Groeger <mgroeger@sysgo.de> +# +# (C) Copyright 2000 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 +# + +#address where u-boot will be relocated +#TEXT_BASE = 0x0 +TEXT_BASE = 0x81500000 diff --git a/board/siemens/SMN42/flash.c b/board/siemens/SMN42/flash.c new file mode 100755 index 000000000..7d4977e02 --- /dev/null +++ b/board/siemens/SMN42/flash.c @@ -0,0 +1,475 @@ +/* + * (C) Copyright 2006 Embedded Artists AB <www.embeddedartists.com> + * + * (C) Copyright 2007 Gary Jennejohn garyj@denx.de + * Modified to use the routines in cpu/arm720t/lpc2292/flash.c. + * Heavily modified to support the SMN42 board from Siemens + * + * 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 <asm/byteorder.h> +#include <asm/arch/hardware.h> + +static unsigned long flash_addr_table[CFG_MAX_FLASH_BANKS] = CFG_FLASH_BANKS_LIST; +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; + +extern int lpc2292_copy_buffer_to_flash(flash_info_t *, ulong); +extern int lpc2292_flash_erase(flash_info_t *, int, int); +extern int lpc2292_write_buff (flash_info_t *, uchar *, ulong, ulong); +static unsigned long ext_flash_init(void); +static int ext_flash_erase(flash_info_t *, int, int); +static int ext_write_buff(flash_info_t *, uchar *, ulong, ulong); + +/*----------------------------------------------------------------------- + */ + +ulong flash_init (void) +{ +	int j, k; +	ulong size = 0; +	ulong flashbase = 0; + +	flash_info[0].flash_id = PHILIPS_LPC2292; +	flash_info[0].size = 0x003E000;	/* 256 - 8 KB */ +	flash_info[0].sector_count = 17; +	memset (flash_info[0].protect, 0, 17); +	flashbase = 0x00000000; +	for (j = 0, k = 0; j < 8; j++, k++) { +		flash_info[0].start[k] = flashbase; +		flashbase += 0x00002000; +	} +	for (j = 0; j < 2; j++, k++) { +		flash_info[0].start[k] = flashbase; +		flashbase += 0x00010000; +	} +	for (j = 0; j < 7; j++, k++) { +		flash_info[0].start[k] = flashbase; +		flashbase += 0x00002000; +	} +	size += flash_info[0].size; + +	/* Protect monitor and environment sectors */ +	flash_protect (FLAG_PROTECT_SET, +		 0x0, +		 0x0 + monitor_flash_len - 1, +		 &flash_info[0]); + +	flash_protect (FLAG_PROTECT_SET, +		 CFG_ENV_ADDR, +		 CFG_ENV_ADDR + CFG_ENV_SIZE - 1, +		 &flash_info[0]); + +	size += ext_flash_init(); + +	return size; +} + +/*----------------------------------------------------------------------- + */ +void flash_print_info (flash_info_t * info) +{ +	int i; +	int erased = 0; +	unsigned long j; +	unsigned long count; +	unsigned char *p; + +	switch (info->flash_id & FLASH_VENDMASK) { +	case (PHILIPS_LPC2292 & FLASH_VENDMASK): +		printf("Philips: "); +		break; +	case FLASH_MAN_AMD: +		printf("AMD: "); +		break; +	default: +		printf ("Unknown Vendor "); +		break; +	} + +	switch (info->flash_id & FLASH_TYPEMASK) { +	case (PHILIPS_LPC2292 & FLASH_TYPEMASK): +		printf("LPC2292 internal flash\n"); +		break; +	case FLASH_S29GL128N: +		printf ("S29GL128N (128 Mbit, uniform sector size)\n"); +		break; +	default: +		printf("Unknown Chip Type\n"); +		return; +	} + +	printf ("  Size: %ld KB in %d Sectors\n", +	  info->size >> 10, info->sector_count); + +	printf ("  Sector Start Addresses:"); +	for (i = 0; i < info->sector_count; i++) { +		if ((i % 5) == 0) { +			printf ("\n   "); +		} +		if (i < (info->sector_count - 1)) { +			count = info->start[i+1] - info->start[i]; +		} +		else { +			count = info->start[0] + info->size - info->start[i]; +		} +		p = (unsigned char*)(info->start[i]); +		erased = 1; +		for (j = 0; j < count; j++) { +			if (*p != 0xFF) { +				erased = 0; +				break; +			} +			p++; +		} +		printf (" %08lX%s%s", info->start[i], info->protect[i] ? " RO" : "   ", +			erased ? " E" : "  "); +	} +	printf ("\n"); +} + +int flash_erase (flash_info_t * info, int s_first, int s_last) +{ +	switch (info->flash_id & FLASH_TYPEMASK) { +		case (PHILIPS_LPC2292 & FLASH_TYPEMASK): +			return lpc2292_flash_erase(info, s_first, s_last); +		case FLASH_S29GL128N: +			return ext_flash_erase(info, s_first, s_last); +		default: +			return ERR_PROTECTED; +	} +	return ERR_PROTECTED; +} + +int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) +{ +	switch (info->flash_id & FLASH_TYPEMASK) { +		case (PHILIPS_LPC2292 & FLASH_TYPEMASK): +			return lpc2292_write_buff(info, src, addr, cnt); +		case FLASH_S29GL128N: +			return ext_write_buff(info, src, addr, cnt); +		default: +			return ERR_PROG_ERROR; +	} +	return ERR_PROG_ERROR; +} + +/*-------------------------------------------------------------------------- + * From here on is code for the external S29GL128N taken from cam5200_flash.c + */ + +#define CFG_FLASH_WORD_SIZE unsigned short + +static int wait_for_DQ7_32(flash_info_t * info, int sect) +{ +	ulong start, now, last; +	volatile CFG_FLASH_WORD_SIZE *addr = +		(CFG_FLASH_WORD_SIZE *) (info->start[sect]); + +	start = get_timer(0); +	last = start; +	while ((addr[0] & (CFG_FLASH_WORD_SIZE) 0x00800080) != +			(CFG_FLASH_WORD_SIZE) 0x00800080) { +		if ((now = get_timer(start)) > CFG_FLASH_ERASE_TOUT) { +			printf("Timeout\n"); +			return -1; +		} +		/* show that we're waiting */ +		if ((now - last) > 1000) {	/* every second */ +			putc('.'); +			last = now; +		} +	} +	return 0; +} + +int ext_flash_erase(flash_info_t * info, int s_first, int s_last) +{ +	volatile CFG_FLASH_WORD_SIZE *addr = (CFG_FLASH_WORD_SIZE *) (info->start[0]); +	volatile CFG_FLASH_WORD_SIZE *addr2; +	int flag, prot, sect, l_sect, ret; + +	ret = 0; +	if ((s_first < 0) || (s_first > s_last)) { +		if (info->flash_id == FLASH_UNKNOWN) +			printf("- missing\n"); +		else +			printf("- no sectors to erase\n"); +		return 1; +	} + +	if (info->flash_id == FLASH_UNKNOWN) { +		printf("Can't erase unknown flash type - aborted\n"); +		return 1; +	} + +	prot = 0; +	for (sect = s_first; sect <= s_last; ++sect) { +		if (info->protect[sect]) +			prot++; +	} + +	if (prot) +		printf("- Warning: %d protected sectors will not be erased!", prot); + +	printf("\n"); + +	l_sect = -1; + +	/* Disable interrupts which might cause a timeout here */ +	flag = disable_interrupts(); + +	/* Start erase on unprotected sectors */ +	for (sect = s_first; sect <= s_last; sect++) { +		if (info->protect[sect] == 0) {	/* not protected */ +			addr2 = (CFG_FLASH_WORD_SIZE *) (info->start[sect]); + +			addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00AA00AA; +			addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE) 0x00550055; +			addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00800080; +			addr[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00AA00AA; +			addr[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE) 0x00550055; +			addr2[0] = (CFG_FLASH_WORD_SIZE) 0x00300030;	/* sector erase */ + +			l_sect = sect; +			/* +			 * Wait for each sector to complete, it's more +			 * reliable.  According to AMD Spec, you must +			 * issue all erase commands within a specified +			 * timeout.  This has been seen to fail, especially +			 * if printf()s are included (for debug)!! +			 */ +			ret = wait_for_DQ7_32(info, sect); +			if (ret) { +				ret = ERR_PROTECTED; +				break; +			} +		} +	} + +	/* re-enable interrupts if necessary */ +	if (flag) +		enable_interrupts(); + +	/* wait at least 80us - let's wait 1 ms */ +	udelay(1000); + +	/* reset to read mode */ +	addr = (CFG_FLASH_WORD_SIZE *) info->start[0]; +	addr[0] = (CFG_FLASH_WORD_SIZE) 0x00F000F0;	/* reset bank */ + +	if (ret) +		printf(" error\n"); +	else +		printf(" done\n"); +	return ret; +} + +static ulong flash_get_size(vu_long * addr, flash_info_t * info) +{ +	short i; +	CFG_FLASH_WORD_SIZE value; +	ulong base = (ulong) addr; +	volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *) addr; + +	/* Write auto select command: read Manufacturer ID */ +	addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00AA00AA; +	addr2[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE) 0x00550055; +	addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00900090; +	udelay(1000); + +	value = addr2[0]; + +	switch (value) { +		case (CFG_FLASH_WORD_SIZE) AMD_MANUFACT: +			info->flash_id = FLASH_MAN_AMD; +			break; +		default: +			info->flash_id = FLASH_UNKNOWN; +			info->sector_count = 0; +			info->size = 0; +			return (0);	/* no or unknown flash  */ +	} + +	value = addr2[1];	/* device ID            */ + +	switch (value) { +		case (CFG_FLASH_WORD_SIZE)AMD_ID_MIRROR: +			value = addr2[14]; +			switch(value) { +				case (CFG_FLASH_WORD_SIZE)AMD_ID_GL128N_2: +					value = addr2[15]; +					if (value != (CFG_FLASH_WORD_SIZE)AMD_ID_GL128N_3) { +						info->flash_id = FLASH_UNKNOWN; +					} else { +						info->flash_id += FLASH_S29GL128N; +						info->sector_count = 128; +						info->size = 0x01000000; +					} +					break; +				default: +					info->flash_id = FLASH_UNKNOWN; +					return(0); +			} +			break; + +		default: +			info->flash_id = FLASH_UNKNOWN; +			return (0);	/* => no or unknown flash */ +	} + +	/* set up sector start address table */ +	for (i = 0; i < info->sector_count; i++) +		info->start[i] = base + (i * 0x00020000); + +	/* check for protected sectors */ +	for (i = 0; i < info->sector_count; i++) { +		/* read sector protection at sector address, (A7 .. A0) = 0x02 */ +		/* D0 = 1 if protected */ +		addr2 = (volatile CFG_FLASH_WORD_SIZE *)(info->start[i]); + +		info->protect[i] = addr2[2] & 1; +	} + +	/* issue bank reset to return to read mode */ +	addr2[0] = (CFG_FLASH_WORD_SIZE) 0x00F000F0; + +	return (info->size); +} + +static unsigned long ext_flash_init(void) +{ +	unsigned long total_b = 0; +	unsigned long size_b[CFG_MAX_FLASH_BANKS]; +	int i; + +	/* Init: no FLASHes known */ +	for (i = 1; i < CFG_MAX_FLASH_BANKS; ++i) { +		flash_info[i].flash_id = FLASH_UNKNOWN; +		flash_info[i].sector_count = -1; +		flash_info[i].size = 0; + +		/* call flash_get_size() to initialize sector address */ +		size_b[i] = flash_get_size((vu_long *) flash_addr_table[i], +				&flash_info[i]); + +		flash_info[i].size = size_b[i]; + +		if (flash_info[i].flash_id == FLASH_UNKNOWN) { +			printf("## Unknown FLASH on Bank %d - Size = 0x%08lx = %ld MB\n", +					i+1, size_b[i], size_b[i] << 20); +			flash_info[i].sector_count = -1; +			flash_info[i].size = 0; +		} + +		total_b += flash_info[i].size; +	} + +	return total_b; +} + +static int write_word(flash_info_t * info, ulong dest, ushort data) +{ +	volatile CFG_FLASH_WORD_SIZE *addr2 = (CFG_FLASH_WORD_SIZE *) (info->start[0]); +	volatile CFG_FLASH_WORD_SIZE *dest2 = (CFG_FLASH_WORD_SIZE *) dest; +	volatile CFG_FLASH_WORD_SIZE *data2 = (CFG_FLASH_WORD_SIZE *) &data; +	ulong start; +	int flag; + +	/* Check if Flash is (sufficiently) erased */ +	if ((*dest2 & *data2) != *data2) { +		return (2); +	} + +	/* Disable interrupts which might cause a timeout here */ +	flag = disable_interrupts(); + +	addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00AA00AA; +	addr2[CFG_FLASH_ADDR1] = (CFG_FLASH_WORD_SIZE) 0x00550055; +	addr2[CFG_FLASH_ADDR0] = (CFG_FLASH_WORD_SIZE) 0x00A000A0; +	*dest2 = *data2; + +	/* re-enable interrupts if necessary */ +	if (flag) +		enable_interrupts(); + +	/* data polling for D7 */ +	start = get_timer(0); +	while ((*dest2 & (CFG_FLASH_WORD_SIZE) 0x00800080) != +			(*data2 & (CFG_FLASH_WORD_SIZE) 0x00800080)) { + +		if (get_timer(start) > CFG_FLASH_WRITE_TOUT) { +			printf("WRITE_TOUT\n"); +			return (1); +		} +	} +	return (0); +} + +/*----------------------------------------------------------------------- + * This is taken from the original flash.c for the LPC2292 SODIMM board + * and modified to suit. + */ + +int ext_write_buff(flash_info_t * info, uchar * src, ulong addr, ulong cnt) +{ +	ushort tmp; +	ulong i; +	uchar* src_org; +	uchar* dst_org; +	ulong cnt_org = cnt; +	int ret = ERR_OK; + +	src_org = src; +	dst_org = (uchar*)addr; + +	if (addr & 1) {		/* if odd address */ +		tmp = *((uchar*)(addr - 1)); /* little endian */ +		tmp |= (*src << 8); +		if (write_word(info, addr - 1, tmp)) +			return ERR_PROG_ERROR; +		addr += 1; +		cnt -= 1; +		src++; +	} +	while (cnt > 1) { +		tmp = ((*(src+1)) << 8) + (*src); /* little endian */ +		if (write_word(info, addr, tmp)) +			return ERR_PROG_ERROR; +		addr += 2; +		src += 2; +		cnt -= 2; +	} +	if (cnt > 0) { +		tmp = (*((uchar*)(addr + 1))) << 8; +		tmp |= *src; +		if (write_word(info, addr, tmp)) +			return ERR_PROG_ERROR; +	} + +	for (i = 0; i < cnt_org; i++) { +		if (*dst_org != *src_org) { +			printf("Write failed. Byte %lX differs\n", i); +			ret = ERR_PROG_ERROR; +			break; +		} +		dst_org++; +		src_org++; +	} + +	return ret; +} diff --git a/board/siemens/SMN42/lowlevel_init.S b/board/siemens/SMN42/lowlevel_init.S new file mode 100644 index 000000000..11abb6332 --- /dev/null +++ b/board/siemens/SMN42/lowlevel_init.S @@ -0,0 +1,123 @@ +/* + * (C) Copyright 2006 Embedded Artists AB <www.embeddedartists.com> + * + * Slight modifications made to support the SMN42 board from Siemens. + * 2007 Gary Jennejohn garyj@denx.de + * + * 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 <config.h> +#include <version.h> +#include <asm/arch/hardware.h> + +/* some parameters for the board */ +/* setting up the CPU-internal memory */ +#define 	SRAM_START 	0x40000000 +#define 	SRAM_SIZE	0x00004000 +#define   BCFG0_VALUE 0x1000ffef +#define   BCFG1_VALUE 0x10005D2F +#define   BCFG2_VALUE 0x10005D2F +/* + * For P0.18 to set ZZ to the SRAMs to 1. Also set P0.2 (SCL) and P0.3 (SDA) + * for the bit-banger I2C driver correctly. + */ +#define   IO0_VALUE   0x4000C + +_TEXT_BASE: +	.word	TEXT_BASE +MEMMAP_ADR: +	.word	MEMMAP +BCFG0_ADR: +	.word BCFG0 +_BCFG0_VALUE: +	.word BCFG0_VALUE +BCFG1_ADR: +	.word	BCFG1 +_BCFG1_VALUE: +	.word	BCFG1_VALUE +BCFG2_ADR: +	.word	BCFG2 +_BCFG2_VALUE: +	.word	BCFG2_VALUE +IO0DIR_ADR: +	.word	IO0DIR +_IO0DIR_VALUE: +	.word	IO0_VALUE +IO0SET_ADR: +	.word	IO0SET +_IO0SET_VALUE: +	.word	IO0_VALUE +PINSEL2_ADR: +	.word	PINSEL2 +PINSEL2_MASK: +	.word	0x00000000 +PINSEL2_VALUE: +	.word	0x0F804914 + +.extern _start + +.globl lowlevel_init +lowlevel_init: +	/* set up memory control register for bank 0 */ +	ldr r0, _BCFG0_VALUE +	ldr r1, BCFG0_ADR +	str r0, [r1] + +	/* set up memory control register for bank 1 */ +	ldr	r0, _BCFG1_VALUE +	ldr	r1, BCFG1_ADR +	str	r0, [r1] + +	/* set up memory control register for bank 2 */ +	ldr	r0, _BCFG2_VALUE +	ldr	r1, BCFG2_ADR +	str	r0, [r1] + +	/* set IO0DIR to make P0.2, P0.3  and P0.18 outputs */ +	ldr	r0, _IO0DIR_VALUE +	ldr	r1, IO0DIR_ADR +	str	r0, [r1] + +	/* set P0.18 to 1 */ +	ldr	r0, _IO0SET_VALUE +	ldr	r1, IO0SET_ADR +	str	r0, [r1] + +	/* set up PINSEL2 for bus-pins */ +	ldr	r0, PINSEL2_ADR +	ldr	r1, [r0] +	ldr	r2, PINSEL2_MASK +	ldr	r3, PINSEL2_VALUE +	and	r1, r1, r2 +	orr	r1, r1, r3 +	str	r1, [r0] + +	/* move vectors to beginning of SRAM */ +	mov	r2, #SRAM_START +	mov	r0, #0 /*_start*/ +	ldmneia r0!, {r3-r10} +	stmneia r2!, {r3-r10} +	ldmneia r0, {r3-r9} +	stmneia r2, {r3-r9} + +	/* Set-up MEMMAP register, so vectors are taken from SRAM */ +	ldr	r0, MEMMAP_ADR +	mov	r1, #0x02	/* vectors re-mapped to static RAM */ +	str	r1, [r0] + +	/* everything is fine now */ +	mov	pc, lr diff --git a/board/siemens/SMN42/smn42.c b/board/siemens/SMN42/smn42.c new file mode 100644 index 000000000..cbfc76c46 --- /dev/null +++ b/board/siemens/SMN42/smn42.c @@ -0,0 +1,62 @@ +/* + * (C) Copyright 2002 + * Sysgo Real-Time Solutions, GmbH <www.elinos.com> + * Marius Groeger <mgroeger@sysgo.de> + * + * (C) Copyright 2005 Rowel Atienza <rowel@diwalabs.com> + * Armadillo board HT1070 + * + * (C) Copyright 2007 Gary Jennejohn <garyj@denx.de> + * Siemens board SMN42 + * + * 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 <clps7111.h> + +/* ------------------------------------------------------------------------- */ + + +/* + * Miscellaneous platform dependent initialisations + */ + +int board_init (void) +{ +	DECLARE_GLOBAL_DATA_PTR; + +	/* arch number MACH_TYPE_ARMADILLO - not official*/ +	gd->bd->bi_arch_number = 83; + +	/* location of boot parameters */ +	gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x00000100; + +	return 0; +} + +int dram_init (void) +{ +	DECLARE_GLOBAL_DATA_PTR; + +	gd->bd->bi_dram[0].start = PHYS_SDRAM_1; +	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE; + +	return (0); +} diff --git a/board/siemens/SMN42/u-boot.lds b/board/siemens/SMN42/u-boot.lds new file mode 100644 index 000000000..64d946c43 --- /dev/null +++ b/board/siemens/SMN42/u-boot.lds @@ -0,0 +1,55 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * 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 + */ + +OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") +OUTPUT_ARCH(arm) +ENTRY(_start) +SECTIONS +{ +	. = 0x00000000; + +	. = ALIGN(4); +	.text      : +	{ +	  cpu/arm720t/start.o	(.text) +	  *(.text) +	} + +	. = ALIGN(4); +	.rodata : { *(.rodata) } + +	. = ALIGN(4); +	.data : { *(.data) } + +	. = ALIGN(4); +	.got : { *(.got) } + +	__u_boot_cmd_start = .; +	.u_boot_cmd : { *(.u_boot_cmd) } +	__u_boot_cmd_end = .; + +	. = ALIGN(4); +	__bss_start = .; +	.bss : { *(.bss) } +	_end = .; +} diff --git a/board/stxssa/Makefile b/board/stxssa/Makefile new file mode 100644 index 000000000..344ecdfd7 --- /dev/null +++ b/board/stxssa/Makefile @@ -0,0 +1,51 @@ +# +# (C) Copyright 2001 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(BOARD).a + +COBJS	:= $(BOARD).o +SOBJS	:= init.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) +SOBJS	:= $(addprefix $(obj),$(SOBJS)) + +$(LIB):	$(obj).depend $(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) + +clean: +	rm -f $(OBJS) $(SOBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/board/stxssa/config.mk b/board/stxssa/config.mk new file mode 100644 index 000000000..5f4fc7403 --- /dev/null +++ b/board/stxssa/config.mk @@ -0,0 +1,33 @@ +# Modified by Xianghua Xiao, X.Xiao@motorola.com +# (C) Copyright 2002,2003 Motorola Inc. +# +# Copied from ADS85xx for STx GP3 - Dan Malek +# +# 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 +# + +# default CCARBAR is at 0xff700000 +# assume U-Boot is less than 0.5MB +# U-Boot is less than 256K, so push +# it further up into the flash +# +TEXT_BASE = 0xFFFC0000 + +PLATFORM_CPPFLAGS += -DCONFIG_MPC85xx=1 +PLATFORM_CPPFLAGS += -DCONFIG_E500=1 diff --git a/board/stxssa/init.S b/board/stxssa/init.S new file mode 100644 index 000000000..a1a8d9e0c --- /dev/null +++ b/board/stxssa/init.S @@ -0,0 +1,256 @@ +/* + * Copyright (C) 2005 Embedded Alley Solutions, Inc. + * Dan Malek <dan@embeddedalley.com> + * Copied from STx GP3. + * Updates for Silicon Tx GP3 SSA.  We only support 32-bit flash + * and DDR with SPD EEPROM configuration. + * + * Copyright 2004 Freescale Semiconductor. + * Copyright (C) 2002,2003, Motorola Inc. + * Xianghua Xiao <X.Xiao@motorola.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 <ppc_asm.tmpl> +#include <ppc_defs.h> +#include <asm/cache.h> +#include <asm/mmu.h> +#include <config.h> +#include <mpc85xx.h> + + +/* + * TLB0 and TLB1 Entries + * + * Out of reset, TLB1's Entry 0 maps the highest 4K for CCSRBAR. + * However, CCSRBAR is then relocated to CFG_CCSRBAR right after + * these TLB entries are established. + * + * The TLB entries for DDR are dynamically setup in spd_sdram() + * and use TLB1 Entries 8 through 15 as needed according to the + * size of DDR memory. + * + * MAS0: tlbsel, esel, nv + * MAS1: valid, iprot, tid, ts, tsize + * MAS2: epn, sharen, x0, x1, w, i, m, g, e + * MAS3: rpn, u0-u3, ux, sx, uw, sw, ur, sr + */ + +#define	entry_start \ +	mflr	r1 	;	\ +	bl	0f 	; + +#define	entry_end \ +0:	mflr	r0	;	\ +	mtlr	r1	;	\ +	blr		; + + +	.section	.bootpg, "ax" +	.globl	tlb1_entry +tlb1_entry: +	entry_start + +	/* +	 * Number of TLB0 and TLB1 entries in the following table +	 */ +	.long 12 + +#if (CFG_CCSRBAR_DEFAULT != CFG_CCSRBAR) +	/* +	 * TLB0		4K	Non-cacheable, guarded +	 * 0xff700000	4K	Initial CCSRBAR mapping +	 * +	 * This ends up at a TLB0 Index==0 entry, and must not collide +	 * with other TLB0 Entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR_DEFAULT), 0,0,0,0,0,1,0,1,0,1) +#else +#error("Update the number of table entries in tlb1_entry") +#endif + +	/* +	 * TLB0		16K	Cacheable, non-guarded +	 * 0xd001_0000	16K	Temporary Global data for initialization +	 * +	 * Use four 4K TLB0 entries.  These entries must be cacheable +	 * as they provide the bootstrap memory before the memory +	 * controler and real memory have been configured. +	 * +	 * These entries end up at TLB0 Indicies 0x10, 0x14, 0x18 and 0x1c, +	 * and must not collide with other TLB0 entries. +	 */ +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR), \ +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR), \ +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 4 * 1024), \ +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 4 * 1024), \ +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 8 * 1024), \ +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 8 * 1024), \ +			0,0,0,0,0,1,0,1,0,1) + +	.long TLB1_MAS0(0, 0, 0) +	.long TLB1_MAS1(1, 0, 0, 0, 0) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_INIT_RAM_ADDR + 12 * 1024), \ +			0,0,0,0,0,0,0,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_INIT_RAM_ADDR + 12 * 1024), \ +			0,0,0,0,0,1,0,1,0,1) + + +	/* +	 * TLB 0:	64M	Non-cacheable, guarded +	 * 0xfc000000	6M4	FLASH +	 * Out of reset this entry is only 4K. +	 */ +	.long TLB1_MAS0(1, 0, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_FLASH_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_FLASH_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 1:	256M	Non-cacheable, guarded +	 * 0x80000000	256M	PCI1 MEM First half +	 */ +	.long TLB1_MAS0(1, 1, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 2:	256M	Non-cacheable, guarded +	 * 0x90000000	256M	PCI1 MEM Second half +	 */ +	.long TLB1_MAS0(1, 2, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI1_MEM_BASE + 0x10000000), \ +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI1_MEM_BASE + 0x10000000), \ +			0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 3:	256M	Non-cacheable, guarded +	 * 0xa0000000	256M	PCI2 MEM First half +	 */ +	.long TLB1_MAS0(1, 3, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 4:	256M	Non-cacheable, guarded +	 * 0xb0000000	256M	PCI2 MEM Second half +	 */ +	.long TLB1_MAS0(1, 4, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_PCI2_MEM_BASE + 0x10000000), \ +			0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_PCI2_MEM_BASE + 0x10000000), \ +			0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 5:	64M	Non-cacheable, guarded +	 * 0xe000_0000	1M	CCSRBAR +	 * 0xe200_0000	16M	PCI1 IO +	 * 0xe300_0000	16M	PCI2 IO +	 */ +	.long TLB1_MAS0(1, 5, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_64M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_CCSRBAR), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_CCSRBAR), 0,0,0,0,0,1,0,1,0,1) + +	/* +	 * TLB 6:	256M	Non-cacheable, guarded +	 * 0xf0000000		Local bus expansion option. +	 * 0xfb000000		Configuration Latch register (one word) +	 * 0xfc000000		Up to 64M flash +	 */ +	.long TLB1_MAS0(1, 7, 0) +	.long TLB1_MAS1(1, 1, 0, 0, BOOKE_PAGESZ_256M) +	.long TLB1_MAS2(E500_TLB_EPN(CFG_LBC_OPTION_BASE), 0,0,0,0,1,0,1,0) +	.long TLB1_MAS3(E500_TLB_RPN(CFG_LBC_OPTION_BASE), 0,0,0,0,0,1,0,1,0,1) +	entry_end + +/* + * LAW(Local Access Window) configuration: + * + * 0x0000_0000     0x7fff_ffff     DDR                     2G + * 0x8000_0000     0x9fff_ffff     PCI1 MEM                512M + * 0xa000_0000     0xbfff_ffff     PCI2 MEM                512M + * 0xe000_0000     0xe000_ffff     CCSR                    1M + * 0xe200_0000     0xe2ff_ffff     PCI1 IO                 16M + * 0xe300_0000     0xe3ff_ffff     PCI2 IO                 16M + * 0xf000_0000     0xfaff_ffff     Local bus               128M + * 0xfb00_0000     0xfb00_ffff     Config Latch            64K + * 0xfc00_0000     0xffff_ffff     FLASH (boot bank)       64M + * + * Notes: + *    CCSRBAR and L2-as-SRAM don't need a configured Local Access Window. + *    If flash is 8M at default position (last 8M), no LAW needed. + */ + +#if !defined(CONFIG_SPD_EEPROM) +#define LAWBAR0 ((CFG_DDR_SDRAM_BASE>>12) & 0xfffff) +#define LAWAR0	(LAWAR_EN | LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) +#else +#define LAWBAR0 0 +#define LAWAR0  ((LAWAR_TRGT_IF_DDR | (LAWAR_SIZE & LAWAR_SIZE_128M)) & ~LAWAR_EN) +#endif + +#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)) + +#define LAWBAR3 ((CFG_PCI1_IO_PHYS>>12) & 0xfffff) +#define LAWAR3 	(LAWAR_EN | LAWAR_TRGT_IF_PCI1 | (LAWAR_SIZE & LAWAR_SIZE_16M)) + +#define LAWBAR4 ((CFG_PCI2_IO_PHYS>>12) & 0xfffff) +#define LAWAR4 	(LAWAR_EN | LAWAR_TRGT_IF_PCI2 | (LAWAR_SIZE & LAWAR_SIZE_16M)) + +/* Map the whole localbus, including flash and reset latch. +*/ +#define LAWBAR5 ((CFG_LBC_OPTION_BASE>>12) & 0xfffff) +#define LAWAR5	(LAWAR_EN | LAWAR_TRGT_IF_LBC | (LAWAR_SIZE & LAWAR_SIZE_256M)) + + +	.section .bootpg, "ax" +	.globl	law_entry +law_entry: +	entry_start +	.long 6 +	.long LAWBAR0,LAWAR0,LAWBAR1,LAWAR1,LAWBAR2,LAWAR2,LAWBAR3,LAWAR3 +	.long LAWBAR4,LAWAR4,LAWBAR5,LAWAR5 +	entry_end diff --git a/board/stxssa/stxssa.c b/board/stxssa/stxssa.c new file mode 100644 index 000000000..0fb233d81 --- /dev/null +++ b/board/stxssa/stxssa.c @@ -0,0 +1,398 @@ +/* + * (C) Copyright 2005, Embedded Alley Solutions, Inc. + * Dan Malek, <dan@embeddedalley.com> + * Copied from STx GP3. + * Updates for Silicon Tx GP3 SSA + * + * (C) Copyright 2003,Motorola Inc. + * Xianghua Xiao, (X.Xiao@motorola.com) + * + * (C) Copyright 2002 Scott McNutt <smcnutt@artesyncp.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 + */ + + +extern long int spd_sdram (void); + +#include <common.h> +#include <pci.h> +#include <asm/processor.h> +#include <asm/immap_85xx.h> +#include <ioports.h> +#include <asm/io.h> +#include <spd.h> +#include <miiphy.h> + +long int fixed_sdram (void); + +/* + * I/O Port configuration table + * + * if conf is 1, then that port pin will be configured at boot time + * according to the five values podr/pdir/ppar/psor/pdat for that entry + */ + +const iop_conf_t iop_conf_tab[4][32] = { + +    /* Port A configuration */ +    {   /*            conf ppar psor pdir podr pdat */ +	/* PA31 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 TxENB */ +	/* PA30 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 TxClav   */ +	/* PA29 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 TxSOC  */ +	/* PA28 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 RxENB */ +	/* PA27 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 RxSOC */ +	/* PA26 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 RxClav */ +	/* PA25 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[0] */ +	/* PA24 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[1] */ +	/* PA23 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[2] */ +	/* PA22 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[3] */ +	/* PA21 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[4] */ +	/* PA20 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[5] */ +	/* PA19 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[6] */ +	/* PA18 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXD[7] */ +	/* PA17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[7] */ +	/* PA16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[6] */ +	/* PA15 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[5] */ +	/* PA14 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[4] */ +	/* PA13 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[3] */ +	/* PA12 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[2] */ +	/* PA11 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[1] */ +	/* PA10 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXD[0] */ +	/* PA9  */ {   0,   1,   1,   1,   0,   0   }, /* FCC1 L1TXD */ +	/* PA8  */ {   0,   1,   1,   0,   0,   0   }, /* FCC1 L1RXD */ +	/* PA7  */ {   0,   0,   0,   1,   0,   0   }, /* PA7 */ +	/* PA6  */ {   0,   1,   1,   1,   0,   0   }, /* TDM A1 L1RSYNC */ +	/* PA5  */ {   0,   0,   0,   1,   0,   0   }, /* PA5 */ +	/* PA4  */ {   0,   0,   0,   1,   0,   0   }, /* PA4 */ +	/* PA3  */ {   0,   0,   0,   1,   0,   0   }, /* PA3 */ +	/* PA2  */ {   0,   0,   0,   1,   0,   0   }, /* PA2 */ +	/* PA1  */ {   1,   0,   0,   0,   0,   0   }, /* FREERUN */ +	/* PA0  */ {   0,   0,   0,   1,   0,   0   }  /* PA0 */ +    }, + +    /* Port B configuration */ +    {   /*            conf ppar psor pdir podr pdat */ +	/* PB31 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TX_ER */ +	/* PB30 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_DV */ +	/* PB29 */ {   1,   1,   1,   1,   0,   0   }, /* FCC2 MII TX_EN */ +	/* PB28 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_ER */ +	/* PB27 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII COL */ +	/* PB26 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII CRS */ +	/* PB25 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[3] */ +	/* PB24 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[2] */ +	/* PB23 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[1] */ +	/* PB22 */ {   1,   1,   0,   1,   0,   0   }, /* FCC2 MII TxD[0] */ +	/* PB21 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[0] */ +	/* PB20 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[1] */ +	/* PB19 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[2] */ +	/* PB18 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RxD[3] */ +	/* PB17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RX_DIV */ +	/* PB16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RX_ERR */ +	/* PB15 */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TX_ERR */ +	/* PB14 */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TX_EN */ +	/* PB13 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:COL */ +	/* PB12 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:CRS */ +	/* PB11 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */ +	/* PB10 */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */ +	/* PB9  */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */ +	/* PB8  */ {   0,   1,   0,   0,   0,   0   }, /* FCC3:RXD */ +	/* PB7  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */ +	/* PB6  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */ +	/* PB5  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */ +	/* PB4  */ {   0,   1,   0,   1,   0,   0   }, /* FCC3:TXD */ +	/* PB3  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */ +	/* PB2  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */ +	/* PB1  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */ +	/* PB0  */ {   0,   0,   0,   0,   0,   0   }  /* pin doesn't exist */ +    }, + +    /* Port C */ +    {   /*            conf ppar psor pdir podr pdat */ +	/* PC31 */ {   0,   0,   0,   1,   0,   0   }, /* PC31 */ +	/* PC30 */ {   0,   0,   0,   1,   0,   0   }, /* PC30 */ +	/* PC29 */ {   0,   1,   1,   0,   0,   0   }, /* SCC1 EN *CLSN */ +	/* PC28 */ {   0,   0,   0,   1,   0,   0   }, /* PC28 */ +	/* PC27 */ {   0,   0,   0,   1,   0,   0   }, /* UART Clock in */ +	/* PC26 */ {   0,   0,   0,   1,   0,   0   }, /* PC26 */ +	/* PC25 */ {   0,   0,   0,   1,   0,   0   }, /* PC25 */ +	/* PC24 */ {   0,   0,   0,   1,   0,   0   }, /* PC24 */ +	/* PC23 */ {   0,   1,   0,   1,   0,   0   }, /* ATMTFCLK */ +	/* PC22 */ {   0,   1,   0,   0,   0,   0   }, /* ATMRFCLK */ +	/* PC21 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN RXCLK */ +	/* PC20 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN TXCLK */ +	/* PC19 */ {   1,   1,   0,   0,   0,   0   }, /* FCC2 MII RX_CLK CLK13 */ +	/* PC18 */ {   1,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK14) */ +	/* PC17 */ {   0,   0,   0,   1,   0,   0   }, /* PC17 */ +	/* PC16 */ {   0,   1,   0,   0,   0,   0   }, /* FCC Tx Clock (CLK16) */ +	/* PC15 */ {   0,   1,   0,   0,   0,   0   }, /* PC15 */ +	/* PC14 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN *CD */ +	/* PC13 */ {   0,   0,   0,   1,   0,   0   }, /* PC13 */ +	/* PC12 */ {   0,   1,   0,   1,   0,   0   }, /* PC12 */ +	/* PC11 */ {   0,   0,   0,   1,   0,   0   }, /* LXT971 transmit control */ +	/* PC10 */ {   0,   0,   0,   1,   0,   0   }, /* FETHMDC */ +	/* PC9  */ {   0,   0,   0,   0,   0,   0   }, /* FETHMDIO */ +	/* PC8  */ {   0,   0,   0,   1,   0,   0   }, /* PC8 */ +	/* PC7  */ {   0,   0,   0,   1,   0,   0   }, /* PC7 */ +	/* PC6  */ {   0,   0,   0,   1,   0,   0   }, /* PC6 */ +	/* PC5  */ {   0,   0,   0,   1,   0,   0   }, /* PC5 */ +	/* PC4  */ {   0,   0,   0,   1,   0,   0   }, /* PC4 */ +	/* PC3  */ {   0,   0,   0,   1,   0,   0   }, /* PC3 */ +	/* PC2  */ {   0,   0,   0,   1,   0,   1   }, /* ENET FDE */ +	/* PC1  */ {   0,   0,   0,   1,   0,   0   }, /* ENET DSQE */ +	/* PC0  */ {   0,   0,   0,   1,   0,   0   }, /* ENET LBK */ +    }, + +    /* Port D */ +    {   /*            conf ppar psor pdir podr pdat */ +	/* PD31 */ {   0,   1,   0,   0,   0,   0   }, /* SCC1 EN RxD */ +	/* PD30 */ {   0,   1,   1,   1,   0,   0   }, /* SCC1 EN TxD */ +	/* PD29 */ {   0,   1,   0,   1,   0,   0   }, /* SCC1 EN TENA */ +	/* PD28 */ {   1,   1,   0,   0,   0,   0   }, /* SCC2 RxD */ +	/* PD27 */ {   1,   1,   0,   1,   0,   0   }, /* SCC2 TxD */ +	/* PD26 */ {   0,   0,   0,   1,   0,   0   }, /* PD26 */ +	/* PD25 */ {   0,   0,   0,   1,   0,   0   }, /* PD25 */ +	/* PD24 */ {   0,   0,   0,   1,   0,   0   }, /* PD24 */ +	/* PD23 */ {   0,   0,   0,   1,   0,   0   }, /* PD23 */ +	/* PD22 */ {   0,   0,   0,   1,   0,   0   }, /* PD22 */ +	/* PD21 */ {   0,   0,   0,   1,   0,   0   }, /* PD21 */ +	/* PD20 */ {   0,   0,   0,   1,   0,   0   }, /* PD20 */ +	/* PD19 */ {   0,   0,   0,   1,   0,   0   }, /* PD19 */ +	/* PD18 */ {   0,   0,   0,   1,   0,   0   }, /* PD18 */ +	/* PD17 */ {   0,   1,   0,   0,   0,   0   }, /* FCC1 ATMRXPRTY */ +	/* PD16 */ {   0,   1,   0,   1,   0,   0   }, /* FCC1 ATMTXPRTY */ +	/* PD15 */ {   1,   1,   1,   0,   1,   0   }, /* I2C SDA */ +	/* PD14 */ {   1,   1,   1,   0,   0,   0   }, /* I2C CLK */ +	/* PD13 */ {   0,   0,   0,   0,   0,   0   }, /* PD13 */ +	/* PD12 */ {   0,   0,   0,   0,   0,   0   }, /* PD12 */ +	/* PD11 */ {   0,   0,   0,   0,   0,   0   }, /* PD11 */ +	/* PD10 */ {   0,   0,   0,   0,   0,   0   }, /* PD10 */ +	/* PD9  */ {   0,   1,   0,   1,   0,   0   }, /* SMC1 TXD */ +	/* PD8  */ {   0,   1,   0,   0,   0,   0   }, /* SMC1 RXD */ +	/* PD7  */ {   0,   0,   0,   1,   0,   1   }, /* PD7 */ +	/* PD6  */ {   0,   0,   0,   1,   0,   1   }, /* PD6 */ +	/* PD5  */ {   0,   0,   0,   1,   0,   1   }, /* PD5 */ +	/* PD4  */ {   0,   0,   0,   1,   0,   1   }, /* PD4 */ +	/* PD3  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */ +	/* PD2  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */ +	/* PD1  */ {   0,   0,   0,   0,   0,   0   }, /* pin doesn't exist */ +	/* PD0  */ {   0,   0,   0,   0,   0,   0   }  /* pin doesn't exist */ +    } +}; + +static	uint64_t	next_led_update; +static	uint		led_bit; + +void +reset_phy(void) +{ +	volatile uint *blatch; +#if 0 +	int	i; +#endif +	blatch = (volatile uint *)CFG_LBC_CFGLATCH_BASE; + +	/* reset Giga bit Ethernet port if needed here */ + +#if 1 +	*blatch &= ~0x000000c0; +	udelay(100); +#else +	*blatch = 0; +	asm("eieio"); +	for (i=0; i<1000; i++) +		udelay(1000); +#endif +	*blatch = 0x000000c1;	/* Light one led, too */ +	udelay(1000); + +#if 0	/* This is the port we really want to use for debugging. */ +	/* reset the CPM FEC port */ +#if (CONFIG_ETHER_INDEX == 2) +	bcsr->bcsr2 &= ~FETH2_RST; +	udelay(2); +	bcsr->bcsr2 |=  FETH2_RST; +	udelay(1000); +#elif (CONFIG_ETHER_INDEX == 3) +	bcsr->bcsr3 &= ~FETH3_RST; +	udelay(2); +	bcsr->bcsr3 |=  FETH3_RST; +	udelay(1000); +#endif +#if defined(CONFIG_MII) && defined(CONFIG_ETHER_ON_FCC) +	/* reset PHY */ +	miiphy_reset("FCC1 ETHERNET", 0x0); + +	/* change PHY address to 0x02 */ +	bb_miiphy_write(NULL, 0, PHY_MIPSCR, 0xf028); + +	bb_miiphy_write(NULL, 0x02, PHY_BMCR, +			PHY_BMCR_AUTON | PHY_BMCR_RST_NEG); +#endif /* CONFIG_MII */ +#endif +} + +int +board_early_init_f(void) +{ +#if defined(CONFIG_PCI) +    volatile immap_t *immr = (immap_t *)CFG_IMMR; +    volatile ccsr_pcix_t *pci = &immr->im_pcix; + +    pci->peer &= 0xfffffffdf; /* disable master abort */ +#endif + +	/* Why is the phy reset done _after_ the ethernet +	 * initialization in lib_ppc/board.c? +	 * Do it here so it's done before the TSECs are used. +	 */ +	reset_phy(); + +	return 0; +} + +int +checkboard(void) +{ +	printf ("Board: Silicon Tx GPPP SSA Board\n"); +	return (0); +} + +/* Blinkin' LEDS for Robert. +*/ +void +show_activity(int flag) +{ +	volatile uint *blatch; + +	if (next_led_update > get_ticks()) +		return; + +	blatch = (volatile uint *)CFG_LBC_CFGLATCH_BASE; + +	led_bit >>= 1; +	if (led_bit == 0) +		led_bit = 0x08; +	*blatch = (0xc0 | led_bit); +	eieio(); +	next_led_update += (get_tbclk() / 4); +} + +long int +initdram (int board_type) +{ +	long dram_size = 0; +	extern long spd_sdram (void); + +#if defined(CONFIG_DDR_DLL) +	{ +		volatile immap_t *immap = (immap_t *)CFG_IMMR; +		volatile ccsr_gur_t *gur= &immap->im_gur; +		uint temp_ddrdll = 0; + +		/* Work around to stabilize DDR DLL */ +		temp_ddrdll = gur->ddrdllcr; +		gur->ddrdllcr = ((temp_ddrdll & 0xff) << 16) | 0x80000000; +		asm("sync;isync;msync"); +	} +#endif + +	dram_size = spd_sdram (); + +#if defined(CONFIG_DDR_ECC) +	/* Initialize and enable DDR ECC. +	*/ +	ddr_enable_ecc(dram_size); +#endif + +	return dram_size; +} + + +#if defined(CFG_DRAM_TEST) +int testdram (void) +{ +	uint *pstart = (uint *) CFG_MEMTEST_START; +	uint *pend = (uint *) CFG_MEMTEST_END; +	uint *p; + +	printf("SDRAM test phase 1:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0xaaaaaaaa; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0xaaaaaaaa) { +			printf ("SDRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("SDRAM test phase 2:\n"); +	for (p = pstart; p < pend; p++) +		*p = 0x55555555; + +	for (p = pstart; p < pend; p++) { +		if (*p != 0x55555555) { +			printf ("SDRAM test fails at: %08x\n", (uint) p); +			return 1; +		} +	} + +	printf("SDRAM test passed.\n"); +	return 0; +} +#endif + +#if defined(CONFIG_PCI) + +/* + * Initialize PCI Devices, report devices found. + */ + +#ifndef CONFIG_PCI_PNP +static struct pci_config_table pci_stxgp3_config_table[] = { +    { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, +      PCI_IDSEL_NUMBER, PCI_ANY_ID, +      pci_cfgfunc_config_device, { PCI_ENET0_IOADDR, +				   PCI_ENET0_MEMADDR, +				   PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER +      } }, +    { } +}; +#endif + + +static struct pci_controller hose = { +#ifndef CONFIG_PCI_PNP +	config_table: pci_stxgp3_config_table, +#endif +}; + +#endif	/* CONFIG_PCI */ + + +void +pci_init_board(void) +{ +#ifdef CONFIG_PCI +	extern void pci_mpc85xx_init(struct pci_controller *hose); + +	pci_mpc85xx_init(&hose); +#endif /* CONFIG_PCI */ +} diff --git a/board/stxssa/u-boot.lds b/board/stxssa/u-boot.lds new file mode 100644 index 000000000..95ecf66a8 --- /dev/null +++ b/board/stxssa/u-boot.lds @@ -0,0 +1,158 @@ +/* + * (C) Copyright 2005 Embedded Alley Solutions, Inc. + * Dan Malek, <dan@embeddedalley.com> + * Copied from STx GP3. + * Updates for Silicon Tx GP3 SSA. + * + * (C) Copyright 2002,2003,Motorola,Inc. + * Xianghua Xiao, X.Xiao@motorola.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 + */ + +OUTPUT_ARCH(powerpc) +SEARCH_DIR(/lib); SEARCH_DIR(/usr/lib); SEARCH_DIR(/usr/local/lib); SEARCH_DIR(/usr/local/powerpc-any-elf/lib); +/* Do we need any of these for elf? +   __DYNAMIC = 0;    */ +SECTIONS +{ +  .resetvec 0xFFFFFFFC : +  { +    *(.resetvec) +  } = 0xffff + +  .bootpg 0xFFFFF000 : +  { +    cpu/mpc85xx/start.o	(.bootpg) +    board/stxssa/init.o (.bootpg) +  } = 0xffff + +  /* Read-only sections, merged into text segment: */ +  . = + SIZEOF_HEADERS; +  .interp : { *(.interp) } +  .hash          : { *(.hash)		} +  .dynsym        : { *(.dynsym)		} +  .dynstr        : { *(.dynstr)		} +  .rel.text      : { *(.rel.text)		} +  .rela.text     : { *(.rela.text) 	} +  .rel.data      : { *(.rel.data)		} +  .rela.data     : { *(.rela.data) 	} +  .rel.rodata    : { *(.rel.rodata) 	} +  .rela.rodata   : { *(.rela.rodata) 	} +  .rel.got       : { *(.rel.got)		} +  .rela.got      : { *(.rela.got)		} +  .rel.ctors     : { *(.rel.ctors)	} +  .rela.ctors    : { *(.rela.ctors)	} +  .rel.dtors     : { *(.rel.dtors)	} +  .rela.dtors    : { *(.rela.dtors)	} +  .rel.bss       : { *(.rel.bss)		} +  .rela.bss      : { *(.rela.bss)		} +  .rel.plt       : { *(.rel.plt)		} +  .rela.plt      : { *(.rela.plt)		} +  .init          : { *(.init)	} +  .plt : { *(.plt) } +  .text      : +  { +    cpu/mpc85xx/start.o	(.text) +    board/stxssa/init.o (.text) +    cpu/mpc85xx/commproc.o (.text) +    cpu/mpc85xx/traps.o (.text) +    cpu/mpc85xx/interrupts.o (.text) +    cpu/mpc85xx/serial_scc.o (.text) +    cpu/mpc85xx/ether_fcc.o (.text) +    cpu/mpc85xx/cpu_init.o (.text) +    cpu/mpc85xx/cpu.o (.text) +    cpu/mpc85xx/speed.o (.text) +    cpu/mpc85xx/spd_sdram.o (.text) +    common/dlmalloc.o (.text) +    lib_generic/crc32.o (.text) +    lib_ppc/extable.o (.text) +    lib_generic/zlib.o (.text) +    *(.text) +    *(.fixup) +    *(.got1) +   } +    _etext = .; +    PROVIDE (etext = .); +    .rodata    : +   { +    *(.rodata) +    *(.rodata1) +    *(.rodata.str1.4) +    *(.eh_frame) +  } +  .fini      : { *(.fini)    } =0 +  .ctors     : { *(.ctors)   } +  .dtors     : { *(.dtors)   } + +  /* Read-write section, merged into data segment: */ +  . = (. + 0x00FF) & 0xFFFFFF00; +  _erotext = .; +  PROVIDE (erotext = .); +  .reloc   : +  { +    *(.got) +    _GOT2_TABLE_ = .; +    *(.got2) +    _FIXUP_TABLE_ = .; +    *(.fixup) +  } +  __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2; +  __fixup_entries = (. - _FIXUP_TABLE_) >> 2; + +  .data    : +  { +    *(.data) +    *(.data1) +    *(.sdata) +    *(.sdata2) +    *(.dynamic) +    CONSTRUCTORS +  } +  _edata  =  .; +  PROVIDE (edata = .); + +  . = .; +  __u_boot_cmd_start = .; +  .u_boot_cmd : { *(.u_boot_cmd) } +  __u_boot_cmd_end = .; + +  . = .; +  __start___ex_table = .; +  __ex_table : { *(__ex_table) } +  __stop___ex_table = .; + +  . = ALIGN(256); +  __init_begin = .; +  .text.init : { *(.text.init) } +  .data.init : { *(.data.init) } +  . = ALIGN(256); +  __init_end = .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) *(.scommon) +   *(.dynbss) +   *(.bss) +   *(COMMON) +  } +  _end = . ; +  PROVIDE (end = .); +} diff --git a/board/tqm5200/tqm5200.c b/board/tqm5200/tqm5200.c index a4322b666..cf97603af 100644 --- a/board/tqm5200/tqm5200.c +++ b/board/tqm5200/tqm5200.c @@ -32,6 +32,10 @@  #include <pci.h>  #include <asm/processor.h> +#if defined(CONFIG_OF_FLAT_TREE) +#include <ft_build.h> +#endif +  #ifdef CONFIG_VIDEO_SM501  #include <sm501.h>  #endif @@ -775,3 +779,10 @@ int board_get_height (void)  }  #endif /* CONFIG_VIDEO_SM501 */ + +#if defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) +void ft_board_setup(void *blob, bd_t *bd) +{ +	ft_cpu_setup(blob, bd); +} +#endif /* defined(CONFIG_OF_FLAT_TREE) && defined(CONFIG_OF_BOARD_SETUP) */ diff --git a/board/xilinx/ml401/config.mk b/board/xilinx/ml401/config.mk index 807f169fa..c75daaf0b 100644 --- a/board/xilinx/ml401/config.mk +++ b/board/xilinx/ml401/config.mk @@ -25,7 +25,7 @@  # Version: Xilinx EDK 6.3 EDK_Gmm.12.3  # -TEXT_BASE = 0x12000000 +TEXT_BASE = 0x29000000  PLATFORM_CPPFLAGS += -mno-xl-soft-mul  PLATFORM_CPPFLAGS += -mno-xl-soft-div diff --git a/board/xilinx/ml401/ml401.c b/board/xilinx/ml401/ml401.c index b48103fdc..955936d90 100644 --- a/board/xilinx/ml401/ml401.c +++ b/board/xilinx/ml401/ml401.c @@ -27,6 +27,8 @@  #include <common.h>  #include <config.h> +#include <asm/microblaze_intc.h> +#include <asm/asm.h>  void do_reset (void)  { @@ -43,7 +45,25 @@ void do_reset (void)  int gpio_init (void)  {  #ifdef CFG_GPIO_0 -	*((unsigned long *)(CFG_GPIO_0_ADDR)) = 0x0; +	*((unsigned long *)(CFG_GPIO_0_ADDR)) = 0xFFFFFFFF;  #endif  	return 0;  } + +#ifdef CFG_FSL_2 +void fsl_isr2 (void *arg) { +	volatile int num; +	*((unsigned int *)(CFG_GPIO_0_ADDR + 0x4)) = +	    ++(*((unsigned int *)(CFG_GPIO_0_ADDR + 0x4))); +	GET (num, 2); +	NGET (num, 2); +	puts("*"); +} + +void fsl_init2 (void) { +	puts("fsl_init2\n"); +	install_interrupt_handler (FSL_INTR_2,\ + fsl_isr2,\ + NULL); +} +#endif diff --git a/board/xilinx/ml401/xparameters.h b/board/xilinx/ml401/xparameters.h index 18d24f9c1..1a116ead1 100644..100755 --- a/board/xilinx/ml401/xparameters.h +++ b/board/xilinx/ml401/xparameters.h @@ -21,47 +21,55 @@   * Foundation, Inc., 59 Temple Place, Suite 330, Boston,   * MA 02111-1307 USA   * - *   * CAUTION: This file is automatically generated by libgen. - * Version: Xilinx EDK 6.3 EDK_Gmm.12.3 + * Version: Xilinx EDK 8.2.02 EDK_Im_Sp2.4   */  /* System Clock Frequency */ -#define XILINX_CLOCK_FREQ	66666667 +#define XILINX_CLOCK_FREQ	100000000 + +/* Microblaze is microblaze_0 */ +#define XILINX_USE_MSR_INSTR	1 +#define XILINX_FSL_NUMBER	3 -/* Interrupt controller is intc_0 */ -#define XILINX_INTC_BASEADDR	0xd1000fc0 -#define XILINX_INTC_NUM_INTR_INPUTS	12 +/* Interrupt controller is opb_intc_0 */ +#define XILINX_INTC_BASEADDR	0x41200000 +#define XILINX_INTC_NUM_INTR_INPUTS	6 -/* Timer pheriphery is opb_timer_0 */ -#define XILINX_TIMER_BASEADDR	0xa2000000 +/* Timer pheriphery is opb_timer_1 */ +#define XILINX_TIMER_BASEADDR	0x41c00000  #define XILINX_TIMER_IRQ	0 -/* Uart pheriphery is console_uart */ -#define XILINX_UART_BASEADDR	0xa0000000 +/* Uart pheriphery is RS232_Uart */ +#define XILINX_UART_BASEADDR	0x40600000  #define XILINX_UART_BAUDRATE	115200 -/* GPIO is opb_gpio_0*/ -#define XILINX_GPIO_BASEADDR	0x90000000 +/* IIC pheriphery is IIC_EEPROM */ +#define XILINX_IIC_0_BASEADDR	0x40800000 +#define XILINX_IIC_0_FREQ	100000 +#define XILINX_IIC_0_BIT	0 + +/* GPIO is LEDs_4Bit*/ +#define XILINX_GPIO_BASEADDR	0x40000000 -/* Flash Memory is opb_emc_0 */ -#define XILINX_FLASH_START	0x28000000 +/* Flash Memory is FLASH_2Mx32 */ +#define XILINX_FLASH_START	0x2c000000  #define XILINX_FLASH_SIZE	0x00800000 -/* Main Memory is plb_ddr_0 */ -#define XILINX_RAM_START	0x10000000 -#define XILINX_RAM_SIZE	0x10000000 +/* Main Memory is DDR_SDRAM_64Mx32 */ +#define XILINX_RAM_START	0x28000000 +#define XILINX_RAM_SIZE	0x04000000 -/* Sysace Controller is opb_sysace_0 */ -#define XILINX_SYSACE_BASEADDR	0xCF000000 -#define XILINX_SYSACE_HIGHADDR	0xCF0001FF +/* Sysace Controller is SysACE_CompactFlash */ +#define XILINX_SYSACE_BASEADDR	0x41800000 +#define XILINX_SYSACE_HIGHADDR	0x4180ffff  #define XILINX_SYSACE_MEM_WIDTH	16 -/* Ethernet controller is opb_ethernet_0 */ +/* Ethernet controller is Ethernet_MAC */  #define XPAR_XEMAC_NUM_INSTANCES	1  #define XPAR_OPB_ETHERNET_0_DEVICE_ID	0 -#define XPAR_OPB_ETHERNET_0_BASEADDR	0x60000000 -#define XPAR_OPB_ETHERNET_0_HIGHADDR	0x60003FFF +#define XPAR_OPB_ETHERNET_0_BASEADDR	0x40c00000 +#define XPAR_OPB_ETHERNET_0_HIGHADDR	0x40c0ffff  #define XPAR_OPB_ETHERNET_0_DMA_PRESENT	1  #define XPAR_OPB_ETHERNET_0_ERR_COUNT_EXIST	1  #define XPAR_OPB_ETHERNET_0_MII_EXIST	1 diff --git a/common/Makefile b/common/Makefile index 5dfd3a84a..bc1f71450 100644 --- a/common/Makefile +++ b/common/Makefile @@ -50,7 +50,7 @@ COBJS	= main.o ACEX1K.o altera.o bedbug.o circbuf.o cmd_autoscript.o \  	  memsize.o miiphybb.o miiphyutil.o \  	  s_record.o serial.o soft_i2c.o soft_spi.o spartan2.o spartan3.o \  	  usb.o usb_kbd.o usb_storage.o \ -	  virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o +	  virtex2.o xilinx.o crc16.o xyzModem.o cmd_mac.o cmd_mfsl.o  SRCS	:= $(AOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(AOBJS) $(COBJS)) diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c index 32c29e55a..a6499e8dd 100644 --- a/common/cmd_bootm.c +++ b/common/cmd_bootm.c @@ -779,9 +779,8 @@ do_bootm_linux (cmd_tbl_t *cmdtp, int flag,  			checksum = ntohl(hdr->ih_dcrc);  			addr = (ulong)((uchar *)(hdr) + sizeof(image_header_t)); -			len = ntohl(hdr->ih_size); -			if(checksum != crc32(0, (uchar *)addr, len)) { +			if(checksum != crc32(0, (uchar *)addr, ntohl(hdr->ih_size))) {  				printf("ERROR: Flat Device Tree checksum is invalid\n");  				return;  			} diff --git a/common/cmd_flash.c b/common/cmd_flash.c index cb1c5bb43..a34ab79c3 100644 --- a/common/cmd_flash.c +++ b/common/cmd_flash.c @@ -690,7 +690,7 @@ U_BOOT_CMD(  );  U_BOOT_CMD( -	erase,   3,   1,  do_flerase, +	erase,   3,   0,  do_flerase,  	"erase   - erase FLASH memory\n",  	"start end\n"  	"    - erase FLASH from addr 'start' to addr 'end'\n" @@ -704,7 +704,7 @@ U_BOOT_CMD(  );  U_BOOT_CMD( -	protect,  4,  1,   do_protect, +	protect,  4,  0,   do_protect,  	"protect - enable or disable FLASH write protection\n",  	"on  start end\n"  	"    - protect FLASH from addr 'start' to addr 'end'\n" diff --git a/common/cmd_ide.c b/common/cmd_ide.c index ce99a41ab..e308474af 100644 --- a/common/cmd_ide.c +++ b/common/cmd_ide.c @@ -514,11 +514,11 @@ void ide_init (void)  	unsigned char c;  	int i, bus;  #if defined(CONFIG_AMIGAONEG3SE) || defined(CONFIG_SC3) -	unsigned int ata_reset_time; +	unsigned int ata_reset_time = ATA_RESET_TIME; +	char *s;  #endif  #ifdef CONFIG_AMIGAONEG3SE  	unsigned int max_bus_scan; -	char *s;  #endif  #ifdef CONFIG_IDE_8xx_PCCARD  	extern int pcmcia_on (void); diff --git a/common/cmd_mfsl.c b/common/cmd_mfsl.c new file mode 100644 index 000000000..ffa266693 --- /dev/null +++ b/common/cmd_mfsl.c @@ -0,0 +1,417 @@ +/* + * (C) Copyright 2007 Michal Simek + * + * Michal  SIMEK <monstr@monstr.eu> + * + * 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 + */ + +/* + * Microblaze FSL support + */ + +#include <common.h> +#include <config.h> +#include <command.h> + +#if (CONFIG_COMMANDS & CFG_CMD_MFSL) +#include <asm/asm.h> + +int do_frd (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{ +	unsigned int fslnum; +	unsigned int num; +	unsigned int blocking; + +	if (argc < 2) { +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16); +	blocking = (unsigned int)simple_strtoul (argv[2], NULL, 16); +	if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER) { +		puts ("Bad number of FSL\n"); +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	switch (fslnum) { +#if (XILINX_FSL_NUMBER > 0) +	case 0: +		switch (blocking) { +		case 0:	NGET (num, 0); +			break; +		case 1:	NCGET (num, 0); +			break; +		case 2:	GET (num, 0); +			break; +		case 3:	CGET (num, 0); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 1) +	case 1: +		switch (blocking) { +		case 0:	NGET (num, 1); +			break; +		case 1:	NCGET (num, 1); +			break; +		case 2:	GET (num, 1); +			break; +		case 3:	CGET (num, 1); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 2) +	case 2: +		switch (blocking) { +		case 0:	NGET (num, 2); +			break; +		case 1:	NCGET (num, 2); +			break; +		case 2:	GET (num, 2); +			break; +		case 3:	CGET (num, 2); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 3) +	case 3: +		switch (blocking) { +		case 0:	NGET (num, 3); +			break; +		case 1:	NCGET (num, 3); +			break; +		case 2:	GET (num, 3); +			break; +		case 3:	CGET (num, 3); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 4) +	case 4: +		switch (blocking) { +		case 0:	NGET (num, 4); +			break; +		case 1:	NCGET (num, 4); +			break; +		case 2:	GET (num, 4); +			break; +		case 3:	CGET (num, 4); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 5) +	case 5: +		switch (blocking) { +		case 0:	NGET (num, 5); +			break; +		case 1:	NCGET (num, 5); +			break; +		case 2:	GET (num, 5); +			break; +		case 3:	CGET (num, 5); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 6) +	case 6: +		switch (blocking) { +		case 0:	NGET (num, 6); +			break; +		case 1:	NCGET (num, 6); +			break; +		case 2:	GET (num, 6); +			break; +		case 3:	CGET (num, 6); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 7) +	case 7: +		switch (blocking) { +		case 0:	NGET (num, 7); +			break; +		case 1:	NCGET (num, 7); +			break; +		case 2:	GET (num, 7); +			break; +		case 3:	CGET (num, 7); +			break; +		default: +			return 2; +		} +		break; +#endif +	default: +		return 1; +	} + +	printf ("%01x: 0x%08lx - %s %s read\n", fslnum, num, +		blocking < 2  ? "non blocking" : "blocking", +		((blocking == 1) || (blocking == 3)) ? "control" : "data" ); +	return 0; +} + +int do_fwr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{ +	unsigned int fslnum; +	unsigned int num; +	unsigned int blocking; + +	if (argc < 3) { +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	fslnum = (unsigned int)simple_strtoul (argv[1], NULL, 16); +	num = (unsigned int)simple_strtoul (argv[2], NULL, 16); +	blocking = (unsigned int)simple_strtoul (argv[3], NULL, 16); +	if (fslnum < 0 || fslnum >= XILINX_FSL_NUMBER) { +		printf ("Bad number of FSL\nUsage:\n%s\n", cmdtp->usage); +		return 1; +	} + +	switch (fslnum) { +#if (XILINX_FSL_NUMBER > 0) +	case 0: +		switch (blocking) { +		case 0:	NPUT (num, 0); +			break; +		case 1:	NCPUT (num, 0); +			break; +		case 2:	PUT (num, 0); +			break; +		case 3:	CPUT (num, 0); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 1) +	case 1: +		switch (blocking) { +		case 0:	NPUT (num, 1); +			break; +		case 1:	NCPUT (num, 1); +			break; +		case 2:	PUT (num, 1); +			break; +		case 3:	CPUT (num, 1); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 2) +	case 2: +		switch (blocking) { +		case 0:	NPUT (num, 2); +			break; +		case 1:	NCPUT (num, 2); +			break; +		case 2:	PUT (num, 2); +			break; +		case 3:	CPUT (num, 2); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 3) +	case 3: +		switch (blocking) { +		case 0:	NPUT (num, 3); +			break; +		case 1:	NCPUT (num, 3); +			break; +		case 2:	PUT (num, 3); +			break; +		case 3:	CPUT (num, 3); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 4) +	case 4: +		switch (blocking) { +		case 0:	NPUT (num, 4); +			break; +		case 1:	NCPUT (num, 4); +			break; +		case 2:	PUT (num, 4); +			break; +		case 3:	CPUT (num, 4); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 5) +	case 5: +		switch (blocking) { +		case 0:	NPUT (num, 5); +			break; +		case 1:	NCPUT (num, 5); +			break; +		case 2:	PUT (num, 5); +			break; +		case 3:	CPUT (num, 5); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 6) +	case 6: +		switch (blocking) { +		case 0:	NPUT (num, 6); +			break; +		case 1:	NCPUT (num, 6); +			break; +		case 2:	PUT (num, 6); +			break; +		case 3:	CPUT (num, 6); +			break; +		default: +			return 2; +		} +		break; +#endif +#if (XILINX_FSL_NUMBER > 7) +	case 7: +		switch (blocking) { +		case 0:	NPUT (num, 7); +			break; +		case 1:	NCPUT (num, 7); +			break; +		case 2:	PUT (num, 7); +			break; +		case 3:	CPUT (num, 7); +			break; +		default: +			return 2; +		} +		break; +#endif +	default: +		return 1; +	} + +	printf ("%01x: 0x%08lx - %s %s write\n", fslnum, num, +		blocking < 2  ? "non blocking" : "blocking", +		((blocking == 1) || (blocking == 3)) ? "control" : "data" ); +	return 0; + +} + +int do_rspr (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[]) +{ +	unsigned int reg = 0; +	unsigned int val = 0; + +	reg = (unsigned int)simple_strtoul (argv[1], NULL, 16); +	val = (unsigned int)simple_strtoul (argv[2], NULL, 16); +	if (argc < 1) { +		printf ("Usage:\n%s\n", cmdtp->usage); +		return 1; +	} +	switch (reg) { +	case 0x1: +		if (argc > 2) { +			MTS (val, rmsr); +			NOP; +			MFS (val, rmsr); + +		} else { +			MFS (val, rmsr); +		} +		puts ("MSR"); +		break; +	case 0x3: +		MFS (val, rear); +		puts ("EAR"); +		break; +	case 0x5: +		MFS (val, resr); +		puts ("ESR"); +		break; +	default: +		return 1; +	} +	printf (": 0x%08lx\n", val); +	return 0; +} + +/***************************************************/ + +U_BOOT_CMD (frd, 3, 1, do_frd, +		"frd     - read data from FSL\n", +		"- [fslnum [0|1|2|3]]\n" +		" 0 - non blocking data read\n" +		" 1 - non blocking control read\n" +		" 2 - blocking data read\n" +		" 3 - blocking control read\n"); + + +U_BOOT_CMD (fwr, 4, 1, do_fwr, +		"fwr     - write data to FSL\n", +		"- [fslnum [0|1|2|3]]\n" +		" 0 - non blocking data write\n" +		" 1 - non blocking control write\n" +		" 2 - blocking data write\n" +		" 3 - blocking control write\n"); + +U_BOOT_CMD (rspr, 3, 1, do_rspr, +		"rmsr    - read/write special purpose register\n", +		"- reg_num [write value] read/write special purpose register\n" +		" 0 - MSR - Machine status register\n" +		" 1 - EAR - Exception address register\n" +		" 2 - ESR - Exception status register\n"); + +#endif				/* CONFIG_MICROBLAZE & CFG_CMD_MFSL */ diff --git a/common/cmd_misc.c b/common/cmd_misc.c index 67ee9e8a8..a99222d3e 100644 --- a/common/cmd_misc.c +++ b/common/cmd_misc.c @@ -63,7 +63,7 @@ U_BOOT_CMD(  #endif  /* CONFIG_COMMANDS & CFG_CMD_IRQ */  U_BOOT_CMD( -	sleep ,    2,    2,     do_sleep, +	sleep ,    2,    1,     do_sleep,  	"sleep   - delay execution for some time\n",  	"N\n"  	"    - delay execution for N seconds (N is _decimal_ !!!)\n" diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c index 9834ba65b..977ec5bae 100644 --- a/common/cmd_nvedit.c +++ b/common/cmd_nvedit.c @@ -391,7 +391,10 @@ int _do_setenv (int flag, int argc, char *argv[])  void setenv (char *varname, char *varvalue)  {  	char *argv[4] = { "setenv", varname, varvalue, NULL }; -	_do_setenv (0, 3, argv); +	if (varvalue == NULL) +		_do_setenv (0, 2, argv); +	else +		_do_setenv (0, 3, argv);  }  int do_setenv ( cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) diff --git a/common/cmd_pcmcia.c b/common/cmd_pcmcia.c index 2eb5b26f2..b1a594f18 100644 --- a/common/cmd_pcmcia.c +++ b/common/cmd_pcmcia.c @@ -87,7 +87,7 @@ int do_pinit (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])  }  U_BOOT_CMD( -	pinit,	2,	1,	do_pinit, +	pinit,	2,	0,	do_pinit,  	"pinit   - PCMCIA sub-system\n",  	"on  - power on PCMCIA socket\n"  			"pinit off - power off PCMCIA socket\n" diff --git a/common/console.c b/common/console.c index e9f23bec1..d8a0cb6c7 100644 --- a/common/console.c +++ b/common/console.c @@ -494,13 +494,7 @@ int console_init_r (void)  	/* suppress all output if splash screen is enabled and we have  	   a bmp to display                                            */  	if (getenv("splashimage") != NULL) -		outputdev = search_device (DEV_FLAGS_OUTPUT, "nulldev"); -#endif - -#ifdef CONFIG_SILENT_CONSOLE -	/* Suppress all output if "silent" mode requested		*/ -	if (gd->flags & GD_FLG_SILENT) -		outputdev = search_device (DEV_FLAGS_OUTPUT, "nulldev"); +		gd->flags |= GD_FLG_SILENT;  #endif  	/* Scan devices looking for input and output devices */ diff --git a/common/fdt_support.c b/common/fdt_support.c index 91b729f37..69099c427 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -56,7 +56,7 @@ int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)  	}  	if (initrd_start && initrd_end) { -		struct fdt_reserve_entry *re; +		struct fdt_reserve_entry re;  		int  used;  		int  total;  		int  j; @@ -77,7 +77,7 @@ int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)  		 */  		for (j = 0; j < used; j++) {  			err = fdt_get_reservemap(fdt, j, &re); -			if (re->address == initrd_start) { +			if (re.address == initrd_start) {  				break;  			}  		} diff --git a/common/main.c b/common/main.c index cc4b50f61..553ac357d 100644 --- a/common/main.c +++ b/common/main.c @@ -112,14 +112,6 @@ static __inline__ int abortboot(int bootdelay)  	u_int presskey_max = 0;  	u_int i; -#ifdef CONFIG_SILENT_CONSOLE -	if (gd->flags & GD_FLG_SILENT) { -		/* Restore serial console */ -		console_assign (stdout, "serial"); -		console_assign (stderr, "serial"); -	} -#endif -  #  ifdef CONFIG_AUTOBOOT_PROMPT  	printf (CONFIG_AUTOBOOT_PROMPT, bootdelay);  #  endif @@ -199,14 +191,8 @@ static __inline__ int abortboot(int bootdelay)  #  endif  #ifdef CONFIG_SILENT_CONSOLE -	if (abort) { -		/* permanently enable normal console output */ -		gd->flags &= ~(GD_FLG_SILENT); -	} else if (gd->flags & GD_FLG_SILENT) { -		/* Restore silent console */ -		console_assign (stdout, "nulldev"); -		console_assign (stderr, "nulldev"); -	} +	if (abort) +		gd->flags &= ~GD_FLG_SILENT;  #endif  	return abort; @@ -222,14 +208,6 @@ static __inline__ int abortboot(int bootdelay)  {  	int abort = 0; -#ifdef CONFIG_SILENT_CONSOLE -	if (gd->flags & GD_FLG_SILENT) { -		/* Restore serial console */ -		console_assign (stdout, "serial"); -		console_assign (stderr, "serial"); -	} -#endif -  #ifdef CONFIG_MENUPROMPT  	printf(CONFIG_MENUPROMPT, bootdelay);  #else @@ -245,7 +223,7 @@ static __inline__ int abortboot(int bootdelay)  		if (tstc()) {	/* we got a key press	*/  			(void) getc();  /* consume input	*/  			puts ("\b\b\b 0"); -			abort = 1; 	/* don't auto boot	*/ +			abort = 1;	/* don't auto boot	*/  		}  	}  #endif @@ -275,14 +253,8 @@ static __inline__ int abortboot(int bootdelay)  	putc ('\n');  #ifdef CONFIG_SILENT_CONSOLE -	if (abort) { -		/* permanently enable normal console output */ -		gd->flags &= ~(GD_FLG_SILENT); -	} else if (gd->flags & GD_FLG_SILENT) { -		/* Restore silent console */ -		console_assign (stdout, "nulldev"); -		console_assign (stderr, "nulldev"); -	} +	if (abort) +		gd->flags &= ~GD_FLG_SILENT;  #endif  	return abort; @@ -1219,6 +1191,8 @@ static void process_macros (const char *input, char *output)  	if (outputcnt)  		*output = 0; +	else +		*(output - 1) = 0;  #ifdef DEBUG_PARSER  	printf ("[PROCESS_MACROS] OUTPUT len %d: \"%s\"\n", @@ -1362,7 +1336,7 @@ int run_command (const char *cmd, int flag)  		/* Did the user stop this? */  		if (had_ctrlc ()) -			return 0;	/* if stopped then not repeatable */ +			return -1;	/* if stopped then not repeatable */  	}  	return rc ? rc : repeatable; diff --git a/common/soft_i2c.c b/common/soft_i2c.c index edad51bc4..0f6e3a938 100644 --- a/common/soft_i2c.c +++ b/common/soft_i2c.c @@ -36,6 +36,9 @@  #ifdef	CONFIG_IXP425			/* only valid for IXP425 */  #include <asm/arch/ixp425.h>  #endif +#ifdef CONFIG_LPC2292 +#include <asm/arch/hardware.h> +#endif  #include <i2c.h>  #if defined(CONFIG_SOFT_I2C) diff --git a/cpu/arm720t/lpc2292/Makefile b/cpu/arm720t/lpc2292/Makefile new file mode 100644 index 000000000..240f1e3b3 --- /dev/null +++ b/cpu/arm720t/lpc2292/Makefile @@ -0,0 +1,50 @@ +# +# (C) Copyright 2000-2007 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# 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 $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(SOC).a + +COBJS	= flash.o mmc.o mmc_hw.o spi.o +SOBJS	= $(obj)iap_entry.o + +SRCS	:= $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(COBJS)) + +all:	$(obj).depend $(LIB) + +$(LIB):	$(OBJS) $(SOBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS) + +# this MUST be compiled as thumb code! +$(SOBJS): +	$(CC) $(AFLAGS) -march=armv4t -c -o $(SOBJS) iap_entry.S + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/cpu/arm720t/lpc2292/flash.c b/cpu/arm720t/lpc2292/flash.c new file mode 100644 index 000000000..e5c869722 --- /dev/null +++ b/cpu/arm720t/lpc2292/flash.c @@ -0,0 +1,249 @@ +/* + * (C) Copyright 2006 Embedded Artists AB <www.embeddedartists.com> + * + * Modified to remove all but the IAP-command related code by + * Gary Jennejohn <garyj@denx.de> + * + * 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 <asm/arch/hardware.h> + +/* IAP commands use 32 bytes at the top of CPU internal sram, we +   use 512 bytes below that */ +#define COPY_BUFFER_LOCATION 0x40003de0 + +#define IAP_LOCATION 0x7ffffff1 +#define IAP_CMD_PREPARE 50 +#define IAP_CMD_COPY 51 +#define IAP_CMD_ERASE 52 +#define IAP_CMD_CHECK 53 +#define IAP_CMD_ID 54 +#define IAP_CMD_VERSION 55 +#define IAP_CMD_COMPARE 56 + +#define IAP_RET_CMD_SUCCESS 0 + +static unsigned long command[5]; +static unsigned long result[2]; + +extern void iap_entry(unsigned long * command, unsigned long * result); + +/*----------------------------------------------------------------------- + * + */ +static int get_flash_sector(flash_info_t * info, ulong flash_addr) +{ +	int i; + +	for(i = 1; i < (info->sector_count); i++) { +		if (flash_addr < (info->start[i])) +			break; +	} + +	return (i-1); +} + +/*----------------------------------------------------------------------- + * This function assumes that flash_addr is aligned on 512 bytes boundary + * in flash. This function also assumes that prepare have been called + * for the sector in question. + */ +int lpc2292_copy_buffer_to_flash(flash_info_t * info, ulong flash_addr) +{ +	int first_sector; +	int last_sector; + +	first_sector = get_flash_sector(info, flash_addr); +	last_sector = get_flash_sector(info, flash_addr + 512 - 1); + +	/* prepare sectors for write */ +	command[0] = IAP_CMD_PREPARE; +	command[1] = first_sector; +	command[2] = last_sector; +	iap_entry(command, result); +	if (result[0] != IAP_RET_CMD_SUCCESS) { +		printf("IAP prepare failed\n"); +		return ERR_PROG_ERROR; +	} + +	command[0] = IAP_CMD_COPY; +	command[1] = flash_addr; +	command[2] = COPY_BUFFER_LOCATION; +	command[3] = 512; +	command[4] = CFG_SYS_CLK_FREQ >> 10; +	iap_entry(command, result); +	if (result[0] != IAP_RET_CMD_SUCCESS) { +		printf("IAP copy failed\n"); +		return 1; +	} + +	return 0; +} + +/*----------------------------------------------------------------------- + */ + +int lpc2292_flash_erase (flash_info_t * info, int s_first, int s_last) +{ +	int flag; +	int prot; +	int sect; + +	prot = 0; +	for (sect = s_first; sect <= s_last; ++sect) { +		if (info->protect[sect]) { +			prot++; +		} +	} +	if (prot) +		return ERR_PROTECTED; + + +	flag = disable_interrupts(); + +	printf ("Erasing %d sectors starting at sector %2d.\n" +	"This make take some time ... ", +	s_last - s_first + 1, s_first); + +	command[0] = IAP_CMD_PREPARE; +	command[1] = s_first; +	command[2] = s_last; +	iap_entry(command, result); +	if (result[0] != IAP_RET_CMD_SUCCESS) { +		printf("IAP prepare failed\n"); +		return ERR_PROTECTED; +	} + +	command[0] = IAP_CMD_ERASE; +	command[1] = s_first; +	command[2] = s_last; +	command[3] = CFG_SYS_CLK_FREQ >> 10; +	iap_entry(command, result); +	if (result[0] != IAP_RET_CMD_SUCCESS) { +		printf("IAP erase failed\n"); +		return ERR_PROTECTED; +	} + +	if (flag) +		enable_interrupts(); + +	return ERR_OK; +} + +int lpc2292_write_buff (flash_info_t * info, uchar * src, ulong addr, +			ulong cnt) +{ +	int first_copy_size; +	int last_copy_size; +	int first_block; +	int last_block; +	int nbr_mid_blocks; +	uchar memmap_value; +	ulong i; +	uchar* src_org; +	uchar* dst_org; +	int ret = ERR_OK; + +	src_org = src; +	dst_org = (uchar*)addr; + +	first_block = addr / 512; +	last_block = (addr + cnt) / 512; +	nbr_mid_blocks = last_block - first_block - 1; + +	first_copy_size = 512 - (addr % 512); +	last_copy_size = (addr + cnt) % 512; + +	debug("\ncopy first block: (1) %lX -> %lX 0x200 bytes, " +		"(2) %lX -> %lX 0x%X bytes, (3) %lX -> %lX 0x200 bytes\n", +	(ulong)(first_block * 512), +	(ulong)COPY_BUFFER_LOCATION, +	(ulong)src, +	(ulong)(COPY_BUFFER_LOCATION + 512 - first_copy_size), +	first_copy_size, +	(ulong)COPY_BUFFER_LOCATION, +	(ulong)(first_block * 512)); + +	/* copy first block */ +	memcpy((void*)COPY_BUFFER_LOCATION, +		(void*)(first_block * 512), 512); +	memcpy((void*)(COPY_BUFFER_LOCATION + 512 - first_copy_size), +		src, first_copy_size); +	lpc2292_copy_buffer_to_flash(info, first_block * 512); +	src += first_copy_size; +	addr += first_copy_size; + +	/* copy middle blocks */ +	for (i = 0; i < nbr_mid_blocks; i++) { +		debug("copy middle block: %lX -> %lX 512 bytes, " +		"%lX -> %lX 512 bytes\n", +		(ulong)src, +		(ulong)COPY_BUFFER_LOCATION, +		(ulong)COPY_BUFFER_LOCATION, +		(ulong)addr); + +		memcpy((void*)COPY_BUFFER_LOCATION, src, 512); +		lpc2292_copy_buffer_to_flash(info, addr); +		src += 512; +		addr += 512; +	} + + +	if (last_copy_size > 0) { +		debug("copy last block: (1) %lX -> %lX 0x200 bytes, " +		"(2) %lX -> %lX 0x%X bytes, (3) %lX -> %lX x200 bytes\n", +		(ulong)(last_block * 512), +		(ulong)COPY_BUFFER_LOCATION, +		(ulong)src, +		(ulong)(COPY_BUFFER_LOCATION), +		last_copy_size, +		(ulong)COPY_BUFFER_LOCATION, +		(ulong)addr); + +		/* copy last block */ +		memcpy((void*)COPY_BUFFER_LOCATION, +			(void*)(last_block * 512), 512); +		memcpy((void*)COPY_BUFFER_LOCATION, +			src, last_copy_size); +		lpc2292_copy_buffer_to_flash(info, addr); +	} + +	/* verify write */ +	memmap_value = GET8(MEMMAP); + +	disable_interrupts(); + +	PUT8(MEMMAP, 01);		/* we must make sure that initial 64 +							   bytes are taken from flash when we +							   do the compare */ + +	for (i = 0; i < cnt; i++) { +		if (*dst_org != *src_org){ +			printf("Write failed. Byte %lX differs\n", i); +			ret = ERR_PROG_ERROR; +			break; +		} +		dst_org++; +		src_org++; +	} + +	PUT8(MEMMAP, memmap_value); +	enable_interrupts(); + +	return ret; +} diff --git a/board/lpc2292sodimm/iap_entry.S b/cpu/arm720t/lpc2292/iap_entry.S index c31d5190b..c31d5190b 100644 --- a/board/lpc2292sodimm/iap_entry.S +++ b/cpu/arm720t/lpc2292/iap_entry.S diff --git a/board/lpc2292sodimm/mmc.c b/cpu/arm720t/lpc2292/mmc.c index 1c0922f24..fd7f149b6 100644 --- a/board/lpc2292sodimm/mmc.c +++ b/cpu/arm720t/lpc2292/mmc.c @@ -23,7 +23,7 @@  #include <part.h>  #include <fat.h>  #include "mmc_hw.h" -#include "spi.h" +#include <asm/arch/spi.h>  #ifdef CONFIG_MMC @@ -44,7 +44,7 @@ block_dev_desc_t * mmc_get_dev(int dev)  unsigned long mmc_block_read(int dev,  			     unsigned long start,  			     lbaint_t blkcnt, -			     unsigned long *buffer) +			     void *buffer)  {  	unsigned long rc = 0;  	unsigned char *p = (unsigned char *)buffer; @@ -101,6 +101,9 @@ int mmc_init(int verbose)  		printf("mmc_init\n");  	spi_init(); +	/* this meeds to be done twice */ +	mmc_hw_init(); +	udelay(1000);  	mmc_hw_init();  	mmc_hw_get_parameters(); diff --git a/board/lpc2292sodimm/mmc_hw.c b/cpu/arm720t/lpc2292/mmc_hw.c index 31f2a7988..b4dc4a6e2 100644 --- a/board/lpc2292sodimm/mmc_hw.c +++ b/cpu/arm720t/lpc2292/mmc_hw.c @@ -20,7 +20,7 @@  #include <config.h>  #include <common.h>  #include <asm/arch/hardware.h> -#include "spi.h" +#include <asm/arch/spi.h>  #define MMC_Enable() PUT32(IO1CLR, 1l << 22)  #define MMC_Disable() PUT32(IO1SET, 1l << 22) diff --git a/board/lpc2292sodimm/mmc_hw.h b/cpu/arm720t/lpc2292/mmc_hw.h index 3687dbf69..3687dbf69 100644 --- a/board/lpc2292sodimm/mmc_hw.h +++ b/cpu/arm720t/lpc2292/mmc_hw.h diff --git a/board/lpc2292sodimm/spi.c b/cpu/arm720t/lpc2292/spi.c index 4ba1468f3..d296bdac6 100644 --- a/board/lpc2292sodimm/spi.c +++ b/cpu/arm720t/lpc2292/spi.c @@ -21,7 +21,7 @@  #include <common.h>  #include <asm/errno.h>  #include <asm/arch/hardware.h> -#include "spi.h" +#include <asm/arch/spi.h>  unsigned long spi_flags;  unsigned char spi_idle = 0x00; diff --git a/cpu/ixp/npe/Makefile b/cpu/ixp/npe/Makefile index 4de34fd5b..7f020b5d5 100644 --- a/cpu/ixp/npe/Makefile +++ b/cpu/ixp/npe/Makefile @@ -87,7 +87,7 @@ START	:= $(addprefix $(obj),$(START))  all:	$(LIB) -$(LIB):	$(obj).depend $(OBJS) +$(LIB):	$(OBJS)  	$(AR) $(ARFLAGS) $@ $(OBJS)  ######################################################################### diff --git a/cpu/microblaze/Makefile b/cpu/microblaze/Makefile index db1afa553..9d542013c 100644 --- a/cpu/microblaze/Makefile +++ b/cpu/microblaze/Makefile @@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk  LIB	= $(obj)lib$(CPU).a  START	= start.o -SOBJS	= dcache.o icache.o irq.o disable_int.o enable_int.o +SOBJS	= irq.o  COBJS	= cpu.o interrupts.o cache.o exception.o timer.o  SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c) diff --git a/cpu/microblaze/cache.c b/cpu/microblaze/cache.c index fc388ebb5..4f36a84ec 100644..100755 --- a/cpu/microblaze/cache.c +++ b/cpu/microblaze/cache.c @@ -23,6 +23,7 @@   */  #include <common.h> +#include <asm/asm.h>  #if (CONFIG_COMMANDS & CFG_CMD_CACHE) @@ -45,4 +46,20 @@ int icache_status (void)  	__asm__ __volatile__ ("and %0,%0,%1"::"r" (i), "r" (mask):"memory");  	return i;  } + +void	icache_enable (void) { +	MSRSET(0x20); +} + +void	icache_disable(void) { +	MSRCLR(0x20); +} + +void	dcache_enable (void) { +	MSRSET(0x80); +} + +void	dcache_disable(void) { +	MSRCLR(0x80); +}  #endif diff --git a/cpu/microblaze/dcache.S b/cpu/microblaze/dcache.S deleted file mode 100644 index eaf96717e..000000000 --- a/cpu/microblaze/dcache.S +++ /dev/null @@ -1,68 +0,0 @@ -/* - * (C) Copyright 2007 Michal Simek - * - * Michal  SIMEK <monstr@monstr.eu> - * - * 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 - */ -	.text -	.globl	dcache_enable -	.ent	dcache_enable -	.align	2 -dcache_enable: -	/* Make space on stack for a temporary */ -	addi	r1, r1, -4 -	/* Save register r12 */ -	swi	r12, r1, 0 -	/* Read the MSR register */ -	mfs	r12, rmsr -	/* Set the instruction enable bit */ -	ori	r12, r12, 0x80 -	/* Save the MSR register */ -	mts	rmsr, r12 -	/* Load register r12 */ -	lwi	r12, r1, 0 -	/* Return */ -	rtsd	r15, 8 -	/* Update stack in the delay slot */ -	addi	r1, r1, 4 -	.end	dcache_enable - -	.text -	.globl	dcache_disable -	.ent	dcache_disable -	.align	2 -dcache_disable: -	/* Make space on stack for a temporary */ -	addi	r1, r1, -4 -	/* Save register r12 */ -	swi	r12, r1, 0 -	/* Read the MSR register */ -	mfs	r12, rmsr -	/* Clear the data cache enable bit */ -	andi	r12, r12, ~0x80 -	/* Save the MSR register */ -	mts	rmsr, r12 -	/* Load register r12 */ -	lwi	r12, r1, 0 -	/* Return */ -	rtsd	r15, 8 -	/* Update stack in the delay slot */ -	addi	r1, r1, 4 -	.end	dcache_disable diff --git a/cpu/microblaze/exception.c b/cpu/microblaze/exception.c index b135acbad..d76b05a52 100644 --- a/cpu/microblaze/exception.c +++ b/cpu/microblaze/exception.c @@ -23,15 +23,16 @@   */  #include <common.h> +#include <asm/asm.h>  void _hw_exception_handler (void)  {  	int address = 0;  	int state = 0;  	/* loading address of exception EAR */ -	__asm__ __volatile ("mfs %0,rear"::"r" (address):"memory"); +	MFS (address, rear);  	/* loading excetpion state register ESR */ -	__asm__ __volatile ("mfs %0,resr"::"r" (state):"memory"); +	MFS (state, resr);  	printf ("Hardware exception at 0x%x address\n", address);  	switch (state & 0x1f) {	/* mask on exception cause */  	case 0x1: @@ -49,6 +50,11 @@ void _hw_exception_handler (void)  	case 0x5:  		puts ("Divide by zero exception\n");  		break; +#ifdef MICROBLAZE_V5 +	case 0x1000: +		puts ("Exception in delay slot\n"); +		break; +#endif  	default:  		puts ("Undefined cause\n");  		break; diff --git a/cpu/microblaze/icache.S b/cpu/microblaze/icache.S deleted file mode 100644 index 25940d106..000000000 --- a/cpu/microblaze/icache.S +++ /dev/null @@ -1,69 +0,0 @@ -/* - * (C) Copyright 2007 Michal Simek - * - * Michal  SIMEK <monstr@monstr.eu> - * - * 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 - */ - -	.text -	.globl	icache_enable -	.ent	icache_enable -	.align	2 -icache_enable: -	/* Make space on stack for a temporary */ -	addi	r1, r1, -4 -	/* Save register r12 */ -	swi	r12, r1, 0 -	/* Read the MSR register */ -	mfs	r12, rmsr -	/* Set the instruction enable bit */ -	ori	r12, r12, 0x20 -	/* Save the MSR register */ -	mts	rmsr, r12 -	/* Load register r12 */ -	lwi	r12, r1, 0 -	/* Return */ -	rtsd	r15, 8 -	/* Update stack in the delay slot */ -	addi	r1, r1, 4 -	.end	icache_enable - -	.text -	.globl	icache_disable -	.ent	icache_disable -	.align	2 -icache_disable: -	/* Make space on stack for a temporary */ -	addi	r1, r1, -4 -	/* Save register r12 */ -	swi	r12, r1, 0 -	/* Read the MSR register */ -	mfs	r12, rmsr -	/* Clear the instruction enable bit */ -	andi	r12, r12, ~0x20 -	/* Save the MSR register */ -	mts	rmsr, r12 -	/* Load register r12 */ -	lwi	r12, r1, 0 -	/* Return */ -	rtsd	r15, 8 -	/* Update stack in the delay slot */ -	addi	r1, r1, 4 -	.end	icache_disable diff --git a/cpu/microblaze/interrupts.c b/cpu/microblaze/interrupts.c index 2db847cd0..b61153f8e 100644..100755 --- a/cpu/microblaze/interrupts.c +++ b/cpu/microblaze/interrupts.c @@ -27,6 +27,7 @@  #include <common.h>  #include <command.h>  #include <asm/microblaze_intc.h> +#include <asm/asm.h>  #undef DEBUG_INT @@ -35,12 +36,12 @@ extern void microblaze_enable_interrupts (void);  void enable_interrupts (void)  { -	microblaze_enable_interrupts (); +	MSRSET(0x2);  }  int disable_interrupts (void)  { -	microblaze_disable_interrupts (); +	MSRCLR(0x2);  	return 0;  } @@ -48,6 +49,10 @@ int disable_interrupts (void)  #ifdef CFG_TIMER_0  extern void timer_init (void);  #endif +#ifdef CFG_FSL_2 +extern void fsl_init2 (void); +#endif +  static struct irq_action vecs[CFG_INTC_0_NUM]; @@ -106,7 +111,6 @@ void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, void *arg)  		act->count = 0;  		enable_one_interrupt (irq);  	} else {		/* disable */ -  		act->handler = (interrupt_handler_t *) def_hdlr;  		act->arg = (void *)irq;  		disable_one_interrupt (irq); @@ -141,18 +145,22 @@ int interrupts_init (void)  #ifdef CFG_TIMER_0  	timer_init ();  #endif +#ifdef CFG_FSL_2 +	fsl_init2 (); +#endif  	enable_interrupts ();  	return 0;  }  void interrupt_handler (void)  { -	int irqs; -	irqs = (intc->isr & intc->ier);	/* find active interrupt */ - +	int irqs = (intc->isr & intc->ier);	/* find active interrupt */ +	int i = 1;  #ifdef DEBUG_INT +	int value;  	printf ("INTC isr %x, ier %x, iar %x, mer %x\n", intc->isr, intc->ier,  		intc->iar, intc->mer); +	R14(value);  	printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);  #endif  	struct irq_action *act = vecs; @@ -165,15 +173,19 @@ void interrupt_handler (void)  #endif  			act->handler (act->arg);  			act->count++; +			intc->iar = i; +			return;  		}  		irqs >>= 1;  		act++; +		i <<= 1;  	} -	intc->iar = 0xFFFFFFFF;	/* erase all events */ -#ifdef DEBUG + +#ifdef DEBUG_INT  	printf ("Dump INTC reg, isr %x, ier %x, iar %x, mer %x\n", intc->isr,  		intc->ier, intc->iar, intc->mer); -	printf ("Interrupt handler on %x line, r14\n", irqs); +	R14(value); +	printf ("Interrupt handler on %x line, r14 %x\n", irqs, value);  #endif  }  #endif diff --git a/cpu/microblaze/irq.S b/cpu/microblaze/irq.S index a4e3fbfad..e1fc19046 100644..100755 --- a/cpu/microblaze/irq.S +++ b/cpu/microblaze/irq.S @@ -23,6 +23,7 @@   */  #include <config.h> +#include <asm/asm.h>  	.text  	.global _interrupt_handler  _interrupt_handler: @@ -151,6 +152,11 @@ _interrupt_handler:  	addi	r1, r1, 4  	/* enable_interrupt */ +#ifdef XILINX_USE_MSR_INSTR +	msrset	r0, 2 +#else +	/* FIXME unstable in stressed mode - two irqs */ +	nop  	addi	r1, r1, -4  	swi	r12, r1, 0  	mfs	r12, rmsr @@ -159,6 +165,7 @@ _interrupt_handler:  	lwi	r12, r1, 0  	addi	r1, r1, 4  	nop +#endif  	bra	r14  	nop  	nop diff --git a/cpu/microblaze/start.S b/cpu/microblaze/start.S index ca3befc24..3c027ff9b 100644 --- a/cpu/microblaze/start.S +++ b/cpu/microblaze/start.S @@ -117,3 +117,36 @@ clear_bss:  3:	/* jumping to board_init */  	brai	board_init  1:	bri	1b + +/* + * Read 16bit little endian + */ +	.text +	.global	in16 +	.ent	in16 +	.align	2 +in16:	lhu	r3, r0, r5 +	bslli	r4, r3, 8 +	bsrli	r3, r3, 8 +	andi	r4, r4, 0xffff +	or	r3, r3, r4 +	rtsd	r15, 8 +	sext16	r3, r3 +	.end	in16 + +/* + * Write 16bit little endian + * first parameter(r5) - address, second(r6) - short value + */ +	.text +	.global	out16 +	.ent	out16 +	.align	2 +out16:	bslli	r3, r6, 8 +	bsrli	r6, r6, 8 +	andi	r3, r3, 0xffff +	or	r3, r3, r6 +	sh	r3, r0, r5 +	rtsd	r15, 8 +	or	r0, r0, r0 +	.end	out16 diff --git a/cpu/microblaze/timer.c b/cpu/microblaze/timer.c index be4fd57cc..ab1cb1274 100644 --- a/cpu/microblaze/timer.c +++ b/cpu/microblaze/timer.c @@ -24,6 +24,7 @@  #include <common.h>  #include <asm/microblaze_timer.h> +#include <asm/microblaze_intc.h>  volatile int timestamp = 0; @@ -44,9 +45,6 @@ void set_timer (ulong t)  #ifdef CFG_INTC_0  #ifdef CFG_TIMER_0 -extern void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, -				       void *arg); -  microblaze_timer_t *tmr = (microblaze_timer_t *) (CFG_TIMER_0_ADDR);  void timer_isr (void *arg) diff --git a/cpu/mpc5xxx/cpu.c b/cpu/mpc5xxx/cpu.c index 813aa7935..1eac2bbfb 100644 --- a/cpu/mpc5xxx/cpu.c +++ b/cpu/mpc5xxx/cpu.c @@ -53,12 +53,16 @@ int checkcpu (void)  #else  	svr = get_svr();  	pvr = get_pvr(); -	switch (SVR_VER (svr)) { -	case SVR_MPC5200: -		printf ("MPC5200"); + +	switch (pvr) { +	case PVR_5200: +		printf("MPC5200"); +		break; +	case PVR_5200B: +		printf("MPC5200B");  		break;  	default: -		printf ("MPC52??  (SVR %08x)", svr); +		printf("Unknown MPC5xxx");  		break;  	} @@ -127,5 +131,9 @@ ft_cpu_setup(void *blob, bd_t *bd)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@3000/mac-address", &len);  	if (p != NULL)  		memcpy(p, bd->bi_enetaddr, 6); + +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@3000/local-mac-address", &len); +	if (p != NULL) +		memcpy(p, bd->bi_enetaddr, 6);  }  #endif diff --git a/cpu/mpc5xxx/cpu_init.c b/cpu/mpc5xxx/cpu_init.c index 7e6582185..d7440308a 100644 --- a/cpu/mpc5xxx/cpu_init.c +++ b/cpu/mpc5xxx/cpu_init.c @@ -156,21 +156,21 @@ void cpu_init_f (void)  	*(vu_long *)(MPC5XXX_XLBARB + 0x40) |= (1 << 15);  	*(vu_long *)(MPC5XXX_XLBARB + 0x70) = CFG_SDRAM_BASE | 0x1d; -# if defined(CFG_IPBSPEED_133) +# if defined(CFG_IPBCLK_EQUALS_XLBCLK)  	/* Motorola reports IPB should better run at 133 MHz. */  	*(vu_long *)MPC5XXX_ADDECR |= 1;  	/* pci_clk_sel = 0x02, ipb_clk_sel = 0x00; */  	addecr = *(vu_long *)MPC5XXX_CDM_CFG;  	addecr &= ~0x103; -#  if defined(CFG_PCISPEED_66) +#  if defined(CFG_PCICLK_EQUALS_IPBCLK_DIV2)  	/* pci_clk_sel = 0x01 -> IPB_CLK/2 */  	addecr |= 0x01;  #  else  	/* pci_clk_sel = 0x02 -> XLB_CLK/4 = IPB_CLK/4 */  	addecr |= 0x02; -#  endif /* CFG_PCISPEED_66 */ +#  endif /* CFG_PCICLK_EQUALS_IPBCLK_DIV2 */  	*(vu_long *)MPC5XXX_CDM_CFG = addecr; -# endif	/* CFG_IPBSPEED_133 */ +# endif	/* CFG_IPBCLK_EQUALS_XLBCLK */  	/* Configure the XLB Arbiter */  	*(vu_long *)MPC5XXX_XLBARB_MPRIEN = 0xff;  	*(vu_long *)MPC5XXX_XLBARB_MPRIVAL = 0x11111111; diff --git a/cpu/mpc5xxx/fec.c b/cpu/mpc5xxx/fec.c index e59bd85e1..813636655 100644 --- a/cpu/mpc5xxx/fec.c +++ b/cpu/mpc5xxx/fec.c @@ -428,6 +428,13 @@ static int mpc5xxx_fec_init_phy(struct eth_device *dev, bd_t * bis)  	 */  	fec->eth->imask = 0x00000000; +/* + * In original Promess-provided code PHY initialization is disabled with the + * following comment: "Phy initialization is DISABLED for now.  There was a + * problem with running 100 Mbps on PRO board". Thus we temporarily disable + * PHY initialization for the Motion-PRO board, until a proper fix is found. + */ +  	if (fec->xcv_type != SEVENWIRE) {  		/*  		 * Set MII_SPEED = (1/(mii_speed * 2)) * System Clock diff --git a/cpu/mpc83xx/Makefile b/cpu/mpc83xx/Makefile index 4b9dcc818..bb96f774f 100644 --- a/cpu/mpc83xx/Makefile +++ b/cpu/mpc83xx/Makefile @@ -29,7 +29,7 @@ LIB	= $(obj)lib$(CPU).a  START	= start.o  COBJS	= traps.o cpu.o cpu_init.o speed.o interrupts.o \ -	  spd_sdram.o qe_io.o +	  spd_sdram.o qe_io.o pci.o  SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)  OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) diff --git a/cpu/mpc83xx/cpu.c b/cpu/mpc83xx/cpu.c index e934ba638..e078f27a2 100644 --- a/cpu/mpc83xx/cpu.c +++ b/cpu/mpc83xx/cpu.c @@ -52,13 +52,26 @@ int checkcpu(void)  	immr = (immap_t *)CFG_IMMR; -	if ((pvr & 0xFFFF0000) != PVR_83xx) { -		puts("Not MPC83xx Family!!!\n"); -		return -1; +	puts("CPU:   "); + +	switch (pvr & 0xffff0000) { +		case PVR_E300C1: +			printf("e300c1, "); +			break; + +		case PVR_E300C2: +			printf("e300c2, "); +			break; + +		case PVR_E300C3: +			printf("e300c3, "); +			break; + +		default: +			printf("Unknown core, ");  	}  	spridr = immr->sysconf.spridr; -	puts("CPU: ");  	switch(spridr) {  	case SPR_8349E_REV10:  	case SPR_8349E_REV11: @@ -124,6 +137,18 @@ int checkcpu(void)  	case SPR_8321_REV11:  		puts("MPC8321, ");  		break; +	case SPR_8311_REV10: +		puts("MPC8311, "); +		break; +	case SPR_8311E_REV10: +		puts("MPC8311E, "); +		break; +	case SPR_8313_REV10: +		puts("MPC8313, "); +		break; +	case SPR_8313E_REV10: +		puts("MPC8313E, "); +		break;  	default:  		puts("Rev: Unknown revision number.\nWarning: Unsupported cpu revision!\n");  		return 0; @@ -133,10 +158,12 @@ int checkcpu(void)  	/* Multiple revisons of 834x processors may have the same SPRIDR value.  	 * So use PVR to identify the revision number.  	 */ -	printf("Rev: %02x at %s MHz\n", PVR_MAJ(pvr)<<4 | PVR_MIN(pvr), strmhz(buf, clock)); +	printf("Rev: %02x at %s MHz", PVR_MAJ(pvr)<<4 | PVR_MIN(pvr), strmhz(buf, clock));  #else -	printf("Rev: %02x at %s MHz\n", spridr & 0x0000FFFF, strmhz(buf, clock)); +	printf("Rev: %02x at %s MHz", spridr & 0x0000FFFF, strmhz(buf, clock));  #endif +	printf(", CSB: %4d MHz\n", gd->csb_clk / 1000000); +  	return 0;  } diff --git a/cpu/mpc83xx/pci.c b/cpu/mpc83xx/pci.c new file mode 100644 index 000000000..785d6129d --- /dev/null +++ b/cpu/mpc83xx/pci.c @@ -0,0 +1,192 @@ +/* + * Copyright (C) Freescale Semiconductor, Inc. 2007 + * + * Author: Scott Wood <scottwood@freescale.com>, + * with some bits from older board-specific PCI initialization. + * + * 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 <pci.h> +#include <ft_build.h> +#include <asm/mpc8349_pci.h> + +#ifdef CONFIG_83XX_GENERIC_PCI +#define MAX_BUSES 2 + +DECLARE_GLOBAL_DATA_PTR; + +static struct pci_controller pci_hose[MAX_BUSES]; +static int pci_num_buses; + +static void pci_init_bus(int bus, struct pci_region *reg) +{ +	volatile immap_t *immr = (volatile immap_t *)CFG_IMMR; +	volatile pot83xx_t *pot = immr->ios.pot; +	volatile pcictrl83xx_t *pci_ctrl = &immr->pci_ctrl[bus]; +	struct pci_controller *hose = &pci_hose[bus]; +	u32 dev; +	u16 reg16; +	int i; + +	if (bus == 1) +		pot += 3; + +	/* Setup outbound translation windows */ +	for (i = 0; i < 3; i++, reg++, pot++) { +		if (reg->size == 0) +			break; + +		hose->regions[i] = *reg; +		hose->region_count++; + +		pot->potar = reg->bus_start >> 12; +		pot->pobar = reg->phys_start >> 12; +		pot->pocmr = ~(reg->size - 1) >> 12; + +		if (reg->flags & PCI_REGION_IO) +			pot->pocmr |= POCMR_IO; +#ifdef CONFIG_83XX_PCI_STREAMING +		else if (reg->flags & PCI_REGION_PREFETCH) +			pot->pocmr |= POCMR_SE; +#endif + +		if (bus == 1) +			pot->pocmr |= POCMR_DST; + +		pot->pocmr |= POCMR_EN; +	} + +	/* Point inbound translation at RAM */ +	pci_ctrl->pitar1 = 0; +	pci_ctrl->pibar1 = 0; +	pci_ctrl->piebar1 = 0; +	pci_ctrl->piwar1 = PIWAR_EN | PIWAR_PF | PIWAR_RTT_SNOOP | +	                   PIWAR_WTT_SNOOP | (__ilog2(gd->ram_size) - 1); + +	i = hose->region_count++; +	hose->regions[i].bus_start = 0; +	hose->regions[i].phys_start = 0; +	hose->regions[i].size = gd->ram_size; +	hose->regions[i].flags = PCI_REGION_MEM | PCI_REGION_MEMORY; + +	hose->first_busno = 0; +	hose->last_busno = 0xff; + +	pci_setup_indirect(hose, CFG_IMMR + 0x8300 + bus * 0x80, +	                         CFG_IMMR + 0x8304 + bus * 0x80); + +	pci_register_hose(hose); + +	/* +	 * Write to Command register +	 */ +	reg16 = 0xff; +	dev = PCI_BDF(hose->first_busno, 0, 0); +	pci_hose_read_config_word(hose, dev, PCI_COMMAND, ®16); +	reg16 |= PCI_COMMAND_SERR | PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY; +	pci_hose_write_config_word(hose, dev, PCI_COMMAND, reg16); + +	/* +	 * Clear non-reserved bits in status register. +	 */ +	pci_hose_write_config_word(hose, dev, PCI_STATUS, 0xffff); +	pci_hose_write_config_byte(hose, dev, PCI_LATENCY_TIMER, 0x80); +	pci_hose_write_config_byte(hose, dev, PCI_CACHE_LINE_SIZE, 0x08); + +#ifdef CONFIG_PCI_SCAN_SHOW +	printf("PCI:   Bus Dev VenId DevId Class Int\n"); +#endif +	/* +	 * Hose scan. +	 */ +	hose->last_busno = pci_hose_scan(hose); +} + +/* + * The caller must have already set OCCR, and the PCI_LAW BARs + * must have been set to cover all of the requested regions. + * + * If fewer than three regions are requested, then the region + * list is terminated with a region of size 0. + */ +void mpc83xx_pci_init(int num_buses, struct pci_region **reg, int warmboot) +{ +	volatile immap_t *immr = (volatile immap_t *)CFG_IMMR; +	int i; + +	if (num_buses > MAX_BUSES) { +		printf("%d PCI buses requsted, %d supported\n", +		       num_buses, MAX_BUSES); + +		num_buses = MAX_BUSES; +	} + +	pci_num_buses = num_buses; + +	/* +	 * Release PCI RST Output signal. +	 * Power on to RST high must be at least 100 ms as per PCI spec. +	 * On warm boots only 1 ms is required. +	 */ +	udelay(warmboot ? 1000 : 100000); + +	for (i = 0; i < num_buses; i++) +		immr->pci_ctrl[i].gcr = 1; + +	/* +	 * RST high to first config access must be at least 2^25 cycles +	 * as per PCI spec.  This could be cut in half if we know we're +	 * running at 66MHz.  This could be insufficiently long if we're +	 * running the PCI bus at significantly less than 33MHz. +	 */ +	udelay(1020000); + +	for (i = 0; i < num_buses; i++) +		pci_init_bus(i, reg[i]); +} + +#ifdef CONFIG_OF_FLAT_TREE +void ft_pci_setup(void *blob, bd_t *bd) +{ +	u32 *p; +	int len; + +	if (pci_num_buses < 1) +		return; + +	p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8500/bus-range", &len); +	if (p) { +		p[0] = pci_hose[0].first_busno; +		p[1] = pci_hose[0].last_busno; +	} + +	if (pci_num_buses < 2) +		return; + +	p = (u32 *)ft_get_prop(blob, "/" OF_SOC "/pci@8600/bus-range", &len); +	if (p) { +		p[0] = pci_hose[1].first_busno; +		p[1] = pci_hose[1].last_busno; +	} +} +#endif /* CONFIG_OF_FLAT_TREE */ + +#endif /* CONFIG_83XX_GENERIC_PCI */ diff --git a/cpu/mpc83xx/spd_sdram.c b/cpu/mpc83xx/spd_sdram.c index d9b8753ca..647813f68 100644 --- a/cpu/mpc83xx/spd_sdram.c +++ b/cpu/mpc83xx/spd_sdram.c @@ -58,8 +58,8 @@ picos_to_clk(int picos)  	int clks;  	ddr_bus_clk = gd->ddr_clk >> 1; -	clks = picos / ((1000000000 / ddr_bus_clk) * 1000); -	if (picos % ((1000000000 / ddr_bus_clk) * 1000) != 0) +	clks = picos / (1000000000 / (ddr_bus_clk / 1000)); +	if (picos % (1000000000 / (ddr_bus_clk / 1000)) != 0)  		clks++;  	return clks; @@ -624,7 +624,7 @@ long int spd_sdram()  			 | (1 << (16 + 10))             /* DQS Differential disable */  			 | (add_lat << (16 + 3))        /* Additive Latency in EMRS1 */  			 | (mode_odt_enable << 16)      /* ODT Enable in EMRS1 */ -			 | ((twr_clk >> 1) << 9)        /* Write Recovery Autopre */ +			 | ((twr_clk - 1) << 9)         /* Write Recovery Autopre */  			 | (caslat << 4)                /* caslat */  			 | (burstlen << 0)              /* Burst length */  			); @@ -693,11 +693,6 @@ long int spd_sdram()  #ifdef CFG_DDR_SDRAM_CLK_CNTL	/* Optional platform specific value */  	ddr->sdram_clk_cntl = CFG_DDR_SDRAM_CLK_CNTL; -#else -	/* SS_EN = 0, source synchronous disable -	 * CLK_ADJST = 0, MCK/MCK# is launched aligned with addr/cmd -	 */ -	ddr->sdram_clk_cntl = 0x00000000;  #endif  	debug("DDR:sdram_clk_cntl=0x%08x\n", ddr->sdram_clk_cntl); diff --git a/cpu/mpc83xx/speed.c b/cpu/mpc83xx/speed.c index c75993059..bf3061654 100644 --- a/cpu/mpc83xx/speed.c +++ b/cpu/mpc83xx/speed.c @@ -25,6 +25,7 @@  #include <common.h>  #include <mpc83xx.h> +#include <command.h>  #include <asm/processor.h>  DECLARE_GLOBAL_DATA_PTR; @@ -99,12 +100,14 @@ int get_clocks(void)  	u32 lcrr;  	u32 csb_clk; -#if defined(CONFIG_MPC834X) +#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)  	u32 tsec1_clk;  	u32 tsec2_clk; -	u32 usbmph_clk;  	u32 usbdr_clk;  #endif +#ifdef CONFIG_MPC834X +	u32 usbmph_clk; +#endif  	u32 core_clk;  	u32 i2c1_clk;  #if !defined(CONFIG_MPC832X) @@ -148,7 +151,7 @@ int get_clocks(void)  	sccr = im->clk.sccr; -#if defined(CONFIG_MPC834X) +#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)  	switch ((sccr & SCCR_TSEC1CM) >> SCCR_TSEC1CM_SHIFT) {  	case 0:  		tsec1_clk = 0; @@ -167,6 +170,26 @@ int get_clocks(void)  		return -4;  	} +	switch ((sccr & SCCR_USBDRCM) >> SCCR_USBDRCM_SHIFT) { +	case 0: +		usbdr_clk = 0; +		break; +	case 1: +		usbdr_clk = csb_clk; +		break; +	case 2: +		usbdr_clk = csb_clk / 2; +		break; +	case 3: +		usbdr_clk = csb_clk / 3; +		break; +	default: +		/* unkown SCCR_USBDRCM value */ +		return -8; +	} +#endif + +#if defined(CONFIG_MPC834X)  	switch ((sccr & SCCR_TSEC2CM) >> SCCR_TSEC2CM_SHIFT) {  	case 0:  		tsec2_clk = 0; @@ -205,24 +228,6 @@ int get_clocks(void)  		return -7;  	} -	switch ((sccr & SCCR_USBDRCM) >> SCCR_USBDRCM_SHIFT) { -	case 0: -		usbdr_clk = 0; -		break; -	case 1: -		usbdr_clk = csb_clk; -		break; -	case 2: -		usbdr_clk = csb_clk / 2; -		break; -	case 3: -		usbdr_clk = csb_clk / 3; -		break; -	default: -		/* unkown SCCR_USBDRCM value */ -		return -8; -	} -  	if (usbmph_clk != 0 && usbdr_clk != 0 && usbmph_clk != usbdr_clk) {  		/* if USB MPH clock is not disabled and  		 * USB DR clock is not disabled then @@ -230,8 +235,16 @@ int get_clocks(void)  		 */  		return -9;  	} +#elif defined(CONFIG_MPC831X) +	tsec2_clk = tsec1_clk; + +	if (!(sccr & SCCR_TSEC1ON)) +		tsec1_clk = 0; +	if (!(sccr & SCCR_TSEC2ON)) +		tsec2_clk = 0;  #endif -#if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X) + +#if !defined(CONFIG_MPC834X)  	i2c1_clk = csb_clk;  #endif  #if !defined(CONFIG_MPC832X) @@ -314,12 +327,14 @@ int get_clocks(void)  #endif  	gd->csb_clk = csb_clk; -#if defined(CONFIG_MPC834X) +#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)  	gd->tsec1_clk = tsec1_clk;  	gd->tsec2_clk = tsec2_clk; -	gd->usbmph_clk = usbmph_clk;  	gd->usbdr_clk = usbdr_clk;  #endif +#if defined(CONFIG_MPC834X) +	gd->usbmph_clk = usbmph_clk; +#endif  	gd->core_clk = core_clk;  	gd->i2c1_clk = i2c1_clk;  #if !defined(CONFIG_MPC832X) @@ -351,11 +366,11 @@ ulong get_bus_freq(ulong dummy)  	return gd->csb_clk;  } -int print_clock_conf(void) +int do_clocks (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])  {  	printf("Clock configuration:\n"); -	printf("  Coherent System Bus: %4d MHz\n", gd->csb_clk / 1000000);  	printf("  Core:                %4d MHz\n", gd->core_clk / 1000000); +	printf("  Coherent System Bus: %4d MHz\n", gd->csb_clk / 1000000);  #if defined(CONFIG_MPC8360) || defined(CONFIG_MPC832X)  	printf("  QE:                  %4d MHz\n", gd->qe_clk / 1000000);  	printf("  BRG:                 %4d MHz\n", gd->brg_clk / 1000000); @@ -371,11 +386,18 @@ int print_clock_conf(void)  #if !defined(CONFIG_MPC832X)  	printf("  I2C2:                %4d MHz\n", gd->i2c2_clk / 1000000);  #endif -#if defined(CONFIG_MPC834X) +#if defined(CONFIG_MPC834X) || defined(CONFIG_MPC831X)  	printf("  TSEC1:               %4d MHz\n", gd->tsec1_clk / 1000000);  	printf("  TSEC2:               %4d MHz\n", gd->tsec2_clk / 1000000); -	printf("  USB MPH:             %4d MHz\n", gd->usbmph_clk / 1000000);  	printf("  USB DR:              %4d MHz\n", gd->usbdr_clk / 1000000);  #endif +#if defined(CONFIG_MPC834X) +	printf("  USB MPH:             %4d MHz\n", gd->usbmph_clk / 1000000); +#endif  	return 0;  } + +U_BOOT_CMD(clocks, 1, 0, do_clocks, +	"clocks  - print clock configuration\n", +	"    clocks\n" +); diff --git a/cpu/mpc85xx/cpu.c b/cpu/mpc85xx/cpu.c index 0507c47e6..7735a52cc 100644 --- a/cpu/mpc85xx/cpu.c +++ b/cpu/mpc85xx/cpu.c @@ -1,5 +1,5 @@  /* - * Copyright 2004 Freescale Semiconductor. + * Copyright 2004,2007 Freescale Semiconductor, Inc.   * (C) Copyright 2002, 2003 Motorola Inc.   * Xianghua Xiao (X.Xiao@motorola.com)   * @@ -70,6 +70,15 @@ int checkcpu (void)  	case SVR_8548_E:  		puts("8548_E");  		break; +	case SVR_8544: +		puts("8544"); +		break; +	case SVR_8544_E: +		puts("8544_E"); +		break; +	case SVR_8568_E: +		puts("8568_E"); +		break;  	default:  		puts("Unknown");  		break; @@ -112,7 +121,7 @@ int checkcpu (void)  #endif  	clkdiv = lcrr & 0x0f;  	if (clkdiv == 2 || clkdiv == 4 || clkdiv == 8) { -#ifdef CONFIG_MPC8548 +#if defined(CONFIG_MPC8548) || defined(CONFIG_MPC8544)  		/*  		 * Yes, the entire PQ38 family use the same  		 * bit-representation for twice the clock divider values. @@ -140,16 +149,25 @@ int checkcpu (void)  int do_reset (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])  { +	uint pvr; +	uint ver; +	pvr = get_pvr(); +	ver = PVR_VER(pvr); +	if (ver & 1){ +	/* e500 v2 core has reset control register */ +		volatile unsigned int * rstcr; +		rstcr = (volatile unsigned int *)(CFG_IMMR + 0xE00B0); +		*rstcr = 0x2;		/* HRESET_REQ */ +	}else{  	/*  	 * Initiate hard reset in debug control register DBCR0  	 * Make sure MSR[DE] = 1  	 */ -	unsigned long val; - -	val = mfspr(DBCR0); -	val |= 0x70000000; -	mtspr(DBCR0,val); - +		unsigned long val; +		val = mfspr(DBCR0); +		val |= 0x70000000; +		mtspr(DBCR0,val); +	}  	return 1;  } @@ -183,9 +201,9 @@ reset_85xx_watchdog(void)  	 * Clear TSR(WIS) bit by writing 1  	 */  	unsigned long val; -	val = mfspr(tsr); -	val |= 0x40000000; -	mtspr(tsr, val); +	val = mfspr(SPRN_TSR); +	val |= TSR_WIS; +	mtspr(SPRN_TSR, val);  }  #endif	/* CONFIG_WATCHDOG */ @@ -196,6 +214,7 @@ void dma_init(void) {  	dma->satr0 = 0x02c40000;  	dma->datr0 = 0x02c40000; +	dma->sr0 = 0xfffffff; /* clear any errors */  	asm("sync; isync; msync");  	return;  } @@ -210,6 +229,10 @@ uint dma_check(void) {  		status = dma->sr0;  	} +	/* clear MR0[CS] channel start bit */ +	dma->mr0 &= 0x00000001; +	asm("sync;isync;msync"); +  	if (status != 0) {  		printf ("DMA Error: status = %x\n", status);  	} @@ -245,6 +268,10 @@ ft_cpu_setup(void *blob, bd_t *bd)  	if (p != NULL)  		*p = cpu_to_be32(clock); +	p = ft_get_prop(blob, "/qe@e0080000/" OF_CPU "/bus-frequency", &len); +	if (p != NULL) +		*p = cpu_to_be32(clock); +  	p = ft_get_prop(blob, "/" OF_SOC "/serial@4500/clock-frequency", &len);  	if (p != NULL)  		*p = cpu_to_be32(clock); @@ -255,21 +282,41 @@ ft_cpu_setup(void *blob, bd_t *bd)  #if defined(CONFIG_MPC85XX_TSEC1)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/mac-address", &len); +	if (p) +		memcpy(p, bd->bi_enetaddr, 6); + +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/local-mac-address", &len); +	if (p)  		memcpy(p, bd->bi_enetaddr, 6);  #endif  #if defined(CONFIG_HAS_ETH1)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/mac-address", &len); +	if (p) +		memcpy(p, bd->bi_enet1addr, 6); + +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/local-mac-address", &len); +	if (p)  		memcpy(p, bd->bi_enet1addr, 6);  #endif  #if defined(CONFIG_HAS_ETH2)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/mac-address", &len); +	if (p) +		memcpy(p, bd->bi_enet2addr, 6); + +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/local-mac-address", &len); +	if (p)  		memcpy(p, bd->bi_enet2addr, 6);  #endif  #if defined(CONFIG_HAS_ETH3)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/mac-address", &len); +	if (p) +		memcpy(p, bd->bi_enet3addr, 6); + +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/local-mac-address", &len); +	if (p)  		memcpy(p, bd->bi_enet3addr, 6);  #endif diff --git a/cpu/mpc85xx/cpu_init.c b/cpu/mpc85xx/cpu_init.c index 9f4d36c1a..9517146ed 100644 --- a/cpu/mpc85xx/cpu_init.c +++ b/cpu/mpc85xx/cpu_init.c @@ -143,12 +143,10 @@ void cpu_init_f (void)  	memctl->br1 = CFG_BR1_PRELIM;  #endif -#if !defined(CONFIG_MPC85xx)  #if defined(CFG_BR2_PRELIM) && defined(CFG_OR2_PRELIM)  	memctl->or2 = CFG_OR2_PRELIM;  	memctl->br2 = CFG_BR2_PRELIM;  #endif -#endif  #if defined(CFG_BR3_PRELIM) && defined(CFG_OR3_PRELIM)  	memctl->or3 = CFG_OR3_PRELIM; diff --git a/cpu/mpc85xx/pci.c b/cpu/mpc85xx/pci.c index 84f839ae1..3c1a323aa 100644 --- a/cpu/mpc85xx/pci.c +++ b/cpu/mpc85xx/pci.c @@ -90,14 +90,14 @@ pci_mpc85xx_init(struct pci_controller *board_hose)  	pcix->powbar1  = (CFG_PCI1_MEM_PHYS >> 12) & 0x000fffff;  	pcix->powbear1 = 0x00000000;  	pcix->powar1 = (POWAR_EN | POWAR_MEM_READ | -			POWAR_MEM_WRITE | POWAR_MEM_512M); +			POWAR_MEM_WRITE | (__ilog2(CFG_PCI1_MEM_SIZE) - 1));  	pcix->potar2  = (CFG_PCI1_IO_BASE >> 12) & 0x000fffff;  	pcix->potear2  = 0x00000000;  	pcix->powbar2  = (CFG_PCI1_IO_PHYS >> 12) & 0x000fffff;  	pcix->powbear2 = 0x00000000;  	pcix->powar2 = (POWAR_EN | POWAR_IO_READ | -			POWAR_IO_WRITE | POWAR_IO_1M); +			POWAR_IO_WRITE | (__ilog2(CFG_PCI1_IO_SIZE) - 1));  	pcix->pitar1 = 0x00000000;  	pcix->piwbar1 = 0x00000000; @@ -175,14 +175,14 @@ pci_mpc85xx_init(struct pci_controller *board_hose)  	pcix2->powbar1  = (CFG_PCI2_MEM_PHYS >> 12) & 0x000fffff;  	pcix2->powbear1 = 0x00000000;  	pcix2->powar1 = (POWAR_EN | POWAR_MEM_READ | -			POWAR_MEM_WRITE | POWAR_MEM_512M); +			POWAR_MEM_WRITE | (__ilog2(CFG_PCI2_MEM_SIZE) - 1));  	pcix2->potar2  = (CFG_PCI2_IO_BASE >> 12) & 0x000fffff;  	pcix2->potear2  = 0x00000000;  	pcix2->powbar2  = (CFG_PCI2_IO_PHYS >> 12) & 0x000fffff;  	pcix2->powbear2 = 0x00000000;  	pcix2->powar2 = (POWAR_EN | POWAR_IO_READ | -			POWAR_IO_WRITE | POWAR_IO_1M); +			POWAR_IO_WRITE | (__ilog2(CFG_PCI2_IO_SIZE) - 1));  	pcix2->pitar1 = 0x00000000;  	pcix2->piwbar1 = 0x00000000; diff --git a/cpu/mpc85xx/spd_sdram.c b/cpu/mpc85xx/spd_sdram.c index 6da5367a7..3777f49ad 100644 --- a/cpu/mpc85xx/spd_sdram.c +++ b/cpu/mpc85xx/spd_sdram.c @@ -263,13 +263,14 @@ spd_sdram(void)  	}  	/* -	 * Adjust DDR II IO voltage biasing.  It just makes it work. +	 * Adjust DDR II IO voltage biasing. +	 * Only 8548 rev 1 needs the fix  	 */ -	if (spd.mem_type == SPD_MEMTYPE_DDR2) { -		gur->ddrioovcr = (0 -				  | 0x80000000		/* Enable */ -				  | 0x10000000		/* VSEL to 1.8V */ -				  ); +	if ((SVR_VER(get_svr()) == SVR_8548_E) && +			(SVR_MJREV(get_svr()) == 1) && +			(spd.mem_type == SPD_MEMTYPE_DDR2)) { +		gur->ddrioovcr = (0x80000000	/* Enable */ +				  | 0x10000000);/* VSEL to 1.8V */  	}  	/* @@ -786,14 +787,17 @@ spd_sdram(void)  	 * Is this an ECC DDR chip?  	 * But don't mess with it if the DDR controller will init mem.  	 */ -#if defined(CONFIG_DDR_ECC) && !defined(CONFIG_ECC_INIT_VIA_DDRCONTROLLER) +#ifdef CONFIG_DDR_ECC  	if (spd.config == 0x02) { +#ifndef CONFIG_ECC_INIT_VIA_DDRCONTROLLER  		ddr->err_disable = 0x0000000d; +#endif  		ddr->err_sbe = 0x00ff0000;  	} +  	debug("DDR: err_disable = 0x%08x\n", ddr->err_disable);  	debug("DDR: err_sbe = 0x%08x\n", ddr->err_sbe); -#endif +#endif /* CONFIG_DDR_ECC */  	asm("sync;isync;msync");  	udelay(500); @@ -991,17 +995,24 @@ setup_laws_and_tlbs(unsigned int memsize)  		break;  	case 256:  	case 512: +		tlb_size = BOOKE_PAGESZ_256M; +		break;  	case 1024:  	case 2048: -		tlb_size = BOOKE_PAGESZ_256M; +		if (PVR_VER(get_pvr()) > PVR_VER(PVR_85xx)) +			tlb_size = BOOKE_PAGESZ_1G; +		else +			tlb_size = BOOKE_PAGESZ_256M;  		break;  	default:  		puts("DDR: only 16M,32M,64M,128M,256M,512M,1G and 2G are supported.\n");  		/*  		 * The memory was not able to be mapped. +		 * Default to a small size.  		 */ -		return 0; +		tlb_size = BOOKE_PAGESZ_64M; +		memsize=64;  		break;  	} diff --git a/cpu/mpc85xx/speed.c b/cpu/mpc85xx/speed.c index ca81ee735..12359a2d6 100644 --- a/cpu/mpc85xx/speed.c +++ b/cpu/mpc85xx/speed.c @@ -37,49 +37,21 @@ void get_sys_info (sys_info_t * sysInfo)  {  	volatile immap_t    *immap = (immap_t *)CFG_IMMR;  	volatile ccsr_gur_t *gur = &immap->im_gur; -	uint plat_ratio,e500_ratio; +	uint plat_ratio,e500_ratio,half_freqSystemBus;  	plat_ratio = (gur->porpllsr) & 0x0000003e;  	plat_ratio >>= 1; -	switch(plat_ratio) { -	case 0x02: -	case 0x03: -	case 0x04: -	case 0x05: -	case 0x06: -	case 0x08: -	case 0x09: -	case 0x0a: -	case 0x0c: -	case 0x10: -		sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ; -		break; -	default: -		sysInfo->freqSystemBus = 0; -		break; -	} - +	sysInfo->freqSystemBus = plat_ratio * CONFIG_SYS_CLK_FREQ;  	e500_ratio = (gur->porpllsr) & 0x003f0000;  	e500_ratio >>= 16; -	switch(e500_ratio) { -	case 0x04: -		sysInfo->freqProcessor = 2*sysInfo->freqSystemBus; -		break; -	case 0x05: -		sysInfo->freqProcessor = 5*sysInfo->freqSystemBus/2; -		break; -	case 0x06: -		sysInfo->freqProcessor = 3*sysInfo->freqSystemBus; -		break; -	case 0x07: -		sysInfo->freqProcessor = 7*sysInfo->freqSystemBus/2; -		break; -	default: -		sysInfo->freqProcessor = 0; -		break; -	} + +	/* Divide before multiply to avoid integer +	 * overflow for processor speeds above 2GHz */ +	half_freqSystemBus = sysInfo->freqSystemBus/2; +	sysInfo->freqProcessor = e500_ratio*half_freqSystemBus;  } +  int get_clocks (void)  {  	sys_info_t sys_info; diff --git a/cpu/mpc85xx/start.S b/cpu/mpc85xx/start.S index f96a4c3f8..20c7ebc72 100644 --- a/cpu/mpc85xx/start.S +++ b/cpu/mpc85xx/start.S @@ -251,13 +251,10 @@ _start_e500:  	 */  	bl	tlb1_entry  	mr	r5,r0 -	li	r1,0x0020	/* max 16 TLB1 plus some TLB0 entries */ -	mtctr	r1  	lwzu	r4,0(r5)	/* how many TLB1 entries we actually use */ +	mtctr	r4 -0:	cmpwi	r4,0 -	beq	1f -	lwzu	r0,4(r5) +0:	lwzu	r0,4(r5)  	lwzu	r1,4(r5)  	lwzu	r2,4(r5)  	lwzu	r3,4(r5) @@ -269,7 +266,6 @@ _start_e500:  	msync  	tlbwe  	isync -	addi	r4,r4,-1  	bdnz	0b  1: @@ -301,20 +297,16 @@ _start_e500:  	bl	law_entry  	mr	r6,r0 -	li	r1,0x0007	/* 8 LAWs, but reserve one for boot-over-rio-or-pci */ -	mtctr	r1  	lwzu	r5,0(r6)	/* how many windows we actually use */ +	mtctr	r5  	li	r2,0x0c28	/* the first pair is reserved for boot-over-rio-or-pci */  	li	r1,0x0c30 -0:	cmpwi	r5,0 -	beq	1f -	lwzu	r4,4(r6) +0:	lwzu	r4,4(r6)  	lwzu	r3,4(r6)  	stwx	r4,r7,r2  	stwx	r3,r7,r1 -	addi	r5,r5,-1  	addi	r2,r2,0x0020  	addi	r1,r1,0x0020  	bdnz	0b diff --git a/cpu/mpc86xx/cpu.c b/cpu/mpc86xx/cpu.c index 84f5bef50..a33acfec4 100644 --- a/cpu/mpc86xx/cpu.c +++ b/cpu/mpc86xx/cpu.c @@ -280,22 +280,38 @@ ft_cpu_setup(void *blob, bd_t *bd)  #if defined(CONFIG_MPC86XX_TSEC1)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/mac-address", &len); -	memcpy(p, bd->bi_enetaddr, 6); +	if (p != NULL) +		memcpy(p, bd->bi_enetaddr, 6); +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@24000/local-mac-address", &len); +	if (p) +		memcpy(p, bd->bi_enetaddr, 6);  #endif  #if defined(CONFIG_MPC86XX_TSEC2)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/mac-address", &len); -	memcpy(p, bd->bi_enet1addr, 6); +	if (p != NULL) +		memcpy(p, bd->bi_enet1addr, 6); +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@25000/local-mac-address", &len); +	if (p != NULL) +		memcpy(p, bd->bi_enet1addr, 6);  #endif  #if defined(CONFIG_MPC86XX_TSEC3)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/mac-address", &len); -	memcpy(p, bd->bi_enet2addr, 6); +	if (p != NULL) +		memcpy(p, bd->bi_enet2addr, 6); +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@26000/local-mac-address", &len); +	if (p != NULL) +		memcpy(p, bd->bi_enet2addr, 6);  #endif  #if defined(CONFIG_MPC86XX_TSEC4)  	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/mac-address", &len); -	memcpy(p, bd->bi_enet3addr, 6); +	if (p != NULL) +		memcpy(p, bd->bi_enet3addr, 6); +	p = ft_get_prop(blob, "/" OF_SOC "/ethernet@27000/local-mac-address", &len); +	if (p != NULL) +		memcpy(p, bd->bi_enet3addr, 6);  #endif  } diff --git a/cpu/mpc86xx/resetvec.S b/cpu/mpc86xx/resetvec.S deleted file mode 100644 index 9a552f662..000000000 --- a/cpu/mpc86xx/resetvec.S +++ /dev/null @@ -1,2 +0,0 @@ -	.section .resetvec,"ax" -	b _start diff --git a/cpu/mpc86xx/spd_sdram.c b/cpu/mpc86xx/spd_sdram.c index ac9ff81ce..f37ab430b 100644 --- a/cpu/mpc86xx/spd_sdram.c +++ b/cpu/mpc86xx/spd_sdram.c @@ -51,20 +51,32 @@ extern int dma_xfer(void *dest, uint count, void *src);  #define CFG_SUPER_BANK_INTERLEAVING	0  /* - * Convert picoseconds into clock cycles (rounding up if needed). + * Convert picoseconds into DRAM clock cycles (rounding up if needed).   */ -int -picos_to_clk(int picos) +static unsigned int +picos_to_clk(unsigned int picos)  { -	int clks; +	/* use unsigned long long to avoid rounding errors */ +	const unsigned long long ULL_2e12 = 2000000000000ULL; +	unsigned long long clks; +	unsigned long long clks_temp; -	clks = picos / (2000000000 / (get_bus_freq(0) / 1000)); -	if (picos % (2000000000 / (get_bus_freq(0) / 1000)) != 0) { +	if (! picos) +	    return 0; + +	clks = get_bus_freq(0) * (unsigned long long) picos; +	clks_temp = clks; +	clks = clks / ULL_2e12; +	if (clks_temp % ULL_2e12) {  		clks++;  	} -	return clks; +	if (clks > 0xFFFFFFFFULL) { +		clks = 0xFFFFFFFFULL; +	} + +	return (unsigned int) clks;  } diff --git a/cpu/mpc86xx/start.S b/cpu/mpc86xx/start.S index 7406fe224..67c56db1a 100644 --- a/cpu/mpc86xx/start.S +++ b/cpu/mpc86xx/start.S @@ -241,26 +241,40 @@ in_flash:  	bl	setup_ccsrbar  #endif -	/* Fix for SMP linux - Changing arbitration to round-robin */ -	lis	r3, CFG_CCSRBAR@h -	ori	r3, r3, 0x1000 -	xor	r4, r4, r4 -	li	r4, 0x1000 -	stw	r4, 0(r3) -	/* setup the law entries */ -	bl	law_entry +	/* -- MPC8641 Rev 1.0 MCM Errata fixups -- */ + +	/* skip fixups if not Rev 1.0 */ +	mfspr	r4, SVR +	rlwinm	r4,r4,0,24,31 +	cmpwi	r4,0x10 +	bne	1f + +	lis	r3,MCM_ABCR@ha +	lwz	r4,MCM_ABCR@l(r3)	/* ABCR -> r4 */ + +	/* set ABCR[A_STRM_CNT] = 0 */ +	rlwinm	r4,r4,0,0,29 + +	/* set ABCR[ARB_POLICY] to 0x1 (round-robin) */ +	addi	r0,r0,1 +	rlwimi	r4,r0,12,18,19 + +	stw	r4,MCM_ABCR@l(r3)	/* r4 -> ABCR */  	sync -	/* Don't use this feature due to bug in 8641D PD4 */ -	/* Disable ERD_DIS */ -	lis	r3, CFG_CCSRBAR@h -	ori	r3, r3, 0x1008 -	lwz	r4, 0(r3) +	/* Set DBCR[ERD_DIS] */ +	lis	r3,MCM_DBCR@ha +	lwz	r4,MCM_DBCR@l(r3)  	oris	r4, r4, 0x4000 -	stw	r4, 0(r3) +	stw	r4,MCM_DBCR@l(r3) +	sync +1: +	/* setup the law entries */ +	bl	law_entry  	sync +  #if (EMULATOR_RUN == 1)  	/* On the emulator we want to adjust these ASAP */  	/* otherwise things are sloooow */ diff --git a/cpu/ppc4xx/405gp_pci.c b/cpu/ppc4xx/405gp_pci.c index 713435563..8bf03e1b2 100644 --- a/cpu/ppc4xx/405gp_pci.c +++ b/cpu/ppc4xx/405gp_pci.c @@ -380,7 +380,7 @@ void pci_405gp_setup_vga(struct pci_controller *hose, pci_dev_t dev,  	pci_hose_write_config_dword(hose, dev, PCI_COMMAND, cmdstat);  } -#if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405)) && !(defined (CONFIG_SOLIDCARD3)) +#if !(defined(CONFIG_PIP405) || defined (CONFIG_MIP405)) && !(defined (CONFIG_SC3))  /*   *As is these functs get called out of flash Not a horrible diff --git a/cpu/ppc4xx/44x_spd_ddr.c b/cpu/ppc4xx/44x_spd_ddr.c index 10b4c1897..c500d3f24 100644 --- a/cpu/ppc4xx/44x_spd_ddr.c +++ b/cpu/ppc4xx/44x_spd_ddr.c @@ -20,7 +20,7 @@   * Jun Gu, Artesyn Technology, jung@artesyncp.com   * Support for AMCC 440 based on OpenBIOS draminit.c from IBM.   * - * (C) Copyright 2005 + * (C) Copyright 2005-2007   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * See file CREDITS for list of people who contributed to this @@ -42,6 +42,11 @@   * MA 02111-1307 USA   */ +/* define DEBUG for debugging output (obviously ;-)) */ +#if 0 +#define DEBUG +#endif +  #include <common.h>  #include <asm/processor.h>  #include <i2c.h> @@ -246,25 +251,6 @@  #define MY_TLB_WORD2_I_ENABLE	TLB_WORD2_I_ENABLE	/* disable caching on SDRAM */  #endif -const unsigned long test[NUMMEMTESTS][NUMMEMWORDS] = { -	{0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, -	 0xFFFFFFFF, 0xFFFFFFFF}, -	{0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, -	 0x00000000, 0x00000000}, -	{0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, -	 0x55555555, 0x55555555}, -	{0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, -	 0xAAAAAAAA, 0xAAAAAAAA}, -	{0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, -	 0x5A5A5A5A, 0x5A5A5A5A}, -	{0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, -	 0xA5A5A5A5, 0xA5A5A5A5}, -	{0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55, -	 0x55AA55AA, 0x55AA55AA}, -	{0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, -	 0xAA55AA55, 0xAA55AA55} -}; -  /* bank_parms is used to sort the bank sizes by descending order */  struct bank_param {  	unsigned long cr; @@ -278,46 +264,37 @@ extern unsigned char cfg_simulate_spd_eeprom[128];  #endif  void program_tlb(u32 start, u32 size, u32 tlb_word2_i_value); -unsigned char spd_read(uchar chip, uint addr); - -void get_spd_info(unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks); - -void check_mem_type -(unsigned long* dimm_populated, - unsigned char* iic0_dimm_addr, - unsigned long	num_dimm_banks); - -void check_volt_type -(unsigned long* dimm_populated, - unsigned char* iic0_dimm_addr, - unsigned long	num_dimm_banks); - -void program_cfg0(unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks); - -void program_cfg1(unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks); +static unsigned char spd_read(uchar chip, uint addr); +static void get_spd_info(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long num_dimm_banks); +static void check_mem_type(unsigned long *dimm_populated, +			   unsigned char *iic0_dimm_addr, +			   unsigned long num_dimm_banks); +static void check_volt_type(unsigned long *dimm_populated, +			    unsigned char *iic0_dimm_addr, +			    unsigned long num_dimm_banks); +static void program_cfg0(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long  num_dimm_banks); +static void program_cfg1(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long num_dimm_banks); +static void program_rtr(unsigned long *dimm_populated, +			unsigned char *iic0_dimm_addr, +			unsigned long num_dimm_banks); +static void program_tr0(unsigned long *dimm_populated, +			unsigned char *iic0_dimm_addr, +			unsigned long num_dimm_banks); +static void program_tr1(void); -void program_rtr (unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks); - -void program_tr0 (unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks); - -void program_tr1 (void); - -void program_ecc (unsigned long	 num_bytes); +#ifdef CONFIG_DDR_ECC +static void program_ecc(unsigned long num_bytes); +#endif -unsigned -long  program_bxcr(unsigned long* dimm_populated, -		   unsigned char* iic0_dimm_addr, -		   unsigned long  num_dimm_banks); +static unsigned long program_bxcr(unsigned long *dimm_populated, +				  unsigned char *iic0_dimm_addr, +				  unsigned long num_dimm_banks);  /*   * This function is reading data from the DIMM module EEPROM over the SPD bus @@ -328,7 +305,6 @@ long  program_bxcr(unsigned long* dimm_populated,   * BUG: Don't handle ECC memory   * BUG: A few values in the TR register is currently hardcoded   */ -  long int spd_sdram(void) {  	unsigned char iic0_dimm_addr[] = SPD_EEPROM_ADDRESS;  	unsigned long dimm_populated[sizeof(iic0_dimm_addr)]; @@ -421,9 +397,8 @@ long int spd_sdram(void) {  	 */  	while (1) {  		mfsdram(mem_mcsts, mcsts); -		if ((mcsts & SDRAM_MCSTS_MRSC) != 0) { +		if ((mcsts & SDRAM_MCSTS_MRSC) != 0)  			break; -		}  	}  	/* @@ -431,14 +406,17 @@ long int spd_sdram(void) {  	 */  	program_tr1(); +#ifdef CONFIG_DDR_ECC  	/* -	 * if ECC is enabled, initialize parity bits +	 * If ecc is enabled, initialize the parity bits.  	 */ +	program_ecc(total_size); +#endif  	return total_size;  } -unsigned char spd_read(uchar chip, uint addr) +static unsigned char spd_read(uchar chip, uint addr)  {  	unsigned char data[2]; @@ -460,9 +438,9 @@ unsigned char spd_read(uchar chip, uint addr)  	return 0;  } -void get_spd_info(unsigned long*   dimm_populated, -		  unsigned char*   iic0_dimm_addr, -		  unsigned long	   num_dimm_banks) +static void get_spd_info(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned long dimm_found; @@ -480,14 +458,10 @@ void get_spd_info(unsigned long*   dimm_populated,  		if ((num_of_bytes != 0) && (total_size != 0)) {  			dimm_populated[dimm_num] = TRUE;  			dimm_found = TRUE; -#if 0 -			printf("DIMM slot %lu: populated\n", dimm_num); -#endif +			debug("DIMM slot %lu: populated\n", dimm_num);  		} else {  			dimm_populated[dimm_num] = FALSE; -#if 0 -			printf("DIMM slot %lu: Not populated\n", dimm_num); -#endif +			debug("DIMM slot %lu: Not populated\n", dimm_num);  		}  	} @@ -497,9 +471,9 @@ void get_spd_info(unsigned long*   dimm_populated,  	}  } -void check_mem_type(unsigned long*   dimm_populated, -		    unsigned char*   iic0_dimm_addr, -		    unsigned long    num_dimm_banks) +static void check_mem_type(unsigned long *dimm_populated, +			   unsigned char *iic0_dimm_addr, +			   unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned char dimm_type; @@ -509,9 +483,7 @@ void check_mem_type(unsigned long*   dimm_populated,  			dimm_type = spd_read(iic0_dimm_addr[dimm_num], 2);  			switch (dimm_type) {  			case 7: -#if 0 -				printf("DIMM slot %lu: DDR SDRAM detected\n", dimm_num); -#endif +				debug("DIMM slot %lu: DDR SDRAM detected\n", dimm_num);  				break;  			default:  				printf("ERROR: Unsupported DIMM detected in slot %lu.\n", @@ -525,10 +497,9 @@ void check_mem_type(unsigned long*   dimm_populated,  	}  } - -void check_volt_type(unsigned long*   dimm_populated, -		     unsigned char*   iic0_dimm_addr, -		     unsigned long    num_dimm_banks) +static void check_volt_type(unsigned long *dimm_populated, +			    unsigned char *iic0_dimm_addr, +			    unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned long voltage_type; @@ -541,18 +512,16 @@ void check_volt_type(unsigned long*   dimm_populated,  				       dimm_num);  				hang();  			} else { -#if 0 -				printf("DIMM %lu voltage level supported.\n", dimm_num); -#endif +				debug("DIMM %lu voltage level supported.\n", dimm_num);  			}  			break;  		}  	}  } -void program_cfg0(unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks) +static void program_cfg0(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned long cfg0; @@ -640,9 +609,9 @@ void program_cfg0(unsigned long* dimm_populated,  	mtsdram(mem_cfg0, cfg0);  } -void program_cfg1(unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks) +static void program_cfg1(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long num_dimm_banks)  {  	unsigned long cfg1;  	mfsdram(mem_cfg1, cfg1); @@ -658,9 +627,9 @@ void program_cfg1(unsigned long* dimm_populated,  	mtsdram(mem_cfg1, cfg1);  } -void program_rtr (unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks) +static void program_rtr(unsigned long *dimm_populated, +			unsigned char *iic0_dimm_addr, +			unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned long bus_period_x_10; @@ -676,7 +645,6 @@ void program_rtr (unsigned long* dimm_populated,  	get_sys_info(&sys_info);  	bus_period_x_10 = ONE_BILLION / (sys_info.freqPLB / 10); -  	for (dimm_num = 0;  dimm_num < num_dimm_banks; dimm_num++) {  		if (dimm_populated[dimm_num] == TRUE) {  			refresh_rate_type = 0x7F & spd_read(iic0_dimm_addr[dimm_num], 12); @@ -719,9 +687,9 @@ void program_rtr (unsigned long* dimm_populated,  	mtsdram(mem_rtr, sdram_rtr);  } -void program_tr0 (unsigned long* dimm_populated, -		  unsigned char* iic0_dimm_addr, -		  unsigned long	 num_dimm_banks) +static void program_tr0(unsigned long *dimm_populated, +			 unsigned char *iic0_dimm_addr, +			 unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned long tr0; @@ -1001,13 +969,73 @@ void program_tr0 (unsigned long* dimm_populated,  		break;  	} -#if 0 -	printf("tr0: %x\n", tr0); -#endif +	debug("tr0: %x\n", tr0);  	mtsdram(mem_tr0, tr0);  } -void program_tr1 (void) +static int short_mem_test(void) +{ +	unsigned long i, j; +	unsigned long bxcr_num; +	unsigned long *membase; +	const unsigned long test[NUMMEMTESTS][NUMMEMWORDS] = { +		{0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, +		 0x00000000, 0x00000000, 0xFFFFFFFF, 0xFFFFFFFF}, +		{0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000, +		 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0x00000000}, +		{0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555, +		 0xAAAAAAAA, 0xAAAAAAAA, 0x55555555, 0x55555555}, +		{0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA, +		 0x55555555, 0x55555555, 0xAAAAAAAA, 0xAAAAAAAA}, +		{0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A, +		 0xA5A5A5A5, 0xA5A5A5A5, 0x5A5A5A5A, 0x5A5A5A5A}, +		{0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5, +		 0x5A5A5A5A, 0x5A5A5A5A, 0xA5A5A5A5, 0xA5A5A5A5}, +		{0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA, +		 0xAA55AA55, 0xAA55AA55, 0x55AA55AA, 0x55AA55AA}, +		{0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55, +		 0x55AA55AA, 0x55AA55AA, 0xAA55AA55, 0xAA55AA55}}; + +	for (bxcr_num = 0; bxcr_num < MAXBXCR; bxcr_num++) { +		mtdcr(memcfga, mem_b0cr + (bxcr_num << 2)); +		if ((mfdcr(memcfgd) & SDRAM_BXCR_SDBE) == SDRAM_BXCR_SDBE) { +			/* Bank is enabled */ +			membase = (unsigned long*) +				(mfdcr(memcfgd) & SDRAM_BXCR_SDBA_MASK); + +			/* +			 * Run the short memory test +			 */ +			for (i = 0; i < NUMMEMTESTS; i++) { +				for (j = 0; j < NUMMEMWORDS; j++) { +					membase[j] = test[i][j]; +					ppcDcbf((unsigned long)&(membase[j])); +				} + +				for (j = 0; j < NUMMEMWORDS; j++) { +					if (membase[j] != test[i][j]) { +						ppcDcbf((unsigned long)&(membase[j])); +						return 0; +					} +					ppcDcbf((unsigned long)&(membase[j])); +				} + +				if (j < NUMMEMWORDS) +					return 0; +			} + +			/* +			 * see if the rdclt value passed +			 */ +			if (i < NUMMEMTESTS) +				return 0; +		} +	} + +	return 1; +} + +static void program_tr1(void)  {  	unsigned long tr0;  	unsigned long tr1; @@ -1015,8 +1043,7 @@ void program_tr1 (void)  	unsigned long ecc_temp;  	unsigned long dlycal;  	unsigned long dly_val; -	unsigned long i, j, k; -	unsigned long bxcr_num; +	unsigned long k;  	unsigned long max_pass_length;  	unsigned long current_pass_length;  	unsigned long current_fail_length; @@ -1029,7 +1056,6 @@ void program_tr1 (void)  	unsigned char window_found;  	unsigned char fail_found;  	unsigned char pass_found; -	unsigned long * membase;  	PPC440_SYS_INFO sys_info;  	/* @@ -1079,55 +1105,16 @@ void program_tr1 (void)  	window_found = FALSE;  	fail_found = FALSE;  	pass_found = FALSE; -#ifdef DEBUG -	printf("Starting memory test "); -#endif +	debug("Starting memory test "); +  	for (k = 0; k < NUMHALFCYCLES; k++) { -		for (rdclt = 0; rdclt < dly_val; rdclt++)  { +		for (rdclt = 0; rdclt < dly_val; rdclt++) {  			/*  			 * Set the timing reg for the test.  			 */  			mtsdram(mem_tr1, (tr1 | SDRAM_TR1_RDCT_ENCODE(rdclt))); -			for (bxcr_num = 0; bxcr_num < MAXBXCR; bxcr_num++) { -				mtdcr(memcfga, mem_b0cr + (bxcr_num<<2)); -				if ((mfdcr(memcfgd) & SDRAM_BXCR_SDBE) == SDRAM_BXCR_SDBE) { -					/* Bank is enabled */ -					membase = (unsigned long*) -						(mfdcr(memcfgd) & SDRAM_BXCR_SDBA_MASK); - -					/* -					 * Run the short memory test -					 */ -					for (i = 0; i < NUMMEMTESTS; i++) { -						for (j = 0; j < NUMMEMWORDS; j++) { -							membase[j] = test[i][j]; -							ppcDcbf((unsigned long)&(membase[j])); -						} - -						for (j = 0; j < NUMMEMWORDS; j++) { -							if (membase[j] != test[i][j]) { -								ppcDcbf((unsigned long)&(membase[j])); -								break; -							} -							ppcDcbf((unsigned long)&(membase[j])); -						} - -						if (j < NUMMEMWORDS) { -							break; -						} -					} - -					/* -					 * see if the rdclt value passed -					 */ -					if (i < NUMMEMTESTS) { -						break; -					} -				} -			} - -			if (bxcr_num == MAXBXCR) { +			if (short_mem_test()) {  				if (fail_found == TRUE) {  					pass_found = TRUE;  					if (current_pass_length == 0) { @@ -1157,9 +1144,8 @@ void program_tr1 (void)  				}  			}  		} -#ifdef DEBUG -		printf("."); -#endif +		debug("."); +  		if (window_found == TRUE) {  			break;  		} @@ -1167,9 +1153,7 @@ void program_tr1 (void)  		tr1 = tr1 ^ SDRAM_TR1_RDCD_MASK;  		rdclt_offset += dly_val;  	} -#ifdef DEBUG -	printf("\n"); -#endif +	debug("\n");  	/*  	 * make sure we find the window @@ -1218,18 +1202,17 @@ void program_tr1 (void)  	}  	tr1 |= SDRAM_TR1_RDCT_ENCODE(rdclt_average); -#if 0 -	printf("tr1: %x\n", tr1); -#endif +	debug("tr1: %x\n", tr1); +  	/*  	 * program SDRAM Timing Register 1 TR1  	 */  	mtsdram(mem_tr1, tr1);  } -unsigned long program_bxcr(unsigned long* dimm_populated, -			   unsigned char* iic0_dimm_addr, -			   unsigned long  num_dimm_banks) +static unsigned long program_bxcr(unsigned long *dimm_populated, +				  unsigned char *iic0_dimm_addr, +				  unsigned long num_dimm_banks)  {  	unsigned long dimm_num;  	unsigned long bank_base_addr; @@ -1262,8 +1245,8 @@ unsigned long program_bxcr(unsigned long* dimm_populated,  #ifdef CONFIG_BAMBOO  	/*  	 * This next section is hardware dependent and must be programmed -	 * to match the hardware.  For bammboo, the following holds... -	 * 1. SDRAM0_B0CR: Bank 0 of dimm 0 ctrl_bank_num : 0 +	 * to match the hardware.  For bamboo, the following holds... +	 * 1. SDRAM0_B0CR: Bank 0 of dimm 0 ctrl_bank_num : 0 (soldered onboard)  	 * 2. SDRAM0_B1CR: Bank 0 of dimm 1 ctrl_bank_num : 1  	 * 3. SDRAM0_B2CR: Bank 1 of dimm 1 ctrl_bank_num : 1  	 * 4. SDRAM0_B3CR: Bank 0 of dimm 2 ctrl_bank_num : 3 @@ -1273,10 +1256,12 @@ unsigned long program_bxcr(unsigned long* dimm_populated,  	ctrl_bank_num[1] = 1;  	ctrl_bank_num[2] = 3;  #else +	/* +	 * Ocotea, Ebony and the other IBM/AMCC eval boards have +	 * 2 DIMM slots with each max 2 banks +	 */  	ctrl_bank_num[0] = 0; -	ctrl_bank_num[1] = 1; -	ctrl_bank_num[2] = 2; -	ctrl_bank_num[3] = 3; +	ctrl_bank_num[1] = 2;  #endif  	/* @@ -1290,6 +1275,8 @@ unsigned long program_bxcr(unsigned long* dimm_populated,  			num_col_addr = spd_read(iic0_dimm_addr[dimm_num], 4);  			num_banks    = spd_read(iic0_dimm_addr[dimm_num], 5);  			bank_size_id = spd_read(iic0_dimm_addr[dimm_num], 31); +			debug("DIMM%d: row=%d col=%d banks=%d\n", dimm_num, +			      num_row_addr, num_col_addr, num_banks);  			/*  			 * Set the SDRAM0_BxCR regs @@ -1354,9 +1341,12 @@ unsigned long program_bxcr(unsigned long* dimm_populated,  			cr |= SDRAM_BXCR_SDBE;   			for (i = 0; i < num_banks; i++) { -				bank_parms[ctrl_bank_num[dimm_num]+i+dimm_num].bank_size_bytes = -					(4 * 1024 * 1024) * bank_size_id; -				bank_parms[ctrl_bank_num[dimm_num]+i+dimm_num].cr = cr; +				bank_parms[ctrl_bank_num[dimm_num]+i].bank_size_bytes = +					(4 << 20) * bank_size_id; +				bank_parms[ctrl_bank_num[dimm_num]+i].cr = cr; +				debug("DIMM%d-bank %d (SDRAM0_B%dCR): bank_size_bytes=%d\n", +				      dimm_num, i, ctrl_bank_num[dimm_num]+i, +				      bank_parms[ctrl_bank_num[dimm_num]+i].bank_size_bytes);   			}  		}  	} @@ -1400,13 +1390,15 @@ unsigned long program_bxcr(unsigned long* dimm_populated,  				bank_parms[sorted_bank_num[bx_cr_num]].cr;  			mtdcr(memcfgd, temp);  			bank_base_addr += bank_parms[sorted_bank_num[bx_cr_num]].bank_size_bytes; +			debug("SDRAM0_B%dCR=0x%08lx\n", sorted_bank_num[bx_cr_num], temp);  		}  	}  	return(bank_base_addr);  } -void program_ecc (unsigned long	 num_bytes) +#ifdef CONFIG_DDR_ECC +static void program_ecc(unsigned long num_bytes)  {  	unsigned long bank_base_addr;  	unsigned long current_address; @@ -1425,14 +1417,12 @@ void program_ecc (unsigned long	 num_bytes)  	bank_base_addr = CFG_SDRAM_BASE;  	if ((cfg0 & SDRAM_CFG0_MCHK_MASK) != SDRAM_CFG0_MCHK_NON) { -		mtsdram(mem_cfg0, (cfg0 & ~SDRAM_CFG0_MCHK_MASK) | -			SDRAM_CFG0_MCHK_GEN); +		mtsdram(mem_cfg0, (cfg0 & ~SDRAM_CFG0_MCHK_MASK) | SDRAM_CFG0_MCHK_GEN); -		if ((cfg0 & SDRAM_CFG0_DMWD_MASK) == SDRAM_CFG0_DMWD_32) { +		if ((cfg0 & SDRAM_CFG0_DMWD_MASK) == SDRAM_CFG0_DMWD_32)  			address_increment = 4; -		} else { +		else  			address_increment = 8; -		}  		current_address = (unsigned long)(bank_base_addr);  		end_address = (unsigned long)(bank_base_addr) + num_bytes; @@ -1446,4 +1436,5 @@ void program_ecc (unsigned long	 num_bytes)  			SDRAM_CFG0_MCHK_CHK);  	}  } +#endif /* CONFIG_DDR_ECC */  #endif /* CONFIG_SPD_EEPROM */ diff --git a/cpu/ppc4xx/44x_spd_ddr2.c b/cpu/ppc4xx/44x_spd_ddr2.c index 2ecd3e4b6..48b9ee2f7 100644 --- a/cpu/ppc4xx/44x_spd_ddr2.c +++ b/cpu/ppc4xx/44x_spd_ddr2.c @@ -465,7 +465,11 @@ long int initdram(int board_type)  	 * Set the SDRAM Clock Timing Register  	 *-----------------------------------------------------------------*/  	mfsdram(SDRAM_CLKTR, val); +#ifdef CFG_44x_DDR2_CKTR_180 +	mtsdram(SDRAM_CLKTR, (val & ~SDRAM_CLKTR_CLKP_MASK) | SDRAM_CLKTR_CLKP_180_DEG_ADV); +#else  	mtsdram(SDRAM_CLKTR, (val & ~SDRAM_CLKTR_CLKP_MASK) | SDRAM_CLKTR_CLKP_0_DEG); +#endif  	/*------------------------------------------------------------------  	 * Program the BxCF registers. @@ -1117,7 +1121,8 @@ static void program_codt(unsigned long *dimm_populated,  				modt3 = 0x00000000;  			}  			if (total_rank == 4) { -				codt |= CALC_ODT_R(0) | CALC_ODT_R(1) | CALC_ODT_R(2) | CALC_ODT_R(3); +				codt |= CALC_ODT_R(0) | CALC_ODT_R(1) | +					CALC_ODT_R(2) | CALC_ODT_R(3);  				modt0 = CALC_ODT_RW(2);  				modt1 = 0x00000000;  				modt2 = CALC_ODT_RW(0); diff --git a/cpu/ppc4xx/4xx_enet.c b/cpu/ppc4xx/4xx_enet.c index cf56581d8..1200d021a 100644 --- a/cpu/ppc4xx/4xx_enet.c +++ b/cpu/ppc4xx/4xx_enet.c @@ -339,29 +339,41 @@ int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)  int ppc_4xx_eth_setup_bridge(int devnum, bd_t * bis)  {  	unsigned long zmiifer=0x0; +	unsigned long pfc1; -	/* -	 * Right now only 2*RGMII is supported. Please extend when needed. -	 * sr - 2006-08-29 -	 */ -	switch (1) { -	case 0: +	mfsdr(sdr_pfc1, pfc1); +	pfc1 &= SDR0_PFC1_SELECT_MASK; + +	switch (pfc1) { +	case SDR0_PFC1_SELECT_CONFIG_2:  		/* 1 x GMII port */  		out32 (ZMII_FER, 0x00);  		out32 (RGMII_FER, 0x00000037);  		bis->bi_phymode[0] = BI_PHYMODE_GMII;  		bis->bi_phymode[1] = BI_PHYMODE_NONE;  		break; -	case 1: +	case SDR0_PFC1_SELECT_CONFIG_4:  		/* 2 x RGMII ports */  		out32 (ZMII_FER, 0x00);  		out32 (RGMII_FER, 0x00000055);  		bis->bi_phymode[0] = BI_PHYMODE_RGMII;  		bis->bi_phymode[1] = BI_PHYMODE_RGMII;  		break; -	case 2: +	case SDR0_PFC1_SELECT_CONFIG_6:  		/* 2 x SMII ports */ - +		out32 (ZMII_FER, +		       ((ZMII_FER_SMII) << ZMII_FER_V(0)) | +		       ((ZMII_FER_SMII) << ZMII_FER_V(1))); +		out32 (RGMII_FER, 0x00000000); +		bis->bi_phymode[0] = BI_PHYMODE_SMII; +		bis->bi_phymode[1] = BI_PHYMODE_SMII; +		break; +	case SDR0_PFC1_SELECT_CONFIG_1_2: +		/* only 1 x MII supported */ +		out32 (ZMII_FER, (ZMII_FER_MII) << ZMII_FER_V(0)); +		out32 (RGMII_FER, 0x00000000); +		bis->bi_phymode[0] = BI_PHYMODE_MII; +		bis->bi_phymode[1] = BI_PHYMODE_NONE;  		break;  	default:  		break; diff --git a/cpu/ppc4xx/cpu.c b/cpu/ppc4xx/cpu.c index 8e6bc84db..c07bc0c32 100644 --- a/cpu/ppc4xx/cpu.c +++ b/cpu/ppc4xx/cpu.c @@ -139,6 +139,7 @@ static char *bootstrap_str[] = {  	"Reserved",  	"I2C (Addr 0x50)",  }; +static char bootstrap_char[] = { 'A', 'B', 'C', 'B', 'D', 'E', 'x', 'F' };  #endif  #if defined(CONFIG_440SP) || defined(CONFIG_440SPE) @@ -149,6 +150,7 @@ static char *bootstrap_str[] = {  	"I2C (Addr 0x54)",  	"I2C (Addr 0x50)",  }; +static char bootstrap_char[] = { 'A', 'B', 'C', 'D'};  #endif  #if defined(CONFIG_440EP) || defined(CONFIG_440GR) @@ -163,6 +165,7 @@ static char *bootstrap_str[] = {  	"PCI",  	"I2C (Addr 0x52)",  }; +static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'G', 'F', 'H' };  #endif  #if defined(CONFIG_440EPX) || defined(CONFIG_440GRX) @@ -177,6 +180,7 @@ static char *bootstrap_str[] = {  	"PCI",  	"I2C (Addr 0x52)",  }; +static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'G', 'F', 'H' };  #endif  #if defined(CONFIG_405EZ) @@ -199,6 +203,8 @@ static char *bootstrap_str[] = {  	"SPI (slow)",  	"I2C (Addr 0x50)",  }; +static char bootstrap_char[] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', \ +				 'I', 'x', 'K', 'L', 'M', 'N', 'O', 'P' };  #endif  #if defined(SDR0_PINSTP_SHIFT) @@ -427,7 +433,7 @@ int checkcpu (void)  	printf ("       I2C boot EEPROM %sabled\n", i2c_bootrom_enabled() ? "en" : "dis");  #endif	/* I2C_BOOTROM */  #if defined(SDR0_PINSTP_SHIFT) -	printf ("       Bootstrap Option %c - ", (char)bootstrap_option() + 'A'); +	printf ("       Bootstrap Option %c - ", bootstrap_char[bootstrap_option()]);  	printf ("Boot ROM Location %s\n", bootstrap_str[bootstrap_option()]);  #endif	/* SDR0_PINSTP_SHIFT */ diff --git a/cpu/ppc4xx/ndfc.c b/cpu/ppc4xx/ndfc.c index b198ff46c..f63fc79f6 100644 --- a/cpu/ppc4xx/ndfc.c +++ b/cpu/ppc4xx/ndfc.c @@ -3,7 +3,7 @@   *   Platform independend driver for NDFC (NanD Flash Controller)   *   integrated into EP440 cores   * - * (C) Copyright 2006 + * (C) Copyright 2006-2007   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * Based on original work by @@ -33,12 +33,15 @@  #if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY) && \  	(defined(CONFIG_440EP) || defined(CONFIG_440GR) ||	     \ -	 defined(CONFIG_440EPX) || defined(CONFIG_440GRX)) +	 defined(CONFIG_440EPX) || defined(CONFIG_440GRX) ||	     \ +	 defined(CONFIG_405EZ))  #include <nand.h>  #include <linux/mtd/ndfc.h> +#include <linux/mtd/nand_ecc.h>  #include <asm/processor.h> -#include <ppc440.h> +#include <asm/io.h> +#include <ppc4xx.h>  static u8 hwctl = 0; @@ -69,11 +72,11 @@ static void ndfc_write_byte(struct mtd_info *mtdinfo, u_char byte)  	ulong base = (ulong) this->IO_ADDR_W & 0xfffffffc;  	if (hwctl & 0x1) -		out8(base + NDFC_CMD, byte); +		out_8((u8 *)(base + NDFC_CMD), byte);  	else if (hwctl & 0x2) -		out8(base + NDFC_ALE, byte); +		out_8((u8 *)(base + NDFC_ALE), byte);  	else -		out8(base + NDFC_DATA, byte); +		out_8((u8 *)(base + NDFC_DATA), byte);  }  static u_char ndfc_read_byte(struct mtd_info *mtdinfo) @@ -81,7 +84,7 @@ static u_char ndfc_read_byte(struct mtd_info *mtdinfo)  	struct nand_chip *this = mtdinfo->priv;  	ulong base = (ulong) this->IO_ADDR_W & 0xfffffffc; -	return (in8(base + NDFC_DATA)); +	return (in_8((u8 *)(base + NDFC_DATA)));  }  static int ndfc_dev_ready(struct mtd_info *mtdinfo) @@ -89,17 +92,41 @@ static int ndfc_dev_ready(struct mtd_info *mtdinfo)  	struct nand_chip *this = mtdinfo->priv;  	ulong base = (ulong) this->IO_ADDR_W & 0xfffffffc; -	while (!(in32(base + NDFC_STAT) & NDFC_STAT_IS_READY)) +	while (!(in_be32((u32 *)(base + NDFC_STAT)) & NDFC_STAT_IS_READY))  		;  	return 1;  } -#ifndef CONFIG_NAND_SPL -/* - * Don't use these speedup functions in NAND boot image, since the image - * has to fit into 4kByte. - */ +static void ndfc_enable_hwecc(struct mtd_info *mtdinfo, int mode) +{ +	struct nand_chip *this = mtdinfo->priv; +	ulong base = (ulong) this->IO_ADDR_W & 0xfffffffc; +	u32 ccr; + +	ccr = in_be32((u32 *)(base + NDFC_CCR)); +	ccr |= NDFC_CCR_RESET_ECC; +	out_be32((u32 *)(base + NDFC_CCR), ccr); +} + +static int ndfc_calculate_ecc(struct mtd_info *mtdinfo, +			      const u_char *dat, u_char *ecc_code) +{ +	struct nand_chip *this = mtdinfo->priv; +	ulong base = (ulong) this->IO_ADDR_W & 0xfffffffc; +	u32 ecc; +	u8 *p = (u8 *)&ecc; + +	ecc = in_be32((u32 *)(base + NDFC_ECC)); + +	/* The NDFC uses Smart Media (SMC) bytes order +	 */ +	ecc_code[0] = p[2]; +	ecc_code[1] = p[1]; +	ecc_code[2] = p[3]; + +	return 0; +}  /*   * Speedups for buffer read/write/verify @@ -115,9 +142,14 @@ static void ndfc_read_buf(struct mtd_info *mtdinfo, uint8_t *buf, int len)  	uint32_t *p = (uint32_t *) buf;  	for (;len > 0; len -= 4) -		*p++ = in32(base + NDFC_DATA); +		*p++ = in_be32((u32 *)(base + NDFC_DATA));  } +#ifndef CONFIG_NAND_SPL +/* + * Don't use these speedup functions in NAND boot image, since the image + * has to fit into 4kByte. + */  static void ndfc_write_buf(struct mtd_info *mtdinfo, const uint8_t *buf, int len)  {  	struct nand_chip *this = mtdinfo->priv; @@ -125,7 +157,7 @@ static void ndfc_write_buf(struct mtd_info *mtdinfo, const uint8_t *buf, int len  	uint32_t *p = (uint32_t *) buf;  	for (; len > 0; len -= 4) -		out32(base + NDFC_DATA, *p++); +		out_be32((u32 *)(base + NDFC_DATA), *p++);  }  static int ndfc_verify_buf(struct mtd_info *mtdinfo, const uint8_t *buf, int len) @@ -135,7 +167,7 @@ static int ndfc_verify_buf(struct mtd_info *mtdinfo, const uint8_t *buf, int len  	uint32_t *p = (uint32_t *) buf;  	for (; len > 0; len -= 4) -		if (*p++ != in32(base + NDFC_DATA)) +		if (*p++ != in_be32((u32 *)(base + NDFC_DATA)))  			return -1;  	return 0; @@ -152,8 +184,8 @@ void board_nand_select_device(struct nand_chip *nand, int chip)  	ulong base = (ulong)nand->IO_ADDR_W & 0xfffffffc;  	/* Set NandFlash Core Configuration Register */ -	/* 1col x 2 rows */ -	out32(base + NDFC_CCR, 0x00000000 | (cs << 24)); +	/* 1 col x 2 rows */ +	out_be32((u32 *)(base + NDFC_CCR), 0x00000000 | (cs << 24));  }  int board_nand_init(struct nand_chip *nand) @@ -161,23 +193,25 @@ int board_nand_init(struct nand_chip *nand)  	int cs = (ulong)nand->IO_ADDR_W & 0x00000003;  	ulong base = (ulong)nand->IO_ADDR_W & 0xfffffffc; -	nand->eccmode = NAND_ECC_SOFT; -  	nand->hwcontrol  = ndfc_hwcontrol;  	nand->read_byte  = ndfc_read_byte; +	nand->read_buf   = ndfc_read_buf;  	nand->write_byte = ndfc_write_byte;  	nand->dev_ready  = ndfc_dev_ready; +	nand->eccmode = NAND_ECC_HW3_256; +	nand->enable_hwecc = ndfc_enable_hwecc; +	nand->calculate_ecc = ndfc_calculate_ecc; +	nand->correct_data = nand_correct_data; +  #ifndef CONFIG_NAND_SPL  	nand->write_buf  = ndfc_write_buf; -	nand->read_buf   = ndfc_read_buf;  	nand->verify_buf = ndfc_verify_buf;  #else  	/*  	 * Setup EBC (CS0 only right now)  	 */ -	mtdcr(ebccfga, xbcfg); -	mtdcr(ebccfgd, 0xb8400000); +	mtebc(EBC0_CFG, 0xb8400000);  	mtebc(pb0cr, CFG_EBC_PB0CR);  	mtebc(pb0ap, CFG_EBC_PB0AP); @@ -187,7 +221,7 @@ int board_nand_init(struct nand_chip *nand)  	 * Select required NAND chip in NDFC  	 */  	board_nand_select_device(nand, cs); -	out32(base + NDFC_BCFG0 + (cs << 2), 0x80002222); +	out_be32((u32 *)(base + NDFC_BCFG0 + (cs << 2)), 0x80002222);  	return 0;  } diff --git a/cpu/ppc4xx/start.S b/cpu/ppc4xx/start.S index a96083caa..78d0042cc 100644 --- a/cpu/ppc4xx/start.S +++ b/cpu/ppc4xx/start.S @@ -110,6 +110,13 @@  # endif  #endif /* CFG_INIT_DCACHE_CS */ +#define function_prolog(func_name)      .text; \ +					.align 2; \ +					.globl func_name; \ +					func_name: +#define function_epilog(func_name)      .type func_name,@function; \ +					.size func_name,.-func_name +  /* We don't want the  MMU yet.  */  #undef	MSR_KERNEL @@ -148,7 +155,9 @@  	 * NAND U-Boot image is started from offset 0  	 */  	.text +#if defined(CONFIG_440)  	bl	reconfig_tlb0 +#endif  	GET_GOT  	bl	cpu_init_f	/* run low-level CPU init code	   (from Flash) */  	bl	board_init_f @@ -388,8 +397,9 @@ rsttlb:	tlbwe	r0,r1,0x0000	/* Invalidate all entries (V=0)*/  2:  #if defined(CONFIG_NAND_SPL) +#if defined(CONFIG_440EPX) || defined(CONFIG_440GRX)  	/* -	 * Enable internal SRAM +	 * Enable internal SRAM (only on 440EPx/GRx, 440EP/GR have no OCM)  	 */  	lis	r2,0x7fff  	ori	r2,r2,0xffff @@ -399,6 +409,45 @@ rsttlb:	tlbwe	r0,r1,0x0000	/* Invalidate all entries (V=0)*/  	mfdcr	r1,isram0_pmeg  	and	r1,r1,r2		/* Disable pwr mgmt */  	mtdcr	isram0_pmeg,r1 +#endif +#if defined(CONFIG_440EP) +	/* +	 * On 440EP with no internal SRAM, we setup SDRAM very early +	 * and copy the NAND_SPL to SDRAM and jump to it +	 */ +	/* Clear Dcache to use as RAM */ +	addis	r3,r0,CFG_INIT_RAM_ADDR@h +	ori	r3,r3,CFG_INIT_RAM_ADDR@l +	addis	r4,r0,CFG_INIT_RAM_END@h +	ori	r4,r4,CFG_INIT_RAM_END@l +	rlwinm. r5,r4,0,27,31 +	rlwinm	r5,r4,27,5,31 +	beq	..d_ran3 +	addi	r5,r5,0x0001 +..d_ran3: +	mtctr	r5 +..d_ag3: +	dcbz	r0,r3 +	addi	r3,r3,32 +	bdnz	..d_ag3 +	/*----------------------------------------------------------------*/ +	/* Setup the stack in internal SRAM */ +	/*----------------------------------------------------------------*/ +	lis	r1,CFG_INIT_RAM_ADDR@h +	ori	r1,r1,CFG_INIT_SP_OFFSET@l +	li	r0,0 +	stwu	r0,-4(r1) +	stwu	r0,-4(r1)		/* Terminate call chain */ + +	stwu	r1,-8(r1)		/* Save back chain and move SP */ +	lis	r0,RESET_VECTOR@h	/* Address of reset vector */ +	ori	r0,r0, RESET_VECTOR@l +	stwu	r1,-8(r1)		/* Save back chain and move SP */ +	stw	r0,+12(r1)		/* Save return addr (underflow vect) */ +	sync +	bl	early_sdram_init +	sync +#endif /* CONFIG_440EP */  	/*  	 * Copy SPL from cache into internal SRAM @@ -429,7 +478,7 @@ spl_loop:  start_ram:  	sync  	isync -#endif +#endif /* CONFIG_NAND_SPL */  	bl	3f  	b	_start @@ -783,7 +832,7 @@ _start:  	mtdcr	ocmdscr2, r3            /* Set Data Side */  	mtdcr	ocmiscr2, r3            /* Set Instruction Side */  	addis	r3,0,0x0800             /* OCM Data Parity Disable - 1 Wait State */ -	mtdcr	ocmdsisdpc,r4 +	mtdcr	ocmdsisdpc,r3  	isync  #else /* CONFIG_405EZ */ @@ -810,6 +859,38 @@ _start:  #endif /* CONFIG_405EZ */  #endif +#ifdef CONFIG_NAND_SPL +	/* +	 * Copy SPL from cache into internal SRAM +	 */ +	li	r4,(CFG_NAND_BOOT_SPL_SIZE >> 2) - 1 +	mtctr	r4 +	lis	r2,CFG_NAND_BOOT_SPL_SRC@h +	ori	r2,r2,CFG_NAND_BOOT_SPL_SRC@l +	lis	r3,CFG_NAND_BOOT_SPL_DST@h +	ori	r3,r3,CFG_NAND_BOOT_SPL_DST@l +spl_loop: +	lwzu	r4,4(r2) +	stwu	r4,4(r3) +	bdnz	spl_loop + +	/* +	 * Jump to code in RAM +	 */ +	bl	00f +00:	mflr	r10 +	lis	r3,(CFG_NAND_BOOT_SPL_SRC - CFG_NAND_BOOT_SPL_DST)@h +	ori	r3,r3,(CFG_NAND_BOOT_SPL_SRC - CFG_NAND_BOOT_SPL_DST)@l +	sub	r10,r10,r3 +	addi	r10,r10,28 +	mtlr	r10 +	blr + +start_ram: +	sync +	isync +#endif /* CONFIG_NAND_SPL */ +  	/*----------------------------------------------------------------------- */  	/* Setup temporary stack in DCACHE or OCM if needed for SDRAM SPD. */  	/*----------------------------------------------------------------------- */ @@ -920,12 +1001,16 @@ _start:  	stw	r0, +12(r1)		/* Save return addr (underflow vect) */  #endif /* !(CFG_INIT_DCACHE_CS	|| !CFG_TEM_STACK_OCM) */ +#ifdef CONFIG_NAND_SPL +	bl	nand_boot		/* will not return */ +#else  	GET_GOT			/* initialize GOT access			*/  	bl	cpu_init_f	/* run low-level CPU init code	   (from Flash) */  	/* NEVER RETURNS! */  	bl	board_init_f	/* run first part of init code (from Flash)	*/ +#endif /* CONFIG_NAND_SPL */  #endif	/* CONFIG_405GP || CONFIG_405CR || CONFIG_405 || CONFIG_405EP */  	/*----------------------------------------------------------------------- */ @@ -1137,27 +1222,9 @@ crit_return:  	lwz	r1,GPR1(r1)  	SYNC  	rfci -#endif /* CONFIG_NAND_SPL */  /* Cache functions.  */ -invalidate_icache: -	iccci	r0,r0			/* for 405, iccci invalidates the */ -	blr				/*   entire I cache */ - -invalidate_dcache: -	addi	r6,0,0x0000		/* clear GPR 6 */ -	/* Do loop for # of dcache congruence classes. */ -	lis	r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@ha	/* TBS for large sized cache */ -	ori	r7, r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@l -					/* NOTE: dccci invalidates both */ -	mtctr	r7			/* ways in the D cache */ -..dcloop: -	dccci	0,r6			/* invalidate line */ -	addi	r6,r6, CFG_CACHELINE_SIZE /* bump to next line */ -	bdnz	..dcloop -	blr -  flush_dcache:  	addis	r9,r0,0x0002		/* set mask for EE and CE msr bits */  	ori	r9,r9,0x8000 @@ -1255,24 +1322,6 @@ wr_tcr:  	blr  /*------------------------------------------------------------------------------- */ -/* Function:	 in8 */ -/* Description:	 Input 8 bits */ -/*------------------------------------------------------------------------------- */ -	.globl	in8 -in8: -	lbz	r3,0x0000(r3) -	blr - -/*------------------------------------------------------------------------------- */ -/* Function:	 out8 */ -/* Description:	 Output 8 bits */ -/*------------------------------------------------------------------------------- */ -	.globl	out8 -out8: -	stb	r4,0x0000(r3) -	blr - -/*------------------------------------------------------------------------------- */  /* Function:	 out16 */  /* Description:	 Output 16 bits */  /*------------------------------------------------------------------------------- */ @@ -1291,15 +1340,6 @@ out16r:  	blr  /*------------------------------------------------------------------------------- */ -/* Function:	 out32 */ -/* Description:	 Output 32 bits */ -/*------------------------------------------------------------------------------- */ -	.globl	out32 -out32: -	stw	r4,0x0000(r3) -	blr - -/*------------------------------------------------------------------------------- */  /* Function:	 out32r */  /* Description:	 Byte reverse and output 32 bits */  /*------------------------------------------------------------------------------- */ @@ -1327,15 +1367,6 @@ in16r:  	blr  /*------------------------------------------------------------------------------- */ -/* Function:	 in32 */ -/* Description:	 Input 32 bits */ -/*------------------------------------------------------------------------------- */ -	.globl	in32 -in32: -	lwz	3,0x0000(3) -	blr - -/*------------------------------------------------------------------------------- */  /* Function:	 in32r */  /* Description:	 Input 32 bits and byte reverse */  /*------------------------------------------------------------------------------- */ @@ -1377,9 +1408,6 @@ ppcSync:  	sync  	blr -/*------------------------------------------------------------------------------*/ - -#ifndef CONFIG_NAND_SPL  /*   * void relocate_code (addr_sp, gd, addr_moni)   * @@ -1644,8 +1672,105 @@ trap_reloc:  	stw	r0, 4(r7)  	blr + +#if defined(CONFIG_440) +/*----------------------------------------------------------------------------+ +| dcbz_area. ++----------------------------------------------------------------------------*/ +	function_prolog(dcbz_area) +	rlwinm. r5,r4,0,27,31 +	rlwinm  r5,r4,27,5,31 +	beq     ..d_ra2 +	addi    r5,r5,0x0001 +..d_ra2:mtctr   r5 +..d_ag2:dcbz    r0,r3 +	addi    r3,r3,32 +	bdnz    ..d_ag2 +	sync +	blr +	function_epilog(dcbz_area) + +/*----------------------------------------------------------------------------+ +| dflush.  Assume 32K at vector address is cachable. ++----------------------------------------------------------------------------*/ +	function_prolog(dflush) +	mfmsr   r9 +	rlwinm  r8,r9,0,15,13 +	rlwinm  r8,r8,0,17,15 +	mtmsr   r8 +	addi    r3,r0,0x0000 +	mtspr   dvlim,r3 +	mfspr   r3,ivpr +	addi    r4,r0,1024 +	mtctr   r4 +..dflush_loop: +	lwz     r6,0x0(r3) +	addi    r3,r3,32 +	bdnz    ..dflush_loop +	addi    r3,r3,-32 +	mtctr   r4 +..ag:   dcbf    r0,r3 +	addi    r3,r3,-32 +	bdnz    ..ag +	sync +	mtmsr   r9 +	blr +	function_epilog(dflush) +#endif /* CONFIG_440 */  #endif /* CONFIG_NAND_SPL */ +/*------------------------------------------------------------------------------- */ +/* Function:	 in8 */ +/* Description:	 Input 8 bits */ +/*------------------------------------------------------------------------------- */ +	.globl	in8 +in8: +	lbz	r3,0x0000(r3) +	blr + +/*------------------------------------------------------------------------------- */ +/* Function:	 out8 */ +/* Description:	 Output 8 bits */ +/*------------------------------------------------------------------------------- */ +	.globl	out8 +out8: +	stb	r4,0x0000(r3) +	blr + +/*------------------------------------------------------------------------------- */ +/* Function:	 out32 */ +/* Description:	 Output 32 bits */ +/*------------------------------------------------------------------------------- */ +	.globl	out32 +out32: +	stw	r4,0x0000(r3) +	blr + +/*------------------------------------------------------------------------------- */ +/* Function:	 in32 */ +/* Description:	 Input 32 bits */ +/*------------------------------------------------------------------------------- */ +	.globl	in32 +in32: +	lwz	3,0x0000(3) +	blr + +invalidate_icache: +	iccci	r0,r0			/* for 405, iccci invalidates the */ +	blr				/*   entire I cache */ + +invalidate_dcache: +	addi	r6,0,0x0000		/* clear GPR 6 */ +	/* Do loop for # of dcache congruence classes. */ +	lis	r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@ha	/* TBS for large sized cache */ +	ori	r7, r7, (CFG_DCACHE_SIZE / CFG_CACHELINE_SIZE / 2)@l +					/* NOTE: dccci invalidates both */ +	mtctr	r7			/* ways in the D cache */ +..dcloop: +	dccci	0,r6			/* invalidate line */ +	addi	r6,r6, CFG_CACHELINE_SIZE /* bump to next line */ +	bdnz	..dcloop +	blr  /**************************************************************************/  /* PPC405EP specific stuff						  */ @@ -1892,13 +2017,6 @@ pll_wait:  #endif /* CONFIG_405EP */  #if defined(CONFIG_440) -#define function_prolog(func_name)	.text; \ -					.align 2; \ -					.globl func_name; \ -					func_name: -#define function_epilog(func_name)	.type func_name,@function; \ -					.size func_name,.-func_name -  /*----------------------------------------------------------------------------+  | mttlb3.  +----------------------------------------------------------------------------*/ @@ -1946,47 +2064,4 @@ pll_wait:  	TLBRE(3,3,0)  	blr  	function_epilog(mftlb1) - -/*----------------------------------------------------------------------------+ -| dcbz_area. -+----------------------------------------------------------------------------*/ -	function_prolog(dcbz_area) -	rlwinm. r5,r4,0,27,31 -	rlwinm	r5,r4,27,5,31 -	beq	..d_ra2 -	addi	r5,r5,0x0001 -..d_ra2:mtctr	r5 -..d_ag2:dcbz	r0,r3 -	addi	r3,r3,32 -	bdnz	..d_ag2 -	sync -	blr -	function_epilog(dcbz_area) - -/*----------------------------------------------------------------------------+ -| dflush.  Assume 32K at vector address is cachable. -+----------------------------------------------------------------------------*/ -	function_prolog(dflush) -	mfmsr	r9 -	rlwinm	r8,r9,0,15,13 -	rlwinm	r8,r8,0,17,15 -	mtmsr	r8 -	addi	r3,r0,0x0000 -	mtspr	dvlim,r3 -	mfspr	r3,ivpr -	addi	r4,r0,1024 -	mtctr	r4 -..dflush_loop: -	lwz	r6,0x0(r3) -	addi	r3,r3,32 -	bdnz	..dflush_loop -	addi	r3,r3,-32 -	mtctr	r4 -..ag:	dcbf	r0,r3 -	addi	r3,r3,-32 -	bdnz	..ag -	sync -	mtmsr	r9 -	blr -	function_epilog(dflush)  #endif /* CONFIG_440 */ diff --git a/disk/part.c b/disk/part.c index acc1a748e..255b14069 100644..100755 --- a/disk/part.c +++ b/disk/part.c @@ -180,6 +180,7 @@ void dev_print (block_dev_desc_t *dev_desc)       (CONFIG_COMMANDS & CFG_CMD_SCSI)	|| \       (CONFIG_COMMANDS & CFG_CMD_USB)	|| \       defined(CONFIG_MMC)		|| \ +     (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \       defined(CONFIG_SYSTEMACE)          )  #if defined(CONFIG_MAC_PARTITION) || \ @@ -219,7 +220,8 @@ void init_part (block_dev_desc_t * dev_desc)  } -int get_partition_info (block_dev_desc_t *dev_desc, int part, disk_partition_t *info) +int get_partition_info (block_dev_desc_t *dev_desc, int part +					, disk_partition_t *info)  {  		switch (dev_desc->part_type) {  #ifdef CONFIG_MAC_PARTITION @@ -325,7 +327,8 @@ void print_part (block_dev_desc_t * dev_desc)  #else	/* neither MAC nor DOS nor ISO partition configured */ -# error neither CONFIG_MAC_PARTITION nor CONFIG_DOS_PARTITION nor CONFIG_ISO_PARTITION configured! +# error neither CONFIG_MAC_PARTITION nor CONFIG_DOS_PARTITION +# error nor CONFIG_ISO_PARTITION configured!  #endif  #endif	/* (CONFIG_COMMANDS & CFG_CMD_IDE) || CONFIG_COMMANDS & CFG_CMD_SCSI) */ diff --git a/doc/README.mpc8313erdb b/doc/README.mpc8313erdb new file mode 100644 index 000000000..7ad4cc76c --- /dev/null +++ b/doc/README.mpc8313erdb @@ -0,0 +1,83 @@ +Freescale MPC8313ERDB Board +----------------------------------------- + +1.	Board Switches and Jumpers + +	SW3 is used to set CFG_RESET_SOURCE. + +	To boot the image at 0xFE000000 in NOR flash, use these DIP +	switche settings for SW3 SW4: + +	+------+	+------+ +	|      |	| **** | +	| **** |	|      | +	+------+ ON	+------+ ON +	  4321		  4321 +	(where the '*' indicates the position of the tab of the switch.) + +2.	Memory Map +	The memory map looks like this: + +	0x0000_0000	0x07ff_ffff	DDR		 128M +	0x8000_0000	0x8fff_ffff	PCI MEM		 256M +	0x9000_0000	0x9fff_ffff	PCI_MMIO	 256M +	0xe000_0000	0xe00f_ffff	IMMR		 1M +	0xe200_0000	0xe20f_ffff	PCI IO	 	 16M +	0xe280_0000	0xe280_7fff	NAND FLASH (CS1) 32K +	0xf000_0000	0xf001_ffff	VSC7385 (CS2)	 128K +	0xfa00_0000	0xfa00_7fff	Board Status/	 32K +					LED Control (CS3) +	0xfe00_0000	0xfe7f_ffff	NOR FLASH (CS0)	 8M + +3.	Definitions + +3.1	Explanation of NEW definitions in: + +	include/configs/MPC8313ERDB.h + +	CONFIG_MPC83xx		MPC83xx family +	CONFIG_MPC831x		MPC831x specific +	CONFIG_MPC8313ERDB	MPC8313ERDB board specific + +4.	Compilation + +	Assuming you're using BASH (or similar) as your shell: + +	export CROSS_COMPILE=your-cross-compiler-prefix- +	make distclean +	make MPC8313ERDB_33_config +	(or make MPC8313ERDB_66_config, depending on the speed of +	 the oscillator on your board) +	make + +5.	Downloading and Flashing Images + +5.1	Reflash U-boot Image using U-boot + +	=>run tftpflash + +	You may want to try +	=>tftpboot $loadaddr $uboot +	first, to make sure that the TFTP load will succeed before it +	goes ahead and wipes out your current firmware.  And of course, +	have an alternate means of programming the flash available +	if the new u-boot doesn't boot. + +5.2	Downloading and Booting Linux Kernel + +	Ensure that all networking-related environment variables are set +	properly (including ipaddr, serverip, gatewayip (if needed), +	netmask, ethaddr, eth1addr, rootpath (if using NFS root), +	fdtfile, and bootfile). + +	Then, do one of the following, depending on whether you +	want an NFS root or a ramdisk root: + +	=>run nfsboot +	or +	=>run ramboot + +6	Notes + +	Booting from NAND flash is not yet supported. +	The console baudrate for MPC8313ERDB is 115200bps. diff --git a/doc/README.mpc8641hpcn b/doc/README.mpc8641hpcn index 3b88f8bc7..ac56ccaf2 100644 --- a/doc/README.mpc8641hpcn +++ b/doc/README.mpc8641hpcn @@ -96,14 +96,17 @@ To Flash U-Boot into the booting bank (0xFFC00000 - 0xFFFFFFFF):  	tftp 1000000 u-boot.bin  	protect off all -	erase fff00000 ffffffff -	cp.b 1000000 fff00100 80000 +	erase fff00000 +$filesize +	cp.b 1000000 fff00000 $filesize + +or use tftpflash command: +	run tftpflash  To Flash U-boot into the alternative bank (0xFF800000 - 0xFFBFFFFF):  	tftp 1000000 u-boot.bin -	erase ffb00000 ffbfffff -	cp.b 1000000 ffb00100 80000 +	erase ffb00000 +$filesize +	cp.b 1000000 ffb00000 $filesize  4. Memory Map diff --git a/doc/README.nand b/doc/README.nand index b5171f4d4..5c31845a9 100644 --- a/doc/README.nand +++ b/doc/README.nand @@ -192,12 +192,7 @@ The old NAND handling code has been re-factored and is now confined  to only board-specific files and - unfortunately - to the DoC code  (see below). A new configuration variable has been introduced:  CFG_NAND_LEGACY, which has to be defined in the board config file if -that board uses legacy code. If CFG_NAND_LEGACY is defined, the board -specific config.mk file should also have "BOARDLIBS = -drivers/nand_legacy/libnand_legacy.a". For boards using the new NAND -approach (PPChameleon and netstar at the moment) no variable is -necessary, but the config.mk should have "BOARDLIBS = -drivers/nand/libnand.a". +that board uses legacy code.  The necessary changes have been made to all affected boards, and no  build breakage has been introduced, except for NETTA and NETTA_ISDN diff --git a/doc/README.sbc8560 b/doc/README.sbc8560 deleted file mode 100644 index 52592e3f4..000000000 --- a/doc/README.sbc8560 +++ /dev/null @@ -1,53 +0,0 @@ -The port was tested on Wind River System Sbc8560 board <www.windriver.com>. -U-Boot was installed on the flash memory of the CPU card (no the SODIMM). - -NOTE: Please configure uboot compile to the proper PCI frequency and -setup the appropriate DIP switch settings. - -SBC8560 board: - -Make sure boards switches are set to their appropriate conditions. -Refer to the Engineering Reference Guide ERG-00300-002. Of particular -importance are: 1)Tthe settings for JP4 (JP4 1-3 and 2-4), which -select the on-board FLASH device (Intel 28F128Jx); 2) The settings -for the Clock SW9 (33 MHz or 66 MHz). - -	Note:	SW9 Settings: 66 MHz -		4:1 ratio CCB clocks:SYSCLK -		3:1 ration e500 Core:CCB -		pos1 - on, pos2 - on, pos3 - off, pos4 - on, pos5 - off, pos6 - on -	Note:	SW9 Settings: 33 MHz -		8:1 ratio CCB clocks:SYSCLK -		3:1 ration e500 Core:CCB -		pos1 - on, pos2 - on, pos3 - on, pos4 - off, pos5 - off, pos6 - on - - -Flashing the FLASH device with the "Wind River ICE": - -1) Properly connect and configure the Wind River ICE to the -   target JTAG port. This includes running the SBC8560 register script. -   Make sure target memory can be read and written. - -2) Build the u-boot image: -	make distclean -	make SBC8560_66_config or SBC8560_33_config -	make CROSS_COMPILE=.../ELDK3.0/ppc_8xx-/ all - -   Note: reference is made to the ELDK3.0 compiler but any 85xx cross-compiler -	 should suffice. - -3) Convert the uboot (.elf) file to a uboot.bin file (using visionClick converter). -   The bin file should be converted from fffc0000 to ffffffff - -4) Setup the Flash Utility (tools menu) for: - -   Determine the clock speed of the PCI bus and set SW9 accordingly -	Note: the speed of the PCI bus defaults to the slowest PCI card -   PlayBack the "default" register file for the SBC8560 -   Select the uboot.bin file with zero bias -   Select the initialize Target prior to programming -   Select the V28F640Jx (8192 x 8) 1 device FLASH Algorithm -   Select the erase base address from FFFC0000 to FFFFFFFF -   Select the start address from 0 with size of 4000 - -5) Erase and Program diff --git a/drivers/Makefile b/drivers/Makefile index d68cba682..c7fcc3f23 100644 --- a/drivers/Makefile +++ b/drivers/Makefile @@ -30,7 +30,7 @@ LIB	= $(obj)libdrivers.a  COBJS	= 3c589.o 5701rls.o ali512x.o atmel_usart.o \  	  bcm570x.o bcm570x_autoneg.o cfb_console.o cfi_flash.o \  	  cs8900.o ct69000.o dataflash.o dc2114x.o dm9000x.o \ -	  e1000.o eepro100.o \ +	  e1000.o eepro100.o enc28j60.o \  	  i8042.o inca-ip_sw.o keyboard.o \  	  lan91c96.o macb.o \  	  natsemi.o ne2000.o netarm_eth.o netconsole.o \ diff --git a/board/lpc2292sodimm/eth.c b/drivers/enc28j60.c index 249ab0439..98303acee 100644..100755 --- a/board/lpc2292sodimm/eth.c +++ b/drivers/enc28j60.c @@ -17,9 +17,10 @@  #include <config.h>  #include <common.h> +#ifdef CONFIG_ENC28J60  #include <net.h>  #include <asm/arch/hardware.h> -#include "spi.h" +#include <asm/arch/spi.h>  /*   * Control Registers in Bank 0 @@ -36,7 +37,7 @@  #define CTL_REG_ERXSTL	 0x08  #define CTL_REG_ERXSTH	 0x09  #define CTL_REG_ERXNDL	 0x0A -#define CTL_REG_ERXNDA	 0x0B +#define CTL_REG_ERXNDH	 0x0B  #define CTL_REG_ERXRDPTL 0x0C  #define CTL_REG_ERXRDPTH 0x0D  #define CTL_REG_ERXWRPTL 0x0E @@ -137,7 +138,10 @@  #define PHY_REG_PHID1 0x02  #define PHY_REG_PHID2 0x03 - +/* taken from the Linux driver */ +#define PHY_REG_PHCON1 0x00 +#define PHY_REG_PHCON2 0x10 +#define PHY_REG_PHLCON 0x14  /*   * Receive Filter Register (ERXFCON) bits @@ -274,6 +278,9 @@  /* Use the lower memory for receiver buffer. See errata pt. 5 */  #define ENC_RX_BUF_START 0x0000  #define ENC_TX_BUF_START 0x1800 +/* taken from the Linux driver */ +#define ENC_RX_BUF_END   0x17ff +#define ENC_TX_BUF_END   0x1fff  /* maximum frame length */  #define ENC_MAX_FRM_LEN 1518 @@ -293,6 +300,7 @@ static void encBitClr (unsigned char regNo, unsigned char data);  static void encReset (void);  static void encInit (unsigned char *pEthAddr);  static unsigned short phyRead (unsigned char addr); +static void phyWrite(unsigned char, unsigned short);  static void encPoll (void);  static void encRx (void); @@ -318,10 +326,12 @@ static int rxResetCounter = 0;  #define RX_RESET_COUNTER 1000;  /*----------------------------------------------------------------------------- - * Returns 0 when failes otherwize 1 + * Always returns 0   */  int eth_init (bd_t * bis)  { +	unsigned char estatVal; +  	/* configure GPIO */  	(*((volatile unsigned long *) IO1DIR)) |= ENC_SPI_SLAVE_CS;  	(*((volatile unsigned long *) IO1DIR)) |= ENC_RESET; @@ -332,6 +342,14 @@ int eth_init (bd_t * bis)  	spi_init (); +	/* taken from the Linux driver - dangerous stuff here! */ +	/* Wait for CLKRDY to become set (i.e., check that we can communicate with +	   the ENC) */ +	do +	{ +		estatVal = m_nic_read(CTL_REG_ESTAT); +	} while ((estatVal & 0x08) || (~estatVal & ENC_ESTAT_CLKRDY)); +  	/* initialize controller */  	encReset ();  	encInit (bis->bi_enetaddr); @@ -353,6 +371,10 @@ int eth_send (volatile void *packet, int length)  	m_nic_write (CTL_REG_EWRPTL, (ENC_TX_BUF_START & 0xff));  	m_nic_write (CTL_REG_EWRPTH, (ENC_TX_BUF_START >> 8)); +	/* set ETXND */ +	m_nic_write (CTL_REG_ETXNDL, (length + ENC_TX_BUF_START) & 0xFF); +	m_nic_write (CTL_REG_ETXNDH, (length + ENC_TX_BUF_START) >> 8); +  	/* set ETXST */  	m_nic_write (CTL_REG_ETXSTL, ENC_TX_BUF_START & 0xFF);  	m_nic_write (CTL_REG_ETXSTH, ENC_TX_BUF_START >> 8); @@ -360,9 +382,15 @@ int eth_send (volatile void *packet, int length)  	/* write packet */  	m_nic_write_data (length, (unsigned char *) packet); -	/* set ETXND */ -	m_nic_write (CTL_REG_ETXNDL, (length + ENC_TX_BUF_START) & 0xFF); -	m_nic_write (CTL_REG_ETXNDH, (length + ENC_TX_BUF_START) >> 8); +	/* taken from the Linux driver */ +	/* Verify that the internal transmit logic has not been altered by excessive +	   collisions.  See Errata B4 12 and 14. +	 */ +	if (m_nic_read(CTL_REG_EIR) & ENC_EIR_TXERIF) { +		m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_TXRST); +		m_nic_bfc(CTL_REG_ECON1, ENC_ECON1_TXRST); +	} +	m_nic_bfc(CTL_REG_EIR, (ENC_EIR_TXERIF | ENC_EIR_TXIF));  	/* set ECON1.TXRTS */  	m_nic_bfs (CTL_REG_ECON1, ENC_ECON1_TXRTS); @@ -423,8 +451,10 @@ static void encPoll (void)  	volatile unsigned char estat_reg;  	unsigned char pkt_cnt; +#ifdef CONFIG_USE_IRQ  	/* clear global interrupt enable bit in enc28j60 */  	m_nic_bfc (CTL_REG_EIE, ENC_EIE_INTIE); +#endif  	estat_reg = m_nic_read (CTL_REG_ESTAT);  	eir_reg = m_nic_read (CTL_REG_EIR); @@ -462,8 +492,10 @@ static void encPoll (void)  		m_nic_bfc (CTL_REG_EIR, ENC_EIR_TXERIF);  	} +#ifdef CONFIG_USE_IRQ  	/* set global interrupt enable bit in enc28j60 */  	m_nic_bfs (CTL_REG_EIE, ENC_EIE_INTIE); +#endif  }  static void encRx (void) @@ -473,6 +505,7 @@ static void encRx (void)  	unsigned short status;  	unsigned char eir_reg;  	unsigned char pkt_cnt = 0; +	unsigned short rxbuf_rdpt;  	/* switch to bank 0 */  	m_nic_bfc (CTL_REG_ECON1, (ENC_ECON1_BSEL1 | ENC_ECON1_BSEL0)); @@ -489,18 +522,19 @@ static void encRx (void)  		status = buffer[4];  		status |= (unsigned short) buffer[5] << 8; -		if (pkt_len <= ENC_MAX_FRM_LEN) { +		if (pkt_len <= ENC_MAX_FRM_LEN)  			copy_len = pkt_len; -		} else { +		else  			copy_len = 0; -			/*      p_priv->stats.rx_dropped++; */ -			/* we will drop this packet */ -		} -		if ((status & (1L << 7)) == 0) {	/* check Received Ok bit */ +		if ((status & (1L << 7)) == 0) /* check Received Ok bit */ +			copy_len = 0; + +		/* taken from the Linux driver */ +		/* check if next pointer is resonable */ +		if ((((unsigned int)next_pointer_msb << 8) | +			(unsigned int)next_pointer_lsb) >= ENC_TX_BUF_START)  			copy_len = 0; -			/*      p_priv->stats.rx_errors++; */ -		}  		if (copy_len > 0) {  			m_nic_read_data (copy_len, buffer); @@ -513,6 +547,22 @@ static void encRx (void)  		/* decrease packet counter */  		m_nic_bfs (CTL_REG_ECON2, ENC_ECON2_PKTDEC); +		/* taken from the Linux driver */ +		/* Only odd values should be written to ERXRDPTL, +		 * see errata B4 pt.13 +		 */ +		rxbuf_rdpt = (next_pointer_msb << 8 | next_pointer_lsb) - 1; +		if ((rxbuf_rdpt < (m_nic_read(CTL_REG_ERXSTH) << 8 | +				m_nic_read(CTL_REG_ERXSTL))) || (rxbuf_rdpt > +				(m_nic_read(CTL_REG_ERXNDH) << 8 | +				m_nic_read(CTL_REG_ERXNDL)))) { +			m_nic_write(CTL_REG_ERXRDPTL, m_nic_read(CTL_REG_ERXNDL)); +			m_nic_write(CTL_REG_ERXRDPTH, m_nic_read(CTL_REG_ERXNDH)); +		} else { +			m_nic_write(CTL_REG_ERXRDPTL, rxbuf_rdpt & 0xFF); +			m_nic_write(CTL_REG_ERXRDPTH, rxbuf_rdpt >> 8); +		} +  		/* move to bank 1 */  		m_nic_bfc (CTL_REG_ECON1, ENC_ECON1_BSEL1);  		m_nic_bfs (CTL_REG_ECON1, ENC_ECON1_BSEL0); @@ -535,8 +585,6 @@ static void encRx (void)  		eir_reg = m_nic_read (CTL_REG_EIR);  	} while (pkt_cnt);	/* Use EPKTCNT not EIR.PKTIF flag, see errata pt. 6 */ -	m_nic_write (CTL_REG_ERXRDPTL, next_pointer_lsb); -	m_nic_write (CTL_REG_ERXRDPTH, next_pointer_msb);  }  static void encWriteReg (unsigned char regNo, unsigned char data) @@ -700,12 +748,6 @@ static void encReset (void)  	/* sleep 1 ms. See errata pt. 2 */  	udelay (1000); - -#if 0 -	(*((volatile unsigned long *) IO1CLR)) &= ENC_RESET; -	mdelay (5); -	(*((volatile unsigned long *) IO1SET)) &= ENC_RESET; -#endif  }  static void encInit (unsigned char *pEthAddr) @@ -720,44 +762,21 @@ static void encInit (unsigned char *pEthAddr)  	 * Setup the buffer space. The reset values are valid for the  	 * other pointers.  	 */ -#if 0  	/* We shall not write to ERXST, see errata pt. 5. Instead we  	   have to make sure that ENC_RX_BUS_START is 0. */  	m_nic_write_retry (CTL_REG_ERXSTL, (ENC_RX_BUF_START & 0xFF), 1);  	m_nic_write_retry (CTL_REG_ERXSTH, (ENC_RX_BUF_START >> 8), 1); -#endif + +	/* taken from the Linux driver */ +	m_nic_write_retry (CTL_REG_ERXNDL, (ENC_RX_BUF_END & 0xFF), 1); +	m_nic_write_retry (CTL_REG_ERXNDH, (ENC_RX_BUF_END >> 8), 1); +  	m_nic_write_retry (CTL_REG_ERDPTL, (ENC_RX_BUF_START & 0xFF), 1);  	m_nic_write_retry (CTL_REG_ERDPTH, (ENC_RX_BUF_START >> 8), 1);  	next_pointer_lsb = (ENC_RX_BUF_START & 0xFF);  	next_pointer_msb = (ENC_RX_BUF_START >> 8); -	/* -	 * For tracking purposes, the ERXRDPT registers should be programmed with -	 * the same value. This is the read pointer. -	 */ -	m_nic_write (CTL_REG_ERXRDPTL, (ENC_RX_BUF_START & 0xFF)); -	m_nic_write_retry (CTL_REG_ERXRDPTH, (ENC_RX_BUF_START >> 8), 1); - -	/* Setup receive filters. */ - -	/* move to bank 1 */ -	m_nic_bfc (CTL_REG_ECON1, ENC_ECON1_BSEL1); -	m_nic_bfs (CTL_REG_ECON1, ENC_ECON1_BSEL0); - -	/* OR-filtering, Unicast, CRC-check and broadcast */ -	m_nic_write_retry (CTL_REG_ERXFCON, -			   (ENC_RFR_UCEN | ENC_RFR_CRCEN | ENC_RFR_BCEN), 1); - -	/* Wait for Oscillator Start-up Timer (OST). */ -	while ((m_nic_read (CTL_REG_ESTAT) & ENC_ESTAT_CLKRDY) == 0) { -		static int cnt = 0; - -		if (cnt++ >= 1000) { -			cnt = 0; -		} -	} -  	/* verify identification */  	phid1 = phyRead (PHY_REG_PHID1);  	phid2 = phyRead (PHY_REG_PHID2); @@ -780,16 +799,34 @@ static void encInit (unsigned char *pEthAddr)  	/* switch to bank 2 */  	m_nic_bfc (CTL_REG_ECON1, ENC_ECON1_BSEL0);  	m_nic_bfs (CTL_REG_ECON1, ENC_ECON1_BSEL1); -	/* clear MAC reset bits */ -	m_nic_write_retry (CTL_REG_MACON2, 0, 1);  	/* enable MAC to receive frames */ -	m_nic_write_retry (CTL_REG_MACON1, ENC_MACON1_MARXEN, 10); +	/* added some bits from the Linux driver */ +	m_nic_write_retry (CTL_REG_MACON1 +		,(ENC_MACON1_MARXEN | ENC_MACON1_TXPAUS | ENC_MACON1_RXPAUS) +		,10);  	/* configure pad, tx-crc and duplex */ -	/* TODO maybe enable FRMLNEN */ -	m_nic_write_retry (CTL_REG_MACON3, -			   (ENC_MACON3_PADCFG0 | ENC_MACON3_TXCRCEN), 10); +	/* added a bit from the Linux driver */ +	m_nic_write_retry (CTL_REG_MACON3 +		,(ENC_MACON3_PADCFG0 | ENC_MACON3_TXCRCEN | ENC_MACON3_FRMLNEN) +		,10); + +	/* added 4 new lines from the Linux driver */ +	/* Allow infinite deferals if the medium is continously busy */ +	m_nic_write_retry(CTL_REG_MACON4, (1<<6) /*ENC_MACON4_DEFER*/, 10); + +	/* Late collisions occur beyond 63 bytes */ +	m_nic_write_retry(CTL_REG_MACLCON2, 63, 10); + +	/* Set (low byte) Non-Back-to_Back Inter-Packet Gap. Recommended 0x12 */ +	m_nic_write_retry(CTL_REG_MAIPGL, 0x12, 10); + +	/* +	* Set (high byte) Non-Back-to_Back Inter-Packet Gap. Recommended +	* 0x0c for half-duplex. Nothing for full-duplex +	*/ +	m_nic_write_retry(CTL_REG_MAIPGH, 0x0C, 10);  	/* set maximum frame length */  	m_nic_write_retry (CTL_REG_MAMXFLL, (ENC_MAX_FRM_LEN & 0xff), 10); @@ -801,15 +838,6 @@ static void encInit (unsigned char *pEthAddr)  	 */  	m_nic_write_retry (CTL_REG_MABBIPG, 0x12, 10); -	/* Set (low byte) Non-Back-to_Back Inter-Packet Gap. Recommended 0x12 */ -	m_nic_write_retry (CTL_REG_MAIPGL, 0x12, 10); - -	/* -	 * Set (high byte) Non-Back-to_Back Inter-Packet Gap. Recommended -	 * 0x0c for half-duplex. Nothing for full-duplex -	 */ -	m_nic_write_retry (CTL_REG_MAIPGH, 0x0C, 10); -  	/* set MAC address */  	/* switch to bank 3 */ @@ -823,18 +851,35 @@ static void encInit (unsigned char *pEthAddr)  	m_nic_write_retry (CTL_REG_MAADR5, pEthAddr[0], 1);  	/* -	 * Receive settings +	* PHY Initialization taken from the Linux driver  	 */ -	/* auto-increment RX-pointer when reading a received packet */ -	m_nic_bfs (CTL_REG_ECON2, ENC_ECON2_AUTOINC); +	/* Prevent automatic loopback of data beeing transmitted by setting +	   ENC_PHCON2_HDLDIS */ +	phyWrite(PHY_REG_PHCON2, (1<<8)); + +	/* LEDs configuration +	 * LEDA: LACFG = 0100 -> display link status +	 * LEDB: LBCFG = 0111 -> display TX & RX activity +	 * STRCH = 1 -> LED pulses +	 */ +	phyWrite(PHY_REG_PHLCON, 0x0472); +	/* Reset PDPXMD-bit => half duplex */ +	phyWrite(PHY_REG_PHCON1, 0); + +	/* +	 * Receive settings +	 */ + +#ifdef CONFIG_USE_IRQ  	/* enable interrupts */  	m_nic_bfs (CTL_REG_EIE, ENC_EIE_PKTIE);  	m_nic_bfs (CTL_REG_EIE, ENC_EIE_TXIE);  	m_nic_bfs (CTL_REG_EIE, ENC_EIE_RXERIE);  	m_nic_bfs (CTL_REG_EIE, ENC_EIE_TXERIE);  	m_nic_bfs (CTL_REG_EIE, ENC_EIE_INTIE); +#endif  }  /***************************************************************************** @@ -864,6 +909,11 @@ static unsigned short phyRead (unsigned char addr)  	/* set MICMD.MIIRD */  	m_nic_write (CTL_REG_MICMD, ENC_MICMD_MIIRD); +	/* taken from the Linux driver */ +	/* move to bank 3 */ +	m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_BSEL0); +	m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_BSEL1); +  	/* poll MISTAT.BUSY bit until operation is complete */  	while ((m_nic_read (CTL_REG_MISTAT) & ENC_MISTAT_BUSY) != 0) {  		static int cnt = 0; @@ -875,6 +925,11 @@ static unsigned short phyRead (unsigned char addr)  		}  	} +	/* taken from the Linux driver */ +	/* move to bank 2 */ +	m_nic_bfc(CTL_REG_ECON1, ENC_ECON1_BSEL0); +	m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_BSEL1); +  	/* clear MICMD.MIIRD */  	m_nic_write (CTL_REG_MICMD, 0); @@ -883,3 +938,46 @@ static unsigned short phyRead (unsigned char addr)  	return ret;  } + +/***************************************************************************** + * + * Taken from the Linux driver. + * Description: + * Write PHY registers. + * + * NOTE! This function will change to Bank 3. + * + * Params: + * [in] addr address of the register to write to + * [in] data to be written + * + * Returns: + *    None + */ +static void phyWrite(unsigned char addr, unsigned short data) +{ +	/* move to bank 2 */ +	m_nic_bfc(CTL_REG_ECON1, ENC_ECON1_BSEL0); +	m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_BSEL1); + +	/* write address to MIREGADR */ +	m_nic_write(CTL_REG_MIREGADR, addr); + +	m_nic_write(CTL_REG_MIWRL, data & 0xff); +	m_nic_write(CTL_REG_MIWRH, data >> 8); + +	/* move to bank 3 */ +	m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_BSEL0); +	m_nic_bfs(CTL_REG_ECON1, ENC_ECON1_BSEL1); + +	/* poll MISTAT.BUSY bit until operation is complete */ +	while((m_nic_read(CTL_REG_MISTAT) & ENC_MISTAT_BUSY) != 0) { +		static int cnt = 0; + +		if(cnt++ >= 1000) { +			cnt = 0; +		} +	} +} + +#endif /* CONFIG_ENC28J60 */ diff --git a/drivers/nand/nand_base.c b/drivers/nand/nand_base.c index 849582990..c6fee1822 100644 --- a/drivers/nand/nand_base.c +++ b/drivers/nand/nand_base.c @@ -427,8 +427,9 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)  	struct nand_chip *this = mtd->priv;  	u16 bad; +	page = (int)(ofs >> this->page_shift) & this->pagemask; +  	if (getchip) { -		page = (int)(ofs >> this->page_shift);  		chipnr = (int)(ofs >> this->chip_shift);  		/* Grab the lock and see if the device is available */ @@ -436,18 +437,17 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)  		/* Select the NAND device */  		this->select_chip(mtd, chipnr); -	} else -		page = (int) ofs; +	}  	if (this->options & NAND_BUSWIDTH_16) { -		this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, page & this->pagemask); +		this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos & 0xFE, page);  		bad = cpu_to_le16(this->read_word(mtd));  		if (this->badblockpos & 0x1)  			bad >>= 1;  		if ((bad & 0xFF) != 0xff)  			res = 1;  	} else { -		this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos, page & this->pagemask); +		this->cmdfunc (mtd, NAND_CMD_READOOB, this->badblockpos, page);  		if (this->read_byte(mtd) != 0xff)  			res = 1;  	} diff --git a/drivers/nand/nand_ecc.c b/drivers/nand/nand_ecc.c index f33be9655..90274e6d6 100644 --- a/drivers/nand/nand_ecc.c +++ b/drivers/nand/nand_ecc.c @@ -40,6 +40,13 @@  #if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY)  #include<linux/mtd/mtd.h> + +/* + * NAND-SPL has no sofware ECC for now, so don't include nand_calculate_ecc(), + * only nand_correct_data() is needed + */ + +#ifndef CONFIG_NAND_SPL  /*   * Pre-calculated 256-way 1 byte column parity   */ @@ -62,90 +69,75 @@ static const u_char nand_ecc_precalc_table[] = {  	0x00, 0x55, 0x56, 0x03, 0x59, 0x0c, 0x0f, 0x5a, 0x5a, 0x0f, 0x0c, 0x59, 0x03, 0x56, 0x55, 0x00  }; - -/** - * nand_trans_result - [GENERIC] create non-inverted ECC - * @reg2:	line parity reg 2 - * @reg3:	line parity reg 3 - * @ecc_code:	ecc - * - * Creates non-inverted ECC code from line parity - */ -static void nand_trans_result(u_char reg2, u_char reg3, -	u_char *ecc_code) -{ -	u_char a, b, i, tmp1, tmp2; - -	/* Initialize variables */ -	a = b = 0x80; -	tmp1 = tmp2 = 0; - -	/* Calculate first ECC byte */ -	for (i = 0; i < 4; i++) { -		if (reg3 & a)		/* LP15,13,11,9 --> ecc_code[0] */ -			tmp1 |= b; -		b >>= 1; -		if (reg2 & a)		/* LP14,12,10,8 --> ecc_code[0] */ -			tmp1 |= b; -		b >>= 1; -		a >>= 1; -	} - -	/* Calculate second ECC byte */ -	b = 0x80; -	for (i = 0; i < 4; i++) { -		if (reg3 & a)		/* LP7,5,3,1 --> ecc_code[1] */ -			tmp2 |= b; -		b >>= 1; -		if (reg2 & a)		/* LP6,4,2,0 --> ecc_code[1] */ -			tmp2 |= b; -		b >>= 1; -		a >>= 1; -	} - -	/* Store two of the ECC bytes */ -	ecc_code[0] = tmp1; -	ecc_code[1] = tmp2; -} -  /** - * nand_calculate_ecc - [NAND Interface] Calculate 3 byte ECC code for 256 byte block + * nand_calculate_ecc - [NAND Interface] Calculate 3-byte ECC for 256-byte block   * @mtd:	MTD block structure   * @dat:	raw data   * @ecc_code:	buffer for ECC   */ -int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code) +int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, +		       u_char *ecc_code)  { -	u_char idx, reg1, reg2, reg3; -	int j; +	uint8_t idx, reg1, reg2, reg3, tmp1, tmp2; +	int i;  	/* Initialize variables */  	reg1 = reg2 = reg3 = 0; -	ecc_code[0] = ecc_code[1] = ecc_code[2] = 0;  	/* Build up column parity */ -	for(j = 0; j < 256; j++) { - +	for(i = 0; i < 256; i++) {  		/* Get CP0 - CP5 from table */ -		idx = nand_ecc_precalc_table[dat[j]]; +		idx = nand_ecc_precalc_table[*dat++];  		reg1 ^= (idx & 0x3f);  		/* All bit XOR = 1 ? */  		if (idx & 0x40) { -			reg3 ^= (u_char) j; -			reg2 ^= ~((u_char) j); +			reg3 ^= (uint8_t) i; +			reg2 ^= ~((uint8_t) i);  		}  	}  	/* Create non-inverted ECC code from line parity */ -	nand_trans_result(reg2, reg3, ecc_code); +	tmp1  = (reg3 & 0x80) >> 0; /* B7 -> B7 */ +	tmp1 |= (reg2 & 0x80) >> 1; /* B7 -> B6 */ +	tmp1 |= (reg3 & 0x40) >> 1; /* B6 -> B5 */ +	tmp1 |= (reg2 & 0x40) >> 2; /* B6 -> B4 */ +	tmp1 |= (reg3 & 0x20) >> 2; /* B5 -> B3 */ +	tmp1 |= (reg2 & 0x20) >> 3; /* B5 -> B2 */ +	tmp1 |= (reg3 & 0x10) >> 3; /* B4 -> B1 */ +	tmp1 |= (reg2 & 0x10) >> 4; /* B4 -> B0 */ + +	tmp2  = (reg3 & 0x08) << 4; /* B3 -> B7 */ +	tmp2 |= (reg2 & 0x08) << 3; /* B3 -> B6 */ +	tmp2 |= (reg3 & 0x04) << 3; /* B2 -> B5 */ +	tmp2 |= (reg2 & 0x04) << 2; /* B2 -> B4 */ +	tmp2 |= (reg3 & 0x02) << 2; /* B1 -> B3 */ +	tmp2 |= (reg2 & 0x02) << 1; /* B1 -> B2 */ +	tmp2 |= (reg3 & 0x01) << 1; /* B0 -> B1 */ +	tmp2 |= (reg2 & 0x01) << 0; /* B7 -> B0 */  	/* Calculate final ECC code */ -	ecc_code[0] = ~ecc_code[0]; -	ecc_code[1] = ~ecc_code[1]; +#ifdef CONFIG_MTD_NAND_ECC_SMC +	ecc_code[0] = ~tmp2; +	ecc_code[1] = ~tmp1; +#else +	ecc_code[0] = ~tmp1; +	ecc_code[1] = ~tmp2; +#endif  	ecc_code[2] = ((~reg1) << 2) | 0x03; +  	return 0;  } +#endif /* CONFIG_NAND_SPL */ + +static inline int countbits(uint32_t byte) +{ +	int res = 0; + +	for (;byte; byte >>= 1) +		res += byte & 0x01; +	return res; +}  /**   * nand_correct_data - [NAND Interface] Detect and correct bit error(s) @@ -156,88 +148,52 @@ int nand_calculate_ecc(struct mtd_info *mtd, const u_char *dat, u_char *ecc_code   *   * Detect and correct a 1 bit error for 256 byte block   */ -int nand_correct_data(struct mtd_info *mtd, u_char *dat, u_char *read_ecc, u_char *calc_ecc) +int nand_correct_data(struct mtd_info *mtd, u_char *dat, +		      u_char *read_ecc, u_char *calc_ecc)  { -	u_char a, b, c, d1, d2, d3, add, bit, i; +	uint8_t s0, s1, s2; -	/* Do error detection */ -	d1 = calc_ecc[0] ^ read_ecc[0]; -	d2 = calc_ecc[1] ^ read_ecc[1]; -	d3 = calc_ecc[2] ^ read_ecc[2]; - -	if ((d1 | d2 | d3) == 0) { -		/* No errors */ +#ifdef CONFIG_MTD_NAND_ECC_SMC +	s0 = calc_ecc[0] ^ read_ecc[0]; +	s1 = calc_ecc[1] ^ read_ecc[1]; +	s2 = calc_ecc[2] ^ read_ecc[2]; +#else +	s1 = calc_ecc[0] ^ read_ecc[0]; +	s0 = calc_ecc[1] ^ read_ecc[1]; +	s2 = calc_ecc[2] ^ read_ecc[2]; +#endif +	if ((s0 | s1 | s2) == 0)  		return 0; -	} -	else { -		a = (d1 ^ (d1 >> 1)) & 0x55; -		b = (d2 ^ (d2 >> 1)) & 0x55; -		c = (d3 ^ (d3 >> 1)) & 0x54; -		/* Found and will correct single bit error in the data */ -		if ((a == 0x55) && (b == 0x55) && (c == 0x54)) { -			c = 0x80; -			add = 0; -			a = 0x80; -			for (i=0; i<4; i++) { -				if (d1 & c) -					add |= a; -				c >>= 2; -				a >>= 1; -			} -			c = 0x80; -			for (i=0; i<4; i++) { -				if (d2 & c) -					add |= a; -				c >>= 2; -				a >>= 1; -			} -			bit = 0; -			b = 0x04; -			c = 0x80; -			for (i=0; i<3; i++) { -				if (d3 & c) -					bit |= b; -				c >>= 2; -				b >>= 1; -			} -			b = 0x01; -			a = dat[add]; -			a ^= (b << bit); -			dat[add] = a; -			return 1; -		} else { -			i = 0; -			while (d1) { -				if (d1 & 0x01) -					++i; -				d1 >>= 1; -			} -			while (d2) { -				if (d2 & 0x01) -					++i; -				d2 >>= 1; -			} -			while (d3) { -				if (d3 & 0x01) -					++i; -				d3 >>= 1; -			} -			if (i == 1) { -				/* ECC Code Error Correction */ -				read_ecc[0] = calc_ecc[0]; -				read_ecc[1] = calc_ecc[1]; -				read_ecc[2] = calc_ecc[2]; -				return 2; -			} -			else { -				/* Uncorrectable Error */ -				return -1; -			} -		} +	/* Check for a single bit error */ +	if( ((s0 ^ (s0 >> 1)) & 0x55) == 0x55 && +	    ((s1 ^ (s1 >> 1)) & 0x55) == 0x55 && +	    ((s2 ^ (s2 >> 1)) & 0x54) == 0x54) { + +		uint32_t byteoffs, bitnum; + +		byteoffs = (s1 << 0) & 0x80; +		byteoffs |= (s1 << 1) & 0x40; +		byteoffs |= (s1 << 2) & 0x20; +		byteoffs |= (s1 << 3) & 0x10; + +		byteoffs |= (s0 >> 4) & 0x08; +		byteoffs |= (s0 >> 3) & 0x04; +		byteoffs |= (s0 >> 2) & 0x02; +		byteoffs |= (s0 >> 1) & 0x01; + +		bitnum = (s2 >> 5) & 0x04; +		bitnum |= (s2 >> 4) & 0x02; +		bitnum |= (s2 >> 3) & 0x01; + +		dat[byteoffs] ^= (1 << bitnum); + +		return 1;  	} -	/* Should never happen */ +	if(countbits(s0 | ((uint32_t)s1 << 8) | ((uint32_t)s2 <<16)) == 1) +		return 1; +  	return -1;  } diff --git a/drivers/pci_auto.c b/drivers/pci_auto.c index 969167555..f170c2db8 100644 --- a/drivers/pci_auto.c +++ b/drivers/pci_auto.c @@ -34,7 +34,12 @@  void pciauto_region_init(struct pci_region* res)  { -	res->bus_lower = res->bus_start; +	/* +	 * Avoid allocating PCI resources from address 0 -- this is illegal +	 * according to PCI 2.1 and moreover, this is known to cause Linux IDE +	 * drivers to fail. Use a reasonable starting value of 0x1000 instead. +	 */ +	res->bus_lower = res->bus_start ? res->bus_start : 0x1000;  }  void pciauto_region_align(struct pci_region *res, unsigned long size) diff --git a/drivers/smc91111.c b/drivers/smc91111.c index f91e4b984..8061f1297 100644 --- a/drivers/smc91111.c +++ b/drivers/smc91111.c @@ -1538,9 +1538,9 @@ int eth_send(volatile void *packet, int length) {  int smc_get_ethaddr (bd_t * bd)  {  	int env_size, rom_valid, env_present = 0, reg; -	char *s = NULL, *e, *v_mac, es[] = "11:22:33:44:55:66"; +	char *s = NULL, *e, es[] = "11:22:33:44:55:66";  	char s_env_mac[64]; -	uchar v_env_mac[6], v_rom_mac[6]; +	uchar v_env_mac[6], v_rom_mac[6], *v_mac;  	env_size = getenv_r ("ethaddr", s_env_mac, sizeof (s_env_mac));  	if ((env_size > 0) && (env_size < sizeof (es))) {	/* exit if env is bad */ @@ -1563,7 +1563,7 @@ int smc_get_ethaddr (bd_t * bd)  	if (!env_present) {	/* if NO env */  		if (rom_valid) {	/* but ROM is valid */ -			v_mac = (char *)v_rom_mac; +			v_mac = v_rom_mac;  			sprintf (s_env_mac, "%02X:%02X:%02X:%02X:%02X:%02X",  				 v_mac[0], v_mac[1], v_mac[2], v_mac[3],  				 v_mac[4], v_mac[5]); @@ -1573,7 +1573,7 @@ int smc_get_ethaddr (bd_t * bd)  			return (-1);  		}  	} else {		/* good env, don't care ROM */ -		v_mac = (char *)v_env_mac;	/* always use a good env over a ROM */ +		v_mac = v_env_mac;	/* always use a good env over a ROM */  	}  	if (env_present && rom_valid) { /* if both env and ROM are good */ diff --git a/drivers/systemace.c b/drivers/systemace.c index 3848d9c59..7d82c27c6 100644 --- a/drivers/systemace.c +++ b/drivers/systemace.c @@ -211,10 +211,16 @@ static unsigned long systemace_read(int dev, unsigned long start,  		/* Write sector count | ReadMemCardData. */  		ace_writew((trans & 0xff) | 0x0300, 0x14); +/* + * For FPGA configuration via SystemACE is reset unacceptable + * CFGDONE bit in STATUSREG is not set to 1. + */ +#ifndef SYSTEMACE_CONFIG_FPGA  		/* Reset the configruation controller */  		val = ace_readw(0x18);  		val |= 0x0080;  		ace_writew(val, 0x18); +#endif  		retry = trans * 16;  		while (retry > 0) { diff --git a/drivers/tsec.c b/drivers/tsec.c index 3f11eb03b..b4187739c 100644 --- a/drivers/tsec.c +++ b/drivers/tsec.c @@ -5,7 +5,7 @@   * terms of the GNU Public License, Version 2, incorporated   * herein by reference.   * - * Copyright 2004 Freescale Semiconductor. + * Copyright 2004, 2007 Freescale Semiconductor, Inc.   * (C) Copyright 2003, Motorola, Inc.   * author Andy Fleming   * @@ -66,7 +66,11 @@ struct tsec_info_struct {   */  static struct tsec_info_struct tsec_info[] = {  #if defined(CONFIG_MPC85XX_TSEC1) || defined(CONFIG_MPC83XX_TSEC1) +#if defined(CONFIG_MPC8544DS) +	{TSEC1_PHY_ADDR, TSEC_GIGABIT | TSEC_REDUCED, TSEC1_PHYIDX}, +#else  	{TSEC1_PHY_ADDR, TSEC_GIGABIT, TSEC1_PHYIDX}, +#endif  #elif defined(CONFIG_MPC86XX_TSEC1)  	{TSEC1_PHY_ADDR, TSEC_GIGABIT | TSEC_REDUCED, TSEC1_PHYIDX},  #else @@ -381,6 +385,76 @@ uint mii_parse_sr(uint mii_reg, struct tsec_private * priv)  	return 0;  } +/* Generic function which updates the speed and duplex.  If + * autonegotiation is enabled, it uses the AND of the link + * partner's advertised capabilities and our advertised + * capabilities.  If autonegotiation is disabled, we use the + * appropriate bits in the control register. + * + * Stolen from Linux's mii.c and phy_device.c + */ +uint mii_parse_link(uint mii_reg, struct tsec_private *priv) +{ +	/* We're using autonegotiation */ +	if (mii_reg & PHY_BMSR_AUTN_ABLE) { +		uint lpa = 0; +		uint gblpa = 0; + +		/* Check for gigabit capability */ +		if (mii_reg & PHY_BMSR_EXT) { +			/* We want a list of states supported by +			 * both PHYs in the link +			 */ +			gblpa = read_phy_reg(priv, PHY_1000BTSR); +			gblpa &= read_phy_reg(priv, PHY_1000BTCR) << 2; +		} + +		/* Set the baseline so we only have to set them +		 * if they're different +		 */ +		priv->speed = 10; +		priv->duplexity = 0; + +		/* Check the gigabit fields */ +		if (gblpa & (PHY_1000BTSR_1000FD | PHY_1000BTSR_1000HD)) { +			priv->speed = 1000; + +			if (gblpa & PHY_1000BTSR_1000FD) +				priv->duplexity = 1; + +			/* We're done! */ +			return 0; +		} + +		lpa = read_phy_reg(priv, PHY_ANAR); +		lpa &= read_phy_reg(priv, PHY_ANLPAR); + +		if (lpa & (PHY_ANLPAR_TXFD | PHY_ANLPAR_TX)) { +			priv->speed = 100; + +			if (lpa & PHY_ANLPAR_TXFD) +				priv->duplexity = 1; + +		} else if (lpa & PHY_ANLPAR_10FD) +			priv->duplexity = 1; +	} else { +		uint bmcr = read_phy_reg(priv, PHY_BMCR); + +		priv->speed = 10; +		priv->duplexity = 0; + +		if (bmcr & PHY_BMCR_DPLX) +			priv->duplexity = 1; + +		if (bmcr & PHY_BMCR_1000_MBPS) +			priv->speed = 1000; +		else if (bmcr & PHY_BMCR_100_MBPS) +			priv->speed = 100; +	} + +	return 0; +} +  /*   * Parse the BCM54xx status register for speed and duplex information.   * The linux sungem_phy has this information, but in a table format. @@ -718,6 +792,7 @@ static void startup_tsec(struct eth_device *dev)  	/* Start up the PHY */  	if(priv->phyinfo)  		phy_run_commands(priv, priv->phyinfo->startup); +  	adjust_link(dev);  	/* Enable Transmit and Receive */ @@ -1088,6 +1163,27 @@ struct phy_info phy_info_dm9161 = {  			   {miim_end,}  			   },  }; +/* a generic flavor.  */ +struct phy_info phy_info_generic =  { +	0, +	"Unknown/Generic PHY", +	32, +	(struct phy_cmd[]) { /* config */ +		{PHY_BMCR, PHY_BMCR_RESET, NULL}, +		{PHY_BMCR, PHY_BMCR_AUTON|PHY_BMCR_RST_NEG, NULL}, +		{miim_end,} +	}, +	(struct phy_cmd[]) { /* startup */ +		{PHY_BMSR, miim_read, NULL}, +		{PHY_BMSR, miim_read, &mii_parse_sr}, +		{PHY_BMSR, miim_read, &mii_parse_link}, +		{miim_end,} +	}, +	(struct phy_cmd[]) { /* shutdown */ +		{miim_end,} +	} +}; +  uint mii_parse_lxt971_sr2(uint mii_reg, struct tsec_private *priv)  { @@ -1203,6 +1299,7 @@ struct phy_info *phy_info[] = {  	&phy_info_lxt971,  	&phy_info_VSC8244,  	&phy_info_dp83865, +	&phy_info_generic,  	NULL  }; diff --git a/drivers/tsec.h b/drivers/tsec.h index 422bc6692..7bf3dee2b 100644 --- a/drivers/tsec.h +++ b/drivers/tsec.h @@ -7,7 +7,7 @@   *  terms of the GNU Public License, Version 2, incorporated   *  herein by reference.   * - * Copyright 2004 Freescale Semiconductor. + * Copyright 2004, 2007 Freescale Semiconductor, Inc.   * (C) Copyright 2003, Motorola, Inc.   * maintained by Xianghua Xiao (x.xiao@motorola.com)   * author Andy Fleming @@ -65,6 +65,7 @@  #define ECNTRL_INIT_SETTINGS	0x00001000  #define ECNTRL_TBI_MODE         0x00000020  #define ECNTRL_R100		0x00000008 +#define ECNTRL_SGMII_MODE	0x00000002  #define miim_end -2  #define miim_read -1 diff --git a/fs/fat/fat.c b/fs/fat/fat.c index a823b5aba..300760836 100644..100755 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -59,7 +59,8 @@ int disk_read (__u32 startblock, __u32 getsize, __u8 * bufptr)  	if (cur_dev == NULL)  		return -1;  	if (cur_dev->block_read) { -		return cur_dev->block_read (cur_dev->dev, startblock, getsize, (unsigned long *)bufptr); +		return cur_dev->block_read (cur_dev->dev +			, startblock, getsize, (unsigned long *)bufptr);  	}  	return -1;  } @@ -89,8 +90,11 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no)  		part_offset=0;  	}  	else { -#if (CONFIG_COMMANDS & CFG_CMD_IDE) || (CONFIG_COMMANDS & CFG_CMD_SCSI) || \ -    (CONFIG_COMMANDS & CFG_CMD_USB) || defined(CONFIG_SYSTEMACE) +#if ((CONFIG_COMMANDS & CFG_CMD_IDE)	|| \ +     (CONFIG_COMMANDS & CFG_CMD_SCSI)	|| \ +     (CONFIG_COMMANDS & CFG_CMD_USB)	|| \ +     (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \ +     defined(CONFIG_SYSTEMACE)          )  		disk_partition_t info;  		if(!get_partition_info(dev_desc, part_no, &info)) {  			part_offset = info.start; @@ -993,7 +997,8 @@ file_fat_detectfs(void)  	memcpy (vol_label, volinfo.volume_label, 11);  	vol_label[11] = '\0';  	volinfo.fs_type[5]='\0'; -	printf("Partition %d: Filesystem: %s \"%s\"\n",cur_part,volinfo.fs_type,vol_label); +	printf("Partition %d: Filesystem: %s \"%s\"\n" +			,cur_part,volinfo.fs_type,vol_label);  	return 0;  } diff --git a/fs/jffs2/compr_zlib.c b/fs/jffs2/compr_zlib.c index 1b35585ee..d88d0f8f3 100644 --- a/fs/jffs2/compr_zlib.c +++ b/fs/jffs2/compr_zlib.c @@ -45,7 +45,7 @@  long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out,  		      __u32 srclen, __u32 destlen)  { -    return (decompress_block(cpage_out, data_in + 2, ldr_memcpy)); +    return (decompress_block(cpage_out, data_in + 2, (void *) ldr_memcpy));  } diff --git a/include/asm-arm/arch-arm720t/hardware.h b/include/asm-arm/arch-arm720t/hardware.h index 1e9cd4116..3056ca7f6 100644 --- a/include/asm-arm/arch-arm720t/hardware.h +++ b/include/asm-arm/arch-arm720t/hardware.h @@ -36,8 +36,6 @@  /* include armadillo specific hardware file if there was one */  #elif defined(CONFIG_INTEGRATOR) && defined(CONFIG_ARCH_INTEGRATOR)  /* include IntegratorCP/CM720T specific hardware file if there was one */ -#elif defined(CONFIG_LPC2292) -#include <asm-arm/arch-arm720t/lpc2292_registers.h>  #else  #error No hardware file defined for this configuration  #endif diff --git a/cpu/microblaze/enable_int.S b/include/asm-arm/arch-lpc2292/hardware.h index c096c6c3c..fd2b464e3 100644 --- a/cpu/microblaze/enable_int.S +++ b/include/asm-arm/arch-lpc2292/hardware.h @@ -1,7 +1,9 @@ +#ifndef __ASM_ARCH_HARDWARE_H +#define __ASM_ARCH_HARDWARE_H +  /* - * (C) Copyright 2007 Michal Simek - * - * Michal  SIMEK <monstrmonstr.eu> + * Copyright (c) 2004	Cucy Systems (http://www.cucy.com) + * Curt Brune <curt@cucy.com>   *   * See file CREDITS for list of people who contributed to this   * project. @@ -13,7 +15,7 @@   *   * 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 + * 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 @@ -22,17 +24,10 @@   * MA 02111-1307 USA   */ -	.text -	.globl	microblaze_enable_interrupts -	.ent	microblaze_enable_interrupts -	.align	2 -microblaze_enable_interrupts: -	addi	r1, r1, -4 -	swi	r12, r1, 0 -	mfs	r12, rmsr -	ori	r12, r12, 2 -	mts	rmsr, r12 -	lwi	r12, r1, 0 -	rtsd	r15, 8 -	addi	r1, r1, 4 -	.end	microblaze_enable_interrupts +#if defined(CONFIG_LPC2292) +#include <asm-arm/arch-lpc2292/lpc2292_registers.h> +#else +#error No hardware file defined for this configuration +#endif + +#endif /* __ASM_ARCH_HARDWARE_H */ diff --git a/include/asm-arm/arch-arm720t/lpc2292_registers.h b/include/asm-arm/arch-lpc2292/lpc2292_registers.h index 5715f3ef7..5715f3ef7 100644 --- a/include/asm-arm/arch-arm720t/lpc2292_registers.h +++ b/include/asm-arm/arch-lpc2292/lpc2292_registers.h diff --git a/include/asm-arm/arch-arm720t/mmc.h b/include/asm-arm/arch-lpc2292/mmc.h index e664a5f67..e664a5f67 100644 --- a/include/asm-arm/arch-arm720t/mmc.h +++ b/include/asm-arm/arch-lpc2292/mmc.h diff --git a/board/lpc2292sodimm/spi.h b/include/asm-arm/arch-lpc2292/spi.h index 6ae66e8ba..6ae66e8ba 100644 --- a/board/lpc2292sodimm/spi.h +++ b/include/asm-arm/arch-lpc2292/spi.h diff --git a/include/asm-microblaze/asm.h b/include/asm-microblaze/asm.h new file mode 100755 index 000000000..f10f89c94 --- /dev/null +++ b/include/asm-microblaze/asm.h @@ -0,0 +1,98 @@ +/* + * (C) Copyright 2007 Michal Simek + * + * Michal  SIMEK <monstr@monstr.eu> + * + * 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 + */ + +/* FSL macros */ +#define NGET(val, fslnum) \ +	__asm__ __volatile__ ("nget %0, rfsl" #fslnum :"=r" (val)); + +#define GET(val, fslnum) \ +	__asm__ __volatile__ ("get %0, rfsl" #fslnum :"=r" (val)); + +#define NCGET(val, fslnum) \ +	__asm__ __volatile__ ("ncget %0, rfsl" #fslnum :"=r" (val)); + +#define CGET(val, fslnum) \ +	__asm__ __volatile__ ("cget %0, rfsl" #fslnum :"=r" (val)); + +#define NPUT(val, fslnum) \ +	__asm__ __volatile__ ("nput %0, rfsl" #fslnum ::"r" (val)); + +#define PUT(val, fslnum) \ +	__asm__ __volatile__ ("put %0, rfsl" #fslnum ::"r" (val)); + +#define NCPUT(val, fslnum) \ +	__asm__ __volatile__ ("ncput %0, rfsl" #fslnum ::"r" (val)); + +#define CPUT(val, fslnum) \ +	__asm__ __volatile__ ("cput %0, rfsl" #fslnum ::"r" (val)); + +/* CPU dependent */ +/* machine status register */ +#define MFS(val, reg) \ +	__asm__ __volatile__ ("mfs %0," #reg :"=r" (val)); + +#define MTS(val, reg) \ +	__asm__ __volatile__ ("mts " #reg ", %0"::"r" (val)); + +/* get return address from interrupt */ +#define R14(val) \ +	__asm__ __volatile__ ("addi %0, r14, 0":"=r" (val)); + +#define NOP	__asm__ __volatile__ ("nop"); + +/* use machine status registe USE_MSR_REG */ +#ifdef XILINX_USE_MSR_INSTR +#define MSRSET(val) \ +	__asm__ __volatile__ ("msrset r0," #val ); + +#define MSRCLR(val) \ +	__asm__ __volatile__ ("msrclr r0," #val ); + +#else +#define MSRSET(val)						\ +{								\ +	register unsigned tmp;					\ +	__asm__ __volatile__ ("					\ +			mfs 	%0, rmsr;			\ +			ori	%0, %0, "#val";			\ +			mts	rmsr, %0;			\ +			nop;"					\ +			: "=r" (tmp)				\ +			: "d" (val)				\ +			: "memory");				\ +} + +#define MSRCLR(val)						\ +{								\ +	register unsigned tmp;					\ +	__asm__ __volatile__ ("					\ +			mfs 	%0, rmsr;			\ +			andi	%0, %0, ~"#val";		\ +			mts	rmsr, %0;			\ +			nop;"					\ +			: "=r" (tmp)				\ +			: "d" (val)				\ +			: "memory");				\ +} +#endif diff --git a/include/asm-microblaze/microblaze_intc.h b/include/asm-microblaze/microblaze_intc.h index 6635aeacb..4c385aa24 100644 --- a/include/asm-microblaze/microblaze_intc.h +++ b/include/asm-microblaze/microblaze_intc.h @@ -38,3 +38,6 @@ struct irq_action {  	void *arg;  	int count; /* number of interrupt */  }; + +void install_interrupt_handler (int irq, interrupt_handler_t * hdlr, +				       void *arg); diff --git a/include/asm-ppc/e300.h b/include/asm-ppc/e300.h index ff9512f20..d1bb159ae 100644 --- a/include/asm-ppc/e300.h +++ b/include/asm-ppc/e300.h @@ -6,19 +6,9 @@  #ifndef	__E300_H__  #define __E300_H__ -/* - * e300 Processor Version & Revision Numbers - */ -#define PVR_83xx 0x80830000 -#define PVR_8349_REV10 (PVR_83xx | 0x0010) -#define PVR_8349_REV11 (PVR_83xx | 0x0011) -#define PVR_8360_REV10 (PVR_83xx | 0x0020) -#define PVR_8360_REV11 (PVR_83xx | 0x0020) - -#if defined(CONFIG_MPC832X) -#undef PVR_83xx -#define PVR_83xx 0x80840000 -#endif +#define PVR_E300C1	0x80830000 +#define PVR_E300C2	0x80840000 +#define PVR_E300C3	0x80850000  /*   * Hardware Implementation-Dependent Register 0 (HID0) diff --git a/include/asm-ppc/global_data.h b/include/asm-ppc/global_data.h index 26bc875f8..cd2463643 100644 --- a/include/asm-ppc/global_data.h +++ b/include/asm-ppc/global_data.h @@ -55,11 +55,13 @@ typedef	struct	global_data {  #if defined(CONFIG_MPC83XX)  	/* There are other clocks in the MPC83XX */  	u32 csb_clk; -#if defined (CONFIG_MPC834X) +#if defined (CONFIG_MPC834X) || defined(CONFIG_MPC831X)  	u32 tsec1_clk;  	u32 tsec2_clk; -	u32 usbmph_clk;  	u32 usbdr_clk; +#endif +#if defined (CONFIG_MPC834X) +	u32 usbmph_clk;  #endif /* CONFIG_MPC834X */  	u32 core_clk;  	u32 i2c1_clk; diff --git a/include/asm-ppc/immap_83xx.h b/include/asm-ppc/immap_83xx.h index 5e088d67d..0de93385f 100644 --- a/include/asm-ppc/immap_83xx.h +++ b/include/asm-ppc/immap_83xx.h @@ -206,7 +206,9 @@ typedef struct pmc83xx {  	u32 pmccr;		/* PMC Configuration Register */  	u32 pmcer;		/* PMC Event Register */  	u32 pmcmr;		/* PMC Mask Register */ -	u8 res0[0xF4]; +	u32 pmccr1;		/* PMC Configuration Register 1 */ +	u32 pmccr2;		/* PMC Configuration Register 2 */ +	u8 res0[0xEC];  } pmc83xx_t;  /* @@ -355,7 +357,8 @@ typedef struct lbus83xx {  	u8 res2[0x8];  	u32 mrtpr;		/* Memory Refresh Timer Prescaler Register */  	u32 mdr;		/* UPM Data Register */ -	u8 res3[0x8]; +	u8 res3[0x4]; +	u32 lsor;		/* Special Operation Initiation Register */  	u32 lsdmr;		/* SDRAM Mode Register */  	u8 res4[0x8];  	u32 lurt;		/* UPM Refresh Timer */ @@ -369,8 +372,14 @@ typedef struct lbus83xx {  	u8 res6[0xC];  	u32 lbcr;		/* Configuration Register */  	u32 lcrr;		/* Clock Ratio Register */ -	u8 res7[0x28]; -	u8 res8[0xF00]; +	u8 res7[0x8]; +	u32 fmr;		/* Flash Mode Register */ +	u32 fir;		/* Flash Instruction Register */ +	u32 fcr;		/* Flash Command Register */ +	u32 fbar;		/* Flash Block Addr Register */ +	u32 fpar;		/* Flash Page Addr Register */ +	u32 fbcr;		/* Flash Byte Count Register */ +	u8 res8[0xF08];  } lbus83xx_t;  /* @@ -527,7 +536,7 @@ typedef struct pcictrl83xx {   * USB   */  typedef struct usb83xx { -	u8 fixme[0x2000]; +	u8 fixme[0x1000];  } usb83xx_t;  /* @@ -574,7 +583,42 @@ typedef struct immap {  	ios83xx_t		ios;		/* Sequencer */  	pcictrl83xx_t		pci_ctrl[2];	/* PCI Controller Control and Status Registers */  	u8			res5[0x19900]; -	usb83xx_t		usb; +	usb83xx_t		usb[2]; +	tsec83xx_t		tsec[2]; +	u8			res6[0xA000]; +	security83xx_t		security; +	u8			res7[0xC0000]; +} immap_t; + +#elif defined(CONFIG_MPC831X) +typedef struct immap { +	sysconf83xx_t		sysconf;	/* System configuration */ +	wdt83xx_t		wdt;		/* Watch Dog Timer (WDT) Registers */ +	rtclk83xx_t		rtc;		/* Real Time Clock Module Registers */ +	rtclk83xx_t		pit;		/* Periodic Interval Timer */ +	gtm83xx_t		gtm[2];		/* Global Timers Module */ +	ipic83xx_t		ipic;		/* Integrated Programmable Interrupt Controller */ +	arbiter83xx_t		arbiter;	/* System Arbiter Registers */ +	reset83xx_t		reset;		/* Reset Module */ +	clk83xx_t		clk;		/* System Clock Module */ +	pmc83xx_t		pmc;		/* Power Management Control Module */ +	gpio83xx_t		gpio[1];	/* General purpose I/O module */ +	u8			res0[0x1300]; +	ddr83xx_t		ddr;		/* DDR Memory Controller Memory */ +	fsl_i2c_t		i2c[2];		/* I2C Controllers */ +	u8			res1[0x1300]; +	duart83xx_t		duart[2];	/* DUART */ +	u8			res2[0x900]; +	lbus83xx_t		lbus;		/* Local Bus Controller Registers */ +	u8			res3[0x1000]; +	spi83xx_t		spi;		/* Serial Peripheral Interface */ +	dma83xx_t		dma;		/* DMA */ +	pciconf83xx_t		pci_conf[1];	/* PCI Software Configuration Registers */ +	u8			res4[0x80]; +	ios83xx_t		ios;		/* Sequencer */ +	pcictrl83xx_t		pci_ctrl[1];	/* PCI Controller Control and Status Registers */ +	u8			res5[0x1aa00]; +	usb83xx_t		usb[1];  	tsec83xx_t		tsec[2];  	u8			res6[0xA000];  	security83xx_t		security; diff --git a/include/asm-ppc/io.h b/include/asm-ppc/io.h index bbc9ba0be..03289bcc2 100644 --- a/include/asm-ppc/io.h +++ b/include/asm-ppc/io.h @@ -105,6 +105,11 @@ static inline void sync(void)  	__asm__ __volatile__ ("sync" : : : "memory");  } +static inline void isync(void) +{ +	__asm__ __volatile__ ("isync" : : : "memory"); +} +  /* Enforce in-order execution of data I/O.   * No distinction between read/write on PPC; use eieio for all three.   */ @@ -114,74 +119,90 @@ static inline void sync(void)  /*   * 8, 16 and 32 bit, big and little endian I/O operations, with barrier. + * + * Read operations have additional twi & isync to make sure the read + * is actually performed (i.e. the data has come back) before we start + * executing any following instructions.   */ -extern inline int in_8(volatile u8 *addr) +#define __iomem +extern inline int in_8(const volatile unsigned char __iomem *addr)  { -    int ret; +	int ret; -    __asm__ __volatile__("lbz%U1%X1 %0,%1; eieio" : "=r" (ret) : "m" (*addr)); -    return ret; +	__asm__ __volatile__( +		"sync; lbz%U1%X1 %0,%1;\n" +		"twi 0,%0,0;\n" +		"isync" : "=r" (ret) : "m" (*addr)); +	return ret;  } -extern inline void out_8(volatile u8 *addr, int val) +extern inline void out_8(volatile unsigned char __iomem *addr, int val)  { -    __asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); +	__asm__ __volatile__("stb%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val));  } -extern inline int in_le16(volatile u16 *addr) +extern inline int in_le16(const volatile unsigned short __iomem *addr)  { -    int ret; +	int ret; -    __asm__ __volatile__("lhbrx %0,0,%1; eieio" : "=r" (ret) : -		  "r" (addr), "m" (*addr)); -    return ret; +	__asm__ __volatile__("sync; lhbrx %0,0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : +			      "r" (addr), "m" (*addr)); +	return ret;  } -extern inline int in_be16(volatile u16 *addr) +extern inline int in_be16(const volatile unsigned short __iomem *addr)  { -    int ret; +	int ret; -    __asm__ __volatile__("lhz%U1%X1 %0,%1; eieio" : "=r" (ret) : "m" (*addr)); -    return ret; +	__asm__ __volatile__("sync; lhz%U1%X1 %0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : "m" (*addr)); +	return ret;  } -extern inline void out_le16(volatile u16 *addr, int val) +extern inline void out_le16(volatile unsigned short __iomem *addr, int val)  { -    __asm__ __volatile__("sthbrx %1,0,%2; eieio" : "=m" (*addr) : -		  "r" (val), "r" (addr)); +	__asm__ __volatile__("sync; sthbrx %1,0,%2" : "=m" (*addr) : +			      "r" (val), "r" (addr));  } -extern inline void out_be16(volatile u16 *addr, int val) +extern inline void out_be16(volatile unsigned short __iomem *addr, int val)  { -    __asm__ __volatile__("sth%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); +	__asm__ __volatile__("sync; sth%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));  } -extern inline unsigned in_le32(volatile u32 *addr) +extern inline unsigned in_le32(const volatile unsigned __iomem *addr)  { -    unsigned ret; +	unsigned ret; -    __asm__ __volatile__("lwbrx %0,0,%1; eieio" : "=r" (ret) : -		 "r" (addr), "m" (*addr)); -    return ret; +	__asm__ __volatile__("sync; lwbrx %0,0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : +			     "r" (addr), "m" (*addr)); +	return ret;  } -extern inline unsigned in_be32(volatile u32 *addr) +extern inline unsigned in_be32(const volatile unsigned __iomem *addr)  { -    unsigned ret; +	unsigned ret; -    __asm__ __volatile__("lwz%U1%X1 %0,%1; eieio" : "=r" (ret) : "m" (*addr)); -    return ret; +	__asm__ __volatile__("sync; lwz%U1%X1 %0,%1;\n" +			     "twi 0,%0,0;\n" +			     "isync" : "=r" (ret) : "m" (*addr)); +	return ret;  } -extern inline void out_le32(volatile unsigned *addr, int val) +extern inline void out_le32(volatile unsigned __iomem *addr, int val)  { -    __asm__ __volatile__("stwbrx %1,0,%2; eieio" : "=m" (*addr) : -		 "r" (val), "r" (addr)); +	__asm__ __volatile__("sync; stwbrx %1,0,%2" : "=m" (*addr) : +			     "r" (val), "r" (addr));  } -extern inline void out_be32(volatile unsigned *addr, int val) +extern inline void out_be32(volatile unsigned __iomem *addr, int val)  { -    __asm__ __volatile__("stw%U0%X0 %1,%0; eieio" : "=m" (*addr) : "r" (val)); +	__asm__ __volatile__("sync; stw%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));  }  #endif diff --git a/include/asm-ppc/mmu.h b/include/asm-ppc/mmu.h index b226825ee..48fd98295 100644 --- a/include/asm-ppc/mmu.h +++ b/include/asm-ppc/mmu.h @@ -396,8 +396,8 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);  #define BOOKE_PAGESZ_16M        7  #define BOOKE_PAGESZ_64M        8  #define BOOKE_PAGESZ_256M       9 -#define BOOKE_PAGESZ_1GB        10 -#define BOOKE_PAGESZ_4GB        11 +#define BOOKE_PAGESZ_1G		10 +#define BOOKE_PAGESZ_4G		11  #if defined(CONFIG_MPC86xx)  #define LAWBAR_BASE_ADDR	0x00FFFFFF @@ -413,6 +413,7 @@ extern int write_bat(ppc_bat_t bat, unsigned long upper, unsigned long lower);  #define LAWAR_TRGT_IF_PCI1	0x00000000  #define LAWAR_TRGT_IF_PCIX	0x00000000  #define LAWAR_TRGT_IF_PCI2	0x00100000 +#define LAWAR_TRGT_IF_PEX	0x00200000  #define LAWAR_TRGT_IF_LBC	0x00400000  #define LAWAR_TRGT_IF_CCSR	0x00800000  #define LAWAR_TRGT_IF_DDR_INTERLEAVED 0x00B00000 diff --git a/include/asm-ppc/processor.h b/include/asm-ppc/processor.h index 058596275..5efc3ee2c 100644 --- a/include/asm-ppc/processor.h +++ b/include/asm-ppc/processor.h @@ -232,6 +232,9 @@  #define   HID0_BHTE	(1<<2)		/* Branch History Table Enable */  #define   HID0_BTCD	(1<<1)		/* Branch target cache disable */  #define SPRN_HID1	0x3F1	/* Hardware Implementation Register 1 */ +#define	  HID1_RFXE	(1<<17)		/* Read Fault Exception Enable */ +#define	  HID1_ASTME	(1<<13)		/* Address bus streaming mode */ +#define	  HID1_ABE	(1<<12)		/* Address broadcast enable */  #define SPRN_IABR	0x3F2	/* Instruction Address Breakpoint Register */  #ifndef CONFIG_BOOKE  #define SPRN_IAC1	0x3F4	/* Instruction Address Compare 1 */ @@ -415,10 +418,12 @@  #define SPRN_IVOR15	0x19f	/* Interrupt Vector Offset Register 15 */  /* e500 definitions */ -#define SPRN_L1CSR0     0x3f2   /* L1 Cache Control and Status Register 0 */ +#define SPRN_L1CSR0     0x3f2   /* L1 Data Cache Control and Status Register 0 */ +#define   L1CSR0_CPE            0x00010000	/* Data Cache Parity Enable */  #define   L1CSR0_DCFI           0x00000002      /* Data Cache Flash Invalidate */  #define   L1CSR0_DCE            0x00000001      /* Data Cache Enable */ -#define SPRN_L1CSR1     0x3f3   /* L1 Cache Control and Status Register 1 */ +#define SPRN_L1CSR1     0x3f3   /* L1 Instruction Cache Control and Status Register 1 */ +#define   L1CSR1_CPE            0x00010000	/* Instruction Cache Parity Enable */  #define   L1CSR1_ICFI           0x00000002      /* Instruction Cache Flash Invalidate */  #define   L1CSR1_ICE            0x00000001      /* Instruction Cache Enable */ @@ -701,8 +706,6 @@  #define SVR_MJREV(svr)	(((svr) >>  4) & 0x0F)   /* Major SOC design revision indicator */  #define SVR_MNREV(svr)	(((svr) >>  0) & 0x0F)   /* Minor SOC design revision indicator */ -/* System-On-Chip Version Numbers (version field only) */ -#define SVR_MPC5200	0x8011  /* Processor Version Register */ @@ -813,6 +816,12 @@  #define PVR_8260_HIP7R1 0x80822013  #define PVR_8260_HIP7RA	0x80822014 +/* + * MPC 52xx + */ +#define PVR_5200	0x80822011 +#define PVR_5200B	0x80822014 +  /*   * System Version Register @@ -840,9 +849,12 @@  #define SVR_8560	0x8070  #define SVR_8555	0x8079  #define SVR_8541	0x807A +#define SVR_8544	0x8034 +#define SVR_8544_E	0x803C  #define SVR_8548	0x8031  #define SVR_8548_E	0x8039  #define SVR_8641	0x8090 +#define SVR_8568_E	0x807D  /* I am just adding a single entry for 8260 boards.  I think we may be diff --git a/include/cmd_confdefs.h b/include/cmd_confdefs.h index cf3658310..b3ccdcea2 100644 --- a/include/cmd_confdefs.h +++ b/include/cmd_confdefs.h @@ -94,6 +94,7 @@  #define CFG_CMD_EXT2	0x1000000000000000ULL	/* EXT2 Support			*/  #define CFG_CMD_SNTP	0x2000000000000000ULL	/* SNTP support			*/  #define CFG_CMD_DISPLAY	0x4000000000000000ULL	/* Display support		*/ +#define CFG_CMD_MFSL	0x8000000000000000ULL	/* FSL support for Microblaze	*/  #define CFG_CMD_ALL	0xFFFFFFFFFFFFFFFFULL	/* ALL commands			*/ @@ -125,6 +126,7 @@  			CFG_CMD_IRQ	| \  			CFG_CMD_JFFS2	| \  			CFG_CMD_KGDB	| \ +			CFG_CMD_MFSL	| \  			CFG_CMD_MII	| \  			CFG_CMD_MMC	| \  			CFG_CMD_NAND	| \ diff --git a/include/common.h b/include/common.h index b162dbd7c..3c4b37b0d 100644 --- a/include/common.h +++ b/include/common.h @@ -402,6 +402,10 @@ void		ppcDcbi(unsigned long value);  void		ppcSync(void);  void		ppcDcbz(unsigned long value);  #endif +#if defined (CONFIG_MICROBLAZE) +unsigned short	in16(unsigned int); +void		out16(unsigned int, unsigned short value); +#endif  #if defined (CONFIG_MPC83XX)  void		ppcDWload(unsigned int *addr, unsigned int *ret); @@ -440,8 +444,6 @@ int	sdram_adjust_866 (void);  int	adjust_sdram_tbs_8xx (void);  #if defined(CONFIG_8260)  int	prt_8260_clks (void); -#elif defined(CONFIG_MPC83XX) -int print_clock_conf(void);  #elif defined(CONFIG_MPC5xxx)  int	prt_mpc5xxx_clks (void);  #endif diff --git a/include/configs/BC3450.h b/include/configs/BC3450.h index 5b54f30e0..bc30977fd 100644 --- a/include/configs/BC3450.h +++ b/include/configs/BC3450.h @@ -282,17 +282,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet - * hasn't been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock + *  of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#if defined(CFG_IPBSPEED_133) -# define CFG_PCISPEED_66			/* define for 66MHz speed */ +#if defined(CFG_IPBCLK_EQUALS_XLBCLK) +# define CFG_PCICLK_EQUALS_IPBCLK_DIV2	/* define for 66MHz speed */  #endif  /* @@ -488,7 +488,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  # define CFG_BOOTCS_CFG		0x0008DF30	/* for pci_clk	= 66 MHz */  #else  # define CFG_BOOTCS_CFG		0x0004DF30	/* for pci_clk = 33 MHz	 */ diff --git a/include/configs/IceCube.h b/include/configs/IceCube.h index 0d3825413..73be06950 100644 --- a/include/configs/IceCube.h +++ b/include/configs/IceCube.h @@ -167,9 +167,9 @@   * IPB Bus clocking configuration.   */  #if defined(CONFIG_LITE5200B) -#define CFG_IPBSPEED_133 	/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK 	/* define for 133MHz speed */  #else -#undef CFG_IPBSPEED_133   	/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK   	/* define for 133MHz speed */  #endif  #endif /* CONFIG_MPC5200 */ @@ -182,7 +182,7 @@  #define OF_CPU			"PowerPC,5200@0"  #define OF_SOC			"soc5200@f0000000" -#define OF_TBCLK		(bd->bi_busfreq / 8) +#define OF_TBCLK		(bd->bi_busfreq / 4)  #define OF_STDOUT_PATH		"/soc5200@f0000000/serial@2000"  /* diff --git a/include/configs/MPC8313ERDB.h b/include/configs/MPC8313ERDB.h new file mode 100644 index 000000000..697631345 --- /dev/null +++ b/include/configs/MPC8313ERDB.h @@ -0,0 +1,561 @@ +/* + * Copyright (C) Freescale Semiconductor, Inc. 2006. + * + * 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 + */ +/* + * mpc8313epb board configuration file + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* + * High Level Configuration Options + */ +#define CONFIG_E300		1 +#define CONFIG_MPC83XX		1 +#define CONFIG_MPC831X		1 +#define CONFIG_MPC8313		1 +#define CONFIG_MPC8313ERDB	1 + +#define CONFIG_PCI +#define CONFIG_83XX_GENERIC_PCI + +#ifdef CFG_66MHZ +#define CONFIG_83XX_CLKIN	66666667	/* in Hz */ +#elif defined(CFG_33MHZ) +#define CONFIG_83XX_CLKIN	33333333	/* in Hz */ +#else +#error Unknown oscillator frequency. +#endif + +#define CONFIG_SYS_CLK_FREQ	CONFIG_83XX_CLKIN + +#define CONFIG_BOARD_EARLY_INIT_F		/* call board_pre_init */ + +#define CFG_IMMR		0xE0000000 + +#define CFG_MEMTEST_START	0x00001000 +#define CFG_MEMTEST_END		0x07f00000 + +/* Early revs of this board will lock up hard when attempting + * to access the PMC registers, unless a JTAG debugger is + * connected, or some resistor modifications are made. + */ +#define CFG_8313ERDB_BROKEN_PMC 1 + +#define CFG_ACR_PIPE_DEP	3	/* Arbiter pipeline depth (0-3) */ +#define CFG_ACR_RPTCNT		3	/* Arbiter repeat count (0-7) */ + +/* + * DDR Setup + */ +#define CFG_DDR_BASE		0x00000000	/* DDR is system memory*/ +#define CFG_SDRAM_BASE		CFG_DDR_BASE +#define CFG_DDR_SDRAM_BASE	CFG_DDR_BASE + +/* + * Manually set up DDR parameters, as this board does not + * seem to have the SPD connected to I2C. + */ +#define CFG_DDR_SIZE		128		/* MB */ +#define CFG_DDR_CONFIG		( CSCONFIG_EN | CSCONFIG_AP \ +				| 0x00040000 /* TODO */ \ +				| CSCONFIG_ROW_BIT_13 | CSCONFIG_COL_BIT_10 ) +				/* 0x80840102 */ + +#define CFG_DDR_TIMING_3	0x00000000 +#define CFG_DDR_TIMING_0	( ( 0 << TIMING_CFG0_RWT_SHIFT ) \ +				| ( 0 << TIMING_CFG0_WRT_SHIFT ) \ +				| ( 0 << TIMING_CFG0_RRT_SHIFT ) \ +				| ( 0 << TIMING_CFG0_WWT_SHIFT ) \ +				| ( 2 << TIMING_CFG0_ACT_PD_EXIT_SHIFT ) \ +				| ( 2 << TIMING_CFG0_PRE_PD_EXIT_SHIFT ) \ +				| ( 8 << TIMING_CFG0_ODT_PD_EXIT_SHIFT ) \ +				| ( 2 << TIMING_CFG0_MRS_CYC_SHIFT ) ) +				/* 0x00220802 */ +#define CFG_DDR_TIMING_1	( ( 3 << TIMING_CFG1_PRETOACT_SHIFT ) \ +				| ( 9 << TIMING_CFG1_ACTTOPRE_SHIFT ) \ +				| ( 3 << TIMING_CFG1_ACTTORW_SHIFT ) \ +				| ( 5 << TIMING_CFG1_CASLAT_SHIFT ) \ +				| (13 << TIMING_CFG1_REFREC_SHIFT ) \ +				| ( 3 << TIMING_CFG1_WRREC_SHIFT ) \ +				| ( 2 << TIMING_CFG1_ACTTOACT_SHIFT ) \ +				| ( 2 << TIMING_CFG1_WRTORD_SHIFT ) ) +				/* 0x3935d322 */ +#define CFG_DDR_TIMING_2	( ( 0 << TIMING_CFG2_ADD_LAT_SHIFT ) \ +				| (31 << TIMING_CFG2_CPO_SHIFT ) \ +				| ( 2 << TIMING_CFG2_WR_LAT_DELAY_SHIFT ) \ +				| ( 2 << TIMING_CFG2_RD_TO_PRE_SHIFT ) \ +				| ( 2 << TIMING_CFG2_WR_DATA_DELAY_SHIFT ) \ +				| ( 3 << TIMING_CFG2_CKE_PLS_SHIFT ) \ +				| (10 << TIMING_CFG2_FOUR_ACT_SHIFT) ) +				/* 0x0f9048ca */ /* P9-45,may need tuning */ +#define CFG_DDR_INTERVAL	( ( 800 << SDRAM_INTERVAL_REFINT_SHIFT ) \ +				| ( 100 << SDRAM_INTERVAL_BSTOPRE_SHIFT ) ) +				/* 0x03200064 */ +#if defined(CONFIG_DDR_2T_TIMING) +#define CFG_SDRAM_CFG		( SDRAM_CFG_SREN \ +				| 3 << SDRAM_CFG_SDRAM_TYPE_SHIFT \ +				| SDRAM_CFG_2T_EN \ +				| SDRAM_CFG_DBW_32 ) +#else +#define CFG_SDRAM_CFG		( SDRAM_CFG_SREN \ +				| 3 << SDRAM_CFG_SDRAM_TYPE_SHIFT \ +				| SDRAM_CFG_32_BE ) +				/* 0x43080000 */ +#endif +#define CFG_SDRAM_CFG2		0x00401000; +/* set burst length to 8 for 32-bit data path */ +#define CFG_DDR_MODE		( ( 0x4440 << SDRAM_MODE_ESD_SHIFT ) \ +				| ( 0x0232 << SDRAM_MODE_SD_SHIFT ) ) +				/* 0x44400232 */ +#define CFG_DDR_MODE_2		0x8000C000; + +#define CFG_DDR_CLK_CNTL	DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05 +				/*0x02000000*/ +#define CFG_DDRCDR_VALUE	( DDRCDR_EN \ +				| DDRCDR_PZ_NOMZ \ +				| DDRCDR_NZ_NOMZ \ +				| DDRCDR_M_ODR ) + +/* + * FLASH on the Local Bus + */ +#define CFG_FLASH_CFI				/* use the Common Flash Interface */ +#define CFG_FLASH_CFI_DRIVER			/* use the CFI driver */ +#define CFG_FLASH_BASE		0xFE000000	/* start of FLASH   */ +#define CFG_FLASH_SIZE		8		/* flash size in MB */ +#define CFG_FLASH_EMPTY_INFO			/* display empty sectors */ +#define CFG_FLASH_USE_BUFFER_WRITE		/* buffer up multiple bytes */ + +#define CFG_BR0_PRELIM		(CFG_FLASH_BASE |	/* flash Base address */ \ +				(2 << BR_PS_SHIFT) |	/* 16 bit port size */ \ +				BR_V)			/* valid */ +#define CFG_OR0_PRELIM		( 0xFF000000		/* 16 MByte */ \ +				| OR_GPCM_XACS \ +				| OR_GPCM_SCY_9 \ +				| OR_GPCM_EHTR \ +				| OR_GPCM_EAD ) +				/* 0xFF006FF7	TODO SLOW 16 MB flash size */ +#define CFG_LBLAWBAR0_PRELIM	CFG_FLASH_BASE	/* window base at flash base */ +#define CFG_LBLAWAR0_PRELIM	0x80000017	/* 16 MB window size */ + +#define CFG_MAX_FLASH_BANKS	1		/* number of banks */ +#define CFG_MAX_FLASH_SECT	135		/* sectors per device */ + +#define CFG_FLASH_ERASE_TOUT	60000	/* Flash Erase Timeout (ms) */ +#define CFG_FLASH_WRITE_TOUT	500	/* Flash Write Timeout (ms) */ + +#define CFG_MONITOR_BASE	TEXT_BASE	/* start of monitor */ + +#if (CFG_MONITOR_BASE < CFG_FLASH_BASE) +#define CFG_RAMBOOT +#endif + +#define CFG_INIT_RAM_LOCK	1 +#define CFG_INIT_RAM_ADDR	0xFD000000	/* Initial RAM address */ +#define CFG_INIT_RAM_END	0x1000		/* End of used area in RAM*/ + +#define CFG_GBL_DATA_SIZE	0x100		/* num bytes initial data */ +#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET + +#define CFG_MONITOR_LEN		(256 * 1024)	/* Reserve 256 kB for Mon */ +#define CFG_MALLOC_LEN		(512 * 1024)	/* Reserved for malloc */ + +/* + * Local Bus LCRR and LBCR regs + */ +#define CFG_LCRR	LCRR_EADC_1 | LCRR_CLKDIV_2	/* 0x00010002 */ +#define CFG_LBC_LBCR	( 0x00040000 /* TODO */ \ +			| (0xFF << LBCR_BMT_SHIFT) \ +			| 0xF )	/* 0x0004ff0f */ + +#define CFG_LBC_MRTPR	0x20000000  /*TODO */ 	/* LB refresh timer prescal, 266MHz/32 */ + +/* drivers/nand/nand.c */ +#define CFG_NAND_BASE		0xE2800000	/* 0xF0000000 */ +#define CFG_MAX_NAND_DEVICE	1 +#define NAND_MAX_CHIPS		1 +#define CONFIG_MTD_NAND_VERIFY_WRITE + +#define CFG_BR1_PRELIM		( CFG_NAND_BASE \ +				| (2<<BR_DECC_SHIFT)	/* Use HW ECC */ \ +				| BR_PS_8		/* Port Size = 8 bit */ \ +				| BR_MS_FCM		/* MSEL = FCM */ \ +				| BR_V )		/* valid */ +#define CFG_OR1_PRELIM		( 0xFFFF8000		/* length 32K */ \ +				| OR_FCM_CSCT \ +				| OR_FCM_CST \ +				| OR_FCM_CHT \ +				| OR_FCM_SCY_1 \ +				| OR_FCM_TRLX \ +				| OR_FCM_EHTR ) +				/* 0xFFFF8396 */ +#define CFG_LBLAWBAR1_PRELIM	CFG_NAND_BASE +#define CFG_LBLAWAR1_PRELIM	0x8000000E	/* 32KB  */ + +#define CFG_VSC7385_BASE	0xF0000000 + +#define CONFIG_VSC7385_ENET			/* VSC7385 ethernet support */ +#define CFG_BR2_PRELIM		0xf0000801	/* VSC7385 Base address */ +#define CFG_OR2_PRELIM		0xfffe09ff	/* VSC7385, 128K bytes*/ +#define CFG_LBLAWBAR2_PRELIM	CFG_VSC7385_BASE/* Access window base at VSC7385 base */ +#define CFG_LBLAWAR2_PRELIM	0x80000010	/* Access window size 128K */ + +/* local bus read write buffer mapping */ +#define CFG_BR3_PRELIM		0xFA000801	/* map at 0xFA000000 */ +#define CFG_OR3_PRELIM		0xFFFF8FF7	/* 32kB */ +#define CFG_LBLAWBAR3_PRELIM	0xFA000000 +#define CFG_LBLAWAR3_PRELIM	0x8000000E	/* 32KB  */ + +/* pass open firmware flat tree */ +#define CONFIG_OF_FLAT_TREE	1 +#define CONFIG_OF_BOARD_SETUP	1 + +/* maximum size of the flat tree (8K) */ +#define OF_FLAT_TREE_MAX_SIZE	8192 + +#define OF_CPU			"PowerPC,8313@0" +#define OF_SOC			"soc8313@e0000000" +#define OF_TBCLK		(bd->bi_busfreq / 4) +#define OF_STDOUT_PATH		"/soc8313@e0000000/serial@4500" + +/* + * Serial Port + */ +#define CONFIG_CONS_INDEX	1 +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE	1 +#define CFG_NS16550_CLK		get_bus_freq(0) + +#define CFG_BAUDRATE_TABLE	\ +	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200} + +#define CFG_NS16550_COM1	(CFG_IMMR+0x4500) +#define CFG_NS16550_COM2	(CFG_IMMR+0x4600) + +/* Use the HUSH parser */ +#define CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " + +/* I2C */ +#define CONFIG_HARD_I2C			/* I2C with hardware support*/ +#define CONFIG_FSL_I2C +#define CONFIG_I2C_MULTI_BUS +#define CONFIG_I2C_CMD_TREE +#define CFG_I2C_SPEED		400000	/* I2C speed and slave address */ +#define CFG_I2C_SLAVE		0x7F +#define CFG_I2C_NOPROBES	{0x69}	/* Don't probe these addrs */ +#define CFG_I2C_OFFSET		0x3000 +#define CFG_I2C2_OFFSET		0x3100 + +/* TSEC */ +#define CFG_TSEC1_OFFSET	0x24000 +#define CFG_TSEC1		(CFG_IMMR+CFG_TSEC1_OFFSET) +#define CFG_TSEC2_OFFSET	0x25000 +#define CFG_TSEC2		(CFG_IMMR+CFG_TSEC2_OFFSET) +#define CONFIG_NET_MULTI + +/* + * General PCI + * Addresses are mapped 1-1. + */ +#define CFG_PCI1_MEM_BASE	0x80000000 +#define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE +#define CFG_PCI1_MEM_SIZE	0x10000000	/* 256M */ +#define CFG_PCI1_MMIO_BASE	0x90000000 +#define CFG_PCI1_MMIO_PHYS	CFG_PCI1_MMIO_BASE +#define CFG_PCI1_MMIO_SIZE	0x10000000	/* 256M */ +#define CFG_PCI1_IO_BASE	0x00000000 +#define CFG_PCI1_IO_PHYS	0xE2000000 +#define CFG_PCI1_IO_SIZE	0x00100000	/* 1M */ + +#define CONFIG_PCI_PNP		/* do pci plug-and-play */ +#define CFG_PCI_SUBSYS_VENDORID 0x1057	/* Motorola */ + +/* + * TSEC configuration + */ +#define CONFIG_TSEC_ENET		/* TSEC ethernet support */ + +#ifndef CONFIG_NET_MULTI +#define CONFIG_NET_MULTI		1 +#endif + +#define CONFIG_GMII			1	/* MII PHY management */ +#define CONFIG_MPC83XX_TSEC1		1 + +#define CONFIG_MPC83XX_TSEC1_NAME	"TSEC0" +#define CONFIG_MPC83XX_TSEC2		1 +#define CONFIG_MPC83XX_TSEC2_NAME	"TSEC1" +#define TSEC1_PHY_ADDR			0x1c +#define TSEC2_PHY_ADDR			4 +#define TSEC1_PHYIDX			0 +#define TSEC2_PHYIDX			0 + +/* Options are: TSEC[0-1] */ +#define CONFIG_ETHPRIME			"TSEC1" + +/* + * Configure on-board RTC + */ +#define CONFIG_RTC_DS1337 +#define CFG_I2C_RTC_ADDR		0x68 + +/* + * Environment + */ +#ifndef CFG_RAMBOOT +	#define CFG_ENV_IS_IN_FLASH	1 +	#define CFG_ENV_ADDR		(CFG_MONITOR_BASE + 0x40000) +	#define CFG_ENV_SECT_SIZE	0x10000	/* 64K(one sector) for env */ +	#define CFG_ENV_SIZE		0x2000 + +/* Address and size of Redundant Environment Sector */ +#else +	#define CFG_ENV_IS_NOWHERE	1	/* Store ENV in memory only */ +	#define CFG_ENV_ADDR		(CFG_MONITOR_BASE - 0x1000) +	#define CFG_ENV_SIZE		0x2000 +#endif + +#define CONFIG_LOADS_ECHO	1	/* echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE	1	/* allow baudrate change */ + +#define CFG_BASE_COMMANDS	( CONFIG_CMD_DFL	\ +				| CFG_CMD_PING		\ +				| CFG_CMD_DHCP		\ +				| CFG_CMD_I2C		\ +				| CFG_CMD_MII		\ +				| CFG_CMD_DATE		\ +				| CFG_CMD_PCI) + +#define CONFIG_CMDLINE_EDITING 1 + +#define CFG_RAMBOOT_COMMANDS	(CFG_BASE_COMMANDS & \ +				 ~(CFG_CMD_ENV | CFG_CMD_LOADS)) + +#if defined(CFG_RAMBOOT) +#define CONFIG_COMMANDS CFG_RAMBOOT_COMMANDS +#else +#define CONFIG_COMMANDS CFG_BASE_COMMANDS +#endif + +#include <cmd_confdefs.h> + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP			/* undef to save memory */ +#define CFG_LOAD_ADDR	0x2000000	/* default load address */ +#define CFG_PROMPT	"=> "		/* Monitor Command Prompt */ +#define CFG_CBSIZE	1024		/* Console I/O Buffer Size */ + +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)	/* Print Buffer Size */ +#define CFG_MAXARGS	16		/* max number of command args */ +#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size */ +#define CFG_HZ		1000		/* decrementer freq: 1ms ticks */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ	(8 << 20)	/* Initial Memory map for Linux*/ + +/* Cache Configuration */ +#define CFG_DCACHE_SIZE		16384 +#define CFG_CACHELINE_SIZE	32 +#define CFG_CACHELINE_SHIFT	5	/*log base 2 of the above value*/ + +#define CFG_RCWH_PCIHOST 0x80000000	/* PCIHOST  */ + +#ifdef CFG_66MHZ + +/* 66MHz IN, 133MHz CSB, 266 DDR, 266 CORE */ +/* 0x62040000 */ +#define CFG_HRCW_LOW (\ +	0x20000000 /* reserved, must be set */ |\ +	HRCWL_DDRCM |\ +	HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\ +	HRCWL_DDR_TO_SCB_CLK_2X1 |\ +	HRCWL_CSB_TO_CLKIN_2X1 |\ +	HRCWL_CORE_TO_CSB_2X1) + +#elif defined(CFG_33MHZ) + +/* 33MHz IN, 165MHz CSB, 330 DDR, 330 CORE */ +/* 0x65040000 */ +#define CFG_HRCW_LOW (\ +	0x20000000 /* reserved, must be set */ |\ +	HRCWL_DDRCM |\ +	HRCWL_LCL_BUS_TO_SCB_CLK_1X1 |\ +	HRCWL_DDR_TO_SCB_CLK_2X1 |\ +	HRCWL_CSB_TO_CLKIN_5X1 |\ +	HRCWL_CORE_TO_CSB_2X1) + +#endif + +/* 0xa0606c00 */ +#define CFG_HRCW_HIGH (\ +	HRCWH_PCI_HOST |\ +	HRCWH_PCI1_ARBITER_ENABLE |\ +	HRCWH_CORE_ENABLE |\ +	HRCWH_FROM_0X00000100 |\ +	HRCWH_BOOTSEQ_DISABLE |\ +	HRCWH_SW_WATCHDOG_DISABLE |\ +	HRCWH_ROM_LOC_LOCAL_16BIT |\ +	HRCWH_RL_EXT_LEGACY |\ +	HRCWH_TSEC1M_IN_RGMII |\ +	HRCWH_TSEC2M_IN_RGMII |\ +	HRCWH_BIG_ENDIAN |\ +	HRCWH_LALE_NORMAL) + +/* System IO Config */ +#define CFG_SICRH	(SICRH_TSOBI1 | SICRH_TSOBI2)	/* RGMII */ +#define CFG_SICRL	SICRL_USBDR			/* Enable Internal USB Phy  */ + +#define CFG_HID0_INIT	0x000000000 +#define CFG_HID0_FINAL	(HID0_ENABLE_MACHINE_CHECK | \ +			 HID0_ENABLE_DYNAMIC_POWER_MANAGMENT) + +#define CFG_HID2 HID2_HBE + +/* DDR @ 0x00000000 */ +#define CFG_IBAT0L	(CFG_SDRAM_BASE | BATL_PP_10) +#define CFG_IBAT0U	(CFG_SDRAM_BASE | BATU_BL_256M | BATU_VS | BATU_VP) + +/* PCI @ 0x80000000 */ +#define CFG_IBAT1L	(CFG_PCI1_MEM_BASE | BATL_PP_10) +#define CFG_IBAT1U	(CFG_PCI1_MEM_BASE | BATU_BL_256M | BATU_VS | BATU_VP) +#define CFG_IBAT2L	(CFG_PCI1_MMIO_BASE | BATL_PP_10 | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE) +#define CFG_IBAT2U	(CFG_PCI1_MMIO_BASE | BATU_BL_256M | BATU_VS | BATU_VP) + +/* PCI2 not supported on 8313 */ +#define CFG_IBAT3L	(0) +#define CFG_IBAT3U	(0) +#define CFG_IBAT4L	(0) +#define CFG_IBAT4U	(0) + +/* IMMRBAR @ 0xE0000000, PCI IO @ 0xE2000000 & BCSR @ 0xE2400000 */ +#define CFG_IBAT5L	(CFG_IMMR | BATL_PP_10 | BATL_CACHEINHIBIT | BATL_GUARDEDSTORAGE) +#define CFG_IBAT5U	(CFG_IMMR | BATU_BL_256M | BATU_VS | BATU_VP) + +/* SDRAM @ 0xF0000000, stack in DCACHE 0xFDF00000 & FLASH @ 0xFE000000 */ +#define CFG_IBAT6L	(0xF0000000 | BATL_PP_10) +#define CFG_IBAT6U	(0xF0000000 | BATU_BL_256M | BATU_VS | BATU_VP) + +#define CFG_IBAT7L	(0) +#define CFG_IBAT7U	(0) + +#define CFG_DBAT0L	CFG_IBAT0L +#define CFG_DBAT0U	CFG_IBAT0U +#define CFG_DBAT1L	CFG_IBAT1L +#define CFG_DBAT1U	CFG_IBAT1U +#define CFG_DBAT2L	CFG_IBAT2L +#define CFG_DBAT2U	CFG_IBAT2U +#define CFG_DBAT3L	CFG_IBAT3L +#define CFG_DBAT3U	CFG_IBAT3U +#define CFG_DBAT4L	CFG_IBAT4L +#define CFG_DBAT4U	CFG_IBAT4U +#define CFG_DBAT5L	CFG_IBAT5L +#define CFG_DBAT5U	CFG_IBAT5U +#define CFG_DBAT6L	CFG_IBAT6L +#define CFG_DBAT6U	CFG_IBAT6U +#define CFG_DBAT7L	CFG_IBAT7L +#define CFG_DBAT7U	CFG_IBAT7U + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD	0x01	/* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM	0x02	/* Software reboot */ + +/* + * Environment Configuration + */ +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_ETHADDR		00:E0:0C:00:95:01 +#define CONFIG_HAS_ETH1 +#define CONFIG_ETH1ADDR		00:E0:0C:00:95:02 + +#define CONFIG_IPADDR		10.0.0.2 +#define CONFIG_SERVERIP		10.0.0.1 +#define CONFIG_GATEWAYIP	10.0.0.1 +#define CONFIG_NETMASK		255.0.0.0 +#define CONFIG_NETDEV		eth1 + +#define CONFIG_HOSTNAME		mpc8313erdb +#define CONFIG_ROOTPATH		/nfs/root/path +#define CONFIG_BOOTFILE		uImage +#define CONFIG_UBOOTPATH	u-boot.bin	/* U-Boot image on TFTP server */ +#define CONFIG_FDTFILE		mpc8313erdb.dtb + +#define CONFIG_LOADADDR		200000	/* default location for tftp and bootm */ +#define CONFIG_BOOTDELAY	-1	/* -1 disables auto-boot */ +#define CONFIG_BAUDRATE		115200 + +#define XMK_STR(x)	#x +#define MK_STR(x)	XMK_STR(x) + +#define CONFIG_EXTRA_ENV_SETTINGS \ +	"netdev=" MK_STR(CONFIG_NETDEV) "\0" 				\ +	"ethprime=TSEC1\0"						\ +	"uboot=" MK_STR(CONFIG_UBOOTPATH) "\0" 				\ +	"tftpflash=tftpboot $loadaddr $uboot; " 			\ +		"protect off " MK_STR(TEXT_BASE) " +$filesize; " 	\ +		"erase " MK_STR(TEXT_BASE) " +$filesize; " 		\ +		"cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; " 	\ +		"protect on " MK_STR(TEXT_BASE) " +$filesize; " 	\ +		"cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0" 	\ +	"fdtaddr=400000\0"						\ +	"fdtfile=" MK_STR(CONFIG_FDTFILE) "\0"				\ +	"console=ttyS0\0"						\ +	"setbootargs=setenv bootargs "					\ +		"root=$rootdev rw console=$console,$baudrate $othbootargs\0" \ +	"setipargs=setenv bootargs nfsroot=$serverip:$rootpath " \ +		"ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \ +		"root=$rootdev rw console=$console,$baudrate $othbootargs\0" + +#define CONFIG_NFSBOOTCOMMAND						\ +	"setenv rootdev /dev/nfs;"					\ +	"run setbootargs;"							\ +	"run setipargs;"							\ +	"tftp $loadaddr $bootfile;"					\ +	"tftp $fdtaddr $fdtfile;"					\ +	"bootm $loadaddr - $fdtaddr" + +#define CONFIG_RAMBOOTCOMMAND						\ +	"setenv rootdev /dev/ram;"					\ +	"run setbootargs;"						\ +	"tftp $ramdiskaddr $ramdiskfile;"				\ +	"tftp $loadaddr $bootfile;"					\ +	"tftp $fdtaddr $fdtfile;"					\ +	"bootm $loadaddr $ramdiskaddr $fdtaddr" + +#undef MK_STR +#undef XMK_STR + +#endif	/* __CONFIG_H */ diff --git a/include/configs/MPC8349ITX.h b/include/configs/MPC8349ITX.h index 37bbfb336..906339e9d 100644 --- a/include/configs/MPC8349ITX.h +++ b/include/configs/MPC8349ITX.h @@ -154,6 +154,9 @@  #define CFG_MEMTEST_START	0x1000		/* memtest region */  #define CFG_MEMTEST_END		0x2000 +#define CFG_DDR_SDRAM_CLK_CNTL	(DDR_SDRAM_CLK_CNTL_SS_EN | \ +				DDR_SDRAM_CLK_CNTL_CLK_ADJUST_05) +  #ifdef CONFIG_HARD_I2C  #define CONFIG_SPD_EEPROM		/* use SPD EEPROM for DDR setup*/  #endif diff --git a/include/configs/MPC8540ADS.h b/include/configs/MPC8540ADS.h index 74a84f4e8..5aeea5868 100644 --- a/include/configs/MPC8540ADS.h +++ b/include/configs/MPC8540ADS.h @@ -330,13 +330,12 @@  /*   * General PCI - * Addresses are mapped 1-1. + * Memory space is mapped 1-1, but I/O space must start from 0.   */  #define CFG_PCI1_MEM_BASE	0x80000000  #define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE  #define CFG_PCI1_MEM_SIZE	0x20000000	/* 512M */ - -#define CFG_PCI1_IO_BASE	0x0 +#define CFG_PCI1_IO_BASE	0x00000000  #define CFG_PCI1_IO_PHYS	0xe2000000  #define CFG_PCI1_IO_SIZE	0x100000	/* 1M */ diff --git a/include/configs/MPC8541CDS.h b/include/configs/MPC8541CDS.h index db389cfe6..fb360d282 100644 --- a/include/configs/MPC8541CDS.h +++ b/include/configs/MPC8541CDS.h @@ -334,7 +334,7 @@ extern unsigned long get_clock_freq(void);  /*   * General PCI - * Addresses are mapped 1-1. + * Memory space is mapped 1-1, but I/O space must start from 0.   */  #define CFG_PCI1_MEM_BASE	0x80000000  #define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE diff --git a/include/configs/MPC8544DS.h b/include/configs/MPC8544DS.h new file mode 100644 index 000000000..4c3430897 --- /dev/null +++ b/include/configs/MPC8544DS.h @@ -0,0 +1,591 @@ +/* + * Copyright 2007 Freescale Semiconductor, Inc. + * + * 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 + */ + +/* + * mpc8544ds board configuration file + * + */ +#ifndef __CONFIG_H +#define __CONFIG_H + +/* High Level Configuration Options */ +#define CONFIG_BOOKE		1	/* BOOKE */ +#define CONFIG_E500		1	/* BOOKE e500 family */ +#define CONFIG_MPC85xx		1	/* MPC8540/60/55/41/48 */ +#define CONFIG_MPC8544		1 +#define CONFIG_MPC8544DS	1 + +#undef CONFIG_PCI			/* Enable PCI/PCIE */ +#undef CONFIG_PCI1			/* PCI controller 1 */ +#undef CONFIG_PCIE1			/* PCIE controler 1 (slot 1) */ +#undef CONFIG_PCIE2			/* PCIE controler 2 (slot 2) */ +#undef CONFIG_PCIE3			/* PCIE controler 3 (ULI bridge) */ +#undef CONFIG_FSL_PCI_INIT		/* Use common FSL init code */ + +#define CONFIG_TSEC_ENET 		/* tsec ethernet support */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_SPD_EEPROM		/* Use SPD EEPROM for DDR setup */ +#undef CONFIG_DDR_DLL +#define CONFIG_DDR_2T_TIMING		/* Sets the 2T timing bit */ + +#define CONFIG_DDR_ECC			/* only for ECC DDR module */ +#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER	/* DDR controller or DMA? */ +#define CONFIG_MEM_INIT_VALUE		0xDeadBeef + +#define CONFIG_DDR_ECC_CMD + +/* + * When initializing flash, if we cannot find the manufacturer ID, + * assume this is the AMD flash associated with the CDS board. + * This allows booting from a promjet. + */ +#define CONFIG_ASSUME_AMD_FLASH + +#define MPC85xx_DDR_SDRAM_CLK_CNTL	/* 85xx has clock control reg */ + +#ifndef __ASSEMBLY__ +extern unsigned long get_board_sys_clk(unsigned long dummy); +#endif +#define CONFIG_SYS_CLK_FREQ	get_board_sys_clk(0) /* sysclk for MPC85xx */ + +/* + * These can be toggled for performance analysis, otherwise use default. + */ +#define CONFIG_L2_CACHE			/* toggle L2 cache 	*/ +#define CONFIG_BTB			/* toggle branch predition */ +#define CONFIG_ADDR_STREAMING		/* toggle addr streaming */ +#define CONFIG_CLEAR_LAW0		/* Clear LAW0 in cpu_init_r */ + +/* + * Only possible on E500 Version 2 or newer cores. + */ +#define CONFIG_ENABLE_36BIT_PHYS	1 + +#define CONFIG_BOARD_EARLY_INIT_F	1	/* Call board_pre_init */ + +#undef	CFG_DRAM_TEST			/* memory test, takes time */ +#define CFG_MEMTEST_START	0x00200000	/* memtest works on */ +#define CFG_MEMTEST_END		0x00400000 +#define CFG_ALT_MEMTEST +#define CONFIG_PANIC_HANG 	/* do not reset board on panic */ + +/* + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + */ +#define CFG_CCSRBAR_DEFAULT 	0xff700000	/* CCSRBAR Default */ +#define CFG_CCSRBAR		0xe0000000	/* relocated CCSRBAR */ +#define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR */ + +#define CFG_PCI1_ADDR		(CFG_CCSRBAR+0x8000) +#define CFG_PCIE1_ADDR		(CFG_CCSRBAR+0xa000) +#define CFG_PCIE2_ADDR		(CFG_CCSRBAR+0x9000) +#define CFG_PCIE3_ADDR		(CFG_CCSRBAR+0xb000) + +/* + * DDR Setup + */ +#define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory*/ +#define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE + +#define SPD_EEPROM_ADDRESS	0x51		/* DDR DIMM */ + +/* + * Make sure required options are set + */ +#ifndef CONFIG_SPD_EEPROM +#error ("CONFIG_SPD_EEPROM is required") +#endif + +#undef CONFIG_CLOCKS_IN_MHZ + +/* + * Memory map + * + * 0x0000_0000	0x7fff_ffff	DDR			2G Cacheable + * + * 0x8000_0000	0xbfff_ffff	PCI Express Mem		1G non-cacheable + * + * 0xc000_0000	0xdfff_ffff	PCI			512M non-cacheable + * + * 0xe000_0000	0xe00f_ffff	CCSR			1M non-cacheable + * 0xe100_0000	0xe3ff_ffff	PCI IO range		4M non-cacheable + * + * Localbus cacheable + * + * 0xf000_0000	0xf3ff_ffff	SDRAM			64M Cacheable + * 0xf401_0000	0xf401_3fff	L1 for stack		4K Cacheable TLB0 + * + * Localbus non-cacheable + * + * 0xf800_0000	0xf80f_ffff	NVRAM/CADMUS (*)	1M non-cacheable + * 0xff00_0000	0xff7f_ffff	FLASH (2nd bank)	8M non-cacheable + * 0xff80_0000	0xffff_ffff	FLASH (boot bank)	8M non-cacheable + * + */ + +/* + * Local Bus Definitions + */ +#define CFG_BOOT_BLOCK		0xfc000000	/* boot TLB */ + +#define CFG_LBC_CACHE_BASE	0xf0000000	/* Localbus cacheable */ + +#define CFG_FLASH_BASE		0xff800000	/* start of FLASH 8M */ + +#define CFG_BR0_PRELIM		0xff801001 +#define CFG_BR1_PRELIM		0xfe801001 + +#define CFG_OR0_PRELIM		0xff806e65 +#define CFG_OR1_PRELIM		0xff806e65 + +#define CFG_FLASH_BANKS_LIST	{0xfe800000,CFG_FLASH_BASE} + +#define CFG_MAX_FLASH_BANKS	2		/* number of banks */ +#define CFG_MAX_FLASH_SECT	128		/* sectors per device */ +#undef	CFG_FLASH_CHECKSUM +#define CFG_FLASH_ERASE_TOUT	60000		/* Flash Erase Timeout (ms) */ +#define CFG_FLASH_WRITE_TOUT	500		/* Flash Write Timeout (ms) */ + +#define CFG_MONITOR_BASE	TEXT_BASE	/* start of monitor */ + +#define CFG_FLASH_CFI_DRIVER +#define CFG_FLASH_CFI +#define CFG_FLASH_EMPTY_INFO + +#define CFG_LBC_NONCACHE_BASE	0xf8000000 + +#define CFG_BR2_PRELIM		0xf8201001	/* port size 16bit */ +#define CFG_OR2_PRELIM		0xfff06ff7	/* 1MB Compact Flash area*/ + +#define CFG_BR3_PRELIM		0xf8100801	/* port size 8bit */ +#define CFG_OR3_PRELIM		0xfff06ff7	/* 1MB PIXIS area*/ + +#define PIXIS_BASE	0xf8100000	/* PIXIS registers */ +#define PIXIS_ID		0x0	/* Board ID at offset 0 */ +#define PIXIS_VER		0x1	/* Board version at offset 1 */ +#define PIXIS_PVER		0x2	/* PIXIS FPGA version at offset 2 */ +#define PIXIS_RST		0x4	/* PIXIS Reset Control register */ +#define PIXIS_AUX		0x6	/* PIXIS Auxiliary register; Scratch +					 * register */ +#define PIXIS_SPD		0x7	/* Register for SYSCLK speed */ +#define PIXIS_VCTL		0x10	/* VELA Control Register */ +#define PIXIS_VCFGEN0		0x12	/* VELA Config Enable 0 */ +#define PIXIS_VCFGEN1		0x13	/* VELA Config Enable 1 */ +#define PIXIS_VBOOT		0x16	/* VELA VBOOT Register */ +#define PIXIS_VSPEED0		0x17	/* VELA VSpeed 0 */ +#define PIXIS_VSPEED1		0x18	/* VELA VSpeed 1 */ +#define PIXIS_VCLKH		0x19	/* VELA VCLKH register */ +#define PIXIS_VCLKL		0x1A	/* VELA VCLKL register */ + + +/* define to use L1 as initial stack */ +#define CONFIG_L1_INIT_RAM	1 +#define CFG_INIT_L1_LOCK	1 +#define CFG_INIT_L1_ADDR	0xf4010000	/* Initial L1 address */ +#define CFG_INIT_L1_END		0x00004000	/* End of used area in RAM */ + +/* define to use L2SRAM as initial stack */ +#undef CONFIG_L2_INIT_RAM +#define CFG_INIT_L2_ADDR	0xf8fc0000 +#define CFG_INIT_L2_END		0x00040000	/* End of used area in RAM */ + +#ifdef CONFIG_L1_INIT_RAM +#define CFG_INIT_RAM_ADDR	CFG_INIT_L1_ADDR +#define CFG_INIT_RAM_END	CFG_INIT_L1_END +#else +#define CFG_INIT_RAM_ADDR	CFG_INIT_L2_ADDR +#define CFG_INIT_RAM_END	CFG_INIT_L2_END +#endif + +#define CFG_GBL_DATA_SIZE	128	/* num bytes initial data */ +#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET + +#define CFG_MONITOR_LEN		(256 * 1024) /* Reserve 256 kB for Mon */ +#define CFG_MALLOC_LEN		(128 * 1024)	/* Reserved for malloc */ + +/* Serial Port - controlled on board with jumper J8 + * open - index 2 + * shorted - index 1 + */ +#define CONFIG_CONS_INDEX	1 +#undef	CONFIG_SERIAL_SOFTWARE_FIFO +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE	1 +#define CFG_NS16550_CLK		get_bus_freq(0) + +#define CFG_BAUDRATE_TABLE	\ +	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200} + +#define CFG_NS16550_COM1	(CFG_CCSRBAR+0x4500) +#define CFG_NS16550_COM2	(CFG_CCSRBAR+0x4600) + +/* Use the HUSH parser */ +#define CFG_HUSH_PARSER +#ifdef	CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " +#endif + +/* pass open firmware flat tree */ +#define CONFIG_OF_FLAT_TREE	1 +#define CONFIG_OF_BOARD_SETUP	1 + +/* maximum size of the flat tree (8K) */ +#define OF_FLAT_TREE_MAX_SIZE	8192 + +#define OF_CPU			"PowerPC,8544@0" +#define OF_SOC			"soc8544@e0000000" +#define OF_TBCLK		(bd->bi_busfreq / 8) +#define OF_STDOUT_PATH		"/soc8544@e0000000/serial@4500" + +/* I2C */ +#define CONFIG_FSL_I2C		/* Use FSL common I2C driver */ +#define CONFIG_HARD_I2C		/* I2C with hardware support */ +#undef	CONFIG_SOFT_I2C		/* I2C bit-banged */ +#define CFG_I2C_SPEED		400000	/* I2C speed and slave address */ +#define CFG_I2C_EEPROM_ADDR	0x57 +#define CFG_I2C_SLAVE		0x7F +#define CFG_I2C_NOPROBES	{0x69}	/* Don't probe these addrs */ +#define CFG_I2C_OFFSET		0x3100 + +/* + * General PCI + * Memory space is mapped 1-1, but I/O space must start from 0. + */ +#define CFG_PCIE_PHYS		0x80000000	/* 1G PCIE TLB */ +#define CFG_PCI_PHYS		0xc0000000	/* 512M PCI TLB */ + +#define CFG_PCI1_MEM_BASE	0xc0000000 +#define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE +#define CFG_PCI1_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PCI1_IO_BASE	0x00000000 +#define CFG_PCI1_IO_PHYS	0xe1000000 +#define CFG_PCI1_IO_SIZE	0x00100000	/* 1M */ + +/* PCI view of System Memory */ +#define CFG_PCI_MEMORY_BUS	0x00000000 +#define CFG_PCI_MEMORY_PHYS	0x00000000 +#define CFG_PCI_MEMORY_SIZE	0x80000000 + +/* controller 2, Slot 1, tgtid 1, Base address 9000 */ +#define CFG_PCIE2_MEM_BASE	0x80000000 +#define CFG_PCIE2_MEM_PHYS	CFG_PCIE2_MEM_BASE +#define CFG_PCIE2_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PCIE2_IO_BASE	0x00000000 +#define CFG_PCIE2_IO_PHYS	0xe2000000 +#define CFG_PCIE2_IO_SIZE	0x00100000	/* 1M */ + +/* controller 1, Slot 2,tgtid 2, Base address a000 */ +#define CFG_PCIE1_MEM_BASE	0xa0000000 +#define CFG_PCIE1_MEM_PHYS	CFG_PCIE1_MEM_BASE +#define CFG_PCIE1_MEM_SIZE	0x08000000	/* 128M */ +#define CFG_PCIE1_MEM_BASE2	0xa8000000 +#define CFG_PCIE1_MEM_PHYS2	CFG_PCIE1_MEM_BASE2 +#define CFG_PCIE1_MEM_SIZE2	0x04000000	/* 64M */ +#define CFG_PCIE1_IO_BASE	0x00000000	/* reuse mem LAW */ +#define CFG_PCIE1_IO_PHYS	0xaf000000 +#define CFG_PCIE1_IO_SIZE	0x00100000	/* 1M */ + +/* controller 3, direct to uli, tgtid 3, Base address b000 */ +#define CFG_PCIE3_MEM_BASE	0xb0000000 +#define CFG_PCIE3_MEM_PHYS	CFG_PCIE3_MEM_BASE +#define CFG_PCIE3_MEM_SIZE	0x10000000	/* 256M */ +#define CFG_PCIE3_IO_BASE	0x00000000 +#define CFG_PCIE3_IO_PHYS	0xe3000000 +#define CFG_PCIE3_IO_SIZE	0x00100000	/* 1M */ + +#if defined(CONFIG_PCI) + +#define CONFIG_NET_MULTI +#define CONFIG_PCI_PNP			/* do pci plug-and-play */ + +#undef CONFIG_EEPRO100 +#undef CONFIG_TULIP +#define CONFIG_RTL8139 + +#ifdef CONFIG_RTL8139 +/* This macro is used by RTL8139 but not defined in PPC architecture */ +#define KSEG1ADDR(x)		(x) +#define _IO_BASE	0x00000000 +#endif + +#ifndef CONFIG_PCI_PNP +	#define PCI_ENET0_IOADDR	CFG_PCI1_IO_BASE +	#define PCI_ENET0_MEMADDR	CFG_PCI1_IO_BASE +	#define PCI_IDSEL_NUMBER	0x11	/* IDSEL = AD11 */ +#endif + +#define CONFIG_PCI_SCAN_SHOW		/* show pci devices on startup */ +#define CONFIG_DOS_PARTITION +#define CONFIG_SCSI_AHCI + +#ifdef CONFIG_SCSI_AHCI +#define CONFIG_SATA_ULI5288 +#define CFG_SCSI_MAX_SCSI_ID	4 +#define CFG_SCSI_MAX_LUN	1 +#define CFG_SCSI_MAX_DEVICE 	(CFG_SCSI_MAX_SCSI_ID * CFG_SCSI_MAX_LUN) +#define CFG_SCSI_MAXDEVICE	CFG_SCSI_MAX_DEVICE +#endif /* SCSCI */ + +#endif	/* CONFIG_PCI */ + + +#if defined(CONFIG_TSEC_ENET) + +#ifndef CONFIG_NET_MULTI +#define CONFIG_NET_MULTI 	1 +#endif + +#define CONFIG_MII		1	/* MII PHY management */ +#define CONFIG_MII_DEFAULT_TSEC	1	/* Allow unregistered phys */ +#define CONFIG_MPC85XX_TSEC1	1 +#define CONFIG_MPC85XX_TSEC1_NAME	"eTSEC1" +#define CONFIG_MPC85XX_TSEC3	1 +#define CONFIG_MPC85XX_TSEC3_NAME	"eTSEC3" +#undef CONFIG_MPC85XX_FEC + +#define TSEC1_PHY_ADDR		0 +#define TSEC3_PHY_ADDR		1 + +#define TSEC1_PHYIDX		0 +#define TSEC3_PHYIDX		0 + +#define CONFIG_ETHPRIME		"eTSEC1" + +#define CONFIG_PHY_GIGE		1	/* Include GbE speed/duplex detection */ + +#endif	/* CONFIG_TSEC_ENET */ + +/* + * Environment + */ +#define CFG_ENV_IS_IN_FLASH	1 +#if CFG_MONITOR_BASE > 0xfff80000 +#define CFG_ENV_ADDR		0xfff80000 +#else +#define CFG_ENV_ADDR		(CFG_MONITOR_BASE + 0x40000) +#endif +#define CFG_ENV_SIZE		0x2000 +#define CFG_ENV_SECT_SIZE	0x10000 /* 64K (one sector) */ + +#define CONFIG_LOADS_ECHO	1	/* echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE	1	/* allow baudrate change */ + +#if defined(CONFIG_PCI) +#define	CONFIG_COMMANDS	(CONFIG_CMD_DFL \ +				| CFG_CMD_PCI \ +				| CFG_CMD_PING \ +				| CFG_CMD_I2C \ +				| CFG_CMD_MII \ +				| CFG_CMD_BEDBUG \ +				| CFG_CMD_NET) +#else +#define	CONFIG_COMMANDS	(CONFIG_CMD_DFL \ +				| CFG_CMD_PING \ +				| CFG_CMD_I2C \ +				| CFG_CMD_MII) +#endif +#include <cmd_confdefs.h> + +#undef CONFIG_WATCHDOG			/* watchdog disabled */ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP			/* undef to save memory	*/ +#define CFG_LOAD_ADDR	0x2000000	/* default load address */ +#define CFG_PROMPT	"=> "		/* Monitor Command Prompt */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE	1024		/* Console I/O Buffer Size */ +#else +#define CFG_CBSIZE	256		/* Console I/O Buffer Size */ +#endif +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS	16		/* max number of command args */ +#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size */ +#define CFG_HZ		1000		/* decrementer freq: 1ms ticks */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ	(8 << 20) 	/* Initial Memory map for Linux*/ + +/* Cache Configuration */ +#define CFG_DCACHE_SIZE	32768 +#define CFG_CACHELINE_SIZE	32 +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CACHELINE_SHIFT	5	/*log base 2 of the above value*/ +#endif + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD	0x01		/* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM	0x02		/* Software reboot */ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */ +#endif + +/* + * Environment Configuration + */ + +/* The mac addresses for all ethernet interface */ +#if defined(CONFIG_TSEC_ENET) +#define CONFIG_ETHADDR	00:E0:0C:02:00:FD +#define CONFIG_HAS_ETH1 +#define CONFIG_ETH1ADDR	00:E0:0C:02:01:FD +#define CONFIG_HAS_ETH2 +#define CONFIG_ETH2ADDR	00:E0:0C:02:02:FD +#define CONFIG_HAS_ETH3 +#define CONFIG_ETH3ADDR	00:E0:0C:02:03:FD +#endif + +#define CONFIG_IPADDR	192.168.1.251 + +#define CONFIG_HOSTNAME	8544ds_unknown +#define CONFIG_ROOTPATH	/nfs/mpc85xx +#define CONFIG_BOOTFILE	8544ds_tmt/uImage.uboot + +#define CONFIG_SERVERIP	192.168.0.1 +#define CONFIG_GATEWAYIP 192.168.0.1 +#define CONFIG_NETMASK	255.255.0.0 + +#define CONFIG_LOADADDR	1000000	/*default location for tftp and bootm*/ + +#define CONFIG_BOOTDELAY 10	/* -1 disables auto-boot */ +#undef	CONFIG_BOOTARGS	/* the boot command will set bootargs*/ + +#define CONFIG_BAUDRATE	115200 + +#if defined(CONFIG_PCIE1) || defined(CONFIG_PCIE2) || defined(CONFIG_PCIE3) +#define PCIE_ENV \ + "pciereg=md ${a}000 6; md ${a}020 4; md ${a}bf8 2; echo o;md ${a}c00 25;" \ +	"echo i; md ${a}da0 15; echo e;md ${a}e00 e; echo d; md ${a}f00 c\0" \ + "pcie1regs=setenv a e000a; run pciereg\0"	\ + "pcie2regs=setenv a e0009; run pciereg\0"	\ + "pcie3regs=setenv a e000b; run pciereg\0"	\ + "pcieerr=md ${a}020 1; md ${a}e00;"		\ +	"pci d.b $b.0 7 1; pci d.w $b.0 1e 1;"	\ +	"pci d.w $b.0 56 1;"			\ +	"pci d $b.0 104 1;pci d $b.0 110 1;pci d $b.0 130 1\0" \ + "pcieerrc=mw ${a}020 ffffffff; mw ${a}e00 ffffffff;"	\ +	"pci w.b $b.0 7 ff; pci w.w $b.0 1e ffff; pci w.w $b.0 56 ffff;" \ +	"pci w $b.0 104 ffffffff; pci w $b.0 110 ffffffff;" \ +	"pci w $b.0 130 ffffffff\0" \ + "pciecfg=pci d $b.0 0 20; pci d $b.0 100 e; pci d $b.0 400 69\0"	\ + "pcie1err=setenv a e000a; run pcieerr\0"	\ + "pcie2err=setenv a e0009; run pcieerr\0"	\ + "pcie3err=setenv a e000b; run pcieerr\0"	\ + "pcie1errc=setenv a e000a; run pcieerrc\0"	\ + "pcie2errc=setenv a e0009; run pcieerrc\0"	\ + "pcie3errc=setenv a e000b; run pcieerrc\0" +#else +#define	PCIE_ENV "" +#endif + +#if defined(CONFIG_PCI1) +#define PCI_ENV \ + "pcireg=md ${a}000 3; echo o;md ${a}c00 25; echo i; md ${a}da0 15;" \ +	"echo e;md ${a}e00 9\0" 		\ + "pci1regs=setenv a e0008; run pcireg\0"	\ + "pcierr=md ${a}e00 8; pci d.b $b.0 7 1; pci d.w $b.0 1e 1;" \ +	"pci d.w $b.0 56 1\0"			\ + "pcierrc=mw ${a}e00 ffffffff; pci w.b $b.0 7 ff; pci w.w $b.0 1e ffff;" \ +	"pci w.w $b.0 56 ffff\0"		\ + "pci1err=setenv a e0008; run pcierr\0"		\ + "pci1errc=setenv a e0008; run pcierrc\0" +#else +#define	PCI_ENV "" +#endif + +#if defined(CONFIG_TSEC_ENET) +#define ENET_ENV \ + "enetreg1=md ${a}000 2; md ${a}010 9; md ${a}050 4; md ${a}08c 1;" \ +	"md ${a}098 2\0" \ + "enetregt=echo t;md ${a}100 6; md ${a}140 2; md ${a}180 10; md ${a}200 10\0" \ + "enetregr=echo r;md ${a}300 6; md ${a}330 5; md ${a}380 10; md ${a}400 10\0" \ + "enetregm=echo mac;md ${a}500 5; md ${a}520 28;echo fifo;md ${a}a00 1;" \ +	"echo mib;md ${a}680 31\0" \ + "enetreg=run enetreg1; run enetregm; run enetregt; run enetregr\0" \ + "enet1regs=setenv a e0024; run enetreg\0" \ + "enet3regs=setenv a e0026; run enetreg\0" +#else +#define ENET_ENV "" +#endif + +#define	CONFIG_EXTRA_ENV_SETTINGS		\ + "netdev=eth0\0"				\ + "consoledev=ttyS0\0"				\ + "ramdiskaddr=2000000\0"			\ + "ramdiskfile=8544ds_tmt/ramdisk.uboot\0"	\ + "fdtaddr=400000\0"				\ + "fdtfile=8544ds_tmt/mpc8544ds.dtb\0"		\ + "eoi=mw e00400b0 0\0" 				\ + "iack=md e00400a0 1\0" 			\ + "ddrreg=md ${a}000 8; md ${a}080 8;md ${a}100 d; md ${a}140 4; md ${a}bf0 4;" \ +	"md ${a}e00 3; md ${a}e20 3; md ${a}e40 7; md ${a}f00 5\0" \ + "ddrregs=setenv a e0002; run ddrreg\0" 	\ + "gureg=md ${a}000 2c; md ${a}0b0 1; md ${a}0c0 1; md ${a}b20 3;" \ +	"md ${a}e00 1; md ${a}e60 1; md ${a}ef0 15\0" 	\ + "guregs=setenv a e00e0; run gureg\0" 		\ + "ecmreg=md ${a}000 1; md ${a}010 1; md ${a}bf8 2; md ${a}e00 6\0" \ + "ecmregs=setenv a e0001; run ecmreg\0" 	\ + PCIE_ENV 	\ + PCI_ENV 	\ + ENET_ENV + + +#define CONFIG_NFSBOOTCOMMAND		\ + "setenv bootargs root=/dev/nfs rw "	\ + "nfsroot=$serverip:$rootpath "		\ + "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \ + "console=$consoledev,$baudrate $othbootargs;"	\ + "tftp $loadaddr $bootfile;"		\ + "tftp $fdtaddr $fdtfile;"		\ + "bootm $loadaddr - $fdtaddr" + + +#define CONFIG_RAMBOOTCOMMAND 		\ + "setenv bootargs root=/dev/ram rw "	\ + "console=$consoledev,$baudrate $othbootargs;"	\ + "tftp $ramdiskaddr $ramdiskfile;"	\ + "tftp $loadaddr $bootfile;"		\ + "tftp $fdtaddr $fdtfile;"		\ + "bootm $loadaddr $ramdiskaddr $fdtaddr" + +#define CONFIG_BOOTCOMMAND 		\ + "setenv bootargs root=/dev/sda3 rw "	\ + "console=$consoledev,$baudrate $othbootargs;"	\ + "tftp $loadaddr $bootfile;"		\ + "tftp $fdtaddr $fdtfile;"		\ + "bootm $loadaddr - $fdtaddr" + +#endif	/* __CONFIG_H */ diff --git a/include/configs/MPC8548CDS.h b/include/configs/MPC8548CDS.h index 7c4849fad..680009d60 100644 --- a/include/configs/MPC8548CDS.h +++ b/include/configs/MPC8548CDS.h @@ -36,12 +36,12 @@  #define CONFIG_MPC8548		1	/* MPC8548 specific */  #define CONFIG_MPC8548CDS	1	/* MPC8548CDS board specific */ -#undef CONFIG_PCI +#define CONFIG_PCI  #define CONFIG_TSEC_ENET 		/* tsec ethernet support */  #define CONFIG_ENV_OVERWRITE  #define CONFIG_SPD_EEPROM		/* Use SPD EEPROM for DDR setup*/  #define CONFIG_DDR_DLL			/* possible DLL fix needed */ -#define CONFIG_DDR_2T_TIMING		/* Sets the 2T timing bit */ +#undef CONFIG_DDR_2T_TIMING		/* Sets the 2T timing bit */  #define CONFIG_DDR_ECC			/* only for ECC DDR module */  #define CONFIG_ECC_INIT_VIA_DDRCONTROLLER	/* DDR controller or DMA? */ @@ -340,22 +340,34 @@ extern unsigned long get_clock_freq(void);  /*   * General PCI - * Addresses are mapped 1-1. + * Memory space is mapped 1-1, but I/O space must start from 0.   */  #define CFG_PCI1_MEM_BASE	0x80000000  #define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE -#define CFG_PCI1_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PCI1_MEM_SIZE	0x10000000	/* 256M */  #define CFG_PCI1_IO_BASE	0x00000000  #define CFG_PCI1_IO_PHYS	0xe2000000 -#define CFG_PCI1_IO_SIZE	0x00100000	/* 1M */ +#define CFG_PCI1_IO_SIZE	0x00800000	/* 8M */ -#define CFG_PCI2_MEM_BASE	0xa0000000 +#define CFG_PCI2_MEM_BASE	0x90000000  #define CFG_PCI2_MEM_PHYS	CFG_PCI2_MEM_BASE -#define CFG_PCI2_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PCI2_MEM_SIZE	0x10000000	/* 256M */  #define CFG_PCI2_IO_BASE	0x00000000 -#define CFG_PCI2_IO_PHYS	0xe2100000 -#define CFG_PCI2_IO_SIZE	0x00100000	/* 1M */ +#define CFG_PCI2_IO_PHYS	0xe2800000 +#define CFG_PCI2_IO_SIZE	0x00800000	/* 8M */ +#define CFG_PEX_MEM_BASE	0xa0000000 +#define CFG_PEX_MEM_PHYS	CFG_PEX_MEM_BASE +#define CFG_PEX_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PEX_IO_BASE		0x00000000 +#define CFG_PEX_IO_PHYS		0xe3000000 +#define CFG_PEX_IO_SIZE		0x01000000	/* 16M */ + +/* + * RapidIO MMU + */ +#define CFG_RIO_MEM_BASE	0xC0000000 +#define CFG_RIO_MEM_SIZE	0x20000000	/* 512M */  #if defined(CONFIG_PCI) diff --git a/include/configs/MPC8560ADS.h b/include/configs/MPC8560ADS.h index 835bf5cb6..21e663768 100644 --- a/include/configs/MPC8560ADS.h +++ b/include/configs/MPC8560ADS.h @@ -320,14 +320,14 @@  /*   * General PCI - * Addresses are mapped 1-1. + * Memory space is mapped 1-1, but I/O space must start from 0.   */  #define CFG_PCI1_MEM_BASE	0x80000000  #define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE  #define CFG_PCI1_MEM_SIZE	0x20000000	/* 512M */ -#define CFG_PCI1_IO_BASE	0xe2000000 -#define CFG_PCI1_IO_PHYS	CFG_PCI1_IO_BASE -#define CFG_PCI1_IO_SIZE	0x1000000	/* 16M */ +#define CFG_PCI1_IO_BASE	0x00000000 +#define CFG_PCI1_IO_PHYS	0xe2000000 +#define CFG_PCI1_IO_SIZE	0x100000	/* 1M */  #if defined(CONFIG_PCI) diff --git a/include/configs/MPC8568MDS.h b/include/configs/MPC8568MDS.h new file mode 100644 index 000000000..3f65644fd --- /dev/null +++ b/include/configs/MPC8568MDS.h @@ -0,0 +1,505 @@ +/* + * Copyright 2004-2007 Freescale Semiconductor. + * + * 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 + */ + +/* + * mpc8568mds board configuration file + */ +#ifndef __CONFIG_H +#define __CONFIG_H + +/* High Level Configuration Options */ +#define CONFIG_BOOKE		1	/* BOOKE */ +#define CONFIG_E500			1	/* BOOKE e500 family */ +#define CONFIG_MPC85xx		1	/* MPC8540/60/55/41/48/68 */ +#define CONFIG_MPC8568		1	/* MPC8568 specific */ +#define CONFIG_MPC8568MDS	1	/* MPC8568MDS board specific */ + +#undef CONFIG_PCI +#define CONFIG_TSEC_ENET 		/* tsec ethernet support */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_SPD_EEPROM		/* Use SPD EEPROM for DDR setup*/ +#define CONFIG_DDR_DLL			/* possible DLL fix needed */ +/*#define CONFIG_DDR_2T_TIMING		 Sets the 2T timing bit */ + +/*#define CONFIG_DDR_ECC*/			/* only for ECC DDR module */ +/*#define CONFIG_ECC_INIT_VIA_DDRCONTROLLER*/	/* 	 DDR controller or DMA? */ +#define CONFIG_MEM_INIT_VALUE		0xDeadBeef + + +/* + * When initializing flash, if we cannot find the manufacturer ID, + * assume this is the AMD flash associated with the MDS board. + * This allows booting from a promjet. + */ +#define CONFIG_ASSUME_AMD_FLASH + +#define MPC85xx_DDR_SDRAM_CLK_CNTL	/* 85xx has clock control reg */ + +#ifndef __ASSEMBLY__ +extern unsigned long get_clock_freq(void); +#endif						  /*Replace a call to get_clock_freq (after it is implemented)*/ +#define CONFIG_SYS_CLK_FREQ	66000000 /*TODO: restore if wanting to read from BCSR: get_clock_freq()*/ /* sysclk for MPC85xx */ + +/* + * These can be toggled for performance analysis, otherwise use default. + */ +/*#define CONFIG_L2_CACHE*/		    	    /* toggle L2 cache 	*/ +#define CONFIG_BTB						/* toggle branch predition */ +#define CONFIG_ADDR_STREAMING		    /* toggle addr streaming   */ + +/* + * Only possible on E500 Version 2 or newer cores. + */ +#define CONFIG_ENABLE_36BIT_PHYS	1 + + +#define CONFIG_BOARD_EARLY_INIT_F	1	/* Call board_pre_init */ + +#undef	CFG_DRAM_TEST			/* memory test, takes time */ +#define CFG_MEMTEST_START	0x00200000	/* memtest works on */ +#define CFG_MEMTEST_END		0x00400000 + +/* + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + */ +#define CFG_CCSRBAR_DEFAULT 	0xff700000	/* CCSRBAR Default */ +#define CFG_CCSRBAR		0xe0000000	/* relocated CCSRBAR */ +#define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR */ + +/* + * DDR Setup + */ +#define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory*/ +#define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE + +#define SPD_EEPROM_ADDRESS	0x51		/* DDR DIMM */ + +/* + * Make sure required options are set + */ +#ifndef CONFIG_SPD_EEPROM +#error ("CONFIG_SPD_EEPROM is required") +#endif + +#undef CONFIG_CLOCKS_IN_MHZ + + +/* + * Local Bus Definitions + */ + +/* + * FLASH on the Local Bus + * Two banks, 8M each, using the CFI driver. + * Boot from BR0/OR0 bank at 0xff00_0000 + * Alternate BR1/OR1 bank at 0xff80_0000 + * + * BR0, BR1: + *    Base address 0 = 0xff00_0000 = BR0[0:16] = 1111 1111 0000 0000 0 + *    Base address 1 = 0xff80_0000 = BR1[0:16] = 1111 1111 1000 0000 0 + *    Port Size = 16 bits = BRx[19:20] = 10 + *    Use GPCM = BRx[24:26] = 000 + *    Valid = BRx[31] = 1 + * + * 0    4    8    12   16   20   24   28 + * 1111 1111 1000 0000 0001 0000 0000 0001 = ff801001    BR0 + * 1111 1111 0000 0000 0001 0000 0000 0001 = ff001001    BR1 + * + * OR0, OR1: + *    Addr Mask = 8M = ORx[0:16] = 1111 1111 1000 0000 0 + *    Reserved ORx[17:18] = 11, confusion here? + *    CSNT = ORx[20] = 1 + *    ACS = half cycle delay = ORx[21:22] = 11 + *    SCY = 6 = ORx[24:27] = 0110 + *    TRLX = use relaxed timing = ORx[29] = 1 + *    EAD = use external address latch delay = OR[31] = 1 + * + * 0    4    8    12   16   20   24   28 + * 1111 1111 1000 0000 0110 1110 0110 0101 = ff806e65    ORx + */ +#define CFG_BCSR_BASE		0xf8000000 + +#define CFG_FLASH_BASE		0xfe000000	/* start of FLASH 32M */ + +/*Chip select 0 - Flash*/ +#define CFG_BR0_PRELIM		0xfe001001 +#define	CFG_OR0_PRELIM		0xfe006ff7 + +/*Chip slelect 1 - BCSR*/ +#define CFG_BR1_PRELIM		0xf8000801 +#define	CFG_OR1_PRELIM		0xffffe9f7 + +/*#define CFG_FLASH_BANKS_LIST	{0xff800000, CFG_FLASH_BASE} */ +#define CFG_MAX_FLASH_BANKS		1		/* number of banks */ +#define CFG_MAX_FLASH_SECT		512		/* sectors per device */ +#undef	CFG_FLASH_CHECKSUM +#define CFG_FLASH_ERASE_TOUT	60000	/* Flash Erase Timeout (ms) */ +#define CFG_FLASH_WRITE_TOUT	500		/* Flash Write Timeout (ms) */ + +#define CFG_MONITOR_BASE    	TEXT_BASE	/* start of monitor */ + +#define CFG_FLASH_CFI_DRIVER +#define CFG_FLASH_CFI +#define CFG_FLASH_EMPTY_INFO + + +/* + * SDRAM on the LocalBus + */ +#define CFG_LBC_SDRAM_BASE	0xf0000000	/* Localbus SDRAM	 */ +#define CFG_LBC_SDRAM_SIZE	64			/* LBC SDRAM is 64MB */ + + +/*Chip select 2 - SDRAM*/ +#define CFG_BR2_PRELIM      0xf0001861 +#define CFG_OR2_PRELIM		0xfc006901 + +#define CFG_LBC_LCRR		0x00030004    	/* LB clock ratio reg */ +#define CFG_LBC_LBCR		0x00000000    	/* LB config reg */ +#define CFG_LBC_LSRT		0x20000000  	/* LB sdram refresh timer */ +#define CFG_LBC_MRTPR		0x00000000  	/* LB refresh timer prescal*/ + +/* + * LSDMR masks + */ +#define CFG_LBC_LSDMR_RFEN	(1 << (31 -  1)) +#define CFG_LBC_LSDMR_BSMA1516	(3 << (31 - 10)) +#define CFG_LBC_LSDMR_BSMA1617	(4 << (31 - 10)) +#define CFG_LBC_LSDMR_RFCR16	(7 << (31 - 16)) +#define CFG_LBC_LSDMR_PRETOACT7	(7 << (31 - 19)) +#define CFG_LBC_LSDMR_ACTTORW7	(7 << (31 - 22)) +#define CFG_LBC_LSDMR_ACTTORW6	(6 << (31 - 22)) +#define CFG_LBC_LSDMR_BL8	(1 << (31 - 23)) +#define CFG_LBC_LSDMR_WRC4	(0 << (31 - 27)) +#define CFG_LBC_LSDMR_CL3	(3 << (31 - 31)) + +#define CFG_LBC_LSDMR_OP_NORMAL	(0 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_ARFRSH	(1 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_SRFRSH	(2 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_MRW	(3 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_PRECH	(4 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_PCHALL	(5 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_ACTBNK	(6 << (31 - 4)) +#define CFG_LBC_LSDMR_OP_RWINV	(7 << (31 - 4)) + +/* + * Common settings for all Local Bus SDRAM commands. + * At run time, either BSMA1516 (for CPU 1.1) + *                  or BSMA1617 (for CPU 1.0) (old) + * is OR'ed in too. + */ +#define CFG_LBC_LSDMR_COMMON	( CFG_LBC_LSDMR_RFCR16		\ +				| CFG_LBC_LSDMR_PRETOACT7	\ +				| CFG_LBC_LSDMR_ACTTORW7	\ +				| CFG_LBC_LSDMR_BL8		\ +				| CFG_LBC_LSDMR_WRC4		\ +				| CFG_LBC_LSDMR_CL3		\ +				| CFG_LBC_LSDMR_RFEN		\ +				) + +/* + * The bcsr registers are connected to CS3 on MDS. + * The new memory map places bcsr at 0xf8000000. + * + * For BR3, need: + *    Base address of 0xf8000000 = BR[0:16] = 1111 1000 0000 0000 0 + *    port-size = 8-bits  = BR[19:20] = 01 + *    no parity checking  = BR[21:22] = 00 + *    GPMC for MSEL       = BR[24:26] = 000 + *    Valid               = BR[31]    = 1 + * + * 0    4    8    12   16   20   24   28 + * 1111 1000 0000 0000 0000 1000 0000 0001 = f8000801 + * + * For OR3, need: + *    1 MB mask for AM,   OR[0:16]  = 1111 1111 1111 0000 0 + *    disable buffer ctrl OR[19]    = 0 + *    CSNT                OR[20]    = 1 + *    ACS                 OR[21:22] = 11 + *    XACS                OR[23]    = 1 + *    SCY 15 wait states  OR[24:27] = 1111	max is suboptimal but safe + *    SETA                OR[28]    = 0 + *    TRLX                OR[29]    = 1 + *    EHTR                OR[30]    = 1 + *    EAD extra time      OR[31]    = 1 + * + * 0    4    8    12   16   20   24   28 + * 1111 1111 1111 0000 0000 1111 1111 0111 = fff00ff7 + */ +#define CFG_BCSR (0xf8000000) + +/*Chip slelect 4 - PIB*/ +#define CFG_BR4_PRELIM   0xf8008801 +#define CFG_OR4_PRELIM   0xffffe9f7 + +/*Chip select 5 - PIB*/ +#define CFG_BR5_PRELIM	 0xf8010801 +#define CFG_OR5_PRELIM	 0xffff69f7 + +#define CONFIG_L1_INIT_RAM +#define CFG_INIT_RAM_LOCK 	1 +#define CFG_INIT_RAM_ADDR	0xe4010000	/* Initial RAM address */ +#define CFG_INIT_RAM_END    	0x4000	    /* End of used area in RAM */ + +#define CFG_GBL_DATA_SIZE  	128	    /* num bytes initial data */ +#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET + +#define CFG_MONITOR_LEN	    	(256 * 1024) /* Reserve 256 kB for Mon */ +#define CFG_MALLOC_LEN	    	(128 * 1024)	/* Reserved for malloc */ + +/* Serial Port */ +#define CONFIG_CONS_INDEX		1 +#undef	CONFIG_SERIAL_SOFTWARE_FIFO +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE    1 +#define CFG_NS16550_CLK		get_bus_freq(0) + +#define CFG_BAUDRATE_TABLE  \ +	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200} + +#define CFG_NS16550_COM1        (CFG_CCSRBAR+0x4500) +#define CFG_NS16550_COM2        (CFG_CCSRBAR+0x4600) + +/* Use the HUSH parser*/ +#define CFG_HUSH_PARSER +#ifdef  CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " +#endif + +/* pass open firmware flat tree */ +#define CONFIG_OF_FLAT_TREE	1 +#define CONFIG_OF_BOARD_SETUP	1 + +/* maximum size of the flat tree (8K) */ +#define OF_FLAT_TREE_MAX_SIZE	8192 + +#define OF_CPU			"PowerPC,8568@0" +#define OF_SOC			"soc8568@e0000000" +#define OF_TBCLK		(bd->bi_busfreq / 8) +#define OF_STDOUT_PATH		"/soc8568@e0000000/serial@4600" + +/* + * I2C + */ +#define CONFIG_FSL_I2C		/* Use FSL common I2C driver */ +#define CONFIG_HARD_I2C		/* I2C with hardware support*/ +#undef	CONFIG_SOFT_I2C			/* I2C bit-banged */ +#define CFG_I2C_SPEED		400000	/* I2C speed and slave address */ +#define CFG_I2C_EEPROM_ADDR	0x57 +#define CFG_I2C_SLAVE		0x7F +#define CFG_I2C_NOPROBES        {0x69}	/* Don't probe these addrs */ +#define CFG_I2C_OFFSET		0x3000 + +/* + * General PCI + * Memory Addresses are mapped 1-1. I/O is mapped from 0 + */ +#define CFG_PCI1_MEM_BASE	0x80000000 +#define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE +#define CFG_PCI1_MEM_SIZE	0x10000000	/* 256M */ +#define CFG_PCI1_IO_BASE	0x00000000 +#define CFG_PCI1_IO_PHYS	0xe2000000 +#define CFG_PCI1_IO_SIZE	0x00800000	/* 8M */ + +#define CFG_PEX_MEM_BASE	0xa0000000 +#define CFG_PEX_MEM_PHYS	CFG_PEX_MEM_BASE +#define CFG_PEX_MEM_SIZE	0x10000000	/* 256M */ +#define CFG_PEX_IO_BASE		0x00000000 +#define CFG_PEX_IO_PHYS		0xe2800000 +#define CFG_PEX_IO_SIZE		0x00800000	/* 8M */ + +#define CFG_SRIO_MEM_BASE	0xc0000000 + +#if defined(CONFIG_PCI) + +#define CONFIG_NET_MULTI +#define CONFIG_PCI_PNP	               	/* do pci plug-and-play */ + +#undef CONFIG_EEPRO100 +#undef CONFIG_TULIP + +#undef CONFIG_PCI_SCAN_SHOW		/* show pci devices on startup */ +#define CFG_PCI_SUBSYS_VENDORID 0x1057  /* Motorola */ + +#endif	/* CONFIG_PCI */ + + +#if defined(CONFIG_TSEC_ENET) + +#ifndef CONFIG_NET_MULTI +#define CONFIG_NET_MULTI 	1 +#endif + +#define CONFIG_MII		1	/* MII PHY management */ +#define CONFIG_MPC85XX_TSEC1	1 +#define CONFIG_MPC85XX_TSEC1_NAME	"eTSEC0" +#define CONFIG_MPC85XX_TSEC2	1 +#define CONFIG_MPC85XX_TSEC2_NAME	"eTSEC1" +#undef  CONFIG_MPC85XX_TSEC3 +#undef  CONFIG_MPC85XX_TSEC4 +#undef  CONFIG_MPC85XX_FEC + +#define TSEC1_PHY_ADDR		2 +#define TSEC2_PHY_ADDR		3 + +#define TSEC1_PHYIDX		0 +#define TSEC2_PHYIDX		0 + +/* Options are: eTSEC[0-3] */ +#define CONFIG_ETHPRIME		"eTSEC0" + +#endif	/* CONFIG_TSEC_ENET */ + +/* + * Environment + */ +#define CFG_ENV_IS_IN_FLASH	1 +#define CFG_ENV_ADDR		(CFG_MONITOR_BASE + 0x40000) +#define CFG_ENV_SECT_SIZE	0x40000	/* 256K(one sector) for env */ +#define CFG_ENV_SIZE		0x2000 + +#define CONFIG_LOADS_ECHO	1	/* echo on for serial download */ +#define CFG_LOADS_BAUD_CHANGE	1	/* allow baudrate change */ + +#if defined(CONFIG_PCI) +#define  CONFIG_COMMANDS	(CONFIG_CMD_DFL \ +				| CFG_CMD_PCI \ +				| CFG_CMD_PING \ +				| CFG_CMD_I2C \ +				| CFG_CMD_MII) +#else +#define  CONFIG_COMMANDS	(CONFIG_CMD_DFL \ +				| CFG_CMD_PING \ +				| CFG_CMD_I2C \ +				| CFG_CMD_MII) +#endif +#include <cmd_confdefs.h> + +#undef CONFIG_WATCHDOG			/* watchdog disabled */ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP			/* undef to save memory	*/ +#define CFG_LOAD_ADDR	0x2000000	/* default load address */ +#define CFG_PROMPT	"=> "		/* Monitor Command Prompt */ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE	1024		/* Console I/O Buffer Size */ +#else +#define CFG_CBSIZE	256			/* Console I/O Buffer Size */ +#endif +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS	16		/* max number of command args */ +#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size */ +#define CFG_HZ		1000		/* decrementer freq: 1ms ticks */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ	(8 << 20) 	/* Initial Memory map for Linux*/ + +/* Cache Configuration */ +#define CFG_DCACHE_SIZE	32768 +#define CFG_CACHELINE_SIZE	32 +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CACHELINE_SHIFT	5	/*log base 2 of the above value*/ +#endif + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD	0x01		/* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM	0x02		/* Software reboot */ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */ +#endif + +/* + * Environment Configuration + */ + +/* The mac addresses for all ethernet interface */ +#if defined(CONFIG_TSEC_ENET) +#define CONFIG_ETHADDR   00:E0:0C:00:00:FD +#define CONFIG_HAS_ETH1 +#define CONFIG_ETH1ADDR  00:E0:0C:00:01:FD +#define CONFIG_HAS_ETH2 +#define CONFIG_ETH2ADDR  00:E0:0C:00:02:FD +#endif + +#define CONFIG_IPADDR    192.168.1.253 + +#define CONFIG_HOSTNAME  unknown +#define CONFIG_ROOTPATH  /nfsroot +#define CONFIG_BOOTFILE  your.uImage + +#define CONFIG_SERVERIP  192.168.1.1 +#define CONFIG_GATEWAYIP 192.168.1.1 +#define CONFIG_NETMASK   255.255.255.0 + +#define CONFIG_LOADADDR  200000   /*default location for tftp and bootm*/ + +#define CONFIG_BOOTDELAY 10       /* -1 disables auto-boot */ +#undef  CONFIG_BOOTARGS           /* the boot command will set bootargs*/ + +#define CONFIG_BAUDRATE	115200 + +#define	CONFIG_EXTRA_ENV_SETTINGS				        \ +   "netdev=eth0\0"                                                      \ +   "consoledev=ttyS0\0"                                                 \ +   "ramdiskaddr=600000\0"                                               \ +   "ramdiskfile=your.ramdisk.u-boot\0"					\ +   "fdtaddr=400000\0"							\ +   "fdtfile=your.fdt.dtb\0"						\ +   "nfsargs=setenv bootargs root=/dev/nfs rw "				\ +      "nfsroot=$serverip:$rootpath "					\ +      "ip=$ipaddr:$serverip:$gatewayip:$netmask:$hostname:$netdev:off " \ +      "console=$consoledev,$baudrate $othbootargs\0"			\ +   "ramargs=setenv bootargs root=/dev/ram rw "				\ +      "console=$consoledev,$baudrate $othbootargs\0"			\ + + +#define CONFIG_NFSBOOTCOMMAND	                                        \ +   "run nfsargs;"							\ +   "tftp $loadaddr $bootfile;"                                          \ +   "tftp $fdtaddr $fdtfile;"						\ +   "bootm $loadaddr - $fdtaddr" + + +#define CONFIG_RAMBOOTCOMMAND \ +   "run ramargs;"							\ +   "tftp $ramdiskaddr $ramdiskfile;"                                    \ +   "tftp $loadaddr $bootfile;"                                          \ +   "bootm $loadaddr $ramdiskaddr" + +#define CONFIG_BOOTCOMMAND  CONFIG_NFSBOOTCOMMAND + +#endif	/* __CONFIG_H */ diff --git a/include/configs/MPC8641HPCN.h b/include/configs/MPC8641HPCN.h index bbe35053d..41daa2bfe 100644 --- a/include/configs/MPC8641HPCN.h +++ b/include/configs/MPC8641HPCN.h @@ -577,6 +577,7 @@  #define CONFIG_HOSTNAME		unknown  #define CONFIG_ROOTPATH		/opt/nfsroot  #define CONFIG_BOOTFILE		uImage +#define CONFIG_UBOOTPATH	u-boot.bin	/* U-Boot image on TFTP server */  #define CONFIG_SERVERIP		192.168.1.1  #define CONFIG_GATEWAYIP	192.168.1.1 @@ -592,10 +593,17 @@  #define	CONFIG_EXTRA_ENV_SETTINGS				        \     "netdev=eth0\0"                                                      \ +   "uboot=" MK_STR(CONFIG_UBOOTPATH) "\0" 				\ +   "tftpflash=tftpboot $loadaddr $uboot; " 			\ +	"protect off " MK_STR(TEXT_BASE) " +$filesize; " 	\ +	"erase " MK_STR(TEXT_BASE) " +$filesize; " 		\ +	"cp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize; " 	\ +	"protect on " MK_STR(TEXT_BASE) " +$filesize; " 	\ +	"cmp.b $loadaddr " MK_STR(TEXT_BASE) " $filesize\0" 	\     "consoledev=ttyS0\0"                                                 \     "ramdiskaddr=2000000\0"						\     "ramdiskfile=your.ramdisk.u-boot\0"                                  \ -   "dtbaddr=400000\0"						\ +   "dtbaddr=c00000\0"						\     "dtbfile=mpc8641_hpcn.dtb\0"                                  \     "en-wd=mw.b f8100010 0x08; echo -expect:- 08; md.b f8100010 1\0" \     "dis-wd=mw.b f8100010 0x00; echo -expect:- 00; md.b f8100010 1\0" \ diff --git a/include/configs/NC650.h b/include/configs/NC650.h index 8da29c4af..a12c8da13 100644 --- a/include/configs/NC650.h +++ b/include/configs/NC650.h @@ -1,5 +1,5 @@  /* - * (C) Copyright 2006 Detlev Zundel, dzu@denx.de + * (C) Copyright 2006, 2007 Detlev Zundel, dzu@denx.de   * (C) Copyright 2005   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.   * @@ -237,18 +237,8 @@  /*   * NAND flash support   */ -#define CFG_NAND_LEGACY -  #define CFG_MAX_NAND_DEVICE	1 -#define NAND_ChipID_UNKNOWN	0x00 -#define SECTORSIZE		512 -#define NAND_MAX_FLOORS		1  #define NAND_MAX_CHIPS		1 -#define ADDR_PAGE		2 -#define ADDR_COLUMN_PAGE	3 -#define ADDR_COLUMN		1 -#define NAND_NO_RB -  /*-----------------------------------------------------------------------   * SYPCR - System Protection Control					11-9 diff --git a/include/configs/PM520.h b/include/configs/PM520.h index 9c241e67e..7d91a0160 100644 --- a/include/configs/PM520.h +++ b/include/configs/PM520.h @@ -160,7 +160,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133   		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK   		/* define for 133MHz speed */  #endif  /*   * I2C configuration diff --git a/include/configs/SBC8560.h b/include/configs/SBC8560.h deleted file mode 100644 index 8b46a17ed..000000000 --- a/include/configs/SBC8560.h +++ /dev/null @@ -1,410 +0,0 @@ -/* - * (C) Copyright 2002,2003 Motorola,Inc. - * Xianghua Xiao <X.Xiao@motorola.com> - * - * (C) Copyright 2004 Wind River Systems Inc <www.windriver.com>. - * Added support for Wind River SBC8560 board - * - * 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 - */ - -/* mpc8560ads board configuration file */ -/* please refer to doc/README.mpc85xx for more info */ -/* make sure you change the MAC address and other network params first, - * search for CONFIG_ETHADDR,CONFIG_SERVERIP,etc in this file - */ - -#ifndef __CONFIG_H -#define __CONFIG_H - -#if XXX -#define DEBUG		      /* General debug */ -#define ET_DEBUG -#endif -#define TSEC_DEBUG - -/* High Level Configuration Options */ -#define CONFIG_BOOKE		1	/* BOOKE			*/ -#define CONFIG_E500		1	/* BOOKE e500 family		*/ -#define CONFIG_MPC85xx		1	/* MPC8540/MPC8560		*/ -#define CONFIG_MPC85xx_REV1	1	/* MPC85xx Rev 1.0 chip		*/ - - -#define CONFIG_CPM2		1	/* has CPM2 */ -#define CONFIG_SBC8560      	1   	/* configuration for SBC8560 board */ - -#define CONFIG_MPC8560ADS	1	/* MPC8560ADS board specific (supplement)	*/ - -#define CONFIG_TSEC_ENET		/* tsec ethernet support	*/ -#undef	CONFIG_PCI			/* pci ethernet support		*/ -#undef  CONFIG_ETHER_ON_FCC		/* cpm FCC ethernet support	*/ - - -#define CONFIG_ENV_OVERWRITE - -/* Using Localbus SDRAM to emulate flash before we can program the flash, - * normally you need a flash-boot image(u-boot.bin), if so undef this. - */ -#undef CONFIG_RAM_AS_FLASH - -#if defined(CONFIG_PCI_66)		/* some PCI card is 33Mhz only	*/ -  #define CONFIG_SYS_CLK_FREQ	66000000/* sysclk for MPC85xx		*/ -#else -  #define CONFIG_SYS_CLK_FREQ	33000000/* most pci cards are 33Mhz	*/ -#endif - -/* below can be toggled for performance analysis. otherwise use default */ -#define CONFIG_L2_CACHE			    /* toggle L2 cache		*/ -#undef	CONFIG_BTB			    /* toggle branch predition	*/ -#undef	CONFIG_ADDR_STREAMING		    /* toggle addr streaming	*/ - -#define CONFIG_BOARD_EARLY_INIT_F 1	    /* Call board_early_init_f	*/ - -#undef	CFG_DRAM_TEST			    /* memory test, takes time	*/ -#define CFG_MEMTEST_START	0x00200000  /* memtest region */ -#define CFG_MEMTEST_END		0x00400000 - -#if (defined(CONFIG_PCI) && defined(CONFIG_TSEC_ENET) || \ -     defined(CONFIG_PCI) && defined(CONFIG_ETHER_ON_FCC) || \ -     defined(CONFIG_TSEC_ENET) && defined(CONFIG_ETHER_ON_FCC)) -#error "You can only use ONE of PCI Ethernet Card or TSEC Ethernet or CPM FCC." -#endif - -/* - * Base addresses -- Note these are effective addresses where the - * actual resources get mapped (not physical addresses) - */ -#define CFG_CCSRBAR_DEFAULT	0xff700000	/* CCSRBAR Default	*/ - -#if XXX -  #define CFG_CCSRBAR		0xfdf00000	/* relocated CCSRBAR	*/ -#else -  #define CFG_CCSRBAR		0xff700000	/* default CCSRBAR	*/ -#endif -#define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR	*/ - -#define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory	 */ -#define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE -#define CFG_SDRAM_SIZE		512		/* DDR is 512MB */ -#define SPD_EEPROM_ADDRESS	0x55		/*  DDR DIMM */ - -#undef  CONFIG_DDR_ECC				/* only for ECC DDR module	*/ -#undef  CONFIG_SPD_EEPROM			/* Use SPD EEPROM for DDR setup */ - -#if defined(CONFIG_MPC85xx_REV1) -  #define CONFIG_DDR_DLL			/* possible DLL fix needed	*/ -#endif - -#undef CONFIG_CLOCKS_IN_MHZ - -#if defined(CONFIG_RAM_AS_FLASH) -  #define CFG_LBC_SDRAM_BASE	0xfc000000	/* Localbus SDRAM */ -  #define CFG_FLASH_BASE	0xf8000000      /* start of FLASH 8M  */ -  #define CFG_BR0_PRELIM	0xf8000801      /* port size 8bit */ -  #define CFG_OR0_PRELIM	0xf8000ff7	/* 8MB Flash		*/ -#else /* Boot from real Flash */ -  #define CFG_LBC_SDRAM_BASE	0xf8000000	/* Localbus SDRAM */ -  #define CFG_FLASH_BASE	0xff800000      /* start of FLASH 8M    */ -  #define CFG_BR0_PRELIM	0xff800801      /* port size 8bit      */ -  #define CFG_OR0_PRELIM	0xff800ff7	/* 8MB Flash		*/ -#endif -#define CFG_LBC_SDRAM_SIZE	64		/* LBC SDRAM is 64MB	*/ - -/* local bus definitions */ -#define CFG_BR1_PRELIM		0xe4001801	/* 64M, 32-bit flash */ -#define CFG_OR1_PRELIM		0xfc000ff7 - -#define CFG_BR2_PRELIM		0x00000000	/* CS2 not used */ -#define CFG_OR2_PRELIM		0x00000000 - -#define CFG_BR3_PRELIM		0xf0001861	/* 64MB localbus SDRAM	*/ -#define CFG_OR3_PRELIM		0xfc000cc1 - -#if defined(CONFIG_RAM_AS_FLASH) -  #define CFG_BR4_PRELIM	0xf4001861	/* 64M localbus SDRAM */ -#else -  #define CFG_BR4_PRELIM	0xf8001861	/* 64M localbus SDRAM */ -#endif -#define CFG_OR4_PRELIM		0xfc000cc1 - -#define CFG_BR5_PRELIM		0xfc000801	/* 16M CS5 misc devices */ -#if 1 -  #define CFG_OR5_PRELIM	0xff000ff7 -#else -  #define CFG_OR5_PRELIM	0xff0000f0 -#endif - -#define CFG_BR6_PRELIM		0xe0001801	/* 64M, 32-bit flash */ -#define CFG_OR6_PRELIM		0xfc000ff7 -#define CFG_LBC_LCRR		0x00030002	/* local bus freq	*/ -#define CFG_LBC_LBCR		0x00000000 -#define CFG_LBC_LSRT		0x20000000 -#define CFG_LBC_MRTPR		0x20000000 -#define CFG_LBC_LSDMR_1		0x2861b723 -#define CFG_LBC_LSDMR_2		0x0861b723 -#define CFG_LBC_LSDMR_3		0x0861b723 -#define CFG_LBC_LSDMR_4		0x1861b723 -#define CFG_LBC_LSDMR_5		0x4061b723 - -/* just hijack the MOT BCSR def for SBC8560 misc devices */ -#define CFG_BCSR		((CFG_BR5_PRELIM & 0xff000000)|0x00400000) -/* the size of CS5 needs to be >= 16M for TLB and LAW setups */ - -#define CONFIG_L1_INIT_RAM -#define CFG_INIT_RAM_LOCK	1 -#define CFG_INIT_RAM_ADDR	0x70000000	/* Initial RAM address	*/ -#define CFG_INIT_RAM_END	0x4000		/* End of used area in RAM */ - -#define CFG_GBL_DATA_SIZE	128		/* num bytes initial data */ -#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) -#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET - -#define CFG_MONITOR_LEN		(256 * 1024)	/* Reserve 256 kB for Mon */ -#define CFG_MALLOC_LEN		(128 * 1024)	/* Reserved for malloc */ - -/* Serial Port */ -#undef  CONFIG_CONS_ON_SCC			/* define if console on SCC */ -#undef	CONFIG_CONS_NONE			/* define if console on something else */ - -#define CONFIG_CONS_INDEX     1 -#undef	CONFIG_SERIAL_SOFTWARE_FIFO -#define CFG_NS16550 -#define CFG_NS16550_SERIAL -#define CFG_NS16550_REG_SIZE	1 -#define CFG_NS16550_CLK		1843200 /* get_bus_freq(0) */ -#define CONFIG_BAUDRATE		9600 - -#define CFG_BAUDRATE_TABLE  \ -	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400,115200} - -#define CFG_NS16550_COM1	((CFG_BR5_PRELIM & 0xff000000)+0x00700000) -#define CFG_NS16550_COM2	((CFG_BR5_PRELIM & 0xff000000)+0x00800000) - -/* Use the HUSH parser */ -#define CFG_HUSH_PARSER -#ifdef	CFG_HUSH_PARSER -#define CFG_PROMPT_HUSH_PS2 "> " -#endif - -/* I2C */ -#define	 CONFIG_HARD_I2C		/* I2C with hardware support*/ -#undef	CONFIG_SOFT_I2C			/* I2C bit-banged */ -#define CFG_I2C_SPEED		400000	/* I2C speed and slave address	*/ -#define CFG_I2C_SLAVE		0x7F -#define CFG_I2C_NOPROBES	{0x69}	/* Don't probe these addrs */ - -#define CFG_PCI_MEM_BASE	0xC0000000 -#define CFG_PCI_MEM_PHYS	0xC0000000 -#define CFG_PCI_MEM_SIZE	0x10000000 - -#if defined(CONFIG_TSEC_ENET)		/* TSEC Ethernet port */ - -#  define CONFIG_NET_MULTI	1 -#  define CONFIG_MII		1	/* MII PHY management		*/ -#  define CONFIG_MPC85xx_TSEC1 -#  define CONFIG_MPC85xx_TSEC1_NAME	"TSEC0" -#  define TSEC1_PHY_ADDR	25 -#  define TSEC1_PHYIDX		0 -/* Options are: TSEC0 */ -#  define CONFIG_ETHPRIME		"TSEC0" - - -#elif defined(CONFIG_ETHER_ON_FCC)	/* CPM FCC Ethernet */ - -  #undef  CONFIG_ETHER_NONE		/* define if ether on something else */ -  #define CONFIG_ETHER_ON_FCC2		/* cpm FCC ethernet support	*/ -  #define CONFIG_ETHER_INDEX	2	/* which channel for ether  */ - -  #if (CONFIG_ETHER_INDEX == 2) -    /* -     * - Rx-CLK is CLK13 -     * - Tx-CLK is CLK14 -     * - Select bus for bd/buffers -     * - Full duplex -     */ -    #define CFG_CMXFCR_MASK	(CMXFCR_FC2 | CMXFCR_RF2CS_MSK | CMXFCR_TF2CS_MSK) -    #define CFG_CMXFCR_VALUE	(CMXFCR_RF2CS_CLK13 | CMXFCR_TF2CS_CLK14) -    #define CFG_CPMFCR_RAMTYPE	0 -    #define CFG_FCC_PSMR	(FCC_PSMR_FDE) - -  #elif (CONFIG_ETHER_INDEX == 3) -    /* need more definitions here for FE3 */ -  #endif				/* CONFIG_ETHER_INDEX */ - -  #define CONFIG_MII			/* MII PHY management */ -  #define CONFIG_BITBANGMII		/* bit-bang MII PHY management	*/ -  /* -   * GPIO pins used for bit-banged MII communications -   */ -  #define MDIO_PORT	2		/* Port C */ -  #define MDIO_ACTIVE	(iop->pdir |=  0x00400000) -  #define MDIO_TRISTATE	(iop->pdir &= ~0x00400000) -  #define MDIO_READ	((iop->pdat &  0x00400000) != 0) - -  #define MDIO(bit)	if(bit) iop->pdat |=  0x00400000; \ -			else	iop->pdat &= ~0x00400000 - -  #define MDC(bit)	if(bit) iop->pdat |=  0x00200000; \ -			else	iop->pdat &= ~0x00200000 - -  #define MIIDELAY	udelay(1) - -#endif - -/*----------------------------------------------------------------------- - * FLASH and environment organization - */ - -#define CFG_FLASH_CFI		1	/* Flash is CFI conformant		*/ -#define CFG_FLASH_CFI_DRIVER	1	/* Use the common driver		*/ -#if 0 -#define CFG_FLASH_USE_BUFFER_WRITE 1    /* use buffered writes (20x faster)     */ -#define CFG_FLASH_PROTECTION		/* use hardware protection		*/ -#endif -#define CFG_MAX_FLASH_SECT	64	/* max number of sectors on one chip	*/ -#define CFG_MAX_FLASH_BANKS	1	/* max number of memory banks		*/ - -#undef	CFG_FLASH_CHECKSUM -#define CFG_FLASH_ERASE_TOUT	200000		/* Timeout for Flash Erase (in ms)	*/ -#define CFG_FLASH_WRITE_TOUT	50000		/* Timeout for Flash Write (in ms)	*/ - -#define CFG_MONITOR_BASE	TEXT_BASE	/* start of monitor	*/ - -#if 0 -/* XXX This doesn't work and I don't want to fix it */ -#if (CFG_MONITOR_BASE < CFG_FLASH_BASE) -  #define CFG_RAMBOOT -#else -  #undef  CFG_RAMBOOT -#endif -#endif - -/* Environment */ -#if !defined(CFG_RAMBOOT) -  #if defined(CONFIG_RAM_AS_FLASH) -    #define CFG_ENV_IS_NOWHERE -    #define CFG_ENV_ADDR	(CFG_FLASH_BASE + 0x100000) -    #define CFG_ENV_SIZE	0x2000 -  #else -    #define CFG_ENV_IS_IN_FLASH	1 -    #define CFG_ENV_SECT_SIZE	0x20000 /* 128K(one sector) for env */ -    #define CFG_ENV_ADDR	(CFG_MONITOR_BASE - CFG_ENV_SECT_SIZE) -    #define CFG_ENV_SIZE	0x2000 /* CFG_ENV_SECT_SIZE */ -  #endif -#else -  #define CFG_NO_FLASH		1	/* Flash is not usable now	*/ -  #define CFG_ENV_IS_NOWHERE	1	/* Store ENV in memory only	*/ -  #define CFG_ENV_ADDR		(CFG_MONITOR_BASE - 0x1000) -  #define CFG_ENV_SIZE		0x2000 -#endif - -#define CONFIG_BOOTARGS "root=/dev/nfs rw nfsroot=192.168.0.251:/tftpboot ip=192.168.0.105:192.168.0.251::255.255.255.0:sbc8560:eth0:off console=ttyS0,9600" -/*#define CONFIG_BOOTARGS      "root=/dev/ram rw console=ttyS0,115200"*/ -#define CONFIG_BOOTCOMMAND	"bootm 0xff800000 0xffa00000" -#define CONFIG_BOOTDELAY	5	/* -1 disable autoboot */ - -#define CONFIG_LOADS_ECHO	1	/* echo on for serial download	*/ -#define CFG_LOADS_BAUD_CHANGE	1	/* allow baudrate change	*/ - -#if defined(CFG_RAMBOOT) || defined(CONFIG_RAM_AS_FLASH) -  #if defined(CONFIG_PCI) -    #define  CONFIG_COMMANDS	((CONFIG_CMD_DFL | CFG_CMD_PCI | \ -				CFG_CMD_PING | CFG_CMD_I2C) & \ -				 ~(CFG_CMD_ENV | \ -				  CFG_CMD_LOADS )) -  #elif (defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC)) -    #define  CONFIG_COMMANDS	((CONFIG_CMD_DFL | CFG_CMD_MII | \ -				CFG_CMD_PING | CFG_CMD_I2C) & \ -				~(CFG_CMD_ENV)) -  #endif -#else -  #if defined(CONFIG_PCI) -    #define  CONFIG_COMMANDS	(CONFIG_CMD_DFL | CFG_CMD_PCI | \ -				CFG_CMD_PING | CFG_CMD_I2C) -  #elif (defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC)) -    #define  CONFIG_COMMANDS	(CONFIG_CMD_DFL | CFG_CMD_MII | \ -				CFG_CMD_PING | CFG_CMD_I2C) -  #endif -#endif - -#include <cmd_confdefs.h> - -#undef CONFIG_WATCHDOG			/* watchdog disabled		*/ - -/* - * Miscellaneous configurable options - */ -#define CFG_LONGHELP			/* undef to save memory		*/ -#define CFG_PROMPT	"SBC8560=> " /* Monitor Command Prompt	*/ -#if (CONFIG_COMMANDS & CFG_CMD_KGDB) -  #define CFG_CBSIZE	1024		/* Console I/O Buffer Size	*/ -#else -  #define CFG_CBSIZE	256		/* Console I/O Buffer Size	*/ -#endif -#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ -#define CFG_MAXARGS	16		/* max number of command args	*/ -#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size	*/ -#define CFG_LOAD_ADDR	0x1000000	/* default load address */ -#define CFG_HZ		1000		/* decrementer freq: 1 ms ticks */ - -/* - * For booting Linux, the board info and command line data - * have to be in the first 8 MB of memory, since this is - * the maximum mapped by the Linux kernel during initialization. - */ -#define CFG_BOOTMAPSZ		(8 << 20) /* Initial Memory map for Linux */ - -/* Cache Configuration */ -#define CFG_DCACHE_SIZE		32768 -#define CFG_CACHELINE_SIZE	32 -#if (CONFIG_COMMANDS & CFG_CMD_KGDB) -  #define CFG_CACHELINE_SHIFT	5	/* log base 2 of the above value */ -#endif - -/* - * Internal Definitions - * - * Boot Flags - */ -#define BOOTFLAG_COLD	0x01		/* Normal Power-On: Boot from FLASH */ -#define BOOTFLAG_WARM	0x02		/* Software reboot		*/ - -#if (CONFIG_COMMANDS & CFG_CMD_KGDB) -  #define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ -  #define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */ -#endif - -/*Note: change below for your network setting!!! */ -#if defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC) -#  define CONFIG_ETHADDR	00:vv:ww:xx:yy:8a -#  define CONFIG_HAS_ETH1 -#  define CONFIG_ETH1ADDR	00:vv:ww:xx:yy:8b -#  define CONFIG_HAS_ETH2 -#  define CONFIG_ETH2ADDR	00:vv:ww:xx:yy:8c -#endif - -#define CONFIG_SERVERIP		YourServerIP -#define CONFIG_IPADDR		YourTargetIP -#define CONFIG_GATEWAYIP	YourGatewayIP -#define CONFIG_NETMASK		255.255.255.0 -#define CONFIG_HOSTNAME		SBC8560 -#define CONFIG_ROOTPATH		YourRootPath -#define CONFIG_BOOTFILE		YourImageName - -#endif	/* __CONFIG_H */ diff --git a/include/configs/SMN42.h b/include/configs/SMN42.h new file mode 100755 index 000000000..d588818fc --- /dev/null +++ b/include/configs/SMN42.h @@ -0,0 +1,199 @@ +/* + * (C) Copyright 2007 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * Configuation settings for the SMN42 board from Siemens. + * + * 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 __CONFIG_H +#define __CONFIG_H + +/* + * If we are developing, we might want to start u-boot from ram + * so we MUST NOT initialize critical regs like mem-timing ... + */ +#undef CONFIG_INIT_CRITICAL		/* undef for developing */ + +#undef CONFIG_SKIP_LOWLEVEL_INIT +#undef CONFIG_SKIP_RELOCATE_UBOOT + +/* + * High Level Configuration Options + * (easy to change) + */ +#define CONFIG_ARM7		1	/* This is a ARM7 CPU	*/ +#define CONFIG_ARM_THUMB	1	/* this is an ARM720TDMI */ +#define CONFIG_LPC2292 +#undef	CONFIG_ARM7_REVD		/* disable ARM720 REV.D Workarounds */ + +#undef CONFIG_USE_IRQ			/* don't need them anymore */ + +/* + * Size of malloc() pool + */ +#define CFG_MALLOC_LEN		(CFG_ENV_SIZE + 128*1024) +#define CFG_GBL_DATA_SIZE	128	/* size in bytes reserved for initial data */ + +/* + * Hardware drivers + */ + +/* + * select serial console configuration + */ +#define CONFIG_SERIAL1		1	/* we use Serial line 1 */ + +/* allow to overwrite serial and ethaddr */ +#define CONFIG_ENV_OVERWRITE + +#define CONFIG_BAUDRATE		115200 + +#define CONFIG_BOOTP_MASK	(CONFIG_BOOTP_DEFAULT|CONFIG_BOOTP_BOOTFILESIZE) + +/* enable I2C and select the hardware/software driver */ +#undef	CONFIG_HARD_I2C			/* I2C with hardware support	*/ +#define CONFIG_SOFT_I2C		1	/* I2C bit-banged		*/ +/* this would be 0xAE if E0, E1 and E2 were pulled high */ +#define CFG_I2C_SLAVE		0xA0 +#define CFG_I2C_EEPROM_ADDR	(0xA0 >> 1) +#define CFG_I2C_EEPROM_ADDR_LEN 2 /* 16 bit address */ +#define CFG_EEPROM_PAGE_WRITE_BITS 6 /* 64 bytes per write */ +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS 20 +/* not used but required by devices.c */ +#define CFG_I2C_SPEED 10000 + +#ifdef CONFIG_SOFT_I2C +/* + * Software (bit-bang) I2C driver configuration + */ +#define SCL		0x00000004		/* P0.2 */ +#define SDA		0x00000008		/* P0.3 */ + +#define	I2C_READ	((GET32(IO0PIN) & SDA) ? 1 : 0) +#define	I2C_SDA(x)	{ if (x) PUT32(IO0SET, SDA); else PUT32(IO0CLR, SDA); } +#define	I2C_SCL(x)	{ if (x) PUT32(IO0SET, SCL); else PUT32(IO0CLR, SCL); } +#define	I2C_DELAY	{ udelay(100); } +#define	I2C_ACTIVE	{ unsigned int i2ctmp; \ +					  i2ctmp = GET32(IO0DIR); \ +					  i2ctmp |= SDA; \ +					  PUT32(IO0DIR, i2ctmp); } +#define	I2C_TRISTATE	{ unsigned int i2ctmp; \ +					      i2ctmp = GET32(IO0DIR); \ +					      i2ctmp &= ~SDA; \ +						  PUT32(IO0DIR, i2ctmp); } +#endif /* CONFIG_SOFT_I2C */ + +/* + * Supported commands + */ +#define CONFIG_COMMANDS	       (CONFIG_CMD_DFL	| \ +				CFG_CMD_DHCP	| \ +				CFG_CMD_FAT		| \ +				CFG_CMD_MMC		| \ +				CFG_CMD_NET		| \ +				CFG_CMD_EEPROM	| \ +				CFG_CMD_PING) + +#define CONFIG_DOS_PARTITION + +/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */ +#include <cmd_confdefs.h> + +#define CONFIG_BOOTDELAY	5 + +/* + * Miscellaneous configurable options + */ +#define	CFG_LONGHELP				/* undef to save memory		*/ +#define	CFG_PROMPT		"SMN42 # " /* Monitor Command Prompt	*/ +#define	CFG_CBSIZE		256		/* Console I/O Buffer Size	*/ +#define	CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define	CFG_MAXARGS		16		/* max number of command args	*/ +#define CFG_BARGSIZE		CFG_CBSIZE	/* Boot Argument Buffer Size	*/ + +#define CFG_MEMTEST_START	0x81800000	/* memtest works on	*/ +#define CFG_MEMTEST_END		0x83000000	/* 24 MB in SRAM	*/ + +#undef	CFG_CLKS_IN_HZ		/* everything, incl board info, in Hz */ + +#define	CFG_LOAD_ADDR		0x81000000	/* default load address	*/ +						/* for uClinux img is here*/ + +#define CFG_SYS_CLK_FREQ	58982400	/* Hz */ +#define	CFG_HZ			2048		/* decrementer freq in Hz */ + +						/* valid baudrates */ +#define CFG_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 } + +/*----------------------------------------------------------------------- + * Stack sizes + * + * The stack sizes are set up in start.S using the settings below + */ +#define CONFIG_STACKSIZE	(128*1024)	/* regular stack */ +#ifdef CONFIG_USE_IRQ +#define CONFIG_STACKSIZE_IRQ	(4*1024)	/* IRQ stack */ +#define CONFIG_STACKSIZE_FIQ	(4*1024)	/* FIQ stack */ +#endif + +/*----------------------------------------------------------------------- + * Physical Memory Map + */ +#define CONFIG_NR_DRAM_BANKS	1	   /* we have 1 bank of SRAM */ +#define PHYS_SDRAM_1		0x81000000 /* SRAM Bank #1 */ +#define PHYS_SDRAM_1_SIZE	0x02000000 /* 32 MB SRAM */ + +/* This is the external flash */ +#define PHYS_FLASH_1		0x80000000 /* Flash Bank #1 */ +#define PHYS_FLASH_SIZE		0x01000000 /* 16 MB */ + +/*----------------------------------------------------------------------- + * FLASH and environment organization + */ + +/* + * The first entry in CFG_FLASH_BANKS_LIST is a dummy, but it must be present. + */ +#define CFG_FLASH_BANKS_LIST	{ 0, PHYS_FLASH_1 } +#define CFG_FLASH_ADDR0			0x555 +#define CFG_FLASH_ADDR1			0x2AA +#define CFG_FLASH_ERASE_TOUT	16384	/* Timeout for Flash Erase (in ms) */ +#define CFG_FLASH_WRITE_TOUT	5	/* Timeout for Flash Write (in ms) */ + +#define CFG_MAX_FLASH_SECT	128  /* max number of sectors on one chip    */ + +#define CFG_MAX_FLASH_BANKS	2	/* max number of memory banks		*/ + +#define	CFG_ENV_IS_IN_FLASH	1 +/* The Environment Sector is in the CPU-internal flash */ +#define CFG_FLASH_BASE		0 +#define CFG_ENV_OFFSET		0x3C000 +#define CFG_ENV_ADDR		(CFG_FLASH_BASE + CFG_ENV_OFFSET) +#define CFG_ENV_SIZE		0x2000 /* Total Size of Environment Sector	*/ + +#define CONFIG_CMDLINE_TAG +#define CONFIG_SETUP_MEMORY_TAGS +#define CONFIG_INITRD_TAG +#define CONFIG_MMC			1 +/* we use this ethernet chip */ +#define CONFIG_ENC28J60 + +#endif	/* __CONFIG_H */ diff --git a/include/configs/TB5200.h b/include/configs/TB5200.h index 8a6e5a61b..712668ab8 100644 --- a/include/configs/TB5200.h +++ b/include/configs/TB5200.h @@ -200,17 +200,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */ -#if defined(CFG_IPBSPEED_133) +#if defined(CFG_IPBCLK_EQUALS_XLBCLK)  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't - * been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock + * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#define CFG_PCISPEED_66			/* define for 66MHz speed */ +#define CFG_PCICLK_EQUALS_IPBCLK_DIV2		/* define for 66MHz speed */  #endif  /* @@ -432,7 +432,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  #define CFG_BOOTCS_CFG		0x0008DF30 /* for pci_clk  = 66 MHz */  #else  #define CFG_BOOTCS_CFG		0x0004DF30 /* for pci_clk = 33 MHz */ diff --git a/include/configs/TOP5200.h b/include/configs/TOP5200.h index f41dbd0cc..1cc9ce94f 100644 --- a/include/configs/TOP5200.h +++ b/include/configs/TOP5200.h @@ -186,7 +186,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133   		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK   		/* define for 133MHz speed */  /*   * I2C configuration diff --git a/include/configs/TQM5200.h b/include/configs/TQM5200.h index 7069b35ad..9da1d884b 100644 --- a/include/configs/TQM5200.h +++ b/include/configs/TQM5200.h @@ -234,6 +234,8 @@  #ifndef CONFIG_CAM5200  #define CUSTOM_ENV_SETTINGS						\  	"bootfile=/tftpboot/tqm5200/uImage\0"				\ +	"bootfile_fdt=/tftpboot/tqm5200/uImage_fdt\0"			\ +	"fdt_file=/tftpboot/tqm5200/tqm5200.dtb\0"			\  	"u-boot=/tftpboot/tqm5200/u-boot.bin\0"  #else  #define CUSTOM_ENV_SETTINGS 						\ @@ -243,6 +245,10 @@  #endif  #define CONFIG_EXTRA_ENV_SETTINGS					\ +	"console=ttyS0\0"						\ +	"kernel_addr=200000\0"						\ +	"fdt_addr=400000\0"						\ +	"hostname=tqm5200\0"						\  	"netdev=eth0\0"							\  	"rootpath=/opt/eldk/ppc_6xx\0"					\  	"ramargs=setenv bootargs root=/dev/ram rw\0"			\ @@ -252,13 +258,17 @@  		"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}"	\  		":${hostname}:${netdev}:off panic=1\0"			\  	"addcons=setenv bootargs ${bootargs} "				\ -		"console=ttyS0,${baudrate}\0"				\ +		"console=${console},${baudrate}\0"			\  	"flash_self=run ramargs addip addcons;"				\  		"bootm ${kernel_addr} ${ramdisk_addr}\0"		\  	"flash_nfs=run nfsargs addip addcons;"				\  		"bootm ${kernel_addr}\0"				\ -	"net_nfs=tftp 200000 ${bootfile};run nfsargs addip addcons;"	\ -		"bootm\0"						\ +	"net_nfs=tftp ${kernel_addr} ${bootfile};"			\ +		"run nfsargs addip addcons;bootm\0"			\ +	"net_nfs_fdt=tftp ${kernel_addr} ${bootfile_fdt};"		\ +		"tftp ${fdt_addr} ${fdt_file};setenv console ttyPSC0;"	\ +		"run nfsargs addip addcons;"				\ +		"bootm ${kernel_addr} - ${fdt_addr}\0"			\  	CUSTOM_ENV_SETTINGS						\  	"load=tftp 200000 ${u-boot}\0"					\  	ENV_UPDT							\ @@ -269,17 +279,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */ -#if defined(CFG_IPBSPEED_133) && !defined(CONFIG_CAM5200) +#if defined(CFG_IPBCLK_EQUALS_XLBCLK) && !defined(CONFIG_CAM5200)  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't - * been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock of + * 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#define CFG_PCISPEED_66			/* define for 66MHz speed */ +#define CFG_PCICLK_EQUALS_IPBCLK_DIV2	/* define for 66MHz speed */  #endif  /* @@ -594,7 +604,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  #define CFG_BOOTCS_CFG		0x0008DF30 /* for pci_clk  = 66 MHz */  #else  #define CFG_BOOTCS_CFG		0x0004DF30 /* for pci_clk = 33 MHz */ @@ -676,4 +686,18 @@  /* Interval between registers						     */  #define CFG_ATA_STRIDE		4 +/*----------------------------------------------------------------------- + * Open firmware flat tree support + *----------------------------------------------------------------------- + */ +#define CONFIG_OF_FLAT_TREE	1 +#define CONFIG_OF_BOARD_SETUP	1 + +/* maximum size of the flat tree (8K) */ +#define OF_FLAT_TREE_MAX_SIZE	8192 +#define OF_CPU			"PowerPC,5200@0" +#define OF_SOC			"soc5200@f0000000" +#define OF_TBCLK		(bd->bi_busfreq / 4) +#define OF_STDOUT_PATH		"/soc5200@f0000000/serial@2000" +  #endif /* __CONFIG_H */ diff --git a/include/configs/Total5200.h b/include/configs/Total5200.h index 817570323..d8686dd39 100644 --- a/include/configs/Total5200.h +++ b/include/configs/Total5200.h @@ -183,7 +183,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133   		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK   		/* define for 133MHz speed */  #endif  /* diff --git a/include/configs/acadia.h b/include/configs/acadia.h index 35b6a519e..0f447b004 100644 --- a/include/configs/acadia.h +++ b/include/configs/acadia.h @@ -34,7 +34,9 @@  #define CONFIG_ACADIA		1		/* Board is Acadia	*/  #define CONFIG_4xx		1		/* ... PPC4xx family	*/  #define CONFIG_405EZ		1		/* Specifc 405EZ support*/ -#define CONFIG_SYS_CLK_FREQ	66666666	/* external freq to pll	*/ +/* Detect Acadia PLL input clock automatically via CPLD bit		*/ +#define CONFIG_SYS_CLK_FREQ    ((in8(CFG_CPLD_BASE + 0) == 0x0c) ? \ +				66666666 : 33333000)  #define CONFIG_BOARD_EARLY_INIT_F 1		/* Call board_early_init_f */  #define CONFIG_MISC_INIT_F	1		/* Call misc_init_f	*/ @@ -107,6 +109,7 @@  /*-----------------------------------------------------------------------   * FLASH related   *----------------------------------------------------------------------*/ +#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)  #define CFG_FLASH_CFI			/* The flash is CFI compatible	*/  #define CFG_FLASH_CFI_DRIVER		/* Use common CFI driver	*/ @@ -120,6 +123,12 @@  #define CFG_FLASH_USE_BUFFER_WRITE 1	/* use buffered writes (20x faster)	*/  #define CFG_FLASH_EMPTY_INFO		/* print 'E' for empty sector on flinfo */ +#define	_CFG_CMD_INCLUDE	(CFG_CMD_ALL) +#else +#define	CFG_NO_FLASH		1	/* No NOR on Acadia when NAND-booting	*/ +#define	_CFG_CMD_INCLUDE	((CFG_CMD_ALL) & ~(CFG_CMD_FLASH | CFG_CMD_IMLS)) +#endif +  #ifdef CFG_ENV_IS_IN_FLASH  #define CFG_ENV_SECT_SIZE	0x40000 /* size of one complete sector	*/  #define CFG_ENV_ADDR		(CFG_MONITOR_BASE-CFG_ENV_SECT_SIZE) @@ -130,6 +139,63 @@  #define CFG_ENV_SIZE_REDUND	(CFG_ENV_SIZE)  #endif +/* + * IPL (Initial Program Loader, integrated inside CPU) + * Will load first 4k from NAND (SPL) into cache and execute it from there. + * + * SPL (Secondary Program Loader) + * Will load special U-Boot version (NUB) from NAND and execute it. This SPL + * has to fit into 4kByte. It sets up the CPU and configures the SDRAM + * controller and the NAND controller so that the special U-Boot image can be + * loaded from NAND to SDRAM. + * + * NUB (NAND U-Boot) + * This NAND U-Boot (NUB) is a special U-Boot version which can be started + * from RAM. Therefore it mustn't (re-)configure the SDRAM controller. + * + * On 440EPx the SPL is copied to SDRAM before the NAND controller is + * set up. While still running from cache, I experienced problems accessing + * the NAND controller.	sr - 2006-08-25 + */ +#define CFG_NAND_BOOT_SPL_SRC	0xfffff000	/* SPL location			*/ +#define CFG_NAND_BOOT_SPL_SIZE	(4 << 10)	/* SPL size			*/ +#define CFG_NAND_BOOT_SPL_DST	(CFG_OCM_DATA_ADDR + (12 << 10)) /* Copy SPL here*/ +#define CFG_NAND_U_BOOT_DST	0x01000000	/* Load NUB to this addr	*/ +#define CFG_NAND_U_BOOT_START	CFG_NAND_U_BOOT_DST /* Start NUB from this addr	*/ +#define CFG_NAND_BOOT_SPL_DELTA	(CFG_NAND_BOOT_SPL_SRC - CFG_NAND_BOOT_SPL_DST) + +/* + * Define the partitioning of the NAND chip (only RAM U-Boot is needed here) + */ +#define CFG_NAND_U_BOOT_OFFS	(16 << 10)	/* Offset to RAM U-Boot image	*/ +#define CFG_NAND_U_BOOT_SIZE	(384 << 10)	/* Size of RAM U-Boot image	*/ + +/* + * Now the NAND chip has to be defined (no autodetection used!) + */ +#define CFG_NAND_PAGE_SIZE	512		/* NAND chip page size		*/ +#define CFG_NAND_BLOCK_SIZE	(16 << 10)	/* NAND chip block size		*/ +#define CFG_NAND_PAGE_COUNT	32		/* NAND chip page count		*/ +#define CFG_NAND_BAD_BLOCK_POS	5		/* Location of bad block marker	*/ +#undef CFG_NAND_4_ADDR_CYCLE			/* No fourth addr used (<=32MB)	*/ + +#define CFG_NAND_ECCSIZE	256 +#define CFG_NAND_ECCBYTES	3 +#define CFG_NAND_ECCSTEPS	(CFG_NAND_PAGE_SIZE / CFG_NAND_ECCSIZE) +#define CFG_NAND_OOBSIZE	16 +#define CFG_NAND_ECCTOTAL	(CFG_NAND_ECCBYTES * CFG_NAND_ECCSTEPS) +#define CFG_NAND_ECCPOS		{0, 1, 2, 3, 6, 7} + +#ifdef CFG_ENV_IS_IN_NAND +/* + * For NAND booting the environment is embedded in the U-Boot image. Please take + * look at the file board/amcc/sequoia/u-boot-nand.lds for details. + */ +#define CFG_ENV_SIZE		CFG_NAND_BLOCK_SIZE +#define CFG_ENV_OFFSET		(CFG_NAND_U_BOOT_OFFS + CFG_ENV_SIZE) +#define CFG_ENV_OFFSET_REDUND	(CFG_ENV_OFFSET + CFG_ENV_SIZE) +#endif +  /*-----------------------------------------------------------------------   * RAM (CRAM)   *----------------------------------------------------------------------*/ @@ -207,7 +273,11 @@  	"update=protect off fffc0000 ffffffff;era fffc0000 ffffffff;"	\  		"cp.b ${fileaddr} fffc0000 ${filesize};"		\  		"setenv filesize;saveenv\0"				\ -	"upd=run load;run update\0"					\ +	"upd=run load update\0"						\ +	"nload=tftp 200000 acadia/u-boot-nand.bin\0"			\ +	"nupdate=nand erase 0 60000;nand write 200000 0 60000;"		\ +		"setenv filesize;saveenv\0"				\ +	"nupd=run nload nupdate\0"					\  	"kozio=bootm ffc60000\0"					\  	""  #define CONFIG_BOOTCOMMAND	"run flash_self" @@ -224,16 +294,6 @@  #define CONFIG_USB_OHCI  #define CONFIG_USB_STORAGE -#if 0 /* test-only */ -#define TEST_ONLY_NAND -#endif - -#ifdef TEST_ONLY_NAND -#define CMD_NAND		CFG_CMD_NAND -#else -#define CMD_NAND		0 -#endif -  /* Partitions */  #define CONFIG_MAC_PARTITION  #define CONFIG_DOS_PARTITION @@ -241,24 +301,24 @@  #define CONFIG_SUPPORT_VFAT -#define CONFIG_COMMANDS       (CONFIG_CMD_DFL	|	\ -			       CFG_CMD_ASKENV	|	\ -			       CFG_CMD_DHCP	|	\ -			       CFG_CMD_DTT	|	\ -			       CFG_CMD_DIAG	|	\ -			       CFG_CMD_EEPROM	|	\ -			       CFG_CMD_ELF	|	\ -			       CFG_CMD_FAT	|	\ -			       CFG_CMD_I2C	|	\ -			       CFG_CMD_IRQ	|	\ -			       CFG_CMD_MII	|	\ -			       CMD_NAND		|	\ -			       CFG_CMD_NET	|	\ -			       CFG_CMD_NFS	|	\ -			       CFG_CMD_PCI	|	\ -			       CFG_CMD_PING	|	\ -			       CFG_CMD_REGINFO	|	\ -			       CFG_CMD_USB) +#define CONFIG_COMMANDS	((CONFIG_CMD_DFL & _CFG_CMD_INCLUDE)	|	\ +			 CFG_CMD_ASKENV	|				\ +			 CFG_CMD_DHCP	|				\ +			 CFG_CMD_DTT	|				\ +			 CFG_CMD_DIAG	|				\ +			 CFG_CMD_EEPROM	|				\ +			 CFG_CMD_ELF	|				\ +			 CFG_CMD_FAT	|				\ +			 CFG_CMD_I2C	|				\ +			 CFG_CMD_IRQ	|				\ +			 CFG_CMD_MII	|				\ +			 CFG_CMD_NAND	|				\ +			 CFG_CMD_NET	|				\ +			 CFG_CMD_NFS	|				\ +			 CFG_CMD_PCI	|				\ +			 CFG_CMD_PING	|				\ +			 CFG_CMD_REGINFO |				\ +			 CFG_CMD_USB)  /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */  #include <cmd_confdefs.h> @@ -300,7 +360,6 @@   */  #define CFG_BOOTMAPSZ		(8 << 20)	/* Initial Memory map for Linux */ -#ifdef TEST_ONLY_NAND  /*-----------------------------------------------------------------------   * NAND FLASH   *----------------------------------------------------------------------*/ @@ -308,7 +367,6 @@  #define NAND_MAX_CHIPS		1  #define CFG_NAND_BASE		(CFG_NAND_ADDR + CFG_NAND_CS)  #define CFG_NAND_SELECT_DEVICE  1	/* nand driver supports mutipl. chips	*/ -#endif  /*-----------------------------------------------------------------------   * Cache Configuration @@ -322,12 +380,16 @@  /*-----------------------------------------------------------------------   * External Bus Controller (EBC) Setup   *----------------------------------------------------------------------*/ -#define CFG_NAND_CS		0		/* NAND chip connected to CSx	*/ - +#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) +#define CFG_NAND_CS		3  /* Memory Bank 0 (Flash) initialization						*/  #define CFG_EBC_PB0AP		0x03337200  #define CFG_EBC_PB0CR		0xfe0bc000 +/* Memory Bank 3 (NAND-FLASH) initialization					*/ +#define CFG_EBC_PB3AP		0x018003c0 +#define CFG_EBC_PB3CR		(CFG_NAND_ADDR | 0x1c000) +  /* Just initial configuration for CRAM. Will be changed in memory.c to sync mode*/  /* Memory Bank 1 (CRAM) initialization						*/  #define CFG_EBC_PB1AP		0x030400c0 @@ -336,10 +398,24 @@  /* Memory Bank 2 (CRAM) initialization						*/  #define CFG_EBC_PB2AP		0x030400c0  #define CFG_EBC_PB2CR		0x020bc000 +#else +#define CFG_NAND_CS		0		/* NAND chip connected to CSx	*/ +/* Memory Bank 0 (NAND-FLASH) initialization					*/ +#define CFG_EBC_PB0AP		0x018003c0 +#define CFG_EBC_PB0CR		(CFG_NAND_ADDR | 0x1c000) -/* Memory Bank 3 (NAND-FLASH) initialization					*/ -#define CFG_EBC_PB3AP		0x018003c0 -#define CFG_EBC_PB3CR		(CFG_NAND_ADDR | 0x1c000) +/* + * When NAND-booting the CRAM EBC setup must be done in sync mode, since the + * NAND-SPL already initialized the CRAM and EBC to sync mode. + */ +/* Memory Bank 1 (CRAM) initialization						*/ +#define CFG_EBC_PB1AP		0x9C0201C0 +#define CFG_EBC_PB1CR		0x000bc000 + +/* Memory Bank 2 (CRAM) initialization						*/ +#define CFG_EBC_PB2AP		0x9C0201C0 +#define CFG_EBC_PB2CR		0x020bc000 +#endif  /* Memory Bank 4 (CPLD) initialization						*/  #define CFG_EBC_PB4AP		0x04006000 @@ -351,14 +427,15 @@   * GPIO Setup   *----------------------------------------------------------------------*/  #define CFG_GPIO_CRAM_CLK	8 -#define CFG_GPIO_CRAM_WAIT	9 +#define CFG_GPIO_CRAM_WAIT	9		/* GPIO-In		*/  #define CFG_GPIO_CRAM_ADV	10 -#define CFG_GPIO_CRAM_CRE	(32 + 21) +#define CFG_GPIO_CRAM_CRE	(32 + 21)	/* GPIO-Out		*/  /*-----------------------------------------------------------------------   * Definitions for GPIO_0 setup (PPC405EZ specific)   * - * GPIO0[0-3]	- External Bus Controller CS_4 - CS_7 Outputs + * GPIO0[0-2]	- External Bus Controller CS_4 - CS_6 Outputs + * GPIO0[3]	- NAND FLASH Controller CE3 (NFCE3) Output   * GPIO0[4]	- External Bus Controller Hold Input   * GPIO0[5]	- External Bus Controller Priority Input   * GPIO0[6]	- External Bus Controller HLDA Output @@ -374,12 +451,12 @@   * GPIO0[28-30]	- Trace Outputs / PWM Inputs   * GPIO0[31]	- PWM_8 I/O   */ -#define CFG_GPIO0_TCR		0xC0000000 -#define CFG_GPIO0_OSRL		0x50000000 -#define CFG_GPIO0_OSRH		0x00000055 -#define CFG_GPIO0_ISR1L		0x00000000 +#define CFG_GPIO0_TCR		0xC0A00000 +#define CFG_GPIO0_OSRL		0x50004400 +#define CFG_GPIO0_OSRH		0x02000055 +#define CFG_GPIO0_ISR1L		0x00001000  #define CFG_GPIO0_ISR1H		0x00000055 -#define CFG_GPIO0_TSRL		0x00000000 +#define CFG_GPIO0_TSRL		0x02000000  #define CFG_GPIO0_TSRH		0x00000055  /*----------------------------------------------------------------------- @@ -396,13 +473,13 @@   * GPIO1[16]	- SPI_SS_1_N Output   * GPIO1[17-20]	- Trace Output/External Interrupts IRQ0 - IRQ3 inputs   */ -#define CFG_GPIO1_OSRH		0x55455555 +#define CFG_GPIO1_TCR		0xFFFF8414  #define CFG_GPIO1_OSRL		0x40000110 -#define CFG_GPIO1_ISR1H		0x00000000 +#define CFG_GPIO1_OSRH		0x55455555  #define CFG_GPIO1_ISR1L		0x15555445 -#define CFG_GPIO1_TSRH		0x00000000 +#define CFG_GPIO1_ISR1H		0x00000000  #define CFG_GPIO1_TSRL		0x00000000 -#define CFG_GPIO1_TCR		0xFFFF8014 +#define CFG_GPIO1_TSRH		0x00000000  /*   * Internal Definitions diff --git a/include/configs/aev.h b/include/configs/aev.h index 8d9f0a166..f6f530ced 100644 --- a/include/configs/aev.h +++ b/include/configs/aev.h @@ -166,17 +166,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */ -#if defined(CFG_IPBSPEED_133) +#if defined(CFG_IPBCLK_EQUALS_XLBCLK)  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't - * been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock + * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#define CFG_PCISPEED_66			/* define for 66MHz speed */ +#define CFG_PCICLK_EQUALS_IPBCLK_DIV2	/* define for 66MHz speed */  #endif  /* @@ -362,7 +362,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  #define CFG_BOOTCS_CFG		0x0008DF30 /* for pci_clk  = 66 MHz */  #else  #define CFG_BOOTCS_CFG		0x0004DF30 /* for pci_clk = 33 MHz */ diff --git a/include/configs/bamboo.h b/include/configs/bamboo.h index bcc736ceb..763d1c7a8 100644 --- a/include/configs/bamboo.h +++ b/include/configs/bamboo.h @@ -1,5 +1,5 @@  /* - * (C) Copyright 2005-2006 + * (C) Copyright 2005-2007   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * See file CREDITS for list of people who contributed to this @@ -43,7 +43,6 @@   * 2nd ethernet port you have to "undef" the following define.   */  #define CONFIG_BAMBOO_NAND      1       /* enable nand flash support    */ -#define CFG_NAND_LEGACY  /*-----------------------------------------------------------------------   * Base addresses -- Note these are effective addresses where the @@ -51,7 +50,7 @@   *----------------------------------------------------------------------*/  #define CFG_MONITOR_LEN		(384 * 1024)	/* Reserve 384 kB for Monitor	*/  #define CFG_MALLOC_LEN		(256 * 1024)	/* Reserve 256 kB for malloc()	*/ -#define CFG_MONITOR_BASE	(-CFG_MONITOR_LEN) +#define CFG_MONITOR_BASE	TEXT_BASE  #define CFG_SDRAM_BASE	        0x00000000	    /* _must_ be 0	*/  #define CFG_FLASH_BASE	        0xfff00000	    /* start of FLASH	*/  #define CFG_PCI_MEMBASE	        0xa0000000	    /* mapped pci memory*/ @@ -105,14 +104,11 @@  /*-----------------------------------------------------------------------   * Environment   *----------------------------------------------------------------------*/ -/* - * Define here the location of the environment variables (FLASH or EEPROM). - * Note: DENX encourages to use redundant environment in FLASH. - */ -#if 1 +#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL)  #define CFG_ENV_IS_IN_FLASH     1	/* use FLASH for environment vars	*/  #else -#define CFG_ENV_IS_IN_EEPROM	1	/* use EEPROM for environment vars	*/ +#define CFG_ENV_IS_IN_NAND	1	/* use NAND for environment vars	*/ +#define CFG_ENV_IS_EMBEDDED	1	/* use embedded environment */  #endif  /*----------------------------------------------------------------------- @@ -134,7 +130,7 @@  #ifdef CFG_ENV_IS_IN_FLASH  #define CFG_ENV_SECT_SIZE	0x10000 	/* size of one complete sector	*/ -#define CFG_ENV_ADDR		(CFG_MONITOR_BASE-CFG_ENV_SECT_SIZE) +#define CFG_ENV_ADDR		((-CFG_MONITOR_LEN)-CFG_ENV_SECT_SIZE)  #define	CFG_ENV_SIZE		0x2000	/* Total Size of Environment Sector	*/  /* Address and size of Redundant Environment Sector	*/ @@ -142,66 +138,80 @@  #define CFG_ENV_SIZE_REDUND	(CFG_ENV_SIZE)  #endif /* CFG_ENV_IS_IN_FLASH */ -/*----------------------------------------------------------------------- - * NAND-FLASH related - *----------------------------------------------------------------------*/ -#define NAND_CMD_REG   (0x00) /* NandFlash Command Register */ -#define NAND_ADDR_REG  (0x04) /* NandFlash Address Register */ -#define NAND_DATA_REG  (0x08) /* NandFlash Data Register */ -#define NAND_ECC0_REG  (0x10) /* NandFlash ECC Register0 */ -#define NAND_ECC1_REG  (0x14) /* NandFlash ECC Register1 */ -#define NAND_ECC2_REG  (0x18) /* NandFlash ECC Register2 */ -#define NAND_ECC3_REG  (0x1C) /* NandFlash ECC Register3 */ -#define NAND_ECC4_REG  (0x20) /* NandFlash ECC Register4 */ -#define NAND_ECC5_REG  (0x24) /* NandFlash ECC Register5 */ -#define NAND_ECC6_REG  (0x28) /* NandFlash ECC Register6 */ -#define NAND_ECC7_REG  (0x2C) /* NandFlash ECC Register7 */ -#define NAND_CR0_REG   (0x30) /* NandFlash Device Bank0 Config Register */ -#define NAND_CR1_REG   (0x34) /* NandFlash Device Bank1 Config Register */ -#define NAND_CR2_REG   (0x38) /* NandFlash Device Bank2 Config Register */ -#define NAND_CR3_REG   (0x3C) /* NandFlash Device Bank3 Config Register */ -#define NAND_CCR_REG   (0x40) /* NandFlash Core Configuration Register */ -#define NAND_STAT_REG  (0x44) /* NandFlash Device Status Register */ -#define NAND_HWCTL_REG (0x48) /* NandFlash Direct Hwd Control Register */ -#define NAND_REVID_REG (0x50) /* NandFlash Core Revision Id Register */ +/* + * IPL (Initial Program Loader, integrated inside CPU) + * Will load first 4k from NAND (SPL) into cache and execute it from there. + * + * SPL (Secondary Program Loader) + * Will load special U-Boot version (NUB) from NAND and execute it. This SPL + * has to fit into 4kByte. It sets up the CPU and configures the SDRAM + * controller and the NAND controller so that the special U-Boot image can be + * loaded from NAND to SDRAM. + * + * NUB (NAND U-Boot) + * This NAND U-Boot (NUB) is a special U-Boot version which can be started + * from RAM. Therefore it mustn't (re-)configure the SDRAM controller. + * + * On 440EPx the SPL is copied to SDRAM before the NAND controller is + * set up. While still running from cache, I experienced problems accessing + * the NAND controller.	sr - 2006-08-25 + */ +#define CFG_NAND_BOOT_SPL_SRC	0xfffff000	/* SPL location			*/ +#define CFG_NAND_BOOT_SPL_SIZE	(4 << 10)	/* SPL size			*/ +#define CFG_NAND_BOOT_SPL_DST	0x00800000	/* Copy SPL here		*/ +#define CFG_NAND_U_BOOT_DST	0x01000000	/* Load NUB to this addr	*/ +#define CFG_NAND_U_BOOT_START	CFG_NAND_U_BOOT_DST /* Start NUB from this addr	*/ +#define CFG_NAND_BOOT_SPL_DELTA	(CFG_NAND_BOOT_SPL_SRC - CFG_NAND_BOOT_SPL_DST) -/* Nand Flash K9F1208U0A Command Set => Nand Flash 0 */ -#define NAND0_CMD_READ1_HALF1     0x00     /* Starting addr for 1rst half of registers */ -#define NAND0_CMD_READ1_HALF2     0x01     /* Starting addr for 2nd half of registers */ -#define NAND0_CMD_READ2           0x50 -#define NAND0_CMD_READ_ID         0x90 -#define NAND0_CMD_READ_STATUS     0x70 -#define NAND0_CMD_RESET           0xFF -#define NAND0_CMD_PAGE_PROG       0x80 -#define NAND0_CMD_PAGE_PROG_TRUE  0x10 -#define NAND0_CMD_PAGE_PROG_DUMMY 0x11 -#define NAND0_CMD_BLOCK_ERASE     0x60 -#define NAND0_CMD_BLOCK_ERASE_END 0xD0 +/* + * Define the partitioning of the NAND chip (only RAM U-Boot is needed here) + */ +#define CFG_NAND_U_BOOT_OFFS	(16 << 10)	/* Offset to RAM U-Boot image	*/ +#define CFG_NAND_U_BOOT_SIZE	(384 << 10)	/* Size of RAM U-Boot image	*/ -#define CFG_MAX_NAND_DEVICE     1	/* Max number of NAND devices */ -#define SECTORSIZE              512 +/* + * Now the NAND chip has to be defined (no autodetection used!) + */ +#define CFG_NAND_PAGE_SIZE	512		/* NAND chip page size		*/ +#define CFG_NAND_BLOCK_SIZE	(16 << 10)	/* NAND chip block size		*/ +#define CFG_NAND_PAGE_COUNT	32		/* NAND chip page count		*/ +#define CFG_NAND_BAD_BLOCK_POS	5		/* Location of bad block marker	*/ +#define CFG_NAND_4_ADDR_CYCLE	1		/* Fourth addr used (>32MB)	*/ -#define ADDR_COLUMN             1 -#define ADDR_PAGE               2 -#define ADDR_COLUMN_PAGE        3 +#define CFG_NAND_ECCSIZE	256 +#define CFG_NAND_ECCBYTES	3 +#define CFG_NAND_ECCSTEPS	(CFG_NAND_PAGE_SIZE / CFG_NAND_ECCSIZE) +#define CFG_NAND_OOBSIZE	16 +#define CFG_NAND_ECCTOTAL	(CFG_NAND_ECCBYTES * CFG_NAND_ECCSTEPS) +#define CFG_NAND_ECCPOS		{0, 1, 2, 3, 6, 7} -#define NAND_ChipID_UNKNOWN     0x00 -#define NAND_MAX_FLOORS         1 -#define NAND_MAX_CHIPS          1 +#ifdef CFG_ENV_IS_IN_NAND +/* + * For NAND booting the environment is embedded in the U-Boot image. Please take + * look at the file board/amcc/sequoia/u-boot-nand.lds for details. + */ +#define CFG_ENV_SIZE		CFG_NAND_BLOCK_SIZE +#define CFG_ENV_OFFSET		(CFG_NAND_U_BOOT_OFFS + CFG_ENV_SIZE) +#define CFG_ENV_OFFSET_REDUND	(CFG_ENV_OFFSET + CFG_ENV_SIZE) +#endif -#define WRITE_NAND_COMMAND(d, adr) do {*(volatile u8 *)((ulong)adr+NAND_CMD_REG) = d;} while(0) -#define WRITE_NAND_ADDRESS(d, adr) do {*(volatile u8 *)((ulong)adr+NAND_ADDR_REG) = d;} while(0) -#define WRITE_NAND(d, adr)      do {*(volatile u8 *)((ulong)adr+NAND_DATA_REG) = d;} while(0) -#define READ_NAND(adr)          (*(volatile u8 *)((ulong)adr+NAND_DATA_REG)) -#define NAND_WAIT_READY(nand)   while (!(*(volatile u8 *)((ulong)nand->IO_ADDR+NAND_STAT_REG) & 0x01)) +/*----------------------------------------------------------------------- + * NAND FLASH + *----------------------------------------------------------------------*/ +#define CFG_MAX_NAND_DEVICE	2 +#define NAND_MAX_CHIPS		CFG_MAX_NAND_DEVICE +#define CFG_NAND_BASE		(CFG_NAND_ADDR + CFG_NAND_CS) +#define CFG_NAND_BASE_LIST	{ CFG_NAND_BASE, CFG_NAND_ADDR + 2 } +#define CFG_NAND_SELECT_DEVICE  1	/* nand driver supports mutipl. chips	*/ -/* not needed with 440EP NAND controller */ -#define NAND_CTL_CLRALE(nandptr) -#define NAND_CTL_SETALE(nandptr) -#define NAND_CTL_CLRCLE(nandptr) -#define NAND_CTL_SETCLE(nandptr) -#define NAND_DISABLE_CE(nand) -#define NAND_ENABLE_CE(nand) +#if !defined(CONFIG_NAND_U_BOOT) && !defined(CONFIG_NAND_SPL) +#define CFG_NAND_CS		1 +#else +#define CFG_NAND_CS		0		/* NAND chip connected to CSx	*/ +/* Memory Bank 0 (NAND-FLASH) initialization					*/ +#define CFG_EBC_PB0AP		0x018003c0 +#define CFG_EBC_PB0CR		(CFG_NAND_ADDR | 0x1c000) +#endif  /*-----------------------------------------------------------------------   * DDR SDRAM @@ -209,7 +219,8 @@  #define CONFIG_SPD_EEPROM               /* Use SPD EEPROM for setup             */  #undef CONFIG_DDR_ECC			/* don't use ECC			*/  #define CFG_SIMULATE_SPD_EEPROM	0xff	/* simulate spd eeprom on this address	*/ -#define SPD_EEPROM_ADDRESS      {CFG_SIMULATE_SPD_EEPROM, 0x50, 0x51} +#define SPD_EEPROM_ADDRESS	{CFG_SIMULATE_SPD_EEPROM, 0x50, 0x51} +#define CFG_MBYTES_SDRAM	(64)	/* 64MB fixed size for early-sdram-init */  /*-----------------------------------------------------------------------   * I2C diff --git a/include/configs/canmb.h b/include/configs/canmb.h index 2c160a448..ec6d57e1e 100644 --- a/include/configs/canmb.h +++ b/include/configs/canmb.h @@ -111,7 +111,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133   		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK   		/* define for 133MHz speed */  /*   * Flash configuration, expect one 16 Megabyte Bank at most diff --git a/include/configs/cpci5200.h b/include/configs/cpci5200.h index f9586fbcb..f5efcd911 100644 --- a/include/configs/cpci5200.h +++ b/include/configs/cpci5200.h @@ -179,7 +179,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  #endif  /*   * I2C configuration diff --git a/include/configs/delta.h b/include/configs/delta.h index 91284fdac..15681208b 100644 --- a/include/configs/delta.h +++ b/include/configs/delta.h @@ -188,7 +188,6 @@  /*   * NAND Flash   */ -/* Use the new NAND code. (BOARDLIBS = drivers/nand/libnand.a required) */  #undef CFG_NAND_LEGACY  #define CFG_NAND0_BASE		0x0 /* 0x43100040 */ /* 0x10000000 */ diff --git a/include/configs/hmi1001.h b/include/configs/hmi1001.h index 095b5f6dc..4d813d8be 100644 --- a/include/configs/hmi1001.h +++ b/include/configs/hmi1001.h @@ -110,7 +110,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  /*   * I2C configuration diff --git a/include/configs/inka4x0.h b/include/configs/inka4x0.h index 773d5d2c1..ad3cf06e9 100644 --- a/include/configs/inka4x0.h +++ b/include/configs/inka4x0.h @@ -147,7 +147,7 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  /*   * Flash configuration diff --git a/include/configs/katmai.h b/include/configs/katmai.h index 7f55366ca..cc47a168e 100644 --- a/include/configs/katmai.h +++ b/include/configs/katmai.h @@ -360,7 +360,19 @@  				 EBC_BXCR_BW_16BIT)  /* Memory Bank 1 (Xilinx System ACE controller) initialization		*/ -#define CFG_EBC_PB1AP		0x7F8FFE80 +#define CFG_EBC_PB1AP		(EBC_BXAP_BME_DISABLED      |		\ +				 EBC_BXAP_TWT_ENCODE(4)     |		\ +				 EBC_BXAP_BCE_DISABLE       |		\ +				 EBC_BXAP_BCT_2TRANS        |		\ +				 EBC_BXAP_CSN_ENCODE(0)     |		\ +				 EBC_BXAP_OEN_ENCODE(0)     |		\ +				 EBC_BXAP_WBN_ENCODE(0)     |		\ +				 EBC_BXAP_WBF_ENCODE(0)     |		\ +				 EBC_BXAP_TH_ENCODE(0)      |		\ +				 EBC_BXAP_RE_DISABLED       |		\ +				 EBC_BXAP_SOR_NONDELAYED    |		\ +				 EBC_BXAP_BEM_WRITEONLY     |		\ +				 EBC_BXAP_PEN_DISABLED)  #define CFG_EBC_PB1CR		(EBC_BXCR_BAS_ENCODE(CFG_ACE_BASE)  |	\  				 EBC_BXCR_BS_1MB                    |	\  				 EBC_BXCR_BU_RW                     |	\ diff --git a/include/configs/lpc2292sodimm.h b/include/configs/lpc2292sodimm.h index 7e515230a..7b6c6953e 100644..100755 --- a/include/configs/lpc2292sodimm.h +++ b/include/configs/lpc2292sodimm.h @@ -1,12 +1,8 @@  /* - * (C) Copyright 2000 - * Sysgo Real-Time Solutions, GmbH <www.elinos.com> - * Marius Groeger <mgroeger@sysgo.de> + * (C) Copyright 2007 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de.   * - * Configuation settings for the EP7312 board. - * - * Modified to work on Armadillo HT1070 ARM720T board - * (C) Copyright 2005 Rowel Atienza rowel@diwalabs.com + * Configuation settings for the LPC2292SODIMM board from Embedded Artists.   *   * See file CREDITS for list of people who contributed to this   * project. @@ -31,7 +27,7 @@  #define __CONFIG_H  /* - * If we are developing, we might want to start armboot from ram + * If we are developing, we might want to start u-boot from ram   * so we MUST NOT initialize critical regs like mem-timing ...   */  #undef CONFIG_INIT_CRITICAL		/* undef for developing */ @@ -46,7 +42,7 @@  #define CONFIG_ARM7		1	/* This is a ARM7 CPU	*/  #define CONFIG_ARM_THUMB	1	/* this is an ARM720TDMI */  #define CONFIG_LPC2292 -#undef  CONFIG_ARM7_REVD	 	/* disable ARM720 REV.D Workarounds */ +#undef	CONFIG_ARM7_REVD		/* disable ARM720 REV.D Workarounds */  #undef CONFIG_USE_IRQ			/* don't need them anymore */ @@ -70,7 +66,7 @@  #define CONFIG_BAUDRATE		115200 -#define CONFIG_BOOTP_MASK       (CONFIG_BOOTP_DEFAULT|CONFIG_BOOTP_BOOTFILESIZE) +#define CONFIG_BOOTP_MASK	(CONFIG_BOOTP_DEFAULT|CONFIG_BOOTP_BOOTFILESIZE)  /*   * Supported commands @@ -103,11 +99,12 @@  #define CFG_MEMTEST_START	0x40000000	/* memtest works on	*/  #define CFG_MEMTEST_END		0x40000000	/* 4 ... 8 MB in DRAM	*/ -#undef  CFG_CLKS_IN_HZ		/* everything, incl board info, in Hz */ +#undef	CFG_CLKS_IN_HZ		/* everything, incl board info, in Hz */ -#define	CFG_LOAD_ADDR		0x00040000	/* default load address	for armadillo: kernel img is here*/ +#define	CFG_LOAD_ADDR		0x00040000	/* default load address	for	*/ +						/* armadillo: kernel img is here*/ -#define CFG_SYS_CLK_FREQ        58982400        /* Hz */ +#define CFG_SYS_CLK_FREQ	58982400	/* Hz */  #define	CFG_HZ			2048		/* decrementer freq in Hz */  						/* valid baudrates */ @@ -154,5 +151,7 @@  #define CONFIG_SETUP_MEMORY_TAGS  #define CONFIG_INITRD_TAG  #define CONFIG_MMC 1 +/* we use this ethernet chip */ +#define CONFIG_ENC28J60  #endif	/* __CONFIG_H */ diff --git a/include/configs/luan.h b/include/configs/luan.h index 9c8769b20..045a144aa 100644 --- a/include/configs/luan.h +++ b/include/configs/luan.h @@ -135,7 +135,8 @@   *----------------------------------------------------------------------*/  #define CONFIG_SPD_EEPROM	1	/* Use SPD EEPROM for setup	*/  #define SPD_EEPROM_ADDRESS	{0x53, 0x52}	/* SPD i2c spd addresses*/ -#undef CONFIG_DDR_ECC			/* no ECC support for now	*/ +#define CONFIG_DDR_ECC		1	/* with ECC support		*/ +#define CFG_44x_DDR2_CKTR_180	1	/* use 180 deg advance		*/  /*-----------------------------------------------------------------------   * I2C diff --git a/include/configs/mcc200.h b/include/configs/mcc200.h index 621a81c9c..c2324a04c 100644 --- a/include/configs/mcc200.h +++ b/include/configs/mcc200.h @@ -169,7 +169,7 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  /*   * I2C configuration diff --git a/include/configs/ml401.h b/include/configs/ml401.h index cb159e79d..3db287784 100644 --- a/include/configs/ml401.h +++ b/include/configs/ml401.h @@ -28,6 +28,7 @@  #include "../board/xilinx/ml401/xparameters.h"  #define	CONFIG_MICROBLAZE	1	/* MicroBlaze CPU */ +#define	MICROBLAZE_V5		1  #define	CONFIG_ML401		1	/* ML401 Board */  /* uart */ @@ -36,11 +37,11 @@  #define	CFG_BAUDRATE_TABLE	{ CONFIG_BAUDRATE }  /* setting reset address */ -#define	CFG_RESET_ADDRESS	TEXT_BASE +/*#define	CFG_RESET_ADDRESS	TEXT_BASE*/  /* ethernet */  #define CONFIG_EMACLITE		1 -#define XPAR_EMAC_0_DEVICE_ID	XPAR_XEMAC_NUM_INSTANCES +#define XPAR_EMAC_0_DEVICE_ID	XPAR_OPB_ETHERNET_0_DEVICE_ID  /* gpio */  #define	CFG_GPIO_0		1 @@ -58,6 +59,10 @@  #define	FREQUENCE		XILINX_CLOCK_FREQ  #define	CFG_TIMER_0_PRELOAD	( FREQUENCE/1000 ) +/* FSL */ +#define	CFG_FSL_2 +#define	FSL_INTR_2	1 +  /*   * memory layout - Example   * TEXT_BASE = 0x1200_0000; @@ -93,7 +98,8 @@  /* global pointer */  #define	CFG_GBL_DATA_SIZE	0x1000	/* size of global data */ -#define	CFG_GBL_DATA_OFFSET     (CFG_SDRAM_BASE + CFG_SDRAM_SIZE - CFG_GBL_DATA_SIZE) /* start of global data */ +/* start of global data */ +#define	CFG_GBL_DATA_OFFSET     (CFG_SDRAM_BASE + CFG_SDRAM_SIZE - CFG_GBL_DATA_SIZE)  /* monitor code */  #define	SIZE			0x40000 @@ -117,6 +123,7 @@  	#define	CFG_FLASH_EMPTY_INFO	1	/* ?empty sector */  	#define	CFG_MAX_FLASH_BANKS	1	/* max number of memory banks */  	#define	CFG_MAX_FLASH_SECT	128	/* max number of sectors on one chip */ +	#define	CFG_FLASH_PROTECTION		/* hardware flash protection */  	#ifdef	RAMENV  		#define	CFG_ENV_IS_NOWHERE	1 @@ -135,6 +142,7 @@  	#define	CFG_ENV_IS_NOWHERE	1  	#define	CFG_ENV_SIZE		0x1000  	#define	CFG_ENV_ADDR		(CFG_MONITOR_BASE - CFG_ENV_SIZE) +	#define	CFG_FLASH_PROTECTION		/* hardware flash protection */  #endif /* !FLASH */  #ifdef	FLASH @@ -152,8 +160,13 @@  				CFG_CMD_IMI |\  				CFG_CMD_NET |\  				CFG_CMD_CACHE |\ +				CFG_CMD_FAT |\ +				CFG_CMD_EXT2 |\ +				CFG_CMD_JFFS2 |\ +				CFG_CMD_ECHO |\  				CFG_CMD_IMLS |\  				CFG_CMD_FLASH |\ +				CFG_CMD_MFSL |\  				CFG_CMD_PING \  				)  	#else	/* !RAMENV */ @@ -174,6 +187,11 @@  				CFG_CMD_FLASH |\  				CFG_CMD_PING |\  				CFG_CMD_ENV |\ +				CFG_CMD_FAT |\ +				CFG_CMD_EXT2 |\ +				CFG_CMD_JFFS2 |\ +				CFG_CMD_ECHO |\ +				CFG_CMD_MFSL |\  				CFG_CMD_SAVES \  				) @@ -189,16 +207,30 @@  				CFG_CMD_BDI |\  				CFG_CMD_RUN |\  				CFG_CMD_LOADS |\ +				CFG_CMD_FAT |\ +				CFG_CMD_EXT2 |\  				CFG_CMD_LOADB |\  				CFG_CMD_IMI |\  				CFG_CMD_NET |\  				CFG_CMD_CACHE |\ +				CFG_CMD_MFSL |\  				CFG_CMD_PING \  				)  #endif	/* !FLASH */  /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */  #include <cmd_confdefs.h> +#if (CONFIG_COMMANDS & CFG_CMD_JFFS2) +/* JFFS2 partitions */ +#define CONFIG_JFFS2_CMDLINE	/* mtdparts command line support */ +#define MTDIDS_DEFAULT		"nor0=ml401-0" + +/* default mtd partition table */ +#define MTDPARTS_DEFAULT	"mtdparts=ml401-0:256k(u-boot),"\ +				"256k(env),3m(kernel),1m(romfs),"\ +				"1m(cramfs),-(jffs2)" +#endif +  /* Miscellaneous configurable options */  #define	CFG_PROMPT	"U-Boot-mONStR> "  #define	CFG_CBSIZE	512	/* size of console buffer */ @@ -207,7 +239,7 @@  #define	CFG_LONGHELP  #define	CFG_LOAD_ADDR	0x12000000 /* default load address */ -#define	CONFIG_BOOTDELAY 	30 +#define	CONFIG_BOOTDELAY	30  #define	CONFIG_BOOTARGS		"root=romfs"  #define	CONFIG_HOSTNAME		"ml401"  #define	CONFIG_BOOTCOMMAND 	"base 0;tftp 11000000 image.img;bootm" @@ -221,10 +253,19 @@  #define CFG_HZ	1000  /* system ace */ -/*#define CONFIG_SYSTEMACE -#define DEBUG_SYSTEMACE -#define CFG_SYSTEMACE_BASE	XILINX_SYSACE_BASEADDR -#define CFG_SYSTEMACE_WIDTH	XILINX_SYSACE_MEM_WIDTH -#define CONFIG_DOS_PARTITION -*/ +#define	CONFIG_SYSTEMACE +/* #define DEBUG_SYSTEMACE */ +#define	SYSTEMACE_CONFIG_FPGA +#define	CFG_SYSTEMACE_BASE	XILINX_SYSACE_BASEADDR +#define	CFG_SYSTEMACE_WIDTH	XILINX_SYSACE_MEM_WIDTH +#define	CONFIG_DOS_PARTITION + +#define	CONFIG_PREBOOT		"echo U-BOOT for ML401;setenv preboot;echo" + +#define	CONFIG_EXTRA_ENV_SETTINGS	"unlock=yes\0" /* hardware flash protection */\ +					"nor0=ml401-0\0"\ +					"mtdparts=mtdparts=ml401-0:"\ +					"256k(u-boot),256k(env),3m(kernel),"\ +					"1m(romfs),1m(cramfs),-(jffs2)\0" +  #endif	/* __CONFIG_H */ diff --git a/include/configs/motionpro.h b/include/configs/motionpro.h index 5328e8d6b..e3899a5ab 100644 --- a/include/configs/motionpro.h +++ b/include/configs/motionpro.h @@ -26,12 +26,10 @@  #ifndef __CONFIG_H  #define __CONFIG_H -  /*   * High Level Configuration Options   */ -  /* CPU and board */  #define CONFIG_MPC5xxx		1	/* This is an MPC5xxx CPU */  #define CONFIG_MPC5200		1	/* More exactly a MPC5200 */ @@ -50,7 +48,14 @@  				CFG_CMD_MII	| \  				CFG_CMD_BEDBUG	| \  				CFG_CMD_NET	| \ -				CFG_CMD_PING) +				CFG_CMD_PING	| \ +				CFG_CMD_IDE	| \ +				CFG_CMD_FAT	| \ +				CFG_CMD_JFFS2	| \ +				CFG_CMD_I2C	| \ +				CFG_CMD_DATE	| \ +				CFG_CMD_EEPROM	| \ +				CFG_CMD_DTT)  /* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */  #include <cmd_confdefs.h> @@ -71,7 +76,7 @@  #define CONFIG_MPC5xxx_FEC	1  #define CONFIG_PHY_ADDR		0x2  #define CONFIG_PHY_TYPE		0x79c874 - +#define CONFIG_RESET_PHY_R	1  /*   * Autobooting @@ -94,42 +99,51 @@   * Default environment settings   */  #define CONFIG_EXTRA_ENV_SETTINGS					\ -	"sdram_test=0\0"						\  	"netdev=eth0\0"							\  	"hostname=motionpro\0"						\  	"netmask=255.255.0.0\0"						\  	"ipaddr=192.168.160.22\0"					\  	"serverip=192.168.1.1\0"					\  	"gatewayip=192.168.1.1\0"					\ -	"kernel_addr=200000\0"						\ +	"console=ttyPSC0,115200\0"					\  	"u-boot_addr=100000\0"						\ -	"kernel_sector=20\0"						\ -	"kernel_size=1000\0"						\ -	"console=ttyS0,115200\0"					\ +	"kernel_addr=200000\0"						\ +	"fdt_addr=400000\0"						\ +	"ramdisk_addr=500000\0"						\ +	"multi_image_addr=800000\0"					\  	"rootpath=/opt/eldk-4.1/ppc_6xx\0"				\ -	"bootfile=/tftpboot/motionpro/uImage\0"				\  	"u-boot=/tftpboot/motionpro/u-boot.bin\0"			\ -	"load=tftp $(u-boot_addr) $(u-boot)\0"				\ +	"bootfile=/tftpboot/motionpro/uImage\0"				\ +	"fdt_file=/tftpboot/motionpro/motionpro.dtb\0"			\ +	"ramdisk_file=/tftpboot/motionpro/uRamdisk\0"			\ +	"multi_image_file=kernel+initrd+dtb.img\0"			\ +	"load=tftp ${u-boot_addr} ${u-boot}\0"				\  	"update=prot off fff00000 fff3ffff; era fff00000 fff3ffff; "	\ -		"cp.b $(u-boot_addr) fff00000 $(filesize);"		\ +		"cp.b ${u-boot_addr} fff00000 ${filesize};"		\  		"prot on fff00000 fff3ffff\0"				\  	"ramargs=setenv bootargs root=/dev/ram rw\0"			\ -	"addip=setenv bootargs $(bootargs) console=$(console) "		\ -		"ip=$(ipaddr):$(serverip):$(gatewayip):"		\ -		"$(netmask):$(hostname):$(netdev):off panic=1\0"	\ -	"flash_nfs=run nfsargs addip;bootm $(kernel_addr)\0"		\ -	"flash_self=run ramargs addip;bootm $(kernel_addr) "		\ -		"$(ramdisk_addr)\0"					\ -	"net_nfs=tftp $(kernel_addr) $(bootfile); run nfsargs addip; "	\ -		"bootm $(kernel_addr)\0"				\  	"nfsargs=setenv bootargs root=/dev/nfs rw "			\ -		"nfsroot=$(serverip):$(rootpath)\0"			\ -	"fstype=ext3\0"							\ -	"fatargs=setenv bootargs init=/linuxrc rw\0"			\ +		"nfsroot=${serverip}:${rootpath}\0"			\ +	"fat_args=setenv bootargs rw\0"					\ +	"addmtd=setenv bootargs ${bootargs} ${mtdparts}\0"		\ +	"addip=setenv bootargs ${bootargs} "				\ +		"ip=${ipaddr}:${serverip}:${gatewayip}:"		\ +		"${netmask}:${hostname}:${netdev}:off panic=1 "		\ +		"console=${console}\0"					\ +	"net_nfs=tftp ${kernel_addr} ${bootfile}; "			\ +		"tftp ${fdt_addr} ${fdt_file}; run nfsargs addip; "	\ +		"bootm ${kernel_addr} - ${fdt_addr}\0"			\ +	"net_self=tftp ${kernel_addr} ${bootfile}; "			\ +		"tftp ${fdt_addr} ${fdt_file}; "			\ +		"tftp ${ramdisk_addr} ${ramdisk_file}; "		\ +		"run ramargs addip; "					\ +		"bootm ${kernel_addr} ${ramdisk_addr} ${fdt_addr}\0"	\ +	"fat_multi=run fat_args addip; fatload ide 0:1 "		\ +		"${multi_image_addr} ${multi_image_file}; "		\ +		"bootm ${multi_image_addr}\0"				\  	""  #define CONFIG_BOOTCOMMAND	"run net_nfs" -  /*   * do board-specific init   */ @@ -148,6 +162,12 @@  /* + * Set IPB speed to 100MHz + */ +#define CFG_IPBCLK_EQUALS_XLBCLK + + +/*   * Memory map   */  /* @@ -243,6 +263,84 @@  #define CFG_MAX_FLASH_SECT	256	/* max num of sects on one chip */  #define CONFIG_FLASH_16BIT		/* Flash is 16-bit */ +/* + * MTD configuration + */ +#define CONFIG_JFFS2_CMDLINE +#define MTDIDS_DEFAULT		"nor0=motionpro-0" +#define MTDPARTS_DEFAULT	"mtdparts=motionpro-0:"			  \ +					"13m(fs),2m(kernel),256k(uboot)," \ +					"64k(env),64k(redund_env),64k(dtb)," \ +					"-(user_data)" + +/* + * IDE/ATA configuration + */ +#define CFG_ATA_BASE_ADDR	MPC5XXX_ATA +#define CFG_IDE_MAXBUS		1 +#define CFG_IDE_MAXDEVICE	1 +#define CONFIG_IDE_PREINIT + +#define CFG_ATA_DATA_OFFSET	0x0060 +#define CFG_ATA_REG_OFFSET	CFG_ATA_DATA_OFFSET +#define CFG_ATA_STRIDE		4 +#define CONFIG_DOS_PARTITION + + +/* + * I2C configuration + */ +#define CONFIG_HARD_I2C		1	/* I2C with hardware support */ +#define CFG_I2C_MODULE		2	/* select I2C module #2 */ +#define CFG_I2C_SPEED		100000	/* 100 kHz */ +#define CFG_I2C_SLAVE		0x7F + + +/* + * EEPROM configuration + */ +#define CFG_I2C_EEPROM_ADDR_LEN		1 +#define CFG_EEPROM_PAGE_WRITE_ENABLE	1	/* DTT driver needs this */ +#define CFG_EEPROM_PAGE_WRITE_BITS	1	/* 2 bytes per write cycle */ +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS	5	/* 2ms/cycle + 3ms extra */ +#define CFG_I2C_MULTI_EEPROMS		1	/* 2 EEPROMs (addr:50,52) */ + + +/* + * RTC configuration + */ +#define CONFIG_RTC_DS1337	1 +#define CFG_I2C_RTC_ADDR	0x68 + + +/* + * Status LED configuration + */ +#define CONFIG_STATUS_LED		/* Status LED enabled */ +#define CONFIG_BOARD_SPECIFIC_LED + +#define ENABLE_GPIO_OUT		0x00000024 +#define LED_ON			0x00000010 + +#ifndef __ASSEMBLY__ +/* + * In case of Motion-PRO, a LED is identified by its corresponding + * GPT Enable and Mode Select Register. + */ +typedef volatile unsigned long * led_id_t; + +extern void __led_init(led_id_t id, int state); +extern void __led_toggle(led_id_t id); +extern void __led_set(led_id_t id, int state); +#endif /* __ASSEMBLY__ */ + + +/* + * Temperature sensor + */ +#define CONFIG_DTT_LM75		1 +#define CONFIG_DTT_SENSORS	{ 0x49 } +  /*   * Environment settings @@ -253,6 +351,9 @@  #define CFG_ENV_SIZE		0x1000  #define CFG_ENV_SECT_SIZE	0x10000 +/* Configuration of redundant environment */ +#define CFG_ENV_ADDR_REDUND	(CFG_ENV_ADDR + CFG_ENV_SECT_SIZE) +#define CFG_ENV_SIZE_REDUND	(CFG_ENV_SIZE)  /*   * Pin multiplexing configuration @@ -270,11 +371,17 @@  /* + * Motion-PRO's CPLD revision control register + */ +#define CPLD_REV_REGISTER	(CFG_CS2_START + 0x06) + + +/*   * Miscellaneous configurable options   */  #define CFG_LONGHELP			/* undef to save memory    */  #define CFG_PROMPT		"=> "	/* Monitor Command Prompt   */ -#define CFG_CBSIZE		256	/* Console I/O Buffer Size  */ +#define CFG_CBSIZE		1024	/* Console I/O Buffer Size */  #define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16)	/* Print Buffer Size */  #define CFG_MAXARGS		16		/* max number of command args */  #define CFG_BARGSIZE		CFG_CBSIZE	/* Boot Argument Buffer Size */ @@ -302,4 +409,15 @@  /* Not needed for MPC 5xxx U-Boot, but used by tools/updater */  #define CFG_RESET_ADDRESS	0xfff00100 +/* pass open firmware flat tree */ +#define CONFIG_OF_FLAT_TREE	1 +#define CONFIG_OF_BOARD_SETUP	1 + +/* maximum size of the flat tree (8K) */ +#define OF_FLAT_TREE_MAX_SIZE	8192 +#define OF_CPU			"PowerPC,5200@0" +#define OF_SOC			"soc5200@f0000000" +#define OF_TBCLK		(bd->bi_busfreq / 4) +#define OF_STDOUT_PATH		"/soc5200@f0000000/serial@2000" +  #endif /* __CONFIG_H */ diff --git a/include/configs/o2dnt.h b/include/configs/o2dnt.h index 5c05a745d..63d0da7d0 100644 --- a/include/configs/o2dnt.h +++ b/include/configs/o2dnt.h @@ -137,17 +137,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */ -#if defined(CFG_IPBSPEED_133) +#if defined(CFG_IPBCLK_EQUALS_XLBCLK)  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't - * been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock + *  of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#define CFG_PCISPEED_66			/* define for 66MHz speed */ +#define CFG_PCICLK_EQUALS_IPBCLK_DIV2	/* define for 66MHz speed */  #endif  #endif @@ -276,7 +276,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  /*   * For 66 MHz PCI clock additional Wait State is needed for CS0 (flash).   */ diff --git a/include/configs/pf5200.h b/include/configs/pf5200.h index fefdb3cca..7151a9ec2 100644 --- a/include/configs/pf5200.h +++ b/include/configs/pf5200.h @@ -171,7 +171,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133		/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  #endif  /*   * I2C configuration diff --git a/include/configs/sc3.h b/include/configs/sc3.h index 6b6acfa87..e4357b088 100644 --- a/include/configs/sc3.h +++ b/include/configs/sc3.h @@ -58,7 +58,7 @@   * 0xFFE00000 .... 0xFFFFFFFF -> BOOT-ROM (2 MiB)   */ -#define CONFIG_SOLIDCARD3	1 +#define CONFIG_SC3	1  #define CONFIG_4xx	1  #define CONFIG_405GP	1 @@ -134,7 +134,8 @@  #if 1	/* feel free to disable for development */  #define CONFIG_AUTOBOOT_KEYED		/* Enable password protection	*/  #define CONFIG_AUTOBOOT_PROMPT		"\nSC3 - booting... stop with ENTER\n" -#define CONFIG_AUTOBOOT_DELAY_STR	"\n"	/* 1st "password"	*/ +#define CONFIG_AUTOBOOT_DELAY_STR	"\r"	/* 1st "password"	*/ +#define CONFIG_AUTOBOOT_DELAY_STR2	"\n"	/* 1st "password"	*/  #endif  /* diff --git a/include/configs/sequoia.h b/include/configs/sequoia.h index 1f19621f4..23243a497 100644 --- a/include/configs/sequoia.h +++ b/include/configs/sequoia.h @@ -38,7 +38,9 @@  #define CONFIG_440GRX		1		/* Specific PPC440GRx	*/  #endif  #define CONFIG_4xx		1		/* ... PPC4xx family	*/ -#define CONFIG_SYS_CLK_FREQ	33000000	/* external freq to pll	*/ +/* Detect Sequoia PLL input clock automatically via CPLD bit		*/ +#define CONFIG_SYS_CLK_FREQ    ((in8(CFG_BCSR_BASE + 3) & 0x80) ? \ +				33333333 : 33000000)  #define CONFIG_BOARD_EARLY_INIT_F 1		/* Call board_early_init_f */  #define CONFIG_MISC_INIT_R	1		/* Call misc_init_r	*/ @@ -166,12 +168,19 @@  /*   * Now the NAND chip has to be defined (no autodetection used!)   */ -#define CFG_NAND_PAGE_SIZE	(512)		/* NAND chip page size		*/ +#define CFG_NAND_PAGE_SIZE	512		/* NAND chip page size		*/  #define CFG_NAND_BLOCK_SIZE	(16 << 10)	/* NAND chip block size		*/ -#define CFG_NAND_PAGE_COUNT	(32)		/* NAND chip page count		*/ -#define CFG_NAND_BAD_BLOCK_POS	(5)		/* Location of bad block marker	*/ +#define CFG_NAND_PAGE_COUNT	32		/* NAND chip page count		*/ +#define CFG_NAND_BAD_BLOCK_POS	5		/* Location of bad block marker	*/  #undef CFG_NAND_4_ADDR_CYCLE			/* No fourth addr used (<=32MB)	*/ +#define CFG_NAND_ECCSIZE	256 +#define CFG_NAND_ECCBYTES	3 +#define CFG_NAND_ECCSTEPS	(CFG_NAND_PAGE_SIZE / CFG_NAND_ECCSIZE) +#define CFG_NAND_OOBSIZE	16 +#define CFG_NAND_ECCTOTAL	(CFG_NAND_ECCBYTES * CFG_NAND_ECCSTEPS) +#define CFG_NAND_ECCPOS		{0, 1, 2, 3, 6, 7} +  #ifdef CFG_ENV_IS_IN_NAND  /*   * For NAND booting the environment is embedded in the U-Boot image. Please take diff --git a/include/configs/smmaco4.h b/include/configs/smmaco4.h index e106b3b57..185c2d487 100644 --- a/include/configs/smmaco4.h +++ b/include/configs/smmaco4.h @@ -138,17 +138,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */ -#if defined(CFG_IPBSPEED_133) +#if defined(CFG_IPBCLK_EQUALS_XLBCLK)  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't - * been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock + * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#define CFG_PCISPEED_66			/* define for 66MHz speed */ +#define CFG_PCICLK_EQUALS_IPBCLK_DIV2	/* define for 66MHz speed */  #endif  /* @@ -357,7 +357,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  #define CFG_BOOTCS_CFG		0x0008DF30 /* for pci_clk  = 66 MHz */  #else  #define CFG_BOOTCS_CFG		0x0004DF30 /* for pci_clk = 33 MHz */ diff --git a/include/configs/spieval.h b/include/configs/spieval.h index f40dde2ac..9888d1110 100644 --- a/include/configs/spieval.h +++ b/include/configs/spieval.h @@ -219,17 +219,17 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */ -#if defined(CFG_IPBSPEED_133) +#if defined(CFG_IPBCLK_EQUALS_XLBCLK)  /*   * PCI Bus clocking configuration   *   * Actually a PCI Clock of 66 MHz is only set (in cpu_init.c) if - * CFG_IPBSPEED_133 is defined. This is because a PCI Clock of 66 MHz yet hasn't - * been tested with a IPB Bus Clock of 66 MHz. + * CFG_IPBCLK_EQUALS_XLBCLK is defined. This is because a PCI Clock + * of 66 MHz yet hasn't been tested with a IPB Bus Clock of 66 MHz.   */ -#define CFG_PCISPEED_66			/* define for 66MHz speed */ +#define CFG_PCICLK_EQUALS_IPBCLK_DIV2	/* define for 66MHz speed */  #endif  /* @@ -444,7 +444,7 @@  #define CFG_BOOTCS_START	CFG_FLASH_BASE  #define CFG_BOOTCS_SIZE		CFG_FLASH_SIZE -#ifdef CFG_PCISPEED_66 +#ifdef CFG_PCICLK_EQUALS_IPBCLK_DIV2  #define CFG_BOOTCS_CFG		0x0008DF30 /* for pci_clk  = 66 MHz */  #else  #define CFG_BOOTCS_CFG		0x0004DF30 /* for pci_clk = 33 MHz */ diff --git a/include/configs/stxssa.h b/include/configs/stxssa.h new file mode 100644 index 000000000..1978a32bb --- /dev/null +++ b/include/configs/stxssa.h @@ -0,0 +1,472 @@ +/* + * (C) Copyright 2005 Embedded Alley Solutions, Inc. + * Dan Malek <dan@embeddedalley.com> + * Copied from STx GP3. + * Updates for Silicon Tx GP3 SSA board. + * + * (C) Copyright 2002,2003 Motorola,Inc. + * Xianghua Xiao <X.Xiao@motorola.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 + */ + +/* mpc8560ads board configuration file */ +/* please refer to doc/README.mpc85xx for more info */ +/* make sure you change the MAC address and other network params first, + * search for CONFIG_ETHADDR,CONFIG_SERVERIP,etc in this file + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* High Level Configuration Options */ +#define CONFIG_BOOKE		1	/* BOOKE		*/ +#define CONFIG_E500		1	/* BOOKE e500 family	*/ +#define CONFIG_MPC85xx		1	/* MPC8540/MPC8560	*/ +#define CONFIG_CPM2		1	/* has CPM2 */ +#define CONFIG_STXSSA		1	/* Silicon Tx GPPP SSA board specific*/ + +#undef  CONFIG_PCI	         	/* pci ethernet support	*/ +#define CONFIG_TSEC_ENET 		/* tsec ethernet support*/ +#undef CONFIG_ETHER_ON_FCC             /* cpm FCC ethernet support */ +#define CONFIG_ENV_OVERWRITE +#define CONFIG_SPD_EEPROM               /* Use SPD EEPROM for DDR setup */ +#undef  CONFIG_DDR_ECC			/* only for ECC DDR module */ +#undef CONFIG_DDR_DLL                  /* possible DLL fix needed */ +#define CONFIG_DDR_2T_TIMING		/* Sets the 2T timing bit */ + + +/* sysclk for MPC85xx + */ + +#define CONFIG_SYS_CLK_FREQ     33000000 /* most pci cards are 33Mhz */ + +/* Blinkin' LEDs for Robert :-) +*/ +#define CONFIG_SHOW_ACTIVITY 1 + +/* + * These can be toggled for performance analysis, otherwise use default. + */ +#define CONFIG_L2_CACHE                     /* toggle L2 cache         */ +#define  CONFIG_BTB                          /* toggle branch predition */ +#define  CONFIG_ADDR_STREAMING               /* toggle addr streaming   */ + +#define CONFIG_BOARD_EARLY_INIT_F   1        /* Call board_pre_init      */ + +#undef  CFG_DRAM_TEST                       /* memory test, takes time  */ +#define CFG_MEMTEST_START       0x00200000  /* memtest region */ +#define CFG_MEMTEST_END         0x00400000 + + +/* Localbus connector.  There are many options that can be + * connected here, including sdram or lots of flash. + * This address, however, is used to configure a 256M local bus + * window that includes the Config latch below. + */ +#define CFG_LBC_OPTION_BASE	0xF0000000      /* Localbus Extension */ +#define CFG_LBC_OPTION_SIZE	256		/* 256MB */ + +/* There are various flash options used, we configure for the largest, + * which is 64Mbytes.  The CFI works fine and will discover the proper + * sizes. + */ +#ifdef CONFIG_STXSSA_4M +#define CFG_FLASH_BASE		0xFFC00000      /* start of  4 MiB flash */ +#else +#define CFG_FLASH_BASE		0xFC000000      /* start of 64 MiB flash */ +#endif +#define CFG_BR0_PRELIM	(CFG_FLASH_BASE | 0x1801) /* port size 32bit	 */ +#define CFG_OR0_PRELIM	(CFG_FLASH_BASE | 0x0FF7) + +#define CFG_FLASH_CFI		1 +#define CFG_FLASH_CFI_DRIVER	1 +#undef CFG_FLASH_USE_BUFFER_WRITE 	/* use buffered writes (20x faster) */ +#define CFG_MAX_FLASH_SECT	256	/* max number of sectors on one chip */ +#define CFG_MAX_FLASH_BANKS	1	/* max number of memory banks	*/ + +#define CFG_FLASH_BANKS_LIST { CFG_FLASH_BASE } + +#define CFG_FLASH_PROTECTION + +/* The configuration latch is Chip Select 1. + * It's an 8-bit latch in the lower 8 bits of the word. + */ +#define CFG_LBC_CFGLATCH_BASE	0xFB000000	/* Base of config latch */ +#define CFG_BR1_PRELIM		0xFB001801	/* 32-bit port */ +#define CFG_OR1_PRELIM		0xFFFF0FF7      /* 64K is enough */ + +#define CFG_MONITOR_BASE    	TEXT_BASE	/* start of monitor	*/ + +#if (CFG_MONITOR_BASE < CFG_FLASH_BASE) +#define CFG_RAMBOOT +#else +#undef  CFG_RAMBOOT +#endif + +#ifdef CFG_RAMBOOT +#define CFG_CCSRBAR_DEFAULT 	0x40000000	/* CCSRBAR by BDI cfg	*/ +#else +#define CFG_CCSRBAR_DEFAULT 	0xff700000	/* CCSRBAR Default	*/ +#endif +#define CFG_CCSRBAR             0xe0000000      /* relocated CCSRBAR    */ +#define CFG_IMMR		CFG_CCSRBAR	/* PQII uses CFG_IMMR	*/ + + +/* + * DDR Setup + */ + +/* + * Base addresses -- Note these are effective addresses where the + * actual resources get mapped (not physical addresses) + */ +#define CFG_DDR_SDRAM_BASE	0x00000000	/* DDR is system memory  */ +#define CFG_SDRAM_BASE		CFG_DDR_SDRAM_BASE + +#define SPD_EEPROM_ADDRESS 	0x54     	/*  DDR DIMM */ + +#undef CONFIG_CLOCKS_IN_MHZ + +/* local bus definitions */ +#define CFG_BR2_PRELIM		0xf8001861	/* 64MB localbus SDRAM  */ +#define CFG_OR2_PRELIM		0xfc006901 +#define CFG_LBC_LCRR		0x00030004	/* local bus freq 	*/ +#define CFG_LBC_LBCR		0x00000000 +#define CFG_LBC_LSRT		0x20000000 +#define CFG_LBC_MRTPR		0x20000000 +#define CFG_LBC_LSDMR_1		0x2861b723 +#define CFG_LBC_LSDMR_2		0x0861b723 +#define CFG_LBC_LSDMR_3		0x0861b723 +#define CFG_LBC_LSDMR_4		0x1861b723 +#define CFG_LBC_LSDMR_5		0x4061b723 + +#define CONFIG_L1_INIT_RAM +#define CFG_INIT_RAM_LOCK 	1 +#define CFG_INIT_RAM_ADDR       0x60000000      /* Initial RAM address  */ +#define CFG_INIT_RAM_END    	0x4000	    	/* End of used area in RAM */ + +#define CFG_GBL_DATA_SIZE  	128		/* num bytes initial data */ +#define CFG_GBL_DATA_OFFSET	(CFG_INIT_RAM_END - CFG_GBL_DATA_SIZE) +#define CFG_INIT_SP_OFFSET	CFG_GBL_DATA_OFFSET + +#define CFG_MONITOR_LEN	    	(256 * 1024)    /* Reserve 256 kB for Mon */ +#define CFG_MALLOC_LEN	    	(512 * 1024)    /* Reserved for malloc */ + +/* Serial Port */ +#define CONFIG_CONS_INDEX     2 +#undef	CONFIG_SERIAL_SOFTWARE_FIFO +#define CFG_NS16550 +#define CFG_NS16550_SERIAL +#define CFG_NS16550_REG_SIZE    1 +#define CFG_NS16550_CLK		get_bus_freq(0) + +#define CFG_BAUDRATE_TABLE  \ +	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 115200} + +#define CFG_NS16550_COM1        (CFG_CCSRBAR+0x4500) +#define CFG_NS16550_COM2        (CFG_CCSRBAR+0x4600) + +#define CONFIG_CMDLINE_EDITING	1	/* add command line history	*/ +#define CFG_HUSH_PARSER		1	/* Use the HUSH parser		*/ +#ifdef  CFG_HUSH_PARSER +#define CFG_PROMPT_HUSH_PS2 "> " +#endif + +/* I2C */ +#define CONFIG_FSL_I2C			/* Use FSL common I2C driver */ +#define  CONFIG_HARD_I2C    		/* I2C with hardware support*/ +#undef	CONFIG_SOFT_I2C			/* I2C bit-banged */ +#define CFG_I2C_SPEED		400000	/* I2C speed and slave address	*/ +#define CFG_I2C_SLAVE		0x7F +#if 0 +#define CFG_I2C_NOPROBES        {0x00}  /* Don't probe these addrs */ +#else +/* I did the 'if 0' so we could keep the syntax above if ever needed. */ +#undef CFG_I2C_NOPROBES +#endif +#define CFG_I2C_OFFSET		0x3000 + +/* I2C EEPROM.  AT24C32, we keep our environment in here. +*/ +#define CFG_I2C_EEPROM_ADDR		0x51	/* 1010001x		*/ +#define CFG_I2C_EEPROM_ADDR_LEN		2 +#define CFG_EEPROM_PAGE_WRITE_BITS	5	/* =32 Bytes per write	*/ +#define CFG_EEPROM_PAGE_WRITE_ENABLE +#define CFG_EEPROM_PAGE_WRITE_DELAY_MS	20 + +/* + * Standard 8555 PCI mapping. + * Addresses are mapped 1-1. + */ +#define CFG_PCI1_MEM_BASE	0x80000000 +#define CFG_PCI1_MEM_PHYS	CFG_PCI1_MEM_BASE +#define CFG_PCI1_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PCI1_IO_BASE	0x00000000 +#define CFG_PCI1_IO_PHYS	0xe2000000 +#define CFG_PCI1_IO_SIZE	0x01000000	/* 16M */ + +#define CFG_PCI2_MEM_BASE	0xa0000000 +#define CFG_PCI2_MEM_PHYS	CFG_PCI2_MEM_BASE +#define CFG_PCI2_MEM_SIZE	0x20000000	/* 512M */ +#define CFG_PCI2_IO_BASE	0x00000000 +#define CFG_PCI2_IO_PHYS	0xe3000000 +#define CFG_PCI2_IO_SIZE	0x01000000	/* 16M */ + +#if defined(CONFIG_PCI) 		/* PCI Ethernet card */ + +#define CONFIG_NET_MULTI +#define CONFIG_PCI_PNP	               	/* do pci plug-and-play */ + +#undef CONFIG_EEPRO100 +#undef CONFIG_TULIP + +#if !defined(CONFIG_PCI_PNP) +  #define PCI_ENET0_IOADDR    	0xe0000000 +  #define PCI_ENET0_MEMADDR     0xe0000000 +  #define PCI_IDSEL_NUMBER      0x0c 	/* slot0->3(IDSEL)=12->15 */ +#endif + +#undef CONFIG_PCI_SCAN_SHOW +#define CFG_PCI_SUBSYS_VENDORID 0x1057  /* Motorola */ + +#endif /* CONFIG_PCI */ + +#if defined(CONFIG_TSEC_ENET) + +#ifndef CONFIG_NET_MULTI +#define CONFIG_NET_MULTI 	1 +#endif + +#define CONFIG_MII		1	/* MII PHY management		*/ + +#define CONFIG_MPC85XX_TSEC1	1 +#define CONFIG_MPC85XX_TSEC1_NAME	"TSEC0" +#define CONFIG_MPC85XX_TSEC2	1 +#define CONFIG_MPC85XX_TSEC2_NAME	"TSEC1" +#undef CONFIG_MPS85XX_FEC + +#define TSEC1_PHY_ADDR		2 +#define TSEC2_PHY_ADDR		4 +#define TSEC1_PHYIDX		0 +#define TSEC2_PHYIDX		0 +#define CONFIG_ETHPRIME		"TSEC0" + +#elif defined(CONFIG_ETHER_ON_FCC)	/* CPM FCC Ethernet */ + +#define CONFIG_ETHER_ON_FCC2             /* define if ether on FCC   */ +#undef  CONFIG_ETHER_NONE               /* define if ether on something else */ +#define CONFIG_ETHER_INDEX      2       /* which channel for ether  */ + +#if (CONFIG_ETHER_INDEX == 2) +  /* +   * - Rx-CLK is CLK13 +   * - Tx-CLK is CLK14 +   * - Select bus for bd/buffers +   * - Full duplex +   */ +  #define CFG_CMXFCR_MASK       (CMXFCR_FC2 | CMXFCR_RF2CS_MSK | CMXFCR_TF2CS_MSK) +  #define CFG_CMXFCR_VALUE      (CMXFCR_RF2CS_CLK13 | CMXFCR_TF2CS_CLK14) +  #define CFG_CPMFCR_RAMTYPE    0 +#if 0 +  #define CFG_FCC_PSMR          (FCC_PSMR_FDE) +#else +  #define CFG_FCC_PSMR          0 +#endif +  #define FETH2_RST		0x01 +#elif (CONFIG_ETHER_INDEX == 3) +  /* need more definitions here for FE3 */ +  #define FETH3_RST		0x80 +#endif  				/* CONFIG_ETHER_INDEX */ + +/* MDIO is done through the TSEC0 control. +*/ +#define CONFIG_MII			/* MII PHY management */ +#undef CONFIG_BITBANGMII		/* bit-bang MII PHY management	*/ + +#endif + +/* Environment - default config is in flash, see below */ +#if 0	/* in EEPROM */ +# define CFG_ENV_IS_IN_EEPROM	1 +# define CFG_ENV_OFFSET		0 +# define CFG_ENV_SIZE		2048 +#else	/* in flash */ +# define CFG_ENV_IS_IN_FLASH	1 +# ifdef CONFIG_STXSSA_4M +#  define CFG_ENV_SECT_SIZE	0x20000 +# else	/* default configuration - 64 MiB flash */ +#  define CFG_ENV_SECT_SIZE	0x40000 +# endif +# define CFG_ENV_ADDR		(CFG_MONITOR_BASE - CFG_ENV_SECT_SIZE) +# define CFG_ENV_SIZE		0x4000 +# define CFG_ENV_ADDR_REDUND	(CFG_ENV_ADDR - CFG_ENV_SECT_SIZE) +# define CFG_ENV_SIZE_REDUND	(CFG_ENV_SIZE) +#endif + +#define CONFIG_LOADS_ECHO	1	/* echo on for serial download	*/ +#define CFG_LOADS_BAUD_CHANGE	1	/* allow baudrate change	*/ + +#define	CONFIG_TIMESTAMP		/* Print image info with ts	*/ + +#if defined(CFG_RAMBOOT) +  #if defined(CONFIG_PCI) +  #define  CONFIG_COMMANDS	((CONFIG_CMD_DFL | CFG_CMD_PCI | \ +				CFG_CMD_PING | CFG_CMD_I2C) & \ +				 ~(CFG_CMD_ENV | \ +				  CFG_CMD_LOADS )) +  #elif defined(CONFIG_TSEC_ENET) +  #define  CONFIG_COMMANDS	((CONFIG_CMD_DFL | CFG_CMD_PING | \ +				CFG_CMD_MII | CFG_CMD_I2C ) & \ +				~(CFG_CMD_ENV)) +  #elif defined(CONFIG_ETHER_ON_FCC) +  #define  CONFIG_COMMANDS	((CONFIG_CMD_DFL | CFG_CMD_MII | \ +				CFG_CMD_PING | CFG_CMD_I2C) & \ +				~(CFG_CMD_ENV)) +  #endif +#else +  #if defined(CONFIG_PCI) +  #define  CONFIG_COMMANDS	(CONFIG_CMD_DFL | CFG_CMD_PCI | \ +				CFG_CMD_ELF | CFG_CMD_PING | CFG_CMD_I2C) +  #elif defined(CONFIG_TSEC_ENET) +  #define  CONFIG_COMMANDS	(CONFIG_CMD_DFL | CFG_CMD_PING | \ +				CFG_CMD_ELF | CFG_CMD_MII | CFG_CMD_I2C) +  #elif defined(CONFIG_ETHER_ON_FCC) +  #define  CONFIG_COMMANDS	(CONFIG_CMD_DFL | CFG_CMD_MII | \ +				CFG_CMD_ELF | CFG_CMD_PING | CFG_CMD_I2C) +  #endif +#endif +#include <cmd_confdefs.h> + +#undef CONFIG_WATCHDOG			/* watchdog disabled		*/ + +/* + * Miscellaneous configurable options + */ +#define CFG_LONGHELP			/* undef to save memory		*/ +#define CFG_PROMPT	"SSA=> "	/* Monitor Command Prompt	*/ +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CBSIZE	1024		/* Console I/O Buffer Size	*/ +#else +#define CFG_CBSIZE	256		/* Console I/O Buffer Size	*/ +#endif +#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */ +#define CFG_MAXARGS	16		/* max number of command args	*/ +#define CFG_BARGSIZE	CFG_CBSIZE	/* Boot Argument Buffer Size	*/ +#define CFG_LOAD_ADDR	0x1000000	/* default load address */ +#define CFG_HZ		1000		/* decrementer freq: 1 ms ticks */ + +/* + * For booting Linux, the board info and command line data + * have to be in the first 8 MB of memory, since this is + * the maximum mapped by the Linux kernel during initialization. + */ +#define CFG_BOOTMAPSZ		(8 << 20) /* Initial Memory map for Linux */ + +/* Cache Configuration */ +#define CFG_DCACHE_SIZE		32768 +#define CFG_CACHELINE_SIZE	32 +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CFG_CACHELINE_SHIFT	5	/* log base 2 of the above value */ +#endif + +/* + * Internal Definitions + * + * Boot Flags + */ +#define BOOTFLAG_COLD	0x01		/* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM	0x02		/* Software reboot		*/ + +#if (CONFIG_COMMANDS & CFG_CMD_KGDB) +#define CONFIG_KGDB_BAUDRATE	230400	/* speed to run kgdb serial port */ +#define CONFIG_KGDB_SER_INDEX	2	/* which serial port to use */ +#endif + +/*Note: change below for your network setting!!! */ +#if defined(CONFIG_TSEC_ENET) || defined(CONFIG_ETHER_ON_FCC) +#define CONFIG_ETHADDR	 00:e0:0c:07:9b:8a +#define CONFIG_HAS_ETH1 +#define CONFIG_ETH1ADDR  00:e0:0c:07:9b:8b +#define CONFIG_HAS_ETH2 +#define CONFIG_ETH2ADDR  00:e0:0c:07:9b:8c +#endif + +/* + * Environment in EEPROM is compatible with different flash sector sizes, + * but only little space is available, so we use a very simple setup. + * With environment in flash, we use a more powerful default configuration. + */ +#ifdef CFG_ENV_IS_IN_EEPROM		/* use restricted "standard" environment */ + +#define CONFIG_BAUDRATE	 	38400 + +#define CONFIG_BOOTDELAY	3	/* -1 disable autoboot */ +#define CONFIG_BOOTCOMMAND	"bootm 0xffc00000 0xffd00000" +#define CONFIG_BOOTARGS		"root=/dev/nfs rw ip=any console=ttyS1,$baudrate" +#define CONFIG_SERVERIP 	192.168.85.1 +#define CONFIG_IPADDR  		192.168.85.60 +#define CONFIG_GATEWAYIP	192.168.85.1 +#define CONFIG_NETMASK		255.255.255.0 +#define CONFIG_HOSTNAME 	STX_SSA +#define CONFIG_ROOTPATH 	/gppproot +#define CONFIG_BOOTFILE 	uImage +#define CONFIG_LOADADDR		0x1000000 + +#else /* ENV IS IN FLASH		-- use a full-blown envionment */ + +#define CONFIG_BAUDRATE	 	115200 + +#define CONFIG_BOOTDELAY	5	/* -1 disable autoboot */ + +#define CONFIG_PREBOOT	"echo;"	\ +	"echo Type \\\"run flash_nfs\\\" to mount root filesystem over NFS;" \ +	"echo" + +#undef	CONFIG_BOOTARGS		/* the boot command will set bootargs	*/ + +#define	CONFIG_EXTRA_ENV_SETTINGS					\ +	"hostname=gp3ssa\0"						\ +	"bootfile=/tftpboot/gp3ssa/uImage\0"				\ +	"loadaddr=400000\0"						\ +	"netdev=eth0\0"							\ +	"consdev=ttyS1\0"						\ +	"nfsargs=setenv bootargs root=/dev/nfs rw "			\ +		"nfsroot=$serverip:$rootpath\0"				\ +	"ramargs=setenv bootargs root=/dev/ram rw\0"			\ +	"addip=setenv bootargs $bootargs "				\ +		"ip=$ipaddr:$serverip:$gatewayip:$netmask"		\ +		":$hostname:$netdev:off panic=1\0"			\ +	"addcons=setenv bootargs $bootargs "				\ +		"console=$consdev,$baudrate\0"				\ +	"flash_nfs=run nfsargs addip addcons;"				\ +		"bootm $kernel_addr\0"					\ +	"flash_self=run ramargs addip addcons;"				\ +		"bootm $kernel_addr $ramdisk_addr\0"			\ +	"net_nfs=tftp $loadaddr $bootfile;"				\ +		"run nfsargs addip addcons;bootm\0"			\ +	"rootpath=/opt/eldk/ppc_85xx\0"					\ +	"kernel_addr=FC000000\0"					\ +	"ramdisk_addr=FC200000\0"					\ +	"" +#define CONFIG_BOOTCOMMAND	"run flash_self" + +#endif	/* CFG_ENV_IS_IN_EEPROM */ + +#endif	/* __CONFIG_H */ diff --git a/include/configs/uc101.h b/include/configs/uc101.h index 8cd8e9be7..ff061eecc 100644 --- a/include/configs/uc101.h +++ b/include/configs/uc101.h @@ -114,7 +114,7 @@  /*   * IPB Bus clocking configuration.   */ -#define CFG_IPBSPEED_133		/* define for 133MHz speed */ +#define CFG_IPBCLK_EQUALS_XLBCLK		/* define for 133MHz speed */  /*   * I2C configuration diff --git a/include/configs/v38b.h b/include/configs/v38b.h index e19591d29..0b7b19ead 100644 --- a/include/configs/v38b.h +++ b/include/configs/v38b.h @@ -167,7 +167,7 @@  /*   * IPB Bus clocking configuration.   */ -#undef CFG_IPBSPEED_133			/* define for 133MHz speed */ +#undef CFG_IPBCLK_EQUALS_XLBCLK			/* define for 133MHz speed */  #endif  /* diff --git a/include/configs/xupv2p.h b/include/configs/xupv2p.h index a2f48102f..b4c720d18 100644 --- a/include/configs/xupv2p.h +++ b/include/configs/xupv2p.h @@ -132,6 +132,8 @@  			CFG_CMD_LOADS |\  			CFG_CMD_LOADB |\  			CFG_CMD_MISC |\ +			CFG_CMD_FAT |\ +			CFG_CMD_EXT2 |\  			CFG_CMD_PING \  			) @@ -163,12 +165,12 @@  	"base 0;" \  	"echo" -  /* system ace */ -/*#define	CONFIG_SYSTEMACE -#define	DEBUG_SYSTEMACE -#define	CFG_SYSTEMACE_BASE	0xCF000000 -#define	CFG_SYSTEMACE_WIDTH	16 -#define	CONFIG_DOS_PARTITION*/ +#define	CONFIG_SYSTEMACE +/* #define DEBUG_SYSTEMACE */ +#define	SYSTEMACE_CONFIG_FPGA +#define	CFG_SYSTEMACE_BASE	XILINX_SYSACE_BASEADDR +#define	CFG_SYSTEMACE_WIDTH	XILINX_SYSACE_MEM_WIDTH +#define	CONFIG_DOS_PARTITION  #endif	/* __CONFIG_H */ diff --git a/include/configs/zylonite.h b/include/configs/zylonite.h index c6aa8ece5..1e8ed7abd 100644 --- a/include/configs/zylonite.h +++ b/include/configs/zylonite.h @@ -174,7 +174,6 @@  /*   * NAND Flash   */ -/* Use the new NAND code. (BOARDLIBS = drivers/nand/libnand.a required) */  #define CONFIG_NEW_NAND_CODE  #define CFG_NAND0_BASE		0x0  #undef CFG_NAND1_BASE diff --git a/include/linux/stat.h b/include/linux/stat.h index 43fd53fc9..37f2924df 100644 --- a/include/linux/stat.h +++ b/include/linux/stat.h @@ -67,7 +67,8 @@ struct stat {  #endif	/* __PPC__ */ -#if defined (__ARM__) || defined (__I386__) || defined (__M68K__) || defined (__bfin__) +#if defined (__ARM__) || defined (__I386__) || defined (__M68K__) || defined (__bfin__) ||\ +	defined (__microblaze__)  struct stat {  	unsigned short st_dev; diff --git a/include/mpc83xx.h b/include/mpc83xx.h index c2a4ff587..60fc214b3 100644 --- a/include/mpc83xx.h +++ b/include/mpc83xx.h @@ -95,6 +95,11 @@  #define SPR_8321E_REV11			0x80660011  #define SPR_8321_REV11			0x80670011 +#define SPR_8311_REV10			0x80B30010 +#define SPR_8311E_REV10			0x80B20010 +#define SPR_8313_REV10			0x80B10010 +#define SPR_8313E_REV10			0x80B00010 +  /* SPCR - System Priority Configuration Register   */  #define SPCR_PCIHPE			0x10000000	/* PCI Highest Priority Enable */ @@ -121,6 +126,15 @@  #define SPCR_TSEC2BDP_SHIFT		(31-29)  #define SPCR_TSEC2EP			0x00000003	/* TSEC2 emergency priority */  #define SPCR_TSEC2EP_SHIFT		(31-31) + +#elif defined(CONFIG_MPC831X) +/* SPCR bits - MPC831x specific */ +#define SPCR_TSECDP			0x00003000	/* TSEC data priority */ +#define SPCR_TSECDP_SHIFT		(31-19) +#define SPCR_TSECEP			0x00000C00	/* TSEC emergency priority */ +#define SPCR_TSECEP_SHIFT		(31-21) +#define SPCR_TSECBDP			0x00000300	/* TSEC buffer descriptor priority */ +#define SPCR_TSECBDP_SHIFT		(31-23)  #endif  /* SICRL/H - System I/O Configuration Register Low/High @@ -195,6 +209,36 @@  #define SICRL_PCI_MSRC			0x10000000  #define SICRL_URT_CTPR			0x06000000  #define SICRL_IRQ_CTPR			0x00C00000 + +#elif defined(CONFIG_MPC831X) +/* SICRL bits - MPC831x specific */ +#define SICRL_LBC			0x30000000 +#define SICRL_UART			0x0C000000 +#define SICRL_SPI_A			0x03000000 +#define SICRL_SPI_B			0x00C00000 +#define SICRL_SPI_C			0x00300000 +#define SICRL_SPI_D			0x000C0000 +#define SICRL_USBDR			0x00000C00 +#define SICRL_ETSEC1_A			0x0000000C +#define SICRL_ETSEC2_A			0x00000003 + +/* SICRH bits - MPC831x specific */ +#define SICRH_INTR_A			0x02000000 +#define SICRH_INTR_B			0x00C00000 +#define SICRH_IIC			0x00300000 +#define SICRH_ETSEC2_B			0x000C0000 +#define SICRH_ETSEC2_C			0x00030000 +#define SICRH_ETSEC2_D			0x0000C000 +#define SICRH_ETSEC2_E			0x00003000 +#define SICRH_ETSEC2_F			0x00000C00 +#define SICRH_ETSEC2_G			0x00000300 +#define SICRH_ETSEC1_B			0x00000080 +#define SICRH_ETSEC1_C			0x00000060 +#define SICRH_GTX1_DLY			0x00000008 +#define SICRH_GTX2_DLY			0x00000004 +#define SICRH_TSOBI1			0x00000002 +#define SICRH_TSOBI2			0x00000001 +  #endif  /* SWCRR - System Watchdog Control Register @@ -393,6 +437,28 @@  #define HRCWH_ROM_LOC_LOCAL_16BIT	0x00600000  #define HRCWH_ROM_LOC_LOCAL_32BIT	0x00700000 +#if defined(CONFIG_MPC831X) +#define HRCWH_ROM_LOC_NAND_SP_8BIT 	0x00100000 +#define HRCWH_ROM_LOC_NAND_SP_16BIT	0x00200000 +#define HRCWH_ROM_LOC_NAND_LP_8BIT 	0x00500000 +#define HRCWH_ROM_LOC_NAND_LP_16BIT	0x00600000 + +#define HRCWH_RL_EXT_LEGACY		0x00000000 +#define HRCWH_RL_EXT_NAND		0x00040000 + +#define HRCWH_TSEC1M_IN_MII		0x00000000 +#define HRCWH_TSEC1M_IN_RMII		0x00002000 +#define HRCWH_TSEC1M_IN_RGMII		0x00006000 +#define HRCWH_TSEC1M_IN_RTBI		0x0000A000 +#define HRCWH_TSEC1M_IN_SGMII		0x0000C000 + +#define HRCWH_TSEC2M_IN_MII		0x00000000 +#define HRCWH_TSEC2M_IN_RMII		0x00000400 +#define HRCWH_TSEC2M_IN_RGMII		0x00000C00 +#define HRCWH_TSEC2M_IN_RTBI		0x00001400 +#define HRCWH_TSEC2M_IN_SGMII		0x00001800 +#endif +  #if defined(CONFIG_MPC834X)  #define HRCWH_TSEC1M_IN_RGMII		0x00000000  #define HRCWH_TSEC1M_IN_RTBI		0x00004000 @@ -523,6 +589,18 @@  #define SCCR_TSEC2CM_1			0x10000000  #define SCCR_TSEC2CM_2			0x20000000  #define SCCR_TSEC2CM_3			0x30000000 + +#elif defined(CONFIG_MPC831X) +/* TSEC1 bits are for TSEC2 as well */ +#define SCCR_TSEC1CM			0xc0000000 +#define SCCR_TSEC1CM_SHIFT		30 +#define SCCR_TSEC1CM_1			0x40000000 +#define SCCR_TSEC1CM_2			0x80000000 +#define SCCR_TSEC1CM_3			0xC0000000 + +#define SCCR_TSEC1ON			0x20000000 +#define SCCR_TSEC2ON			0x10000000 +  #endif  #define SCCR_USBMPHCM			0x00c00000 @@ -556,6 +634,25 @@  #define CSCONFIG_COL_BIT_10		0x00000002  #define CSCONFIG_COL_BIT_11		0x00000003 +/* TIMING_CFG_0 - DDR SDRAM Timing Configuration 0 + */ +#define TIMING_CFG0_RWT			0xC0000000 +#define TIMING_CFG0_RWT_SHIFT		30 +#define TIMING_CFG0_WRT			0x30000000 +#define TIMING_CFG0_WRT_SHIFT		28 +#define TIMING_CFG0_RRT			0x0C000000 +#define TIMING_CFG0_RRT_SHIFT		26 +#define TIMING_CFG0_WWT			0x03000000 +#define TIMING_CFG0_WWT_SHIFT		24 +#define TIMING_CFG0_ACT_PD_EXIT		0x00700000 +#define TIMING_CFG0_ACT_PD_EXIT_SHIFT	20 +#define TIMING_CFG0_PRE_PD_EXIT		0x00070000 +#define TIMING_CFG0_PRE_PD_EXIT_SHIFT	16 +#define TIMING_CFG0_ODT_PD_EXIT		0x00000F00 +#define TIMING_CFG0_ODT_PD_EXIT_SHIFT	8 +#define TIMING_CFG0_MRS_CYC		0x00000F00 +#define TIMING_CFG0_MRS_CYC_SHIFT	0 +  /* TIMING_CFG_1 - DDR SDRAM Timing Configuration 1   */  #define TIMING_CFG1_PRETOACT		0x70000000 @@ -586,6 +683,17 @@  #define TIMING_CFG2_WR_DATA_DELAY_SHIFT	10  #define TIMING_CFG2_CPO_DEF		0x00000000	/* default (= CASLAT + 1) */ +#define TIMING_CFG2_ADD_LAT		0x70000000 +#define TIMING_CFG2_ADD_LAT_SHIFT	28 +#define TIMING_CFG2_WR_LAT_DELAY	0x00380000 +#define TIMING_CFG2_WR_LAT_DELAY_SHIFT	19 +#define TIMING_CFG2_RD_TO_PRE		0x0000E000 +#define TIMING_CFG2_RD_TO_PRE_SHIFT	13 +#define TIMING_CFG2_CKE_PLS		0x000001C0 +#define TIMING_CFG2_CKE_PLS_SHIFT	6 +#define TIMING_CFG2_FOUR_ACT		0x0000003F +#define TIMING_CFG2_FOUR_ACT_SHIFT	0 +  /* DDR_SDRAM_CFG - DDR SDRAM Control Configuration   */  #define SDRAM_CFG_MEM_EN		0x80000000 @@ -593,13 +701,14 @@  #define SDRAM_CFG_ECC_EN		0x20000000  #define SDRAM_CFG_RD_EN			0x10000000  #define SDRAM_CFG_SDRAM_TYPE		0x03000000 +#define SDRAM_CFG_SDRAM_TYPE_DDR	0x02000000  #define SDRAM_CFG_SDRAM_TYPE_SHIFT	24  #define SDRAM_CFG_DYN_PWR		0x00200000  #define SDRAM_CFG_32_BE			0x00080000  #define SDRAM_CFG_8_BE			0x00040000  #define SDRAM_CFG_NCAP			0x00020000  #define SDRAM_CFG_2T_EN			0x00008000 -#define SDRAM_CFG_SDRAM_TYPE_DDR	0x02000000 +#define SDRAM_CFG_BI			0x00000001  /* DDR_SDRAM_MODE - DDR SDRAM Mode Register   */ @@ -732,11 +841,15 @@  #define BR_PS_32			0x00001800	/* Port Size 32 bit */  #define BR_DECC				0x00000600  #define BR_DECC_SHIFT			9 +#define BR_DECC_OFF			0x00000000 +#define BR_DECC_CHK			0x00000200 +#define BR_DECC_CHK_GEN			0x00000400  #define BR_WP				0x00000100  #define BR_WP_SHIFT			8  #define BR_MSEL				0x000000E0  #define BR_MSEL_SHIFT			5  #define BR_MS_GPCM			0x00000000	/* GPCM */ +#define BR_MS_FCM			0x00000020	/* FCM */  #define BR_MS_SDRAM			0x00000060	/* SDRAM */  #define BR_MS_UPMA			0x00000080	/* UPMA */  #define BR_MS_UPMB			0x000000A0	/* UPMB */ @@ -803,6 +916,34 @@  #define OR_GPCM_EAD			0x00000001  #define OR_GPCM_EAD_SHIFT		0 +#define OR_FCM_AM			0xFFFF8000 +#define OR_FCM_AM_SHIFT				15 +#define OR_FCM_BCTLD			0x00001000 +#define OR_FCM_BCTLD_SHIFT			12 +#define OR_FCM_PGS			0x00000400 +#define OR_FCM_PGS_SHIFT			10 +#define OR_FCM_CSCT			0x00000200 +#define OR_FCM_CSCT_SHIFT			 9 +#define OR_FCM_CST			0x00000100 +#define OR_FCM_CST_SHIFT			 8 +#define OR_FCM_CHT			0x00000080 +#define OR_FCM_CHT_SHIFT			 7 +#define OR_FCM_SCY			0x00000070 +#define OR_FCM_SCY_SHIFT			 4 +#define OR_FCM_SCY_1			0x00000010 +#define OR_FCM_SCY_2			0x00000020 +#define OR_FCM_SCY_3			0x00000030 +#define OR_FCM_SCY_4			0x00000040 +#define OR_FCM_SCY_5			0x00000050 +#define OR_FCM_SCY_6			0x00000060 +#define OR_FCM_SCY_7			0x00000070 +#define OR_FCM_RST			0x00000008 +#define OR_FCM_RST_SHIFT			 3 +#define OR_FCM_TRLX			0x00000004 +#define OR_FCM_TRLX_SHIFT			 2 +#define OR_FCM_EHTR			0x00000002 +#define OR_FCM_EHTR_SHIFT			 1 +  #define OR_UPM_AM			0xFFFF8000  #define OR_UPM_AM_SHIFT			15  #define OR_UPM_XAM			0x00006000 @@ -1019,4 +1160,118 @@  #define PIWAR_IWS_1G			0x0000001D  #define PIWAR_IWS_2G			0x0000001E +/* PMCCR1 - PCI Configuration Register 1 + */ +#define PMCCR1_POWER_OFF		0x00000020 + +/* FMR - Flash Mode Register + */ +#define FMR_CWTO		0x0000F000 +#define FMR_CWTO_SHIFT		12 +#define FMR_BOOT		0x00000800 +#define FMR_ECCM		0x00000100 +#define FMR_AL			0x00000030 +#define FMR_AL_SHIFT		4 +#define FMR_OP			0x00000003 +#define FMR_OP_SHIFT		0 + +/* FIR - Flash Instruction Register + */ +#define FIR_OP0			0xF0000000 +#define FIR_OP0_SHIFT		28 +#define FIR_OP1			0x0F000000 +#define FIR_OP1_SHIFT		24 +#define FIR_OP2			0x00F00000 +#define FIR_OP2_SHIFT		20 +#define FIR_OP3			0x000F0000 +#define FIR_OP3_SHIFT		16 +#define FIR_OP4			0x0000F000 +#define FIR_OP4_SHIFT		12 +#define FIR_OP5			0x00000F00 +#define FIR_OP5_SHIFT		8 +#define FIR_OP6			0x000000F0 +#define FIR_OP6_SHIFT		4 +#define FIR_OP7			0x0000000F +#define FIR_OP7_SHIFT		0 +#define FIR_OP_NOP		0x0 /* No operation and end of sequence */ +#define FIR_OP_CA		0x1 /* Issue current column address */ +#define FIR_OP_PA		0x2 /* Issue current block+page address */ +#define FIR_OP_UA		0x3 /* Issue user defined address */ +#define FIR_OP_CM0		0x4 /* Issue command from FCR[CMD0] */ +#define FIR_OP_CM1		0x5 /* Issue command from FCR[CMD1] */ +#define FIR_OP_CM2		0x6 /* Issue command from FCR[CMD2] */ +#define FIR_OP_CM3		0x7 /* Issue command from FCR[CMD3] */ +#define FIR_OP_WB		0x8 /* Write FBCR bytes from FCM buffer */ +#define FIR_OP_WS		0x9 /* Write 1 or 2 bytes from MDR[AS] */ +#define FIR_OP_RB		0xA /* Read FBCR bytes to FCM buffer */ +#define FIR_OP_RS		0xB /* Read 1 or 2 bytes to MDR[AS] */ +#define FIR_OP_CW0		0xC /* Wait then issue FCR[CMD0] */ +#define FIR_OP_CW1		0xD /* Wait then issue FCR[CMD1] */ +#define FIR_OP_RBW		0xE /* Wait then read FBCR bytes */ +#define FIR_OP_RSW		0xF /* Wait then read 1 or 2 bytes */ + +/* FCR - Flash Command Register + */ +#define FCR_CMD0		0xFF000000 +#define FCR_CMD0_SHIFT		24 +#define FCR_CMD1		0x00FF0000 +#define FCR_CMD1_SHIFT		16 +#define FCR_CMD2		0x0000FF00 +#define FCR_CMD2_SHIFT   	8 +#define FCR_CMD3		0x000000FF +#define FCR_CMD3_SHIFT		0 + +/* FBAR - Flash Block Address Register + */ +#define FBAR_BLK		0x00FFFFFF + +/* FPAR - Flash Page Address Register + */ +#define FPAR_SP_PI		0x00007C00 +#define FPAR_SP_PI_SHIFT	10 +#define FPAR_SP_MS		0x00000200 +#define FPAR_SP_CI		0x000001FF +#define FPAR_SP_CI_SHIFT	0 +#define FPAR_LP_PI		0x0003F000 +#define FPAR_LP_PI_SHIFT	12 +#define FPAR_LP_MS		0x00000800 +#define FPAR_LP_CI		0x000007FF +#define FPAR_LP_CI_SHIFT	0 + +/* LTESR - Transfer Error Status Register + */ +#define LTESR_BM		0x80000000 +#define LTESR_FCT 		0x40000000 +#define LTESR_PAR 		0x20000000 +#define LTESR_WP		0x04000000 +#define LTESR_ATMW		0x00800000 +#define LTESR_ATMR		0x00400000 +#define LTESR_CS		0x00080000 +#define LTESR_CC		0x00000001 + +/* DDR Control Driver Register + */ +#define DDRCDR_EN		0x40000000 +#define DDRCDR_PZ		0x3C000000 +#define DDRCDR_PZ_MAXZ		0x00000000 +#define DDRCDR_PZ_HIZ		0x20000000 +#define DDRCDR_PZ_NOMZ		0x30000000 +#define DDRCDR_PZ_LOZ		0x38000000 +#define DDRCDR_PZ_MINZ		0x3C000000 +#define DDRCDR_NZ		0x3C000000 +#define DDRCDR_NZ_MAXZ		0x00000000 +#define DDRCDR_NZ_HIZ		0x02000000 +#define DDRCDR_NZ_NOMZ		0x03000000 +#define DDRCDR_NZ_LOZ		0x03800000 +#define DDRCDR_NZ_MINZ		0x03C00000 +#define DDRCDR_ODT		0x00080000 +#define DDRCDR_DDR_CFG		0x00040000 +#define DDRCDR_M_ODR		0x00000002 +#define DDRCDR_Q_DRN		0x00000001 + +#ifndef __ASSEMBLY__ +struct pci_region; +void mpc83xx_pci_init(int num_buses, struct pci_region **reg, int warmboot); +#endif +  #endif	/* __MPC83XX_H__ */ diff --git a/include/mpc86xx.h b/include/mpc86xx.h index bc8ba3f2d..673bfed16 100644 --- a/include/mpc86xx.h +++ b/include/mpc86xx.h @@ -9,6 +9,15 @@  #define EXC_OFF_SYS_RESET	0x0100	/* System reset	offset */ + +/* + * platform register addresses + */ + +#define GUTS_SVR	(CFG_CCSRBAR + 0xE00A4) +#define MCM_ABCR	(CFG_CCSRBAR + 0x01000) +#define MCM_DBCR	(CFG_CCSRBAR + 0x01008) +  /*   * l2cr values.  Look in config_<BOARD>.h for the actual setup   */ diff --git a/include/ppc405.h b/include/ppc405.h index a2503a93d..71ad12e51 100644 --- a/include/ppc405.h +++ b/include/ppc405.h @@ -547,8 +547,8 @@  #define sdrcfga (SDR_DCR_BASE+0x0)	/* ADDR */  #define sdrcfgd (SDR_DCR_BASE+0x1)	/* Data */ -#define mtsdr(reg, data) mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data) -#define mfsdr(reg, data) mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd) +#define mtsdr(reg, data)	do { mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data); } while (0) +#define mfsdr(reg, data)	do { mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd); } while (0)  #define sdrnand0	0x4000  #define sdrultra0	0x4040 @@ -556,6 +556,11 @@  #define sdricintstat	0x4510  #define SDR_NAND0_NDEN		0x80000000 +#define SDR_NAND0_NDBTEN	0x40000000 +#define SDR_NAND0_NDBADR_MASK	0x30000000 +#define SDR_NAND0_NDBPG_MASK	0x0f000000 +#define SDR_NAND0_NDAREN	0x00800000 +#define SDR_NAND0_NDRBEN	0x00400000  #define SDR_ULTRA0_NDGPIOBP	0x80000000  #define SDR_ULTRA0_CSN_MASK	0x78000000 @@ -563,6 +568,9 @@  #define SDR_ULTRA0_CSNSEL1	0x20000000  #define SDR_ULTRA0_CSNSEL2	0x10000000  #define SDR_ULTRA0_CSNSEL3	0x08000000 +#define SDR_ULTRA0_EBCRDYEN	0x04000000 +#define SDR_ULTRA0_SPISSINEN	0x02000000 +#define SDR_ULTRA0_NFSRSTEN	0x01000000  #define SDR_ULTRA1_LEDNENABLE	0x40000000 @@ -593,8 +601,8 @@  /*   * Macro for accessing the indirect CPR register   */ -#define mtcpr(reg, data)  mtdcr(cprcfga,reg);mtdcr(cprcfgd,data) -#define mfcpr(reg, data)  mtdcr(cprcfga,reg);data = mfdcr(cprcfgd) +#define mtcpr(reg, data)	do { mtdcr(cprcfga,reg);mtdcr(cprcfgd,data); } while (0) +#define mfcpr(reg, data)	do { mtdcr(cprcfga,reg);data = mfdcr(cprcfgd); } while (0)  #define CPR_CLKUPD_ENPLLCH_EN  0x40000000     /* Enable CPR PLL Changes */  #define CPR_CLKUPD_ENDVCH_EN   0x20000000     /* Enable CPR Sys. Div. Changes */ diff --git a/include/ppc440.h b/include/ppc440.h index bc1d7aad7..07f75de08 100644 --- a/include/ppc440.h +++ b/include/ppc440.h @@ -1425,9 +1425,6 @@  /*----------------------------------------------------------------------------+  | Clock / Power-on-reset DCR's.  +----------------------------------------------------------------------------*/ -#define CPR0_CFGADDR			0x00C -#define CPR0_CFGDATA			0x00D -  #define CPR0_CLKUPD			0x20  #define CPR0_CLKUPD_BSY_MASK		0x80000000  #define CPR0_CLKUPD_BSY_COMPLETED	0x00000000 @@ -3314,6 +3311,23 @@  #define mtsdr(reg, data)	do { mtdcr(sdrcfga,reg);mtdcr(sdrcfgd,data); } while (0)  #define mfsdr(reg, data)	do { mtdcr(sdrcfga,reg);data = mfdcr(sdrcfgd); } while (0) +/* + * All 44x except 440GP have CPR registers (indirect DCR) + */ +#if !defined(CONFIG_440GP) +#define CPR0_CFGADDR		0x00C +#define CPR0_CFGDATA		0x00D + +#define mtcpr(reg, data)	do { \ +		mtdcr(CPR0_CFGADDR, reg); \ +		mtdcr(CPR0_CFGDATA, data); \ +	} while (0) + +#define mfcpr(reg, data)	do { \ +		mtdcr(CPR0_CFGADDR, reg); \ +		data = mfdcr(CPR0_CFGDATA); \ +	} while (0) +#endif  #ifndef __ASSEMBLY__ diff --git a/include/status_led.h b/include/status_led.h index db4c60fe3..71a202fe3 100644 --- a/include/status_led.h +++ b/include/status_led.h @@ -355,6 +355,18 @@ void status_led_set  (int led, int state);  # define STATUS_LED_ACTIVE	0		/* LED on for bit == 0 */  # define STATUS_LED_BOOT	0		/* LED 0 used for boot status */ +#elif defined(CONFIG_MOTIONPRO) + +#define STATUS_LED_BIT		((vu_long *) MPC5XXX_GPT6_ENABLE) +#define STATUS_LED_PERIOD	(CFG_HZ / 10) +#define STATUS_LED_STATE	STATUS_LED_BLINKING + +#define STATUS_LED_BIT1		((vu_long *) MPC5XXX_GPT7_ENABLE) +#define STATUS_LED_PERIOD1	(CFG_HZ / 10) +#define STATUS_LED_STATE1	STATUS_LED_OFF + +#define STATUS_LED_BOOT		0	/* LED 0 used for boot status */ +  #else  # error Status LED configuration missing  #endif diff --git a/lib_ppc/board.c b/lib_ppc/board.c index 24e8e970b..c4fc5805a 100644 --- a/lib_ppc/board.c +++ b/lib_ppc/board.c @@ -76,7 +76,7 @@  extern int update_flash_size (int flash_size);  #endif -#if defined(CONFIG_SOLIDCARD3) +#if defined(CONFIG_SC3)  extern void sc3_read_eeprom(void);  #endif @@ -310,10 +310,6 @@ init_fnc_t *init_sequence[] = {  	prt_8260_clks,  #endif /* CONFIG_8260 */ -#if defined(CONFIG_MPC83XX) -	print_clock_conf, -#endif -  	checkcpu,  #if defined(CONFIG_MPC5xxx)  	prt_mpc5xxx_clks, @@ -568,7 +564,9 @@ void board_init_f (ulong bootflag)  	bd->bi_procfreq = gd->cpu_clk;	/* Processor Speed, In Hz */  	bd->bi_plb_busfreq = gd->bus_clk; -#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || defined(CONFIG_440EP) || defined(CONFIG_440GR) +#if defined(CONFIG_405GP) || defined(CONFIG_405EP) || \ +    defined(CONFIG_440EP) || defined(CONFIG_440GR) || \ +    defined(CONFIG_440EPX) || defined(CONFIG_440GRX)  	bd->bi_pci_busfreq = get_PCI_freq ();  	bd->bi_opbfreq = get_OPB_freq ();  #elif defined(CONFIG_XILINX_ML300) @@ -822,7 +820,7 @@ void board_init_r (gd_t *id, ulong dest_addr)  #endif	/* CONFIG_405GP, CONFIG_405EP */  #endif	/* CFG_EXTBDINFO */ -#if defined(CONFIG_SOLIDCARD3) +#if defined(CONFIG_SC3)  	sc3_read_eeprom();  #endif  	s = getenv ("ethaddr"); @@ -931,7 +929,7 @@ void board_init_r (gd_t *id, ulong dest_addr)      defined(CONFIG_KUP4X)	|| \      defined(CONFIG_LWMON)	|| \      defined(CONFIG_PCU_E)	|| \ -    defined(CONFIG_SOLIDCARD3)	|| \ +    defined(CONFIG_SC3)		|| \      defined(CONFIG_W7O)		|| \      defined(CONFIG_MISC_INIT_R)  	/* miscellaneous platform dependent initialisations */ diff --git a/lib_ppc/extable.c b/lib_ppc/extable.c index fe856ffbb..b14d661bb 100644 --- a/lib_ppc/extable.c +++ b/lib_ppc/extable.c @@ -57,25 +57,25 @@ search_one_table(const struct exception_table_entry *first,  		long diff;  		mid = (last - first) / 2 + first; -		if (mid > CFG_MONITOR_BASE) { -		/* exception occurs in FLASH, before u-boot relocation. -		 * No relocation offset is needed. -		 */ +		if ((ulong) mid > CFG_MONITOR_BASE) { +			/* exception occurs in FLASH, before u-boot relocation. +			 * No relocation offset is needed. +			 */  			diff = mid->insn - value;  			if (diff == 0)  				return mid->fixup;  		} else { -		/* exception occurs in RAM, after u-boot relocation. -		 * A relocation offset should be added. -		 */ +			/* exception occurs in RAM, after u-boot relocation. +			 * A relocation offset should be added. +			 */  			diff = (mid->insn + gd->reloc_off) - value;  			if (diff == 0)  				return (mid->fixup + gd->reloc_off);  		}  		if (diff < 0) -			first = mid+1; +			first = mid + 1;  		else -			last = mid-1; +			last = mid - 1;  	}  	return 0;  } diff --git a/nand_spl/board/amcc/acadia/Makefile b/nand_spl/board/amcc/acadia/Makefile new file mode 100644 index 000000000..0d6828a76 --- /dev/null +++ b/nand_spl/board/amcc/acadia/Makefile @@ -0,0 +1,104 @@ +# +# (C) Copyright 2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# 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 $(TOPDIR)/config.mk +include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk + +LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds +LDFLAGS	= -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) +AFLAGS	+= -DCONFIG_NAND_SPL +CFLAGS	+= -DCONFIG_NAND_SPL + +SOBJS	= start.o resetvec.o +COBJS	= gpio.o nand_boot.o nand_ecc.o memory.o ndfc.o + +SRCS	:= $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) +OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) +__OBJS	:= $(SOBJS) $(COBJS) +LNDIR	:= $(OBJTREE)/nand_spl/board/$(BOARDDIR) + +nandobj	:= $(OBJTREE)/nand_spl/ + +ALL	= $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin + +all:	$(obj).depend $(ALL) + +$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl +	$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@ + +$(nandobj)u-boot-spl.bin:	$(nandobj)u-boot-spl +	$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ + +$(nandobj)u-boot-spl:	$(OBJS) +	cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \ +		-Map $(nandobj)u-boot-spl.map \ +		-o $(nandobj)u-boot-spl + +# create symbolic links for common files + +# from cpu directory +$(obj)gpio.c: +	@rm -f $(obj)gpio.c +	ln -s $(SRCTREE)/cpu/ppc4xx/gpio.c $(obj)gpio.c + +$(obj)ndfc.c: +	@rm -f $(obj)ndfc.c +	ln -s $(SRCTREE)/cpu/ppc4xx/ndfc.c $(obj)ndfc.c + +$(obj)resetvec.S: +	@rm -f $(obj)resetvec.S +	ln -s $(SRCTREE)/cpu/ppc4xx/resetvec.S $(obj)resetvec.S + +$(obj)start.S: +	@rm -f $(obj)start.S +	ln -s $(SRCTREE)/cpu/ppc4xx/start.S $(obj)start.S + +# from board directory +$(obj)memory.c: +	@rm -f $(obj)memory.c +	ln -s $(SRCTREE)/board/amcc/acadia/memory.c $(obj)memory.c + +# from nand_spl directory +$(obj)nand_boot.c: +	@rm -f $(obj)nand_boot.c +	ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c + +# from drivers/nand directory +$(obj)nand_ecc.c: +	@rm -f $(obj)nand_ecc.c +	ln -s $(SRCTREE)/drivers/nand/nand_ecc.c $(obj)nand_ecc.c + +######################################################################### + +$(obj)%.o:	$(obj)%.S +	$(CC) $(AFLAGS) -c -o $@ $< + +$(obj)%.o:	$(obj)%.c +	$(CC) $(CFLAGS) -c -o $@ $< + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/nand_spl/board/amcc/acadia/config.mk b/nand_spl/board/amcc/acadia/config.mk new file mode 100644 index 000000000..55069b4df --- /dev/null +++ b/nand_spl/board/amcc/acadia/config.mk @@ -0,0 +1,47 @@ +# +# (C) Copyright 2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# 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 +# +# +# AMCC 405EZ Reference Platform (Acadia) board +# + +# +# TEXT_BASE for SPL: +# +# On 4xx platforms the SPL is located at 0xfffff000...0xffffffff, +# in the last 4kBytes of memory space in cache. +# We will copy this SPL into internal SRAM in start.S. So we set +# TEXT_BASE to starting address in internal SRAM here. +# +TEXT_BASE = 0xF8003000 + +# PAD_TO used to generate a 16kByte binary needed for the combined image +# -> PAD_TO = TEXT_BASE + 0x4000 +PAD_TO	= 0xF8007000 + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif + +ifeq ($(dbcr),1) +PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000 +endif diff --git a/nand_spl/board/amcc/acadia/u-boot.lds b/nand_spl/board/amcc/acadia/u-boot.lds new file mode 100644 index 000000000..018def1fa --- /dev/null +++ b/nand_spl/board/amcc/acadia/u-boot.lds @@ -0,0 +1,63 @@ +/* + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * 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 + */ + +OUTPUT_ARCH(powerpc:common) +SECTIONS +{ +  .resetvec 0xF8003FFC : +  { +    *(.resetvec) +  } = 0xffff + +  .text      : +  { +    start.o	(.text) +    nand_boot.o	(.text) +    ndfc.o	(.text) + +    *(.text) +    *(.fixup) +  } +  _etext = .; + +  .data    : +  { +    *(.rodata*) +    *(.data*) +    *(.sdata*) +    __got2_start = .; +    *(.got2) +    __got2_end = .; +  } + +  _edata  =  .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) +   *(.bss) +  } + +  _end = . ; +} diff --git a/nand_spl/board/amcc/bamboo/Makefile b/nand_spl/board/amcc/bamboo/Makefile new file mode 100644 index 000000000..0df86f99d --- /dev/null +++ b/nand_spl/board/amcc/bamboo/Makefile @@ -0,0 +1,100 @@ +# +# (C) Copyright 2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# 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 $(TOPDIR)/config.mk +include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk + +LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds +LDFLAGS	= -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) +AFLAGS	+= -DCONFIG_NAND_SPL +CFLAGS	+= -DCONFIG_NAND_SPL + +SOBJS	= start.o init.o resetvec.o +COBJS	= nand_boot.o nand_ecc.o ndfc.o sdram.o + +SRCS	:= $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c)) +OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) +__OBJS	:= $(SOBJS) $(COBJS) +LNDIR	:= $(OBJTREE)/nand_spl/board/$(BOARDDIR) + +nandobj	:= $(OBJTREE)/nand_spl/ + +ALL	= $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin + +all:	$(obj).depend $(ALL) + +$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl +	$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@ + +$(nandobj)u-boot-spl.bin:	$(nandobj)u-boot-spl +	$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@ + +$(nandobj)u-boot-spl:	$(OBJS) +	cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \ +		-Map $(nandobj)u-boot-spl.map \ +		-o $(nandobj)u-boot-spl + +# create symbolic links for common files + +# from cpu directory +$(obj)ndfc.c: +	@rm -f $(obj)ndfc.c +	ln -s $(SRCTREE)/cpu/ppc4xx/ndfc.c $(obj)ndfc.c + +$(obj)resetvec.S: +	@rm -f $(obj)resetvec.S +	ln -s $(SRCTREE)/cpu/ppc4xx/resetvec.S $(obj)resetvec.S + +$(obj)start.S: +	@rm -f $(obj)start.S +	ln -s $(SRCTREE)/cpu/ppc4xx/start.S $(obj)start.S + +# from board directory +$(obj)init.S: +	@rm -f $(obj)init.S +	ln -s $(SRCTREE)/board/amcc/bamboo/init.S $(obj)init.S + +# from nand_spl directory +$(obj)nand_boot.c: +	@rm -f $(obj)nand_boot.c +	ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c + +# from drivers/nand directory +$(obj)nand_ecc.c: +	@rm -f $(obj)nand_ecc.c +	ln -s $(SRCTREE)/drivers/nand/nand_ecc.c $(obj)nand_ecc.c + +######################################################################### + +$(obj)%.o:	$(obj)%.S +	$(CC) $(AFLAGS) -c -o $@ $< + +$(obj)%.o:	$(obj)%.c +	$(CC) $(CFLAGS) -c -o $@ $< + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/nand_spl/board/amcc/bamboo/config.mk b/nand_spl/board/amcc/bamboo/config.mk new file mode 100644 index 000000000..f7ec7514f --- /dev/null +++ b/nand_spl/board/amcc/bamboo/config.mk @@ -0,0 +1,49 @@ +# +# (C) Copyright 2007 +# Stefan Roese, DENX Software Engineering, sr@denx.de. +# +# 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 +# +# +# AMCC 440EP Reference Platform (Bamboo) board +# + +# +# TEXT_BASE for SPL: +# +# On 440EP(x) platforms the SPL is located at 0xfffff000...0xffffffff, +# in the last 4kBytes of memory space in cache. +# We will copy this SPL into instruction-cache in start.S. So we set +# TEXT_BASE to starting address in i-cache here. +# +TEXT_BASE = 0x00800000 + +# PAD_TO used to generate a 16kByte binary needed for the combined image +# -> PAD_TO = TEXT_BASE + 0x4000 +PAD_TO	= 0x00804000 + +PLATFORM_CPPFLAGS += -DCONFIG_440=1 + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif + +ifeq ($(dbcr),1) +PLATFORM_CPPFLAGS += -DCFG_INIT_DBCR=0x8cff0000 +endif diff --git a/nand_spl/board/amcc/bamboo/sdram.c b/nand_spl/board/amcc/bamboo/sdram.c new file mode 100644 index 000000000..4f09072df --- /dev/null +++ b/nand_spl/board/amcc/bamboo/sdram.c @@ -0,0 +1,92 @@ +/* + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * 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 <ppc4xx.h> +#include <asm/processor.h> +#include <asm/io.h> + +static void wait_init_complete(void) +{ +	u32 val; + +	do { +		mfsdram(mem_mcsts, val); +	} while (!(val & 0x80000000)); +} + +/* + * early_sdram_init() + * + * As the name already indicates, this function is called very early + * from start.S and configures the SDRAM with fixed values. This is needed, + * since the 440EP has no internal SRAM and the 4kB NAND_SPL loader has + * not enough free space to implement the complete I2C SPD DDR autodetection + * routines. Therefore the Bamboo only supports the onboard 64MBytes of SDRAM + * when booting from NAND flash. + */ +void early_sdram_init(void) +{ +	/* +	 * Soft-reset SDRAM controller. +	 */ +	mtsdr(sdr_srst, SDR0_SRST_DMC); +	mtsdr(sdr_srst, 0x00000000); + +	/* +	 * Disable memory controller. +	 */ +	mtsdram(mem_cfg0, 0x00000000); + +	/* +	 * Setup some default +	 */ +	mtsdram(mem_uabba, 0x00000000); /* ubba=0 (default)		*/ +	mtsdram(mem_slio, 0x00000000);	/* rdre=0 wrre=0 rarw=0		*/ +	mtsdram(mem_devopt, 0x00000000); /* dll=0 ds=0 (normal)		*/ +	mtsdram(mem_wddctr, 0x00000000); /* wrcp=0 dcd=0		*/ +	mtsdram(mem_clktr, 0x40000000); /* clkp=1 (90 deg wr) dcdt=0	*/ + +	/* +	 * Following for CAS Latency = 2.5 @ 133 MHz PLB +	 */ +	mtsdram(mem_b0cr, 0x00082001); +	mtsdram(mem_tr0, 0x41094012); +	mtsdram(mem_tr1, 0x8080083d);	/* SS=T2 SL=STAGE 3 CD=1 CT=0x00*/ +	mtsdram(mem_rtr, 0x04100000);	/* Interval 7.8µs @ 133MHz PLB	*/ +	mtsdram(mem_cfg1, 0x00000000);	/* Self-refresh exit, disable PM*/ + +	/* +	 * Enable the controller, then wait for DCEN to complete +	 */ +	mtsdram(mem_cfg0, 0x80000000); /* DCEN=1, PMUD=0*/ +	wait_init_complete(); +} + +long int initdram(int board_type) +{ +	/* +	 * Nothing to do here, just return size of fixed SDRAM setup +	 */ +	return CFG_MBYTES_SDRAM << 20; +} diff --git a/nand_spl/board/amcc/bamboo/u-boot.lds b/nand_spl/board/amcc/bamboo/u-boot.lds new file mode 100644 index 000000000..28228f84d --- /dev/null +++ b/nand_spl/board/amcc/bamboo/u-boot.lds @@ -0,0 +1,65 @@ +/* + * (C) Copyright 2007 + * Stefan Roese, DENX Software Engineering, sr@denx.de. + * + * 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 + */ + +OUTPUT_ARCH(powerpc:common) +SECTIONS +{ +  .resetvec 0x00800FFC : +  { +    *(.resetvec) +  } = 0xffff + +  .text      : +  { +    start.o	(.text) +    init.o	(.text) +    nand_boot.o	(.text) +    sdram.o	(.text) +    ndfc.o	(.text) + +    *(.text) +    *(.fixup) +  } +  _etext = .; + +  .data    : +  { +    *(.rodata*) +    *(.data*) +    *(.sdata*) +    __got2_start = .; +    *(.got2) +    __got2_end = .; +  } + +  _edata  =  .; + +  __bss_start = .; +  .bss       : +  { +   *(.sbss) +   *(.bss) +  } + +  _end = . ; +} diff --git a/nand_spl/board/amcc/sequoia/Makefile b/nand_spl/board/amcc/sequoia/Makefile index 510999db0..ec1be5a76 100644 --- a/nand_spl/board/amcc/sequoia/Makefile +++ b/nand_spl/board/amcc/sequoia/Makefile @@ -1,5 +1,5 @@  # -# (C) Copyright 2006 +# (C) Copyright 2006-2007  # Stefan Roese, DENX Software Engineering, sr@denx.de.  #  # See file CREDITS for list of people who contributed to this @@ -30,7 +30,7 @@ AFLAGS	+= -DCONFIG_NAND_SPL  CFLAGS	+= -DCONFIG_NAND_SPL  SOBJS	= start.o init.o resetvec.o -COBJS	= nand_boot.o ndfc.o sdram.o speed.o +COBJS	= nand_boot.o nand_ecc.o ndfc.o sdram.o  SRCS	:= $(addprefix $(obj),$(SOBJS:.o=.S) $(COBJS:.o=.c))  OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) @@ -69,10 +69,6 @@ $(obj)start.S:  	@rm -f $(obj)start.S  	ln -s $(SRCTREE)/cpu/ppc4xx/start.S $(obj)start.S -$(obj)speed.c: -	@rm -f $(obj)speed.c -	ln -s $(SRCTREE)/cpu/ppc4xx/speed.c $(obj)speed.c -  # from board directory  $(obj)init.S:  	@rm -f $(obj)init.S @@ -89,6 +85,11 @@ $(obj)nand_boot.c:  	@rm -f $(obj)nand_boot.c  	ln -s $(SRCTREE)/nand_spl/nand_boot.c $(obj)nand_boot.c +# from drivers/nand directory +$(obj)nand_ecc.c: +	@rm -f $(obj)nand_ecc.c +	ln -s $(SRCTREE)/drivers/nand/nand_ecc.c $(obj)nand_ecc.c +  #########################################################################  $(obj)%.o:	$(obj)%.S diff --git a/nand_spl/nand_boot.c b/nand_spl/nand_boot.c index a136fb707..840a59659 100644 --- a/nand_spl/nand_boot.c +++ b/nand_spl/nand_boot.c @@ -1,5 +1,5 @@  /* - * (C) Copyright 2006 + * (C) Copyright 2006-2007   * Stefan Roese, DENX Software Engineering, sr@denx.de.   *   * This program is free software; you can redistribute it and/or @@ -24,27 +24,28 @@  #define CFG_NAND_READ_DELAY \  	{ volatile int dummy; int i; for (i=0; i<10000; i++) dummy = i; } +static int nand_ecc_pos[] = CFG_NAND_ECCPOS; +  extern void board_nand_init(struct nand_chip *nand); -extern void ndfc_hwcontrol(struct mtd_info *mtdinfo, int cmd); -extern void ndfc_write_byte(struct mtd_info *mtdinfo, u_char byte); -extern u_char ndfc_read_byte(struct mtd_info *mtdinfo); -extern int ndfc_dev_ready(struct mtd_info *mtdinfo); -extern int jump_to_ram(ulong delta); -extern int jump_to_uboot(ulong addr); -static int nand_is_bad_block(struct mtd_info *mtd, int block) +static int nand_command(struct mtd_info *mtd, int block, int page, int offs, u8 cmd)  {  	struct nand_chip *this = mtd->priv; -	int page_addr = block * CFG_NAND_PAGE_COUNT; +	int page_addr = page + block * CFG_NAND_PAGE_COUNT; + +	if (this->dev_ready) +		this->dev_ready(mtd); +	else +		CFG_NAND_READ_DELAY;  	/* Begin command latch cycle */  	this->hwcontrol(mtd, NAND_CTL_SETCLE); -	this->write_byte(mtd, NAND_CMD_READOOB); +	this->write_byte(mtd, cmd);  	/* Set ALE and clear CLE to start address cycle */  	this->hwcontrol(mtd, NAND_CTL_CLRCLE);  	this->hwcontrol(mtd, NAND_CTL_SETALE);  	/* Column address */ -	this->write_byte(mtd, CFG_NAND_BAD_BLOCK_POS);			/* A[7:0] */ +	this->write_byte(mtd, offs);					/* A[7:0] */  	this->write_byte(mtd, (uchar)(page_addr & 0xff));		/* A[16:9] */  	this->write_byte(mtd, (uchar)((page_addr >> 8) & 0xff));	/* A[24:17] */  #ifdef CFG_NAND_4_ADDR_CYCLE @@ -62,6 +63,15 @@ static int nand_is_bad_block(struct mtd_info *mtd, int block)  	else  		CFG_NAND_READ_DELAY; +	return 0; +} + +static int nand_is_bad_block(struct mtd_info *mtd, int block) +{ +	struct nand_chip *this = mtd->priv; + +	nand_command(mtd, block, 0, CFG_NAND_BAD_BLOCK_POS, NAND_CMD_READOOB); +  	/*  	 * Read on byte  	 */ @@ -74,39 +84,46 @@ static int nand_is_bad_block(struct mtd_info *mtd, int block)  static int nand_read_page(struct mtd_info *mtd, int block, int page, uchar *dst)  {  	struct nand_chip *this = mtd->priv; -	int page_addr = page + block * CFG_NAND_PAGE_COUNT; +	u_char *ecc_calc; +	u_char *ecc_code; +	u_char *oob_data;  	int i; +	int eccsize = CFG_NAND_ECCSIZE; +	int eccbytes = CFG_NAND_ECCBYTES; +	int eccsteps = CFG_NAND_ECCSTEPS; +	uint8_t *p = dst; +	int stat; -	/* Begin command latch cycle */ -	this->hwcontrol(mtd, NAND_CTL_SETCLE); -	this->write_byte(mtd, NAND_CMD_READ0); -	/* Set ALE and clear CLE to start address cycle */ -	this->hwcontrol(mtd, NAND_CTL_CLRCLE); -	this->hwcontrol(mtd, NAND_CTL_SETALE); -	/* Column address */ -	this->write_byte(mtd, 0);					/* A[7:0] */ -	this->write_byte(mtd, (uchar)(page_addr & 0xff));		/* A[16:9] */ -	this->write_byte(mtd, (uchar)((page_addr >> 8) & 0xff));	/* A[24:17] */ -#ifdef CFG_NAND_4_ADDR_CYCLE -	/* One more address cycle for devices > 32MiB */ -	this->write_byte(mtd, (uchar)((page_addr >> 16) & 0x0f));	/* A[xx:25] */ -#endif -	/* Latch in address */ -	this->hwcontrol(mtd, NAND_CTL_CLRALE); +	nand_command(mtd, block, page, 0, NAND_CMD_READ0); -	/* -	 * Wait a while for the data to be ready +	/* No malloc available for now, just use some temporary locations +	 * in SDRAM  	 */ -	if (this->dev_ready) -		this->dev_ready(mtd); -	else -		CFG_NAND_READ_DELAY; +	ecc_calc = (u_char *)(CFG_SDRAM_BASE + 0x10000); +	ecc_code = ecc_calc + 0x100; +	oob_data = ecc_calc + 0x200; -	/* -	 * Read page into buffer -	 */ -	for (i=0; i<CFG_NAND_PAGE_SIZE; i++) -		*dst++ = this->read_byte(mtd); +	for (i = 0; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { +		this->enable_hwecc(mtd, NAND_ECC_READ); +		this->read_buf(mtd, p, eccsize); +		this->calculate_ecc(mtd, p, &ecc_calc[i]); +	} +	this->read_buf(mtd, oob_data, CFG_NAND_OOBSIZE); + +	/* Pick the ECC bytes out of the oob data */ +	for (i = 0; i < CFG_NAND_ECCTOTAL; i++) +		ecc_code[i] = oob_data[nand_ecc_pos[i]]; + +	eccsteps = CFG_NAND_ECCSTEPS; +	p = dst; + +	for (i = 0 ; eccsteps; eccsteps--, i += eccbytes, p += eccsize) { +		/* No chance to do something with the possible error message +		 * from correct_data(). We just hope that all possible errors +		 * are corrected by this routine. +		 */ +		stat = this->correct_data(mtd, p, &ecc_code[i], &ecc_calc[i]); +	}  	return 0;  }  |