* [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(®s->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(®s->rstc);
+ rstc &= ~BCM2835_WDOG_RSTC_WRCFG_MASK;
+ rstc |= BCM2835_WDOG_RSTC_WRCFG_FULL_RESET;
+
+ writel(BCM2835_WDOG_PASSWORD | RESET_TIMEOUT, ®s->wdog);
+ writel(BCM2835_WDOG_PASSWORD | rstc, ®s->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(®->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, ®->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(®->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, ®->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(®->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