U-Boot Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support
@ 2012-08-01  4:13 Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 01/13] README: fix references to config_cmd_default.h Stephen Warren
                   ` (13 more replies)
  0 siblings, 14 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

This series adds basic support for the Raspberry Pi ARM board.

v2:
* Add README config_cmd_default.h documentation fix.
* Use <> not "" for include of config_cmd_default.h.
* Squash together 3 patches related to enabling booting a Linux kernel.
* Minor rpi_b.h order changes in order to drop later cleanup patch.
* Merged together 2 patch series of mine, and the GPIO series from Vikram.

Stephen Warren (11):
  README: fix references to config_cmd_default.h
  ARM: add basic support for the Broadcom BCM2835 SoC
  ARM: bcm2835: add Raspberry Pi model B board
  ARM: arm1176: enable instruction cache in arch_cpu_init()
  ARM: rpi_b: enable CONFIG_ARCH_CPU_INIT for icache
  ARM: rpi_b: define CONFIG_MACH_TYPE
  ARM: rpi_b: include config_cmd_default.h
  ARM: rpi_b: enable booting the Linux kernel
  ARM: rpi_b: drop RAM size to 128M
  ARM: rpi_b: move stack to top of RAM
  ARM: bcm2835: implement reset using watchdog

Vikram Narayanan (2):
  gpio: bcm2835: Add GPIO driver
  rbpi: Add BCM2835 GPIO driver for raspberry pi

 MAINTAINERS                                  |    4 +
 README                                       |    4 +-
 arch/arm/cpu/arm1176/bcm2835/Makefile        |   37 +++++++++
 arch/arm/cpu/arm1176/bcm2835/config.mk       |   19 +++++
 arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S |   19 +++++
 arch/arm/cpu/arm1176/bcm2835/reset.c         |   35 +++++++++
 arch/arm/cpu/arm1176/bcm2835/timer.c         |   55 +++++++++++++
 arch/arm/cpu/arm1176/cpu.c                   |    7 ++
 arch/arm/include/asm/arch-bcm2835/gpio.h     |   66 ++++++++++++++++
 arch/arm/include/asm/arch-bcm2835/timer.h    |   37 +++++++++
 arch/arm/include/asm/arch-bcm2835/wdog.h     |   37 +++++++++
 board/raspberrypi/rpi_b/Makefile             |   34 +++++++++
 board/raspberrypi/rpi_b/rpi_b.c              |   34 +++++++++
 boards.cfg                                   |    1 +
 drivers/gpio/Makefile                        |    1 +
 drivers/gpio/bcm2835_gpio.c                  |   90 ++++++++++++++++++++++
 include/configs/rpi_b.h                      |  106 ++++++++++++++++++++++++++
 17 files changed, 584 insertions(+), 2 deletions(-)
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/Makefile
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/config.mk
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/reset.c
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/timer.c
 create mode 100644 arch/arm/include/asm/arch-bcm2835/gpio.h
 create mode 100644 arch/arm/include/asm/arch-bcm2835/timer.h
 create mode 100644 arch/arm/include/asm/arch-bcm2835/wdog.h
 create mode 100644 board/raspberrypi/rpi_b/Makefile
 create mode 100644 board/raspberrypi/rpi_b/rpi_b.c
 create mode 100644 drivers/gpio/bcm2835_gpio.c
 create mode 100644 include/configs/rpi_b.h

-- 
1.7.9.5

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 01/13] README: fix references to config_cmd_default.h
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 02/13] ARM: add basic support for the Broadcom BCM2835 SoC Stephen Warren
                   ` (12 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

All usage of config_cmd_default.h uses <> for the include statement.
Update the README to do the same, rather than using "".

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: New patch
---
 README |    4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README b/README
index dac46f3..a7deaf4 100644
--- a/README
+++ b/README
@@ -744,8 +744,8 @@ The following options need to be configured:
 - Monitor Functions:
 		Monitor commands can be included or excluded
 		from the build by using the #include files
-		"config_cmd_all.h" and #undef'ing unwanted
-		commands, or using "config_cmd_default.h"
+		<config_cmd_all.h> and #undef'ing unwanted
+		commands, or using <config_cmd_default.h>
 		and augmenting with additional #define's
 		for wanted commands.
 
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 02/13] ARM: add basic support for the Broadcom BCM2835 SoC
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 01/13] README: fix references to config_cmd_default.h Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board Stephen Warren
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

This SoC is used in the Raspberry Pi, for example.

Initial support is enough to boot to a serial console, and execute a
minimal set of U-Boot commands. No drivers are implemented. For more
details, see http://www.broadcom.com/products/BCM2835 or
http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
 arch/arm/cpu/arm1176/bcm2835/Makefile        |   37 +++++++++++++++++
 arch/arm/cpu/arm1176/bcm2835/config.mk       |   19 +++++++++
 arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S |   19 +++++++++
 arch/arm/cpu/arm1176/bcm2835/reset.c         |   27 +++++++++++++
 arch/arm/cpu/arm1176/bcm2835/timer.c         |   55 ++++++++++++++++++++++++++
 arch/arm/include/asm/arch-bcm2835/timer.h    |   37 +++++++++++++++++
 6 files changed, 194 insertions(+)
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/Makefile
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/config.mk
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/reset.c
 create mode 100644 arch/arm/cpu/arm1176/bcm2835/timer.c
 create mode 100644 arch/arm/include/asm/arch-bcm2835/timer.h

