浏览代码

Merge branch 'master' of git://git.denx.de/u-boot-arm

Wolfgang Denk 14 年之前
父节点
当前提交
c04bf5e9a4
共有 100 个文件被更改,包括 432 次插入167 次删除
  1. 4 0
      arch/arm/cpu/arm1136/start.S
  2. 3 1
      arch/arm/cpu/arm1136/u-boot.lds
  3. 6 0
      arch/arm/cpu/arm1176/start.S
  4. 3 1
      arch/arm/cpu/arm1176/u-boot.lds
  5. 4 0
      arch/arm/cpu/arm720t/start.S
  6. 3 1
      arch/arm/cpu/arm720t/u-boot.lds
  7. 2 0
      arch/arm/cpu/arm920t/ep93xx/u-boot.lds
  8. 4 0
      arch/arm/cpu/arm920t/start.S
  9. 3 1
      arch/arm/cpu/arm920t/u-boot.lds
  10. 4 0
      arch/arm/cpu/arm925t/start.S
  11. 3 1
      arch/arm/cpu/arm925t/u-boot.lds
  12. 4 0
      arch/arm/cpu/arm926ejs/start.S
  13. 3 1
      arch/arm/cpu/arm926ejs/u-boot.lds
  14. 4 0
      arch/arm/cpu/arm946es/start.S
  15. 3 1
      arch/arm/cpu/arm946es/u-boot.lds
  16. 4 0
      arch/arm/cpu/arm_intcm/start.S
  17. 3 1
      arch/arm/cpu/arm_intcm/u-boot.lds
  18. 1 0
      arch/arm/cpu/armv7/s5p-common/Makefile
  19. 189 0
      arch/arm/cpu/armv7/s5p-common/pwm.c
  20. 17 59
      arch/arm/cpu/armv7/s5p-common/timer.c
  21. 4 0
      arch/arm/cpu/armv7/start.S
  22. 3 1
      arch/arm/cpu/armv7/u-boot.lds
  23. 4 0
      arch/arm/cpu/ixp/start.S
  24. 3 1
      arch/arm/cpu/ixp/u-boot.lds
  25. 4 0
      arch/arm/cpu/lh7a40x/start.S
  26. 3 1
      arch/arm/cpu/lh7a40x/u-boot.lds
  27. 4 0
      arch/arm/cpu/pxa/start.S
  28. 3 1
      arch/arm/cpu/pxa/u-boot.lds
  29. 4 0
      arch/arm/cpu/s3c44b0/start.S
  30. 3 1
      arch/arm/cpu/s3c44b0/u-boot.lds
  31. 4 0
      arch/arm/cpu/sa1100/start.S
  32. 3 1
      arch/arm/cpu/sa1100/u-boot.lds
  33. 3 2
      arch/arm/include/asm/arch-s5pc1xx/mmc.h
  34. 18 5
      arch/arm/include/asm/arch-s5pc1xx/pwm.h
  35. 3 2
      arch/arm/include/asm/arch-s5pc2xx/mmc.h
  36. 18 5
      arch/arm/include/asm/arch-s5pc2xx/pwm.h
  37. 1 0
      arch/arm/include/asm/u-boot-arm.h
  38. 1 1
      arch/arm/lib/board.c
  39. 1 1
      arch/avr32/cpu/start.S
  40. 1 1
      arch/avr32/include/asm/sections.h
  41. 2 2
      arch/avr32/lib/board.c
  42. 2 2
      arch/m68k/lib/board.c
  43. 3 3
      arch/nios2/cpu/start.S
  44. 1 1
      arch/nios2/cpu/u-boot.lds
  45. 2 2
      arch/powerpc/cpu/74xx_7xx/start.S
  46. 1 1
      arch/powerpc/cpu/74xx_7xx/u-boot.lds
  47. 2 2
      arch/powerpc/cpu/mpc512x/start.S
  48. 1 1
      arch/powerpc/cpu/mpc512x/u-boot.lds
  49. 2 2
      arch/powerpc/cpu/mpc5xx/start.S
  50. 1 1
      arch/powerpc/cpu/mpc5xx/u-boot.lds
  51. 2 2
      arch/powerpc/cpu/mpc5xxx/start.S
  52. 1 1
      arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds
  53. 1 1
      arch/powerpc/cpu/mpc5xxx/u-boot.lds
  54. 2 2
      arch/powerpc/cpu/mpc8220/start.S
  55. 1 1
      arch/powerpc/cpu/mpc8220/u-boot.lds
  56. 2 2
      arch/powerpc/cpu/mpc824x/start.S
  57. 1 1
      arch/powerpc/cpu/mpc824x/u-boot.lds
  58. 2 2
      arch/powerpc/cpu/mpc8260/start.S
  59. 1 1
      arch/powerpc/cpu/mpc8260/u-boot.lds
  60. 2 2
      arch/powerpc/cpu/mpc83xx/start.S
  61. 1 1
      arch/powerpc/cpu/mpc83xx/u-boot.lds
  62. 2 2
      arch/powerpc/cpu/mpc85xx/start.S
  63. 1 1
      arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
  64. 1 1
      arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
  65. 1 1
      arch/powerpc/cpu/mpc85xx/u-boot.lds
  66. 2 2
      arch/powerpc/cpu/mpc86xx/start.S
  67. 1 1
      arch/powerpc/cpu/mpc86xx/u-boot.lds
  68. 2 2
      arch/powerpc/cpu/mpc8xx/start.S
  69. 2 2
      arch/powerpc/cpu/ppc4xx/start.S
  70. 1 1
      arch/powerpc/cpu/ppc4xx/u-boot.lds
  71. 2 2
      arch/powerpc/lib/board.c
  72. 1 1
      arch/sh/cpu/sh2/u-boot.lds
  73. 1 1
      arch/sh/cpu/sh3/u-boot.lds
  74. 1 1
      arch/sh/cpu/sh4/u-boot.lds
  75. 1 1
      board/BuS/EB+MCF-EV123/u-boot.lds
  76. 1 1
      board/LEOX/elpt860/u-boot.lds
  77. 1 1
      board/LEOX/elpt860/u-boot.lds.debug
  78. 1 1
      board/RPXClassic/u-boot.lds
  79. 1 1
      board/RPXClassic/u-boot.lds.debug
  80. 1 1
      board/RPXlite/u-boot.lds
  81. 1 1
      board/RPXlite/u-boot.lds.debug
  82. 1 1
      board/RPXlite_dw/u-boot.lds
  83. 1 1
      board/RPXlite_dw/u-boot.lds.debug
  84. 1 1
      board/RRvision/u-boot.lds
  85. 1 1
      board/actux1/u-boot.lds
  86. 1 1
      board/actux2/u-boot.lds
  87. 1 1
      board/actux3/u-boot.lds
  88. 1 1
      board/adder/u-boot.lds
  89. 1 1
      board/altera/nios2-generic/u-boot.lds
  90. 1 1
      board/amcc/acadia/u-boot-nand.lds
  91. 1 1
      board/amcc/bamboo/u-boot-nand.lds
  92. 1 1
      board/amcc/canyonlands/u-boot-nand.lds
  93. 1 1
      board/amcc/kilauea/u-boot-nand.lds
  94. 1 1
      board/amcc/sequoia/u-boot-nand.lds
  95. 1 1
      board/amcc/sequoia/u-boot-ram.lds
  96. 1 1
      board/amirix/ap1000/u-boot.lds
  97. 1 1
      board/astro/mcf5373l/u-boot.lds
  98. 1 1
      board/atmel/atngw100/u-boot.lds
  99. 1 1
      board/atmel/atstk1000/u-boot.lds
  100. 1 1
      board/c2mon/u-boot.lds

