[U-Boot] [PATCH 0/3] mpc52xx: IPEK01 board support

Hello,
this patch add support for the IPEK01 MPC5200 based board. It requires two patchs for the Fujitsu MB862xx driver:
[PATCH 1/3] video: mb862xx: add option CONFIG_VIDEO_MB862xx_ACCEL for X888RGB mode [PATCH 2/3] video: mb862xx: add option VIDEO_FB_16BPP_WORD_SWAP for IPEK01 [PATCH 3/3] mpc52xx: add support for the IPEK01 board
Wolfgang.

The new IPEK01 board uses the X888RGB mode for the Lime graphics controller. For this mode video accelaration does not work. This patch makes the accelaration configurable via CONFIG_VIDEO_MB862xx_ACCEL, which is enabled for the lwmon5 and the socrates board for backward compatibility.
Signed-off-by: Anatolij Gustschin agust@denx.de Signed-off-by: Wolfgang Grandegger wg@grandegger.com --- drivers/video/cfb_console.c | 2 ++ drivers/video/mb862xx.c | 16 +++++++++++++++- include/configs/lwmon5.h | 1 + include/configs/socrates.h | 1 + 4 files changed, 19 insertions(+), 1 deletion(-)
Index: u-boot-mainline/drivers/video/cfb_console.c =================================================================== --- u-boot-mainline.orig/drivers/video/cfb_console.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/cfb_console.c 2009-10-19 13:17:29.406303158 +0200 @@ -146,9 +146,11 @@ #ifdef CONFIG_VIDEO_CORALP #define VIDEO_FB_LITTLE_ENDIAN #endif +#ifdef CONFIG_VIDEO_MB862xx_ACCEL #define VIDEO_HW_RECTFILL #define VIDEO_HW_BITBLT #endif +#endif
/*****************************************************************************/ /* Include video_fb.h after definitions of VIDEO_HW_RECTFILL etc */ Index: u-boot-mainline/drivers/video/mb862xx.c =================================================================== --- u-boot-mainline.orig/drivers/video/mb862xx.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/mb862xx.c 2009-10-19 13:17:17.467553012 +0200 @@ -89,6 +89,7 @@ (GC_DISP_BASE | GC_L0PAL0) + \ ((idx) << 2)), (val))
+#if defined(CONFIG_VIDEO_MB862xx_ACCEL) static void gdc_sw_reset (void) { GraphicDevice *dev = &mb862xx; @@ -129,6 +130,7 @@ break; } } +#endif
#if !defined(CONFIG_VIDEO_CORALP) static void board_disp_init (void) @@ -144,11 +146,13 @@ #endif
/* - * Init drawing engine + * Init drawing engine if accel enabled. + * Also clears visible framebuffer. */ static void de_init (void) { GraphicDevice *dev = &mb862xx; +#if defined(CONFIG_VIDEO_MB862xx_ACCEL) int cf = (dev->gdfBytesPP == 1) ? 0x0000 : 0x8000;
dev->dprBase = dev->frameAdrs + GC_DRAW_BASE; @@ -174,6 +178,14 @@ DE_WR_FIFO (dev->winSizeY << 16 | dev->winSizeX); /* sync with SW access to framebuffer */ de_wait (); +#else + unsigned int i, *p; + + i = dev->winSizeX * dev->winSizeY; + p = (unsigned int *)dev->frameAdrs; + while (i--) + *p++ = 0; +#endif }
#if defined(CONFIG_VIDEO_CORALP) @@ -389,6 +401,7 @@ L0PAL_WR_REG (index, (r << 16) | (g << 8) | (b)); }
+#if defined(CONFIG_VIDEO_MB862xx_ACCEL) /* * Drawing engine Fill and BitBlt screen region */ @@ -430,3 +443,4 @@ DE_WR_FIFO ((height << 16) | width); de_wait (); /* sync */ } +#endif Index: u-boot-mainline/include/configs/lwmon5.h =================================================================== --- u-boot-mainline.orig/include/configs/lwmon5.h 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/include/configs/lwmon5.h 2009-10-19 13:17:29.406303158 +0200 @@ -344,6 +344,7 @@ /* Video console */ #define CONFIG_VIDEO #define CONFIG_VIDEO_MB862xx +#define CONFIG_VIDEO_MB862xx_ACCEL #define CONFIG_CFB_CONSOLE #define CONFIG_VIDEO_LOGO #define CONFIG_CONSOLE_EXTRA_INFO Index: u-boot-mainline/include/configs/socrates.h =================================================================== --- u-boot-mainline.orig/include/configs/socrates.h 2009-10-19 13:17:14.583302392 +0200 +++ u-boot-mainline/include/configs/socrates.h 2009-10-19 13:17:29.406303158 +0200 @@ -198,6 +198,7 @@
#define CONFIG_VIDEO #define CONFIG_VIDEO_MB862xx +#define CONFIG_VIDEO_MB862xx_ACCEL #define CONFIG_CFB_CONSOLE #define CONFIG_VIDEO_LOGO #define CONFIG_VIDEO_BMP_LOGO

Dear Wolfgang Grandegger,
In message 20091019111913.427445638@denx.de you wrote:
The new IPEK01 board uses the X888RGB mode for the Lime graphics controller. For this mode video accelaration does not work. This patch makes the accelaration configurable via CONFIG_VIDEO_MB862xx_ACCEL, which is enabled for the lwmon5 and the socrates board for backward compatibility.
Why would you want to disable it for IPEK01? Accelaration seems to be a good thing you don't give up if you don't have to, but I cannot think of reasons why you would have to do without it?
Index: u-boot-mainline/drivers/video/cfb_console.c
--- u-boot-mainline.orig/drivers/video/cfb_console.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/cfb_console.c 2009-10-19 13:17:29.406303158 +0200
Please use git-format-patch to create patches.
--- u-boot-mainline.orig/drivers/video/mb862xx.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/mb862xx.c 2009-10-19 13:17:17.467553012 +0200
...
@@ -174,6 +178,14 @@ DE_WR_FIFO (dev->winSizeY << 16 | dev->winSizeX); /* sync with SW access to framebuffer */ de_wait (); +#else
- unsigned int i, *p;
- i = dev->winSizeX * dev->winSizeY;
- p = (unsigned int *)dev->frameAdrs;
- while (i--)
*p++ = 0;
+#endif
Why don't you use memset() here?
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
Dear Wolfgang Grandegger,
In message 20091019111913.427445638@denx.de you wrote:
The new IPEK01 board uses the X888RGB mode for the Lime graphics controller. For this mode video accelaration does not work. This patch makes the accelaration configurable via CONFIG_VIDEO_MB862xx_ACCEL, which is enabled for the lwmon5 and the socrates board for backward compatibility.
Why would you want to disable it for IPEK01? Accelaration seems to be a good thing you don't give up if you don't have to, but I cannot think of reasons why you would have to do without it?
Because acceleration does work with 16 bpp but *not* with 32 bpp. That's the reason why we made it configurable. Well, this patch could be dropped, because the BSP for the IPEK01 posted here uses now 16 bpp as well.
Index: u-boot-mainline/drivers/video/cfb_console.c
--- u-boot-mainline.orig/drivers/video/cfb_console.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/cfb_console.c 2009-10-19 13:17:29.406303158 +0200
Please use git-format-patch to create patches.
Why? Do you have any problems to apply these patches? I personally (still) prefer using quilt for patch stack management.
--- u-boot-mainline.orig/drivers/video/mb862xx.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/mb862xx.c 2009-10-19 13:17:17.467553012 +0200
...
@@ -174,6 +178,14 @@ DE_WR_FIFO (dev->winSizeY << 16 | dev->winSizeX); /* sync with SW access to framebuffer */ de_wait (); +#else
- unsigned int i, *p;
- i = dev->winSizeX * dev->winSizeY;
- p = (unsigned int *)dev->frameAdrs;
- while (i--)
*p++ = 0;
+#endif
Why don't you use memset() here?
Maybe to ensure that D32 accesses are performed. Anatolij might know?
Wolfgang.

Dear Wolfgang,
In message 4ADC5661.7050508@grandegger.com you wrote:
The new IPEK01 board uses the X888RGB mode for the Lime graphics controller. For this mode video accelaration does not work. This patch makes the accelaration configurable via CONFIG_VIDEO_MB862xx_ACCEL, which is enabled for the lwmon5 and the socrates board for backward compatibility.
Why would you want to disable it for IPEK01? Accelaration seems to be a good thing you don't give up if you don't have to, but I cannot think of reasons why you would have to do without it?
Because acceleration does work with 16 bpp but *not* with 32 bpp. That's the reason why we made it configurable. Well, this patch could be dropped, because the BSP for the IPEK01 posted here uses now 16 bpp as well.
Then please either mention this fact in the commit message (the current one does not say anything about 16 versus 32 bit mode), or realy drop the patch.
--- u-boot-mainline.orig/drivers/video/cfb_console.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/cfb_console.c 2009-10-19 13:17:29.406303158 +0200
Please use git-format-patch to create patches.
Why? Do you have any problems to apply these patches? I personally (still) prefer using quilt for patch stack management.
git-format-patch provides index information, which allows for intelligent merges (i. e. the merge code can then find the patch base and do a rebase internally). With your patches this is impossible.
Fell free to use quilt or any other tools for your own purposes, but for patch submission please prepare the patches using git-format-patch
+#else
- unsigned int i, *p;
- i = dev->winSizeX * dev->winSizeY;
- p = (unsigned int *)dev->frameAdrs;
- while (i--)
*p++ = 0;
+#endif
Why don't you use memset() here?
Maybe to ensure that D32 accesses are performed. Anatolij might know?
How should Anatolij know? It is you who added this code, right?
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
Dear Wolfgang,
In message 4ADC5661.7050508@grandegger.com you wrote:
The new IPEK01 board uses the X888RGB mode for the Lime graphics controller. For this mode video accelaration does not work. This patch makes the accelaration configurable via CONFIG_VIDEO_MB862xx_ACCEL, which is enabled for the lwmon5 and the socrates board for backward compatibility.
Why would you want to disable it for IPEK01? Accelaration seems to be a good thing you don't give up if you don't have to, but I cannot think of reasons why you would have to do without it?
Because acceleration does work with 16 bpp but *not* with 32 bpp. That's the reason why we made it configurable. Well, this patch could be dropped, because the BSP for the IPEK01 posted here uses now 16 bpp as well.
Then please either mention this fact in the commit message (the current one does not say anything about 16 versus 32 bit mode), or realy drop the patch.
Well, X888RGB mode is a 32 bpp mode. I leave it up to Anatolij to accept this patch or not (he is actually the original author).
--- u-boot-mainline.orig/drivers/video/cfb_console.c 2009-10-19 13:17:14.582303087 +0200 +++ u-boot-mainline/drivers/video/cfb_console.c 2009-10-19 13:17:29.406303158 +0200
Please use git-format-patch to create patches.
Why? Do you have any problems to apply these patches? I personally (still) prefer using quilt for patch stack management.
git-format-patch provides index information, which allows for intelligent merges (i. e. the merge code can then find the patch base and do a rebase internally). With your patches this is impossible.
Fell free to use quilt or any other tools for your own purposes, but for patch submission please prepare the patches using git-format-patch
OK.
+#else
- unsigned int i, *p;
- i = dev->winSizeX * dev->winSizeY;
- p = (unsigned int *)dev->frameAdrs;
- while (i--)
*p++ = 0;
+#endif
Why don't you use memset() here?
Maybe to ensure that D32 accesses are performed. Anatolij might know?
How should Anatolij know? It is you who added this code, right?
No, this patch is from Anatolij and he has added his signed-off-by. My signed-off-by is not correct, strictly speaking. I should have just added an acked-by or tested-by line. Will change.
Wolfgang.

In 16 bpp mode, the new IPEK01 board only requires swapping of D16 words for D32 accesses due to the diffferent connecting to the GDC bus. This patch introduces the configuration option VIDEO_FB_16BPP_WORD_SWAP, which should be set for all board using the mb862xx in 16 bpp mode. For the IPEK01, VIDEO_FB_16BPP_PIXEL_SWAP should not be set.
Signed-off-by: Wolfgang Grandegger wg@grandegger.com --- drivers/video/cfb_console.c | 2 +- include/configs/lwmon5.h | 1 + include/configs/socrates.h | 1 + 3 files changed, 3 insertions(+), 1 deletion(-)
Index: u-boot-mainline/drivers/video/cfb_console.c =================================================================== --- u-boot-mainline.orig/drivers/video/cfb_console.c 2009-10-19 13:17:17.466553428 +0200 +++ u-boot-mainline/drivers/video/cfb_console.c 2009-10-19 13:17:17.495553669 +0200 @@ -321,7 +321,7 @@ #else #define SWAP16(x) (x) #define SWAP32(x) (x) -#if defined(VIDEO_FB_16BPP_PIXEL_SWAP) +#if defined(VIDEO_FB_16BPP_WORD_SWAP) #define SHORTSWAP32(x) ( ((x) >> 16) | ((x) << 16) ) #else #define SHORTSWAP32(x) (x) Index: u-boot-mainline/include/configs/lwmon5.h =================================================================== --- u-boot-mainline.orig/include/configs/lwmon5.h 2009-10-19 13:17:17.471552467 +0200 +++ u-boot-mainline/include/configs/lwmon5.h 2009-10-19 13:17:17.496553812 +0200 @@ -349,6 +349,7 @@ #define CONFIG_VIDEO_LOGO #define CONFIG_CONSOLE_EXTRA_INFO #define VIDEO_FB_16BPP_PIXEL_SWAP +#define VIDEO_FB_16BPP_WORD_SWAP
#define CONFIG_VGA_AS_SINGLE_DEVICE #define CONFIG_VIDEO_SW_CURSOR Index: u-boot-mainline/include/configs/socrates.h =================================================================== --- u-boot-mainline.orig/include/configs/socrates.h 2009-10-19 13:17:17.474552618 +0200 +++ u-boot-mainline/include/configs/socrates.h 2009-10-19 13:17:17.497553676 +0200 @@ -204,6 +204,7 @@ #define CONFIG_VIDEO_BMP_LOGO #define CONFIG_CONSOLE_EXTRA_INFO #define VIDEO_FB_16BPP_PIXEL_SWAP +#define VIDEO_FB_16BPP_WORD_SWAP #define CONFIG_VGA_AS_SINGLE_DEVICE #define CONFIG_SYS_CONSOLE_IS_IN_ENV #define CONFIG_VIDEO_SW_CURSOR

Dear Wolfgang Grandegger,
In message 20091019111913.621578739@denx.de you wrote:
In 16 bpp mode, the new IPEK01 board only requires swapping of D16 words for D32 accesses due to the diffferent connecting to the GDC bus. This patch introduces the configuration option VIDEO_FB_16BPP_WORD_SWAP, which should be set for all board using the mb862xx in 16 bpp mode. For the IPEK01, VIDEO_FB_16BPP_PIXEL_SWAP should not be set.
I don't see any functional change in this patch - all you do is renaming VIDEO_FB_16BPP_PIXEL_SWAP into VIDEO_FB_16BPP_WORD_SWAP.
This makes no sense to me.
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
Dear Wolfgang Grandegger,
In message 20091019111913.621578739@denx.de you wrote:
In 16 bpp mode, the new IPEK01 board only requires swapping of D16 words for D32 accesses due to the diffferent connecting to the GDC bus. This patch introduces the configuration option VIDEO_FB_16BPP_WORD_SWAP, which should be set for all board using the mb862xx in 16 bpp mode. For the IPEK01, VIDEO_FB_16BPP_PIXEL_SWAP should not be set.
I don't see any functional change in this patch - all you do is renaming VIDEO_FB_16BPP_PIXEL_SWAP into VIDEO_FB_16BPP_WORD_SWAP.
This makes no sense to me.
Please have a look to the patched file. VIDEO_FB_16BPP_PIXEL_SWAP is used in other locations as well. This type of swapping is related to the way the GDC on the Socrates and lwmo5 board is connected.
Wolfgang.

Dear Wolfgang Grandegger,
In message 4ADC56E4.40907@grandegger.com you wrote:
In 16 bpp mode, the new IPEK01 board only requires swapping of D16 words for D32 accesses due to the diffferent connecting to the GDC bus. This patch introduces the configuration option VIDEO_FB_16BPP_WORD_SWAP, which should be set for all board using the mb862xx in 16 bpp mode. For the IPEK01, VIDEO_FB_16BPP_PIXEL_SWAP should not be set.
I don't see any functional change in this patch - all you do is renaming VIDEO_FB_16BPP_PIXEL_SWAP into VIDEO_FB_16BPP_WORD_SWAP.
This makes no sense to me.
Please have a look to the patched file. VIDEO_FB_16BPP_PIXEL_SWAP is used in other locations as well. This type of swapping is related to the way the GDC on the Socrates and lwmo5 board is connected.
I see.
But please add a description of VIDEO_FB_16BPP_PIXEL_SWAP and VIDEO_FB_16BPP_WORD_SWAP to the README.
Best regards,
Wolfgang Denk

This patch adds support for the board IPEK01 based on the MPC5200. The Futjitsu Lime graphics controller is configured in 16 bpp mode.
Signed-off-by: Wolfgang Grandegger wg@grandegger.com --- Makefile | 3 board/ipek01/Makefile | 50 ++++ board/ipek01/config.mk | 30 ++ board/ipek01/ipek01.c | 374 ++++++++++++++++++++++++++++++++++++ board/ipek01/mt46v16m16-75.h | 37 +++ board/ipek01/mt48lc16m16a2-75.h | 43 ++++ board/ipek01/u-boot.lds | 125 ++++++++++++ include/configs/ipek01.h | 411 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 1073 insertions(+) create mode 100644 board/ipek01/Makefile create mode 100644 board/ipek01/config.mk create mode 100644 board/ipek01/ipek01.c create mode 100644 board/ipek01/mt46v16m16-75.h create mode 100644 board/ipek01/mt48lc16m16a2-75.h create mode 100644 board/ipek01/u-boot.lds create mode 100644 include/configs/ipek01.h
Index: u-boot-mainline/Makefile =================================================================== --- u-boot-mainline.orig/Makefile 2009-10-19 13:17:12.185302922 +0200 +++ u-boot-mainline/Makefile 2009-10-19 13:17:17.519552635 +0200 @@ -725,6 +725,9 @@ } @$(MKCONFIG) -a PM520 ppc mpc5xxx pm520
+ipek01_config: unconfig + @$(MKCONFIG) -a ipek01 ppc mpc5xxx ipek01 + smmaco4_config: unconfig @$(MKCONFIG) -a smmaco4 ppc mpc5xxx tqm5200 tqc
Index: u-boot-mainline/board/ipek01/Makefile =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/Makefile 2009-10-19 13:17:17.521552642 +0200 @@ -0,0 +1,50 @@ +# +# (C) Copyright 2003-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 + +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) +SOBJS := $(addprefix $(obj),$(SOBJS)) + +$(LIB): $(obj).depend $(OBJS) + $(AR) $(ARFLAGS) $@ $(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 + +######################################################################### Index: u-boot-mainline/board/ipek01/config.mk =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/config.mk 2009-10-19 13:17:17.523553767 +0200 @@ -0,0 +1,30 @@ +# +# (C) Copyright 2003-2004 +# 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 +# + +# +# IPEK01 board +# + +TEXT_BASE = 0xfc000000 + +PLATFORM_CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE) -I$(TOPDIR)/board Index: u-boot-mainline/board/ipek01/ipek01.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/ipek01.c 2009-10-19 13:17:17.527552105 +0200 @@ -0,0 +1,374 @@ +/* + * (C) Copyright 2003-2004 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * (C) Copyright 2004 + * Mark Jonas, Freescale Semiconductor, mark.jonas@motorola.com. + * + * (C) Copyright 2006 + * MicroSys GmbH + * + * (C) Copyright 2009 + * Wolfgang Grandegger, DENX Software Engineering, wg@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 <mpc5xxx.h> +#include <pci.h> +#include <netdev.h> +#include <miiphy.h> +#include <libfdt.h> +#include <mb862xx.h> +#include <video_fb.h> +#include <asm/processor.h> +#include <asm/io.h> + +#ifdef CONFIG_OF_LIBFDT +#include <fdt_support.h> +#endif /* CONFIG_OF_LIBFDT */ + +#if defined(CONFIG_MPC5200_DDR) +#include "mt46v16m16-75.h" +#else +#include "mt48lc16m16a2-75.h" +#endif + +DECLARE_GLOBAL_DATA_PTR; + +#ifndef CONFIG_SYS_RAMBOOT +static void sdram_start (int hi_addr) +{ + long hi_addr_bit = hi_addr ? 0x01000000 : 0; + + /* unlock mode register */ + *(vu_long *) MPC5XXX_SDRAM_CTRL = + SDRAM_CONTROL | 0x80000000 | hi_addr_bit; + __asm__ volatile ("sync"); + + /* precharge all banks */ + *(vu_long *) MPC5XXX_SDRAM_CTRL = + SDRAM_CONTROL | 0x80000002 | hi_addr_bit; + __asm__ volatile ("sync"); + +#if SDRAM_DDR + /* set mode register: extended mode */ + *(vu_long *) MPC5XXX_SDRAM_MODE = SDRAM_EMODE; + __asm__ volatile ("sync"); + + /* set mode register: reset DLL */ + *(vu_long *) MPC5XXX_SDRAM_MODE = SDRAM_MODE | 0x04000000; + __asm__ volatile ("sync"); +#endif + + /* precharge all banks */ + *(vu_long *) MPC5XXX_SDRAM_CTRL = + SDRAM_CONTROL | 0x80000002 | hi_addr_bit; + __asm__ volatile ("sync"); + + /* auto refresh */ + *(vu_long *) MPC5XXX_SDRAM_CTRL = + SDRAM_CONTROL | 0x80000004 | hi_addr_bit; + __asm__ volatile ("sync"); + + /* set mode register */ + *(vu_long *) MPC5XXX_SDRAM_MODE = SDRAM_MODE; + __asm__ volatile ("sync"); + + /* normal operation */ + *(vu_long *) MPC5XXX_SDRAM_CTRL = SDRAM_CONTROL | hi_addr_bit; + __asm__ volatile ("sync"); +} +#endif + +/* + * ATTENTION: Although partially referenced initdram does NOT make real + * use of CONFIG_SYS_SDRAM_BASE. The code does not work if + * CONFIG_SYS_SDRAM_BASE is something else than 0x00000000. + */ + +phys_size_t initdram (int board_type) +{ + ulong dramsize = 0; + ulong dramsize2 = 0; + uint svr, pvr; +#ifndef CONFIG_SYS_RAMBOOT + ulong test1, test2; + + /* setup SDRAM chip selects */ + *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0x0000001e; /* 2G at 0x0 */ + *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x00000000; /* disabled */ + __asm__ volatile ("sync"); + + /* setup config registers */ + *(vu_long *) MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1; + *(vu_long *) MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2; + __asm__ volatile ("sync"); + +#if SDRAM_DDR + /* set tap delay */ + *(vu_long *) MPC5XXX_CDM_PORCFG = SDRAM_TAPDELAY; + __asm__ volatile ("sync"); +#endif + + /* find RAM size using SDRAM CS0 only */ + sdram_start (0); + test1 = get_ram_size ((long *)CONFIG_SYS_SDRAM_BASE, 0x80000000); + sdram_start (1); + test2 = get_ram_size ((long *)CONFIG_SYS_SDRAM_BASE, 0x80000000); + if (test1 > test2) { + sdram_start (0); + dramsize = test1; + } else { + dramsize = test2; + } + + /* memory smaller than 1MB is impossible */ + if (dramsize < (1 << 20)) { + dramsize = 0; + } + + /* set SDRAM CS0 size according to the amount of RAM found */ + if (dramsize > 0) { + *(vu_long *) MPC5XXX_SDRAM_CS0CFG = + 0x13 + __builtin_ffs (dramsize >> 20) - 1; + } else { + *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0; /* disabled */ + } +#else /* CONFIG_SYS_RAMBOOT */ + + /* retrieve size of memory connected to SDRAM CS0 */ + dramsize = *(vu_long *) MPC5XXX_SDRAM_CS0CFG & 0xFF; + if (dramsize >= 0x13) { + dramsize = (1 << (dramsize - 0x13)) << 20; + } else { + dramsize = 0; + } + + /* retrieve size of memory connected to SDRAM CS1 */ + dramsize2 = *(vu_long *) MPC5XXX_SDRAM_CS1CFG & 0xFF; + if (dramsize2 >= 0x13) { + dramsize2 = (1 << (dramsize2 - 0x13)) << 20; + } else { + dramsize2 = 0; + } + +#endif /* CONFIG_SYS_RAMBOOT */ + + /* + * On MPC5200B we need to set the special configuration delay in the + * DDR controller. Please refer to Freescale's AN3221 "MPC5200B SDRAM + * Initialization and Configuration", 3.3.1 SDelay--MBAR + 0x0190: + * + * "The SDelay should be written to a value of 0x00000004. It is + * required to account for changes caused by normal wafer processing + * parameters." + */ + svr = get_svr (); + pvr = get_pvr (); + if ((SVR_MJREV (svr) >= 2) && (PVR_MAJ (pvr) == 1) && + (PVR_MIN (pvr) == 4)) { + *(vu_long *) MPC5XXX_SDRAM_SDELAY = 0x04; + __asm__ volatile ("sync"); + } + + return dramsize + dramsize2; +} + +int checkboard (void) +{ + puts ("Board: IPEK01 \n"); + return 0; +} + +void flash_preinit (void) +{ + /* + * Now, when we are in RAM, enable flash write + * access for detection process. + * Note that CS_BOOT cannot be cleared when + * executing in flash. + */ + *(vu_long *) MPC5XXX_BOOTCS_CFG &= ~0x1; /* clear RO */ +} + +void flash_afterinit (ulong start, ulong size) +{ +#if defined(CONFIG_BOOT_ROM) + /* adjust mapping */ + *(vu_long *) MPC5XXX_CS1_START = START_REG (start); + *(vu_long *) MPC5XXX_CS1_STOP = STOP_REG (start, size); +#else + /* adjust mapping */ + *(vu_long *) MPC5XXX_BOOTCS_START = *(vu_long *) MPC5XXX_CS0_START = + START_REG (start); + *(vu_long *) MPC5XXX_BOOTCS_STOP = *(vu_long *) MPC5XXX_CS0_STOP = + STOP_REG (start, size); +#endif +} + +extern flash_info_t flash_info[]; /* info for FLASH chips */ + +int misc_init_r (void) +{ + /* adjust flash start */ + gd->bd->bi_flashstart = flash_info[0].start[0]; + return (0); +} + +#ifdef CONFIG_PCI +static struct pci_controller hose; + +extern void pci_mpc5xxx_init (struct pci_controller *); + +void pci_init_board (void) +{ + pci_mpc5xxx_init (&hose); +} +#endif + +#if defined (CONFIG_CMD_IDE) && defined (CONFIG_IDE_RESET) + +void init_ide_reset (void) +{ + debug ("init_ide_reset\n"); +} + +void ide_set_reset (int idereset) +{ + debug ("ide_reset(%d)\n", idereset); +} +#endif /* defined (CONFIG_SYS_CMD_IDE) && defined (CONFIG_IDE_RESET) */ + +#if defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) +void ft_board_setup (void *blob, bd_t * bd) +{ + ft_cpu_setup (blob, bd); + fdt_fixup_memory (blob, (u64) bd->bi_memstart, (u64) bd->bi_memsize); +} +#endif /* defined(CONFIG_OF_LIBFDT) && defined(CONFIG_OF_BOARD_SETUP) */ + +int board_eth_init(bd_t *bis) +{ + cpu_eth_init(bis); /* Built in FEC comes first */ + return pci_eth_init(bis); +} + +#ifdef CONFIG_VIDEO +#define DISPLAY_WIDTH 800 +#define DISPLAY_HEIGHT 600 + +#define CONFIG_SYS_LIME_SRST (CONFIG_SYS_LIME_BASE + 0x01FC002C) +#define CONFIG_SYS_LIME_CCF (CONFIG_SYS_LIME_BASE + 0x01FC0038) +#define CONFIG_SYS_LIME_MMR (CONFIG_SYS_LIME_BASE + 0x01FCFFFC) +/* Lime clock frequency */ +#define CONFIG_SYS_LIME_CLK 0x90000 /* geo 166MHz other 133MHz */ +/* SDRAM parameter */ +#define CONFIG_SYS_LIME_MMR_VALUE 0x41c767e3 + +extern GraphicDevice mb862xx; + +static const gdc_regs init_regs[] = { + {0x0100, 0x00000900}, + {0x0020, 0x80190257}, + {0x0024, 0x00000000}, + {0x0028, 0x00000000}, + {0x002c, 0x00000000}, + {0x0110, 0x00000000}, + {0x0114, 0x00000000}, + {0x0118, 0x02570320}, + {0x0004, 0x041f0000}, + {0x0008, 0x031f031f}, + {0x000c, 0x067f0347}, + {0x0010, 0x02780000}, + {0x0014, 0x0257025c}, + {0x0018, 0x00000000}, + {0x001c, 0x02570320}, + {0x0100, 0x80010900}, + {0x0, 0x0} +}; + +const gdc_regs *board_get_regs (void) +{ + return init_regs; +} + +#define CONFIG_SYS_LIME_CID (CONFIG_SYS_LIME_BASE + 0x01FC00F0) +#define CONFIG_SYS_LIME_REV (CONFIG_SYS_LIME_BASE + 0x01FF8084) + +int lime_probe (void) +{ + uint reg; + + /* Try to access GDC ID/Revision registers */ + reg = in_be32 ((void *)CONFIG_SYS_LIME_CID); + reg = in_be32 ((void *)CONFIG_SYS_LIME_CID); + if (reg == 0x303) { + reg = in_be32 ((void *)CONFIG_SYS_LIME_REV); + reg = in_be32 ((void *)CONFIG_SYS_LIME_REV); + reg = ((reg & ~0xff) == 0x20050100) ? 1 : 0; + } else { + reg = 0; + } + + return reg; +} + +/* Returns Lime base address */ +unsigned int board_video_init (void) +{ + if (!lime_probe ()) + return 0; + + /* + * Reset Lime controller + */ + out_be32 ((void *)CONFIG_SYS_LIME_SRST, 0x1); + udelay (200); + + /* Set Lime clock */ + out_be32 ((void *)CONFIG_SYS_LIME_CCF, CONFIG_SYS_LIME_CLK); + /* Delay required */ + udelay (300); + /* Set memory parameters */ + out_be32 ((void *)CONFIG_SYS_LIME_MMR, CONFIG_SYS_LIME_MMR_VALUE); + + mb862xx.winSizeX = DISPLAY_WIDTH; + mb862xx.winSizeY = DISPLAY_HEIGHT; + mb862xx.gdfIndex = GDF_15BIT_555RGB; + mb862xx.gdfBytesPP = 2; + + return CONFIG_SYS_LIME_BASE; +} + +#if defined(CONFIG_CONSOLE_EXTRA_INFO) +/* + * Return text to be printed besides the logo. + */ +void video_get_info_str (int line_number, char *info) +{ + if (line_number == 1) { + strcpy (info, " Board: IPEK01"); + } else { + info[0] = '\0'; + } +} +#endif +#endif /* CONFIG_VIDEO */ Index: u-boot-mainline/board/ipek01/mt46v16m16-75.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/mt46v16m16-75.h 2009-10-19 13:17:17.529553509 +0200 @@ -0,0 +1,37 @@ +/* + * (C) Copyright 2004 + * Mark Jonas, Freescale Semiconductor, mark.jonas@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 + */ + +#define SDRAM_DDR 1 /* is DDR */ + +#if defined(CONFIG_MPC5200) +/* Settings for XLB = 132 MHz */ +#define SDRAM_MODE 0x018D0000 +#define SDRAM_EMODE 0x40090000 +#define SDRAM_CONTROL 0x714f0f00 +#define SDRAM_CONFIG1 0x73722930 +#define SDRAM_CONFIG2 0x47770000 +#define SDRAM_TAPDELAY 0x10000000 + +#else +#error CONFIG_MPC5200 not defined +#endif Index: u-boot-mainline/board/ipek01/mt48lc16m16a2-75.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/mt48lc16m16a2-75.h 2009-10-19 13:17:17.530552255 +0200 @@ -0,0 +1,43 @@ +/* + * (C) Copyright 2004 + * Mark Jonas, Freescale Semiconductor, mark.jonas@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 + */ + +#define SDRAM_DDR 0 /* is SDR */ + +#if defined(CONFIG_MPC5200) +/* Settings for XLB = 132 MHz */ +#define SDRAM_MODE 0x00CD0000 +#define SDRAM_CONTROL 0x504F0000 +#define SDRAM_CONFIG1 0xD2322800 +#define SDRAM_CONFIG2 0x8AD70000 + +#elif defined(CONFIG_MGT5100) +/* Settings for XLB = 66 MHz */ +#define SDRAM_MODE 0x008D0000 +#define SDRAM_CONTROL 0x504F0000 +#define SDRAM_CONFIG1 0xC2222600 +#define SDRAM_CONFIG2 0x88B70004 +#define SDRAM_ADDRSEL 0x02000000 + +#else +#error Neither CONFIG_MPC5200 or CONFIG_MGT5100 defined +#endif Index: u-boot-mainline/board/ipek01/u-boot.lds =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/u-boot.lds 2009-10-19 13:17:17.540334101 +0200 @@ -0,0 +1,125 @@ +/* + * (C) Copyright 2003-2004 + * 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); +/* Do we need any of these for elf? + __DYNAMIC = 0; */ +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/mpc5xxx/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 = .); +} Index: u-boot-mainline/include/configs/ipek01.h =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/include/configs/ipek01.h 2009-10-19 13:17:17.541552432 +0200 @@ -0,0 +1,411 @@ +/* + * (C) Copyright 2006 + * MicroSys GmbH + * + * (C) Copyright 2009 + * Wolfgang Grandegger, DENX Software Engineering, wg@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 + */ + +#ifndef __CONFIG_H +#define __CONFIG_H + +/* + * High Level Configuration Options + * (easy to change) + */ + +#define CONFIG_MPC5200 +#define CONFIG_MPC5xxx 1 /* This is an MPC5xxx CPU */ +#define CONFIG_MPX5200 1 /* ... on MPX5200 board */ +#define CONFIG_MPC5200_DDR 1 /* ... use DDR RAM */ +#define CONFIG_IPEK01 /* Motherboard is ipek01 */ + +#define CONFIG_SYS_MPC5XXX_CLKIN 33000000 /* ... running at 33MHz */ + +#define CONFIG_MISC_INIT_R + +#define BOOTFLAG_COLD 0x01 /* Normal Power-On: Boot from FLASH */ +#define BOOTFLAG_WARM 0x02 /* Software reboot */ + +#define CONFIG_SYS_CACHELINE_SIZE 32 /* For MPC5xxx CPUs */ +#ifdef CONFIG_CMD_KGDB +#define CONFIG_SYS_CACHELINE_SHIFT 5 /* log base 2 of the above value */ +#endif + +/* + * Serial console configuration + */ +#define CONFIG_PSC_CONSOLE 1 /* console is on PSC1 */ +#define CONFIG_BAUDRATE 115200 /* ... at 9600 bps */ +#define CONFIG_SYS_BAUDRATE_TABLE \ + { 9600, 19200, 38400, 57600, 115200, 230400 } + +#define CONFIG_CMDLINE_EDITING 1 /* add command line history */ + +/* + * Video configuration for LIME GDC + */ +#define CONFIG_VIDEO +#ifdef CONFIG_VIDEO +#define CONFIG_VIDEO_MB862xx +#define CONFIG_VIDEO_MB862xx_ACCEL +#define VIDEO_FB_16BPP_WORD_SWAP +#define CONFIG_CFB_CONSOLE +#define CONFIG_VIDEO_LOGO +#define CONFIG_VIDEO_BMP_LOGO +#define CONFIG_CONSOLE_EXTRA_INFO +#define CONFIG_VGA_AS_SINGLE_DEVICE +#define CONFIG_SYS_CONSOLE_IS_IN_ENV +#define CONFIG_VIDEO_SW_CURSOR +#define CONFIG_SPLASH_SCREEN +#define CONFIG_VIDEO_BMP_GZIP +#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (2 << 20) /* decompressed img */ +#endif + +/* + * PCI Mapping: + * 0x40000000 - 0x4fffffff - PCI Memory + * 0x50000000 - 0x50ffffff - PCI IO Space + */ +#define CONFIG_PCI 1 +#define CONFIG_PCI_PNP 1 +#define CONFIG_PCI_SCAN_SHOW 1 + +#define CONFIG_PCI_MEM_BUS 0x40000000 +#define CONFIG_PCI_MEM_PHYS CONFIG_PCI_MEM_BUS +#define CONFIG_PCI_MEM_SIZE 0x10000000 + +#define CONFIG_PCI_IO_BUS 0x50000000 +#define CONFIG_PCI_IO_PHYS CONFIG_PCI_IO_BUS +#define CONFIG_PCI_IO_SIZE 0x01000000 + +#define CONFIG_NET_MULTI 1 +#define CONFIG_MII 1 +#define CONFIG_EEPRO100 1 +#define CONFIG_SYS_RX_ETH_BUFFER 8 /* use 8 rx buffer on eepro100 */ +#undef CONFIG_NS8382X + +/* Partitions */ +#define CONFIG_DOS_PARTITION + +/* USB */ +#define CONFIG_USB_OHCI_NEW +#define CONFIG_SYS_OHCI_BE_CONTROLLER +#define CONFIG_USB_STORAGE + +#undef CONFIG_SYS_USB_OHCI_BOARD_INIT +#define CONFIG_SYS_USB_OHCI_CPU_INIT +#define CONFIG_SYS_USB_OHCI_REGS_BASE MPC5XXX_USB +#define CONFIG_SYS_USB_OHCI_SLOT_NAME "mpc5200" +#define CONFIG_SYS_USB_OHCI_MAX_ROOT_PORTS 15 + +/* + * Command line configuration. + */ +#include <config_cmd_default.h> + +#ifdef CONFIG_VIDEO +#define CONFIG_CMD_BMP /* BMP support */ +#endif +#define CONFIG_CMD_DATE /* support for RTC, date/time...*/ +#define CONFIG_CMD_DHCP /* DHCP Support */ +#define CONFIG_CMD_FAT /* FAT support */ +#define CONFIG_CMD_I2C /* I2C serial bus support */ +#define CONFIG_CMD_IRQ /* irqinfo */ +#define CONFIG_CMD_IDE /* IDE harddisk support */ +#define CONFIG_CMD_MII /* MII support */ +#define CONFIG_CMD_PCI /* pciinfo */ +#define CONFIG_CMD_USB /* USB Support */ + +#if (TEXT_BASE == 0xFC000000) /* Boot low */ +# define CONFIG_SYS_LOWBOOT 1 +#endif + +/* + * Autobooting + */ +#define CONFIG_BOOTDELAY 5 /* autoboot after 5 seconds */ + +#define CONFIG_PREBOOT "echo;" \ + "echo Type \"run flash_nfs\" to mount root filesystem over NFS;" \ + "echo" + +#undef CONFIG_BOOTARGS + +#define CONFIG_EXTRA_ENV_SETTINGS \ + "netdev=eth0\0" \ + "consoledev=ttyPSC0\0" \ + "hostname=ipek01\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" \ + "addtty=setenv bootargs ${bootargs} " \ + "console=${consoledev},${baudrate}\0" \ + "flash_nfs=run nfsargs addip addtty;" \ + "bootm ${kernel_addr} - ${fdtaddr}\0" \ + "flash_self=run ramargs addip addtty;" \ + "bootm ${kernel_addr} ${ramdisk_addr} ${fdtaddr}\0" \ + "net_nfs=tftp 200000 ${bootfile}; tftp ${fdtaddr} ${fdtfile};" \ + "run nfsargs addip addtty;" \ + "bootm ${loadaddr} - ${fdtaddr}\0" \ + "rootpath=/opt/eldk41/ppc_6xx\0" \ + "bootfile=ipek01/uImage\0" \ + "load=tftp 100000 ipek01/u-boot.bin\0" \ + "update=protect off FC000000 +60000; era FC000000 +60000; " \ + "cp.b 100000 FC000000 ${filesize}\0" \ + "upd=run load;run update\0" \ + "fdtaddr=600000\0" \ + "loadaddr=300000\0" \ + "fdtfile=ipek01/ipek01.dtb\0" \ + "" + +#define CONFIG_BOOTCOMMAND "run flash_self" + +/* + * IPB Bus clocking configuration. + */ +#define CONFIG_SYS_IPBCLK_EQUALS_XLBCLK /* for 133MHz */ +/* PCI clock must be 33, because board will not boot */ +#undef CONFIG_SYS_PCICLK_EQUALS_IPBCLK_DIV2 /* for 66MHz */ + +/* + * Open firmware flat tree support + */ +#define CONFIG_OF_LIBFDT 1 +#define CONFIG_OF_BOARD_SETUP 1 + +#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" + +/* + * I2C configuration + */ +#define CONFIG_HARD_I2C 1 /* I2C with hardware support */ +#define CONFIG_SYS_I2C_MODULE 2 /* Select I2C module #1 or #2 */ + +#define CONFIG_SYS_I2C_SPEED 100000 /* 100 kHz */ +#define CONFIG_SYS_I2C_SLAVE 0x7F + +/* + * EEPROM configuration + */ +#define CONFIG_SYS_I2C_EEPROM_ADDR 0x53 +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2 +#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 6 +#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10 + +/* + * RTC configuration + */ +#define CONFIG_RTC_PCF8563 +#define CONFIG_SYS_I2C_RTC_ADDR 0x51 + +#define CONFIG_SYS_FLASH_BASE 0xFC000000 +#define CONFIG_SYS_FLASH_SIZE 0x01000000 +#define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + \ + CONFIG_SYS_MONITOR_LEN) + +#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max num of memory banks */ +#define CONFIG_SYS_MAX_FLASH_SECT 256 /* max num of sects on one chip */ +#define CONFIG_SYS_FLASH_PROTECTION /* "Real" (hardware) sectors protection */ + +/* use CFI flash driver */ +#define CONFIG_FLASH_CFI_DRIVER +#define CONFIG_SYS_FLASH_CFI +#define CONFIG_SYS_FLASH_EMPTY_INFO +#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE 1 + +/* + * Environment settings + */ +#define CONFIG_ENV_IS_IN_FLASH 1 +#define CONFIG_ENV_SIZE 0x10000 +#define CONFIG_ENV_SECT_SIZE 0x20000 +#define CONFIG_ENV_OVERWRITE 1 +#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR + CONFIG_ENV_SECT_SIZE) +#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE + +/* + * Memory map + */ +#define CONFIG_SYS_MBAR 0xf0000000 +#define CONFIG_SYS_SDRAM_BASE 0x00000000 +#define CONFIG_SYS_DEFAULT_MBAR 0x80000000 +/* Disk-On-Chip currently not supported by U-Boot */ +#define CONFIG_SYS_DOC_BASE 0xE0000000 +#define CONFIG_SYS_DOC_SIZE 0x00100000 +#define CONFIG_SYS_SRAM_BASE 0xF1000000 +#define CONFIG_SYS_SRAM_SIZE 0x00200000 +#define CONFIG_SYS_LIME_BASE 0xE4000000 +#define CONFIG_SYS_LIME_SIZE 0x04000000 +#define CONFIG_SYS_FPGA_BASE 0xC0000000 +#define CONFIG_SYS_FPGA_SIZE 0x10000000 +#define CONFIG_SYS_MPEG_BASE 0xe2000000 +#define CONFIG_SYS_MPEG_SIZE 0x01000000 +#define CONFIG_SYS_CF_BASE 0xe1000000 +#define CONFIG_SYS_CF_SIZE 0x01000000 + +/* Use SRAM until RAM will be available */ +#define CONFIG_SYS_INIT_RAM_ADDR MPC5XXX_SRAM +#define CONFIG_SYS_INIT_RAM_END MPC5XXX_SRAM_SIZE /* End of used area in DPRAM */ + + +#define CONFIG_SYS_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */ +#define CONFIG_SYS_GBL_DATA_OFFSET (CONFIG_SYS_INIT_RAM_END - CONFIG_SYS_GBL_DATA_SIZE) +#define CONFIG_SYS_INIT_SP_OFFSET CONFIG_SYS_GBL_DATA_OFFSET + +#define CONFIG_SYS_MONITOR_BASE TEXT_BASE +#if (CONFIG_SYS_MONITOR_BASE < CONFIG_SYS_FLASH_BASE) +# define CONFIG_SYS_RAMBOOT 1 +#endif + +#define CONFIG_SYS_MONITOR_LEN (384 << 10) /* Reserve 384 kB for Monitor */ +#define CONFIG_SYS_MALLOC_LEN (4 << 20) /* Reserve 128 kB for malloc() */ +#define CONFIG_SYS_BOOTMAPSZ (8 << 20) /* Initial Memory map for Linux */ + +/* + * Ethernet configuration + */ +#define CONFIG_MPC5xxx_FEC 1 +#define CONFIG_MPC5xxx_FEC_MII100 +#define CONFIG_PHY_ADDR 0x00 + +/* + * GPIO configuration + */ +#define CONFIG_SYS_GPS_PORT_CONFIG 0x1d556624 + +/* + * Miscellaneous configurable options + */ +#define CONFIG_SYS_LONGHELP /* undef to save memory */ +#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */ +#ifdef CONFIG_CMD_KGDB +#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */ +#else +#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */ +#endif +#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16) /* Print Buffer Size */ +#define CONFIG_SYS_MAXARGS 16 /* max number of command args */ +#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */ + +#define CONFIG_SYS_MEMTEST_START 0x00100000 /* memtest works on */ +#define CONFIG_SYS_MEMTEST_END 0x00f00000 /* 1 ... 15 MB in DRAM */ + +#define CONFIG_SYS_LOAD_ADDR 0x100000 /* default load address */ + +#define CONFIG_SYS_HZ 1000 /* decrementer freq: 1 ms ticks */ +#define CONFIG_LOOPW + +/* + * Various low-level settings + */ +#if defined(CONFIG_MPC5200) +#define CONFIG_SYS_HID0_INIT HID0_ICE | HID0_ICFI +#define CONFIG_SYS_HID0_FINAL HID0_ICE +#else +#define CONFIG_SYS_HID0_INIT 0 +#define CONFIG_SYS_HID0_FINAL 0 +#endif + +#define CONFIG_SYS_BOOTCS_START CONFIG_SYS_FLASH_BASE +#define CONFIG_SYS_BOOTCS_SIZE CONFIG_SYS_FLASH_SIZE +#define CONFIG_SYS_CS0_START CONFIG_SYS_FLASH_BASE +#define CONFIG_SYS_CS0_SIZE CONFIG_SYS_FLASH_SIZE +#define CONFIG_SYS_CS1_START CONFIG_SYS_SRAM_BASE +#define CONFIG_SYS_CS1_SIZE CONFIG_SYS_SRAM_SIZE +#define CONFIG_SYS_CS2_START CONFIG_SYS_DOC_BASE +#define CONFIG_SYS_CS2_SIZE CONFIG_SYS_DOC_SIZE +#define CONFIG_SYS_CS3_START CONFIG_SYS_LIME_BASE +#define CONFIG_SYS_CS3_SIZE CONFIG_SYS_LIME_SIZE +#define CONFIG_SYS_CS6_START CONFIG_SYS_FPGA_BASE +#define CONFIG_SYS_CS6_SIZE CONFIG_SYS_FPGA_SIZE +#define CONFIG_SYS_CS5_START CONFIG_SYS_CF_BASE +#define CONFIG_SYS_CS5_SIZE CONFIG_SYS_CF_SIZE +#define CONFIG_SYS_CS7_START CONFIG_SYS_MPEG_BASE +#define CONFIG_SYS_CS7_SIZE CONFIG_SYS_MPEG_SIZE + +#ifdef CONFIG_SYS_PCISPEED_66 +#define CONFIG_SYS_BOOTCS_CFG 0x0006F900 +#define CONFIG_SYS_CS1_CFG 0x0004FB00 +#define CONFIG_SYS_CS2_CFG 0x0006F900 +#else +#define CONFIG_SYS_BOOTCS_CFG 0x0002F900 +#define CONFIG_SYS_CS1_CFG 0x0001FB00 +#define CONFIG_SYS_CS2_CFG 0x0002F90C +#endif + +/* Ack active, Muxed mode, AS=24 bit address, DS=32 bit data, 0 + * waitstates, writeswap and readswap enabled + */ +#define CONFIG_SYS_CS3_CFG 0x00FFFB0C +#define CONFIG_SYS_CS6_CFG 0x00FFFB0C +#define CONFIG_SYS_CS7_CFG 0x4040751C + +#define CONFIG_SYS_CS_BURST 0x00000000 +#define CONFIG_SYS_CS_DEADCYCLE 0x33330000 + +#define CONFIG_SYS_RESET_ADDRESS 0xff000000 + +/*----------------------------------------------------------------------- + * USB stuff + *----------------------------------------------------------------------- + */ +#define CONFIG_USB_CLOCK 0x0001BBBB +#define CONFIG_USB_CONFIG 0x00005000 + +/*----------------------------------------------------------------------- + * IDE/ATA stuff Supports IDE harddisk + *----------------------------------------------------------------------- + */ +#undef CONFIG_IDE_8xx_PCCARD /* Use IDE with PC Card Adapter */ + +#undef CONFIG_IDE_8xx_DIRECT /* Direct IDE not supported */ +#undef CONFIG_IDE_LED /* LED for ide not supported */ + +#define CONFIG_IDE_RESET /* reset for ide supported */ +#define CONFIG_IDE_PREINIT + +#define CONFIG_SYS_IDE_MAXBUS 1 /* max. 1 IDE bus */ +#define CONFIG_SYS_IDE_MAXDEVICE 2 /* max. 2 drives per IDE bus */ + +#define CONFIG_SYS_ATA_IDE0_OFFSET 0x0000 + +#define CONFIG_SYS_ATA_BASE_ADDR MPC5XXX_ATA + +/* Offset for data I/O */ +#define CONFIG_SYS_ATA_DATA_OFFSET (0x0060) + +/* Offset for normal register accesses */ +#define CONFIG_SYS_ATA_REG_OFFSET (CONFIG_SYS_ATA_DATA_OFFSET) + +/* Offset for alternate registers */ +#define CONFIG_SYS_ATA_ALT_OFFSET (0x005C) + +/* Interval between registers */ +#define CONFIG_SYS_ATA_STRIDE 4 + +#endif /* __CONFIG_H */