diff --git a/arch/arm/cpu/arm1176/bcm2835/Makefile b/arch/arm/cpu/arm1176/bcm2835/Makefile
new file mode 100644
index 0000000..4ea6d6b
--- /dev/null
+++ b/arch/arm/cpu/arm1176/bcm2835/Makefile
@@ -0,0 +1,37 @@
+#
+# 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
+# version 2 as published by the Free Software Foundation.
+#
+# 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.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(SOC).o
+
+SOBJS	:= lowlevel_init.o
+COBJS	:= reset.o timer.o
+
+SRCS	:= $(SOBJS:.o=.c) $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS))
+
+all:	$(obj).depend $(LIB)
+
+$(LIB):	$(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/arm1176/bcm2835/config.mk b/arch/arm/cpu/arm1176/bcm2835/config.mk
new file mode 100644
index 0000000..b87ce24
--- /dev/null
+++ b/arch/arm/cpu/arm1176/bcm2835/config.mk
@@ -0,0 +1,19 @@
+#
+# (C) Copyright 2012 Stephen Warren
+#
+# 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
+# version 2 as published by the Free Software Foundation.
+#
+# 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.
+
+# Don't attempt to override the target CPU/ABI options;
+# the Raspberry Pi toolchain does the right thing by default.
+PLATFORM_RELFLAGS := $(filter-out -msoft-float,$(PLATFORM_RELFLAGS))
+PLATFORM_CPPFLAGS := $(filter-out -march=armv5t,$(PLATFORM_CPPFLAGS))
diff --git a/arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S b/arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S
new file mode 100644
index 0000000..c7b0843
--- /dev/null
+++ b/arch/arm/cpu/arm1176/bcm2835/lowlevel_init.S
@@ -0,0 +1,19 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+.globl lowlevel_init
+lowlevel_init:
+	mov	pc, lr
diff --git a/arch/arm/cpu/arm1176/bcm2835/reset.c b/arch/arm/cpu/arm1176/bcm2835/reset.c
new file mode 100644
index 0000000..69c9577
--- /dev/null
+++ b/arch/arm/cpu/arm1176/bcm2835/reset.c
@@ -0,0 +1,27 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#include <common.h>
+#include <asm/io.h>
+
+void reset_cpu(ulong addr)
+{
+	/*
+	 * We should probably use the WDT module here, but an unaligned
+	 * access will do the trick for now.
+	 */
+	readl(1);
+}
diff --git a/arch/arm/cpu/arm1176/bcm2835/timer.c b/arch/arm/cpu/arm1176/bcm2835/timer.c
new file mode 100644
index 0000000..d232d7e
--- /dev/null
+++ b/arch/arm/cpu/arm1176/bcm2835/timer.c
@@ -0,0 +1,55 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/timer.h>
+
+int timer_init(void)
+{
+	return 0;
+}
+
+ulong get_timer(ulong base)
+{
+	struct bcm2835_timer_regs *regs =
+		(struct bcm2835_timer_regs *)BCM2835_TIMER_PHYSADDR;
+
+	return readl(&regs->clo) - base;
+}
+
+unsigned long long get_ticks(void)
+{
+	return get_timer(0);
+}
+
+ulong get_tbclk(void)
+{
+	return CONFIG_SYS_HZ;
+}
+
+void __udelay(unsigned long usec)
+{
+	ulong endtime;
+	signed long diff;
+
+	endtime = get_timer(0) + usec;
+
+	do {
+		ulong now = get_timer(0);
+		diff = endtime - now;
+	} while (diff >= 0);
+}
diff --git a/arch/arm/include/asm/arch-bcm2835/timer.h b/arch/arm/include/asm/arch-bcm2835/timer.h
new file mode 100644
index 0000000..30c70e0
--- /dev/null
+++ b/arch/arm/include/asm/arch-bcm2835/timer.h
@@ -0,0 +1,37 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#ifndef _BCM2835_TIMER_H
+#define _BCM2835_TIMER_H
+
+#define BCM2835_TIMER_PHYSADDR	0x20003000
+
+struct bcm2835_timer_regs {
+	u32 cs;
+	u32 clo;
+	u32 chi;
+	u32 c0;
+	u32 c1;
+	u32 c2;
+	u32 c3;
+};
+
+#define BCM2835_TIMER_CS_M3	(1 << 3)
+#define BCM2835_TIMER_CS_M2	(1 << 2)
+#define BCM2835_TIMER_CS_M1	(1 << 1)
+#define BCM2835_TIMER_CS_M0	(1 << 0)
+
+#endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 01/13] README: fix references to config_cmd_default.h Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 02/13] ARM: add basic support for the Broadcom BCM2835 SoC Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01 16:19   ` Tom Rini
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 04/13] ARM: arm1176: enable instruction cache in arch_cpu_init() Stephen Warren
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

The Raspberry Pi model B uses the BCM2835 SoC, has 256MB of RAM, contains
an SMSC 9512 USB LAN/Hub chip, and various IO connectors. For more details,
see http://www.raspberrypi.org/.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: Re-order defines slightly to drop a later cleanup patch.
---
 MAINTAINERS                      |    4 ++
 board/raspberrypi/rpi_b/Makefile |   34 ++++++++++++++++
 board/raspberrypi/rpi_b/rpi_b.c  |   32 +++++++++++++++
 boards.cfg                       |    1 +
 include/configs/rpi_b.h          |   80 ++++++++++++++++++++++++++++++++++++++
 5 files changed, 151 insertions(+)
 create mode 100644 board/raspberrypi/rpi_b/Makefile
 create mode 100644 board/raspberrypi/rpi_b/rpi_b.c
 create mode 100644 include/configs/rpi_b.h