+ 4 - 0
arch/arm/cpu/arm1136/start.S

@@ -102,6 +102,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm1136/u-boot.lds

@@ -72,11 +72,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 6 - 0
arch/arm/cpu/arm1176/start.S

@@ -121,6 +121,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 /* IRQ stack memory (calculated at run-time) + 8 bytes */
@@ -352,9 +356,11 @@ clbss_l:str	r2, [r0]		/* clear loop...		    */
 	cmp	r0, r1
 	bne	clbss_l
 
+#ifndef CONFIG_NAND_SPL
 	bl coloured_LED_init
 	bl red_LED_on
 #endif
+#endif
 
 /*
  * We are done. Do not return, instead branch to second part of board

+ 3 - 1
arch/arm/cpu/arm1176/u-boot.lds

@@ -61,11 +61,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/arm720t/start.S

@@ -91,6 +91,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm720t/u-boot.lds

@@ -62,11 +62,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 2 - 0
arch/arm/cpu/arm920t/ep93xx/u-boot.lds

@@ -55,5 +55,7 @@ SECTIONS
 	. = ALIGN(4);
 	__bss_start = .;
 	.bss : { *(.bss) }
+	__bss_end__ = .;
+
 	_end = .;
 }

+ 4 - 0
arch/arm/cpu/arm920t/start.S

@@ -87,6 +87,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm920t/u-boot.lds

@@ -71,11 +71,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/arm925t/start.S

@@ -97,6 +97,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm925t/u-boot.lds

@@ -66,11 +66,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/arm926ejs/start.S

@@ -131,6 +131,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm926ejs/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/arm946es/start.S

@@ -103,6 +103,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm946es/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/arm_intcm/start.S

@@ -99,6 +99,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/arm_intcm/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 1 - 0
arch/arm/cpu/armv7/s5p-common/Makefile

@@ -27,6 +27,7 @@ LIB	= $(obj)libs5p-common.o
 
 COBJS-y		+= cpu_info.o
 COBJS-y		+= timer.o
+COBJS-$(CONFIG_PWM)		+= pwm.o
 
 SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS-y) $(SOBJS))

+ 189 - 0
arch/arm/cpu/armv7/s5p-common/pwm.c

@@ -0,0 +1,189 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ *
+ * Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.	 See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <errno.h>
+#include <pwm.h>
+#include <asm/io.h>
+#include <asm/arch/pwm.h>
+#include <asm/arch/clk.h>
+
+int pwm_enable(int pwm_id)
+{
+	const struct s5p_timer *pwm =
+			(struct s5p_timer *)samsung_get_base_timer();
+	unsigned long tcon;
+
+	tcon = readl(&pwm->tcon);
+	tcon |= TCON_START(pwm_id);
+
+	writel(tcon, &pwm->tcon);
+
+	return 0;
+}
+
+void pwm_disable(int pwm_id)
+{
+	const struct s5p_timer *pwm =
+			(struct s5p_timer *)samsung_get_base_timer();
+	unsigned long tcon;
+
+	tcon = readl(&pwm->tcon);
+	tcon &= ~TCON_START(pwm_id);
+
+	writel(tcon, &pwm->tcon);
+}
+
+static unsigned long pwm_calc_tin(int pwm_id, unsigned long freq)
+{
+	unsigned long tin_parent_rate;
+	unsigned int div;
+
+	tin_parent_rate = get_pwm_clk();
+
+	for (div = 2; div <= 16; div *= 2) {
+		if ((tin_parent_rate / (div << 16)) < freq)
+			return tin_parent_rate / div;
+	}
+
+	return tin_parent_rate / 16;
+}
+
+#define NS_IN_HZ (1000000000UL)
+
+int pwm_config(int pwm_id, int duty_ns, int period_ns)
+{
+	const struct s5p_timer *pwm =
+			(struct s5p_timer *)samsung_get_base_timer();
+	unsigned int offset;
+	unsigned long tin_rate;
+	unsigned long tin_ns;
+	unsigned long period;
+	unsigned long tcon;
+	unsigned long tcnt;
+	unsigned long timer_rate_hz;
+	unsigned long tcmp;
+
+	/*
+	 * We currently avoid using 64bit arithmetic by using the
+	 * fact that anything faster than 1GHz is easily representable
+	 * by 32bits.
+	 */
+	if (period_ns > NS_IN_HZ || duty_ns > NS_IN_HZ)
+		return -ERANGE;
+
+	if (duty_ns > period_ns)
+		return -EINVAL;
+
+	period = NS_IN_HZ / period_ns;
+
+	/* Check to see if we are changing the clock rate of the PWM */
+	tin_rate = pwm_calc_tin(pwm_id, period);
+	timer_rate_hz = tin_rate;
+
+	tin_ns = NS_IN_HZ / tin_rate;
+	tcnt = period_ns / tin_ns;
+
+	/* Note, counters count down */
+	tcmp = duty_ns / tin_ns;
+	tcmp = tcnt - tcmp;
+
+	/*
+	 * the pwm hw only checks the compare register after a decrement,
+	 * so the pin never toggles if tcmp = tcnt
+	 */
+	if (tcmp == tcnt)
+		tcmp--;
+
+	if (tcmp < 0)
+		tcmp = 0;
+
+	/* Update the PWM register block. */
+	offset = pwm_id * 3;
+	if (pwm_id < 4) {
+		writel(tcnt, &pwm->tcntb0 + offset);
+		writel(tcmp, &pwm->tcmpb0 + offset);
+	}
+
+	tcon = readl(&pwm->tcon);
+	tcon |= TCON_UPDATE(pwm_id);
+	if (pwm_id < 4)
+		tcon |= TCON_AUTO_RELOAD(pwm_id);
+	else
+		tcon |= TCON4_AUTO_RELOAD;
+	writel(tcon, &pwm->tcon);
+
+	tcon &= ~TCON_UPDATE(pwm_id);
+	writel(tcon, &pwm->tcon);
+
+	return 0;
+}
+
+int pwm_init(int pwm_id, int div, int invert)
+{
+	u32 val;
+	const struct s5p_timer *pwm =
+			(struct s5p_timer *)samsung_get_base_timer();
+	unsigned long timer_rate_hz;
+	unsigned int offset, prescaler;
+
+	/*
+	 * Timer Freq(HZ) =
+	 *	PWM_CLK / { (prescaler_value + 1) * (divider_value) }
+	 */
+
+	val = readl(&pwm->tcfg0);
+	if (pwm_id < 2) {
+		prescaler = PRESCALER_0;
+		val &= ~0xff;
+		val |= (prescaler & 0xff);
+	} else {
+		prescaler = PRESCALER_1;
+		val &= ~(0xff << 8);
+		val |= (prescaler & 0xff) << 8;
+	}
+	writel(val, &pwm->tcfg0);
+	val = readl(&pwm->tcfg1);
+	val &= ~(0xf << MUX_DIV_SHIFT(pwm_id));
+	val |= (div & 0xf) << MUX_DIV_SHIFT(pwm_id);
+	writel(val, &pwm->tcfg1);
+
+	timer_rate_hz = get_pwm_clk() / ((prescaler + 1) *
+			(div + 1));
+
+	timer_rate_hz = timer_rate_hz / 100;
+
+	/* set count value */
+	offset = pwm_id * 3;
+	writel(timer_rate_hz, &pwm->tcntb0 + offset);
+
+	val = readl(&pwm->tcon) & ~(0xf << TCON_OFFSET(pwm_id));
+	if (invert && (pwm_id < 4))
+		val |= TCON_INVERTER(pwm_id);
+	writel(val, &pwm->tcon);
+
+	pwm_enable(pwm_id);
+
+	return 0;
+}