Dear Wolfgang Grandegger,
In message 20091019111913.802418590@denx.de you wrote:
This patch adds support for the board IPEK01 based on the MPC5200. The Futjitsu Lime graphics controller is configured in 16 bpp mode.
Signed-off-by: Wolfgang Grandegger wg@grandegger.com
Makefile | 3 board/ipek01/Makefile | 50 ++++ board/ipek01/config.mk | 30 ++ board/ipek01/ipek01.c | 374 ++++++++++++++++++++++++++++++++++++ board/ipek01/mt46v16m16-75.h | 37 +++ board/ipek01/mt48lc16m16a2-75.h | 43 ++++ board/ipek01/u-boot.lds | 125 ++++++++++++ include/configs/ipek01.h | 411 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 1073 insertions(+) create mode 100644 board/ipek01/Makefile create mode 100644 board/ipek01/config.mk create mode 100644 board/ipek01/ipek01.c create mode 100644 board/ipek01/mt46v16m16-75.h create mode 100644 board/ipek01/mt48lc16m16a2-75.h create mode 100644 board/ipek01/u-boot.lds create mode 100644 include/configs/ipek01.h
Entries to MAKEALL and MAINTAINERS are missing.
Index: u-boot-mainline/Makefile
--- u-boot-mainline.orig/Makefile 2009-10-19 13:17:12.185302922 +0200 +++ u-boot-mainline/Makefile 2009-10-19 13:17:17.519552635 +0200 @@ -725,6 +725,9 @@ } @$(MKCONFIG) -a PM520 ppc mpc5xxx pm520
+ipek01_config: unconfig
- @$(MKCONFIG) -a ipek01 ppc mpc5xxx ipek01
Please keep list ssorted.
Index: u-boot-mainline/board/ipek01/ipek01.c
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/ipek01.c 2009-10-19 13:17:17.527552105 +0200
...
+#ifndef CONFIG_SYS_RAMBOOT
Is RAM-Boot actually a asupported mode of operation on this board, or are you just copuy & pasting dead code here?
+static void sdram_start (int hi_addr) +{
- long hi_addr_bit = hi_addr ? 0x01000000 : 0;
- /* unlock mode register */
- *(vu_long *) MPC5XXX_SDRAM_CTRL =
SDRAM_CONTROL | 0x80000000 | hi_addr_bit;
- __asm__ volatile ("sync");
Please use I/O accessors to write device registers (please fix globally).
...
+phys_size_t initdram (int board_type) +{
- ulong dramsize = 0;
- ulong dramsize2 = 0;
- uint svr, pvr;
+#ifndef CONFIG_SYS_RAMBOOT
- ulong test1, test2;
- /* setup SDRAM chip selects */
- *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0x0000001e; /* 2G at 0x0 */
- *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x00000000; /* disabled */
It might make sense to #define some constants in the board config file.
- /* setup config registers */
- *(vu_long *) MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1;
- *(vu_long *) MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2;
- __asm__ volatile ("sync");
+#if SDRAM_DDR
I consider this bad style. In U-Boot, we usually use #ifdef, but this collides with your #define SDRAM_DDR 0 versus 1 below. I recommend to clean this up.
- /*
* On MPC5200B we need to set the special configuration delay in the
* DDR controller. Please refer to Freescale's AN3221 "MPC5200B SDRAM
* Initialization and Configuration", 3.3.1 SDelay--MBAR + 0x0190:
*
* "The SDelay should be written to a value of 0x00000004. It is
* required to account for changes caused by normal wafer processing
* parameters."
*/
- svr = get_svr ();
- pvr = get_pvr ();
- if ((SVR_MJREV (svr) >= 2) && (PVR_MAJ (pvr) == 1) &&
(PVR_MIN (pvr) == 4)) {
*(vu_long *) MPC5XXX_SDRAM_SDELAY = 0x04;
__asm__ volatile ("sync");
- }
Is this test really needed? Are there versions of this board with pre-Rev. B silicon?
+#if defined (CONFIG_CMD_IDE) && defined (CONFIG_IDE_RESET)
+void init_ide_reset (void) +{
- debug ("init_ide_reset\n");
+}
+void ide_set_reset (int idereset) +{
- debug ("ide_reset(%d)\n", idereset);
+} +#endif /* defined (CONFIG_SYS_CMD_IDE) && defined (CONFIG_IDE_RESET) */
This is just dead code. Please get rid of it.
+#ifdef CONFIG_VIDEO +#define DISPLAY_WIDTH 800 +#define DISPLAY_HEIGHT 600
This should go to the board config file.
+#define CONFIG_SYS_LIME_SRST (CONFIG_SYS_LIME_BASE + 0x01FC002C) +#define CONFIG_SYS_LIME_CCF (CONFIG_SYS_LIME_BASE + 0x01FC0038) +#define CONFIG_SYS_LIME_MMR (CONFIG_SYS_LIME_BASE + 0x01FCFFFC) +/* Lime clock frequency */ +#define CONFIG_SYS_LIME_CLK 0x90000 /* geo 166MHz other 133MHz */ +/* SDRAM parameter */ +#define CONFIG_SYS_LIME_MMR_VALUE 0x41c767e3
Please do not use base register plus offset. Use a proper C struct to describe the device registers.
+#define CONFIG_SYS_LIME_CID (CONFIG_SYS_LIME_BASE + 0x01FC00F0) +#define CONFIG_SYS_LIME_REV (CONFIG_SYS_LIME_BASE + 0x01FF8084)
Ditto.
+int lime_probe (void) +{
- uint reg;
- /* Try to access GDC ID/Revision registers */
- reg = in_be32 ((void *)CONFIG_SYS_LIME_CID);
- reg = in_be32 ((void *)CONFIG_SYS_LIME_CID);
- if (reg == 0x303) {
reg = in_be32 ((void *)CONFIG_SYS_LIME_REV);
reg = in_be32 ((void *)CONFIG_SYS_LIME_REV);
reg = ((reg & ~0xff) == 0x20050100) ? 1 : 0;
Please see above - using a proper C struct we can get rid of these casts.
+#if defined(CONFIG_CONSOLE_EXTRA_INFO) +/*
- Return text to be printed besides the logo.
- */
+void video_get_info_str (int line_number, char *info) +{
- if (line_number == 1) {
strcpy (info, " Board: IPEK01");
- } else {
info[0] = '\0';
- }
Please use TABs for indentation. And no braces are needed here.
Index: u-boot-mainline/board/ipek01/mt46v16m16-75.h
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/mt46v16m16-75.h 2009-10-19 13:17:17.529553509 +0200
Seems we are adding the 8th copy of this file?
Can you please move this to a common place? Thanks.
+#define SDRAM_DDR 1 /* is DDR */
Dangerous. See somment above.
Index: u-boot-mainline/board/ipek01/mt48lc16m16a2-75.h
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/mt48lc16m16a2-75.h 2009-10-19 13:17:17.530552255 +0200
Seems we are adding the 9th copy of this file?
Can you please move this to a common place? Thanks.
+#define SDRAM_DDR 0 /* is SDR */
Very dangerous. See somment above.
Index: u-boot-mainline/board/ipek01/u-boot.lds
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/u-boot.lds 2009-10-19 13:17:17.540334101 +0200
Does this board really need a private linker script? I don't think so.
Index: u-boot-mainline/include/configs/ipek01.h
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/include/configs/ipek01.h 2009-10-19 13:17:17.541552432 +0200
...
+#define CONFIG_MPC5200_DDR 1 /* ... use DDR RAM */
Seems to be redundant with the SDRAM_DDR above. Please decide for one solution.
+#define CONFIG_CMD_DATE /* support for RTC, date/time...*/ +#define CONFIG_CMD_DHCP /* DHCP Support */ +#define CONFIG_CMD_FAT /* FAT support */ +#define CONFIG_CMD_I2C /* I2C serial bus support */ +#define CONFIG_CMD_IRQ /* irqinfo */ +#define CONFIG_CMD_IDE /* IDE harddisk support */ +#define CONFIG_CMD_MII /* MII support */ +#define CONFIG_CMD_PCI /* pciinfo */ +#define CONFIG_CMD_USB /* USB Support */
Maybe you could sort this list? Thanks.
+#if (TEXT_BASE == 0xFC000000) /* Boot low */ +# define CONFIG_SYS_LOWBOOT 1 +#endif
Needed or dead code?
- "rootpath=/opt/eldk41/ppc_6xx\0" \
Is this intentional? Or did you just forget to s/41// ?
- "loadaddr=300000\0" \
This is pretty low; be careful when your kernel grows a bit...
+#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"
Is all this really needed?
+/* Disk-On-Chip currently not supported by U-Boot */ +#define CONFIG_SYS_DOC_BASE 0xE0000000 +#define CONFIG_SYS_DOC_SIZE 0x00100000
Dead code? Please remove.
+#define CONFIG_SYS_INIT_RAM_END MPC5XXX_SRAM_SIZE /* End of used area in DPRAM */
Line too long. There are more too long lines in this patch. Please check globally.
+#undef CONFIG_IDE_8xx_PCCARD /* Use IDE with PC Card Adapter */
+#undef CONFIG_IDE_8xx_DIRECT /* Direct IDE not supported */ +#undef CONFIG_IDE_LED /* LED for ide not supported */
No need to #undef what is not defined anyway.
Please clean up and resubmit. Thanks.
Best regards,
Wolfgang Denk

Wolfgang Denk wrote:
Dear Wolfgang Grandegger,
In message 20091019111913.802418590@denx.de you wrote:
This patch adds support for the board IPEK01 based on the MPC5200. The Futjitsu Lime graphics controller is configured in 16 bpp mode.
Signed-off-by: Wolfgang Grandegger wg@grandegger.com
[...]
Index: u-boot-mainline/board/ipek01/ipek01.c
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/ipek01.c 2009-10-19 13:17:17.527552105 +0200
...
+#ifndef CONFIG_SYS_RAMBOOT
Is RAM-Boot actually a asupported mode of operation on this board, or are you just copuy & pasting dead code here?
If it's really dead code I'm going to prepare and send a patch removing it for all boards. Would that be fine?
+static void sdram_start (int hi_addr) +{
- long hi_addr_bit = hi_addr ? 0x01000000 : 0;
- /* unlock mode register */
- *(vu_long *) MPC5XXX_SDRAM_CTRL =
SDRAM_CONTROL | 0x80000000 | hi_addr_bit;
- __asm__ volatile ("sync");
Please use I/O accessors to write device registers (please fix globally).
Well, I borrowed known to work code from other boards. Unfortunately there are no better examples (yet). Will fix, of course.
...
+phys_size_t initdram (int board_type) +{
- ulong dramsize = 0;
- ulong dramsize2 = 0;
- uint svr, pvr;
+#ifndef CONFIG_SYS_RAMBOOT
- ulong test1, test2;
- /* setup SDRAM chip selects */
- *(vu_long *) MPC5XXX_SDRAM_CS0CFG = 0x0000001e; /* 2G at 0x0 */
- *(vu_long *) MPC5XXX_SDRAM_CS1CFG = 0x00000000; /* disabled */
It might make sense to #define some constants in the board config file.
- /* setup config registers */
- *(vu_long *) MPC5XXX_SDRAM_CONFIG1 = SDRAM_CONFIG1;
- *(vu_long *) MPC5XXX_SDRAM_CONFIG2 = SDRAM_CONFIG2;
- __asm__ volatile ("sync");
+#if SDRAM_DDR
I consider this bad style. In U-Boot, we usually use #ifdef, but this collides with your #define SDRAM_DDR 0 versus 1 below. I recommend to clean this up.
OK.
- /*
* On MPC5200B we need to set the special configuration delay in the
* DDR controller. Please refer to Freescale's AN3221 "MPC5200B SDRAM
* Initialization and Configuration", 3.3.1 SDelay--MBAR + 0x0190:
*
* "The SDelay should be written to a value of 0x00000004. It is
* required to account for changes caused by normal wafer processing
* parameters."
*/
- svr = get_svr ();
- pvr = get_pvr ();
- if ((SVR_MJREV (svr) >= 2) && (PVR_MAJ (pvr) == 1) &&
(PVR_MIN (pvr) == 4)) {
*(vu_long *) MPC5XXX_SDRAM_SDELAY = 0x04;
__asm__ volatile ("sync");
- }
Is this test really needed? Are there versions of this board with pre-Rev. B silicon?
I would guess no. I have to check with the board provider.
+#if defined (CONFIG_CMD_IDE) && defined (CONFIG_IDE_RESET)
+void init_ide_reset (void) +{
- debug ("init_ide_reset\n");
+}
+void ide_set_reset (int idereset) +{
- debug ("ide_reset(%d)\n", idereset);
+} +#endif /* defined (CONFIG_SYS_CMD_IDE) && defined (CONFIG_IDE_RESET) */
This is just dead code. Please get rid of it.
+#ifdef CONFIG_VIDEO +#define DISPLAY_WIDTH 800 +#define DISPLAY_HEIGHT 600
This should go to the board config file.
OK.
+#define CONFIG_SYS_LIME_SRST (CONFIG_SYS_LIME_BASE + 0x01FC002C) +#define CONFIG_SYS_LIME_CCF (CONFIG_SYS_LIME_BASE + 0x01FC0038) +#define CONFIG_SYS_LIME_MMR (CONFIG_SYS_LIME_BASE + 0x01FCFFFC) +/* Lime clock frequency */ +#define CONFIG_SYS_LIME_CLK 0x90000 /* geo 166MHz other 133MHz */ +/* SDRAM parameter */ +#define CONFIG_SYS_LIME_MMR_VALUE 0x41c767e3
Please do not use base register plus offset. Use a proper C struct to describe the device registers.
I think this should be done for the mb862xx video driver first, which does still use base register plus offset. But it would be nice if the mb862xx video driver would make the register access functions public, which could then be used here.
+#define CONFIG_SYS_LIME_CID (CONFIG_SYS_LIME_BASE + 0x01FC00F0) +#define CONFIG_SYS_LIME_REV (CONFIG_SYS_LIME_BASE + 0x01FF8084)
Ditto.
+int lime_probe (void) +{
- uint reg;
- /* Try to access GDC ID/Revision registers */
- reg = in_be32 ((void *)CONFIG_SYS_LIME_CID);
- reg = in_be32 ((void *)CONFIG_SYS_LIME_CID);
- if (reg == 0x303) {
reg = in_be32 ((void *)CONFIG_SYS_LIME_REV);
reg = in_be32 ((void *)CONFIG_SYS_LIME_REV);
reg = ((reg & ~0xff) == 0x20050100) ? 1 : 0;
Please see above - using a proper C struct we can get rid of these casts.
+#if defined(CONFIG_CONSOLE_EXTRA_INFO) +/*
- Return text to be printed besides the logo.
- */
+void video_get_info_str (int line_number, char *info) +{
- if (line_number == 1) {
strcpy (info, " Board: IPEK01");
- } else {
info[0] = '\0';
- }
Please use TABs for indentation. And no braces are needed here.
Oops.
Index: u-boot-mainline/board/ipek01/mt46v16m16-75.h
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/mt46v16m16-75.h 2009-10-19 13:17:17.529553509 +0200
Seems we are adding the 8th copy of this file?
Can you please move this to a common place? Thanks.
+#define SDRAM_DDR 1 /* is DDR */
Dangerous. See somment above.
Index: u-boot-mainline/board/ipek01/mt48lc16m16a2-75.h
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/mt48lc16m16a2-75.h 2009-10-19 13:17:17.530552255 +0200
Seems we are adding the 9th copy of this file?
Can you please move this to a common place? Thanks.
+#define SDRAM_DDR 0 /* is SDR */
Very dangerous. See somment above.
I think only DDR-RAM is used. I will cleanup.
Index: u-boot-mainline/board/ipek01/u-boot.lds
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/board/ipek01/u-boot.lds 2009-10-19 13:17:17.540334101 +0200
Does this board really need a private linker script? I don't think so.
Index: u-boot-mainline/include/configs/ipek01.h
--- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ u-boot-mainline/include/configs/ipek01.h 2009-10-19 13:17:17.541552432 +0200
...
+#define CONFIG_MPC5200_DDR 1 /* ... use DDR RAM */
Seems to be redundant with the SDRAM_DDR above. Please decide for one solution.
+#define CONFIG_CMD_DATE /* support for RTC, date/time...*/ +#define CONFIG_CMD_DHCP /* DHCP Support */ +#define CONFIG_CMD_FAT /* FAT support */ +#define CONFIG_CMD_I2C /* I2C serial bus support */ +#define CONFIG_CMD_IRQ /* irqinfo */ +#define CONFIG_CMD_IDE /* IDE harddisk support */ +#define CONFIG_CMD_MII /* MII support */ +#define CONFIG_CMD_PCI /* pciinfo */ +#define CONFIG_CMD_USB /* USB Support */
Maybe you could sort this list? Thanks.
+#if (TEXT_BASE == 0xFC000000) /* Boot low */ +# define CONFIG_SYS_LOWBOOT 1 +#endif
Needed or dead code?
I have to check.
- "rootpath=/opt/eldk41/ppc_6xx\0" \
Is this intentional? Or did you just forget to s/41// ?
My mistake!
- "loadaddr=300000\0" \
This is pretty low; be careful when your kernel grows a bit...
+#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"
Is all this really needed?
Have to check.
+/* Disk-On-Chip currently not supported by U-Boot */ +#define CONFIG_SYS_DOC_BASE 0xE0000000 +#define CONFIG_SYS_DOC_SIZE 0x00100000
Dead code? Please remove.
Linux may want to use Disk-On-Chip. But I have to check if it's present on the board.
I will fix the other issues as well.
Wolfgang.

Dear Wolfgang Grandegger,
In message 4ADC6CC3.6040607@grandegger.com you wrote:
+#ifndef CONFIG_SYS_RAMBOOT
Is RAM-Boot actually a asupported mode of operation on this board, or are you just copuy & pasting dead code here?
If it's really dead code I'm going to prepare and send a patch removing it for all boards. Would that be fine?
I don't think it's dead code on all boards; there are RAMBOOT targts in the Makefile for some bords (for example digsy_mtc). I just didn't notice that your board is using this anywhere.
Best regards,
Wolfgang Denk
participants (2)
-
Wolfgang Denk
-
Wolfgang Grandegger