123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- /*
- * 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,
- };
|