+ 17 - 59
arch/arm/cpu/armv7/s5p-common/timer.c

@@ -27,21 +27,9 @@
 #include <asm/io.h>
 #include <asm/arch/pwm.h>
 #include <asm/arch/clk.h>
+#include <pwm.h>
 
-#define PRESCALER_1		(16 - 1)	/* prescaler of timer 2, 3, 4 */
-#define MUX_DIV_2		1		/* 1/2 period */
-#define MUX_DIV_4		2		/* 1/4 period */
-#define MUX_DIV_8		3		/* 1/8 period */
-#define MUX_DIV_16		4		/* 1/16 period */
-#define MUX4_DIV_SHIFT		16
-
-#define TCON_TIMER4_SHIFT	20
-
-static unsigned long count_value;
-
-/* Internal tick units */
-static unsigned long long timestamp;	/* Monotonic incrementing timer */
-static unsigned long lastdec;		/* Last decremneter snapshot */
+DECLARE_GLOBAL_DATA_PTR;
 
 /* macro to read the 16 bit timer */
 static inline struct s5p_timer *s5p_get_base_timer(void)
@@ -51,41 +39,10 @@ static inline struct s5p_timer *s5p_get_base_timer(void)
 
 int timer_init(void)
 {
-	struct s5p_timer *const timer = s5p_get_base_timer();
-	u32 val;
-
-	/*
-	 * @ PWM Timer 4
-	 * Timer Freq(HZ) =
-	 *	PWM_CLK / { (prescaler_value + 1) * (divider_value) }
-	 */
-
-	/* set prescaler : 16 */
-	/* set divider : 2 */
-	writel((PRESCALER_1 & 0xff) << 8, &timer->tcfg0);
-	writel((MUX_DIV_2 & 0xf) << MUX4_DIV_SHIFT, &timer->tcfg1);
-
-	/* count_value = 2085937.5(HZ) (per 1 sec)*/
-	count_value = get_pwm_clk() / ((PRESCALER_1 + 1) *
-			(MUX_DIV_2 + 1));
-
-	/* count_value / 100 = 20859.375(HZ) (per 10 msec) */
-	count_value = count_value / 100;
-
-	/* set count value */
-	writel(count_value, &timer->tcntb4);
-	lastdec = count_value;
-
-	val = (readl(&timer->tcon) & ~(0x07 << TCON_TIMER4_SHIFT)) |
-		TCON4_AUTO_RELOAD;
-
-	/* auto reload & manual update */
-	writel(val | TCON4_UPDATE, &timer->tcon);
-
-	/* start PWM timer 4 */
-	writel(val | TCON4_START, &timer->tcon);
-
-	timestamp = 0;
+	/* PWM Timer 4 */
+	pwm_init(4, MUX_DIV_2, 0);
+	pwm_config(4, 0, 0);
+	pwm_enable(4);
 
 	return 0;
 }
