Patchwork [U-Boot] Handle most LDSCRIPT setting centrally

login
register
mail settings
Submitter Scott Wood
Date April 6, 2011, 11:31 p.m.
Message ID <20110406233136.GA13709@schlenkerla.am.freescale.net>
Download mbox | patch
Permalink /patch/90112/
State Accepted
Delegated to: Wolfgang Denk
Headers show

Comments

Scott Wood - April 6, 2011, 11:31 p.m.
Currently, some linker scripts are found by common code in config.mk.
Some are found using CONFIG_SYS_LDSCRIPT, but the code for that is
sometimes in arch config.mk and sometimes in board config.mk.  Some
are found using an arch-specific rule for looking in CPUDIR, etc.

Further, the powerpc config.mk rule relied on CONFIG_NAND_SPL
when it really wanted CONFIG_NAND_U_BOOT -- which covered up the fact
that not all NAND_U_BOOT builds actually wanted CPUDIR/u-boot-nand.lds.

Replace all of this -- except for a handful of boards that are actually
selecting a linker script in a unique way -- with centralized ldscript
finding.

If board code specifies LDSCRIPT, that will be used.
Otherwise, if CONFIG_SYS_LDSCRIPT is specified, that will be used.

If neither of these are specified, then the central config.mk will
check for the existence of the following, in order:

