xref: /openbmc/linux/arch/parisc/kernel/drivers.c (revision 1fa0a7dc)
1 /*
2  * drivers.c
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version
7  * 2 of the License, or (at your option) any later version.
8  *
9  * Copyright (c) 1999 The Puffin Group
10  * Copyright (c) 2001 Matthew Wilcox for Hewlett Packard
11  * Copyright (c) 2001 Helge Deller <deller@gmx.de>
12  * Copyright (c) 2001,2002 Ryan Bradetich
13  * Copyright (c) 2004-2005 Thibaut VARENE <varenet@parisc-linux.org>
14  *
15  * The file handles registering devices and drivers, then matching them.
16  * It's the closest we get to a dating agency.
17  *
18  * If you're thinking about modifying this file, here are some gotchas to
19  * bear in mind:
20  *  - 715/Mirage device paths have a dummy device between Lasi and its children
21  *  - The EISA adapter may show up as a sibling or child of Wax
22  *  - Dino has an optionally functional serial port.  If firmware enables it,
23  *    it shows up as a child of Dino.  If firmware disables it, the buswalk
24  *    finds it and it shows up as a child of Cujo
25  *  - Dino has both parisc and pci devices as children
26  *  - parisc devices are discovered in a random order, including children
27  *    before parents in some cases.
28  */
29 
30 #include <linux/slab.h>
31 #include <linux/types.h>
32 #include <linux/kernel.h>
33 #include <linux/pci.h>
34 #include <linux/spinlock.h>
35 #include <linux/string.h>
36 #include <linux/export.h>
37 #include <asm/hardware.h>
38 #include <asm/io.h>
39 #include <asm/pdc.h>
40 #include <asm/parisc-device.h>
41 #include <asm/ropes.h>
42 
43 /* See comments in include/asm-parisc/pci.h */
44 const struct dma_map_ops *hppa_dma_ops __ro_after_init;
45 EXPORT_SYMBOL(hppa_dma_ops);
46 
47 static struct device root = {
48 	.init_name = "parisc",
49 };
50 
51 static inline int check_dev(struct device *dev)
52 {
53 	if (dev->bus == &parisc_bus_type) {
54 		struct parisc_device *pdev;
55 		pdev = to_parisc_device(dev);
56 		return pdev->id.hw_type != HPHW_FAULTY;
57 	}
58 	return 1;
59 }
60 
61 static struct device *
62 parse_tree_node(struct device *parent, int index, struct hardware_path *modpath);
63 
64 struct recurse_struct {
65 	void * obj;
66 	int (*fn)(struct device *, void *);
67 };
68 
69 static int descend_children(struct device * dev, void * data)
70 {
71 	struct recurse_struct * recurse_data = (struct recurse_struct *)data;
72 
73 	if (recurse_data->fn(dev, recurse_data->obj))
74 		return 1;
75 	else
76 		return device_for_each_child(dev, recurse_data, descend_children);
77 }
78 
79 /**
80  *	for_each_padev - Iterate over all devices in the tree
81  *	@fn:	Function to call for each device.
82  *	@data:	Data to pass to the called function.
83  *
84  *	This performs a depth-first traversal of the tree, calling the
85  *	function passed for each node.  It calls the function for parents
86  *	before children.
87  */
88 
89 static int for_each_padev(int (*fn)(struct device *, void *), void * data)
90 {
91 	struct recurse_struct recurse_data = {
92 		.obj	= data,
93 		.fn	= fn,
94 	};
95 	return device_for_each_child(&root, &recurse_data, descend_children);
96 }
97 
98 /**
99  * match_device - Report whether this driver can handle this device
100  * @driver: the PA-RISC driver to try
101  * @dev: the PA-RISC device to try
102  */
103 static int match_device(struct parisc_driver *driver, struct parisc_device *dev)
104 {
105 	const struct parisc_device_id *ids;
106 
107 	for (ids = driver->id_table; ids->sversion; ids++) {
108 		if ((ids->sversion != SVERSION_ANY_ID) &&
109 		    (ids->sversion != dev->id.sversion))
110 			continue;
111 
112 		if ((ids->hw_type != HWTYPE_ANY_ID) &&
113 		    (ids->hw_type != dev->id.hw_type))
114 			continue;
115 
116 		if ((ids->hversion != HVERSION_ANY_ID) &&
117 		    (ids->hversion != dev->id.hversion))
118 			continue;
119 
120 		return 1;
121 	}
122 	return 0;
123 }
124 
125 static int parisc_driver_probe(struct device *dev)
126 {
127 	int rc;
128 	struct parisc_device *pa_dev = to_parisc_device(dev);
129 	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
130 
131 	rc = pa_drv->probe(pa_dev);
132 
133 	if (!rc)
134 		pa_dev->driver = pa_drv;
135 
136 	return rc;
137 }
138 
139 static int __exit parisc_driver_remove(struct device *dev)
140 {
141 	struct parisc_device *pa_dev = to_parisc_device(dev);
142 	struct parisc_driver *pa_drv = to_parisc_driver(dev->driver);
143 	if (pa_drv->remove)
144 		pa_drv->remove(pa_dev);
145 
146 	return 0;
147 }
148 
149 
150 /**
151  * register_parisc_driver - Register this driver if it can handle a device
152  * @driver: the PA-RISC driver to try
153  */
154 int register_parisc_driver(struct parisc_driver *driver)
155 {
156 	/* FIXME: we need this because apparently the sti
157 	 * driver can be registered twice */
158 	if (driver->drv.name) {
159 		pr_warn("BUG: skipping previously registered driver %s\n",
160 			driver->name);
161 		return 1;
162 	}
163 
164 	if (!driver->probe) {
165 		pr_warn("BUG: driver %s has no probe routine\n", driver->name);
166 		return 1;
167 	}
168 
169 	driver->drv.bus = &parisc_bus_type;
170 
171 	/* We install our own probe and remove routines */
172 	WARN_ON(driver->drv.probe != NULL);
173 	WARN_ON(driver->drv.remove != NULL);
174 
175 	driver->drv.name = driver->name;
176 
177 	return driver_register(&driver->drv);
178 }
179 EXPORT_SYMBOL(register_parisc_driver);
180 
181 
182 struct match_count {
183 	struct parisc_driver * driver;
184 	int count;
185 };
186 
187 static int match_and_count(struct device * dev, void * data)
188 {
189 	struct match_count * m = data;
190 	struct parisc_device * pdev = to_parisc_device(dev);
191 
192 	if (check_dev(dev)) {
193 		if (match_device(m->driver, pdev))
194 			m->count++;
195 	}
196 	return 0;
197 }
198 
199 /**
200  * count_parisc_driver - count # of devices this driver would match
201  * @driver: the PA-RISC driver to try
202  *
203  * Use by IOMMU support to "guess" the right size IOPdir.
204  * Formula is something like memsize/(num_iommu * entry_size).
205  */
206 int __init count_parisc_driver(struct parisc_driver *driver)
207 {
208 	struct match_count m = {
209 		.driver	= driver,
210 		.count	= 0,
211 	};
212 
213 	for_each_padev(match_and_count, &m);
214 
215 	return m.count;
216 }
217 
218 
219 
220 /**
221  * unregister_parisc_driver - Unregister this driver from the list of drivers
222  * @driver: the PA-RISC driver to unregister
223  */
224 int unregister_parisc_driver(struct parisc_driver *driver)
225 {
226 	driver_unregister(&driver->drv);
227 	return 0;
228 }
229 EXPORT_SYMBOL(unregister_parisc_driver);
230 
231 struct find_data {
232 	unsigned long hpa;
233 	struct parisc_device * dev;
234 };
235 
236 static int find_device(struct device * dev, void * data)
237 {
238 	struct parisc_device * pdev = to_parisc_device(dev);
239 	struct find_data * d = (struct find_data*)data;
240 
241 	if (check_dev(dev)) {
242 		if (pdev->hpa.start == d->hpa) {
243 			d->dev = pdev;
244 			return 1;
245 		}
246 	}
247 	return 0;
248 }
249 
250 static struct parisc_device *find_device_by_addr(unsigned long hpa)
251 {
252 	struct find_data d = {
253 		.hpa	= hpa,
254 	};
255 	int ret;
256 
257 	ret = for_each_padev(find_device, &d);
258 	return ret ? d.dev : NULL;
259 }
260 
261 static int __init is_IKE_device(struct device *dev, void *data)
262 {
263 	struct parisc_device *pdev = to_parisc_device(dev);
264 
265 	if (!check_dev(dev))
266 		return 0;
267 	if (pdev->id.hw_type != HPHW_BCPORT)
268 		return 0;
269 	if (IS_IKE(pdev) ||
270 		(pdev->id.hversion == REO_MERCED_PORT) ||
271 		(pdev->id.hversion == REOG_MERCED_PORT)) {
272 			return 1;
273 	}
274 	return 0;
275 }
276 
277 int __init machine_has_merced_bus(void)
278 {
279 	int ret;
280 
281 	ret = for_each_padev(is_IKE_device, NULL);
282 	return ret ? 1 : 0;
283 }
284 
285 /**
286  * find_pa_parent_type - Find a parent of a specific type
287  * @dev: The device to start searching from
288  * @type: The device type to search for.
289  *
290  * Walks up the device tree looking for a device of the specified type.
291  * If it finds it, it returns it.  If not, it returns NULL.
292  */
293 const struct parisc_device *
294 find_pa_parent_type(const struct parisc_device *padev, int type)
295 {
296 	const struct device *dev = &padev->dev;
297 	while (dev != &root) {
298 		struct parisc_device *candidate = to_parisc_device(dev);
299 		if (candidate->id.hw_type == type)
300 			return candidate;
301 		dev = dev->parent;
302 	}
303 
304 	return NULL;
305 }
306 
307 /*
308  * get_node_path fills in @path with the firmware path to the device.
309  * Note that if @node is a parisc device, we don't fill in the 'mod' field.
310  * This is because both callers pass the parent and fill in the mod
311  * themselves.  If @node is a PCI device, we do fill it in, even though this
312  * is inconsistent.
313  */
314 static void get_node_path(struct device *dev, struct hardware_path *path)
315 {
316 	int i = 5;
317 	memset(&path->bc, -1, 6);
318 
319 	if (dev_is_pci(dev)) {
320 		unsigned int devfn = to_pci_dev(dev)->devfn;
321 		path->mod = PCI_FUNC(devfn);
322 		path->bc[i--] = PCI_SLOT(devfn);
323 		dev = dev->parent;
324 	}
325 
326 	while (dev != &root) {
327 		if (dev_is_pci(dev)) {
328 			unsigned int devfn = to_pci_dev(dev)->devfn;
329 			path->bc[i--] = PCI_SLOT(devfn) | (PCI_FUNC(devfn)<< 5);
330 		} else if (dev->bus == &parisc_bus_type) {
331 			path->bc[i--] = to_parisc_device(dev)->hw_path;
332 		}
333 		dev = dev->parent;
334 	}
335 }
336 
337 static char *print_hwpath(struct hardware_path *path, char *output)
338 {
339 	int i;
340 	for (i = 0; i < 6; i++) {
341 		if (path->bc[i] == -1)
342 			continue;
343 		output += sprintf(output, "%u/", (unsigned char) path->bc[i]);
344 	}
345 	output += sprintf(output, "%u", (unsigned char) path->mod);
346 	return output;
347 }
348 
349 /**
350  * print_pa_hwpath - Returns hardware path for PA devices
351  * dev: The device to return the path for
352  * output: Pointer to a previously-allocated array to place the path in.
353  *
354  * This function fills in the output array with a human-readable path
355  * to a PA device.  This string is compatible with that used by PDC, and
356  * may be printed on the outside of the box.
357  */
358 char *print_pa_hwpath(struct parisc_device *dev, char *output)
359 {
360 	struct hardware_path path;
361 
362 	get_node_path(dev->dev.parent, &path);
363 	path.mod = dev->hw_path;
364 	return print_hwpath(&path, output);
365 }
366 EXPORT_SYMBOL(print_pa_hwpath);
367 
368 #if defined(CONFIG_PCI) || defined(CONFIG_ISA)
369 /**
370  * get_pci_node_path - Determines the hardware path for a PCI device
371  * @pdev: The device to return the path for
372  * @path: Pointer to a previously-allocated array to place the path in.
373  *
374  * This function fills in the hardware_path structure with the route to
375  * the specified PCI device.  This structure is suitable for passing to
376  * PDC calls.
377  */
378 void get_pci_node_path(struct pci_dev *pdev, struct hardware_path *path)
379 {
380 	get_node_path(&pdev->dev, path);
381 }
382 EXPORT_SYMBOL(get_pci_node_path);
383 
384 /**
385  * print_pci_hwpath - Returns hardware path for PCI devices
386  * dev: The device to return the path for
387  * output: Pointer to a previously-allocated array to place the path in.
388  *
389  * This function fills in the output array with a human-readable path
390  * to a PCI device.  This string is compatible with that used by PDC, and
391  * may be printed on the outside of the box.
392  */
393 char *print_pci_hwpath(struct pci_dev *dev, char *output)
394 {
395 	struct hardware_path path;
396 
397 	get_pci_node_path(dev, &path);
398 	return print_hwpath(&path, output);
399 }
400 EXPORT_SYMBOL(print_pci_hwpath);
401 
402 #endif /* defined(CONFIG_PCI) || defined(CONFIG_ISA) */
403 
404 static void setup_bus_id(struct parisc_device *padev)
405 {
406 	struct hardware_path path;
407 	char name[28];
408 	char *output = name;
409 	int i;
410 
411 	get_node_path(padev->dev.parent, &path);
412 
413 	for (i = 0; i < 6; i++) {
414 		if (path.bc[i] == -1)
415 			continue;
416 		output += sprintf(output, "%u:", (unsigned char) path.bc[i]);
417 	}
418 	sprintf(output, "%u", (unsigned char) padev->hw_path);
419 	dev_set_name(&padev->dev, name);
420 }
421 
422 struct parisc_device * __init create_tree_node(char id, struct device *parent)
423 {
424 	struct parisc_device *dev = kzalloc(sizeof(*dev), GFP_KERNEL);
425 	if (!dev)
426 		return NULL;
427 
428 	dev->hw_path = id;
429 	dev->id.hw_type = HPHW_FAULTY;
430 
431 	dev->dev.parent = parent;
432 	setup_bus_id(dev);
433 
434 	dev->dev.bus = &parisc_bus_type;
435 	dev->dma_mask = 0xffffffffUL;	/* PARISC devices are 32-bit */
436 
437 	/* make the generic dma mask a pointer to the parisc one */
438 	dev->dev.dma_mask = &dev->dma_mask;
439 	dev->dev.coherent_dma_mask = dev->dma_mask;
440 	if (device_register(&dev->dev)) {
441 		kfree(dev);
442 		return NULL;
443 	}
444 
445 	return dev;
446 }
447 
448 struct match_id_data {
449 	char id;
450 	struct parisc_device * dev;
451 };
452 
453 static int match_by_id(struct device * dev, void * data)
454 {
455 	struct parisc_device * pdev = to_parisc_device(dev);
456 	struct match_id_data * d = data;
457 
458 	if (pdev->hw_path == d->id) {
459 		d->dev = pdev;
460 		return 1;
461 	}
462 	return 0;
463 }
464 
465 /**
466  * alloc_tree_node - returns a device entry in the iotree
467  * @parent: the parent node in the tree
468  * @id: the element of the module path for this entry
469  *
470  * Checks all the children of @parent for a matching @id.  If none
471  * found, it allocates a new device and returns it.
472  */
473 static struct parisc_device * __init alloc_tree_node(
474 			struct device *parent, char id)
475 {
476 	struct match_id_data d = {
477 		.id = id,
478 	};
479 	if (device_for_each_child(parent, &d, match_by_id))
480 		return d.dev;
481 	else
482 		return create_tree_node(id, parent);
483 }
484 
485 static struct parisc_device *create_parisc_device(struct hardware_path *modpath)
486 {
487 	int i;
488 	struct device *parent = &root;
489 	for (i = 0; i < 6; i++) {
490 		if (modpath->bc[i] == -1)
491 			continue;
492 		parent = &alloc_tree_node(parent, modpath->bc[i])->dev;
493 	}
494 	return alloc_tree_node(parent, modpath->mod);
495 }
496 
497 struct parisc_device * __init
498 alloc_pa_dev(unsigned long hpa, struct hardware_path *mod_path)
499 {
500 	int status;
501 	unsigned long bytecnt;
502 	u8 iodc_data[32];
503 	struct parisc_device *dev;
504 	const char *name;
505 
506 	/* Check to make sure this device has not already been added - Ryan */
507 	if (find_device_by_addr(hpa) != NULL)
508 		return NULL;
509 
510 	status = pdc_iodc_read(&bytecnt, hpa, 0, &iodc_data, 32);
511 	if (status != PDC_OK)
512 		return NULL;
513 
514 	dev = create_parisc_device(mod_path);
515 	if (dev->id.hw_type != HPHW_FAULTY) {
516 		pr_err("Two devices have hardware path [%s].  IODC data for second device: %7phN\n"
517 		       "Rearranging GSC cards sometimes helps\n",
518 			parisc_pathname(dev), iodc_data);
519 		return NULL;
520 	}
521 
522 	dev->id.hw_type = iodc_data[3] & 0x1f;
523 	dev->id.hversion = (iodc_data[0] << 4) | ((iodc_data[1] & 0xf0) >> 4);
524 	dev->id.hversion_rev = iodc_data[1] & 0x0f;
525 	dev->id.sversion = ((iodc_data[4] & 0x0f) << 16) |
526 			(iodc_data[5] << 8) | iodc_data[6];
527 	dev->hpa.name = parisc_pathname(dev);
528 	dev->hpa.start = hpa;
529 	/* This is awkward.  The STI spec says that gfx devices may occupy
530 	 * 32MB or 64MB.  Unfortunately, we don't know how to tell whether
531 	 * it's the former or the latter.  Assumptions either way can hurt us.
532 	 */
533 	if (hpa == 0xf4000000 || hpa == 0xf8000000) {
534 		dev->hpa.end = hpa + 0x03ffffff;
535 	} else if (hpa == 0xf6000000 || hpa == 0xfa000000) {
536 		dev->hpa.end = hpa + 0x01ffffff;
537 	} else {
538 		dev->hpa.end = hpa + 0xfff;
539 	}
540 	dev->hpa.flags = IORESOURCE_MEM;
541 	name = parisc_hardware_description(&dev->id);
542 	if (name) {
543 		strlcpy(dev->name, name, sizeof(dev->name));
544 	}
545 
546 	/* Silently fail things like mouse ports which are subsumed within
547 	 * the keyboard controller
548 	 */
549 	if ((hpa & 0xfff) == 0 && insert_resource(&iomem_resource, &dev->hpa))
550 		pr_warn("Unable to claim HPA %lx for device %s\n", hpa, name);
551 
552 	return dev;
553 }
554 
555 static int parisc_generic_match(struct device *dev, struct device_driver *drv)
556 {
557 	return match_device(to_parisc_driver(drv), to_parisc_device(dev));
558 }
559 
560 static ssize_t make_modalias(struct device *dev, char *buf)
561 {
562 	const struct parisc_device *padev = to_parisc_device(dev);
563 	const struct parisc_device_id *id = &padev->id;
564 
565 	return sprintf(buf, "parisc:t%02Xhv%04Xrev%02Xsv%08X\n",
566 		(u8)id->hw_type, (u16)id->hversion, (u8)id->hversion_rev,
567 		(u32)id->sversion);
568 }
569 
570 static int parisc_uevent(struct device *dev, struct kobj_uevent_env *env)
571 {
572 	const struct parisc_device *padev;
573 	char modalias[40];
574 
575 	if (!dev)
576 		return -ENODEV;
577 
578 	padev = to_parisc_device(dev);
579 	if (!padev)
580 		return -ENODEV;
581 
582 	if (add_uevent_var(env, "PARISC_NAME=%s", padev->name))
583 		return -ENOMEM;
584 
585 	make_modalias(dev, modalias);
586 	if (add_uevent_var(env, "MODALIAS=%s", modalias))
587 		return -ENOMEM;
588 
589 	return 0;
590 }
591 
592 #define pa_dev_attr(name, field, format_string)				\
593 static ssize_t name##_show(struct device *dev, struct device_attribute *attr, char *buf)		\
594 {									\
595 	struct parisc_device *padev = to_parisc_device(dev);		\
596 	return sprintf(buf, format_string, padev->field);		\
597 }									\
598 static DEVICE_ATTR_RO(name);
599 
600 #define pa_dev_attr_id(field, format) pa_dev_attr(field, id.field, format)
601 
602 pa_dev_attr(irq, irq, "%u\n");
603 pa_dev_attr_id(hw_type, "0x%02x\n");
604 pa_dev_attr(rev, id.hversion_rev, "0x%x\n");
605 pa_dev_attr_id(hversion, "0x%03x\n");
606 pa_dev_attr_id(sversion, "0x%05x\n");
607 
608 static ssize_t modalias_show(struct device *dev, struct device_attribute *attr, char *buf)
609 {
610 	return make_modalias(dev, buf);
611 }
612 static DEVICE_ATTR_RO(modalias);
613 
614 static struct attribute *parisc_device_attrs[] = {
615 	&dev_attr_irq.attr,
616 	&dev_attr_hw_type.attr,
617 	&dev_attr_rev.attr,
618 	&dev_attr_hversion.attr,
619 	&dev_attr_sversion.attr,
620 	&dev_attr_modalias.attr,
621 	NULL,
622 };
623 ATTRIBUTE_GROUPS(parisc_device);
624 
625 struct bus_type parisc_bus_type = {
626 	.name = "parisc",
627 	.match = parisc_generic_match,
628 	.uevent = parisc_uevent,
629 	.dev_groups = parisc_device_groups,
630 	.probe = parisc_driver_probe,
631 	.remove = __exit_p(parisc_driver_remove),
632 };
633 
634 /**
635  * register_parisc_device - Locate a driver to manage this device.
636  * @dev: The parisc device.
637  *
638  * Search the driver list for a driver that is willing to manage
639  * this device.
640  */
641 int __init register_parisc_device(struct parisc_device *dev)
642 {
643 	if (!dev)
644 		return 0;
645 
646 	if (dev->driver)
647 		return 1;
648 
649 	return 0;
650 }
651 
652 /**
653  * match_pci_device - Matches a pci device against a given hardware path
654  * entry.
655  * @dev: the generic device (known to be contained by a pci_dev).
656  * @index: the current BC index
657  * @modpath: the hardware path.
658  * @return: true if the device matches the hardware path.
659  */
660 static int match_pci_device(struct device *dev, int index,
661 		struct hardware_path *modpath)
662 {
663 	struct pci_dev *pdev = to_pci_dev(dev);
664 	int id;
665 
666 	if (index == 5) {
667 		/* we are at the end of the path, and on the actual device */
668 		unsigned int devfn = pdev->devfn;
669 		return ((modpath->bc[5] == PCI_SLOT(devfn)) &&
670 					(modpath->mod == PCI_FUNC(devfn)));
671 	}
672 
673 	/* index might be out of bounds for bc[] */
674 	if (index >= 6)
675 		return 0;
676 
677 	id = PCI_SLOT(pdev->devfn) | (PCI_FUNC(pdev->devfn) << 5);
678 	return (modpath->bc[index] == id);
679 }
680 
681 /**
682  * match_parisc_device - Matches a parisc device against a given hardware
683  * path entry.
684  * @dev: the generic device (known to be contained by a parisc_device).
685  * @index: the current BC index
686  * @modpath: the hardware path.
687  * @return: true if the device matches the hardware path.
688  */
689 static int match_parisc_device(struct device *dev, int index,
690 		struct hardware_path *modpath)
691 {
692 	struct parisc_device *curr = to_parisc_device(dev);
693 	char id = (index == 6) ? modpath->mod : modpath->bc[index];
694 
695 	return (curr->hw_path == id);
696 }
697 
698 struct parse_tree_data {
699 	int index;
700 	struct hardware_path * modpath;
701 	struct device * dev;
702 };
703 
704 static int check_parent(struct device * dev, void * data)
705 {
706 	struct parse_tree_data * d = data;
707 
708 	if (check_dev(dev)) {
709 		if (dev->bus == &parisc_bus_type) {
710 			if (match_parisc_device(dev, d->index, d->modpath))
711 				d->dev = dev;
712 		} else if (dev_is_pci(dev)) {
713 			if (match_pci_device(dev, d->index, d->modpath))
714 				d->dev = dev;
715 		} else if (dev->bus == NULL) {
716 			/* we are on a bus bridge */
717 			struct device *new = parse_tree_node(dev, d->index, d->modpath);
718 			if (new)
719 				d->dev = new;
720 		}
721 	}
722 	return d->dev != NULL;
723 }
724 
725 /**
726  * parse_tree_node - returns a device entry in the iotree
727  * @parent: the parent node in the tree
728  * @index: the current BC index
729  * @modpath: the hardware_path struct to match a device against
730  * @return: The corresponding device if found, NULL otherwise.
731  *
732  * Checks all the children of @parent for a matching @id.  If none
733  * found, it returns NULL.
734  */
735 static struct device *
736 parse_tree_node(struct device *parent, int index, struct hardware_path *modpath)
737 {
738 	struct parse_tree_data d = {
739 		.index          = index,
740 		.modpath        = modpath,
741 	};
742 
743 	struct recurse_struct recurse_data = {
744 		.obj	= &d,
745 		.fn	= check_parent,
746 	};
747 
748 	if (device_for_each_child(parent, &recurse_data, descend_children))
749 		/* nothing */;
750 
751 	return d.dev;
752 }
753 
754 /**
755  * hwpath_to_device - Finds the generic device corresponding to a given hardware path.
756  * @modpath: the hardware path.
757  * @return: The target device, NULL if not found.
758  */
759 struct device *hwpath_to_device(struct hardware_path *modpath)
760 {
761 	int i;
762 	struct device *parent = &root;
763 	for (i = 0; i < 6; i++) {
764 		if (modpath->bc[i] == -1)
765 			continue;
766 		parent = parse_tree_node(parent, i, modpath);
767 		if (!parent)
768 			return NULL;
769 	}
770 	if (dev_is_pci(parent)) /* pci devices already parse MOD */
771 		return parent;
772 	else
773 		return parse_tree_node(parent, 6, modpath);
774 }
775 EXPORT_SYMBOL(hwpath_to_device);
776 
777 /**
778  * device_to_hwpath - Populates the hwpath corresponding to the given device.
779  * @param dev the target device
780  * @param path pointer to a previously allocated hwpath struct to be filled in
781  */
782 void device_to_hwpath(struct device *dev, struct hardware_path *path)
783 {
784 	struct parisc_device *padev;
785 	if (dev->bus == &parisc_bus_type) {
786 		padev = to_parisc_device(dev);
787 		get_node_path(dev->parent, path);
788 		path->mod = padev->hw_path;
789 	} else if (dev_is_pci(dev)) {
790 		get_node_path(dev, path);
791 	}
792 }
793 EXPORT_SYMBOL(device_to_hwpath);
794 
795 #define BC_PORT_MASK 0x8
796 #define BC_LOWER_PORT 0x8
797 
798 #define BUS_CONVERTER(dev) \
799         ((dev->id.hw_type == HPHW_IOA) || (dev->id.hw_type == HPHW_BCPORT))
800 
801 #define IS_LOWER_PORT(dev) \
802         ((gsc_readl(dev->hpa.start + offsetof(struct bc_module, io_status)) \
803                 & BC_PORT_MASK) == BC_LOWER_PORT)
804 
805 #define MAX_NATIVE_DEVICES 64
806 #define NATIVE_DEVICE_OFFSET 0x1000
807 
808 #define FLEX_MASK 	F_EXTEND(0xfffc0000)
809 #define IO_IO_LOW	offsetof(struct bc_module, io_io_low)
810 #define IO_IO_HIGH	offsetof(struct bc_module, io_io_high)
811 #define READ_IO_IO_LOW(dev)  (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_LOW)
812 #define READ_IO_IO_HIGH(dev) (unsigned long)(signed int)gsc_readl(dev->hpa.start + IO_IO_HIGH)
813 
814 static void walk_native_bus(unsigned long io_io_low, unsigned long io_io_high,
815                             struct device *parent);
816 
817 static void walk_lower_bus(struct parisc_device *dev)
818 {
819 	unsigned long io_io_low, io_io_high;
820 
821 	if (!BUS_CONVERTER(dev) || IS_LOWER_PORT(dev))
822 		return;
823 
824 	if (dev->id.hw_type == HPHW_IOA) {
825 		io_io_low = (unsigned long)(signed int)(READ_IO_IO_LOW(dev) << 16);
826 		io_io_high = io_io_low + MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET;
827 	} else {
828 		io_io_low = (READ_IO_IO_LOW(dev) + ~FLEX_MASK) & FLEX_MASK;
829 		io_io_high = (READ_IO_IO_HIGH(dev)+ ~FLEX_MASK) & FLEX_MASK;
830 	}
831 
832 	walk_native_bus(io_io_low, io_io_high, &dev->dev);
833 }
834 
835 /**
836  * walk_native_bus -- Probe a bus for devices
837  * @io_io_low: Base address of this bus.
838  * @io_io_high: Last address of this bus.
839  * @parent: The parent bus device.
840  *
841  * A native bus (eg Runway or GSC) may have up to 64 devices on it,
842  * spaced at intervals of 0x1000 bytes.  PDC may not inform us of these
843  * devices, so we have to probe for them.  Unfortunately, we may find
844  * devices which are not physically connected (such as extra serial &
845  * keyboard ports).  This problem is not yet solved.
846  */
847 static void __init walk_native_bus(unsigned long io_io_low,
848 	unsigned long io_io_high, struct device *parent)
849 {
850 	int i, devices_found = 0;
851 	unsigned long hpa = io_io_low;
852 	struct hardware_path path;
853 
854 	get_node_path(parent, &path);
855 	do {
856 		for(i = 0; i < MAX_NATIVE_DEVICES; i++, hpa += NATIVE_DEVICE_OFFSET) {
857 			struct parisc_device *dev;
858 
859 			/* Was the device already added by Firmware? */
860 			dev = find_device_by_addr(hpa);
861 			if (!dev) {
862 				path.mod = i;
863 				dev = alloc_pa_dev(hpa, &path);
864 				if (!dev)
865 					continue;
866 
867 				register_parisc_device(dev);
868 				devices_found++;
869 			}
870 			walk_lower_bus(dev);
871 		}
872 	} while(!devices_found && hpa < io_io_high);
873 }
874 
875 #define CENTRAL_BUS_ADDR F_EXTEND(0xfff80000)
876 
877 /**
878  * walk_central_bus - Find devices attached to the central bus
879  *
880  * PDC doesn't tell us about all devices in the system.  This routine
881  * finds devices connected to the central bus.
882  */
883 void __init walk_central_bus(void)
884 {
885 	walk_native_bus(CENTRAL_BUS_ADDR,
886 			CENTRAL_BUS_ADDR + (MAX_NATIVE_DEVICES * NATIVE_DEVICE_OFFSET),
887 			&root);
888 }
889 
890 static void print_parisc_device(struct parisc_device *dev)
891 {
892 	char hw_path[64];
893 	static int count;
894 
895 	print_pa_hwpath(dev, hw_path);
896 	pr_info("%d. %s at 0x%px [%s] { %d, 0x%x, 0x%.3x, 0x%.5x }",
897 		++count, dev->name, (void*) dev->hpa.start, hw_path, dev->id.hw_type,
898 		dev->id.hversion_rev, dev->id.hversion, dev->id.sversion);
899 
900 	if (dev->num_addrs) {
901 		int k;
902 		pr_cont(", additional addresses: ");
903 		for (k = 0; k < dev->num_addrs; k++)
904 			pr_cont("0x%lx ", dev->addr[k]);
905 	}
906 	pr_cont("\n");
907 }
908 
909 /**
910  * init_parisc_bus - Some preparation to be done before inventory
911  */
912 void __init init_parisc_bus(void)
913 {
914 	if (bus_register(&parisc_bus_type))
915 		panic("Could not register PA-RISC bus type\n");
916 	if (device_register(&root))
917 		panic("Could not register PA-RISC root device\n");
918 	get_device(&root);
919 }
920 
921 static __init void qemu_header(void)
922 {
923 	int num;
924 	unsigned long *p;
925 
926 	pr_info("--- cut here ---\n");
927 	pr_info("/* AUTO-GENERATED HEADER FILE FOR SEABIOS FIRMWARE */\n");
928 	pr_cont("/* generated with Linux kernel */\n");
929 	pr_cont("/* search for PARISC_QEMU_MACHINE_HEADER in Linux */\n\n");
930 
931 	pr_info("#define PARISC_MODEL \"%s\"\n\n",
932 			boot_cpu_data.pdc.sys_model_name);
933 
934 	pr_info("#define PARISC_PDC_MODEL 0x%lx, 0x%lx, 0x%lx, "
935 		"0x%lx, 0x%lx, 0x%lx, 0x%lx, 0x%lx, 0x%lx\n\n",
936 	#define p ((unsigned long *)&boot_cpu_data.pdc.model)
937 		p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8]);
938 	#undef p
939 
940 	pr_info("#define PARISC_PDC_VERSION 0x%04lx\n\n",
941 			boot_cpu_data.pdc.versions);
942 
943 	pr_info("#define PARISC_PDC_CPUID 0x%04lx\n\n",
944 			boot_cpu_data.pdc.cpuid);
945 
946 	pr_info("#define PARISC_PDC_CAPABILITIES 0x%04lx\n\n",
947 			boot_cpu_data.pdc.capabilities);
948 
949 	pr_info("#define PARISC_PDC_ENTRY_ORG 0x%04lx\n\n",
950 #ifdef CONFIG_64BIT
951 		(unsigned long)(PAGE0->mem_pdc_hi) << 32 |
952 #endif
953 		(unsigned long)PAGE0->mem_pdc);
954 
955 	pr_info("#define PARISC_PDC_CACHE_INFO");
956 	p = (unsigned long *) &cache_info;
957 	for (num = 0; num < sizeof(cache_info); num += sizeof(unsigned long)) {
958 		if (((num % 5) == 0)) {
959 			pr_cont(" \\\n");
960 			pr_info("\t");
961 		}
962 		pr_cont("%s0x%04lx",
963 			num?", ":"", *p++);
964 	}
965 	pr_cont("\n\n");
966 }
967 
968 static __init int qemu_print_hpa(struct device *lin_dev, void *data)
969 {
970 	struct parisc_device *dev = to_parisc_device(lin_dev);
971 	unsigned long hpa = dev->hpa.start;
972 
973 	pr_cont("\t{\t.hpa = 0x%08lx,\\\n", hpa);
974 	pr_cont("\t\t.iodc = &iodc_data_hpa_%08lx,\\\n", hpa);
975 	pr_cont("\t\t.mod_info = &mod_info_hpa_%08lx,\\\n", hpa);
976 	pr_cont("\t\t.mod_path = &mod_path_hpa_%08lx,\\\n", hpa);
977 	pr_cont("\t\t.num_addr = HPA_%08lx_num_addr,\\\n", hpa);
978 	pr_cont("\t\t.add_addr = { HPA_%08lx_add_addr } },\\\n", hpa);
979 	return 0;
980 }
981 
982 
983 static __init void qemu_footer(void)
984 {
985 	pr_info("\n\n#define PARISC_DEVICE_LIST \\\n");
986 	for_each_padev(qemu_print_hpa, NULL);
987 	pr_cont("\t{ 0, }\n");
988 	pr_info("--- cut here ---\n");
989 }
990 
991 /* print iodc data of the various hpa modules for qemu inclusion */
992 static __init int qemu_print_iodc_data(struct device *lin_dev, void *data)
993 {
994 	struct parisc_device *dev = to_parisc_device(lin_dev);
995 	unsigned long count;
996 	unsigned long hpa = dev->hpa.start;
997 	int status;
998 	struct pdc_iodc iodc_data;
999 
1000 	int mod_index;
1001 	struct pdc_system_map_mod_info pdc_mod_info;
1002 	struct pdc_module_path mod_path;
1003 
1004 	status = pdc_iodc_read(&count, hpa, 0,
1005 		&iodc_data, sizeof(iodc_data));
1006 	if (status != PDC_OK) {
1007 		pr_info("No IODC data for hpa 0x%08lx\n", hpa);
1008 		return 0;
1009 	}
1010 
1011 	pr_info("\n");
1012 
1013 	pr_info("#define HPA_%08lx_DESCRIPTION \"%s\"\n",
1014 		hpa, parisc_hardware_description(&dev->id));
1015 
1016 	mod_index = 0;
1017 	do {
1018 		status = pdc_system_map_find_mods(&pdc_mod_info,
1019 				&mod_path, mod_index++);
1020 	} while (status == PDC_OK && pdc_mod_info.mod_addr != hpa);
1021 
1022 	pr_info("static struct pdc_system_map_mod_info"
1023 		" mod_info_hpa_%08lx = {\n", hpa);
1024 	#define DO(member) \
1025 		pr_cont("\t." #member " = 0x%x,\n", \
1026 			(unsigned int)pdc_mod_info.member)
1027 	DO(mod_addr);
1028 	DO(mod_pgs);
1029 	DO(add_addrs);
1030 	pr_cont("};\n");
1031 	#undef DO
1032 	pr_info("static struct pdc_module_path "
1033 		"mod_path_hpa_%08lx = {\n", hpa);
1034 	pr_cont("\t.path = { ");
1035 	pr_cont(".flags = 0x%x, ", mod_path.path.flags);
1036 	pr_cont(".bc = { 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x }, ",
1037 		(unsigned char)mod_path.path.bc[0],
1038 		(unsigned char)mod_path.path.bc[1],
1039 		(unsigned char)mod_path.path.bc[2],
1040 		(unsigned char)mod_path.path.bc[3],
1041 		(unsigned char)mod_path.path.bc[4],
1042 		(unsigned char)mod_path.path.bc[5]);
1043 	pr_cont(".mod = 0x%x ", mod_path.path.mod);
1044 	pr_cont(" },\n");
1045 	pr_cont("\t.layers = { 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x }\n",
1046 		mod_path.layers[0], mod_path.layers[1], mod_path.layers[2],
1047 		mod_path.layers[3], mod_path.layers[4], mod_path.layers[5]);
1048 	pr_cont("};\n");
1049 
1050 	pr_info("static struct pdc_iodc iodc_data_hpa_%08lx = {\n", hpa);
1051 	#define DO(member) \
1052 		pr_cont("\t." #member " = 0x%04lx,\n", \
1053 			(unsigned long)iodc_data.member)
1054 	DO(hversion_model);
1055 	DO(hversion);
1056 	DO(spa);
1057 	DO(type);
1058 	DO(sversion_rev);
1059 	DO(sversion_model);
1060 	DO(sversion_opt);
1061 	DO(rev);
1062 	DO(dep);
1063 	DO(features);
1064 	DO(checksum);
1065 	DO(length);
1066 	#undef DO
1067 	pr_cont("\t/* pad: 0x%04x, 0x%04x */\n",
1068 		iodc_data.pad[0], iodc_data.pad[1]);
1069 	pr_cont("};\n");
1070 
1071 	pr_info("#define HPA_%08lx_num_addr %d\n", hpa, dev->num_addrs);
1072 	pr_info("#define HPA_%08lx_add_addr ", hpa);
1073 	count = 0;
1074 	if (dev->num_addrs == 0)
1075 		pr_cont("0");
1076 	while (count < dev->num_addrs) {
1077 		pr_cont("0x%08lx, ", dev->addr[count]);
1078 		count++;
1079 	}
1080 	pr_cont("\n\n");
1081 
1082 	return 0;
1083 }
1084 
1085 
1086 
1087 static int print_one_device(struct device * dev, void * data)
1088 {
1089 	struct parisc_device * pdev = to_parisc_device(dev);
1090 
1091 	if (check_dev(dev))
1092 		print_parisc_device(pdev);
1093 	return 0;
1094 }
1095 
1096 /**
1097  * print_parisc_devices - Print out a list of devices found in this system
1098  */
1099 void __init print_parisc_devices(void)
1100 {
1101 	for_each_padev(print_one_device, NULL);
1102 	#define PARISC_QEMU_MACHINE_HEADER 0
1103 	if (PARISC_QEMU_MACHINE_HEADER) {
1104 		qemu_header();
1105 		for_each_padev(qemu_print_iodc_data, NULL);
1106 		qemu_footer();
1107 	}
1108 }
1109