@@ -105,14 +62,14 @@ unsigned long get_timer(unsigned long base)
 
 void set_timer(unsigned long t)
 {
-	timestamp = t;
+	gd->tbl = t;
 }
 
 /* delay x useconds */
 void __udelay(unsigned long usec)
 {
 	struct s5p_timer *const timer = s5p_get_base_timer();
-	unsigned long tmo, tmp;
+	unsigned long tmo, tmp, count_value;
 
 	count_value = readl(&timer->tcntb4);
 
@@ -137,7 +94,7 @@ void __udelay(unsigned long usec)
 	tmp = get_timer(0);
 
 	/* if setting this fordward will roll time stamp */
-	/* reset "advancing" timestamp to 0, set lastdec value */
+	/* reset "advancing" timestamp to 0, set lastinc value */
 	/* else, set advancing stamp wake up time */
 	if ((tmo + tmp + 1) < tmp)
 		reset_timer_masked();
@@ -154,23 +111,24 @@ void reset_timer_masked(void)
 	struct s5p_timer *const timer = s5p_get_base_timer();
 
 	/* reset time */
-	lastdec = readl(&timer->tcnto4);
-	timestamp = 0;
+	gd->lastinc = readl(&timer->tcnto4);
+	gd->tbl = 0;
 }
 
 unsigned long get_timer_masked(void)
 {
 	struct s5p_timer *const timer = s5p_get_base_timer();
 	unsigned long now = readl(&timer->tcnto4);
+	unsigned long count_value = readl(&timer->tcntb4);
 
-	if (lastdec >= now)
-		timestamp += lastdec - now;
+	if (gd->lastinc >= now)
+		gd->tbl += gd->lastinc - now;
 	else
-		timestamp += lastdec + count_value - now;
+		gd->tbl += gd->lastinc + count_value - now;
 
-	lastdec = now;
+	gd->lastinc = now;
 
-	return timestamp;
+	return gd->tbl;
 }
 
 /*

+ 4 - 0
arch/arm/cpu/armv7/start.S

@@ -79,6 +79,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/armv7/u-boot.lds

@@ -66,11 +66,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/ixp/start.S

@@ -110,6 +110,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/ixp/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/lh7a40x/start.S

@@ -87,6 +87,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/lh7a40x/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/pxa/start.S

@@ -104,6 +104,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/pxa/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/s3c44b0/start.S

@@ -78,6 +78,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/s3c44b0/u-boot.lds

@@ -63,11 +63,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 4 - 0
arch/arm/cpu/sa1100/start.S

@@ -88,6 +88,10 @@ _bss_start_ofs:
 
 .globl _bss_end_ofs
 _bss_end_ofs:
+	.word __bss_end__ - _start
+
+.globl _end_ofs
+_end_ofs:
 	.word _end - _start
 
 #ifdef CONFIG_USE_IRQ

+ 3 - 1
arch/arm/cpu/sa1100/u-boot.lds

@@ -66,11 +66,13 @@ SECTIONS
 		*(.dynsym)
 	}
 
+	_end = .;
+
 	.bss __rel_dyn_start (OVERLAY) : {
 		__bss_start = .;
 		*(.bss)
 		 . = ALIGN(4);
-		_end = .;
+		__bss_end__ = .;
 	}
 
 	/DISCARD/ : { *(.dynstr*) }

+ 3 - 2
arch/arm/include/asm/arch-s5pc1xx/mmc.h

@@ -53,10 +53,11 @@ struct s5p_mmc {
 	unsigned char	res3[0x34];
 	unsigned int	control2;
 	unsigned int	control3;
+	unsigned char	res4[4];
 	unsigned int	control4;
-	unsigned char	res4[0x6e];
+	unsigned char	res5[0x6e];
 	unsigned short	hcver;
-	unsigned char	res5[0xFFF02];
+	unsigned char	res6[0xFFF00];
 };
 
 struct mmc_host {

+ 18 - 5
arch/arm/include/asm/arch-s5pc1xx/pwm.h

@@ -22,12 +22,25 @@
 #ifndef __ASM_ARM_ARCH_PWM_H_
 #define __ASM_ARM_ARCH_PWM_H_
 
-/* Interval mode(Auto Reload) of PWM Timer 4 */
+#define PRESCALER_0		(8 - 1)		/* prescaler of timer 0, 1 */
+#define PRESCALER_1		(16 - 1)	/* prescaler of timer 2, 3, 4 */
+
+/* Divider MUX */
+#define MUX_DIV_1		0		/* 1/1 period */
+#define MUX_DIV_2		1		/* 1/2 period */
+#define MUX_DIV_4		2		/* 1/4 period */
+#define MUX_DIV_8		3		/* 1/8 period */
+#define MUX_DIV_16		4		/* 1/16 period */
+
+#define MUX_DIV_SHIFT(x)	(x * 4)
+
+#define TCON_OFFSET(x)		((x + 1) * (!!x) << 2)
+
+#define TCON_START(x)		(1 << TCON_OFFSET(x))
+#define TCON_UPDATE(x)		(1 << (TCON_OFFSET(x) + 1))
+#define TCON_INVERTER(x)	(1 << (TCON_OFFSET(x) + 2))
+#define TCON_AUTO_RELOAD(x)	(1 << (TCON_OFFSET(x) + 3))
 #define TCON4_AUTO_RELOAD	(1 << 22)
