xref: /openbmc/linux/drivers/ssb/main.c (revision aab547ce0d1493d400b6468c521a0137cd8c1edf)
1 /*
2  * Sonics Silicon Backplane
3  * Subsystem core
4  *
5  * Copyright 2005, Broadcom Corporation
6  * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
7  *
8  * Licensed under the GNU/GPL. See COPYING for details.
9  */
10 
11 #include "ssb_private.h"
12 
13 #include <linux/delay.h>
14 #include <linux/io.h>
15 #include <linux/ssb/ssb.h>
16 #include <linux/ssb/ssb_regs.h>
17 #include <linux/ssb/ssb_driver_gige.h>
18 #include <linux/dma-mapping.h>
19 #include <linux/pci.h>
20 
21 #include <pcmcia/cs_types.h>
22 #include <pcmcia/cs.h>
23 #include <pcmcia/cistpl.h>
24 #include <pcmcia/ds.h>
25 
26 
27 MODULE_DESCRIPTION("Sonics Silicon Backplane driver");
28 MODULE_LICENSE("GPL");
29 
30 
31 /* Temporary list of yet-to-be-attached buses */
32 static LIST_HEAD(attach_queue);
33 /* List if running buses */
34 static LIST_HEAD(buses);
35 /* Software ID counter */
36 static unsigned int next_busnumber;
37 /* buses_mutes locks the two buslists and the next_busnumber.
38  * Don't lock this directly, but use ssb_buses_[un]lock() below. */
39 static DEFINE_MUTEX(buses_mutex);
40 
41 /* There are differences in the codeflow, if the bus is
42  * initialized from early boot, as various needed services
43  * are not available early. This is a mechanism to delay
44  * these initializations to after early boot has finished.
45  * It's also used to avoid mutex locking, as that's not
46  * available and needed early. */
47 static bool ssb_is_early_boot = 1;
48 
49 static void ssb_buses_lock(void);
50 static void ssb_buses_unlock(void);
51 
52 
53 #ifdef CONFIG_SSB_PCIHOST
54 struct ssb_bus *ssb_pci_dev_to_bus(struct pci_dev *pdev)
55 {
56 	struct ssb_bus *bus;
57 
58 	ssb_buses_lock();
59 	list_for_each_entry(bus, &buses, list) {
60 		if (bus->bustype == SSB_BUSTYPE_PCI &&
61 		    bus->host_pci == pdev)
62 			goto found;
63 	}
64 	bus = NULL;
65 found:
66 	ssb_buses_unlock();
67 
68 	return bus;
69 }
70 #endif /* CONFIG_SSB_PCIHOST */
71 
72 int ssb_for_each_bus_call(unsigned long data,
73 			  int (*func)(struct ssb_bus *bus, unsigned long data))
74 {
75 	struct ssb_bus *bus;
76 	int res;
77 
78 	ssb_buses_lock();
79 	list_for_each_entry(bus, &buses, list) {
80 		res = func(bus, data);
81 		if (res >= 0) {
82 			ssb_buses_unlock();
83 			return res;
84 		}
85 	}
86 	ssb_buses_unlock();
87 
88 	return -ENODEV;
89 }
90 
91 static struct ssb_device *ssb_device_get(struct ssb_device *dev)
92 {
93 	if (dev)
94 		get_device(dev->dev);
95 	return dev;
96 }
97 
98 static void ssb_device_put(struct ssb_device *dev)
99 {
100 	if (dev)
101 		put_device(dev->dev);
102 }
103 
104 static int ssb_bus_resume(struct ssb_bus *bus)
105 {
106 	int err;
107 
108 	ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
109 	err = ssb_pcmcia_init(bus);
110 	if (err) {
111 		/* No need to disable XTAL, as we don't have one on PCMCIA. */
112 		return err;
113 	}
114 	ssb_chipco_resume(&bus->chipco);
115 
116 	return 0;
117 }
118 
119 static int ssb_device_resume(struct device *dev)
120 {
121 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
122 	struct ssb_driver *ssb_drv;
123 	struct ssb_bus *bus;
124 	int err = 0;
125 
126 	bus = ssb_dev->bus;
127 	if (bus->suspend_cnt == bus->nr_devices) {
128 		err = ssb_bus_resume(bus);
129 		if (err)
130 			return err;
131 	}
132 	bus->suspend_cnt--;
133 	if (dev->driver) {
134 		ssb_drv = drv_to_ssb_drv(dev->driver);
135 		if (ssb_drv && ssb_drv->resume)
136 			err = ssb_drv->resume(ssb_dev);
137 		if (err)
138 			goto out;
139 	}
140 out:
141 	return err;
142 }
143 
144 static void ssb_bus_suspend(struct ssb_bus *bus, pm_message_t state)
145 {
146 	ssb_chipco_suspend(&bus->chipco, state);
147 	ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
148 
149 	/* Reset HW state information in memory, so that HW is
150 	 * completely reinitialized on resume. */
151 	bus->mapped_device = NULL;
152 #ifdef CONFIG_SSB_DRIVER_PCICORE
153 	bus->pcicore.setup_done = 0;
154 #endif
155 #ifdef CONFIG_SSB_DEBUG
156 	bus->powered_up = 0;
157 #endif
158 }
159 
160 static int ssb_device_suspend(struct device *dev, pm_message_t state)
161 {
162 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
163 	struct ssb_driver *ssb_drv;
164 	struct ssb_bus *bus;
165 	int err = 0;
166 
167 	if (dev->driver) {
168 		ssb_drv = drv_to_ssb_drv(dev->driver);
169 		if (ssb_drv && ssb_drv->suspend)
170 			err = ssb_drv->suspend(ssb_dev, state);
171 		if (err)
172 			goto out;
173 	}
174 
175 	bus = ssb_dev->bus;
176 	bus->suspend_cnt++;
177 	if (bus->suspend_cnt == bus->nr_devices) {
178 		/* All devices suspended. Shutdown the bus. */
179 		ssb_bus_suspend(bus, state);
180 	}
181 
182 out:
183 	return err;
184 }
185 
186 #ifdef CONFIG_SSB_PCIHOST
187 int ssb_devices_freeze(struct ssb_bus *bus)
188 {
189 	struct ssb_device *dev;
190 	struct ssb_driver *drv;
191 	int err = 0;
192 	int i;
193 	pm_message_t state = PMSG_FREEZE;
194 
195 	/* First check that we are capable to freeze all devices. */
196 	for (i = 0; i < bus->nr_devices; i++) {
197 		dev = &(bus->devices[i]);
198 		if (!dev->dev ||
199 		    !dev->dev->driver ||
200 		    !device_is_registered(dev->dev))
201 			continue;
202 		drv = drv_to_ssb_drv(dev->dev->driver);
203 		if (!drv)
204 			continue;
205 		if (!drv->suspend) {
206 			/* Nope, can't suspend this one. */
207 			return -EOPNOTSUPP;
208 		}
209 	}
210 	/* Now suspend all devices */
211 	for (i = 0; i < bus->nr_devices; i++) {
212 		dev = &(bus->devices[i]);
213 		if (!dev->dev ||
214 		    !dev->dev->driver ||
215 		    !device_is_registered(dev->dev))
216 			continue;
217 		drv = drv_to_ssb_drv(dev->dev->driver);
218 		if (!drv)
219 			continue;
220 		err = drv->suspend(dev, state);
221 		if (err) {
222 			ssb_printk(KERN_ERR PFX "Failed to freeze device %s\n",
223 				   dev->dev->bus_id);
224 			goto err_unwind;
225 		}
226 	}
227 
228 	return 0;
229 err_unwind:
230 	for (i--; i >= 0; i--) {
231 		dev = &(bus->devices[i]);
232 		if (!dev->dev ||
233 		    !dev->dev->driver ||
234 		    !device_is_registered(dev->dev))
235 			continue;
236 		drv = drv_to_ssb_drv(dev->dev->driver);
237 		if (!drv)
238 			continue;
239 		if (drv->resume)
240 			drv->resume(dev);
241 	}
242 	return err;
243 }
244 
245 int ssb_devices_thaw(struct ssb_bus *bus)
246 {
247 	struct ssb_device *dev;
248 	struct ssb_driver *drv;
249 	int err;
250 	int i;
251 
252 	for (i = 0; i < bus->nr_devices; i++) {
253 		dev = &(bus->devices[i]);
254 		if (!dev->dev ||
255 		    !dev->dev->driver ||
256 		    !device_is_registered(dev->dev))
257 			continue;
258 		drv = drv_to_ssb_drv(dev->dev->driver);
259 		if (!drv)
260 			continue;
261 		if (SSB_WARN_ON(!drv->resume))
262 			continue;
263 		err = drv->resume(dev);
264 		if (err) {
265 			ssb_printk(KERN_ERR PFX "Failed to thaw device %s\n",
266 				   dev->dev->bus_id);
267 		}
268 	}
269 
270 	return 0;
271 }
272 #endif /* CONFIG_SSB_PCIHOST */
273 
274 static void ssb_device_shutdown(struct device *dev)
275 {
276 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
277 	struct ssb_driver *ssb_drv;
278 
279 	if (!dev->driver)
280 		return;
281 	ssb_drv = drv_to_ssb_drv(dev->driver);
282 	if (ssb_drv && ssb_drv->shutdown)
283 		ssb_drv->shutdown(ssb_dev);
284 }
285 
286 static int ssb_device_remove(struct device *dev)
287 {
288 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
289 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
290 
291 	if (ssb_drv && ssb_drv->remove)
292 		ssb_drv->remove(ssb_dev);
293 	ssb_device_put(ssb_dev);
294 
295 	return 0;
296 }
297 
298 static int ssb_device_probe(struct device *dev)
299 {
300 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
301 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(dev->driver);
302 	int err = 0;
303 
304 	ssb_device_get(ssb_dev);
305 	if (ssb_drv && ssb_drv->probe)
306 		err = ssb_drv->probe(ssb_dev, &ssb_dev->id);
307 	if (err)
308 		ssb_device_put(ssb_dev);
309 
310 	return err;
311 }
312 
313 static int ssb_match_devid(const struct ssb_device_id *tabid,
314 			   const struct ssb_device_id *devid)
315 {
316 	if ((tabid->vendor != devid->vendor) &&
317 	    tabid->vendor != SSB_ANY_VENDOR)
318 		return 0;
319 	if ((tabid->coreid != devid->coreid) &&
320 	    tabid->coreid != SSB_ANY_ID)
321 		return 0;
322 	if ((tabid->revision != devid->revision) &&
323 	    tabid->revision != SSB_ANY_REV)
324 		return 0;
325 	return 1;
326 }
327 
328 static int ssb_bus_match(struct device *dev, struct device_driver *drv)
329 {
330 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
331 	struct ssb_driver *ssb_drv = drv_to_ssb_drv(drv);
332 	const struct ssb_device_id *id;
333 
334 	for (id = ssb_drv->id_table;
335 	     id->vendor || id->coreid || id->revision;
336 	     id++) {
337 		if (ssb_match_devid(id, &ssb_dev->id))
338 			return 1; /* found */
339 	}
340 
341 	return 0;
342 }
343 
344 static int ssb_device_uevent(struct device *dev, struct kobj_uevent_env *env)
345 {
346 	struct ssb_device *ssb_dev = dev_to_ssb_dev(dev);
347 
348 	if (!dev)
349 		return -ENODEV;
350 
351 	return add_uevent_var(env,
352 			     "MODALIAS=ssb:v%04Xid%04Xrev%02X",
353 			     ssb_dev->id.vendor, ssb_dev->id.coreid,
354 			     ssb_dev->id.revision);
355 }
356 
357 static struct bus_type ssb_bustype = {
358 	.name		= "ssb",
359 	.match		= ssb_bus_match,
360 	.probe		= ssb_device_probe,
361 	.remove		= ssb_device_remove,
362 	.shutdown	= ssb_device_shutdown,
363 	.suspend	= ssb_device_suspend,
364 	.resume		= ssb_device_resume,
365 	.uevent		= ssb_device_uevent,
366 };
367 
368 static void ssb_buses_lock(void)
369 {
370 	/* See the comment at the ssb_is_early_boot definition */
371 	if (!ssb_is_early_boot)
372 		mutex_lock(&buses_mutex);
373 }
374 
375 static void ssb_buses_unlock(void)
376 {
377 	/* See the comment at the ssb_is_early_boot definition */
378 	if (!ssb_is_early_boot)
379 		mutex_unlock(&buses_mutex);
380 }
381 
382 static void ssb_devices_unregister(struct ssb_bus *bus)
383 {
384 	struct ssb_device *sdev;
385 	int i;
386 
387 	for (i = bus->nr_devices - 1; i >= 0; i--) {
388 		sdev = &(bus->devices[i]);
389 		if (sdev->dev)
390 			device_unregister(sdev->dev);
391 	}
392 }
393 
394 void ssb_bus_unregister(struct ssb_bus *bus)
395 {
396 	ssb_buses_lock();
397 	ssb_devices_unregister(bus);
398 	list_del(&bus->list);
399 	ssb_buses_unlock();
400 
401 	/* ssb_pcmcia_exit(bus); */
402 	ssb_pci_exit(bus);
403 	ssb_iounmap(bus);
404 }
405 EXPORT_SYMBOL(ssb_bus_unregister);
406 
407 static void ssb_release_dev(struct device *dev)
408 {
409 	struct __ssb_dev_wrapper *devwrap;
410 
411 	devwrap = container_of(dev, struct __ssb_dev_wrapper, dev);
412 	kfree(devwrap);
413 }
414 
415 static int ssb_devices_register(struct ssb_bus *bus)
416 {
417 	struct ssb_device *sdev;
418 	struct device *dev;
419 	struct __ssb_dev_wrapper *devwrap;
420 	int i, err = 0;
421 	int dev_idx = 0;
422 
423 	for (i = 0; i < bus->nr_devices; i++) {
424 		sdev = &(bus->devices[i]);
425 
426 		/* We don't register SSB-system devices to the kernel,
427 		 * as the drivers for them are built into SSB. */
428 		switch (sdev->id.coreid) {
429 		case SSB_DEV_CHIPCOMMON:
430 		case SSB_DEV_PCI:
431 		case SSB_DEV_PCIE:
432 		case SSB_DEV_PCMCIA:
433 		case SSB_DEV_MIPS:
434 		case SSB_DEV_MIPS_3302:
435 		case SSB_DEV_EXTIF:
436 			continue;
437 		}
438 
439 		devwrap = kzalloc(sizeof(*devwrap), GFP_KERNEL);
440 		if (!devwrap) {
441 			ssb_printk(KERN_ERR PFX
442 				   "Could not allocate device\n");
443 			err = -ENOMEM;
444 			goto error;
445 		}
446 		dev = &devwrap->dev;
447 		devwrap->sdev = sdev;
448 
449 		dev->release = ssb_release_dev;
450 		dev->bus = &ssb_bustype;
451 		snprintf(dev->bus_id, sizeof(dev->bus_id),
452 			 "ssb%u:%d", bus->busnumber, dev_idx);
453 
454 		switch (bus->bustype) {
455 		case SSB_BUSTYPE_PCI:
456 #ifdef CONFIG_SSB_PCIHOST
457 			sdev->irq = bus->host_pci->irq;
458 			dev->parent = &bus->host_pci->dev;
459 #endif
460 			break;
461 		case SSB_BUSTYPE_PCMCIA:
462 #ifdef CONFIG_SSB_PCMCIAHOST
463 			sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
464 			dev->parent = &bus->host_pcmcia->dev;
465 #endif
466 			break;
467 		case SSB_BUSTYPE_SSB:
468 			break;
469 		}
470 
471 		sdev->dev = dev;
472 		err = device_register(dev);
473 		if (err) {
474 			ssb_printk(KERN_ERR PFX
475 				   "Could not register %s\n",
476 				   dev->bus_id);
477 			/* Set dev to NULL to not unregister
478 			 * dev on error unwinding. */
479 			sdev->dev = NULL;
480 			kfree(devwrap);
481 			goto error;
482 		}
483 		dev_idx++;
484 	}
485 
486 	return 0;
487 error:
488 	/* Unwind the already registered devices. */
489 	ssb_devices_unregister(bus);
490 	return err;
491 }
492 
493 /* Needs ssb_buses_lock() */
494 static int ssb_attach_queued_buses(void)
495 {
496 	struct ssb_bus *bus, *n;
497 	int err = 0;
498 	int drop_them_all = 0;
499 
500 	list_for_each_entry_safe(bus, n, &attach_queue, list) {
501 		if (drop_them_all) {
502 			list_del(&bus->list);
503 			continue;
504 		}
505 		/* Can't init the PCIcore in ssb_bus_register(), as that
506 		 * is too early in boot for embedded systems
507 		 * (no udelay() available). So do it here in attach stage.
508 		 */
509 		err = ssb_bus_powerup(bus, 0);
510 		if (err)
511 			goto error;
512 		ssb_pcicore_init(&bus->pcicore);
513 		ssb_bus_may_powerdown(bus);
514 
515 		err = ssb_devices_register(bus);
516 error:
517 		if (err) {
518 			drop_them_all = 1;
519 			list_del(&bus->list);
520 			continue;
521 		}
522 		list_move_tail(&bus->list, &buses);
523 	}
524 
525 	return err;
526 }
527 
528 static u8 ssb_ssb_read8(struct ssb_device *dev, u16 offset)
529 {
530 	struct ssb_bus *bus = dev->bus;
531 
532 	offset += dev->core_index * SSB_CORE_SIZE;
533 	return readb(bus->mmio + offset);
534 }
535 
536 static u16 ssb_ssb_read16(struct ssb_device *dev, u16 offset)
537 {
538 	struct ssb_bus *bus = dev->bus;
539 
540 	offset += dev->core_index * SSB_CORE_SIZE;
541 	return readw(bus->mmio + offset);
542 }
543 
544 static u32 ssb_ssb_read32(struct ssb_device *dev, u16 offset)
545 {
546 	struct ssb_bus *bus = dev->bus;
547 
548 	offset += dev->core_index * SSB_CORE_SIZE;
549 	return readl(bus->mmio + offset);
550 }
551 
552 static void ssb_ssb_write8(struct ssb_device *dev, u16 offset, u8 value)
553 {
554 	struct ssb_bus *bus = dev->bus;
555 
556 	offset += dev->core_index * SSB_CORE_SIZE;
557 	writeb(value, bus->mmio + offset);
558 }
559 
560 static void ssb_ssb_write16(struct ssb_device *dev, u16 offset, u16 value)
561 {
562 	struct ssb_bus *bus = dev->bus;
563 
564 	offset += dev->core_index * SSB_CORE_SIZE;
565 	writew(value, bus->mmio + offset);
566 }
567 
568 static void ssb_ssb_write32(struct ssb_device *dev, u16 offset, u32 value)
569 {
570 	struct ssb_bus *bus = dev->bus;
571 
572 	offset += dev->core_index * SSB_CORE_SIZE;
573 	writel(value, bus->mmio + offset);
574 }
575 
576 /* Ops for the plain SSB bus without a host-device (no PCI or PCMCIA). */
577 static const struct ssb_bus_ops ssb_ssb_ops = {
578 	.read8		= ssb_ssb_read8,
579 	.read16		= ssb_ssb_read16,
580 	.read32		= ssb_ssb_read32,
581 	.write8		= ssb_ssb_write8,
582 	.write16	= ssb_ssb_write16,
583 	.write32	= ssb_ssb_write32,
584 };
585 
586 static int ssb_fetch_invariants(struct ssb_bus *bus,
587 				ssb_invariants_func_t get_invariants)
588 {
589 	struct ssb_init_invariants iv;
590 	int err;
591 
592 	memset(&iv, 0, sizeof(iv));
593 	err = get_invariants(bus, &iv);
594 	if (err)
595 		goto out;
596 	memcpy(&bus->boardinfo, &iv.boardinfo, sizeof(iv.boardinfo));
597 	memcpy(&bus->sprom, &iv.sprom, sizeof(iv.sprom));
598 	bus->has_cardbus_slot = iv.has_cardbus_slot;
599 out:
600 	return err;
601 }
602 
603 static int ssb_bus_register(struct ssb_bus *bus,
604 			    ssb_invariants_func_t get_invariants,
605 			    unsigned long baseaddr)
606 {
607 	int err;
608 
609 	spin_lock_init(&bus->bar_lock);
610 	INIT_LIST_HEAD(&bus->list);
611 #ifdef CONFIG_SSB_EMBEDDED
612 	spin_lock_init(&bus->gpio_lock);
613 #endif
614 
615 	/* Powerup the bus */
616 	err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
617 	if (err)
618 		goto out;
619 	ssb_buses_lock();
620 	bus->busnumber = next_busnumber;
621 	/* Scan for devices (cores) */
622 	err = ssb_bus_scan(bus, baseaddr);
623 	if (err)
624 		goto err_disable_xtal;
625 
626 	/* Init PCI-host device (if any) */
627 	err = ssb_pci_init(bus);
628 	if (err)
629 		goto err_unmap;
630 	/* Init PCMCIA-host device (if any) */
631 	err = ssb_pcmcia_init(bus);
632 	if (err)
633 		goto err_pci_exit;
634 
635 	/* Initialize basic system devices (if available) */
636 	err = ssb_bus_powerup(bus, 0);
637 	if (err)
638 		goto err_pcmcia_exit;
639 	ssb_chipcommon_init(&bus->chipco);
640 	ssb_mipscore_init(&bus->mipscore);
641 	err = ssb_fetch_invariants(bus, get_invariants);
642 	if (err) {
643 		ssb_bus_may_powerdown(bus);
644 		goto err_pcmcia_exit;
645 	}
646 	ssb_bus_may_powerdown(bus);
647 
648 	/* Queue it for attach.
649 	 * See the comment at the ssb_is_early_boot definition. */
650 	list_add_tail(&bus->list, &attach_queue);
651 	if (!ssb_is_early_boot) {
652 		/* This is not early boot, so we must attach the bus now */
653 		err = ssb_attach_queued_buses();
654 		if (err)
655 			goto err_dequeue;
656 	}
657 	next_busnumber++;
658 	ssb_buses_unlock();
659 
660 out:
661 	return err;
662 
663 err_dequeue:
664 	list_del(&bus->list);
665 err_pcmcia_exit:
666 /*	ssb_pcmcia_exit(bus); */
667 err_pci_exit:
668 	ssb_pci_exit(bus);
669 err_unmap:
670 	ssb_iounmap(bus);
671 err_disable_xtal:
672 	ssb_buses_unlock();
673 	ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
674 	return err;
675 }
676 
677 #ifdef CONFIG_SSB_PCIHOST
678 int ssb_bus_pcibus_register(struct ssb_bus *bus,
679 			    struct pci_dev *host_pci)
680 {
681 	int err;
682 
683 	bus->bustype = SSB_BUSTYPE_PCI;
684 	bus->host_pci = host_pci;
685 	bus->ops = &ssb_pci_ops;
686 
687 	err = ssb_bus_register(bus, ssb_pci_get_invariants, 0);
688 	if (!err) {
689 		ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on "
690 			   "PCI device %s\n", host_pci->dev.bus_id);
691 	}
692 
693 	return err;
694 }
695 EXPORT_SYMBOL(ssb_bus_pcibus_register);
696 #endif /* CONFIG_SSB_PCIHOST */
697 
698 #ifdef CONFIG_SSB_PCMCIAHOST
699 int ssb_bus_pcmciabus_register(struct ssb_bus *bus,
700 			       struct pcmcia_device *pcmcia_dev,
701 			       unsigned long baseaddr)
702 {
703 	int err;
704 
705 	bus->bustype = SSB_BUSTYPE_PCMCIA;
706 	bus->host_pcmcia = pcmcia_dev;
707 	bus->ops = &ssb_pcmcia_ops;
708 
709 	err = ssb_bus_register(bus, ssb_pcmcia_get_invariants, baseaddr);
710 	if (!err) {
711 		ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on "
712 			   "PCMCIA device %s\n", pcmcia_dev->devname);
713 	}
714 
715 	return err;
716 }
717 EXPORT_SYMBOL(ssb_bus_pcmciabus_register);
718 #endif /* CONFIG_SSB_PCMCIAHOST */
719 
720 int ssb_bus_ssbbus_register(struct ssb_bus *bus,
721 			    unsigned long baseaddr,
722 			    ssb_invariants_func_t get_invariants)
723 {
724 	int err;
725 
726 	bus->bustype = SSB_BUSTYPE_SSB;
727 	bus->ops = &ssb_ssb_ops;
728 
729 	err = ssb_bus_register(bus, get_invariants, baseaddr);
730 	if (!err) {
731 		ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found at "
732 			   "address 0x%08lX\n", baseaddr);
733 	}
734 
735 	return err;
736 }
737 
738 int __ssb_driver_register(struct ssb_driver *drv, struct module *owner)
739 {
740 	drv->drv.name = drv->name;
741 	drv->drv.bus = &ssb_bustype;
742 	drv->drv.owner = owner;
743 
744 	return driver_register(&drv->drv);
745 }
746 EXPORT_SYMBOL(__ssb_driver_register);
747 
748 void ssb_driver_unregister(struct ssb_driver *drv)
749 {
750 	driver_unregister(&drv->drv);
751 }
752 EXPORT_SYMBOL(ssb_driver_unregister);
753 
754 void ssb_set_devtypedata(struct ssb_device *dev, void *data)
755 {
756 	struct ssb_bus *bus = dev->bus;
757 	struct ssb_device *ent;
758 	int i;
759 
760 	for (i = 0; i < bus->nr_devices; i++) {
761 		ent = &(bus->devices[i]);
762 		if (ent->id.vendor != dev->id.vendor)
763 			continue;
764 		if (ent->id.coreid != dev->id.coreid)
765 			continue;
766 
767 		ent->devtypedata = data;
768 	}
769 }
770 EXPORT_SYMBOL(ssb_set_devtypedata);
771 
772 static u32 clkfactor_f6_resolve(u32 v)
773 {
774 	/* map the magic values */
775 	switch (v) {
776 	case SSB_CHIPCO_CLK_F6_2:
777 		return 2;
778 	case SSB_CHIPCO_CLK_F6_3:
779 		return 3;
780 	case SSB_CHIPCO_CLK_F6_4:
781 		return 4;
782 	case SSB_CHIPCO_CLK_F6_5:
783 		return 5;
784 	case SSB_CHIPCO_CLK_F6_6:
785 		return 6;
786 	case SSB_CHIPCO_CLK_F6_7:
787 		return 7;
788 	}
789 	return 0;
790 }
791 
792 /* Calculate the speed the backplane would run at a given set of clockcontrol values */
793 u32 ssb_calc_clock_rate(u32 plltype, u32 n, u32 m)
794 {
795 	u32 n1, n2, clock, m1, m2, m3, mc;
796 
797 	n1 = (n & SSB_CHIPCO_CLK_N1);
798 	n2 = ((n & SSB_CHIPCO_CLK_N2) >> SSB_CHIPCO_CLK_N2_SHIFT);
799 
800 	switch (plltype) {
801 	case SSB_PLLTYPE_6: /* 100/200 or 120/240 only */
802 		if (m & SSB_CHIPCO_CLK_T6_MMASK)
803 			return SSB_CHIPCO_CLK_T6_M0;
804 		return SSB_CHIPCO_CLK_T6_M1;
805 	case SSB_PLLTYPE_1: /* 48Mhz base, 3 dividers */
806 	case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */
807 	case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */
808 	case SSB_PLLTYPE_7: /* 25Mhz, 4 dividers */
809 		n1 = clkfactor_f6_resolve(n1);
810 		n2 += SSB_CHIPCO_CLK_F5_BIAS;
811 		break;
812 	case SSB_PLLTYPE_2: /* 48Mhz, 4 dividers */
813 		n1 += SSB_CHIPCO_CLK_T2_BIAS;
814 		n2 += SSB_CHIPCO_CLK_T2_BIAS;
815 		SSB_WARN_ON(!((n1 >= 2) && (n1 <= 7)));
816 		SSB_WARN_ON(!((n2 >= 5) && (n2 <= 23)));
817 		break;
818 	case SSB_PLLTYPE_5: /* 25Mhz, 4 dividers */
819 		return 100000000;
820 	default:
821 		SSB_WARN_ON(1);
822 	}
823 
824 	switch (plltype) {
825 	case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */
826 	case SSB_PLLTYPE_7: /* 25Mhz, 4 dividers */
827 		clock = SSB_CHIPCO_CLK_BASE2 * n1 * n2;
828 		break;
829 	default:
830 		clock = SSB_CHIPCO_CLK_BASE1 * n1 * n2;
831 	}
832 	if (!clock)
833 		return 0;
834 
835 	m1 = (m & SSB_CHIPCO_CLK_M1);
836 	m2 = ((m & SSB_CHIPCO_CLK_M2) >> SSB_CHIPCO_CLK_M2_SHIFT);
837 	m3 = ((m & SSB_CHIPCO_CLK_M3) >> SSB_CHIPCO_CLK_M3_SHIFT);
838 	mc = ((m & SSB_CHIPCO_CLK_MC) >> SSB_CHIPCO_CLK_MC_SHIFT);
839 
840 	switch (plltype) {
841 	case SSB_PLLTYPE_1: /* 48Mhz base, 3 dividers */
842 	case SSB_PLLTYPE_3: /* 25Mhz, 2 dividers */
843 	case SSB_PLLTYPE_4: /* 48Mhz, 4 dividers */
844 	case SSB_PLLTYPE_7: /* 25Mhz, 4 dividers */
845 		m1 = clkfactor_f6_resolve(m1);
846 		if ((plltype == SSB_PLLTYPE_1) ||
847 		    (plltype == SSB_PLLTYPE_3))
848 			m2 += SSB_CHIPCO_CLK_F5_BIAS;
849 		else
850 			m2 = clkfactor_f6_resolve(m2);
851 		m3 = clkfactor_f6_resolve(m3);
852 
853 		switch (mc) {
854 		case SSB_CHIPCO_CLK_MC_BYPASS:
855 			return clock;
856 		case SSB_CHIPCO_CLK_MC_M1:
857 			return (clock / m1);
858 		case SSB_CHIPCO_CLK_MC_M1M2:
859 			return (clock / (m1 * m2));
860 		case SSB_CHIPCO_CLK_MC_M1M2M3:
861 			return (clock / (m1 * m2 * m3));
862 		case SSB_CHIPCO_CLK_MC_M1M3:
863 			return (clock / (m1 * m3));
864 		}
865 		return 0;
866 	case SSB_PLLTYPE_2:
867 		m1 += SSB_CHIPCO_CLK_T2_BIAS;
868 		m2 += SSB_CHIPCO_CLK_T2M2_BIAS;
869 		m3 += SSB_CHIPCO_CLK_T2_BIAS;
870 		SSB_WARN_ON(!((m1 >= 2) && (m1 <= 7)));
871 		SSB_WARN_ON(!((m2 >= 3) && (m2 <= 10)));
872 		SSB_WARN_ON(!((m3 >= 2) && (m3 <= 7)));
873 
874 		if (!(mc & SSB_CHIPCO_CLK_T2MC_M1BYP))
875 			clock /= m1;
876 		if (!(mc & SSB_CHIPCO_CLK_T2MC_M2BYP))
877 			clock /= m2;
878 		if (!(mc & SSB_CHIPCO_CLK_T2MC_M3BYP))
879 			clock /= m3;
880 		return clock;
881 	default:
882 		SSB_WARN_ON(1);
883 	}
884 	return 0;
885 }
886 
887 /* Get the current speed the backplane is running at */
888 u32 ssb_clockspeed(struct ssb_bus *bus)
889 {
890 	u32 rate;
891 	u32 plltype;
892 	u32 clkctl_n, clkctl_m;
893 
894 	if (ssb_extif_available(&bus->extif))
895 		ssb_extif_get_clockcontrol(&bus->extif, &plltype,
896 					   &clkctl_n, &clkctl_m);
897 	else if (bus->chipco.dev)
898 		ssb_chipco_get_clockcontrol(&bus->chipco, &plltype,
899 					    &clkctl_n, &clkctl_m);
900 	else
901 		return 0;
902 
903 	if (bus->chip_id == 0x5365) {
904 		rate = 100000000;
905 	} else {
906 		rate = ssb_calc_clock_rate(plltype, clkctl_n, clkctl_m);
907 		if (plltype == SSB_PLLTYPE_3) /* 25Mhz, 2 dividers */
908 			rate /= 2;
909 	}
910 
911 	return rate;
912 }
913 EXPORT_SYMBOL(ssb_clockspeed);
914 
915 static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev)
916 {
917 	u32 rev = ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV;
918 
919 	/* The REJECT bit changed position in TMSLOW between
920 	 * Backplane revisions. */
921 	switch (rev) {
922 	case SSB_IDLOW_SSBREV_22:
923 		return SSB_TMSLOW_REJECT_22;
924 	case SSB_IDLOW_SSBREV_23:
925 		return SSB_TMSLOW_REJECT_23;
926 	case SSB_IDLOW_SSBREV_24:     /* TODO - find the proper REJECT bits */
927 	case SSB_IDLOW_SSBREV_25:     /* same here */
928 	case SSB_IDLOW_SSBREV_26:     /* same here */
929 	case SSB_IDLOW_SSBREV_27:     /* same here */
930 		return SSB_TMSLOW_REJECT_23;	/* this is a guess */
931 	default:
932 		printk(KERN_INFO "ssb: Backplane Revision 0x%.8X\n", rev);
933 		WARN_ON(1);
934 	}
935 	return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23);
936 }
937 
938 int ssb_device_is_enabled(struct ssb_device *dev)
939 {
940 	u32 val;
941 	u32 reject;
942 
943 	reject = ssb_tmslow_reject_bitmask(dev);
944 	val = ssb_read32(dev, SSB_TMSLOW);
945 	val &= SSB_TMSLOW_CLOCK | SSB_TMSLOW_RESET | reject;
946 
947 	return (val == SSB_TMSLOW_CLOCK);
948 }
949 EXPORT_SYMBOL(ssb_device_is_enabled);
950 
951 static void ssb_flush_tmslow(struct ssb_device *dev)
952 {
953 	/* Make _really_ sure the device has finished the TMSLOW
954 	 * register write transaction, as we risk running into
955 	 * a machine check exception otherwise.
956 	 * Do this by reading the register back to commit the
957 	 * PCI write and delay an additional usec for the device
958 	 * to react to the change. */
959 	ssb_read32(dev, SSB_TMSLOW);
960 	udelay(1);
961 }
962 
963 void ssb_device_enable(struct ssb_device *dev, u32 core_specific_flags)
964 {
965 	u32 val;
966 
967 	ssb_device_disable(dev, core_specific_flags);
968 	ssb_write32(dev, SSB_TMSLOW,
969 		    SSB_TMSLOW_RESET | SSB_TMSLOW_CLOCK |
970 		    SSB_TMSLOW_FGC | core_specific_flags);
971 	ssb_flush_tmslow(dev);
972 
973 	/* Clear SERR if set. This is a hw bug workaround. */
974 	if (ssb_read32(dev, SSB_TMSHIGH) & SSB_TMSHIGH_SERR)
975 		ssb_write32(dev, SSB_TMSHIGH, 0);
976 
977 	val = ssb_read32(dev, SSB_IMSTATE);
978 	if (val & (SSB_IMSTATE_IBE | SSB_IMSTATE_TO)) {
979 		val &= ~(SSB_IMSTATE_IBE | SSB_IMSTATE_TO);
980 		ssb_write32(dev, SSB_IMSTATE, val);
981 	}
982 
983 	ssb_write32(dev, SSB_TMSLOW,
984 		    SSB_TMSLOW_CLOCK | SSB_TMSLOW_FGC |
985 		    core_specific_flags);
986 	ssb_flush_tmslow(dev);
987 
988 	ssb_write32(dev, SSB_TMSLOW, SSB_TMSLOW_CLOCK |
989 		    core_specific_flags);
990 	ssb_flush_tmslow(dev);
991 }
992 EXPORT_SYMBOL(ssb_device_enable);
993 
994 /* Wait for a bit in a register to get set or unset.
995  * timeout is in units of ten-microseconds */
996 static int ssb_wait_bit(struct ssb_device *dev, u16 reg, u32 bitmask,
997 			int timeout, int set)
998 {
999 	int i;
1000 	u32 val;
1001 
1002 	for (i = 0; i < timeout; i++) {
1003 		val = ssb_read32(dev, reg);
1004 		if (set) {
1005 			if (val & bitmask)
1006 				return 0;
1007 		} else {
1008 			if (!(val & bitmask))
1009 				return 0;
1010 		}
1011 		udelay(10);
1012 	}
1013 	printk(KERN_ERR PFX "Timeout waiting for bitmask %08X on "
1014 			    "register %04X to %s.\n",
1015 	       bitmask, reg, (set ? "set" : "clear"));
1016 
1017 	return -ETIMEDOUT;
1018 }
1019 
1020 void ssb_device_disable(struct ssb_device *dev, u32 core_specific_flags)
1021 {
1022 	u32 reject;
1023 
1024 	if (ssb_read32(dev, SSB_TMSLOW) & SSB_TMSLOW_RESET)
1025 		return;
1026 
1027 	reject = ssb_tmslow_reject_bitmask(dev);
1028 	ssb_write32(dev, SSB_TMSLOW, reject | SSB_TMSLOW_CLOCK);
1029 	ssb_wait_bit(dev, SSB_TMSLOW, reject, 1000, 1);
1030 	ssb_wait_bit(dev, SSB_TMSHIGH, SSB_TMSHIGH_BUSY, 1000, 0);
1031 	ssb_write32(dev, SSB_TMSLOW,
1032 		    SSB_TMSLOW_FGC | SSB_TMSLOW_CLOCK |
1033 		    reject | SSB_TMSLOW_RESET |
1034 		    core_specific_flags);
1035 	ssb_flush_tmslow(dev);
1036 
1037 	ssb_write32(dev, SSB_TMSLOW,
1038 		    reject | SSB_TMSLOW_RESET |
1039 		    core_specific_flags);
1040 	ssb_flush_tmslow(dev);
1041 }
1042 EXPORT_SYMBOL(ssb_device_disable);
1043 
1044 u32 ssb_dma_translation(struct ssb_device *dev)
1045 {
1046 	switch (dev->bus->bustype) {
1047 	case SSB_BUSTYPE_SSB:
1048 		return 0;
1049 	case SSB_BUSTYPE_PCI:
1050 	case SSB_BUSTYPE_PCMCIA:
1051 		return SSB_PCI_DMA;
1052 	}
1053 	return 0;
1054 }
1055 EXPORT_SYMBOL(ssb_dma_translation);
1056 
1057 int ssb_dma_set_mask(struct ssb_device *ssb_dev, u64 mask)
1058 {
1059 	struct device *dev = ssb_dev->dev;
1060 
1061 #ifdef CONFIG_SSB_PCIHOST
1062 	if (ssb_dev->bus->bustype == SSB_BUSTYPE_PCI &&
1063 	    !dma_supported(dev, mask))
1064 		return -EIO;
1065 #endif
1066 	dev->coherent_dma_mask = mask;
1067 	dev->dma_mask = &dev->coherent_dma_mask;
1068 
1069 	return 0;
1070 }
1071 EXPORT_SYMBOL(ssb_dma_set_mask);
1072 
1073 int ssb_bus_may_powerdown(struct ssb_bus *bus)
1074 {
1075 	struct ssb_chipcommon *cc;
1076 	int err = 0;
1077 
1078 	/* On buses where more than one core may be working
1079 	 * at a time, we must not powerdown stuff if there are
1080 	 * still cores that may want to run. */
1081 	if (bus->bustype == SSB_BUSTYPE_SSB)
1082 		goto out;
1083 
1084 	cc = &bus->chipco;
1085 	ssb_chipco_set_clockmode(cc, SSB_CLKMODE_SLOW);
1086 	err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
1087 	if (err)
1088 		goto error;
1089 out:
1090 #ifdef CONFIG_SSB_DEBUG
1091 	bus->powered_up = 0;
1092 #endif
1093 	return err;
1094 error:
1095 	ssb_printk(KERN_ERR PFX "Bus powerdown failed\n");
1096 	goto out;
1097 }
1098 EXPORT_SYMBOL(ssb_bus_may_powerdown);
1099 
1100 int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl)
1101 {
1102 	struct ssb_chipcommon *cc;
1103 	int err;
1104 	enum ssb_clkmode mode;
1105 
1106 	err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
1107 	if (err)
1108 		goto error;
1109 	cc = &bus->chipco;
1110 	mode = dynamic_pctl ? SSB_CLKMODE_DYNAMIC : SSB_CLKMODE_FAST;
1111 	ssb_chipco_set_clockmode(cc, mode);
1112 
1113 #ifdef CONFIG_SSB_DEBUG
1114 	bus->powered_up = 1;
1115 #endif
1116 	return 0;
1117 error:
1118 	ssb_printk(KERN_ERR PFX "Bus powerup failed\n");
1119 	return err;
1120 }
1121 EXPORT_SYMBOL(ssb_bus_powerup);
1122 
1123 u32 ssb_admatch_base(u32 adm)
1124 {
1125 	u32 base = 0;
1126 
1127 	switch (adm & SSB_ADM_TYPE) {
1128 	case SSB_ADM_TYPE0:
1129 		base = (adm & SSB_ADM_BASE0);
1130 		break;
1131 	case SSB_ADM_TYPE1:
1132 		SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */
1133 		base = (adm & SSB_ADM_BASE1);
1134 		break;
1135 	case SSB_ADM_TYPE2:
1136 		SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */
1137 		base = (adm & SSB_ADM_BASE2);
1138 		break;
1139 	default:
1140 		SSB_WARN_ON(1);
1141 	}
1142 
1143 	return base;
1144 }
1145 EXPORT_SYMBOL(ssb_admatch_base);
1146 
1147 u32 ssb_admatch_size(u32 adm)
1148 {
1149 	u32 size = 0;
1150 
1151 	switch (adm & SSB_ADM_TYPE) {
1152 	case SSB_ADM_TYPE0:
1153 		size = ((adm & SSB_ADM_SZ0) >> SSB_ADM_SZ0_SHIFT);
1154 		break;
1155 	case SSB_ADM_TYPE1:
1156 		SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */
1157 		size = ((adm & SSB_ADM_SZ1) >> SSB_ADM_SZ1_SHIFT);
1158 		break;
1159 	case SSB_ADM_TYPE2:
1160 		SSB_WARN_ON(adm & SSB_ADM_NEG); /* unsupported */
1161 		size = ((adm & SSB_ADM_SZ2) >> SSB_ADM_SZ2_SHIFT);
1162 		break;
1163 	default:
1164 		SSB_WARN_ON(1);
1165 	}
1166 	size = (1 << (size + 1));
1167 
1168 	return size;
1169 }
1170 EXPORT_SYMBOL(ssb_admatch_size);
1171 
1172 static int __init ssb_modinit(void)
1173 {
1174 	int err;
1175 
1176 	/* See the comment at the ssb_is_early_boot definition */
1177 	ssb_is_early_boot = 0;
1178 	err = bus_register(&ssb_bustype);
1179 	if (err)
1180 		return err;
1181 
1182 	/* Maybe we already registered some buses at early boot.
1183 	 * Check for this and attach them
1184 	 */
1185 	ssb_buses_lock();
1186 	err = ssb_attach_queued_buses();
1187 	ssb_buses_unlock();
1188 	if (err)
1189 		bus_unregister(&ssb_bustype);
1190 
1191 	err = b43_pci_ssb_bridge_init();
1192 	if (err) {
1193 		ssb_printk(KERN_ERR "Broadcom 43xx PCI-SSB-bridge "
1194 			   "initialization failed\n");
1195 		/* don't fail SSB init because of this */
1196 		err = 0;
1197 	}
1198 	err = ssb_gige_init();
1199 	if (err) {
1200 		ssb_printk(KERN_ERR "SSB Broadcom Gigabit Ethernet "
1201 			   "driver initialization failed\n");
1202 		/* don't fail SSB init because of this */
1203 		err = 0;
1204 	}
1205 
1206 	return err;
1207 }
1208 /* ssb must be initialized after PCI but before the ssb drivers.
1209  * That means we must use some initcall between subsys_initcall
1210  * and device_initcall. */
1211 fs_initcall(ssb_modinit);
1212 
1213 static void __exit ssb_modexit(void)
1214 {
1215 	ssb_gige_exit();
1216 	b43_pci_ssb_bridge_exit();
1217 	bus_unregister(&ssb_bustype);
1218 }
1219 module_exit(ssb_modexit)
1220