$(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds (only if CONFIG_NAND_U_BOOT)
$(TOPDIR)/$(CPUDIR)/u-boot-nand.lds (only if CONFIG_NAND_U_BOOT)
$(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
$(TOPDIR)/$(CPUDIR)/u-boot.lds

Some boards (sc3, cm5200, munices) provided their own u-boot.lds that
were dead code, because they were overridden by a CPUDIR u-boot.lds under
the old powerpc rules.  These boards' own u-boot.lds have bitrotted and
no longer work -- these lds files have been removed.

Signed-off-by: Scott Wood <scottwood@freescale.com>
---
"./MAKEALL ppc" had identical output with and without this patch.

I tried building some arm boards, but couldn't find any that built for
me even without this patch.  They didn't appear to fail differently with
it, though.

 arch/arm/config.mk                     |    1 -
 arch/i386/config.mk                    |    1 -
 arch/nios2/config.mk                   |    2 -
 arch/powerpc/config.mk                 |   11 ---
 arch/sh/config.mk                      |    6 --
 board/actux1/config.mk                 |    2 -
 board/actux2/config.mk                 |    2 -
 board/actux3/config.mk                 |    2 -
 board/altera/nios2-generic/config.mk   |    2 -
 board/amcc/acadia/config.mk            |    7 --
 board/amcc/bamboo/config.mk            |    7 --
 board/amcc/canyonlands/config.mk       |    7 --
 board/amcc/kilauea/config.mk           |    7 --
 board/amcc/sequoia/config.mk           |    7 --
 board/atmel/atstk1000/config.mk        |    1 -
 board/avnet/fx12mm/config.mk           |   29 ------
 board/avnet/v5fx30teval/config.mk      |   29 ------
 board/cm5200/u-boot.lds                |  120 --------------------------
 board/cogent/config.mk                 |    2 -
 board/earthlcd/favr-32-ezkit/config.mk |    1 -
 board/freescale/mx31ads/config.mk      |    2 -
 board/hymod/config.mk                  |    2 -
 board/munices/u-boot.lds               |  120 --------------------------
 board/samsung/smdk6400/config.mk       |    2 -
 board/sc3/u-boot.lds                   |  147 --------------------------------
 board/trab/config.mk                   |    2 -
 board/xilinx/ml507/config.mk           |    4 -
 board/xilinx/ppc405-generic/config.mk  |    4 -
 board/xilinx/ppc440-generic/config.mk  |    4 -
 config.mk                              |   33 ++++++-
 30 files changed, 28 insertions(+), 538 deletions(-)
 delete mode 100644 board/avnet/fx12mm/config.mk
 delete mode 100644 board/avnet/v5fx30teval/config.mk
 delete mode 100644 board/cm5200/u-boot.lds
 delete mode 100644 board/munices/u-boot.lds
 delete mode 100644 board/sc3/u-boot.lds
 delete mode 100644 board/xilinx/ml507/config.mk
 delete mode 100644 board/xilinx/ppc405-generic/config.mk
 delete mode 100644 board/xilinx/ppc440-generic/config.mk
Wolfgang Denk - April 7, 2011, 7:11 a.m.
Dear Scott Wood,

In message <20110406233136.GA13709@schlenkerla.am.freescale.net> you wrote:
> Currently, some linker scripts are found by common code in config.mk.
> Some are found using CONFIG_SYS_LDSCRIPT, but the code for that is
> sometimes in arch config.mk and sometimes in board config.mk.  Some
> are found using an arch-specific rule for looking in CPUDIR, etc.
> 
> Further, the powerpc config.mk rule relied on CONFIG_NAND_SPL
> when it really wanted CONFIG_NAND_U_BOOT -- which covered up the fact
> that not all NAND_U_BOOT builds actually wanted CPUDIR/u-boot-nand.lds.
> 
> Replace all of this -- except for a handful of boards that are actually
> selecting a linker script in a unique way -- with centralized ldscript
> finding.

Thanks for this nice cleanup.

Only one question: Which boards / architectures did you cover during
your tests?

Best regards,

Wolfgang Denk
Scott Wood - April 7, 2011, 4:01 p.m.
On Thu, 7 Apr 2011 09:11:03 +0200
Wolfgang Denk <wd@denx.de> wrote:

> Dear Scott Wood,
> 
> In message <20110406233136.GA13709@schlenkerla.am.freescale.net> you wrote:
> > Currently, some linker scripts are found by common code in config.mk.
> > Some are found using CONFIG_SYS_LDSCRIPT, but the code for that is
> > sometimes in arch config.mk and sometimes in board config.mk.  Some
> > are found using an arch-specific rule for looking in CPUDIR, etc.
> > 
> > Further, the powerpc config.mk rule relied on CONFIG_NAND_SPL
> > when it really wanted CONFIG_NAND_U_BOOT -- which covered up the fact
> > that not all NAND_U_BOOT builds actually wanted CPUDIR/u-boot-nand.lds.
> > 
> > Replace all of this -- except for a handful of boards that are actually
> > selecting a linker script in a unique way -- with centralized ldscript
> > finding.
> 
> Thanks for this nice cleanup.
> 
> Only one question: Which boards / architectures did you cover during
> your tests?

As I noted, I did a MAKEALL ppc and all the output (sizes, errors, etc) was
the same as before the patch.

I tried a few arm boards, and all the ones I tried failed the same way they
did before the patch.  I don't have toolchains for the other arches
readily available.  Any help in testing this change on non-ppc would be
appreciated.

-Scott
Mike Frysinger - April 7, 2011, 7:55 p.m.
On Wed, Apr 6, 2011 at 7:31 PM, Scott Wood wrote:
> Currently, some linker scripts are found by common code in config.mk.
> Some are found using CONFIG_SYS_LDSCRIPT, but the code for that is
> sometimes in arch config.mk and sometimes in board config.mk.  Some
> are found using an arch-specific rule for looking in CPUDIR, etc.
>
> Further, the powerpc config.mk rule relied on CONFIG_NAND_SPL
> when it really wanted CONFIG_NAND_U_BOOT -- which covered up the fact
> that not all NAND_U_BOOT builds actually wanted CPUDIR/u-boot-nand.lds.
>
> Replace all of this -- except for a handful of boards that are actually
> selecting a linker script in a unique way -- with centralized ldscript
> finding.
>
> If board code specifies LDSCRIPT, that will be used.
> Otherwise, if CONFIG_SYS_LDSCRIPT is specified, that will be used.
>
> If neither of these are specified, then the central config.mk will
> check for the existence of the following, in order:
>
> $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds (only if CONFIG_NAND_U_BOOT)
> $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds (only if CONFIG_NAND_U_BOOT)
> $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
> $(TOPDIR)/$(CPUDIR)/u-boot.lds

i guess if i simply renamed blackfin/u-boot.lds.S to
blackfin/u-boot.lds, things would "just work" for me too.
-mike
Graeme Russ - April 8, 2011, 6:07 a.m.
On 08/04/11 02:01, Scott Wood wrote:
> On Thu, 7 Apr 2011 09:11:03 +0200
> Wolfgang Denk <wd@denx.de> wrote:
> 
>> Dear Scott Wood,
>>
>> In message <20110406233136.GA13709@schlenkerla.am.freescale.net> you wrote:
>>> Currently, some linker scripts are found by common code in config.mk.
>>> Some are found using CONFIG_SYS_LDSCRIPT, but the code for that is
>>> sometimes in arch config.mk and sometimes in board config.mk.  Some
>>> are found using an arch-specific rule for looking in CPUDIR, etc.
>>>
>>> Further, the powerpc config.mk rule relied on CONFIG_NAND_SPL
>>> when it really wanted CONFIG_NAND_U_BOOT -- which covered up the fact
>>> that not all NAND_U_BOOT builds actually wanted CPUDIR/u-boot-nand.lds.
>>>
>>> Replace all of this -- except for a handful of boards that are actually
>>> selecting a linker script in a unique way -- with centralized ldscript
>>> finding.
>>
>> Thanks for this nice cleanup.
>>
>> Only one question: Which boards / architectures did you cover during
>> your tests?
> 
> As I noted, I did a MAKEALL ppc and all the output (sizes, errors, etc) was
> the same as before the patch.
> 
> I tried a few arm boards, and all the ones I tried failed the same way they
> did before the patch.  I don't have toolchains for the other arches
> readily available.  Any help in testing this change on non-ppc would be
> appreciated.
> 

I have tried this patch on all (two!) x86 configurations and looks good

You may have my:

Tested-by: Graeme Russ <graeme.russ@gmail.com>

Regards,

Graeme
Wolfgang Denk - April 29, 2011, 11 p.m.
Dear Scott Wood,

In message <20110406233136.GA13709@schlenkerla.am.freescale.net> you wrote:
> Currently, some linker scripts are found by common code in config.mk.
> Some are found using CONFIG_SYS_LDSCRIPT, but the code for that is
> sometimes in arch config.mk and sometimes in board config.mk.  Some
> are found using an arch-specific rule for looking in CPUDIR, etc.
> 
> Further, the powerpc config.mk rule relied on CONFIG_NAND_SPL
> when it really wanted CONFIG_NAND_U_BOOT -- which covered up the fact
> that not all NAND_U_BOOT builds actually wanted CPUDIR/u-boot-nand.lds.
> 
> Replace all of this -- except for a handful of boards that are actually
> selecting a linker script in a unique way -- with centralized ldscript
> finding.
> 
> If board code specifies LDSCRIPT, that will be used.
> Otherwise, if CONFIG_SYS_LDSCRIPT is specified, that will be used.
> 
> If neither of these are specified, then the central config.mk will
> check for the existence of the following, in order:
> 
> $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds (only if CONFIG_NAND_U_BOOT)
> $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds (only if CONFIG_NAND_U_BOOT)
> $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
> $(TOPDIR)/$(CPUDIR)/u-boot.lds
> 
> Some boards (sc3, cm5200, munices) provided their own u-boot.lds that
> were dead code, because they were overridden by a CPUDIR u-boot.lds under
> the old powerpc rules.  These boards' own u-boot.lds have bitrotted and
> no longer work -- these lds files have been removed.
> 
> Signed-off-by: Scott Wood <scottwood@freescale.com>
> ---
> "./MAKEALL ppc" had identical output with and without this patch.
> 
> I tried building some arm boards, but couldn't find any that built for
> me even without this patch.  They didn't appear to fail differently with
> it, though.
> 
>  arch/arm/config.mk                     |    1 -
>  arch/i386/config.mk                    |    1 -
>  arch/nios2/config.mk                   |    2 -
>  arch/powerpc/config.mk                 |   11 ---
>  arch/sh/config.mk                      |    6 --
>  board/actux1/config.mk                 |    2 -
>  board/actux2/config.mk                 |    2 -
>  board/actux3/config.mk                 |    2 -
>  board/altera/nios2-generic/config.mk   |    2 -
>  board/amcc/acadia/config.mk            |    7 --
>  board/amcc/bamboo/config.mk            |    7 --
>  board/amcc/canyonlands/config.mk       |    7 --
>  board/amcc/kilauea/config.mk           |    7 --
>  board/amcc/sequoia/config.mk           |    7 --
>  board/atmel/atstk1000/config.mk        |    1 -
>  board/avnet/fx12mm/config.mk           |   29 ------
>  board/avnet/v5fx30teval/config.mk      |   29 ------
>  board/cm5200/u-boot.lds                |  120 --------------------------
>  board/cogent/config.mk                 |    2 -
>  board/earthlcd/favr-32-ezkit/config.mk |    1 -
>  board/freescale/mx31ads/config.mk      |    2 -
>  board/hymod/config.mk                  |    2 -
>  board/munices/u-boot.lds               |  120 --------------------------
>  board/samsung/smdk6400/config.mk       |    2 -
>  board/sc3/u-boot.lds                   |  147 --------------------------------
>  board/trab/config.mk                   |    2 -
>  board/xilinx/ml507/config.mk           |    4 -
>  board/xilinx/ppc405-generic/config.mk  |    4 -
>  board/xilinx/ppc440-generic/config.mk  |    4 -
>  config.mk                              |   33 ++++++-
>  30 files changed, 28 insertions(+), 538 deletions(-)
>  delete mode 100644 board/avnet/fx12mm/config.mk
>  delete mode 100644 board/avnet/v5fx30teval/config.mk
>  delete mode 100644 board/cm5200/u-boot.lds
>  delete mode 100644 board/munices/u-boot.lds
>  delete mode 100644 board/sc3/u-boot.lds
>  delete mode 100644 board/xilinx/ml507/config.mk
>  delete mode 100644 board/xilinx/ppc405-generic/config.mk
>  delete mode 100644 board/xilinx/ppc440-generic/config.mk

Applied, thanks.

Best regards,

Wolfgang Denk

Patch

diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index a6a4742..709eba9 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -63,7 +63,6 @@  ifeq (,$(findstring arch/arm/lib/eabi_compat.o,$(PLATFORM_LIBS)))
 PLATFORM_LIBS += $(OBJTREE)/arch/arm/lib/eabi_compat.o
 endif
 endif
-LDSCRIPT := $(SRCTREE)/$(CPUDIR)/u-boot.lds
 
 # needed for relocation
 ifndef CONFIG_NAND_SPL
diff --git a/arch/i386/config.mk b/arch/i386/config.mk
index 47e0fb4..d6e43d1 100644
--- a/arch/i386/config.mk
+++ b/arch/i386/config.mk
@@ -39,4 +39,3 @@  PLATFORM_RELFLAGS += -ffunction-sections -fvisibility=hidden
 PLATFORM_LDFLAGS += --emit-relocs -Bsymbolic -Bsymbolic-functions
 
 LDFLAGS_FINAL += --gc-sections -pie
-LDSCRIPT := $(SRCTREE)/$(CPUDIR)/u-boot.lds
diff --git a/arch/nios2/config.mk b/arch/nios2/config.mk
index d241a96..e58ea24 100644
--- a/arch/nios2/config.mk
+++ b/arch/nios2/config.mk
@@ -29,7 +29,5 @@  STANDALONE_LOAD_ADDR ?= 0x02000000
 PLATFORM_CPPFLAGS += -DCONFIG_NIOS2 -D__NIOS2__
 PLATFORM_CPPFLAGS += -G0
 
-LDSCRIPT ?= $(SRCTREE)/$(CPUDIR)/u-boot.lds
-
 LDFLAGS_FINAL += --gc-sections
 PLATFORM_RELFLAGS += -ffunction-sections -fdata-sections
diff --git a/arch/powerpc/config.mk b/arch/powerpc/config.mk
index 31e4416..bb613a7 100644
--- a/arch/powerpc/config.mk
+++ b/arch/powerpc/config.mk
@@ -29,17 +29,6 @@  PLATFORM_RELFLAGS += -mrelocatable -ffunction-sections -fdata-sections
 PLATFORM_CPPFLAGS += -DCONFIG_PPC -D__powerpc__
 PLATFORM_LDFLAGS  += -n
 
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else ifdef CONFIG_NAND_SPL
-LDSCRIPT := $(SRCTREE)/$(CONFIG_BOARDDIR)/u-boot-nand.lds
-else
-ifneq ($(wildcard $(SRCTREE)/arch/powerpc/cpu/$(CPU)/u-boot.lds),)
-LDSCRIPT := $(SRCTREE)/arch/powerpc/cpu/$(CPU)/u-boot.lds
-endif
-endif
-
 #
 # When cross-compiling on NetBSD, we have to define __PPC__ or else we
 # will pick up a va_list declaration that is incompatible with the
diff --git a/arch/sh/config.mk b/arch/sh/config.mk
index cd851f5..b5be5f2 100644
--- a/arch/sh/config.mk
+++ b/arch/sh/config.mk
@@ -31,9 +31,3 @@  endif
 PLATFORM_CPPFLAGS += -DCONFIG_SH -D__SH__
 PLATFORM_LDFLAGS += -e $(CONFIG_SYS_TEXT_BASE) --defsym reloc_dst=$(CONFIG_SYS_TEXT_BASE)
 LDFLAGS_FINAL = --gc-sections
-
-ifdef CONFIG_SYS_LDSCRIPT
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else
-LDSCRIPT := $(SRCTREE)/$(CPUDIR)/u-boot.lds
-endif
diff --git a/board/actux1/config.mk b/board/actux1/config.mk
index 88634f7..9cb838b 100644
--- a/board/actux1/config.mk
+++ b/board/actux1/config.mk
@@ -2,5 +2,3 @@  CONFIG_SYS_TEXT_BASE = 0x00e00000
 
 # include NPE ethernet driver
 BOARDLIBS = arch/arm/cpu/ixp/npe/libnpe.o
-
-LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot.lds
diff --git a/board/actux2/config.mk b/board/actux2/config.mk
index 88634f7..9cb838b 100644
--- a/board/actux2/config.mk
+++ b/board/actux2/config.mk
@@ -2,5 +2,3 @@  CONFIG_SYS_TEXT_BASE = 0x00e00000
 
 # include NPE ethernet driver
 BOARDLIBS = arch/arm/cpu/ixp/npe/libnpe.o
-
-LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot.lds
diff --git a/board/actux3/config.mk b/board/actux3/config.mk
index 88634f7..9cb838b 100644
--- a/board/actux3/config.mk
+++ b/board/actux3/config.mk
@@ -2,5 +2,3 @@  CONFIG_SYS_TEXT_BASE = 0x00e00000
 
 # include NPE ethernet driver
 BOARDLIBS = arch/arm/cpu/ixp/npe/libnpe.o
-
-LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot.lds
diff --git a/board/altera/nios2-generic/config.mk b/board/altera/nios2-generic/config.mk
index 95e75af..00c16fc 100644
--- a/board/altera/nios2-generic/config.mk
+++ b/board/altera/nios2-generic/config.mk
@@ -30,5 +30,3 @@  PLATFORM_CPPFLAGS += -I$(TOPDIR)/board/$(VENDOR)/include
 ifeq ($(debug),1)
 PLATFORM_CPPFLAGS += -DDEBUG
 endif
-
-LDSCRIPT := $(SRCTREE)/board/$(VENDOR)/$(BOARD)/u-boot.lds
diff --git a/board/amcc/acadia/config.mk b/board/amcc/acadia/config.mk
index 2f2787f..bfc0945 100644
--- a/board/amcc/acadia/config.mk
+++ b/board/amcc/acadia/config.mk
@@ -28,10 +28,3 @@ 
 ifeq ($(debug),1)
 PLATFORM_CPPFLAGS += -DDEBUG
 endif
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else ifdef CONFIG_NAND_U_BOOT
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
-endif
diff --git a/board/amcc/bamboo/config.mk b/board/amcc/bamboo/config.mk
index 7ca16a0..24f74e1 100644
--- a/board/amcc/bamboo/config.mk
+++ b/board/amcc/bamboo/config.mk
@@ -30,10 +30,3 @@  endif
 ifeq ($(dbcr),1)
 PLATFORM_CPPFLAGS += -DCONFIG_SYS_INIT_DBCR=0x8cff0000
 endif
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else ifdef CONFIG_NAND_U_BOOT
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
-endif
diff --git a/board/amcc/canyonlands/config.mk b/board/amcc/canyonlands/config.mk
index abf2a26..d693a26 100644
--- a/board/amcc/canyonlands/config.mk
+++ b/board/amcc/canyonlands/config.mk
@@ -33,10 +33,3 @@  endif
 ifeq ($(dbcr),1)
 PLATFORM_CPPFLAGS += -DCONFIG_SYS_INIT_DBCR=0x8cff0000
 endif
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else ifdef CONFIG_NAND_U_BOOT
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
-endif
diff --git a/board/amcc/kilauea/config.mk b/board/amcc/kilauea/config.mk
index 4ae3ea9..003b8c3 100644
--- a/board/amcc/kilauea/config.mk
+++ b/board/amcc/kilauea/config.mk
@@ -24,10 +24,3 @@ 
 ifeq ($(debug),1)
 PLATFORM_CPPFLAGS += -DDEBUG
 endif
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else ifdef CONFIG_NAND_U_BOOT
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
-endif
diff --git a/board/amcc/sequoia/config.mk b/board/amcc/sequoia/config.mk
index 73efe72..e0bf071 100644
--- a/board/amcc/sequoia/config.mk
+++ b/board/amcc/sequoia/config.mk
@@ -33,10 +33,3 @@  endif
 ifeq ($(dbcr),1)
 PLATFORM_CPPFLAGS += -DCONFIG_SYS_INIT_DBCR=0x8cff0000
 endif
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-else ifdef CONFIG_NAND_U_BOOT
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
-endif
diff --git a/board/atmel/atstk1000/config.mk b/board/atmel/atstk1000/config.mk
index 8c03b77..284f7ff 100644
--- a/board/atmel/atstk1000/config.mk
+++ b/board/atmel/atstk1000/config.mk
@@ -1,4 +1,3 @@ 
 PLATFORM_RELFLAGS	+= -ffunction-sections -fdata-sections
 PLATFORM_LDFLAGS	+= --gc-sections
 CONFIG_SYS_TEXT_BASE		= 0x00000000
-LDSCRIPT		= $(src)board/atmel/atstk1000/u-boot.lds
diff --git a/board/avnet/fx12mm/config.mk b/board/avnet/fx12mm/config.mk
deleted file mode 100644
index 78dde62..0000000
--- a/board/avnet/fx12mm/config.mk
+++ /dev/null
@@ -1,29 +0,0 @@ 
-#
-# (C) Copyright 2008
-# Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
-# Work supported by Qtechnology http://www.qtec.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
-#
-#
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-endif
diff --git a/board/avnet/v5fx30teval/config.mk b/board/avnet/v5fx30teval/config.mk
deleted file mode 100644
index 78dde62..0000000
--- a/board/avnet/v5fx30teval/config.mk
+++ /dev/null
@@ -1,29 +0,0 @@ 
-#
-# (C) Copyright 2008
-# Ricardo Ribalda-Universidad Autonoma de Madrid-ricardo.ribalda@uam.es
-# Work supported by Qtechnology http://www.qtec.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
-#
-#
-
-ifdef CONFIG_SYS_LDSCRIPT
-# need to strip off double quotes
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-endif
diff --git a/board/cm5200/u-boot.lds b/board/cm5200/u-boot.lds
deleted file mode 100644
index cf73b11..0000000
--- a/board/cm5200/u-boot.lds
+++ /dev/null
@@ -1,120 +0,0 @@ 
-/*
- * (C) Copyright 2003-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)
-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      :
-  {
-    arch/powerpc/cpu/mpc5xxx/start.o	(.text)
-    *(.text)
-    *(.got1)
-    . = ALIGN(16);
-    *(.eh_frame)
-    *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-  }
-  .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 (NOLOAD)       :
-  {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-   . = ALIGN(4);
-  }
-  __bss_end__ = . ;
-  PROVIDE (end = .);
-}
diff --git a/board/cogent/config.mk b/board/cogent/config.mk
index 78730db..12e2e7c 100644
--- a/board/cogent/config.mk
+++ b/board/cogent/config.mk
@@ -26,5 +26,3 @@ 
 #
 
 PLATFORM_CPPFLAGS += -I$(TOPDIR)
-
-LDSCRIPT := $(SRCTREE)/board/cogent/u-boot.lds
diff --git a/board/earthlcd/favr-32-ezkit/config.mk b/board/earthlcd/favr-32-ezkit/config.mk
index f8bc88d..284f7ff 100644
--- a/board/earthlcd/favr-32-ezkit/config.mk
+++ b/board/earthlcd/favr-32-ezkit/config.mk
@@ -1,4 +1,3 @@ 
 PLATFORM_RELFLAGS	+= -ffunction-sections -fdata-sections
 PLATFORM_LDFLAGS	+= --gc-sections
 CONFIG_SYS_TEXT_BASE		= 0x00000000
-LDSCRIPT		= $(src)board/earthlcd/favr-32-ezkit/u-boot.lds
diff --git a/board/freescale/mx31ads/config.mk b/board/freescale/mx31ads/config.mk
index 2303f30..0131edf 100644
--- a/board/freescale/mx31ads/config.mk
+++ b/board/freescale/mx31ads/config.mk
@@ -1,3 +1 @@ 
 CONFIG_SYS_TEXT_BASE = 0x87f00000
-
-LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot.lds
diff --git a/board/hymod/config.mk b/board/hymod/config.mk
index ae766bc..ea64004 100644
--- a/board/hymod/config.mk
+++ b/board/hymod/config.mk
@@ -28,5 +28,3 @@ 
 PLATFORM_CPPFLAGS += -I$(TOPDIR)
 
 OBJCFLAGS = --remove-section=.ppcenv
-
-LDSCRIPT := $(SRCTREE)/board/hymod/u-boot.lds
diff --git a/board/munices/u-boot.lds b/board/munices/u-boot.lds
deleted file mode 100644
index 99576bf..0000000
--- a/board/munices/u-boot.lds
+++ /dev/null
@@ -1,120 +0,0 @@ 
-/*
- * (C) Copyright 2007
- * Heiko Schocher, DENX Software Engineering, hs@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)
-/* 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      :
-  {
-    arch/powerpc/cpu/mpc5xxx/start.o	(.text)
-    *(.text)
-    *(.got1)
-    . = ALIGN(16);
-    *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-  }
-  .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 (NOLOAD)       :
-  {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-   . = ALIGN(4);
-  }
-  __bss_end__ = . ;
-  PROVIDE (end = .);
-}
diff --git a/board/samsung/smdk6400/config.mk b/board/samsung/smdk6400/config.mk
index 90cbcf2..6f04c2f 100644
--- a/board/samsung/smdk6400/config.mk
+++ b/board/samsung/smdk6400/config.mk
@@ -28,5 +28,3 @@  CONFIG_SYS_TEXT_BASE = $(RAM_TEXT)
 else
 CONFIG_SYS_TEXT_BASE = 0
 endif
-
-LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot-nand.lds
diff --git a/board/sc3/u-boot.lds b/board/sc3/u-boot.lds
deleted file mode 100644
index 2cbbca5..0000000
--- a/board/sc3/u-boot.lds
+++ /dev/null
@@ -1,147 +0,0 @@ 
-/*
- * (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_ARCH(powerpc)
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-SECTIONS
-{
-  .resetvec 0xFFFFFFFC :
-  {
-    *(.resetvec)
-  } = 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      :
-  {
-    /* WARNING - the following is hand-optimized to fit within	*/
-    /* the sector layout of our flash chips!	XXX FIXME XXX	*/
-
-    arch/powerpc/cpu/ppc4xx/start.o	(.text)
-    board/sc3/init.o	(.text)
-    arch/powerpc/cpu/ppc4xx/kgdb.o	(.text)
-    arch/powerpc/cpu/ppc4xx/traps.o	(.text)
-    arch/powerpc/cpu/ppc4xx/interrupts.o	(.text)
-    arch/powerpc/cpu/ppc4xx/4xx_uart.o	(.text)
-    arch/powerpc/cpu/ppc4xx/cpu_init.o	(.text)
-    arch/powerpc/cpu/ppc4xx/speed.o	(.text)
-    common/dlmalloc.o	(.text)
-    lib/crc32.o		(.text)
-    arch/powerpc/lib/extable.o	(.text)
-    lib/zlib.o		(.text)
-
-/*    . = env_offset;*/
-/*    common/env_embedded.o(.text)*/
-
-    *(.text)
-    *(.got1)
-  }
-  _etext = .;
-  PROVIDE (etext = .);
-  .rodata    :
-  {
-    *(.eh_frame)
-    *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*)))
-  }
-  .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 (NOLOAD)       :
-  {
-   *(.sbss) *(.scommon)
-   *(.dynbss)
-   *(.bss)
-   *(COMMON)
-   . = ALIGN(4);
-  }
-  __bss_end__ = . ;
-  PROVIDE (end = .);
-}
diff --git a/board/trab/config.mk b/board/trab/config.mk
index a349b8c..367f0b7 100644
--- a/board/trab/config.mk
+++ b/board/trab/config.mk
@@ -24,5 +24,3 @@  sinclude $(OBJTREE)/board/$(BOARDDIR)/config.tmp
 ifndef CONFIG_SYS_TEXT_BASE
 CONFIG_SYS_TEXT_BASE = 0x0DF40000
 endif