-/* Update TCNTB4 */
-#define TCON4_UPDATE		(1 << 21)
-/* start bit of PWM Timer 4 */
-#define TCON4_START		(1 << 20)
 
 #ifndef __ASSEMBLY__
 struct s5p_timer {

+ 3 - 2
arch/arm/include/asm/arch-s5pc2xx/mmc.h

@@ -53,10 +53,11 @@ struct s5p_mmc {
 	unsigned char	res3[0x34];
 	unsigned int	control2;
 	unsigned int	control3;
+	unsigned char	res4[4];
 	unsigned int	control4;
-	unsigned char	res4[0x6e];
+	unsigned char	res5[0x6e];
 	unsigned short	hcver;
-	unsigned char	res5[0xFF02];
+	unsigned char	res6[0xFF00];
 };
 
 struct mmc_host {

+ 18 - 5
arch/arm/include/asm/arch-s5pc2xx/pwm.h

@@ -22,12 +22,25 @@
 #ifndef __ASM_ARM_ARCH_PWM_H_
 #define __ASM_ARM_ARCH_PWM_H_
 
-/* Interval mode(Auto Reload) of PWM Timer 4 */
+#define PRESCALER_0		(8 - 1)		/* prescaler of timer 0, 1 */
+#define PRESCALER_1		(16 - 1)	/* prescaler of timer 2, 3, 4 */
+
+/* Divider MUX */
+#define MUX_DIV_1		0		/* 1/1 period */
+#define MUX_DIV_2		1		/* 1/2 period */
+#define MUX_DIV_4		2		/* 1/4 period */
+#define MUX_DIV_8		3		/* 1/8 period */
+#define MUX_DIV_16		4		/* 1/16 period */
+
+#define MUX_DIV_SHIFT(x)	(x * 4)
+
+#define TCON_OFFSET(x)		((x + 1) * (!!x) << 2)
+
+#define TCON_START(x)		(1 << TCON_OFFSET(x))
+#define TCON_UPDATE(x)		(1 << (TCON_OFFSET(x) + 1))
+#define TCON_INVERTER(x)	(1 << (TCON_OFFSET(x) + 2))
+#define TCON_AUTO_RELOAD(x)	(1 << (TCON_OFFSET(x) + 3))
 #define TCON4_AUTO_RELOAD	(1 << 22)
-/* Update TCNTB4 */
-#define TCON4_UPDATE		(1 << 21)
-/* start bit of PWM Timer 4 */
-#define TCON4_START		(1 << 20)
 
 #ifndef __ASSEMBLY__
 struct s5p_timer {

+ 1 - 0
arch/arm/include/asm/u-boot-arm.h

@@ -32,6 +32,7 @@
 /* for the following variables, see start.S */
 extern ulong _bss_start_ofs;	/* BSS start relative to _start */
 extern ulong _bss_end_ofs;		/* BSS end relative to _start */
+extern ulong _end_ofs;		/* end of image relative to _start */
 extern ulong IRQ_STACK_START;	/* top of IRQ stack */
 extern ulong FIQ_STACK_START;	/* top of FIQ stack */
 extern ulong _TEXT_BASE;	/* code start */

+ 1 - 1
arch/arm/lib/board.c

@@ -459,7 +459,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
 	gd->flags |= GD_FLG_RELOC;	/* tell others: relocation done */
 
-	monitor_flash_len = _bss_start_ofs;
+	monitor_flash_len = _end_ofs;
 	debug ("monitor flash len: %08lX\n", monitor_flash_len);
 	board_init();	/* Setup chipselects */
 

+ 1 - 1
arch/avr32/cpu/start.S

@@ -244,7 +244,7 @@ relocate_code:
 	/* zero out .bss */
 	mov	r0, 0
 	mov	r1, 0
-	lda.w	r9, _end
+	lda.w	r9, __bss_end__
 	sub	r9, r8
 1:	st.d	r10++, r0
 	sub	r9, 8

+ 1 - 1
arch/avr32/include/asm/sections.h

@@ -27,6 +27,6 @@
 extern char _text[], _etext[];
 extern char _data[], __data_lma[], _edata[], __edata_lma[];
 extern char __got_start[], __got_lma[], __got_end[];
-extern char _end[];
+extern char __bss_end__[];
 
 #endif /* __ASM_AVR32_SECTIONS_H */

+ 2 - 2
arch/avr32/lib/board.c

@@ -118,7 +118,7 @@ static int display_banner (void)
 	printf ("\n\n%s\n\n", version_string);
 	printf ("U-Boot code: %08lx -> %08lx  data: %08lx -> %08lx\n",
 		(unsigned long)_text, (unsigned long)_etext,
-		(unsigned long)_data, (unsigned long)_end);
+		(unsigned long)_data, (unsigned long)__bss_end__);
 	return 0;
 }
 
@@ -190,7 +190,7 @@ void board_init_f(ulong board_type)
 	 *  - stack
 	 */
 	addr = CONFIG_SYS_SDRAM_BASE + sdram_size;
-	monitor_len = _end - _text;
+	monitor_len = __bss_end__ - _text;
 
 	/*
 	 * Reserve memory for u-boot code, data and bss.

+ 2 - 2
arch/m68k/lib/board.c

@@ -76,7 +76,7 @@ static char *failed = "*** failed ***\n";
 #include <environment.h>
 
 extern ulong __init_end;
-extern ulong _end;
+extern ulong __bss_end__;
 
 extern	void timer_init(void);
 
@@ -252,7 +252,7 @@ board_init_f (ulong bootflag)
 	 *	- monitor code
 	 *	- board info struct
 	 */
-	len = (ulong)&_end - CONFIG_SYS_MONITOR_BASE;
+	len = (ulong)&__bss_end__ - CONFIG_SYS_MONITOR_BASE;
 
 	addr = CONFIG_SYS_SDRAM_BASE + gd->ram_size;
 

+ 3 - 3
arch/nios2/cpu/start.S

@@ -100,12 +100,12 @@ _cur:	movhi	r5, %hi(_cur - _start)
 3:
 
 	/* ZERO BSS/SBSS -- bss and sbss are assumed to be adjacent
-	 * and between __bss_start and _end.
+	 * and between __bss_start and __bss_end__.
 	 */
 	 movhi	r5, %hi(__bss_start)
 	 ori	r5, r5, %lo(__bss_start)
-	 movhi	r6, %hi(_end)
-	 ori	r6, r6, %lo(_end)
+	 movhi	r6, %hi(__bss_end__)
+	 ori	r6, r6, %lo(__bss_end__)
 	 beq	r5, r6, 5f
 
 4:	stwio	r0, 0(r5)

+ 1 - 1
arch/nios2/cpu/u-boot.lds

@@ -103,7 +103,7 @@ SECTIONS
 	  *(.scommon)
 	}
 	. = ALIGN(4);
