diff options
Diffstat (limited to 'arch/mips/netlogic/xlp')
-rw-r--r-- | arch/mips/netlogic/xlp/Makefile | 3 | ||||
-rw-r--r-- | arch/mips/netlogic/xlp/of.c | 34 | ||||
-rw-r--r-- | arch/mips/netlogic/xlp/platform.c | 108 | ||||
-rw-r--r-- | arch/mips/netlogic/xlp/setup.c | 32 |
4 files changed, 32 insertions, 145 deletions
diff --git a/arch/mips/netlogic/xlp/Makefile b/arch/mips/netlogic/xlp/Makefile index 6b4b972218f0..a84d6ed3746c 100644 --- a/arch/mips/netlogic/xlp/Makefile +++ b/arch/mips/netlogic/xlp/Makefile | |||
@@ -1,4 +1,3 @@ | |||
1 | obj-y += setup.o platform.o nlm_hal.o | 1 | obj-y += setup.o nlm_hal.o |
2 | obj-$(CONFIG_OF) += of.o | ||
3 | obj-$(CONFIG_SMP) += wakeup.o | 2 | obj-$(CONFIG_SMP) += wakeup.o |
4 | obj-$(CONFIG_USB) += usb-init.o | 3 | obj-$(CONFIG_USB) += usb-init.o |
diff --git a/arch/mips/netlogic/xlp/of.c b/arch/mips/netlogic/xlp/of.c deleted file mode 100644 index 8e3921c0c201..000000000000 --- a/arch/mips/netlogic/xlp/of.c +++ /dev/null | |||
@@ -1,34 +0,0 @@ | |||
1 | #include <linux/bootmem.h> | ||
2 | #include <linux/init.h> | ||
3 | #include <linux/io.h> | ||
4 | #include <linux/of_fdt.h> | ||
5 | #include <asm/byteorder.h> | ||
6 | |||
7 | static int __init reserve_mem_mach(unsigned long addr, unsigned long size) | ||
8 | { | ||
9 | return reserve_bootmem(addr, size, BOOTMEM_DEFAULT); | ||
10 | } | ||
11 | |||
12 | void __init free_mem_mach(unsigned long addr, unsigned long size) | ||
13 | { | ||
14 | return free_bootmem(addr, size); | ||
15 | } | ||
16 | |||
17 | void __init device_tree_init(void) | ||
18 | { | ||
19 | unsigned long base, size; | ||
20 | |||
21 | if (!initial_boot_params) | ||
22 | return; | ||
23 | |||
24 | base = virt_to_phys((void *)initial_boot_params); | ||
25 | size = be32_to_cpu(initial_boot_params->totalsize); | ||
26 | |||
27 | /* Before we do anything, lets reserve the dt blob */ | ||
28 | reserve_mem_mach(base, size); | ||
29 | |||
30 | unflatten_device_tree(); | ||
31 | |||
32 | /* free the space reserved for the dt blob */ | ||
33 | free_mem_mach(base, size); | ||
34 | } | ||
diff --git a/arch/mips/netlogic/xlp/platform.c b/arch/mips/netlogic/xlp/platform.c deleted file mode 100644 index 2c510d585447..000000000000 --- a/arch/mips/netlogic/xlp/platform.c +++ /dev/null | |||
@@ -1,108 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2003-2011 NetLogic Microsystems, Inc. (NetLogic). All rights | ||
3 | * reserved. | ||
4 | * | ||
5 | * This software is available to you under a choice of one of two | ||
6 | * licenses. You may choose to be licensed under the terms of the GNU | ||
7 | * General Public License (GPL) Version 2, available from the file | ||
8 | * COPYING in the main directory of this source tree, or the NetLogic | ||
9 | * license below: | ||
10 | * | ||
11 | * Redistribution and use in source and binary forms, with or without | ||
12 | * modification, are permitted provided that the following conditions | ||
13 | * are met: | ||
14 | * | ||
15 | * 1. Redistributions of source code must retain the above copyright | ||
16 | * notice, this list of conditions and the following disclaimer. | ||
17 | * 2. Redistributions in binary form must reproduce the above copyright | ||
18 | * notice, this list of conditions and the following disclaimer in | ||
19 | * the documentation and/or other materials provided with the | ||
20 | * distribution. | ||
21 | * | ||
22 | * THIS SOFTWARE IS PROVIDED BY NETLOGIC ``AS IS'' AND ANY EXPRESS OR | ||
23 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
24 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||
25 | * ARE DISCLAIMED. IN NO EVENT SHALL NETLOGIC OR CONTRIBUTORS BE LIABLE | ||
26 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | ||
27 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | ||
28 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR | ||
29 | * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, | ||
30 | * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE | ||
31 | * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN | ||
32 | * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
33 | */ | ||
34 | |||
35 | #include <linux/dma-mapping.h> | ||
36 | #include <linux/kernel.h> | ||
37 | #include <linux/delay.h> | ||
38 | #include <linux/init.h> | ||
39 | #include <linux/platform_device.h> | ||
40 | #include <linux/serial.h> | ||
41 | #include <linux/serial_8250.h> | ||
42 | #include <linux/pci.h> | ||
43 | #include <linux/serial_reg.h> | ||
44 | #include <linux/spinlock.h> | ||
45 | |||
46 | #include <asm/time.h> | ||
47 | #include <asm/addrspace.h> | ||
48 | #include <asm/netlogic/haldefs.h> | ||
49 | #include <asm/netlogic/xlp-hal/iomap.h> | ||
50 | #include <asm/netlogic/xlp-hal/xlp.h> | ||
51 | #include <asm/netlogic/xlp-hal/pic.h> | ||
52 | #include <asm/netlogic/xlp-hal/uart.h> | ||
53 | |||
54 | static unsigned int nlm_xlp_uart_in(struct uart_port *p, int offset) | ||
55 | { | ||
56 | return nlm_read_reg(p->iobase, offset); | ||
57 | } | ||
58 | |||
59 | static void nlm_xlp_uart_out(struct uart_port *p, int offset, int value) | ||
60 | { | ||
61 | nlm_write_reg(p->iobase, offset, value); | ||
62 | } | ||
63 | |||
64 | #define PORT(_irq) \ | ||
65 | { \ | ||
66 | .irq = _irq, \ | ||
67 | .regshift = 2, \ | ||
68 | .iotype = UPIO_MEM32, \ | ||
69 | .flags = (UPF_SKIP_TEST|UPF_FIXED_TYPE|\ | ||
70 | UPF_BOOT_AUTOCONF), \ | ||
71 | .uartclk = XLP_IO_CLK, \ | ||
72 | .type = PORT_16550A, \ | ||
73 | .serial_in = nlm_xlp_uart_in, \ | ||
74 | .serial_out = nlm_xlp_uart_out, \ | ||
75 | } | ||
76 | |||
77 | static struct plat_serial8250_port xlp_uart_data[] = { | ||
78 | PORT(PIC_UART_0_IRQ), | ||
79 | PORT(PIC_UART_1_IRQ), | ||
80 | {}, | ||
81 | }; | ||
82 | |||
83 | static struct platform_device uart_device = { | ||
84 | .name = "serial8250", | ||
85 | .id = PLAT8250_DEV_PLATFORM, | ||
86 | .dev = { | ||
87 | .platform_data = xlp_uart_data, | ||
88 | }, | ||
89 | }; | ||
90 | |||
91 | static int __init nlm_platform_uart_init(void) | ||
92 | { | ||
93 | unsigned long mmio; | ||
94 | |||
95 | mmio = (unsigned long)nlm_get_uart_regbase(0, 0); | ||
96 | xlp_uart_data[0].iobase = mmio; | ||
97 | xlp_uart_data[0].membase = (void __iomem *)mmio; | ||
98 | xlp_uart_data[0].mapbase = mmio; | ||
99 | |||
100 | mmio = (unsigned long)nlm_get_uart_regbase(0, 1); | ||
101 | xlp_uart_data[1].iobase = mmio; | ||
102 | xlp_uart_data[1].membase = (void __iomem *)mmio; | ||
103 | xlp_uart_data[1].mapbase = mmio; | ||
104 | |||
105 | return platform_device_register(&uart_device); | ||
106 | } | ||
107 | |||
108 | arch_initcall(nlm_platform_uart_init); | ||
diff --git a/arch/mips/netlogic/xlp/setup.c b/arch/mips/netlogic/xlp/setup.c index 3dec9f28b65b..d8997098defd 100644 --- a/arch/mips/netlogic/xlp/setup.c +++ b/arch/mips/netlogic/xlp/setup.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include <linux/kernel.h> | 35 | #include <linux/kernel.h> |
36 | #include <linux/serial_8250.h> | 36 | #include <linux/serial_8250.h> |
37 | #include <linux/pm.h> | 37 | #include <linux/pm.h> |
38 | #include <linux/bootmem.h> | ||
38 | 39 | ||
39 | #include <asm/reboot.h> | 40 | #include <asm/reboot.h> |
40 | #include <asm/time.h> | 41 | #include <asm/time.h> |
@@ -56,6 +57,7 @@ unsigned long nlm_common_ebase = 0x0; | |||
56 | /* default to uniprocessor */ | 57 | /* default to uniprocessor */ |
57 | uint32_t nlm_coremask = 1, nlm_cpumask = 1; | 58 | uint32_t nlm_coremask = 1, nlm_cpumask = 1; |
58 | int nlm_threads_per_core = 1; | 59 | int nlm_threads_per_core = 1; |
60 | extern u32 __dtb_start[]; | ||
59 | 61 | ||
60 | static void nlm_linux_exit(void) | 62 | static void nlm_linux_exit(void) |
61 | { | 63 | { |
@@ -96,9 +98,18 @@ void __init prom_init(void) | |||
96 | { | 98 | { |
97 | void *fdtp; | 99 | void *fdtp; |
98 | 100 | ||
99 | fdtp = (void *)(long)fw_arg0; | ||
100 | xlp_mmu_init(); | 101 | xlp_mmu_init(); |
101 | nlm_hal_init(); | 102 | nlm_hal_init(); |
103 | |||
104 | /* | ||
105 | * If no FDT pointer is passed in, use the built-in FDT. | ||
106 | * device_tree_init() does not handle CKSEG0 pointers in | ||
107 | * 64-bit, so convert pointer. | ||
108 | */ | ||
109 | fdtp = (void *)(long)fw_arg0; | ||
110 | if (!fdtp) | ||
111 | fdtp = __dtb_start; | ||
112 | fdtp = phys_to_virt(__pa(fdtp)); | ||
102 | early_init_devtree(fdtp); | 113 | early_init_devtree(fdtp); |
103 | 114 | ||
104 | nlm_common_ebase = read_c0_ebase() & (~((1 << 12) - 1)); | 115 | nlm_common_ebase = read_c0_ebase() & (~((1 << 12) - 1)); |
@@ -112,6 +123,25 @@ void __init prom_init(void) | |||
112 | #endif | 123 | #endif |
113 | } | 124 | } |
114 | 125 | ||
126 | void __init device_tree_init(void) | ||
127 | { | ||
128 | unsigned long base, size; | ||
129 | |||
130 | if (!initial_boot_params) | ||
131 | return; | ||
132 | |||
133 | base = virt_to_phys((void *)initial_boot_params); | ||
134 | size = be32_to_cpu(initial_boot_params->totalsize); | ||
135 | |||
136 | /* Before we do anything, lets reserve the dt blob */ | ||
137 | reserve_bootmem(base, size, BOOTMEM_DEFAULT); | ||
138 | |||
139 | unflatten_device_tree(); | ||
140 | |||
141 | /* free the space reserved for the dt blob */ | ||
142 | free_bootmem(base, size); | ||
143 | } | ||
144 | |||
115 | static struct of_device_id __initdata xlp_ids[] = { | 145 | static struct of_device_id __initdata xlp_ids[] = { |
116 | { .compatible = "simple-bus", }, | 146 | { .compatible = "simple-bus", }, |
117 | {}, | 147 | {}, |