1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* This file is part of the coreboot project. */
5 * Originally based on the Linux kernel (drivers/pci/pci.c).
6 * PCI Bus Services, see include/linux/pci.h for further explanation.
10 #include <device/pci_ops.h>
12 #include <console/console.h>
17 #include <device/cardbus.h>
18 #include <device/device.h>
19 #include <device/pci.h>
20 #include <device/pci_ids.h>
21 #include <device/pcix.h>
22 #include <device/pciexp.h>
23 #include <device/hypertransport.h>
24 #include <pc80/i8259.h>
25 #include <security/vboot/vbnv.h>
26 #include <timestamp.h>
30 u8
pci_moving_config8(struct device
*dev
, unsigned int reg
)
32 u8 value
, ones
, zeroes
;
34 value
= pci_read_config8(dev
, reg
);
36 pci_write_config8(dev
, reg
, 0xff);
37 ones
= pci_read_config8(dev
, reg
);
39 pci_write_config8(dev
, reg
, 0x00);
40 zeroes
= pci_read_config8(dev
, reg
);
42 pci_write_config8(dev
, reg
, value
);
47 u16
pci_moving_config16(struct device
*dev
, unsigned int reg
)
49 u16 value
, ones
, zeroes
;
51 value
= pci_read_config16(dev
, reg
);
53 pci_write_config16(dev
, reg
, 0xffff);
54 ones
= pci_read_config16(dev
, reg
);
56 pci_write_config16(dev
, reg
, 0x0000);
57 zeroes
= pci_read_config16(dev
, reg
);
59 pci_write_config16(dev
, reg
, value
);
64 u32
pci_moving_config32(struct device
*dev
, unsigned int reg
)
66 u32 value
, ones
, zeroes
;
68 value
= pci_read_config32(dev
, reg
);
70 pci_write_config32(dev
, reg
, 0xffffffff);
71 ones
= pci_read_config32(dev
, reg
);
73 pci_write_config32(dev
, reg
, 0x00000000);
74 zeroes
= pci_read_config32(dev
, reg
);
76 pci_write_config32(dev
, reg
, value
);
82 * Given a device and register, read the size of the BAR for that register.
84 * @param dev Pointer to the device structure.
85 * @param index Address of the PCI configuration register.
88 struct resource
*pci_get_resource(struct device
*dev
, unsigned long index
)
90 struct resource
*resource
;
91 unsigned long value
, attr
;
92 resource_t moving
, limit
;
94 /* Initialize the resources to nothing. */
95 resource
= new_resource(dev
, index
);
97 /* Get the initial value. */
98 value
= pci_read_config32(dev
, index
);
100 /* See which bits move. */
101 moving
= pci_moving_config32(dev
, index
);
103 /* Initialize attr to the bits that do not move. */
104 attr
= value
& ~moving
;
106 /* If it is a 64bit resource look at the high half as well. */
107 if (((attr
& PCI_BASE_ADDRESS_SPACE_IO
) == 0) &&
108 ((attr
& PCI_BASE_ADDRESS_MEM_LIMIT_MASK
) ==
109 PCI_BASE_ADDRESS_MEM_LIMIT_64
)) {
110 /* Find the high bits that move. */
112 ((resource_t
) pci_moving_config32(dev
, index
+ 4)) << 32;
115 /* Find the resource constraints.
116 * Start by finding the bits that move. From there:
117 * - Size is the least significant bit of the bits that move.
118 * - Limit is all of the bits that move plus all of the lower bits.
119 * See PCI Spec 6.2.5.1.
124 resource
->align
= resource
->gran
= 0;
125 while (!(moving
& resource
->size
)) {
126 resource
->size
<<= 1;
127 resource
->align
+= 1;
130 resource
->limit
= limit
= moving
| (resource
->size
- 1);
132 if (pci_base_address_is_memory_space(attr
)) {
133 /* Page-align to allow individual mapping of devices. */
134 if (resource
->align
< 12)
135 resource
->align
= 12;
140 * Some broken hardware has read-only registers that do not
141 * really size correctly.
143 * Example: the Acer M7229 has BARs 1-4 normally read-only,
144 * so BAR1 at offset 0x10 reads 0x1f1. If you size that register
145 * by writing 0xffffffff to it, it will read back as 0x1f1 -- which
146 * is a violation of the spec.
148 * We catch this case and ignore it by observing which bits move.
150 * This also catches the common case of unimplemented registers
151 * that always read back as 0.
155 printk(BIOS_DEBUG
, "%s register %02lx(%08lx), "
156 "read-only ignoring it\n",
157 dev_path(dev
), index
, value
);
160 } else if (attr
& PCI_BASE_ADDRESS_SPACE_IO
) {
161 /* An I/O mapped base address. */
162 resource
->flags
|= IORESOURCE_IO
;
163 /* I don't want to deal with 32bit I/O resources. */
164 resource
->limit
= 0xffff;
166 /* A Memory mapped base address. */
167 attr
&= PCI_BASE_ADDRESS_MEM_ATTR_MASK
;
168 resource
->flags
|= IORESOURCE_MEM
;
169 if (attr
& PCI_BASE_ADDRESS_MEM_PREFETCH
)
170 resource
->flags
|= IORESOURCE_PREFETCH
;
171 attr
&= PCI_BASE_ADDRESS_MEM_LIMIT_MASK
;
172 if (attr
== PCI_BASE_ADDRESS_MEM_LIMIT_32
) {
174 resource
->limit
= 0xffffffffUL
;
175 } else if (attr
== PCI_BASE_ADDRESS_MEM_LIMIT_1M
) {
177 resource
->limit
= 0x000fffffUL
;
178 } else if (attr
== PCI_BASE_ADDRESS_MEM_LIMIT_64
) {
180 resource
->limit
= 0xffffffffffffffffULL
;
181 resource
->flags
|= IORESOURCE_PCI64
;
184 printk(BIOS_ERR
, "Broken BAR with value %lx\n", attr
);
185 printk(BIOS_ERR
, " on dev %s at index %02lx\n",
186 dev_path(dev
), index
);
191 /* Don't let the limit exceed which bits can move. */
192 if (resource
->limit
> limit
)
193 resource
->limit
= limit
;
199 * Given a device and an index, read the size of the BAR for that register.
201 * @param dev Pointer to the device structure.
202 * @param index Address of the PCI configuration register.
204 static void pci_get_rom_resource(struct device
*dev
, unsigned long index
)
206 struct resource
*resource
;
210 /* Initialize the resources to nothing. */
211 resource
= new_resource(dev
, index
);
213 /* Get the initial value. */
214 value
= pci_read_config32(dev
, index
);
216 /* See which bits move. */
217 moving
= pci_moving_config32(dev
, index
);
219 /* Clear the Enable bit. */
220 moving
= moving
& ~PCI_ROM_ADDRESS_ENABLE
;
222 /* Find the resource constraints.
223 * Start by finding the bits that move. From there:
224 * - Size is the least significant bit of the bits that move.
225 * - Limit is all of the bits that move plus all of the lower bits.
226 * See PCI Spec 6.2.5.1.
230 resource
->align
= resource
->gran
= 0;
231 while (!(moving
& resource
->size
)) {
232 resource
->size
<<= 1;
233 resource
->align
+= 1;
236 resource
->limit
= moving
| (resource
->size
- 1);
237 resource
->flags
|= IORESOURCE_MEM
| IORESOURCE_READONLY
;
240 printk(BIOS_DEBUG
, "%s register %02lx(%08lx), "
241 "read-only ignoring it\n",
242 dev_path(dev
), index
, value
);
246 compact_resources(dev
);
250 * Given a device, read the size of the MSI-X table.
252 * @param dev Pointer to the device structure.
253 * @return MSI-X table size or 0 if not MSI-X capable device
255 size_t pci_msix_table_size(struct device
*dev
)
257 const size_t pos
= pci_find_capability(dev
, PCI_CAP_ID_MSIX
);
261 const u16 control
= pci_read_config16(dev
, pos
+ PCI_MSIX_FLAGS
);
262 return (control
& PCI_MSIX_FLAGS_QSIZE
) + 1;
266 * Given a device, return the table offset and bar the MSI-X tables resides in.
268 * @param dev Pointer to the device structure.
269 * @param offset Returned value gives the offset in bytes inside the PCI BAR.
270 * @param idx The returned value is the index of the PCI_BASE_ADDRESS register
271 * the MSI-X table is located in.
272 * @return Zero on success
274 int pci_msix_table_bar(struct device
*dev
, u32
*offset
, u8
*idx
)
276 const size_t pos
= pci_find_capability(dev
, PCI_CAP_ID_MSIX
);
277 if (!pos
|| !offset
|| !idx
)
280 *offset
= pci_read_config32(dev
, pos
+ PCI_MSIX_TABLE
);
281 *idx
= (u8
)(*offset
& PCI_MSIX_PBA_BIR
);
282 *offset
&= PCI_MSIX_PBA_OFFSET
;
288 * Given a device, return a msix_entry pointer or NULL if no table was found.
290 * @param dev Pointer to the device structure.
292 * @return NULL on error
294 struct msix_entry
*pci_msix_get_table(struct device
*dev
)
296 struct resource
*res
;
300 if (pci_msix_table_bar(dev
, &offset
, &idx
))
306 res
= probe_resource(dev
, idx
* 4 + PCI_BASE_ADDRESS_0
);
307 if (!res
|| !res
->base
|| offset
>= res
->size
)
310 if ((res
->flags
& IORESOURCE_PCI64
) &&
311 (uintptr_t)res
->base
!= res
->base
)
314 return (struct msix_entry
*)((uintptr_t)res
->base
+ offset
);
318 * Read the base address registers for a given device.
320 * @param dev Pointer to the dev structure.
321 * @param howmany How many registers to read (6 for device, 2 for bridge).
323 static void pci_read_bases(struct device
*dev
, unsigned int howmany
)
327 for (index
= PCI_BASE_ADDRESS_0
;
328 (index
< PCI_BASE_ADDRESS_0
+ (howmany
<< 2));) {
329 struct resource
*resource
;
330 resource
= pci_get_resource(dev
, index
);
331 index
+= (resource
->flags
& IORESOURCE_PCI64
) ? 8 : 4;
334 compact_resources(dev
);
337 static void pci_record_bridge_resource(struct device
*dev
, resource_t moving
,
338 unsigned int index
, unsigned long type
)
340 struct resource
*resource
;
349 /* Initialize the constraints on the current bus. */
350 resource
= new_resource(dev
, index
);
354 while ((moving
& step
) == 0) {
358 resource
->gran
= gran
;
359 resource
->align
= gran
;
360 resource
->limit
= moving
| (step
- 1);
361 resource
->flags
= type
| IORESOURCE_PCI_BRIDGE
|
365 static void pci_bridge_read_bases(struct device
*dev
)
367 resource_t moving_base
, moving_limit
, moving
;
369 /* See if the bridge I/O resources are implemented. */
370 moving_base
= ((u32
) pci_moving_config8(dev
, PCI_IO_BASE
)) << 8;
372 ((u32
) pci_moving_config16(dev
, PCI_IO_BASE_UPPER16
)) << 16;
374 moving_limit
= ((u32
) pci_moving_config8(dev
, PCI_IO_LIMIT
)) << 8;
376 ((u32
) pci_moving_config16(dev
, PCI_IO_LIMIT_UPPER16
)) << 16;
378 moving
= moving_base
& moving_limit
;
380 /* Initialize the I/O space constraints on the current bus. */
381 pci_record_bridge_resource(dev
, moving
, PCI_IO_BASE
, IORESOURCE_IO
);
383 /* See if the bridge prefmem resources are implemented. */
385 ((resource_t
) pci_moving_config16(dev
, PCI_PREF_MEMORY_BASE
)) << 16;
387 ((resource_t
) pci_moving_config32(dev
, PCI_PREF_BASE_UPPER32
)) << 32;
390 ((resource_t
) pci_moving_config16(dev
, PCI_PREF_MEMORY_LIMIT
)) << 16;
392 ((resource_t
) pci_moving_config32(dev
, PCI_PREF_LIMIT_UPPER32
)) << 32;
394 moving
= moving_base
& moving_limit
;
395 /* Initialize the prefetchable memory constraints on the current bus. */
396 pci_record_bridge_resource(dev
, moving
, PCI_PREF_MEMORY_BASE
,
397 IORESOURCE_MEM
| IORESOURCE_PREFETCH
);
399 /* See if the bridge mem resources are implemented. */
400 moving_base
= ((u32
) pci_moving_config16(dev
, PCI_MEMORY_BASE
)) << 16;
401 moving_limit
= ((u32
) pci_moving_config16(dev
, PCI_MEMORY_LIMIT
)) << 16;
403 moving
= moving_base
& moving_limit
;
405 /* Initialize the memory resources on the current bus. */
406 pci_record_bridge_resource(dev
, moving
, PCI_MEMORY_BASE
,
409 compact_resources(dev
);
412 void pci_dev_read_resources(struct device
*dev
)
414 pci_read_bases(dev
, 6);
415 pci_get_rom_resource(dev
, PCI_ROM_ADDRESS
);
418 void pci_bus_read_resources(struct device
*dev
)
420 pci_bridge_read_bases(dev
);
421 pci_read_bases(dev
, 2);
422 pci_get_rom_resource(dev
, PCI_ROM_ADDRESS1
);
425 void pci_domain_read_resources(struct device
*dev
)
427 struct resource
*res
;
429 /* Initialize the system-wide I/O space constraints. */
430 res
= new_resource(dev
, IOINDEX_SUBTRACTIVE(0, 0));
431 res
->limit
= 0xffffUL
;
432 res
->flags
= IORESOURCE_IO
| IORESOURCE_SUBTRACTIVE
|
435 /* Initialize the system-wide memory resources constraints. */
436 res
= new_resource(dev
, IOINDEX_SUBTRACTIVE(1, 0));
437 res
->limit
= 0xffffffffULL
;
438 res
->flags
= IORESOURCE_MEM
| IORESOURCE_SUBTRACTIVE
|
442 static void pci_set_resource(struct device
*dev
, struct resource
*resource
)
444 resource_t base
, end
;
446 /* Make certain the resource has actually been assigned a value. */
447 if (!(resource
->flags
& IORESOURCE_ASSIGNED
)) {
448 printk(BIOS_ERR
, "ERROR: %s %02lx %s size: 0x%010llx not "
449 "assigned\n", dev_path(dev
), resource
->index
,
450 resource_type(resource
), resource
->size
);
454 /* If this resource is fixed don't worry about it. */
455 if (resource
->flags
& IORESOURCE_FIXED
)
458 /* If I have already stored this resource don't worry about it. */
459 if (resource
->flags
& IORESOURCE_STORED
)
462 /* If the resource is subtractive don't worry about it. */
463 if (resource
->flags
& IORESOURCE_SUBTRACTIVE
)
466 /* Only handle PCI memory and I/O resources for now. */
467 if (!(resource
->flags
& (IORESOURCE_MEM
| IORESOURCE_IO
)))
470 /* Enable the resources in the command register. */
471 if (resource
->size
) {
472 if (resource
->flags
& IORESOURCE_MEM
)
473 dev
->command
|= PCI_COMMAND_MEMORY
;
474 if (resource
->flags
& IORESOURCE_IO
)
475 dev
->command
|= PCI_COMMAND_IO
;
476 if (resource
->flags
& IORESOURCE_PCI_BRIDGE
)
477 dev
->command
|= PCI_COMMAND_MASTER
;
480 /* Get the base address. */
481 base
= resource
->base
;
484 end
= resource_end(resource
);
486 /* Now store the resource. */
487 resource
->flags
|= IORESOURCE_STORED
;
490 * PCI bridges have no enable bit. They are disabled if the base of
491 * the range is greater than the limit. If the size is zero, disable
492 * by setting the base = limit and end = limit - 2^gran.
494 if (resource
->size
== 0 && (resource
->flags
& IORESOURCE_PCI_BRIDGE
)) {
495 base
= resource
->limit
;
496 end
= resource
->limit
- (1 << resource
->gran
);
497 resource
->base
= base
;
500 if (!(resource
->flags
& IORESOURCE_PCI_BRIDGE
)) {
501 unsigned long base_lo
, base_hi
;
504 * Some chipsets allow us to set/clear the I/O bit
505 * (e.g. VIA 82C686A). So set it to be safe.
507 base_lo
= base
& 0xffffffff;
508 base_hi
= (base
>> 32) & 0xffffffff;
509 if (resource
->flags
& IORESOURCE_IO
)
510 base_lo
|= PCI_BASE_ADDRESS_SPACE_IO
;
511 pci_write_config32(dev
, resource
->index
, base_lo
);
512 if (resource
->flags
& IORESOURCE_PCI64
)
513 pci_write_config32(dev
, resource
->index
+ 4, base_hi
);
514 } else if (resource
->index
== PCI_IO_BASE
) {
515 /* Set the I/O ranges. */
516 pci_write_config8(dev
, PCI_IO_BASE
, base
>> 8);
517 pci_write_config16(dev
, PCI_IO_BASE_UPPER16
, base
>> 16);
518 pci_write_config8(dev
, PCI_IO_LIMIT
, end
>> 8);
519 pci_write_config16(dev
, PCI_IO_LIMIT_UPPER16
, end
>> 16);
520 } else if (resource
->index
== PCI_MEMORY_BASE
) {
521 /* Set the memory range. */
522 pci_write_config16(dev
, PCI_MEMORY_BASE
, base
>> 16);
523 pci_write_config16(dev
, PCI_MEMORY_LIMIT
, end
>> 16);
524 } else if (resource
->index
== PCI_PREF_MEMORY_BASE
) {
525 /* Set the prefetchable memory range. */
526 pci_write_config16(dev
, PCI_PREF_MEMORY_BASE
, base
>> 16);
527 pci_write_config32(dev
, PCI_PREF_BASE_UPPER32
, base
>> 32);
528 pci_write_config16(dev
, PCI_PREF_MEMORY_LIMIT
, end
>> 16);
529 pci_write_config32(dev
, PCI_PREF_LIMIT_UPPER32
, end
>> 32);
531 /* Don't let me think I stored the resource. */
532 resource
->flags
&= ~IORESOURCE_STORED
;
533 printk(BIOS_ERR
, "ERROR: invalid resource->index %lx\n",
537 report_resource_stored(dev
, resource
, "");
540 void pci_dev_set_resources(struct device
*dev
)
542 struct resource
*res
;
546 for (res
= dev
->resource_list
; res
; res
= res
->next
)
547 pci_set_resource(dev
, res
);
549 for (bus
= dev
->link_list
; bus
; bus
= bus
->next
) {
551 assign_resources(bus
);
554 /* Set a default latency timer. */
555 pci_write_config8(dev
, PCI_LATENCY_TIMER
, 0x40);
557 /* Set a default secondary latency timer. */
558 if ((dev
->hdr_type
& 0x7f) == PCI_HEADER_TYPE_BRIDGE
)
559 pci_write_config8(dev
, PCI_SEC_LATENCY_TIMER
, 0x40);
561 /* Zero the IRQ settings. */
562 line
= pci_read_config8(dev
, PCI_INTERRUPT_PIN
);
564 pci_write_config8(dev
, PCI_INTERRUPT_LINE
, 0);
566 /* Set the cache line size, so far 64 bytes is good for everyone. */
567 pci_write_config8(dev
, PCI_CACHE_LINE_SIZE
, 64 >> 2);
570 void pci_dev_enable_resources(struct device
*dev
)
572 const struct pci_operations
*ops
= NULL
;
575 /* Set the subsystem vendor and device ID for mainboard devices. */
577 ops
= dev
->ops
->ops_pci
;
578 if (dev
->on_mainboard
&& ops
&& ops
->set_subsystem
) {
579 if (CONFIG_SUBSYSTEM_VENDOR_ID
)
580 dev
->subsystem_vendor
= CONFIG_SUBSYSTEM_VENDOR_ID
;
581 else if (!dev
->subsystem_vendor
)
582 dev
->subsystem_vendor
= pci_read_config16(dev
,
584 if (CONFIG_SUBSYSTEM_DEVICE_ID
)
585 dev
->subsystem_device
= CONFIG_SUBSYSTEM_DEVICE_ID
;
586 else if (!dev
->subsystem_device
)
587 dev
->subsystem_device
= pci_read_config16(dev
,
590 printk(BIOS_DEBUG
, "%s subsystem <- %04x/%04x\n",
591 dev_path(dev
), dev
->subsystem_vendor
,
592 dev
->subsystem_device
);
593 ops
->set_subsystem(dev
, dev
->subsystem_vendor
,
594 dev
->subsystem_device
);
596 command
= pci_read_config16(dev
, PCI_COMMAND
);
597 command
|= dev
->command
;
600 * command |= (PCI_COMMAND_PARITY + PCI_COMMAND_SERR); // Error check.
603 printk(BIOS_DEBUG
, "%s cmd <- %02x\n", dev_path(dev
), command
);
604 pci_write_config16(dev
, PCI_COMMAND
, command
);
607 void pci_bus_enable_resources(struct device
*dev
)
612 * Enable I/O in command register if there is VGA card
613 * connected with (even it does not claim I/O resource).
615 if (dev
->link_list
->bridge_ctrl
& PCI_BRIDGE_CTL_VGA
)
616 dev
->command
|= PCI_COMMAND_IO
;
617 ctrl
= pci_read_config16(dev
, PCI_BRIDGE_CONTROL
);
618 ctrl
|= dev
->link_list
->bridge_ctrl
;
619 ctrl
|= (PCI_BRIDGE_CTL_PARITY
| PCI_BRIDGE_CTL_SERR
); /* Error check. */
620 printk(BIOS_DEBUG
, "%s bridge ctrl <- %04x\n", dev_path(dev
), ctrl
);
621 pci_write_config16(dev
, PCI_BRIDGE_CONTROL
, ctrl
);
623 pci_dev_enable_resources(dev
);
626 void pci_bus_reset(struct bus
*bus
)
630 ctl
= pci_read_config16(bus
->dev
, PCI_BRIDGE_CONTROL
);
631 ctl
|= PCI_BRIDGE_CTL_BUS_RESET
;
632 pci_write_config16(bus
->dev
, PCI_BRIDGE_CONTROL
, ctl
);
635 ctl
&= ~PCI_BRIDGE_CTL_BUS_RESET
;
636 pci_write_config16(bus
->dev
, PCI_BRIDGE_CONTROL
, ctl
);
640 void pci_dev_set_subsystem(struct device
*dev
, unsigned int vendor
,
646 switch (dev
->hdr_type
& 0x7f) {
647 case PCI_HEADER_TYPE_NORMAL
:
648 offset
= PCI_SUBSYSTEM_VENDOR_ID
;
650 case PCI_HEADER_TYPE_BRIDGE
:
651 offset
= pci_find_capability(dev
, PCI_CAP_ID_SSVID
);
654 offset
+= 4; /* Vendor ID at offset 4 */
656 case PCI_HEADER_TYPE_CARDBUS
:
657 offset
= PCI_CB_SUBSYSTEM_VENDOR_ID
;
663 if (!vendor
|| !device
) {
664 pci_write_config32(dev
, offset
,
665 pci_read_config32(dev
, PCI_VENDOR_ID
));
667 pci_write_config32(dev
, offset
,
668 ((device
& 0xffff) << 16) | (vendor
& 0xffff));
672 static int should_run_oprom(struct device
*dev
, struct rom_header
*rom
)
674 static int should_run
= -1;
676 if (CONFIG(VENDORCODE_ELTAN_VBOOT
))
678 if (!verified_boot_should_run_oprom(rom
))
684 if (CONFIG(ALWAYS_RUN_OPROM
)) {
689 /* Don't run VGA option ROMs, unless we have to print
690 * something on the screen before the kernel is loaded.
692 should_run
= display_init_required();
695 printk(BIOS_DEBUG
, "Not running VGA Option ROM\n");
699 static int should_load_oprom(struct device
*dev
)
701 /* If S3_VGA_ROM_RUN is disabled, skip running VGA option
702 * ROMs when coming out of an S3 resume.
704 if (!CONFIG(S3_VGA_ROM_RUN
) && acpi_is_wakeup_s3() &&
705 ((dev
->class >> 8) == PCI_CLASS_DISPLAY_VGA
))
707 if (CONFIG(ALWAYS_LOAD_OPROM
))
709 if (should_run_oprom(dev
, NULL
))
715 /** Default handler: only runs the relevant PCI BIOS. */
716 void pci_dev_init(struct device
*dev
)
718 struct rom_header
*rom
, *ram
;
720 if (!CONFIG(VGA_ROM_RUN
))
723 /* Only execute VGA ROMs. */
724 if (((dev
->class >> 8) != PCI_CLASS_DISPLAY_VGA
))
727 if (!should_load_oprom(dev
))
729 timestamp_add_now(TS_OPROM_INITIALIZE
);
731 rom
= pci_rom_probe(dev
);
735 ram
= pci_rom_load(dev
, rom
);
738 timestamp_add_now(TS_OPROM_COPY_END
);
740 if (!should_run_oprom(dev
, rom
))
743 run_bios(dev
, (unsigned long)ram
);
745 gfx_set_init_done(1);
746 printk(BIOS_DEBUG
, "VGA Option ROM was run\n");
747 timestamp_add_now(TS_OPROM_END
);
750 /** Default device operation for PCI devices */
751 struct pci_operations pci_dev_ops_pci
= {
752 .set_subsystem
= pci_dev_set_subsystem
,
755 struct device_operations default_pci_ops_dev
= {
756 .read_resources
= pci_dev_read_resources
,
757 .set_resources
= pci_dev_set_resources
,
758 .enable_resources
= pci_dev_enable_resources
,
759 #if CONFIG(HAVE_ACPI_TABLES)
760 .write_acpi_tables
= pci_rom_write_acpi_tables
,
761 .acpi_fill_ssdt
= pci_rom_ssdt
,
763 .init
= pci_dev_init
,
764 .ops_pci
= &pci_dev_ops_pci
,
767 /** Default device operations for PCI bridges */
768 static struct pci_operations pci_bus_ops_pci
= {
772 struct device_operations default_pci_ops_bus
= {
773 .read_resources
= pci_bus_read_resources
,
774 .set_resources
= pci_dev_set_resources
,
775 .enable_resources
= pci_bus_enable_resources
,
776 .scan_bus
= pci_scan_bridge
,
777 .reset_bus
= pci_bus_reset
,
778 .ops_pci
= &pci_bus_ops_pci
,
782 * Check for compatibility to route legacy VGA cycles through a bridge.
784 * Originally, when decoding i/o ports for legacy VGA cycles, bridges
785 * should only consider the 10 least significant bits of the port address.
786 * This means all VGA registers were aliased every 1024 ports!
787 * e.g. 0x3b0 was also decoded as 0x7b0, 0xbb0 etc.
789 * To avoid this mess, a bridge control bit (VGA16) was introduced in
790 * 2003 to enable decoding of 16-bit port addresses. As we don't want
791 * to make this any more complex for now, we use this bit if possible
792 * and only warn if it's not supported (in set_vga_bridge_bits()).
794 static void pci_bridge_vga_compat(struct bus
*const bus
)
796 uint16_t bridge_ctrl
;
798 bridge_ctrl
= pci_read_config16(bus
->dev
, PCI_BRIDGE_CONTROL
);
800 /* Ensure VGA decoding is disabled during probing (it should
801 be by default, but we run blobs nowadays) */
802 bridge_ctrl
&= ~PCI_BRIDGE_CTL_VGA
;
803 pci_write_config16(bus
->dev
, PCI_BRIDGE_CONTROL
, bridge_ctrl
);
805 /* If the upstream bridge doesn't support VGA16, we don't have to check */
806 bus
->no_vga16
|= bus
->dev
->bus
->no_vga16
;
810 /* Test if we can enable 16-bit decoding */
811 bridge_ctrl
|= PCI_BRIDGE_CTL_VGA16
;
812 pci_write_config16(bus
->dev
, PCI_BRIDGE_CONTROL
, bridge_ctrl
);
813 bridge_ctrl
= pci_read_config16(bus
->dev
, PCI_BRIDGE_CONTROL
);
815 bus
->no_vga16
= !(bridge_ctrl
& PCI_BRIDGE_CTL_VGA16
);
819 * Detect the type of downstream bridge.
821 * This function is a heuristic to detect which type of bus is downstream
822 * of a PCI-to-PCI bridge. This functions by looking for various capability
823 * blocks to figure out the type of downstream bridge. PCI-X, PCI-E, and
824 * Hypertransport all seem to have appropriate capabilities.
826 * When only a PCI-Express capability is found the type is examined to see
827 * which type of bridge we have.
829 * @param dev Pointer to the device structure of the bridge.
830 * @return Appropriate bridge operations.
832 static struct device_operations
*get_pci_bridge_ops(struct device
*dev
)
834 #if CONFIG(PCIX_PLUGIN_SUPPORT)
835 unsigned int pcixpos
;
836 pcixpos
= pci_find_capability(dev
, PCI_CAP_ID_PCIX
);
838 printk(BIOS_DEBUG
, "%s subordinate bus PCI-X\n", dev_path(dev
));
839 return &default_pcix_ops_bus
;
842 #if CONFIG(HYPERTRANSPORT_PLUGIN_SUPPORT)
843 unsigned int htpos
= 0;
844 while ((htpos
= pci_find_next_capability(dev
, PCI_CAP_ID_HT
, htpos
))) {
846 flags
= pci_read_config16(dev
, htpos
+ PCI_CAP_FLAGS
);
847 if ((flags
>> 13) == 1) {
848 /* Host or Secondary Interface */
849 printk(BIOS_DEBUG
, "%s subordinate bus HT\n",
851 return &default_ht_ops_bus
;
855 #if CONFIG(PCIEXP_PLUGIN_SUPPORT)
856 unsigned int pciexpos
;
857 pciexpos
= pci_find_capability(dev
, PCI_CAP_ID_PCIE
);
860 flags
= pci_read_config16(dev
, pciexpos
+ PCI_EXP_FLAGS
);
861 switch ((flags
& PCI_EXP_FLAGS_TYPE
) >> 4) {
862 case PCI_EXP_TYPE_ROOT_PORT
:
863 case PCI_EXP_TYPE_UPSTREAM
:
864 case PCI_EXP_TYPE_DOWNSTREAM
:
865 printk(BIOS_DEBUG
, "%s subordinate bus PCI Express\n",
867 #if CONFIG(PCIEXP_HOTPLUG)
869 sltcap
= pci_read_config16(dev
, pciexpos
+ PCI_EXP_SLTCAP
);
870 if (sltcap
& PCI_EXP_SLTCAP_HPC
) {
871 printk(BIOS_DEBUG
, "%s hot-plug capable\n", dev_path(dev
));
872 return &default_pciexp_hotplug_ops_bus
;
874 #endif /* CONFIG(PCIEXP_HOTPLUG) */
875 return &default_pciexp_ops_bus
;
876 case PCI_EXP_TYPE_PCI_BRIDGE
:
877 printk(BIOS_DEBUG
, "%s subordinate PCI\n",
879 return &default_pci_ops_bus
;
885 return &default_pci_ops_bus
;
889 * Check if a device id matches a PCI driver entry.
891 * The driver entry can either point at a zero terminated array of acceptable
892 * device IDs, or include a single device ID.
894 * @param driver pointer to the PCI driver entry being checked
895 * @param device_id PCI device ID of the device being matched
897 static int device_id_match(struct pci_driver
*driver
, unsigned short device_id
)
899 if (driver
->devices
) {
900 unsigned short check_id
;
901 const unsigned short *device_list
= driver
->devices
;
902 while ((check_id
= *device_list
++) != 0)
903 if (check_id
== device_id
)
907 return (driver
->device
== device_id
);
911 * Set up PCI device operation.
913 * Check if it already has a driver. If not, use find_device_operations(),
914 * or set to a default based on type.
916 * @param dev Pointer to the device whose pci_ops you want to set.
919 static void set_pci_ops(struct device
*dev
)
921 struct pci_driver
*driver
;
927 * Look through the list of setup drivers and find one for
930 for (driver
= &_pci_drivers
[0]; driver
!= &_epci_drivers
[0]; driver
++) {
931 if ((driver
->vendor
== dev
->vendor
) &&
932 device_id_match(driver
, dev
->device
)) {
933 dev
->ops
= (struct device_operations
*)driver
->ops
;
934 printk(BIOS_SPEW
, "%s [%04x/%04x] %sops\n",
935 dev_path(dev
), driver
->vendor
, driver
->device
,
936 (driver
->ops
->scan_bus
? "bus " : ""));
941 /* If I don't have a specific driver use the default operations. */
942 switch (dev
->hdr_type
& 0x7f) { /* Header type */
943 case PCI_HEADER_TYPE_NORMAL
:
944 if ((dev
->class >> 8) == PCI_CLASS_BRIDGE_PCI
)
946 dev
->ops
= &default_pci_ops_dev
;
948 case PCI_HEADER_TYPE_BRIDGE
:
949 if ((dev
->class >> 8) != PCI_CLASS_BRIDGE_PCI
)
951 dev
->ops
= get_pci_bridge_ops(dev
);
953 #if CONFIG(CARDBUS_PLUGIN_SUPPORT)
954 case PCI_HEADER_TYPE_CARDBUS
:
955 dev
->ops
= &default_cardbus_ops_bus
;
961 printk(BIOS_ERR
, "%s [%04x/%04x/%06x] has unknown "
962 "header type %02x, ignoring.\n", dev_path(dev
),
963 dev
->vendor
, dev
->device
,
964 dev
->class >> 8, dev
->hdr_type
);
970 * See if we have already allocated a device structure for a given devfn.
972 * Given a PCI bus structure and a devfn number, find the device structure
973 * corresponding to the devfn, if present. Then move the device structure
974 * as the last child on the bus.
976 * @param bus Pointer to the bus structure.
977 * @param devfn A device/function number.
978 * @return Pointer to the device structure found or NULL if we have not
979 * allocated a device for this devfn yet.
981 static struct device
*pci_scan_get_dev(struct bus
*bus
, unsigned int devfn
)
983 struct device
*dev
, **prev
;
985 prev
= &bus
->children
;
986 for (dev
= bus
->children
; dev
; dev
= dev
->sibling
) {
987 if (dev
->path
.type
== DEVICE_PATH_PCI
) {
988 if (dev
->path
.pci
.devfn
== devfn
) {
989 /* Unlink from the list. */
990 *prev
= dev
->sibling
;
995 printk(BIOS_ERR
, "child %s not a PCI device\n",
998 prev
= &dev
->sibling
;
1002 * Just like alloc_dev() add the device to the list of devices on the
1003 * bus. When the list of devices was formed we removed all of the
1004 * parents children, and now we are interleaving static and dynamic
1005 * devices in order on the bus.
1008 struct device
*child
;
1010 /* Find the last child on the bus. */
1011 for (child
= bus
->children
; child
&& child
->sibling
;)
1012 child
= child
->sibling
;
1014 /* Place the device as last on the bus. */
1016 child
->sibling
= dev
;
1018 bus
->children
= dev
;
1027 * Determine the existence of a given PCI device. Allocate a new struct device
1028 * if dev==NULL was passed in and the device exists in hardware.
1030 * @param dev Pointer to the dev structure.
1031 * @param bus Pointer to the bus structure.
1032 * @param devfn A device/function number to look at.
1033 * @return The device structure for the device (if found), NULL otherwise.
1035 struct device
*pci_probe_dev(struct device
*dev
, struct bus
*bus
,
1041 /* Detect if a device is present. */
1043 struct device dummy
;
1046 dummy
.path
.type
= DEVICE_PATH_PCI
;
1047 dummy
.path
.pci
.devfn
= devfn
;
1049 id
= pci_read_config32(&dummy
, PCI_VENDOR_ID
);
1051 * Have we found something? Some broken boards return 0 if a
1052 * slot is empty, but the expected answer is 0xffffffff.
1054 if (id
== 0xffffffff)
1057 if ((id
== 0x00000000) || (id
== 0x0000ffff) ||
1058 (id
== 0xffff0000)) {
1059 printk(BIOS_SPEW
, "%s, bad id 0x%x\n",
1060 dev_path(&dummy
), id
);
1063 dev
= alloc_dev(bus
, &dummy
.path
);
1066 * Enable/disable the device. Once we have found the device-
1067 * specific operations this operations we will disable the
1068 * device with those as well.
1070 * This is geared toward devices that have subfunctions
1071 * that do not show up by default.
1073 * If a device is a stuff option on the motherboard
1074 * it may be absent and enable_dev() must cope.
1076 /* Run the magic enable sequence for the device. */
1077 if (dev
->chip_ops
&& dev
->chip_ops
->enable_dev
)
1078 dev
->chip_ops
->enable_dev(dev
);
1080 /* Now read the vendor and device ID. */
1081 id
= pci_read_config32(dev
, PCI_VENDOR_ID
);
1084 * If the device does not have a PCI ID disable it. Possibly
1085 * this is because we have already disabled the device. But
1086 * this also handles optional devices that may not always
1089 /* If the chain is fully enumerated quit */
1090 if ((id
== 0xffffffff) || (id
== 0x00000000) ||
1091 (id
== 0x0000ffff) || (id
== 0xffff0000)) {
1093 printk(BIOS_INFO
, "PCI: Static device %s not "
1094 "found, disabling it.\n", dev_path(dev
));
1101 /* Read the rest of the PCI configuration information. */
1102 hdr_type
= pci_read_config8(dev
, PCI_HEADER_TYPE
);
1103 class = pci_read_config32(dev
, PCI_CLASS_REVISION
);
1105 /* Store the interesting information in the device structure. */
1106 dev
->vendor
= id
& 0xffff;
1107 dev
->device
= (id
>> 16) & 0xffff;
1108 dev
->hdr_type
= hdr_type
;
1110 /* Class code, the upper 3 bytes of PCI_CLASS_REVISION. */
1111 dev
->class = class >> 8;
1113 /* Architectural/System devices always need to be bus masters. */
1114 if ((dev
->class >> 16) == PCI_BASE_CLASS_SYSTEM
)
1115 dev
->command
|= PCI_COMMAND_MASTER
;
1118 * Look at the vendor and device ID, or at least the header type and
1119 * class and figure out which set of configuration methods to use.
1120 * Unless we already have some PCI ops.
1124 /* Now run the magic enable/disable sequence for the device. */
1125 if (dev
->ops
&& dev
->ops
->enable
)
1126 dev
->ops
->enable(dev
);
1128 /* Display the device. */
1129 printk(BIOS_DEBUG
, "%s [%04x/%04x] %s%s\n", dev_path(dev
),
1130 dev
->vendor
, dev
->device
, dev
->enabled
? "enabled" : "disabled",
1131 dev
->ops
? "" : " No operations");
1137 * Test for match between romstage and ramstage device instance.
1139 * @param dev Pointer to the device structure.
1140 * @param sdev Simple device model identifier, created with PCI_DEV().
1141 * @return Non-zero if bus:dev.fn of device matches.
1143 unsigned int pci_match_simple_dev(struct device
*dev
, pci_devfn_t sdev
)
1145 return dev
->bus
->secondary
== PCI_DEV2SEGBUS(sdev
) &&
1146 dev
->path
.pci
.devfn
== PCI_DEV2DEVFN(sdev
);
1152 * Determine the existence of devices and bridges on a PCI bus. If there are
1153 * bridges on the bus, recursively scan the buses behind the bridges.
1155 * @param bus Pointer to the bus structure.
1156 * @param min_devfn Minimum devfn to look at in the scan, usually 0x00.
1157 * @param max_devfn Maximum devfn to look at in the scan, usually 0xff.
1159 void pci_scan_bus(struct bus
*bus
, unsigned int min_devfn
,
1160 unsigned int max_devfn
)
1163 struct device
*dev
, **prev
;
1166 printk(BIOS_DEBUG
, "PCI: pci_scan_bus for bus %02x\n", bus
->secondary
);
1168 /* Maximum sane devfn is 0xFF. */
1169 if (max_devfn
> 0xff) {
1170 printk(BIOS_ERR
, "PCI: pci_scan_bus limits devfn %x - "
1171 "devfn %x\n", min_devfn
, max_devfn
);
1172 printk(BIOS_ERR
, "PCI: pci_scan_bus upper limit too big. "
1180 * Probe all devices/functions on this bus with some optimization for
1181 * non-existence and single function devices.
1183 for (devfn
= min_devfn
; devfn
<= max_devfn
; devfn
++) {
1184 if (CONFIG(MINIMAL_PCI_SCANNING
)) {
1185 dev
= pcidev_path_behind(bus
, devfn
);
1186 if (!dev
|| !dev
->mandatory
)
1190 /* First thing setup the device structure. */
1191 dev
= pci_scan_get_dev(bus
, devfn
);
1193 /* See if a device is present and setup the device structure. */
1194 dev
= pci_probe_dev(dev
, bus
, devfn
);
1197 * If this is not a multi function device, or the device is
1198 * not present don't waste time probing another function.
1199 * Skip to next device.
1201 if ((PCI_FUNC(devfn
) == 0x00) && (!dev
1202 || (dev
->enabled
&& ((dev
->hdr_type
& 0x80) != 0x80)))) {
1210 * Warn if any leftover static devices are are found.
1211 * There's probably a problem in devicetree.cb.
1214 prev
= &bus
->children
;
1215 for (dev
= bus
->children
; dev
; dev
= dev
->sibling
) {
1216 /* If we read valid vendor id, it is not leftover device. */
1217 if (dev
->vendor
!= 0) {
1218 prev
= &dev
->sibling
;
1222 /* Unlink it from list. */
1223 *prev
= dev
->sibling
;
1226 printk(BIOS_WARNING
, "PCI: Leftover static devices:\n");
1227 printk(BIOS_WARNING
, "%s\n", dev_path(dev
));
1231 printk(BIOS_WARNING
, "PCI: Check your devicetree.cb.\n");
1234 * For all children that implement scan_bus() (i.e. bridges)
1235 * scan the bus behind that child.
1241 * We've scanned the bus and so we know all about what's on the other
1242 * side of any bridges that may be on this bus plus any devices.
1243 * Return how far we've got finding sub-buses.
1254 static void pci_bridge_route(struct bus
*link
, scan_state state
)
1256 struct device
*dev
= link
->dev
;
1257 struct bus
*parent
= dev
->bus
;
1260 if (state
== PCI_ROUTE_SCAN
) {
1261 link
->secondary
= parent
->subordinate
+ 1;
1262 link
->subordinate
= link
->secondary
+ dev
->hotplug_buses
;
1265 if (state
== PCI_ROUTE_CLOSE
) {
1266 buses
|= 0xfeff << 8;
1267 } else if (state
== PCI_ROUTE_SCAN
) {
1268 buses
|= parent
->secondary
& 0xff;
1269 buses
|= ((u32
) link
->secondary
& 0xff) << 8;
1270 buses
|= 0xff << 16; /* MAX PCI_BUS number here */
1271 } else if (state
== PCI_ROUTE_FINAL
) {
1272 buses
|= parent
->secondary
& 0xff;
1273 buses
|= ((u32
) link
->secondary
& 0xff) << 8;
1274 buses
|= ((u32
) link
->subordinate
& 0xff) << 16;
1277 if (state
== PCI_ROUTE_SCAN
) {
1278 /* Clear all status bits and turn off memory, I/O and master enables. */
1279 link
->bridge_cmd
= pci_read_config16(dev
, PCI_COMMAND
);
1280 pci_write_config16(dev
, PCI_COMMAND
, 0x0000);
1281 pci_write_config16(dev
, PCI_STATUS
, 0xffff);
1285 * Configure the bus numbers for this bridge: the configuration
1286 * transactions will not be propagated by the bridge if it is not
1287 * correctly configured.
1290 reg
= pci_read_config32(dev
, PCI_PRIMARY_BUS
);
1293 pci_write_config32(dev
, PCI_PRIMARY_BUS
, reg
);
1295 if (state
== PCI_ROUTE_FINAL
) {
1296 pci_write_config16(dev
, PCI_COMMAND
, link
->bridge_cmd
);
1297 parent
->subordinate
= link
->subordinate
;
1302 * Scan a PCI bridge and the buses behind the bridge.
1304 * Determine the existence of buses behind the bridge. Set up the bridge
1305 * according to the result of the scan.
1307 * This function is the default scan_bus() method for PCI bridge devices.
1309 * @param dev Pointer to the bridge device.
1310 * @param do_scan_bus TODO
1312 void do_pci_scan_bridge(struct device
*dev
,
1313 void (*do_scan_bus
) (struct bus
* bus
,
1314 unsigned int min_devfn
,
1315 unsigned int max_devfn
))
1319 printk(BIOS_SPEW
, "%s for %s\n", __func__
, dev_path(dev
));
1321 if (dev
->link_list
== NULL
) {
1323 link
= malloc(sizeof(*link
));
1325 die("Couldn't allocate a link!\n");
1326 memset(link
, 0, sizeof(*link
));
1328 dev
->link_list
= link
;
1331 bus
= dev
->link_list
;
1333 pci_bridge_vga_compat(bus
);
1335 pci_bridge_route(bus
, PCI_ROUTE_SCAN
);
1337 do_scan_bus(bus
, 0x00, 0xff);
1339 pci_bridge_route(bus
, PCI_ROUTE_FINAL
);
1343 * Scan a PCI bridge and the buses behind the bridge.
1345 * Determine the existence of buses behind the bridge. Set up the bridge
1346 * according to the result of the scan.
1348 * This function is the default scan_bus() method for PCI bridge devices.
1350 * @param dev Pointer to the bridge device.
1352 void pci_scan_bridge(struct device
*dev
)
1354 do_pci_scan_bridge(dev
, pci_scan_bus
);
1358 * Scan a PCI domain.
1360 * This function is the default scan_bus() method for PCI domains.
1362 * @param dev Pointer to the domain.
1364 void pci_domain_scan_bus(struct device
*dev
)
1366 struct bus
*link
= dev
->link_list
;
1367 pci_scan_bus(link
, PCI_DEVFN(0, 0), 0xff);
1371 * Take an INT_PIN number (0, 1 - 4) and convert
1372 * it to a string ("NO PIN", "PIN A" - "PIN D")
1374 * @param pin PCI Interrupt Pin number (0, 1 - 4)
1375 * @return A string corresponding to the pin number or "Invalid"
1377 const char *pin_to_str(int pin
)
1379 const char *str
[5] = {
1387 if (pin
>= 0 && pin
<= 4)
1390 return "Invalid PIN, not 0 - 4";
1394 * Get the PCI INT_PIN swizzle for a device defined as:
1395 * pin_parent = (pin_child + devn_child) % 4 + 1
1396 * where PIN A = 1 ... PIN_D = 4
1398 * Given a PCI device structure 'dev', find the interrupt pin
1399 * that will be triggered on its parent bridge device when
1400 * generating an interrupt. For example: Device 1:3.2 may
1401 * use INT_PIN A but will trigger PIN D on its parent bridge
1402 * device. In this case, this function will return 4 (PIN D).
1404 * @param dev A PCI device structure to swizzle interrupt pins for
1405 * @param *parent_bridge The PCI device structure for the bridge
1406 * device 'dev' is attached to
1407 * @return The interrupt pin number (1 - 4) that 'dev' will
1408 * trigger when generating an interrupt
1410 static int swizzle_irq_pins(struct device
*dev
, struct device
**parent_bridge
)
1412 struct device
*parent
; /* Our current device's parent device */
1413 struct device
*child
; /* The child device of the parent */
1414 uint8_t parent_bus
= 0; /* Parent Bus number */
1415 uint16_t parent_devfn
= 0; /* Parent Device and Function number */
1416 uint16_t child_devfn
= 0; /* Child Device and Function number */
1417 uint8_t swizzled_pin
= 0; /* Pin swizzled across a bridge */
1419 /* Start with PIN A = 0 ... D = 3 */
1420 swizzled_pin
= pci_read_config8(dev
, PCI_INTERRUPT_PIN
) - 1;
1422 /* While our current device has parent devices */
1424 for (parent
= child
->bus
->dev
; parent
; parent
= parent
->bus
->dev
) {
1425 parent_bus
= parent
->bus
->secondary
;
1426 parent_devfn
= parent
->path
.pci
.devfn
;
1427 child_devfn
= child
->path
.pci
.devfn
;
1429 /* Swizzle the INT_PIN for any bridges not on root bus */
1430 swizzled_pin
= (PCI_SLOT(child_devfn
) + swizzled_pin
) % 4;
1431 printk(BIOS_SPEW
, "\tWith INT_PIN swizzled to %s\n"
1432 "\tAttached to bridge device %01X:%02Xh.%02Xh\n",
1433 pin_to_str(swizzled_pin
+ 1), parent_bus
,
1434 PCI_SLOT(parent_devfn
), PCI_FUNC(parent_devfn
));
1436 /* Continue until we find the root bus */
1437 if (parent_bus
> 0) {
1439 * We will go on to the next parent so this parent
1446 * Found the root bridge device,
1447 * fill in the structure and exit
1449 *parent_bridge
= parent
;
1454 /* End with PIN A = 1 ... D = 4 */
1455 return swizzled_pin
+ 1;
1459 * Given a device structure 'dev', find its interrupt pin
1460 * and its parent bridge 'parent_bdg' device structure.
1461 * If it is behind a bridge, it will return the interrupt
1462 * pin number (1 - 4) of the parent bridge that the device
1463 * interrupt pin has been swizzled to, otherwise it will
1464 * return the interrupt pin that is programmed into the
1465 * PCI config space of the target device. If 'dev' is
1466 * behind a bridge, it will fill in 'parent_bdg' with the
1467 * device structure of the bridge it is behind, otherwise
1468 * it will copy 'dev' into 'parent_bdg'.
1470 * @param dev A PCI device structure to get interrupt pins for.
1471 * @param *parent_bdg The PCI device structure for the bridge
1472 * device 'dev' is attached to.
1473 * @return The interrupt pin number (1 - 4) that 'dev' will
1474 * trigger when generating an interrupt.
1475 * Errors: -1 is returned if the device is not enabled
1476 * -2 is returned if a parent bridge could not be found.
1478 int get_pci_irq_pins(struct device
*dev
, struct device
**parent_bdg
)
1480 uint8_t bus
= 0; /* The bus this device is on */
1481 uint16_t devfn
= 0; /* This device's device and function numbers */
1482 uint8_t int_pin
= 0; /* Interrupt pin used by the device */
1483 uint8_t target_pin
= 0; /* Interrupt pin we want to assign an IRQ to */
1485 /* Make sure this device is enabled */
1486 if (!(dev
->enabled
&& (dev
->path
.type
== DEVICE_PATH_PCI
)))
1489 bus
= dev
->bus
->secondary
;
1490 devfn
= dev
->path
.pci
.devfn
;
1492 /* Get and validate the interrupt pin used. Only 1-4 are allowed */
1493 int_pin
= pci_read_config8(dev
, PCI_INTERRUPT_PIN
);
1494 if (int_pin
< 1 || int_pin
> 4)
1497 printk(BIOS_SPEW
, "PCI IRQ: Found device %01X:%02X.%02X using %s\n",
1498 bus
, PCI_SLOT(devfn
), PCI_FUNC(devfn
), pin_to_str(int_pin
));
1500 /* If this device is on a bridge, swizzle its INT_PIN */
1502 /* Swizzle its INT_PINs */
1503 target_pin
= swizzle_irq_pins(dev
, parent_bdg
);
1505 /* Make sure the swizzle returned valid structures */
1506 if (parent_bdg
== NULL
) {
1507 printk(BIOS_WARNING
,
1508 "Warning: Could not find parent bridge for this device!\n");
1511 } else { /* Device is not behind a bridge */
1512 target_pin
= int_pin
; /* Return its own interrupt pin */
1513 *parent_bdg
= dev
; /* Return its own structure */
1516 /* Target pin is the interrupt pin we want to assign an IRQ to */
1520 #if CONFIG(PC80_SYSTEM)
1522 * Assign IRQ numbers.
1524 * This function assigns IRQs for all functions contained within the indicated
1525 * device address. If the device does not exist or does not require interrupts
1526 * then this function has no effect.
1528 * This function should be called for each PCI slot in your system.
1530 * @param dev Pointer to dev structure.
1531 * @param pIntAtoD An array of IRQ #s that are assigned to PINTA through PINTD
1532 * of this slot. The particular IRQ #s that are passed in depend on the
1533 * routing inside your southbridge and on your board.
1535 void pci_assign_irqs(struct device
*dev
, const unsigned char pIntAtoD
[4])
1539 /* Each device may contain up to eight functions. */
1540 slot
= dev
->path
.pci
.devfn
>> 3;
1542 for (; dev
; dev
= dev
->sibling
) {
1544 if (dev
->path
.pci
.devfn
>> 3 != slot
)
1547 line
= pci_read_config8(dev
, PCI_INTERRUPT_PIN
);
1549 /* PCI spec says all values except 1..4 are reserved. */
1550 if ((line
< 1) || (line
> 4))
1553 irq
= pIntAtoD
[line
- 1];
1555 printk(BIOS_DEBUG
, "Assigning IRQ %d to %s\n", irq
, dev_path(dev
));
1557 pci_write_config8(dev
, PCI_INTERRUPT_LINE
, pIntAtoD
[line
- 1]);
1559 #ifdef PARANOID_IRQ_ASSIGNMENTS
1560 irq
= pci_read_config8(pdev
, PCI_INTERRUPT_LINE
);
1561 printk(BIOS_DEBUG
, " Readback = %d\n", irq
);
1564 #if CONFIG(PC80_SYSTEM)
1565 /* Change to level triggered. */
1566 i8259_configure_irq_trigger(pIntAtoD
[line
- 1],
1567 IRQ_LEVEL_TRIGGERED
);