diff options
Diffstat (limited to 'arch/powerpc/platforms/ps3')
-rw-r--r-- | arch/powerpc/platforms/ps3/Kconfig | 12 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/Makefile | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/device-init.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/exports.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/gelic_udbg.c | 273 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/interrupt.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/mm.c | 2 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/os-area.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/repository.c | 32 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/setup.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/spu.c | 1 | ||||
-rw-r--r-- | arch/powerpc/platforms/ps3/system-bus.c | 9 |
12 files changed, 316 insertions, 22 deletions
diff --git a/arch/powerpc/platforms/ps3/Kconfig b/arch/powerpc/platforms/ps3/Kconfig index dfe316b161a9..476d9d9b2405 100644 --- a/arch/powerpc/platforms/ps3/Kconfig +++ b/arch/powerpc/platforms/ps3/Kconfig | |||
@@ -148,4 +148,16 @@ config PS3_LPM | |||
148 | profiling support of the Cell processor with programs like | 148 | profiling support of the Cell processor with programs like |
149 | oprofile and perfmon2, then say Y or M, otherwise say N. | 149 | oprofile and perfmon2, then say Y or M, otherwise say N. |
150 | 150 | ||
151 | config PS3GELIC_UDBG | ||
152 | bool "PS3 udbg output via UDP broadcasts on Ethernet" | ||
153 | depends on PPC_PS3 | ||
154 | help | ||
155 | Enables udbg early debugging output by sending broadcast UDP | ||
156 | via the Ethernet port (UDP port number 18194). | ||
157 | |||
158 | This driver uses a trivial implementation and is independent | ||
159 | from the main network driver. | ||
160 | |||
161 | If in doubt, say N here. | ||
162 | |||
151 | endmenu | 163 | endmenu |
diff --git a/arch/powerpc/platforms/ps3/Makefile b/arch/powerpc/platforms/ps3/Makefile index ac1bdf844eca..02b9e636dab7 100644 --- a/arch/powerpc/platforms/ps3/Makefile +++ b/arch/powerpc/platforms/ps3/Makefile | |||
@@ -2,6 +2,7 @@ obj-y += setup.o mm.o time.o hvcall.o htab.o repository.o | |||
2 | obj-y += interrupt.o exports.o os-area.o | 2 | obj-y += interrupt.o exports.o os-area.o |
3 | obj-y += system-bus.o | 3 | obj-y += system-bus.o |
4 | 4 | ||
5 | obj-$(CONFIG_PS3GELIC_UDBG) += gelic_udbg.o | ||
5 | obj-$(CONFIG_SMP) += smp.o | 6 | obj-$(CONFIG_SMP) += smp.o |
6 | obj-$(CONFIG_SPU_BASE) += spu.o | 7 | obj-$(CONFIG_SPU_BASE) += spu.o |
7 | obj-y += device-init.o | 8 | obj-y += device-init.o |
diff --git a/arch/powerpc/platforms/ps3/device-init.c b/arch/powerpc/platforms/ps3/device-init.c index 6c4b5837fc8a..3f175e8aedb4 100644 --- a/arch/powerpc/platforms/ps3/device-init.c +++ b/arch/powerpc/platforms/ps3/device-init.c | |||
@@ -825,7 +825,7 @@ static int ps3_probe_thread(void *data) | |||
825 | 825 | ||
826 | spin_lock_init(&dev.lock); | 826 | spin_lock_init(&dev.lock); |
827 | 827 | ||
828 | res = request_irq(irq, ps3_notification_interrupt, IRQF_DISABLED, | 828 | res = request_irq(irq, ps3_notification_interrupt, 0, |
829 | "ps3_notification", &dev); | 829 | "ps3_notification", &dev); |
830 | if (res) { | 830 | if (res) { |
831 | pr_err("%s:%u: request_irq failed %d\n", __func__, __LINE__, | 831 | pr_err("%s:%u: request_irq failed %d\n", __func__, __LINE__, |
diff --git a/arch/powerpc/platforms/ps3/exports.c b/arch/powerpc/platforms/ps3/exports.c index a7e8ffd24a65..7df5b7d8fc66 100644 --- a/arch/powerpc/platforms/ps3/exports.c +++ b/arch/powerpc/platforms/ps3/exports.c | |||
@@ -18,8 +18,6 @@ | |||
18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 18 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/module.h> | ||
22 | |||
23 | #define LV1_CALL(name, in, out, num) \ | 21 | #define LV1_CALL(name, in, out, num) \ |
24 | extern s64 _lv1_##name(LV1_##in##_IN_##out##_OUT_ARG_DECL); \ | 22 | extern s64 _lv1_##name(LV1_##in##_IN_##out##_OUT_ARG_DECL); \ |
25 | EXPORT_SYMBOL(_lv1_##name); | 23 | EXPORT_SYMBOL(_lv1_##name); |
diff --git a/arch/powerpc/platforms/ps3/gelic_udbg.c b/arch/powerpc/platforms/ps3/gelic_udbg.c new file mode 100644 index 000000000000..20b46a19a48f --- /dev/null +++ b/arch/powerpc/platforms/ps3/gelic_udbg.c | |||
@@ -0,0 +1,273 @@ | |||
1 | /* | ||
2 | * udbg debug output routine via GELIC UDP broadcasts | ||
3 | * | ||
4 | * Copyright (C) 2007 Sony Computer Entertainment Inc. | ||
5 | * Copyright 2006, 2007 Sony Corporation | ||
6 | * Copyright (C) 2010 Hector Martin <hector@marcansoft.com> | ||
7 | * Copyright (C) 2011 Andre Heider <a.heider@gmail.com> | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or | ||
10 | * modify it under the terms of the GNU General Public License | ||
11 | * as published by the Free Software Foundation; either version 2 | ||
12 | * of the License, or (at your option) any later version. | ||
13 | * | ||
14 | */ | ||
15 | |||
16 | #include <asm/io.h> | ||
17 | #include <asm/udbg.h> | ||
18 | #include <asm/lv1call.h> | ||
19 | |||
20 | #define GELIC_BUS_ID 1 | ||
21 | #define GELIC_DEVICE_ID 0 | ||
22 | #define GELIC_DEBUG_PORT 18194 | ||
23 | #define GELIC_MAX_MESSAGE_SIZE 1000 | ||
24 | |||
25 | #define GELIC_LV1_GET_MAC_ADDRESS 1 | ||
26 | #define GELIC_LV1_GET_VLAN_ID 4 | ||
27 | #define GELIC_LV1_VLAN_TX_ETHERNET_0 2 | ||
28 | |||
29 | #define GELIC_DESCR_DMA_STAT_MASK 0xf0000000 | ||
30 | #define GELIC_DESCR_DMA_CARDOWNED 0xa0000000 | ||
31 | |||
32 | #define GELIC_DESCR_TX_DMA_IKE 0x00080000 | ||
33 | #define GELIC_DESCR_TX_DMA_NO_CHKSUM 0x00000000 | ||
34 | #define GELIC_DESCR_TX_DMA_FRAME_TAIL 0x00040000 | ||
35 | |||
36 | #define GELIC_DESCR_DMA_CMD_NO_CHKSUM (GELIC_DESCR_DMA_CARDOWNED | \ | ||
37 | GELIC_DESCR_TX_DMA_IKE | \ | ||
38 | GELIC_DESCR_TX_DMA_NO_CHKSUM) | ||
39 | |||
40 | static u64 bus_addr; | ||
41 | |||
42 | struct gelic_descr { | ||
43 | /* as defined by the hardware */ | ||
44 | __be32 buf_addr; | ||
45 | __be32 buf_size; | ||
46 | __be32 next_descr_addr; | ||
47 | __be32 dmac_cmd_status; | ||
48 | __be32 result_size; | ||
49 | __be32 valid_size; /* all zeroes for tx */ | ||
50 | __be32 data_status; | ||
51 | __be32 data_error; /* all zeroes for tx */ | ||
52 | } __attribute__((aligned(32))); | ||
53 | |||
54 | struct debug_block { | ||
55 | struct gelic_descr descr; | ||
56 | u8 pkt[1520]; | ||
57 | } __packed; | ||
58 | |||
59 | struct ethhdr { | ||
60 | u8 dest[6]; | ||
61 | u8 src[6]; | ||
62 | u16 type; | ||
63 | } __packed; | ||
64 | |||
65 | struct vlantag { | ||
66 | u16 vlan; | ||
67 | u16 subtype; | ||
68 | } __packed; | ||
69 | |||
70 | struct iphdr { | ||
71 | u8 ver_len; | ||
72 | u8 dscp_ecn; | ||
73 | u16 total_length; | ||
74 | u16 ident; | ||
75 | u16 frag_off_flags; | ||
76 | u8 ttl; | ||
77 | u8 proto; | ||
78 | u16 checksum; | ||
79 | u32 src; | ||
80 | u32 dest; | ||
81 | } __packed; | ||
82 | |||
83 | struct udphdr { | ||
84 | u16 src; | ||
85 | u16 dest; | ||
86 | u16 len; | ||
87 | u16 checksum; | ||
88 | } __packed; | ||
89 | |||
90 | static __iomem struct ethhdr *h_eth; | ||
91 | static __iomem struct vlantag *h_vlan; | ||
92 | static __iomem struct iphdr *h_ip; | ||
93 | static __iomem struct udphdr *h_udp; | ||
94 | |||
95 | static __iomem char *pmsg; | ||
96 | static __iomem char *pmsgc; | ||
97 | |||
98 | static __iomem struct debug_block dbg __attribute__((aligned(32))); | ||
99 | |||
100 | static int header_size; | ||
101 | |||
102 | static void map_dma_mem(int bus_id, int dev_id, void *start, size_t len, | ||
103 | u64 *real_bus_addr) | ||
104 | { | ||
105 | s64 result; | ||
106 | u64 real_addr = ((u64)start) & 0x0fffffffffffffffUL; | ||
107 | u64 real_end = real_addr + len; | ||
108 | u64 map_start = real_addr & ~0xfff; | ||
109 | u64 map_end = (real_end + 0xfff) & ~0xfff; | ||
110 | u64 bus_addr = 0; | ||
111 | |||
112 | u64 flags = 0xf800000000000000UL; | ||
113 | |||
114 | result = lv1_allocate_device_dma_region(bus_id, dev_id, | ||
115 | map_end - map_start, 12, 0, | ||
116 | &bus_addr); | ||
117 | if (result) | ||
118 | lv1_panic(0); | ||
119 | |||
120 | result = lv1_map_device_dma_region(bus_id, dev_id, map_start, | ||
121 | bus_addr, map_end - map_start, | ||
122 | flags); | ||
123 | if (result) | ||
124 | lv1_panic(0); | ||
125 | |||
126 | *real_bus_addr = bus_addr + real_addr - map_start; | ||
127 | } | ||
128 | |||
129 | static int unmap_dma_mem(int bus_id, int dev_id, u64 bus_addr, size_t len) | ||
130 | { | ||
131 | s64 result; | ||
132 | u64 real_bus_addr; | ||
133 | |||
134 | real_bus_addr = bus_addr & ~0xfff; | ||
135 | len += bus_addr - real_bus_addr; | ||
136 | len = (len + 0xfff) & ~0xfff; | ||
137 | |||
138 | result = lv1_unmap_device_dma_region(bus_id, dev_id, real_bus_addr, | ||
139 | len); | ||
140 | if (result) | ||
141 | return result; | ||
142 | |||
143 | return lv1_free_device_dma_region(bus_id, dev_id, real_bus_addr); | ||
144 | } | ||
145 | |||
146 | static void gelic_debug_init(void) | ||
147 | { | ||
148 | s64 result; | ||
149 | u64 v2; | ||
150 | u64 mac; | ||
151 | u64 vlan_id; | ||
152 | |||
153 | result = lv1_open_device(GELIC_BUS_ID, GELIC_DEVICE_ID, 0); | ||
154 | if (result) | ||
155 | lv1_panic(0); | ||
156 | |||
157 | map_dma_mem(GELIC_BUS_ID, GELIC_DEVICE_ID, &dbg, sizeof(dbg), | ||
158 | &bus_addr); | ||
159 | |||
160 | memset(&dbg, 0, sizeof(dbg)); | ||
161 | |||
162 | dbg.descr.buf_addr = bus_addr + offsetof(struct debug_block, pkt); | ||
163 | |||
164 | wmb(); | ||
165 | |||
166 | result = lv1_net_control(GELIC_BUS_ID, GELIC_DEVICE_ID, | ||
167 | GELIC_LV1_GET_MAC_ADDRESS, 0, 0, 0, | ||
168 | &mac, &v2); | ||
169 | if (result) | ||
170 | lv1_panic(0); | ||
171 | |||
172 | mac <<= 16; | ||
173 | |||
174 | h_eth = (struct ethhdr *)dbg.pkt; | ||
175 | |||
176 | memset(&h_eth->dest, 0xff, 6); | ||
177 | memcpy(&h_eth->src, &mac, 6); | ||
178 | |||
179 | header_size = sizeof(struct ethhdr); | ||
180 | |||
181 | result = lv1_net_control(GELIC_BUS_ID, GELIC_DEVICE_ID, | ||
182 | GELIC_LV1_GET_VLAN_ID, | ||
183 | GELIC_LV1_VLAN_TX_ETHERNET_0, 0, 0, | ||
184 | &vlan_id, &v2); | ||
185 | if (!result) { | ||
186 | h_eth->type = 0x8100; | ||
187 | |||
188 | header_size += sizeof(struct vlantag); | ||
189 | h_vlan = (struct vlantag *)(h_eth + 1); | ||
190 | h_vlan->vlan = vlan_id; | ||
191 | h_vlan->subtype = 0x0800; | ||
192 | h_ip = (struct iphdr *)(h_vlan + 1); | ||
193 | } else { | ||
194 | h_eth->type = 0x0800; | ||
195 | h_ip = (struct iphdr *)(h_eth + 1); | ||
196 | } | ||
197 | |||
198 | header_size += sizeof(struct iphdr); | ||
199 | h_ip->ver_len = 0x45; | ||
200 | h_ip->ttl = 10; | ||
201 | h_ip->proto = 0x11; | ||
202 | h_ip->src = 0x00000000; | ||
203 | h_ip->dest = 0xffffffff; | ||
204 | |||
205 | header_size += sizeof(struct udphdr); | ||
206 | h_udp = (struct udphdr *)(h_ip + 1); | ||
207 | h_udp->src = GELIC_DEBUG_PORT; | ||
208 | h_udp->dest = GELIC_DEBUG_PORT; | ||
209 | |||
210 | pmsgc = pmsg = (char *)(h_udp + 1); | ||
211 | } | ||
212 | |||
213 | static void gelic_debug_shutdown(void) | ||
214 | { | ||
215 | if (bus_addr) | ||
216 | unmap_dma_mem(GELIC_BUS_ID, GELIC_DEVICE_ID, | ||
217 | bus_addr, sizeof(dbg)); | ||
218 | lv1_close_device(GELIC_BUS_ID, GELIC_DEVICE_ID); | ||
219 | } | ||
220 | |||
221 | static void gelic_sendbuf(int msgsize) | ||
222 | { | ||
223 | u16 *p; | ||
224 | u32 sum; | ||
225 | int i; | ||
226 | |||
227 | dbg.descr.buf_size = header_size + msgsize; | ||
228 | h_ip->total_length = msgsize + sizeof(struct udphdr) + | ||
229 | sizeof(struct iphdr); | ||
230 | h_udp->len = msgsize + sizeof(struct udphdr); | ||
231 | |||
232 | h_ip->checksum = 0; | ||
233 | sum = 0; | ||
234 | p = (u16 *)h_ip; | ||
235 | for (i = 0; i < 5; i++) | ||
236 | sum += *p++; | ||
237 | h_ip->checksum = ~(sum + (sum >> 16)); | ||
238 | |||
239 | dbg.descr.dmac_cmd_status = GELIC_DESCR_DMA_CMD_NO_CHKSUM | | ||
240 | GELIC_DESCR_TX_DMA_FRAME_TAIL; | ||
241 | dbg.descr.result_size = 0; | ||
242 | dbg.descr.data_status = 0; | ||
243 | |||
244 | wmb(); | ||
245 | |||
246 | lv1_net_start_tx_dma(GELIC_BUS_ID, GELIC_DEVICE_ID, bus_addr, 0); | ||
247 | |||
248 | while ((dbg.descr.dmac_cmd_status & GELIC_DESCR_DMA_STAT_MASK) == | ||
249 | GELIC_DESCR_DMA_CARDOWNED) | ||
250 | cpu_relax(); | ||
251 | } | ||
252 | |||
253 | static void ps3gelic_udbg_putc(char ch) | ||
254 | { | ||
255 | *pmsgc++ = ch; | ||
256 | if (ch == '\n' || (pmsgc-pmsg) >= GELIC_MAX_MESSAGE_SIZE) { | ||
257 | gelic_sendbuf(pmsgc-pmsg); | ||
258 | pmsgc = pmsg; | ||
259 | } | ||
260 | } | ||
261 | |||
262 | void __init udbg_init_ps3gelic(void) | ||
263 | { | ||
264 | gelic_debug_init(); | ||
265 | udbg_putc = ps3gelic_udbg_putc; | ||
266 | } | ||
267 | |||
268 | void udbg_shutdown_ps3gelic(void) | ||
269 | { | ||
270 | udbg_putc = NULL; | ||
271 | gelic_debug_shutdown(); | ||
272 | } | ||
273 | EXPORT_SYMBOL(udbg_shutdown_ps3gelic); | ||
diff --git a/arch/powerpc/platforms/ps3/interrupt.c b/arch/powerpc/platforms/ps3/interrupt.c index 600ed2c0ed59..404bc52b7806 100644 --- a/arch/powerpc/platforms/ps3/interrupt.c +++ b/arch/powerpc/platforms/ps3/interrupt.c | |||
@@ -19,7 +19,7 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/module.h> | 22 | #include <linux/export.h> |
23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
24 | 24 | ||
25 | #include <asm/machdep.h> | 25 | #include <asm/machdep.h> |
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c index c2045880e674..72714ad27842 100644 --- a/arch/powerpc/platforms/ps3/mm.c +++ b/arch/powerpc/platforms/ps3/mm.c | |||
@@ -19,7 +19,7 @@ | |||
19 | */ | 19 | */ |
20 | 20 | ||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/module.h> | 22 | #include <linux/export.h> |
23 | #include <linux/memory_hotplug.h> | 23 | #include <linux/memory_hotplug.h> |
24 | #include <linux/memblock.h> | 24 | #include <linux/memblock.h> |
25 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
diff --git a/arch/powerpc/platforms/ps3/os-area.c b/arch/powerpc/platforms/ps3/os-area.c index 5b759b669598..56d26bc4fd41 100644 --- a/arch/powerpc/platforms/ps3/os-area.c +++ b/arch/powerpc/platforms/ps3/os-area.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/workqueue.h> | 23 | #include <linux/workqueue.h> |
24 | #include <linux/fs.h> | 24 | #include <linux/fs.h> |
25 | #include <linux/syscalls.h> | 25 | #include <linux/syscalls.h> |
26 | #include <linux/export.h> | ||
26 | #include <linux/ctype.h> | 27 | #include <linux/ctype.h> |
27 | #include <linux/memblock.h> | 28 | #include <linux/memblock.h> |
28 | #include <linux/of.h> | 29 | #include <linux/of.h> |
diff --git a/arch/powerpc/platforms/ps3/repository.c b/arch/powerpc/platforms/ps3/repository.c index 5e304c292f68..ca40f6afd35d 100644 --- a/arch/powerpc/platforms/ps3/repository.c +++ b/arch/powerpc/platforms/ps3/repository.c | |||
@@ -184,7 +184,7 @@ int ps3_repository_read_bus_type(unsigned int bus_index, | |||
184 | enum ps3_bus_type *bus_type) | 184 | enum ps3_bus_type *bus_type) |
185 | { | 185 | { |
186 | int result; | 186 | int result; |
187 | u64 v1; | 187 | u64 v1 = 0; |
188 | 188 | ||
189 | result = read_node(PS3_LPAR_ID_PME, | 189 | result = read_node(PS3_LPAR_ID_PME, |
190 | make_first_field("bus", bus_index), | 190 | make_first_field("bus", bus_index), |
@@ -199,7 +199,7 @@ int ps3_repository_read_bus_num_dev(unsigned int bus_index, | |||
199 | unsigned int *num_dev) | 199 | unsigned int *num_dev) |
200 | { | 200 | { |
201 | int result; | 201 | int result; |
202 | u64 v1; | 202 | u64 v1 = 0; |
203 | 203 | ||
204 | result = read_node(PS3_LPAR_ID_PME, | 204 | result = read_node(PS3_LPAR_ID_PME, |
205 | make_first_field("bus", bus_index), | 205 | make_first_field("bus", bus_index), |
@@ -239,7 +239,7 @@ int ps3_repository_read_dev_type(unsigned int bus_index, | |||
239 | unsigned int dev_index, enum ps3_dev_type *dev_type) | 239 | unsigned int dev_index, enum ps3_dev_type *dev_type) |
240 | { | 240 | { |
241 | int result; | 241 | int result; |
242 | u64 v1; | 242 | u64 v1 = 0; |
243 | 243 | ||
244 | result = read_node(PS3_LPAR_ID_PME, | 244 | result = read_node(PS3_LPAR_ID_PME, |
245 | make_first_field("bus", bus_index), | 245 | make_first_field("bus", bus_index), |
@@ -256,8 +256,8 @@ int ps3_repository_read_dev_intr(unsigned int bus_index, | |||
256 | enum ps3_interrupt_type *intr_type, unsigned int *interrupt_id) | 256 | enum ps3_interrupt_type *intr_type, unsigned int *interrupt_id) |
257 | { | 257 | { |
258 | int result; | 258 | int result; |
259 | u64 v1; | 259 | u64 v1 = 0; |
260 | u64 v2; | 260 | u64 v2 = 0; |
261 | 261 | ||
262 | result = read_node(PS3_LPAR_ID_PME, | 262 | result = read_node(PS3_LPAR_ID_PME, |
263 | make_first_field("bus", bus_index), | 263 | make_first_field("bus", bus_index), |
@@ -275,7 +275,7 @@ int ps3_repository_read_dev_reg_type(unsigned int bus_index, | |||
275 | enum ps3_reg_type *reg_type) | 275 | enum ps3_reg_type *reg_type) |
276 | { | 276 | { |
277 | int result; | 277 | int result; |
278 | u64 v1; | 278 | u64 v1 = 0; |
279 | 279 | ||
280 | result = read_node(PS3_LPAR_ID_PME, | 280 | result = read_node(PS3_LPAR_ID_PME, |
281 | make_first_field("bus", bus_index), | 281 | make_first_field("bus", bus_index), |
@@ -615,7 +615,7 @@ int ps3_repository_read_stor_dev_num_regions(unsigned int bus_index, | |||
615 | unsigned int dev_index, unsigned int *num_regions) | 615 | unsigned int dev_index, unsigned int *num_regions) |
616 | { | 616 | { |
617 | int result; | 617 | int result; |
618 | u64 v1; | 618 | u64 v1 = 0; |
619 | 619 | ||
620 | result = read_node(PS3_LPAR_ID_PME, | 620 | result = read_node(PS3_LPAR_ID_PME, |
621 | make_first_field("bus", bus_index), | 621 | make_first_field("bus", bus_index), |
@@ -631,7 +631,7 @@ int ps3_repository_read_stor_dev_region_id(unsigned int bus_index, | |||
631 | unsigned int *region_id) | 631 | unsigned int *region_id) |
632 | { | 632 | { |
633 | int result; | 633 | int result; |
634 | u64 v1; | 634 | u64 v1 = 0; |
635 | 635 | ||
636 | result = read_node(PS3_LPAR_ID_PME, | 636 | result = read_node(PS3_LPAR_ID_PME, |
637 | make_first_field("bus", bus_index), | 637 | make_first_field("bus", bus_index), |
@@ -786,7 +786,7 @@ int ps3_repository_read_mm_info(u64 *rm_base, u64 *rm_size, u64 *region_total) | |||
786 | int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved) | 786 | int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved) |
787 | { | 787 | { |
788 | int result; | 788 | int result; |
789 | u64 v1; | 789 | u64 v1 = 0; |
790 | 790 | ||
791 | result = read_node(PS3_LPAR_ID_CURRENT, | 791 | result = read_node(PS3_LPAR_ID_CURRENT, |
792 | make_first_field("bi", 0), | 792 | make_first_field("bi", 0), |
@@ -805,7 +805,7 @@ int ps3_repository_read_num_spu_reserved(unsigned int *num_spu_reserved) | |||
805 | int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id) | 805 | int ps3_repository_read_num_spu_resource_id(unsigned int *num_resource_id) |
806 | { | 806 | { |
807 | int result; | 807 | int result; |
808 | u64 v1; | 808 | u64 v1 = 0; |
809 | 809 | ||
810 | result = read_node(PS3_LPAR_ID_CURRENT, | 810 | result = read_node(PS3_LPAR_ID_CURRENT, |
811 | make_first_field("bi", 0), | 811 | make_first_field("bi", 0), |
@@ -827,8 +827,8 @@ int ps3_repository_read_spu_resource_id(unsigned int res_index, | |||
827 | enum ps3_spu_resource_type *resource_type, unsigned int *resource_id) | 827 | enum ps3_spu_resource_type *resource_type, unsigned int *resource_id) |
828 | { | 828 | { |
829 | int result; | 829 | int result; |
830 | u64 v1; | 830 | u64 v1 = 0; |
831 | u64 v2; | 831 | u64 v2 = 0; |
832 | 832 | ||
833 | result = read_node(PS3_LPAR_ID_CURRENT, | 833 | result = read_node(PS3_LPAR_ID_CURRENT, |
834 | make_first_field("bi", 0), | 834 | make_first_field("bi", 0), |
@@ -854,7 +854,7 @@ static int ps3_repository_read_boot_dat_address(u64 *address) | |||
854 | int ps3_repository_read_boot_dat_size(unsigned int *size) | 854 | int ps3_repository_read_boot_dat_size(unsigned int *size) |
855 | { | 855 | { |
856 | int result; | 856 | int result; |
857 | u64 v1; | 857 | u64 v1 = 0; |
858 | 858 | ||
859 | result = read_node(PS3_LPAR_ID_CURRENT, | 859 | result = read_node(PS3_LPAR_ID_CURRENT, |
860 | make_first_field("bi", 0), | 860 | make_first_field("bi", 0), |
@@ -869,7 +869,7 @@ int ps3_repository_read_boot_dat_size(unsigned int *size) | |||
869 | int ps3_repository_read_vuart_av_port(unsigned int *port) | 869 | int ps3_repository_read_vuart_av_port(unsigned int *port) |
870 | { | 870 | { |
871 | int result; | 871 | int result; |
872 | u64 v1; | 872 | u64 v1 = 0; |
873 | 873 | ||
874 | result = read_node(PS3_LPAR_ID_CURRENT, | 874 | result = read_node(PS3_LPAR_ID_CURRENT, |
875 | make_first_field("bi", 0), | 875 | make_first_field("bi", 0), |
@@ -884,7 +884,7 @@ int ps3_repository_read_vuart_av_port(unsigned int *port) | |||
884 | int ps3_repository_read_vuart_sysmgr_port(unsigned int *port) | 884 | int ps3_repository_read_vuart_sysmgr_port(unsigned int *port) |
885 | { | 885 | { |
886 | int result; | 886 | int result; |
887 | u64 v1; | 887 | u64 v1 = 0; |
888 | 888 | ||
889 | result = read_node(PS3_LPAR_ID_CURRENT, | 889 | result = read_node(PS3_LPAR_ID_CURRENT, |
890 | make_first_field("bi", 0), | 890 | make_first_field("bi", 0), |
@@ -919,7 +919,7 @@ int ps3_repository_read_boot_dat_info(u64 *lpar_addr, unsigned int *size) | |||
919 | int ps3_repository_read_num_be(unsigned int *num_be) | 919 | int ps3_repository_read_num_be(unsigned int *num_be) |
920 | { | 920 | { |
921 | int result; | 921 | int result; |
922 | u64 v1; | 922 | u64 v1 = 0; |
923 | 923 | ||
924 | result = read_node(PS3_LPAR_ID_PME, | 924 | result = read_node(PS3_LPAR_ID_PME, |
925 | make_first_field("ben", 0), | 925 | make_first_field("ben", 0), |
diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c index 149bea2ce583..e8ec1b2bfffd 100644 --- a/arch/powerpc/platforms/ps3/setup.c +++ b/arch/powerpc/platforms/ps3/setup.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/fs.h> | 23 | #include <linux/fs.h> |
24 | #include <linux/root_dev.h> | 24 | #include <linux/root_dev.h> |
25 | #include <linux/console.h> | 25 | #include <linux/console.h> |
26 | #include <linux/export.h> | ||
26 | #include <linux/bootmem.h> | 27 | #include <linux/bootmem.h> |
27 | 28 | ||
28 | #include <asm/machdep.h> | 29 | #include <asm/machdep.h> |
diff --git a/arch/powerpc/platforms/ps3/spu.c b/arch/powerpc/platforms/ps3/spu.c index 375a9f92158d..451fad1c92a8 100644 --- a/arch/powerpc/platforms/ps3/spu.c +++ b/arch/powerpc/platforms/ps3/spu.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
24 | #include <linux/mmzone.h> | 24 | #include <linux/mmzone.h> |
25 | #include <linux/export.h> | ||
25 | #include <linux/io.h> | 26 | #include <linux/io.h> |
26 | #include <linux/mm.h> | 27 | #include <linux/mm.h> |
27 | 28 | ||
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index 23083c397528..880eb9ce22c5 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
@@ -20,7 +20,7 @@ | |||
20 | 20 | ||
21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
23 | #include <linux/module.h> | 23 | #include <linux/export.h> |
24 | #include <linux/dma-mapping.h> | 24 | #include <linux/dma-mapping.h> |
25 | #include <linux/err.h> | 25 | #include <linux/err.h> |
26 | #include <linux/slab.h> | 26 | #include <linux/slab.h> |
@@ -695,12 +695,18 @@ static int ps3_dma_supported(struct device *_dev, u64 mask) | |||
695 | return mask >= DMA_BIT_MASK(32); | 695 | return mask >= DMA_BIT_MASK(32); |
696 | } | 696 | } |
697 | 697 | ||
698 | static u64 ps3_dma_get_required_mask(struct device *_dev) | ||
699 | { | ||
700 | return DMA_BIT_MASK(32); | ||
701 | } | ||
702 | |||
698 | static struct dma_map_ops ps3_sb_dma_ops = { | 703 | static struct dma_map_ops ps3_sb_dma_ops = { |
699 | .alloc_coherent = ps3_alloc_coherent, | 704 | .alloc_coherent = ps3_alloc_coherent, |
700 | .free_coherent = ps3_free_coherent, | 705 | .free_coherent = ps3_free_coherent, |
701 | .map_sg = ps3_sb_map_sg, | 706 | .map_sg = ps3_sb_map_sg, |
702 | .unmap_sg = ps3_sb_unmap_sg, | 707 | .unmap_sg = ps3_sb_unmap_sg, |
703 | .dma_supported = ps3_dma_supported, | 708 | .dma_supported = ps3_dma_supported, |
709 | .get_required_mask = ps3_dma_get_required_mask, | ||
704 | .map_page = ps3_sb_map_page, | 710 | .map_page = ps3_sb_map_page, |
705 | .unmap_page = ps3_unmap_page, | 711 | .unmap_page = ps3_unmap_page, |
706 | }; | 712 | }; |
@@ -711,6 +717,7 @@ static struct dma_map_ops ps3_ioc0_dma_ops = { | |||
711 | .map_sg = ps3_ioc0_map_sg, | 717 | .map_sg = ps3_ioc0_map_sg, |
712 | .unmap_sg = ps3_ioc0_unmap_sg, | 718 | .unmap_sg = ps3_ioc0_unmap_sg, |
713 | .dma_supported = ps3_dma_supported, | 719 | .dma_supported = ps3_dma_supported, |
720 | .get_required_mask = ps3_dma_get_required_mask, | ||
714 | .map_page = ps3_ioc0_map_page, | 721 | .map_page = ps3_ioc0_map_page, |
715 | .unmap_page = ps3_unmap_page, | 722 | .unmap_page = ps3_unmap_page, |
716 | }; | 723 | }; |