mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
![Florian Fainelli](/assets/img/avatar_default.png)
The Broadcom BCM3368 Cable Modem SoC is extremely similar to the existing BCM63xx DSL SoCs, in particular BCM6358, therefore little effort in the existing code base is required to get it supported. This patch adds support for the following on-chip peripherals: - two UARTS - GPIO - Ethernet - SPI - PCI - NOR Flash The most noticeable difference with 3368 is that it has its peripheral register at 0xfff8_0000 we check that separately in ioremap.h. Since 3368 is identical to 6358 for its clock and reset bits, we use them verbatim. Signed-off-by: Florian Fainelli <florian@openwrt.org> Cc: linux-mips@linux-mips.org Cc: cernekee@gmail.com Cc: jogo@openwrt.org Patchwork: https://patchwork.linux-mips.org/patch/5499/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
76 lines
1.7 KiB
C
76 lines
1.7 KiB
C
/*
|
|
* 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 Maxime Bizon <mbizon@freebox.fr>
|
|
*/
|
|
|
|
#include <linux/init.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/platform_device.h>
|
|
#include <bcm63xx_cpu.h>
|
|
|
|
static struct resource uart0_resources[] = {
|
|
{
|
|
/* start & end filled at runtime */
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
{
|
|
/* start filled at runtime */
|
|
.flags = IORESOURCE_IRQ,
|
|
},
|
|
};
|
|
|
|
static struct resource uart1_resources[] = {
|
|
{
|
|
/* start & end filled at runtime */
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
{
|
|
/* start filled at runtime */
|
|
.flags = IORESOURCE_IRQ,
|
|
},
|
|
};
|
|
|
|
static struct platform_device bcm63xx_uart_devices[] = {
|
|
{
|
|
.name = "bcm63xx_uart",
|
|
.id = 0,
|
|
.num_resources = ARRAY_SIZE(uart0_resources),
|
|
.resource = uart0_resources,
|
|
},
|
|
|
|
{
|
|
.name = "bcm63xx_uart",
|
|
.id = 1,
|
|
.num_resources = ARRAY_SIZE(uart1_resources),
|
|
.resource = uart1_resources,
|
|
}
|
|
};
|
|
|
|
int __init bcm63xx_uart_register(unsigned int id)
|
|
{
|
|
if (id >= ARRAY_SIZE(bcm63xx_uart_devices))
|
|
return -ENODEV;
|
|
|
|
if (id == 1 && (!BCMCPU_IS_3368() && !BCMCPU_IS_6358() &&
|
|
!BCMCPU_IS_6368()))
|
|
return -ENODEV;
|
|
|
|
if (id == 0) {
|
|
uart0_resources[0].start = bcm63xx_regset_address(RSET_UART0);
|
|
uart0_resources[0].end = uart0_resources[0].start +
|
|
RSET_UART_SIZE - 1;
|
|
uart0_resources[1].start = bcm63xx_get_irq_number(IRQ_UART0);
|
|
}
|
|
|
|
if (id == 1) {
|
|
uart1_resources[0].start = bcm63xx_regset_address(RSET_UART1);
|
|
uart1_resources[0].end = uart1_resources[0].start +
|
|
RSET_UART_SIZE - 1;
|
|
uart1_resources[1].start = bcm63xx_get_irq_number(IRQ_UART1);
|
|
}
|
|
|
|
return platform_device_register(&bcm63xx_uart_devices[id]);
|
|
}
|