-
-LDSCRIPT := $(SRCTREE)/board/$(BOARDDIR)/u-boot.lds
diff --git a/board/xilinx/ml507/config.mk b/board/xilinx/ml507/config.mk
deleted file mode 100644
index 4df1d9c..0000000
--- a/board/xilinx/ml507/config.mk
+++ /dev/null
@@ -1,4 +0,0 @@ 
-# need to strip off double quotes
-ifneq ($(CONFIG_SYS_LDSCRIPT),)
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-endif
diff --git a/board/xilinx/ppc405-generic/config.mk b/board/xilinx/ppc405-generic/config.mk
deleted file mode 100644
index 4df1d9c..0000000
--- a/board/xilinx/ppc405-generic/config.mk
+++ /dev/null
@@ -1,4 +0,0 @@ 
-# need to strip off double quotes
-ifneq ($(CONFIG_SYS_LDSCRIPT),)
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-endif
diff --git a/board/xilinx/ppc440-generic/config.mk b/board/xilinx/ppc440-generic/config.mk
deleted file mode 100644
index 4df1d9c..0000000
--- a/board/xilinx/ppc440-generic/config.mk
+++ /dev/null
@@ -1,4 +0,0 @@ 
-# need to strip off double quotes
-ifneq ($(CONFIG_SYS_LDSCRIPT),)
-LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
-endif
diff --git a/config.mk b/config.mk
index fa46ff1..7ce554e 100644
--- a/config.mk
+++ b/config.mk
@@ -153,14 +153,37 @@  endif
 RELFLAGS= $(PLATFORM_RELFLAGS)
 DBGFLAGS= -g # -DDEBUG
 OPTFLAGS= -Os #-fomit-frame-pointer