-	_end = .;
+	__bss_end__ = .;
 	PROVIDE (end = .);
 
 	/* DEBUG -- symbol table, string table, etc. etc.

+ 2 - 2
arch/powerpc/cpu/74xx_7xx/start.S

@@ -77,7 +77,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -722,7 +722,7 @@ in_ram:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/74xx_7xx/u-boot.lds

@@ -87,6 +87,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc512x/start.S

@@ -79,7 +79,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -626,7 +626,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/mpc512x/u-boot.lds

@@ -82,7 +82,7 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }
 ENTRY(_start)

+ 2 - 2
arch/powerpc/cpu/mpc5xx/start.S

@@ -70,7 +70,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -466,7 +466,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 	cmplw	0, r3, r4
 	beq	6f
 

+ 1 - 1
arch/powerpc/cpu/mpc5xx/u-boot.lds

@@ -91,7 +91,7 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
   . = env_start;
   .ppcenv :

+ 2 - 2
arch/powerpc/cpu/mpc5xxx/start.S

@@ -70,7 +70,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -681,7 +681,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/mpc5xxx/u-boot-customlayout.lds

@@ -91,6 +91,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
arch/powerpc/cpu/mpc5xxx/u-boot.lds

@@ -85,6 +85,6 @@ SECTIONS
    *(.sbss*)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc8220/start.S

@@ -69,7 +69,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -654,7 +654,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/mpc8220/u-boot.lds

@@ -84,6 +84,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc824x/start.S

@@ -77,7 +77,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 #if defined(CONFIG_FADS)
 	GOT_ENTRY(environment)
@@ -596,7 +596,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/mpc824x/u-boot.lds

@@ -85,6 +85,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc8260/start.S

@@ -70,7 +70,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 #if defined(CONFIG_HYMOD)
 	GOT_ENTRY(environment)
@@ -927,7 +927,7 @@ clear_bss:
 	 */
 	lwz	r4,GOT(environment)
 #else
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 #endif
 
 	cmplw	0, r3, r4

