2 * Copyright (c) 2011 Zhang, Keguang <keguang.zhang@gmail.com>
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
10 #include <linux/clk.h>
11 #include <linux/dma-mapping.h>
12 #include <linux/err.h>
13 #include <linux/phy.h>
14 #include <linux/serial_8250.h>
15 #include <linux/stmmac.h>
16 #include <asm-generic/sizes.h>
18 #include <loongson1.h>
20 #define LS1X_UART(_id) \
22 .mapbase = LS1X_UART ## _id ## _BASE, \
23 .irq = LS1X_UART ## _id ## _IRQ, \
25 .flags = UPF_IOREMAP | UPF_FIXED_TYPE, \
26 .type = PORT_16550A, \
29 static struct plat_serial8250_port ls1x_serial8250_port
[] = {
37 struct platform_device ls1x_uart_device
= {
39 .id
= PLAT8250_DEV_PLATFORM
,
41 .platform_data
= ls1x_serial8250_port
,
45 void __init
ls1x_serial_setup(void)
48 struct plat_serial8250_port
*p
;
50 clk
= clk_get(NULL
, "dc");
52 panic("unable to get dc clock, err=%ld", PTR_ERR(clk
));
54 for (p
= ls1x_serial8250_port
; p
->flags
!= 0; ++p
)
55 p
->uartclk
= clk_get_rate(clk
);
58 /* Synopsys Ethernet GMAC */
59 static struct resource ls1x_eth0_resources
[] = {
61 .start
= LS1X_GMAC0_BASE
,
62 .end
= LS1X_GMAC0_BASE
+ SZ_64K
- 1,
63 .flags
= IORESOURCE_MEM
,
67 .start
= LS1X_GMAC0_IRQ
,
68 .flags
= IORESOURCE_IRQ
,
72 static struct stmmac_mdio_bus_data ls1x_mdio_bus_data
= {
77 static struct plat_stmmacenet_data ls1x_eth_data
= {
80 .mdio_bus_data
= &ls1x_mdio_bus_data
,
85 struct platform_device ls1x_eth0_device
= {
88 .num_resources
= ARRAY_SIZE(ls1x_eth0_resources
),
89 .resource
= ls1x_eth0_resources
,
91 .platform_data
= &ls1x_eth_data
,
96 static u64 ls1x_ehci_dmamask
= DMA_BIT_MASK(32);
98 static struct resource ls1x_ehci_resources
[] = {
100 .start
= LS1X_EHCI_BASE
,
101 .end
= LS1X_EHCI_BASE
+ SZ_32K
- 1,
102 .flags
= IORESOURCE_MEM
,
105 .start
= LS1X_EHCI_IRQ
,
106 .flags
= IORESOURCE_IRQ
,
110 struct platform_device ls1x_ehci_device
= {
113 .num_resources
= ARRAY_SIZE(ls1x_ehci_resources
),
114 .resource
= ls1x_ehci_resources
,
116 .dma_mask
= &ls1x_ehci_dmamask
,
120 /* Real Time Clock */
121 struct platform_device ls1x_rtc_device
= {