diff --git a/MAINTAINERS b/MAINTAINERS
index fd0c65c..abe621e 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -928,6 +928,10 @@ Stephen Warren <swarren@nvidia.com>
 	trimslice	Tegra2 (ARM7 & A9 Dual Core)
 	whistler	Tegra2 (ARM7 & A9 Dual Core)
 
+Stephen Warren <swarren@wwwdotorg.org>
+
+	rpi_b		BCM2835 (ARM1176)
+
 Thomas Weber <weber@corscience.de>
 
 	devkit8000	ARM ARMV7 (OMAP3530 SoC)
diff --git a/board/raspberrypi/rpi_b/Makefile b/board/raspberrypi/rpi_b/Makefile
new file mode 100644
index 0000000..9d0c377
--- /dev/null
+++ b/board/raspberrypi/rpi_b/Makefile
@@ -0,0 +1,34 @@
+#
+# 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
+# version 2 as published by the Free Software Foundation.
+#
+# 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.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(BOARD).o
+
+COBJS	:= $(BOARD).o
+
+SRCS	:= $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS))
+
+$(LIB):	$(obj).depend $(OBJS)
+	$(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c
new file mode 100644
index 0000000..f39440f
--- /dev/null
+++ b/board/raspberrypi/rpi_b/rpi_b.c
@@ -0,0 +1,32 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#include <common.h>
+#include <asm/global_data.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int dram_init(void)
+{
+	gd->ram_size = SZ_256M;
+
+	return 0;
+}
+
+int board_init(void)
+{
+	return 0;
+}
diff --git a/boards.cfg b/boards.cfg
index 2d36d83..7a88eb9 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -48,6 +48,7 @@ mx35pdk                      arm         arm1136     -                   freesca
 apollon			     arm	 arm1136     apollon		 -	        omap24xx
 omap2420h4                   arm         arm1136     -                   ti             omap24xx
 tnetv107x_evm                arm         arm1176     tnetv107xevm        ti             tnetv107x
+rpi_b                        arm         arm1176     rpi_b               raspberrypi    bcm2835
 integratorap_cm720t          arm         arm720t     integrator          armltd         -           integratorap:CM720T
 integratorap_cm920t          arm         arm920t     integrator          armltd         -           integratorap:CM920T
 integratorcp_cm920t          arm         arm920t     integrator          armltd         -           integratorcp:CM920T
diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
new file mode 100644
index 0000000..28e5510
--- /dev/null
+++ b/include/configs/rpi_b.h
@@ -0,0 +1,80 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <asm/sizes.h>
+
+/* Architecture, CPU, etc.*/
+#define CONFIG_ARM1176
+#define CONFIG_BCM2835
+
+/* Timer */
+#define CONFIG_SYS_HZ			1000000
+
+/* Memory layout */
+#define CONFIG_NR_DRAM_BANKS		1
+#define CONFIG_SYS_SDRAM_BASE		0x00000000
+#define CONFIG_SYS_TEXT_BASE		0x00008000
+#define CONFIG_SYS_UBOOT_BASE		CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_INIT_RAM_SIZE	SZ_4K
+#define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + \
+					 CONFIG_SYS_INIT_RAM_SIZE - \
+					 GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_MALLOC_LEN		SZ_4M
+#define CONFIG_SYS_MEMTEST_START	0x00100000
+#define CONFIG_SYS_MEMTEST_END		0x00200000
+
+/* Flash */
+#define CONFIG_SYS_NO_FLASH
+
+/* Devices */
+/* None yet */
+
+/* Console UART */
+#define CONFIG_PL011_SERIAL
+#define CONFIG_PL011_CLOCK		3000000
+#define CONFIG_PL01x_PORTS		{ (void *)0x20201000 }
+#define CONFIG_CONS_INDEX		0
+#define CONFIG_BAUDRATE			115200
+#define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 }
+
+/* Console configuration */
+#define CONFIG_SYS_CBSIZE		1024
+#define CONFIG_SYS_PBSIZE		(CONFIG_SYS_CBSIZE +		\
+					 sizeof(CONFIG_SYS_PROMPT) + 16)
+
+/* Environment */
+#define CONFIG_ENV_SIZE			SZ_16K
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_SYS_LOAD_ADDR		0x1000000
+
+/* Shell */
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_MAXARGS		8
+#define CONFIG_SYS_PROMPT		"U-Boot> "
+#define CONFIG_SYS_PROMPT_HUSH_PS2	"> "
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_COMMAND_HISTORY
+#define CONFIG_AUTO_COMPLETE
+
+/* Commands */
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MISC
+
+#endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 04/13] ARM: arm1176: enable instruction cache in arch_cpu_init()
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (2 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 05/13] ARM: rpi_b: enable CONFIG_ARCH_CPU_INIT for icache Stephen Warren
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

Note that this affects all users of the ARM1176 CPU that enable
CONFIG_ARCH_CPU_INIT, not just the BCM2835 SoC, potentially such as
tnetv107x.

Cc: Cyril Chemparathy <cyril@ti.com>
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
 arch/arm/cpu/arm1176/cpu.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/arm/cpu/arm1176/cpu.c b/arch/arm/cpu/arm1176/cpu.c
index c0fd114..532a90b 100644
--- a/arch/arm/cpu/arm1176/cpu.c
+++ b/arch/arm/cpu/arm1176/cpu.c
@@ -65,3 +65,10 @@ static void cache_flush (void)
 	/* mem barrier to sync things */
 	asm ("mcr p15, 0, %0, c7, c10, 4": :"r" (0));
 }