+ 1 - 1
arch/powerpc/cpu/mpc8260/u-boot.lds

@@ -84,6 +84,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc83xx/start.S

@@ -72,7 +72,7 @@
 	START_GOT
 	GOT_ENTRY(_GOT2_TABLE_)
 	GOT_ENTRY(__bss_start)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 
 #ifndef CONFIG_NAND_SPL
 	GOT_ENTRY(_FIXUP_TABLE_)
@@ -977,7 +977,7 @@ clear_bss:
 	 */
 	lwz	r4,GOT(environment)
 #else
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 #endif
 
 	cmplw	0, r3, r4

+ 1 - 1
arch/powerpc/cpu/mpc83xx/u-boot.lds

@@ -83,7 +83,7 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }
 ENTRY(_start)

+ 2 - 2
arch/powerpc/cpu/mpc85xx/start.S

@@ -66,7 +66,7 @@
 #endif
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -1050,7 +1050,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0,r3,r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/mpc85xx/u-boot-nand.lds

@@ -101,6 +101,6 @@ SECTIONS
   } :bss
 
   . = ALIGN(4);
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds

@@ -62,6 +62,6 @@ SECTIONS
 		*(.sbss*)
 		*(.bss*)
 	}
-	_end = .;
+	__bss_end__ = .;
 }
 ASSERT(__init_end <= 0xfff00ffc, "NAND bootstrap too big");

+ 1 - 1
arch/powerpc/cpu/mpc85xx/u-boot.lds

@@ -125,6 +125,6 @@ SECTIONS
   } :bss
 
   . = ALIGN(4);
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc86xx/start.S

@@ -66,7 +66,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -740,7 +740,7 @@ in_ram:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 1 - 1
arch/powerpc/cpu/mpc86xx/u-boot.lds

@@ -88,6 +88,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/cpu/mpc8xx/start.S

@@ -77,7 +77,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 
@@ -597,7 +597,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	6f

+ 2 - 2
arch/powerpc/cpu/ppc4xx/start.S

@@ -248,7 +248,7 @@
 	GOT_ENTRY(transfer_to_handler)
 
 	GOT_ENTRY(__init_end)
-	GOT_ENTRY(_end)
+	GOT_ENTRY(__bss_end__)
 	GOT_ENTRY(__bss_start)
 	END_GOT
 #endif /* CONFIG_NAND_SPL */
@@ -1624,7 +1624,7 @@ clear_bss:
 	 * Now clear BSS segment
 	 */
 	lwz	r3,GOT(__bss_start)
-	lwz	r4,GOT(_end)
+	lwz	r4,GOT(__bss_end__)
 
 	cmplw	0, r3, r4
 	beq	7f

+ 1 - 1
arch/powerpc/cpu/ppc4xx/u-boot.lds

@@ -140,6 +140,6 @@ SECTIONS
   } :bss
 
   . = ALIGN(4);
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 2 - 2
arch/powerpc/lib/board.c

@@ -123,7 +123,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #endif
 
 extern ulong __init_end;
-extern ulong _end;
+extern ulong __bss_end__;
 ulong monitor_flash_len;
 
 #if defined(CONFIG_CMD_BEDBUG)
