
Pull MIPS updates from Ralf Baechle: "The MIPS bits for 3.8. This also includes a bunch fixes that were sitting in the linux-mips.org git tree for a long time. This pull request contains updates to several OCTEON drivers and the board support code for BCM47XX, BCM63XX, XLP, XLR, XLS, lantiq, Loongson1B, updates to the SSB bus support, MIPS kexec code and adds support for kdump. When pulling this, there are two expected merge conflicts in include/linux/bcma/bcma_driver_chipcommon.h which are trivial to resolve, just remove the conflict markers and keep both alternatives." * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: (90 commits) MIPS: PMC-Sierra Yosemite: Remove support. VIDEO: Newport Fix console crashes MIPS: wrppmc: Fix build of PCI code. MIPS: IP22/IP28: Fix build of EISA code. MIPS: RB532: Fix build of prom code. MIPS: PowerTV: Fix build. MIPS: IP27: Correct fucked grammar in ops-bridge.c MIPS: Highmem: Fix build error if CONFIG_DEBUG_HIGHMEM is disabled MIPS: Fix potencial corruption MIPS: Fix for warning from FPU emulation code MIPS: Handle COP3 Unusable exception as COP1X for FP emulation MIPS: Fix poweroff failure when HOTPLUG_CPU configured. MIPS: MT: Fix build with CONFIG_UIDGID_STRICT_TYPE_CHECKS=y MIPS: Remove unused smvp.h MIPS/EDAC: Improve OCTEON EDAC support. MIPS: OCTEON: Add definitions for OCTEON memory contoller registers. MIPS: OCTEON: Add OCTEON family definitions to octeon-model.h ata: pata_octeon_cf: Use correct byte order for DMA in when built little-endian. MIPS/OCTEON/ata: Convert pata_octeon_cf.c to use device tree. MIPS: Remove usage of CEVT_R4K_LIB config option. ...
130 lines
2.8 KiB
C
130 lines
2.8 KiB
C
/*
|
|
* Copyright (c) 2011 Zhang, Keguang <keguang.zhang@gmail.com>
|
|
*
|
|
* 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.
|
|
*/
|
|
|
|
#include <linux/clk.h>
|
|
#include <linux/dma-mapping.h>
|
|
#include <linux/err.h>
|
|
#include <linux/phy.h>
|
|
#include <linux/serial_8250.h>
|
|
#include <linux/stmmac.h>
|
|
#include <linux/usb/ehci_pdriver.h>
|
|
#include <asm-generic/sizes.h>
|
|
|
|
#include <loongson1.h>
|
|
|
|
#define LS1X_UART(_id) \
|
|
{ \
|
|
.mapbase = LS1X_UART ## _id ## _BASE, \
|
|
.irq = LS1X_UART ## _id ## _IRQ, \
|
|
.iotype = UPIO_MEM, \
|
|
.flags = UPF_IOREMAP | UPF_FIXED_TYPE, \
|
|
.type = PORT_16550A, \
|
|
}
|
|
|
|
static struct plat_serial8250_port ls1x_serial8250_port[] = {
|
|
LS1X_UART(0),
|
|
LS1X_UART(1),
|
|
LS1X_UART(2),
|
|
LS1X_UART(3),
|
|
{},
|
|
};
|
|
|
|
struct platform_device ls1x_uart_device = {
|
|
.name = "serial8250",
|
|
.id = PLAT8250_DEV_PLATFORM,
|
|
.dev = {
|
|
.platform_data = ls1x_serial8250_port,
|
|
},
|
|
};
|
|
|
|
void __init ls1x_serial_setup(struct platform_device *pdev)
|
|
{
|
|
struct clk *clk;
|
|
struct plat_serial8250_port *p;
|
|
|
|
clk = clk_get(NULL, pdev->name);
|
|
if (IS_ERR(clk))
|
|
panic("unable to get %s clock, err=%ld",
|
|
pdev->name, PTR_ERR(clk));
|
|
|
|
for (p = pdev->dev.platform_data; p->flags != 0; ++p)
|
|
p->uartclk = clk_get_rate(clk);
|
|
}
|
|
|
|
/* Synopsys Ethernet GMAC */
|
|
static struct resource ls1x_eth0_resources[] = {
|
|
[0] = {
|
|
.start = LS1X_GMAC0_BASE,
|
|
.end = LS1X_GMAC0_BASE + SZ_64K - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
[1] = {
|
|
.name = "macirq",
|
|
.start = LS1X_GMAC0_IRQ,
|
|
.flags = IORESOURCE_IRQ,
|
|
},
|
|
};
|
|
|
|
static struct stmmac_mdio_bus_data ls1x_mdio_bus_data = {
|
|
.phy_mask = 0,
|
|
};
|
|
|
|
static struct plat_stmmacenet_data ls1x_eth_data = {
|
|
.bus_id = 0,
|
|
.phy_addr = -1,
|
|
.mdio_bus_data = &ls1x_mdio_bus_data,
|
|
.has_gmac = 1,
|
|
.tx_coe = 1,
|
|
};
|
|
|
|
struct platform_device ls1x_eth0_device = {
|
|
.name = "stmmaceth",
|
|
.id = 0,
|
|
.num_resources = ARRAY_SIZE(ls1x_eth0_resources),
|
|
.resource = ls1x_eth0_resources,
|
|
.dev = {
|
|
.platform_data = &ls1x_eth_data,
|
|
},
|
|
};
|
|
|
|
/* USB EHCI */
|
|
static u64 ls1x_ehci_dmamask = DMA_BIT_MASK(32);
|
|
|
|
static struct resource ls1x_ehci_resources[] = {
|
|
[0] = {
|
|
.start = LS1X_EHCI_BASE,
|
|
.end = LS1X_EHCI_BASE + SZ_32K - 1,
|
|
.flags = IORESOURCE_MEM,
|
|
},
|
|
[1] = {
|
|
.start = LS1X_EHCI_IRQ,
|
|
.flags = IORESOURCE_IRQ,
|
|
},
|
|
};
|
|
|
|
static struct usb_ehci_pdata ls1x_ehci_pdata = {
|
|
};
|
|
|
|
struct platform_device ls1x_ehci_device = {
|
|
.name = "ehci-platform",
|
|
.id = -1,
|
|
.num_resources = ARRAY_SIZE(ls1x_ehci_resources),
|
|
.resource = ls1x_ehci_resources,
|
|
.dev = {
|
|
.dma_mask = &ls1x_ehci_dmamask,
|
|
.platform_data = &ls1x_ehci_pdata,
|
|
},
|
|
};
|
|
|
|
/* Real Time Clock */
|
|
struct platform_device ls1x_rtc_device = {
|
|
.name = "ls1x-rtc",
|
|
.id = -1,
|
|
};
|