+
+int arch_cpu_init(void)
+{
+	icache_enable();
+
+	return 0;
+}
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 05/13] ARM: rpi_b: enable CONFIG_ARCH_CPU_INIT for icache
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (3 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 04/13] ARM: arm1176: enable instruction cache in arch_cpu_init() Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 06/13] ARM: rpi_b: define CONFIG_MACH_TYPE Stephen Warren
                   ` (8 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

This causes arch_cpu_init() to be called, which enables the icache.

Extracted from work by Oleksandr Tymoshenko <gonzo@bluezbox.com>.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
 include/configs/rpi_b.h |    1 +
 1 file changed, 1 insertion(+)

diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 28e5510..9020d80 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -22,6 +22,7 @@
 /* Architecture, CPU, etc.*/
 #define CONFIG_ARM1176
 #define CONFIG_BCM2835
+#define CONFIG_ARCH_CPU_INIT
 
 /* Timer */
 #define CONFIG_SYS_HZ			1000000
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 06/13] ARM: rpi_b: define CONFIG_MACH_TYPE
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (4 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 05/13] ARM: rpi_b: enable CONFIG_ARCH_CPU_INIT for icache Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 07/13] ARM: rpi_b: include config_cmd_default.h Stephen Warren
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

Use MACH_TYPE_BCM2708 as the Linux machine type for the Raspberry Pi.

The Raspberry Pi actually uses a BCM2835. However, the 2835 this is
apparently a SKU in a series for which the BCM2708 is the first or perhaps
primary version, such that the 2708 name has historically been used for
this purpose.

Extracted from work by Oleksandr Tymoshenko <gonzo@bluezbox.com>.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
 include/configs/rpi_b.h |    5 +++++
 1 file changed, 5 insertions(+)

diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 9020d80..0a3681d 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -23,6 +23,11 @@
 #define CONFIG_ARM1176
 #define CONFIG_BCM2835
 #define CONFIG_ARCH_CPU_INIT
+/*
+ * 2835 is a SKU in a series for which the 2708 is the first or primary SoC,
+ * so 2708 has historically been used rather than a dedicated 2835 ID.
+ */
+#define CONFIG_MACH_TYPE		MACH_TYPE_BCM2708
 
 /* Timer */
 #define CONFIG_SYS_HZ			1000000
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 07/13] ARM: rpi_b: include config_cmd_default.h
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (5 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 06/13] ARM: rpi_b: define CONFIG_MACH_TYPE Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 08/13] ARM: rpi_b: enable booting the Linux kernel Stephen Warren
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

This enables a more typical default set of commands. Remove explicit
enables for commands already in the default list.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: Use <> not "" for #include of config_cmd_default.h
---
 include/configs/rpi_b.h |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 0a3681d..f34cc03 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -80,7 +80,11 @@
 #define CONFIG_AUTO_COMPLETE
 
 /* Commands */
-#define CONFIG_CMD_MEMORY
-#define CONFIG_CMD_MISC
+#include <config_cmd_default.h>
+/* Some things don't make sense on this HW or yet */
+#undef CONFIG_CMD_FPGA
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_NFS
+#undef CONFIG_CMD_SAVEENV
 
 #endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 08/13] ARM: rpi_b: enable booting the Linux kernel
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (6 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 07/13] ARM: rpi_b: include config_cmd_default.h Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 09/13] ARM: rpi_b: drop RAM size to 128M Stephen Warren
                   ` (5 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

CONFIG_OF_LIBFDT allows bootm/bootz to pass a device tree to the kernel.

Set bi_boot_params to define where ATAGs will be written
(extracted from work by Oleksandr Tymoshenko <gonzo@bluezbox.com>).

Add ATAG support for bootm/bootz. Newer kernels use device tree, so this
isn't that useful. However, old kernels all use board files, so this
might still see some use.

Enable bootz command to allow booting a zImage directly.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: Squashed the following commits into one:
  ARM: rpi_b: add ATAG support for bootm/bootz
  ARM: rpi_b: set bi_boot_params
  ARM: rpi_b: enable CONFIG_OF_LIBFDT
  ARM: rpi_b: enabled bootz command
---
 board/raspberrypi/rpi_b/rpi_b.c |    2 ++
 include/configs/rpi_b.h         |    8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c
index f39440f..26df74b 100644
--- a/board/raspberrypi/rpi_b/rpi_b.c
+++ b/board/raspberrypi/rpi_b/rpi_b.c
@@ -28,5 +28,7 @@ int dram_init(void)
 
 int board_init(void)
 {
+	gd->bd->bi_boot_params = 0x100;
+
 	return 0;
 }
diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index f34cc03..9c96d0e 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -81,10 +81,18 @@
 
 /* Commands */
 #include <config_cmd_default.h>
+#define CONFIG_CMD_BOOTZ
 /* Some things don't make sense on this HW or yet */
 #undef CONFIG_CMD_FPGA
 #undef CONFIG_CMD_NET
 #undef CONFIG_CMD_NFS
 #undef CONFIG_CMD_SAVEENV
 
+/* Device tree support for bootm/bootz */
+#define CONFIG_OF_LIBFDT
+/* ATAGs support for bootm/bootz */
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_INITRD_TAG
+
 #endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 09/13] ARM: rpi_b: drop RAM size to 128M
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (7 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 08/13] ARM: rpi_b: enable booting the Linux kernel Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 10/13] ARM: rpi_b: move stack to top of RAM Stephen Warren
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