@@ -403,7 +403,7 @@ void board_init_f (ulong bootflag)
 	 *  - monitor code
 	 *  - board info struct
 	 */
-	len = (ulong)&_end - CONFIG_SYS_MONITOR_BASE;
+	len = (ulong)&__bss_end__ - CONFIG_SYS_MONITOR_BASE;
 
 	/*
 	 * Subtract specified amount of memory to hide so that it won't

+ 1 - 1
arch/sh/cpu/sh2/u-boot.lds

@@ -91,5 +91,5 @@ SECTIONS
 	}
 	PROVIDE (bss_end = .);
 
-	PROVIDE (_end = .);
+	PROVIDE (__bss_end__ = .);
 }

+ 1 - 1
arch/sh/cpu/sh3/u-boot.lds

@@ -98,5 +98,5 @@ SECTIONS
 	}
 	PROVIDE (bss_end = .);
 
-	PROVIDE (_end = .);
+	PROVIDE (__bss_end__ = .);
 }

+ 1 - 1
arch/sh/cpu/sh4/u-boot.lds

@@ -95,5 +95,5 @@ SECTIONS
 	}
 	PROVIDE (bss_end = .);
 
-	PROVIDE (_end = .);
+	PROVIDE (__bss_end__ = .);
 }

+ 1 - 1
board/BuS/EB+MCF-EV123/u-boot.lds

@@ -134,6 +134,6 @@ SECTIONS
    . = ALIGN(4);
    _ebss = .;
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/LEOX/elpt860/u-boot.lds

@@ -109,6 +109,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/LEOX/elpt860/u-boot.lds.debug

@@ -134,6 +134,6 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RPXClassic/u-boot.lds

@@ -90,6 +90,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RPXClassic/u-boot.lds.debug

@@ -130,6 +130,6 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RPXlite/u-boot.lds

@@ -90,6 +90,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RPXlite/u-boot.lds.debug

@@ -130,6 +130,6 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RPXlite_dw/u-boot.lds

@@ -90,6 +90,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RPXlite_dw/u-boot.lds.debug

@@ -130,6 +130,6 @@ SECTIONS
    *(.bss)
    *(COMMON)
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/RRvision/u-boot.lds

@@ -95,6 +95,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/actux1/u-boot.lds

@@ -66,5 +66,5 @@ SECTIONS
 		*(.bss)
 		. = ALIGN(4);
 	}
-	_end =.;
+	__bss_end__ =.;
 }

+ 1 - 1
board/actux2/u-boot.lds

@@ -71,5 +71,5 @@ SECTIONS
 		*(.bss)
 		. = ALIGN(4);
 	}
-	_end =.;
+	__bss_end__ =.;
 }

+ 1 - 1
board/actux3/u-boot.lds

@@ -71,5 +71,5 @@ SECTIONS
 		*(.bss)
 		. = ALIGN(4);
 	}
-	_end =.;
+	__bss_end__ =.;
 }

+ 1 - 1
board/adder/u-boot.lds

@@ -86,7 +86,7 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }
 ENTRY(_start)

+ 1 - 1
board/altera/nios2-generic/u-boot.lds

@@ -104,7 +104,7 @@ SECTIONS
 	  *(.scommon)
 	}
 	. = ALIGN(4);
-	_end = .;
+	__bss_end__ = .;
 	PROVIDE (end = .);
 
 	/* DEBUG -- symbol table, string table, etc. etc.

+ 1 - 1
board/amcc/acadia/u-boot-nand.lds

@@ -98,6 +98,6 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/amcc/bamboo/u-boot-nand.lds

@@ -99,6 +99,6 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/amcc/canyonlands/u-boot-nand.lds

@@ -99,6 +99,6 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/amcc/kilauea/u-boot-nand.lds

@@ -98,6 +98,6 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/amcc/sequoia/u-boot-nand.lds

@@ -99,6 +99,6 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/amcc/sequoia/u-boot-ram.lds

@@ -90,6 +90,6 @@ SECTIONS
    . = ALIGN(4);
   }
 
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/amirix/ap1000/u-boot.lds

@@ -90,6 +90,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/astro/mcf5373l/u-boot.lds

@@ -137,6 +137,6 @@ SECTIONS
    . = ALIGN(4);
    _ebss = .;
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

+ 1 - 1
board/atmel/atngw100/u-boot.lds

@@ -68,5 +68,5 @@ SECTIONS
 		*(.bss.*)
 	}
 	. = ALIGN(8);
-	_end = .;
+	__bss_end__ = .;
 }

+ 1 - 1
board/atmel/atstk1000/u-boot.lds

@@ -68,5 +68,5 @@ SECTIONS
 		*(.bss.*)
 	}
 	. = ALIGN(8);
-	_end = .;
+	__bss_end__ = .;
 }

+ 1 - 1
board/c2mon/u-boot.lds

@@ -98,6 +98,6 @@ SECTIONS
    *(COMMON)
    . = ALIGN(4);
   }
-  _end = . ;
+  __bss_end__ = . ;
   PROVIDE (end = .);
 }

部分文件因为文件数量过多而无法显示