diff options
| -rw-r--r-- | target/linux/brcm63xx/config-2.6.27 | 4 | ||||
| -rw-r--r-- | target/linux/brcm63xx/patches-2.6.27/014-inventel_livebox.patch | 195 | 
2 files changed, 197 insertions, 2 deletions
| diff --git a/target/linux/brcm63xx/config-2.6.27 b/target/linux/brcm63xx/config-2.6.27 index 9e0689210..72e4c4dd7 100644 --- a/target/linux/brcm63xx/config-2.6.27 +++ b/target/linux/brcm63xx/config-2.6.27 @@ -23,6 +23,7 @@ CONFIG_BITREVERSE=y  CONFIG_BLK_DEV_IO_TRACE=y  # CONFIG_BLK_DEV_LOOP is not set  CONFIG_BOARD_BCM963XX=y +# CONFIG_BOARD_LIVEBOX is not set  # CONFIG_BROADCOM_PHY is not set  # CONFIG_BSD_DISKLABEL is not set  CONFIG_BSD_PROCESS_ACCT_V3=y @@ -84,12 +85,11 @@ CONFIG_EQUALIZER=m  # CONFIG_EXT3_FS_SECURITY is not set  CONFIG_EXT3_FS_XATTR=y  CONFIG_EXTRA_FIRMWARE="" -CONFIG_FIRMWARE_IN_KERNEL=y +# CONFIG_FIRMWARE_IN_KERNEL is not set  # CONFIG_FIXED_PHY is not set  CONFIG_FS_MBCACHE=m  CONFIG_FS_POSIX_ACL=y  CONFIG_FUSE_FS=m -CONFIG_FW_LOADER=m  CONFIG_GENERIC_CLOCKEVENTS=y  CONFIG_GENERIC_CLOCKEVENTS_BUILD=y  CONFIG_GENERIC_CMOS_UPDATE=y diff --git a/target/linux/brcm63xx/patches-2.6.27/014-inventel_livebox.patch b/target/linux/brcm63xx/patches-2.6.27/014-inventel_livebox.patch new file mode 100644 index 000000000..f0eadf839 --- /dev/null +++ b/target/linux/brcm63xx/patches-2.6.27/014-inventel_livebox.patch @@ -0,0 +1,195 @@ +diff -urN linux-2.6.27.4/arch/mips/bcm63xx/boards/Kconfig linux-2.6.27.4.new/arch/mips/bcm63xx/boards/Kconfig +--- linux-2.6.27.4/arch/mips/bcm63xx/boards/Kconfig	2008-11-03 20:00:41.000000000 +0100 ++++ linux-2.6.27.4.new/arch/mips/bcm63xx/boards/Kconfig	2008-11-03 20:02:45.000000000 +0100 +@@ -7,4 +7,9 @@ +        bool "Generic Broadcom 963xx boards" +        help +  ++config BOARD_LIVEBOX ++	bool "Inventel Livebox(es) boards" ++	help ++	  Boards using RedBoot. ++ + endchoice +diff -urN linux-2.6.27.4/arch/mips/bcm63xx/boards/Makefile linux-2.6.27.4.new/arch/mips/bcm63xx/boards/Makefile +--- linux-2.6.27.4/arch/mips/bcm63xx/boards/Makefile	2008-11-03 20:00:41.000000000 +0100 ++++ linux-2.6.27.4.new/arch/mips/bcm63xx/boards/Makefile	2008-11-03 20:01:34.000000000 +0100 +@@ -1 +1,2 @@ + obj-$(CONFIG_BOARD_BCM963XX)		+= board_bcm963xx.o ++obj-$(CONFIG_BOARD_LIVEBOX)		+= board_livebox.o +diff -urN linux-2.6.27.4/arch/mips/bcm63xx/boards/board_livebox.c linux-2.6.27.4.new/arch/mips/bcm63xx/boards/board_livebox.c +--- linux-2.6.27.4/arch/mips/bcm63xx/boards/board_livebox.c	1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.27.4.new/arch/mips/bcm63xx/boards/board_livebox.c	2008-11-03 20:03:59.000000000 +0100 +@@ -0,0 +1,172 @@ ++/* ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License.  See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org> ++ */ ++ ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/string.h> ++#include <linux/platform_device.h> ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/partitions.h> ++#include <linux/mtd/physmap.h> ++#include <asm/addrspace.h> ++#include <bcm63xx_board.h> ++#include <bcm63xx_cpu.h> ++#include <bcm63xx_regs.h> ++#include <bcm63xx_io.h> ++#include <bcm63xx_board.h> ++#include <bcm63xx_dev_pci.h> ++#include <bcm63xx_dev_uart.h> ++#include <bcm63xx_dev_enet.h> ++#include <bcm63xx_dev_pcmcia.h> ++#include <bcm63xx_dev_usb_ohci.h> ++#include <bcm63xx_dev_usb_ehci.h> ++#include <board_bcm963xx.h> ++ ++#define PFX	"board_livebox: " ++ ++static unsigned int mac_addr_used = 0; ++static struct board_info board; ++ ++/* ++ * known 6348 boards ++ */ ++#ifdef CONFIG_BCM63XX_CPU_6348 ++static struct board_info __initdata board_livebox = { ++	.name				= "Livebox", ++	.expected_cpu_id		= 0x6348, ++ ++	.has_enet0			= 1, ++	.has_pci			= 1, ++ ++	.enet0 = { ++		.has_phy		= 1, ++		.use_internal_phy	= 1, ++	}, ++}; ++#endif ++ ++/* ++ * all boards ++ */ ++static const struct board_info __initdata *bcm963xx_boards[] = { ++#ifdef CONFIG_BCM63XX_CPU_6348 ++	&board_livebox ++#endif ++}; ++ ++/* ++ * early init callback ++ */ ++void __init board_prom_init(void) ++{ ++	u32 val; ++ ++	/* read base address of boot chip select (0) */ ++	val = bcm_mpi_readl(MPI_CSBASE_REG(0)); ++	val &= MPI_CSBASE_BASE_MASK; ++ ++	/* assume board is a Livebox */ ++	memcpy(&board, bcm963xx_boards[0], sizeof(board)); ++ ++	/* setup pin multiplexing depending on board enabled device, ++	 * this has to be done this early since PCI init is done ++	 * inside arch_initcall */ ++	val = 0; ++ ++	if (board.has_pci) { ++		bcm63xx_pci_enabled = 1; ++		if (BCMCPU_IS_6348()) ++			val |= GPIO_MODE_6348_G2_PCI; ++	} ++ ++	if (board.has_pccard) { ++		if (BCMCPU_IS_6348()) ++			val |= GPIO_MODE_6348_G1_MII_PCCARD; ++	} ++ ++	if (board.has_enet0 && !board.enet0.use_internal_phy) { ++		if (BCMCPU_IS_6348()) ++			val |= GPIO_MODE_6348_G3_EXT_MII | ++				GPIO_MODE_6348_G0_EXT_MII; ++	} ++ ++	if (board.has_enet1 && !board.enet1.use_internal_phy) { ++		if (BCMCPU_IS_6348()) ++			val |= GPIO_MODE_6348_G3_EXT_MII | ++				GPIO_MODE_6348_G0_EXT_MII; ++	} ++ ++	bcm_gpio_writel(val, GPIO_MODE_REG); ++} ++ ++/* ++ * second stage init callback, good time to panic if we couldn't ++ * identify on which board we're running since early printk is working ++ */ ++void __init board_setup(void) ++{ ++	if (!board.name[0]) ++		panic("unable to detect bcm963xx board"); ++	printk(KERN_INFO PFX "board name: %s\n", board.name); ++ ++	/* make sure we're running on expected cpu */ ++	if (bcm63xx_get_cpu_id() != board.expected_cpu_id) ++		panic("unexpected CPU for bcm963xx board"); ++} ++ ++/* ++ * return board name for /proc/cpuinfo ++ */ ++const char *board_get_name(void) ++{ ++	return board.name; ++} ++ ++/* ++ * register & return a new board mac address ++ */ ++static int board_get_mac_address(u8 *mac) ++{ ++	/* Not yet implemented */ ++	return 0; ++} ++ ++/* ++ * third stage init callback, register all board devices. ++ */ ++int __init board_register_devices(void) ++{ ++	u32 val; ++ ++	bcm63xx_uart_register(); ++ ++	if (board.has_pccard) ++		bcm63xx_pcmcia_register(); ++ ++	if (board.has_enet0 && ++	    !board_get_mac_address(board.enet0.mac_addr)) ++		bcm63xx_enet_register(0, &board.enet0); ++ ++	if (board.has_enet1 && ++	    !board_get_mac_address(board.enet1.mac_addr)) ++		bcm63xx_enet_register(1, &board.enet1); ++ ++	if (board.has_ohci0) ++		bcm63xx_ohci_register(); ++ ++	if (board.has_ehci0) ++		bcm63xx_ehci_register(); ++ ++ ++	/* read base address of boot chip select (0) */ ++	val = bcm_mpi_readl(MPI_CSBASE_REG(0)); ++	val &= MPI_CSBASE_BASE_MASK; ++ ++	return 0; ++} ++ | 
