Memory size fix for Phy3250 board, network fixes for EA and FDI boards.
authorSrinivas Bakki <srinivas.bakki@nxp.com>
Tue, 13 Mar 2012 11:48:07 +0000 (11:48 +0000)
committerSrinivas Bakki <srinivas.bakki@nxp.com>
Tue, 13 Mar 2012 11:48:07 +0000 (11:48 +0000)
14 files changed:
arch/arm/cpu/arm926ejs/lpc3250/serial.c
board/nxp/ea3250/config.mk
board/nxp/ea3250/ea3250.c
board/nxp/ea3250/net.c
board/nxp/fdi3250/config.mk
board/nxp/fdi3250/fdi3250.c
board/nxp/fdi3250/net.c
board/nxp/phy3250/#Makefile# [deleted file]
board/nxp/phy3250/#config.mk# [deleted file]
board/nxp/phy3250/config.mk
board/nxp/phy3250/phy3250.c
include/configs/ea3250.h
include/configs/fdi3250.h
include/configs/phy3250.h

index 02765c2..642ea5c 100644 (file)
@@ -76,30 +76,36 @@ void serial_getdiv(u32 baudrate,
 void hsuart_getdiv(u32 baudrate,\r
                        unsigned int *xdiv)\r
 {\r
-  unsigned int clkrate, savedclkrate, diff, basepclk;\r
-  int idiv;\r
-  unsigned int divider;\r
-\r
-  /* Get the clock rate for the UART block */\r
-  basepclk = sys_get_rate(CLKPWR_PERIPH_CLK);\r
-\r
-  /* Find the best divider */\r
-  divider = 0;\r
-  savedclkrate = 0;\r
-  diff = 0xFFFFFFFF;\r
-  for (idiv = 0; idiv < 0x100; idiv++)\r
-  {\r
-    clkrate = basepclk / (14 * (idiv + 1));\r
-    if (serial_abs(clkrate, baudrate) < diff)\r
-    {\r
-      diff = serial_abs(clkrate, baudrate);\r
-      savedclkrate = clkrate;\r
-      divider = idiv;\r
-    }\r
-  }\r
-\r
-  /* Save computed divider */\r
-  *xdiv = divider;\r
+
+  unsigned int basepclk, div, goodrate, hsu_rate, l_hsu_rate, comprate;
+  unsigned int rate_diff;
+  
+  /* Find the closest divider to get the desired clock rate */
+         basepclk = sys_get_rate(CLKPWR_PERIPH_CLK);
+         div = basepclk / baudrate;
+         goodrate = hsu_rate = (div / 14) - 1;
+         if (hsu_rate != 0)
+                 hsu_rate--;
+  
+         /* Tweak divider */
+         l_hsu_rate = hsu_rate + 3;
+         rate_diff = 0xFFFFFFFF;
+  
+         while (hsu_rate < l_hsu_rate) {
+                 comprate = basepclk / ((hsu_rate + 1) * 14);
+                 if (serial_abs(comprate, baudrate) < rate_diff) {
+                         goodrate = hsu_rate;
+                         rate_diff = serial_abs(comprate,baudrate);
+                 }
+
+              hsu_rate++;
+       }
+       if (hsu_rate > 0xFF)
+               hsu_rate = 0xFF;
+
+       /* Save computed divider */
+       *xdiv = goodrate;
+
 }\r
 \r
 void serial_setbrg (void)
@@ -161,6 +167,10 @@ int serial_init (void)
     if (phsuregs == UART1) {\r
            /* set baudrate */\r
            serial_setbrg();\r
+           
+           /* By default, HSUART is set to loopback mode in S1L.
+               * Disable loopback to work */
+              UARTCNTL->loop &= ~_BIT(0);
 \r
         /* setup the buffers */\r
         phsuregs->ctrl = (  (2<<19) /*HSU_HRTS_TRIG_32B*/ | \r
index ece1d73..5efabf4 100644 (file)
@@ -33,5 +33,5 @@
 # download area is 0x80f00000
 #
 
-CONFIG_SYS_TEXT_BASE = 0x83FA0000
+CONFIG_SYS_TEXT_BASE = 0x80100000
 
index 171e55b..54d9c39 100644 (file)
@@ -201,6 +201,7 @@ int dram_init (void)
 
        /* 64M */
        gd->bd->bi_dram[0].size = 0x04000000; /* 64M */
+       gd->ram_size = 0x04000000;
 
        return 0;
 }
index 58e8bd4..6e499d5 100644 (file)
@@ -318,7 +318,7 @@ static int eth_tx (struct eth_device *dev,volatile void *packet, int length)
 }
 
 //------------------------------------------------------------------------------\r
-int HWInit(struct eth_device *dev, bd_t * bis)\r
+static int HWInit(struct eth_device *dev, bd_t * bis)\r
 {\r
        int btemp;\r
        unsigned int duplex, speed;
@@ -453,7 +453,7 @@ int HWInit(struct eth_device *dev, bd_t * bis)
 }\r
 \r
 //------------------------------------------------------------------------------\r
-int HWDeInit(void)\r
+static int HWDeInit(void)\r
 {\r
 
 \r
@@ -475,7 +475,7 @@ int HWDeInit(void)
        return 1;\r
 }\r
 
-static int eth_stop (void)
+static int eth_stop (struct eth_device *dev)
 {
        HWDeInit();
 }
@@ -487,7 +487,6 @@ int board_eth_init (bd_t *bd)
        char *s, *e;
        int i;
 
-
        dev = malloc(sizeof(*dev));
        if(!dev) {
          return 0;
index 19ae57d..5f48de6 100644 (file)
@@ -33,5 +33,5 @@
 # download area is 0x80f00000
 #
 
-CONFIG_SYS_TEXT_BASE = 0x81F80000
+CONFIG_SYS_TEXT_BASE = 0x80100000
 
index 366f66d..73b164e 100644 (file)
@@ -140,8 +140,20 @@ int dram_init (void)
 {
        gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
 
-       /* 32M, change this for 64M boards */
-       gd->bd->bi_dram[0].size = 0x02000000; /* 32M */
+       /*
+        * There are 2 variants of the board each with a different memory
+        * size. The size can be determined by reading the dynamic config
+        * register and verifying against the board's known 64M DRAM
+        * mapping number (0x11).
+        */
+       if (((EMC->emcdynamicconfig0 >> 7) & 0x1F) == 0x11) {
+               gd->bd->bi_dram[0].size = 0x04000000;
+            gd->ram_size = 0x04000000;
+       }
+       else {
+               gd->bd->bi_dram[0].size = 0x02000000;
+            gd->ram_size = 0x02000000;
+       }
 
        return 0;
 }
index 017cccc..365f881 100644 (file)
@@ -315,7 +315,7 @@ static int eth_tx (struct eth_device *dev,volatile void *packet, int length)
 }
 
 //------------------------------------------------------------------------------
-int HWInit(struct eth_device *dev, bd_t * bis)
+static int HWInit(struct eth_device *dev, bd_t * bis)
 {
        int btemp;
        unsigned int duplex, speed;
@@ -449,7 +449,7 @@ int HWInit(struct eth_device *dev, bd_t * bis)
 }
 
 //------------------------------------------------------------------------------
-int HWDeInit(void)
+static int HWDeInit(void)
 {
 
        // Reset all MAC logic
diff --git a/board/nxp/phy3250/#Makefile# b/board/nxp/phy3250/#Makefile#
deleted file mode 100644 (file)
index b368b0a..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-#
-# Copyright (C) 2008 by NXP Semiconductors
-# All rights reserved.
-#
-# 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  := phy3250.o net.o
-COBJS  += lowlevelsys_init.o
-SOBJS  := lowlevel_init.o
-
-SRCS   := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS   := $(addprefix $(obj),$(COBJS))
-SOBJS  := $(addprefix $(obj),$(SOBJS))
-
-$(LIB):        $(obj).depend $(OBJS) $(SOBJS)
-       $(call cmd_link_o_target, $(OBJS) $(SOBJS))
-
-
-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/nxp/phy3250/#config.mk# b/board/nxp/phy3250/#config.mk#
deleted file mode 100644 (file)
index 2268c77..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#
-# 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
-#
-
-# Phytec 3250 board with or without S1L
-#
-
-#
-# 64 or 128 MB SDRAM @ 0x80000000
-#
-# Linux-Kernel is @ 0x80008000, entry 0x80008000
-# params @ 0x80000100
-# optionally with a ramdisk at 0x80300000
-#
-# we load ourself to 0x00000000 or 0x83FC0000
-#
-# download area is 0x80f00000
-#
-
-CONFIG_SYS_TEXT_BASE = 0x83F80000
-
index 2268c77..8521052 100644 (file)
@@ -33,5 +33,5 @@
 # download area is 0x80f00000
 #
 
-CONFIG_SYS_TEXT_BASE = 0x83F80000
+CONFIG_SYS_TEXT_BASE = 0x80100000
 
index 68a2f0c..e9cf6e8 100644 (file)
@@ -343,7 +343,7 @@ void phy3250_get_board_info(void)
 
 int board_init (void)
 {      
-       phy3250_get_board_info();
+       phy3250_get_board_info();
 
        /* arch number of Logic-Board - MACH_TYPE_LPC3XXX */
        gd->bd->bi_arch_number = MACH_TYPE_UBOOTSYS;
@@ -371,33 +371,39 @@ int board_init (void)
 
 int dram_init (void)
 {
-       unsigned long sz = phyhwdesc.dramcfg & PHYHW_DRAM_SIZE_MASK;
+          unsigned long sz;
 
-       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
 
+  /* We need RAM size before board_init cause this is called before by board_init_f */
+       
+          phy3250_get_board_info();
+
+       sz = phyhwdesc.dramcfg & (PHYHW_DRAM_SIZE_MASK);
+
+       gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
        if (sz == PHYHW_DRAM_SIZE_16M)
        {
-               /* 16M available */
+               /* 32M available */
                gd->bd->bi_dram[0].size = 0x01000000; /* 16M */
-               gd->ram_size = 0x01000000;
+       gd->ram_size = 0x01000000;
        }
        else if (sz == PHYHW_DRAM_SIZE_32M)
        {
                /* 32M available */
                gd->bd->bi_dram[0].size = 0x02000000; /* 32M */
-               gd->ram_size = 0x02000000;
+       gd->ram_size = 0x02000000;
        }
        else if (sz == PHYHW_DRAM_SIZE_64M)
        {
                /* 64M available */
                gd->bd->bi_dram[0].size = 0x04000000; /* 64M */
-               gd->ram_size = 0x04000000;
+       gd->ram_size = 0x04000000;
        }
        else
        {
                /* 128M available */
                gd->bd->bi_dram[0].size = 0x08000000; /* 128M */
-               gd->ram_size = 0x04000000;
+       gd->ram_size = 0x08000000;
        }
 
        return 0;
index 2e81921..35b57f3 100644 (file)
@@ -57,7 +57,6 @@
 #define PHYS_SDRAM_1           0x80000000 /* SDRAM Bank #1 */
 
 #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_1
-#define CONFIG_SYS_TEXT_BASE  0x83FA0000
 /*
  * NOR FLASH not supported
  */
index 9329f43..85495cb 100644 (file)
@@ -28,6 +28,8 @@
 #ifndef __FDI3250_H__
 #define __FDI3250_H__
 
+//#define DEBUG
+
 /*
  * Ethernet buffer support in uncached IRAM and buffer size
  */
@@ -54,7 +56,7 @@
 #define PHYS_SDRAM_1           0x80000000 /* SDRAM Bank #1 */
 
 #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_1
-#define CONFIG_SYS_TEXT_BASE  0x81F80000
+
 /*
  * NOR FLASH not supported
  */
index d3a794a..7ab966e 100644 (file)
@@ -58,7 +58,7 @@
 #define PHYS_SDRAM_1           0x80000000 /* SDRAM Bank #1 */
 
 #define CONFIG_SYS_SDRAM_BASE  PHYS_SDRAM_1
-#define CONFIG_SYS_TEXT_BASE  0x83F80000
+
 /*
  * NOR FLASH not supported
  */
 #define CONFIG_STACKSIZE (32*1024) /* 32K stack */
 
 /* 3 words are left on the stack for the abort handler */
-#define CONFIG_SYS_INIT_SP_ADDR 0x0003C000
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_TEXT_BASE - (CONFIG_SYS_MALLOC_LEN + CONFIG_SYS_GBL_DATA_SIZE + 12))
+// 0x0003C000
 /*
  * ATAG support
  */