+
+# If board code explicitly specified LDSCRIPT or CONFIG_SYS_LDSCRIPT, use
+# that (or fail if absent).  Otherwise, search for a linker script in a
+# standard location.
+
 ifndef LDSCRIPT
-#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
-ifeq ($(CONFIG_NAND_U_BOOT),y)
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
-else
-LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
+	#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
+	ifdef CONFIG_SYS_LDSCRIPT
+		# need to strip off double quotes
+		LDSCRIPT := $(subst ",,$(CONFIG_SYS_LDSCRIPT))
+	endif
 endif
+
+ifndef LDSCRIPT
+	ifeq ($(CONFIG_NAND_U_BOOT),y)
+		LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
+		ifeq ($(wildcard $(LDSCRIPT)),)
+			LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot-nand.lds
+		endif
+	endif
+	ifeq ($(wildcard $(LDSCRIPT)),)
+		LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
+	endif
+	ifeq ($(wildcard $(LDSCRIPT)),)
+		LDSCRIPT := $(TOPDIR)/$(CPUDIR)/u-boot.lds
+	endif
+	ifeq ($(wildcard $(LDSCRIPT)),)
+$(error could not find linker script)
+	endif
 endif
+
 OBJCFLAGS += --gap-fill=0xff
 
 gccincdir := $(shell $(CC) -print-file-name=include)