The board really has 256M. However, the VC (VideoCore co-processor) shares
the RAM, and uses a configurable portion at the top. We tell U-Boot that a
smaller amount of RAM is present in order to avoid stomping on the area
the VC uses.

Extracted from work by Oleksandr Tymoshenko <gonzo@bluezbox.com>.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: Modified location new define was inserted, in order to drop a later
    cleanup patch.
---
 board/raspberrypi/rpi_b/rpi_b.c |    2 +-
 include/configs/rpi_b.h         |    7 +++++++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/board/raspberrypi/rpi_b/rpi_b.c b/board/raspberrypi/rpi_b/rpi_b.c
index 26df74b..688b0aa 100644
--- a/board/raspberrypi/rpi_b/rpi_b.c
+++ b/board/raspberrypi/rpi_b/rpi_b.c
@@ -21,7 +21,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int dram_init(void)
 {
-	gd->ram_size = SZ_256M;
+	gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
 
 	return 0;
 }
diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 9c96d0e..73482d9 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -37,6 +37,13 @@
 #define CONFIG_SYS_SDRAM_BASE		0x00000000
 #define CONFIG_SYS_TEXT_BASE		0x00008000
 #define CONFIG_SYS_UBOOT_BASE		CONFIG_SYS_TEXT_BASE
+/*
+ * The board really has 256M. However, the VC (VideoCore co-processor) shares
+ * the RAM, and uses a configurable portion at the top. We tell U-Boot that a
+ * smaller amount of RAM is present in order to avoid stomping on the area
+ * the VC uses.
+ */
+#define CONFIG_SYS_SDRAM_SIZE		SZ_128M
 #define CONFIG_SYS_INIT_RAM_SIZE	SZ_4K
 #define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + \
 					 CONFIG_SYS_INIT_RAM_SIZE - \
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 10/13] ARM: rpi_b: move stack to top of RAM
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (8 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 09/13] ARM: rpi_b: drop RAM size to 128M Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 11/13] ARM: bcm2835: implement reset using watchdog Stephen Warren
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

Move the top-of-stack from 32k to near the top of RAM. This leaves the
bottom of RAM free for ATAGs, or U-Boot scripts to use as they see fit.

Extracted from work by Oleksandr Tymoshenko <gonzo@bluezbox.com>.

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
 include/configs/rpi_b.h |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 73482d9..33169d3 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -44,9 +44,8 @@
  * the VC uses.
  */
 #define CONFIG_SYS_SDRAM_SIZE		SZ_128M
-#define CONFIG_SYS_INIT_RAM_SIZE	SZ_4K
 #define CONFIG_SYS_INIT_SP_ADDR		(CONFIG_SYS_SDRAM_BASE + \
-					 CONFIG_SYS_INIT_RAM_SIZE - \
+					 CONFIG_SYS_SDRAM_SIZE - \
 					 GENERATED_GBL_DATA_SIZE)
 #define CONFIG_SYS_MALLOC_LEN		SZ_4M
 #define CONFIG_SYS_MEMTEST_START	0x00100000
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 11/13] ARM: bcm2835: implement reset using watchdog
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (9 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 10/13] ARM: rpi_b: move stack to top of RAM Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 12/13] gpio: bcm2835: Add GPIO driver Stephen Warren
                   ` (2 subsequent siblings)
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
 arch/arm/cpu/arm1176/bcm2835/reset.c     |   18 +++++++++++----
 arch/arm/include/asm/arch-bcm2835/wdog.h |   37 ++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+), 5 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-bcm2835/wdog.h

diff --git a/arch/arm/cpu/arm1176/bcm2835/reset.c b/arch/arm/cpu/arm1176/bcm2835/reset.c
index 69c9577..8c37ad9 100644
--- a/arch/arm/cpu/arm1176/bcm2835/reset.c
+++ b/arch/arm/cpu/arm1176/bcm2835/reset.c
@@ -16,12 +16,20 @@
 
 #include <common.h>
 #include <asm/io.h>
+#include <asm/arch/wdog.h>
+
+#define RESET_TIMEOUT 10
 
 void reset_cpu(ulong addr)
 {
-	/*
-	 * We should probably use the WDT module here, but an unaligned
-	 * access will do the trick for now.
-	 */
-	readl(1);
+	struct bcm2835_wdog_regs *regs =
+		(struct bcm2835_wdog_regs *)BCM2835_WDOG_PHYSADDR;
+	uint32_t rstc;
+
+	rstc = readl(&regs->rstc);
+	rstc &= ~BCM2835_WDOG_RSTC_WRCFG_MASK;
+	rstc |= BCM2835_WDOG_RSTC_WRCFG_FULL_RESET;
+
+	writel(BCM2835_WDOG_PASSWORD | RESET_TIMEOUT, &regs->wdog);
+	writel(BCM2835_WDOG_PASSWORD | rstc, &regs->rstc);
 }
diff --git a/arch/arm/include/asm/arch-bcm2835/wdog.h b/arch/arm/include/asm/arch-bcm2835/wdog.h
new file mode 100644
index 0000000..d750a62
--- /dev/null
+++ b/arch/arm/include/asm/arch-bcm2835/wdog.h
@@ -0,0 +1,37 @@
+/*
+ * (C) Copyright 2012 Stephen Warren
+ *
+ * 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
+ * version 2 as published by the Free Software Foundation.
+ *
+ * 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.
+ */
+
+#ifndef _BCM2835_TIMER_H
+#define _BCM2835_TIMER_H
+
+#define BCM2835_WDOG_PHYSADDR			0x20100000
+
+struct bcm2835_wdog_regs {
+	u32 unknown0[7];
+	u32 rstc;
+	u32 unknown1;
+	u32 wdog;
+};
+
+#define BCM2835_WDOG_PASSWORD			0x5a000000
+
+#define BCM2835_WDOG_RSTC_WRCFG_MASK		0x00000030
+#define BCM2835_WDOG_RSTC_WRCFG_FULL_RESET	0x00000020
+
+#define BCM2835_WDOG_WDOG_TIMEOUT_MASK		0x0000ffff
+
+#endif
+
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 12/13] gpio: bcm2835: Add GPIO driver
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (10 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 11/13] ARM: bcm2835: implement reset using watchdog Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 13/13] rbpi: Add BCM2835 GPIO driver for raspberry pi Stephen Warren
  2012-08-01 16:25 ` [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Tom Rini
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

From: Vikram Narayanan <vikram186@gmail.com>

Driver for BCM2835 SoC. This gives the basic functionality of
setting/clearing the output.

swarren:
* Fix BCM2835_GPIO_BASE; 0x7e200000 is the address on the "VC" CPU,
  not the ARM CPU.
* Fix BCM2835_GPIO_ALT* values to match datasheet.
* Invert gpio_request return value.
* Add missing & to writel() address parameters in gpio_direction_input(),
  gpio_direction_output(), and gpio_set_value().
* Fix gpio_direction_input() and gpio_direction_output() to return
  something, to avoid compiler warnings.
* Fix gpio_direction_output() to always call gpio_set_value(), not just
  when the requested value is 1.
* s/bcm_gpio_regs/bcm2835_gpio_regs/g since this driver is specific to
  BCM2835, and most likely not all Broadcom chips.
* Remove FSF address from (c) notices, so we don't have to maintain it.
* Fix some indentation errors.

Signed-off-by: Vikram Narayanan <vikram186@gmail.com>
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: New patch
---
 arch/arm/include/asm/arch-bcm2835/gpio.h |   66 ++++++++++++++++++++++
 drivers/gpio/Makefile                    |    1 +
 drivers/gpio/bcm2835_gpio.c              |   90 ++++++++++++++++++++++++++++++
 3 files changed, 157 insertions(+)
 create mode 100644 arch/arm/include/asm/arch-bcm2835/gpio.h
 create mode 100644 drivers/gpio/bcm2835_gpio.c

diff --git a/arch/arm/include/asm/arch-bcm2835/gpio.h b/arch/arm/include/asm/arch-bcm2835/gpio.h
new file mode 100644
index 0000000..c0178cb
--- /dev/null
+++ b/arch/arm/include/asm/arch-bcm2835/gpio.h
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2012 Vikram Narayananan
+ * <vikram186@gmail.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.
+ */
+
+#ifndef _BCM2835_GPIO_H_
+#define _BCM2835_GPIO_H_
+
+#define BCM2835_GPIO_BASE		0x20200000
+#define BCM2835_GPIO_COUNT		53
+
+#define BCM2835_GPIO_FSEL_MASK		0x7
+#define BCM2835_GPIO_INPUT		0x0
+#define BCM2835_GPIO_OUTPUT		0x1
+#define BCM2835_GPIO_ALT0		0x4
+#define BCM2835_GPIO_ALT1		0x5
+#define BCM2835_GPIO_ALT2		0x6
+#define BCM2835_GPIO_ALT3		0x7
+#define BCM2835_GPIO_ALT4		0x3
+#define BCM2835_GPIO_ALT5		0x2
+
+#define BCM2835_GPIO_COMMON_BANK(gpio)	((gpio < 32) ? 0 : 1)
+#define BCM2835_GPIO_COMMON_SHIFT(gpio)	(gpio & 0x1f)
+
+#define BCM2835_GPIO_FSEL_BANK(gpio)	(gpio / 10)
+#define BCM2835_GPIO_FSEL_SHIFT(gpio)	((gpio % 10) * 3)
+
+struct bcm2835_gpio_regs {
+	u32 gpfsel[6];
+	u32 reserved1;
+	u32 gpset[2];
+	u32 reserved2;
+	u32 gpclr[2];
+	u32 reserved3;
+	u32 gplev[2];
+	u32 reserved4;
+	u32 gpeds[2];
+	u32 reserved5;
+	u32 gpren[2];
+	u32 reserved6;
+	u32 gpfen[2];
+	u32 reserved7;
+	u32 gphen[2];
+	u32 reserved8;
+	u32 gplen[2];
+	u32 reserved9;
+	u32 gparen[2];
+	u32 reserved10;
+	u32 gppud;
+	u32 gppudclk[2];
+};
+
+#endif /* _BCM2835_GPIO_H_ */
diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
index 32a2474..8d2f2b2 100644
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
@@ -40,6 +40,7 @@ COBJS-$(CONFIG_TEGRA_GPIO)	+= tegra_gpio.o
 COBJS-$(CONFIG_DA8XX_GPIO)	+= da8xx_gpio.o
 COBJS-$(CONFIG_ALTERA_PIO)	+= altera_pio.o
 COBJS-$(CONFIG_MPC83XX_GPIO)	+= mpc83xx_gpio.o
+COBJS-$(CONFIG_BCM2835_GPIO)	+= bcm2835_gpio.o
 
 COBJS	:= $(COBJS-y)
 SRCS 	:= $(COBJS:.o=.c)
diff --git a/drivers/gpio/bcm2835_gpio.c b/drivers/gpio/bcm2835_gpio.c
new file mode 100644
index 0000000..6ab2df3
--- /dev/null
+++ b/drivers/gpio/bcm2835_gpio.c
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2012 Vikram Narayananan
+ * <vikram186@gmail.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.
+ */
+
+#include <common.h>
+#include <asm/gpio.h>
+#include <asm/io.h>
+
+inline int gpio_is_valid(unsigned gpio)
+{
+	return (gpio < BCM2835_GPIO_COUNT);
+}
+
+int gpio_request(unsigned gpio, const char *label)
+{
+	return !gpio_is_valid(gpio);
+}
+
+int gpio_free(unsigned gpio)
+{
+	return 0;
+}
+
+int gpio_direction_input(unsigned gpio)
+{
+	struct bcm2835_gpio_regs *reg =
+		(struct bcm2835_gpio_regs *)BCM2835_GPIO_BASE;
+	unsigned val;
+
+	val = readl(&reg->gpfsel[BCM2835_GPIO_FSEL_BANK(gpio)]);
+	val &= ~(BCM2835_GPIO_FSEL_MASK << BCM2835_GPIO_FSEL_SHIFT(gpio));
+	val |= (BCM2835_GPIO_INPUT << BCM2835_GPIO_FSEL_SHIFT(gpio));
+	writel(val, &reg->gpfsel[BCM2835_GPIO_FSEL_BANK(gpio)]);
+
+	return 0;
+}
+
+int gpio_direction_output(unsigned gpio, int value)
+{
+	struct bcm2835_gpio_regs *reg =
+		(struct bcm2835_gpio_regs *)BCM2835_GPIO_BASE;
+	unsigned val;
+
+	gpio_set_value(gpio, value);
+
+	val = readl(&reg->gpfsel[BCM2835_GPIO_FSEL_BANK(gpio)]);
+	val &= ~(BCM2835_GPIO_FSEL_MASK << BCM2835_GPIO_FSEL_SHIFT(gpio));
+	val |= (BCM2835_GPIO_OUTPUT << BCM2835_GPIO_FSEL_SHIFT(gpio));
+	writel(val, &reg->gpfsel[BCM2835_GPIO_FSEL_BANK(gpio)]);
+
+	return 0;
+}
+
+int gpio_get_value(unsigned gpio)
+{
+	struct bcm2835_gpio_regs *reg =
+		(struct bcm2835_gpio_regs *)BCM2835_GPIO_BASE;
+	unsigned val;
+
+	val = readl(&reg->gplev[BCM2835_GPIO_COMMON_BANK(gpio)]);
+
+	return (val >> BCM2835_GPIO_COMMON_SHIFT(gpio)) & 0x1;
+}
+
+int gpio_set_value(unsigned gpio, int value)
+{
+	struct bcm2835_gpio_regs *reg =
+		(struct bcm2835_gpio_regs *)BCM2835_GPIO_BASE;
+	u32 *output_reg = value ? reg->gpset : reg->gpclr;
+
+	writel(1 << BCM2835_GPIO_COMMON_SHIFT(gpio),
+				&output_reg[BCM2835_GPIO_COMMON_BANK(gpio)]);
+
+	return 0;
+}
+
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 13/13] rbpi: Add BCM2835 GPIO driver for raspberry pi
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (11 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 12/13] gpio: bcm2835: Add GPIO driver Stephen Warren
@ 2012-08-01  4:13 ` Stephen Warren
  2012-08-01 16:25 ` [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Tom Rini
  13 siblings, 0 replies; 17+ messages in thread
From: Stephen Warren @ 2012-08-01  4:13 UTC (permalink / raw)
  To: u-boot

From: Vikram Narayanan <vikram186@gmail.com>

Add the driver to the default config

swarren: Enable CONFIG_CMD_GPIO, so you can actually use the driver.

Signed-off-by: Vikram Narayanan <vikram186@gmail.com>
Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
---
v2: New patch
---
 include/configs/rpi_b.h |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/include/configs/rpi_b.h b/include/configs/rpi_b.h
index 33169d3..5c91e7d 100644
--- a/include/configs/rpi_b.h
+++ b/include/configs/rpi_b.h
@@ -55,7 +55,8 @@
 #define CONFIG_SYS_NO_FLASH
 
 /* Devices */
-/* None yet */
+/* GPIO */
+#define CONFIG_BCM2835_GPIO
 
 /* Console UART */
 #define CONFIG_PL011_SERIAL
@@ -88,6 +89,7 @@
 /* Commands */
 #include <config_cmd_default.h>
 #define CONFIG_CMD_BOOTZ
+#define CONFIG_CMD_GPIO
 /* Some things don't make sense on this HW or yet */
 #undef CONFIG_CMD_FPGA
 #undef CONFIG_CMD_NET
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board Stephen Warren
@ 2012-08-01 16:19   ` Tom Rini
  2012-08-01 16:22     ` Tom Rini
  0 siblings, 1 reply; 17+ messages in thread
From: Tom Rini @ 2012-08-01 16:19 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 31, 2012 at 10:13:33PM -0600, Stephen Warren wrote:
> The Raspberry Pi model B uses the BCM2835 SoC, has 256MB of RAM, contains
> an SMSC 9512 USB LAN/Hub chip, and various IO connectors. For more details,
> see http://www.raspberrypi.org/.
> 
> Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
[snip]
> +int dram_init(void)
> +{
> +	gd->ram_size = SZ_256M;
> +
> +	return 0;
> +}

You should use get_ram_size(CONFIG_SYS_SDRAM_BASE,
max-possible-dram-size);  I say this as I just found a "oh, so that's
why mainline reports the right amount of memory and other tree does not"
bug yesterday.  This should also be in the SoC-generic code area (like
say arch/arm/cpu/arm1176/bcm2835/board.c).  Sorry I didn't spot this
last go-round.

[snip]
> +#define CONFIG_SYS_BAUDRATE_TABLE	{ 9600, 19200, 38400, 57600, 115200 }

This is the table now in <config_fallbacks.h> which is auto-included.

> +#define CONFIG_SYS_PROMPT_HUSH_PS2	"> "

This is now the default prompt value, so you can drop this line.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120801/9a5a71e1/attachment.pgp>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board
  2012-08-01 16:19   ` Tom Rini
@ 2012-08-01 16:22     ` Tom Rini
  0 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2012-08-01 16:22 UTC (permalink / raw)
  To: u-boot

On Wed, Aug 01, 2012 at 09:19:15AM -0700, Tom Rini wrote:
> On Tue, Jul 31, 2012 at 10:13:33PM -0600, Stephen Warren wrote:
> > The Raspberry Pi model B uses the BCM2835 SoC, has 256MB of RAM, contains
> > an SMSC 9512 USB LAN/Hub chip, and various IO connectors. For more details,
> > see http://www.raspberrypi.org/.
> > 
> > Signed-off-by: Stephen Warren <swarren@wwwdotorg.org>
> [snip]
> > +int dram_init(void)
> > +{
> > +	gd->ram_size = SZ_256M;
> > +
> > +	return 0;
> > +}
> 
> You should use get_ram_size(CONFIG_SYS_SDRAM_BASE,
> max-possible-dram-size);  I say this as I just found a "oh, so that's
> why mainline reports the right amount of memory and other tree does not"
> bug yesterday.  This should also be in the SoC-generic code area (like
> say arch/arm/cpu/arm1176/bcm2835/board.c).  Sorry I didn't spot this
> last go-round.

I forgot about the video co-processor change later in the series, so you
can disregard this specific comment.  But I have some still applicable
comments I'm going to add to the 0/13 patch now.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120801/542ec027/attachment.pgp>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support
  2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
                   ` (12 preceding siblings ...)
  2012-08-01  4:13 ` [U-Boot] [PATCH V2 13/13] rbpi: Add BCM2835 GPIO driver for raspberry pi Stephen Warren
@ 2012-08-01 16:25 ` Tom Rini
  13 siblings, 0 replies; 17+ messages in thread
From: Tom Rini @ 2012-08-01 16:25 UTC (permalink / raw)
  To: u-boot

On Tue, Jul 31, 2012 at 10:13:30PM -0600, Stephen Warren wrote:
> This series adds basic support for the Raspberry Pi ARM board.
> 
> v2:
> * Add README config_cmd_default.h documentation fix.
> * Use <> not "" for include of config_cmd_default.h.
> * Squash together 3 patches related to enabling booting a Linux kernel.
> * Minor rpi_b.h order changes in order to drop later cleanup patch.
> * Merged together 2 patch series of mine, and the GPIO series from Vikram.
> 
> Stephen Warren (11):
>   README: fix references to config_cmd_default.h
>   ARM: add basic support for the Broadcom BCM2835 SoC
>   ARM: bcm2835: add Raspberry Pi model B board
>   ARM: arm1176: enable instruction cache in arch_cpu_init()
>   ARM: rpi_b: enable CONFIG_ARCH_CPU_INIT for icache
>   ARM: rpi_b: define CONFIG_MACH_TYPE
>   ARM: rpi_b: include config_cmd_default.h
>   ARM: rpi_b: enable booting the Linux kernel
>   ARM: rpi_b: drop RAM size to 128M
>   ARM: rpi_b: move stack to top of RAM
>   ARM: bcm2835: implement reset using watchdog

I think some of these should be collapsed.  Implement reset using the
watchdog in the first SoC commit.  Add a fully functional rpi_b config /
board file from the get-go (with a why we limit to 128MB DRAM) and just
credit the folks that did parts X/Y/Z in the commit message.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20120801/952f95b3/attachment.pgp>

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-08-01 16:25 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-01  4:13 [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 01/13] README: fix references to config_cmd_default.h Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 02/13] ARM: add basic support for the Broadcom BCM2835 SoC Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 03/13] ARM: bcm2835: add Raspberry Pi model B board Stephen Warren
2012-08-01 16:19   ` Tom Rini
2012-08-01 16:22     ` Tom Rini
2012-08-01  4:13 ` [U-Boot] [PATCH V2 04/13] ARM: arm1176: enable instruction cache in arch_cpu_init() Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 05/13] ARM: rpi_b: enable CONFIG_ARCH_CPU_INIT for icache Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 06/13] ARM: rpi_b: define CONFIG_MACH_TYPE Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 07/13] ARM: rpi_b: include config_cmd_default.h Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 08/13] ARM: rpi_b: enable booting the Linux kernel Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 09/13] ARM: rpi_b: drop RAM size to 128M Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 10/13] ARM: rpi_b: move stack to top of RAM Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 11/13] ARM: bcm2835: implement reset using watchdog Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 12/13] gpio: bcm2835: Add GPIO driver Stephen Warren
2012-08-01  4:13 ` [U-Boot] [PATCH V2 13/13] rbpi: Add BCM2835 GPIO driver for raspberry pi Stephen Warren
2012-08-01 16:25 ` [U-Boot] [PATCH V2 00/13] Basic Raspberyr Pi support Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox