#
267654 |
|
19-Jun-2014 |
gjb |
Copy stable/9 to releng/9.3 as part of the 9.3-RELEASE cycle.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
234150 |
|
11-Apr-2012 |
jhb |
MFC 233676: Use a more proper fix for enabling HT MSI mapping windows on Host-PCI bridges. Rather than blindly enabling the windows on all of them, only enable the window when an MSI interrupt is enabled for a device behind the bridge, similar to what already happens for HT PCI-PCI bridges.
|
#
229093 |
|
31-Dec-2011 |
hselasky |
MFC r226173, r227843, r227848 and r227908: Use DEVMETHOD_END to mark end of device methods. Remove superfluous device methods. Add some missing __FBSBID() macros.
|
#
225736 |
|
22-Sep-2011 |
kensmith |
Copy head to stable/9 as part of 9.0-RELEASE release cycle.
Approved by: re (implicit)
|
#
223440 |
|
22-Jun-2011 |
jhb |
Move {amd64,i386}/pci/pci_bus.c and {amd64,i386}/include/pci_cfgreg.h to the x86 tree. The $PIR code is still only enabled on i386 and not amd64. While here, make the qpi(4) driver on conditional on 'device pci'.
|
#
223428 |
|
22-Jun-2011 |
jhb |
Use uintXX_t instead of u_intXX_t.
|
#
223424 |
|
22-Jun-2011 |
jhb |
Add a helper routine to conditionally modify the start address of a resource allocation from an x86 Host-PCI bridge driver so that it can be reused by the ACPI Host-PCI bridge driver (and eventually the MPTable Host-PCI bridge driver) instead of duplicating the same logic. Note that this means that hw.acpi.host_mem_start is now replaced with the hw.pci.host_mem_start tunable that was already used in the non-ACPI case. This also removes hw.acpi.host_mem_start on ia64 where it was not applicable (the implementation was very x86-specific).
While here, adjust the logic to apply the new start address on any "wildcard" allocation even if that allocation comes from a subset of the allowable address range.
Reviewed by: imp (1)
|
#
221393 |
|
03-May-2011 |
jhb |
Reimplement how PCI-PCI bridges manage their I/O windows. Previously the driver would verify that requests for child devices were confined to any existing I/O windows, but the driver relied on the firmware to initialize the windows and would never grow the windows for new requests. Now the driver actively manages the I/O windows.
This is implemented by allocating a bus resource for each I/O window from the parent PCI bus and suballocating that resource to child devices. The suballocations are managed by creating an rman for each I/O window. The suballocated resources are mapped by passing the bus_activate_resource() call up to the parent PCI bus. Windows are grown when needed by using bus_adjust_resource() to adjust the resource allocated from the parent PCI bus. If the adjust request succeeds, the window is adjusted and the suballocation request for the child device is retried.
When growing a window, the rman_first_free_region() and rman_last_free_region() routines are used to determine if the front or end of the existing I/O window is free. From using that, the smallest ranges that need to be added to either the front or back of the window are computed. The driver will first try to grow the window in whichever direction requires the smallest growth first followed by the other direction if that fails.
Subtractive bridges will first attempt to satisfy requests for child resources from I/O windows (including attempts to grow the windows). If that fails, the request is passed up to the parent PCI bus directly however.
The PCI-PCI bridge driver will try to use firmware-assigned ranges for child BARs first and only allocate a "fresh" range if that specific range cannot be accommodated in the I/O window. This allows systems where the firmware assigns resources during boot but later wipes the I/O windows (some ACPI BIOSen are known to do this) to "rediscover" the original I/O window ranges.
The ACPI Host-PCI bridge driver has been adjusted to correctly honor hw.acpi.host_mem_start and the I/O port equivalent when a PCI-PCI bridge makes a wildcard request for an I/O window range.
The new PCI-PCI bridge driver is only enabled if the NEW_PCIB kernel option is enabled. This is a transition aide to allow platforms that do not yet support bus_activate_resource() and bus_adjust_resource() in their Host-PCI bridge drivers (and possibly other drivers as needed) to use the old driver for now. Once all platforms support the new driver, the kernel option and old driver will be removed.
PR: kern/143874 kern/149306 Tested by: mav
|
#
221324 |
|
02-May-2011 |
jhb |
Add implementations of BUS_ADJUST_RESOURCE() to the PCI bus driver, generic PCI-PCI bridge driver, x86 nexus driver, and x86 Host to PCI bridge drivers.
|
#
215820 |
|
25-Nov-2010 |
jhb |
Add device IDs for two more ServerWorks Host-PCI bridges so that we can read their starting PCI bus number for older systems that do not support ACPI (or have a broken _BBN method).
PR: kern/148108 MFC after: 1 week
|
#
210868 |
|
05-Aug-2010 |
jhb |
Change the MPTable and $PIR PCI-PCI bridge drivers to inherit from the generic PCI-PCI bridge driver and only override specific methods. This should fix suspend/resume of PCI-PCI bridges using these drivers.
|
#
195666 |
|
13-Jul-2009 |
jkim |
Match PCI Express root bridge _HID directly instead of relying on _CID.
Reviewed by: jhb Approved by: re (kib)
|
#
194018 |
|
11-Jun-2009 |
avg |
strict kobj signatures: fix legacy i386 pcib_write_config impl
Reviewed by: imp, current@ Approved by: jhb (mentor)
|
#
172394 |
|
30-Sep-2007 |
marius |
Make the PCI code aware of PCI domains (aka PCI segments) so we can support machines having multiple independently numbered PCI domains and don't support reenumeration without ambiguity amongst the devices as seen by the OS and represented by PCI location strings. This includes introducing a function pci_find_dbsf(9) which works like pci_find_bsf(9) but additionally takes a domain number argument and limiting pci_find_bsf(9) to only search devices in domain 0 (the only domain in single-domain systems). Bge(4) and ofw_pcibus(4) are changed to use pci_find_dbsf(9) instead of pci_find_bsf(9) in order to no longer report false positives when searching for siblings and dupe devices in the same domain respectively. Along with this change the sole host-PCI bridge driver converted to actually make use of PCI domain support is uninorth(4), the others continue to use domain 0 only for now and need to be converted as appropriate later on. Note that this means that the format of the location strings as used by pciconf(8) has been changed and that consumers of <sys/pciio.h> potentially need to be recompiled.
Suggested by: jhb Reviewed by: grehan, jhb, marcel Approved by: re (kensmith), jhb (PCI maintainer hat)
|
#
169221 |
|
02-May-2007 |
jhb |
Revamp the MSI/MSI-X code a bit to achieve two main goals: - Simplify the amount of work that has be done for each architecture by pushing more of the truly MI code down into the PCI bus driver. - Don't bind MSI-X indicies to IRQs so that we can allow a driver to map multiple MSI-X messages into a single IRQ when handling a message shortage.
The changes include: - Add a new pcib_if method: PCIB_MAP_MSI() which is called by the PCI bus to calculate the address and data values for a given MSI/MSI-X IRQ. The x86 nexus drivers map this into a call to a new 'msi_map()' function in msi.c that does the mapping. - Retire the pcib_if method PCIB_REMAP_MSIX() and remove the 'index' parameter from PCIB_ALLOC_MSIX(). MD code no longer has any knowledge of the MSI-X index for a given MSI-X IRQ. - The PCI bus driver now stores more MSI-X state in a child's ivars. Specifically, it now stores an array of IRQs (called "message vectors" in the code) that have associated address and data values, and a small virtual version of the MSI-X table that specifies the message vector that a given MSI-X table entry uses. Sparse mappings are permitted in the virtual table. - The PCI bus driver now configures the MSI and MSI-X address/data registers directly via custom bus_setup_intr() and bus_teardown_intr() methods. pci_setup_intr() invokes PCIB_MAP_MSI() to determine the address and data values for a given message as needed. The MD code no longer has to call back down into the PCI bus code to set these values from the nexus' bus_setup_intr() handler. - The PCI bus code provides a callout (pci_remap_msi_irq()) that the MD code can call to force the PCI bus to re-invoke PCIB_MAP_MSI() to get new values of the address and data fields for a given IRQ. The x86 MSI code uses this when an MSI IRQ is moved to a different CPU, requiring a new value of the 'address' field. - The x86 MSI psuedo-driver loses a lot of code, and in fact the separate MSI/MSI-X pseudo-PICs are collapsed down into a single MSI PIC driver since the only remaining diff between the two is a substring in a bootverbose printf. - The PCI bus driver will now restore MSI-X state (including programming entries in the MSI-X table) on device resume. - The interface for pci_remap_msix() has changed. Instead of accepting indices for the allocated vectors, it accepts a mini-virtual table (with a new length parameter). This table is an array of u_ints, where each value specifies which allocated message vector to use for the corresponding MSI-X message. A vector of 0 forces a message to not have an associated IRQ. The device may choose to only use some of the IRQs assigned, in which case the unused IRQs must be at the "end" and will be released back to the system. This allows a driver to use the same remap table for different shortage values. For example, if a driver wants 4 messages, it can use the same remap table (which only uses the first two messages) for the cases when it only gets 2 or 3 messages and in the latter case the PCI bus will release the 3rd IRQ back to the system.
MFC after: 1 month
|
#
166176 |
|
22-Jan-2007 |
jhb |
Expand the MSI/MSI-X API to address some deficiencies in the MSI-X support. - First off, device drivers really do need to know if they are allocating MSI or MSI-X messages. MSI requires allocating powerof2() messages for example where MSI-X does not. To address this, split out the MSI-X support from pci_msi_count() and pci_alloc_msi() into new driver-visible functions pci_msix_count() and pci_alloc_msix(). As a result, pci_msi_count() now just returns a count of the max supported MSI messages for the device, and pci_alloc_msi() only tries to allocate MSI messages. To get a count of the max supported MSI-X messages, use pci_msix_count(). To allocate MSI-X messages, use pci_alloc_msix(). pci_release_msi() still handles both MSI and MSI-X messages, however. As a result of this change, drivers using the existing API will only use MSI messages and will no longer try to use MSI-X messages. - Because MSI-X allows for each message to have its own data and address values (and thus does not require all of the messages to have their MD vectors allocated as a group), some devices allow for "sparse" use of MSI-X message slots. For example, if a device supports 8 messages but the OS is only able to allocate 2 messages, the device may make the best use of 2 IRQs if it enables the messages at slots 1 and 4 rather than default of using the first N slots (or indicies) at 1 and 2. To support this, add a new pci_remap_msix() function that a driver may call after a successful pci_alloc_msix() (but before allocating any of the SYS_RES_IRQ resources) to allow the allocated IRQ resources to be assigned to different message indices. For example, from the earlier example, after pci_alloc_msix() returned a value of 2, the driver would call pci_remap_msix() passing in array of integers { 1, 4 } as the new message indices to use. The rid's for the SYS_RES_IRQ resources will always match the message indices. Thus, after the call to pci_remap_msix() the driver would be able to access the first message in slot 1 at SYS_RES_IRQ rid 1, and the second message at slot 4 at SYS_RES_IRQ rid 4. Note that the message slots/indices are 1-based rather than 0-based so that they will always correspond to the rid values (SYS_RES_IRQ rid 0 is reserved for the legacy INTx interrupt). To support this API, a new PCIB_REMAP_MSIX() method was added to the pcib interface to change the message index for a single IRQ.
Tested by: scottl
|
#
165128 |
|
12-Dec-2006 |
jhb |
Give Host-PCI bridge drivers their own pcib_alloc_msi() and pcib_alloc_msix() methods instead of using the method from the generic PCI-PCI bridge driver as the PCI-PCI methods will be gaining some PCI-PCI specific logic soon.
|
#
164265 |
|
13-Nov-2006 |
jhb |
MD support for PCI Message Signalled Interrupts on amd64 and i386: - Add a new apic_alloc_vectors() method to the local APIC support code to allocate N contiguous IDT vectors (aligned on a M >= N boundary). This function is used to allocate IDT vectors for a group of MSI messages. - Add MSI and MSI-X PICs. The PIC code here provides methods to manage edge-triggered MSI messages as x86 interrupt sources. In addition to the PIC methods, msi.c also includes methods to allocate and release MSI and MSI-X messages. For x86, we allow for up to 128 different MSI IRQs starting at IRQ 256 (IRQs 0-15 are reserved for ISA IRQs, 16-254 for APIC PCI IRQs, and IRQ 255 is reserved). - Add pcib_(alloc|release)_msi[x]() methods to the MD x86 PCI bridge drivers to bubble the request up to the nexus driver. - Add pcib_(alloc|release)_msi[x]() methods to the x86 nexus drivers that ask the MSI PIC code to allocate resources and IDT vectors.
MFC after: 2 months
|
#
154079 |
|
06-Jan-2006 |
jhb |
- Make pcib_devclass private to sys/dev/pci/pci_pci.c and change all the various pcib drivers to use their own private devclass_t variables for their modules. - Use the DEFINE_CLASS_0() macro to declare drivers for the various pcib drivers while I'm here.
|
#
153570 |
|
20-Dec-2005 |
jhb |
Move the hostb driver out of the i386 and amd64 PCI code (where it was duplicated anyways) and into a single MI driver. Extend the driver a bit to implement the bus and PCI kobj interfaces such that other drivers can attach to it and transparently act as if their parent device is the PCI bus (for the most part).
|
#
150264 |
|
17-Sep-2005 |
imp |
Expose legacy_pcib_alloc_resource, and use it in the mptable pci bus implementation, like other routines in the legacy bus.
This should fix problems with resource allocation on MP systems without ACPI enabled.
|
#
150203 |
|
16-Sep-2005 |
imp |
Commit a workaround to a problem with resource allocation. This helps with some Dell servers that booted w/o a problem[*] on 5.4, but failed with 6.0-BETA.
On the PCI bus, when we do lazy resource allocation, we narrow the range requested as we pass through bridges to reflect how the bridges are programmed and what addresses they pass. However, when we're doing an allocation on a bus that's directly connected to a host bridge, no such translation can take place. We already had a fallback range for memory requests, but none for ioports. As such, provide a fallback for I/O ports so we don't allocate location 0, which will have undesired side effects when the resources are actually used.
This fixes a problem with booting a Dell server with usb in the kernel. However, it is an unsatisfying solution. I don't like the hard coded value, and I think we should start narrowing the resources returned to not be in the so-called isa alias area (where the ranage & 0x0300 must be 0 iirc). Doing such filtering will have to wait for another day.
This may be a good 6 candidate, maybe after its had a chance to be refined.
Tested by: glebius@
|
#
144110 |
|
25-Mar-2005 |
jhb |
Add code to read the primary PCI bus number out of the Compaq/HP 6010 hotplug Host to PCI bridge. This is only needed for the non-ACPI case as the BIOS includes a proper _BBN method in ACPI.
|
#
139790 |
|
06-Jan-2005 |
imp |
/* -> /*- for copyright notices, minor format tweaks as necessary
|
#
137099 |
|
31-Oct-2004 |
des |
Add TUNABLE_LONG and TUNABLE_ULONG, and use the latter for the hw.pci.host_mem_start tunable. Add comments to TUNABLE_INT and TUNABLE_QUAD recommending against their use.
MFC after: 3 weeks
|
#
137098 |
|
31-Oct-2004 |
des |
Whitespace cleanup
|
#
136397 |
|
11-Oct-2004 |
imp |
Make the lower range of the memory area 0x80000000 again. Also introduce hw.{pci,acpi}.host_mem_start tunable to change this.
MFC: ASAP
|
#
136194 |
|
06-Oct-2004 |
imp |
Add missing 'static'
|
#
136188 |
|
06-Oct-2004 |
imp |
For legacy PCI bridges, limit memory allocation to the top 32MB of RAM. Many older, legacy bridges only allow allocation from this range. This only appies to devices who don't have their memory assigned by the BIOS (since we allocate the ranges so assigned exactly), so should have minimal impact.
Hoewver, for CardBus bridges (cbb), they rarely get the resources allocated by the BIOS, and this patch helps them greatly. Typically the 'bad Vcc' messages are caused by this problem.
|
#
129962 |
|
01-Jun-2004 |
jhb |
Allow the pir0 device add to fail since pir0 may already exist. This should fix the panics in device_set_ivars() that people were seeing on boxes with multiple Host-PCI bridges but not using ACPI.
|
#
129876 |
|
30-May-2004 |
phk |
Add some missing <sys/module.h> includes which are masked by the one on death-row in <sys/kernel.h>
|
#
128933 |
|
04-May-2004 |
jhb |
- Create a pir0 psuedo device as a child of legacy0 if we attach a legacy host-PCI bridge device and find a valid $PIR. - Make pci_pir_parse() private to pci_pir.c and have pir0's attach routine call it instead of having legacy_pcib_attach() call it. - Implement suspend/resume support for the $PIR by giving pir0 a resume method that calls the BIOS to reroute each link that was already routed before the machine was suspended. - Dump the state of the routed flag in the links display code. - If a link's IRQ is set by a tunable, then force that link to be re-routed the first time it is used. - Move the 'Found $PIR' message under bootverbose as the pir0 description line lists the number of entries already. The pir0 line also only shows up if we are actually using the $PIR which is a bonus. - Use BUS_CONFIG_INTR() to ensure that any IRQs used by a PCI link are set to level/low trigger/polarity.
|
#
128874 |
|
03-May-2004 |
jhb |
Make the legacy_pcib_attach() function static.
|
#
126016 |
|
19-Feb-2004 |
jhb |
Add back an include to fix the build for the CPU_ELAN case.
|
#
125981 |
|
18-Feb-2004 |
jhb |
Switch to using the new $PIR interrupt routing code and remove the old code. The pci_cfgreg.c file now just controls reading/writing PCI config registers.
|
#
121822 |
|
31-Oct-2003 |
jhb |
Lower the priority of the legacy host to pci bridge driver so that other non-ACPI host-bridge drivers can preempt this driver.
|
#
119539 |
|
28-Aug-2003 |
jhb |
- Rename PCIx_HEADERTYPE* to PCIx_HDRTYPE* so the constants aren't so long. - Add a new PCIM_HDRTYPE constant for the field in PCIR_HDRTYPE that holds the header type. - Replace several magic numbers with appropriate constants for the header type register and a couple of PCI_FUNCMAX. - Merge to amd64 the fix to the i386 bridge code to skip devices with unknown header types.
Requested by: imp (1, 2)
|
#
119288 |
|
22-Aug-2003 |
imp |
Prefer new location of pci include files (which have only been in the tree for two or more years now), except in a few places where there's code to be compatible with older versions of FreeBSD.
|
#
118328 |
|
01-Aug-2003 |
imp |
The MI code was modified to filter the devices based on its header type. We know about header types 0, 1 and 2. Ignore the rest in the MD i386 code when we're looking for bridges. You cannot look at the vendor tag. And if you don't you certainly can't look at function > 0 if the device isn't there.
The new soekris boards' GEODE cpu has issues with the old way. This is reported to have fixed it.
MFC After: 2 days
|
#
115908 |
|
06-Jun-2003 |
jhb |
- Rename nexus_pcib to legacy_pcib. I've been meaning to do this for a while after the legacy device was added since this driver hangs from legacy and not nexus. - Make several methods non-static so they can be reused in a mptable host -> pci bridge driver that will be added at a later date. - Let legacy_pcib() use pcibios_pcib_route_interrupt() directly instead of wrapping it in a private function. Originally, I thought I was going to have the nexus_pcib() driver make a runtime APIC vs. 8259A check and call the appropriate routing method (MPTable vs. PIR) that way, but it ended up being cleaner to make nexus_pcib() just work with PIR and have a separate host -> pci bridge driver for the mptable/apic case.
|
#
115906 |
|
06-Jun-2003 |
jhb |
Use the secondary bus number instead of the number of the bus the PCI-PCI bridge lives on (i.e., the parent bus) when probing the PIR table for a bus. This could cause the PCIBIOS PCI-PCI bridge driver to bogusly attach to bridges that weren't in the PIR but whose parent bus was in the PIR.
|
#
115706 |
|
02-Jun-2003 |
obrien |
Use __FBSDID().
|
#
115492 |
|
31-May-2003 |
phk |
Remove unused variable.
Found by: FlexeLint
|
#
111068 |
|
18-Feb-2003 |
peter |
Initiate de-orbit burn for USE_PCI_BIOS_FOR_READ_WRITE. This has been #if'ed out for a while. Complete the deed and tidy up some other bits.
We need to be able to call this stuff from outer edges of interrupt handlers for devices that have the ISR bits in pci config space. Making the bios code mpsafe was just too hairy. We had also stubbed it out some time ago due to there simply being too much brokenness in too many systems. This adds a leaf lock so that it is safe to use pci_read_config() and pci_write_config() from interrupt handlers. We still will use pcibios to do interrupt routing if there is no acpi.. [yes, I tested this]
Briefly glanced at by: imp
|
#
108239 |
|
23-Dec-2002 |
phk |
Outdent the string rather than use concatenation.
|
#
106878 |
|
13-Nov-2002 |
peter |
Recognize the Serverworks CIOB30 host to pci bridge.
|
#
105535 |
|
20-Oct-2002 |
phk |
Revert last commit, there actually was a -1 waaaaay down in pcireg_cfgread().
|
#
105533 |
|
20-Oct-2002 |
phk |
"id" is never going to be -1 when it is unsigned.
Spotted by: FlexeLint
|
#
105287 |
|
16-Oct-2002 |
jhb |
Use the global pcib devclass instead of our own static copy.
|
#
104381 |
|
02-Oct-2002 |
iwasaki |
Add 2 Ids for new ServerWorks host to PCI bridge chipset. These are still unknown name but these are working as well as the other ServerWorks chipset. Description strings should be corrected when the chipsets are known.
MFC after: 1 week
|
#
103869 |
|
23-Sep-2002 |
jhb |
Now that we only probe host-PCI bridges once, we no longer have to check to see if we have been probed before by checking for a pciX bus device.
|
#
103863 |
|
23-Sep-2002 |
jhb |
Change the nexus_pcib driver (eventually to be renamed to legacy_pcib) to hang off of the legacy driver instead of the nexus.
|
#
103122 |
|
09-Sep-2002 |
phk |
#include "opt_bla.h" goes first says Bruce.
|
#
103102 |
|
08-Sep-2002 |
phk |
Fix style(9) bugs.
Brucified by: bde
|
#
103044 |
|
06-Sep-2002 |
jhb |
Add a subclass of the PCI-PCI bridge driver that uses the PCIBIOS to route interrupts if the child bus is described in the PCIBIOS interrupt routing table. For child busses that are in the routing table, they do not necessarily use a 'swizzle' on their pins on the parent bus to route interrupts for child devices. If the child bus is an embedded device then the pins on the child devices can be (and usually are) directly connected either to a PIC or to a Interrupt Router. This fixes PCIBIOS interrupt routing across PCI-PCI bridges for embedded devices.
|
#
103025 |
|
06-Sep-2002 |
jhb |
- Add a pci_cfgintr_valid() function to see if a given IRQ is a valid IRQ for an entry in a PCIBIOS interrupt routing ($PIR) table. - Change pci_cfgintr() to except the current IRQ of a device as a fourth argument and to use that IRQ for the device if it is valid. - If an intpin entry in a $PIR entry has a link of 0, it means that that intpin isn't connected to anything that can trigger an interrupt. Thus, test the link against 0 to find invalid entries in the table instead of implicitly relying on the irqs field to be zero. In the machines I have looked at, intpin entries with a link of 0 often have the bits for all possible interrupts for PCI devices set.
|
#
103016 |
|
06-Sep-2002 |
jhb |
Prefer the physical bus number of the PCI bus as the unit of the pciX device created.
|
#
102934 |
|
04-Sep-2002 |
phk |
Change the support for AMDs ElanSC520 CPU from being a device driver to be options CPU_ELAN (NB: Soekris.com users!)
It is cleaner this way. We still recognize the cpu on the host-pci bridge.
|
#
101235 |
|
02-Aug-2002 |
phk |
Move a prototype to the least wrong place.
Suggested by: bde
|
#
100374 |
|
19-Jul-2002 |
gallatin |
Add support for probing secondary buses on the ServerWorks Grand Champion chipset used for P4-Xeon machines
PR: kern/38894 Tested-by: "Marc G. Fournier" <scrappy@hub.org> Submitted-by: Mark Tinguely (partially)
|
#
100321 |
|
18-Jul-2002 |
phk |
Add initialization code for the AMD Elan sc520 which maps the MMCR into KVM and sets the i8254 frequency to the correct value.
|
#
100310 |
|
18-Jul-2002 |
phk |
Add an entry for the AMD Elan SC520 hostbridge. I do not belive we can identify this gadget on the CPUID result alone, so I intend to activate the necessary magic (i8254 frequency for instance) for it based on the precense of the on-chip host to PCI bridge.
|
#
95374 |
|
24-Apr-2002 |
imp |
Fix a PNPID in a comment
Submitted by: David Xu
|
#
93023 |
|
23-Mar-2002 |
nsouch |
Major rework of the iicbus/smbus framework:
- VIA chipset SMBus controllers added - alpm driver updated - Support for dynamic modules added - bktr FreeBSD smbus updated but not tested - cleanup
|
#
87603 |
|
10-Dec-2001 |
murray |
Add identification string for AMD-761 host to PCI bridge.
PR: kern/32255
|
#
82026 |
|
21-Aug-2001 |
peter |
Detect a certain type of PCIBIOS brain damage. For some reason, some bios vendors took it apon themselves to "censor" the host->pci bridges from PCIBIOS callers, even when the caller explicitly asks for them. This includes certain Compaq machines (eg: DL360) and some laptops.
If we detect this, shut down pcibios and revert to using IO port bashing.
Under -current, apcica does a better job anyway.
|
#
69783 |
|
08-Dec-2000 |
msmith |
Next phase in the PCI subsystem cleanup.
- Move PCI core code to dev/pci. - Split bridge code out into separate modules. - Remove the descriptive strings from the bridge drivers. If you want to know what a device is, use pciconf. Add support for broadly identifying devices based on class/subclass, and for parsing a preloaded device identification database so that if you want to waste the memory, you can identify *anything* we know about. - Remove machine-dependant code from the core PCI code. APIC interrupt mapping is performed by shadowing the intline register in machine- dependant code. - Bring interrupt routing support to the Alpha (although many platforms don't yet support routing or mapping interrupts entirely correctly). This resulted in spamming <sys/bus.h> into more places than it really should have gone. - Put sys/dev on the kernel/modules include path. This avoids having to change *all* the pci*.h includes.
|
#
68485 |
|
08-Nov-2000 |
msmith |
Hack to work around a probe which will lock up at least some i450GX-based systems.
From the PR:
When 'probe.slot' is PCI_SLOTMAX (== 31) and 'probe.func' is 7, call to 'pci_cfgread()' here and machine suddenly hangs up. I don't know why... (or 450GX chipset's bug?)
PR: i386/20379 Submitted by: Masayuki FUKUI <fukui@sonic.nm.fujitsu.co.jp>
|
#
67378 |
|
20-Oct-2000 |
ache |
Return -10000 in pci_hostb_probe to allow agp driver (disabled otherwise)
|
#
67377 |
|
20-Oct-2000 |
ache |
Add i815 Host to Hub
|
#
67185 |
|
16-Oct-2000 |
imp |
Add the ability to use the $PIR table in the BIOS to route interrupts on demand.
Submitted by: msmith
|
#
67126 |
|
14-Oct-2000 |
alc |
Change the text for the ServerWorks north bridge chips. RCC is now officially listed as ServerWorks by www.pcisig.com.
|
#
66985 |
|
11-Oct-2000 |
msmith |
When testing for PCI bus overlap with another enumerator, make sure we check for the right bus number. This is still not quite right, but fixes things for multi-bus machines again.
Submitted by: tegge
|
#
66843 |
|
08-Oct-2000 |
msmith |
Only attach "legacy" PCI busses if none have been attached via any other method.
|
#
66529 |
|
02-Oct-2000 |
msmith |
Move the i386 PCI attachment code out of i386/isa back into i386/pci.
Split out the configuration space access primitives, as these are needed elsewhere as well.
|
#
66416 |
|
27-Sep-2000 |
peter |
Get out the roto-rooter and clean up the abuse of nexus ivars by the i386/isa/pcibus.c. This gets -current running again on multiple host->pci machines after the most recent nexus commits. I had discussed this with Mike Smith, but ended up doing it slightly differently to what we discussed as it turned out cleaner this way. Mike was suggesting creating a new resource (SYS_RES_PCIBUS) or something and using *_[gs]et_resource(), but IMHO that wasn't ideal as SYS_RES_* is meant to be a global platform property, not a quirk of a given implementation. This does use the ivar methods but does so properly. It also now prints the physical pci bus that a host->pci bridge (pcib) corresponds to.
|
#
65459 |
|
04-Sep-2000 |
peter |
Catch a few more bogosities in certain chipsets before they mess us up. Some have dual host->PCI bridges for the same logical pci bus (!), eg: some of the RCC chipsets. This is a 32/64 bit 33/66MHz and dual pci voltage motherboard so persumably there are electical or signalling differences but they are otherwise the same logical bus. The new PCI probe code however was getting somewhat upset about it and ended up creating two pci bridges to the same logical bus, which caused devices on that logical bus to appear and be probed twice.
The ACPI data on this box correctly identifies this stuff, so bring on ACPI! :-)
|
#
65304 |
|
31-Aug-2000 |
peter |
Take a shot at fixing multiple pci busses on i386. pcib_set_bus() cannot be used on the new child because it is meant to be used on the *pci* device (it looks at the parent internally) not the pcib being added. Bite the bullet and use ivars for the bus number to avoid any doubts about whether the softc is consistant between probe and attach. This should not break the Alpha code.
|
#
65176 |
|
28-Aug-2000 |
dfr |
* Completely rewrite the alpha busspace to hide the implementation from the drivers. * Remove legacy inx/outx support from chipset and replace with macros which call busspace. * Rework pci config accesses to route through the pcib device instead of calling a MD function directly.
With these changes it is possible to cleanly support machines which have more than one independantly numbered PCI busses. As a bonus, the new busspace implementation should be measurably faster than the old one.
|
#
61994 |
|
23-Jun-2000 |
msmith |
Add PnP probe methods to some common AT hardware drivers. In each case, the PnP probe is merely a stub as we make assumptions about some of this hardware before we have probed it.
Since these devices (with the exception of the speaker) are 'standard', suppress output in the !bootverbose case to clean up the probe messages somewhat.
|
#
60862 |
|
24-May-2000 |
kuriyama |
Add OPTi 82C700 chipset.
Submitted by: sanpei@sanpei.org PR: kern/18155 (part of)
|
#
60847 |
|
24-May-2000 |
kuriyama |
Add 440MX chipset.
Submitted by: YOSHIMURA Hideaki <hideakiy@cs-tokyo01.chuosystem.co.jp> References: [bsd-nomads:13764]
|
#
59978 |
|
04-May-2000 |
msmith |
Don't assume that the PCI BIOS is going to clear the unused bits in %ecx when it returns.
|
#
59294 |
|
16-Apr-2000 |
msmith |
Some more i386-only BIOS-friendliness:
- Add support for using the PCI BIOS functions for configuration space accesses, and make this the default.
- Make PNPBIOS the default (obsoletes the PNPBIOS config option).
- Add two new boot-time tunables to disable each of the above.
|
#
57402 |
|
23-Feb-2000 |
dfr |
Add a workaround to allow us to detect the second pci bus on an HP Netserver LS/2.
Approved by: jkh
|
#
57181 |
|
13-Feb-2000 |
dfr |
Fix an uninitialised variable which affected probing on some machines.
Approved by: jkh Reviewed by: gallatin
|
#
57092 |
|
09-Feb-2000 |
gallatin |
Allow allows peer pci buses which are directly connected to the RCC host pci chipset to be probed & attached on newer Dell PowerEdge servers, such as the 2400 and 4400.
Reviewed by: dfr, msmith, jlemon Tested by: hnokubi@yyy.or.jp (in a previous incantation) Approved by: jkh
|
#
57021 |
|
07-Feb-2000 |
n_hibma |
Add PCI Id's for i810 chipsets.
PR: 16517 Submitted by: SAKIYAMA Nobuo <sakichan@lares.dti.ne.jp> Approved by: jhk
|
#
55590 |
|
08-Jan-2000 |
peter |
Clean up the cfgmech/pci_mechanism debris. The reason for the existance of this is no longer an issue as we have a replacement driver for the one that needed it.
Reviewed by: dfr
|
#
54150 |
|
05-Dec-1999 |
dfr |
Don't use a bogus bus number for Ross host-pci bridges.
PR: kern/15278 Submitted by: Ahmed Benani <ahmed_benani@urbanet.ch>
|
#
54073 |
|
03-Dec-1999 |
mdodd |
Remove the 'ivars' arguement to device_add_child() and device_add_child_ordered(). 'ivars' may now be set using the device_set_ivars() function.
This makes it easier for us to change how arbitrary data structures are associated with a device_t. Eventually we won't be modifying device_t to add additional pointers for ivars, softc data etc.
Despite my best efforts I've probably forgotten something so let me know if this breaks anything. I've been running with this change for months and its been quite involved actually isolating all the changes from the rest of the local changes in my tree.
Reviewed by: peter, dfr
|
#
53363 |
|
18-Nov-1999 |
peter |
If we have found pci devices via pci_cfgopen(), but don't find a host->pci bridge specifically, then add a pcib0 device on the motherboard for the pci bus to hang off.
Requested by: Anders Andersson <anders@sanyusan.se> Obtained from: dfr
|
#
52480 |
|
25-Oct-1999 |
alc |
Add text for the AMD-751 host-to-PCI and PCI-to-PCI (AGP) bridges.
|
#
50477 |
|
27-Aug-1999 |
peter |
$Id$ -> $FreeBSD$
|
#
50182 |
|
22-Aug-1999 |
peter |
Make the identify routine add itself with priority 100 to make sure it goes after the npx/apm devices and any other motherboard devices that may get added down the track.
|
#
49601 |
|
10-Aug-1999 |
peter |
Hopefully fix the previous commit, it caused *all* bridges to be detected as PCI->HOST bridges on my (440BX) box.
My change is to remove the test at the beginning entirely, letting the switch on the device ID happen first. If the device ID is unknown, then (in the default case) check for the generic PCIS_BRIDGE_HOST tag. This should allow wierd cases (eg: wpaul's IMS VL bridge) to work by using the id override. This strategy is more in line with the other PCI match methods we use elsewhere,
I only have a limited testbed, but having my USB etc devices detected as PCI->HOST bridges doesn't look good.
|
#
49580 |
|
09-Aug-1999 |
wpaul |
Fix nexus_pcib_is_host_bridge() so that it detects my 486's PCI bus correctly. It has the following code:
if (class != PCIC_BRIDGE || subclass != PCIS_BRIDGE_HOST) return NULL;
My 486 has an Integrated Micro Solutions PCI bridge which identifies itself as subclass PCIS_BRIDGE_OTHER, not PCIS_BRIDGE_HOST. Consequently, it gets ignored. In my opinion, the correct test should be:
if ((class != PCIC_BRIDGE) && (subclass != PCIS_BRIDGE_HOST)) return NULL;
That way the test still succeeds because the chip's class is PCIC_BRIDGE. Clearly it's not reasonable to expect all host to PCI bridges to always have a subclass of PCIS_BRIDGE_HOST since I've got one that doesn't. This way the sanity test should remain relatively sane while still allowing some oddball yet correct hardware to work. If somebody has a better way to do it, go ahead and tweak the test, but be aware that class == PCIC_BRIDGE and subclass == PCIS_BRIDGE_OTHER is a valid case.
While I was here, I also added an explicit ID string for the IMS chipset. I also dealt with a minor style nit: it's bad karma not to have a default case for your switch statements, but the one in this routine doesn't have one. The default string of "Host to PCI bridge" is now assigned in a default case of the switch statement instead of initializing "s" with the string before the switch and then not having any default case.
|
#
49404 |
|
04-Aug-1999 |
peter |
Don't probe if pci_cfgopen() fails to find pci hardware, like we used to to. This might have caused interesting things on non-PCI hardware if PCI was compiled in.
|
#
48832 |
|
15-Jul-1999 |
msmith |
Add support for multiple PCI busses directly connected to the nexus. This is only partially complete, but allows 450NX-based systems with more than one PCI bus to be used again.
Submitted by: dfr
|
#
47307 |
|
18-May-1999 |
peter |
Move pcibus (host -> pci bus) probe/attach routines from nexus to pcibus.c. pci_cfgopen() becomes static and there are no more bus #ifdef's in nexus.c.
|
#
31893 |
|
20-Dec-1997 |
se |
Make the class code checks in function pci_cfgcheck less strict. It failed to recognize the PCI bus in a system that had only an old chip-set (class code 000000) and a Cyclom multiport serial card on PCI bus 0, but no VGA card or disk or network controller.
PR: i386/5300 Submitted by: Nickolay N. Dudorov <nnd@itfs.nsk.su>
|
#
27555 |
|
20-Jul-1997 |
bde |
Removed unused #includes.
|
#
26174 |
|
26-May-1997 |
se |
Yet another fix for configuration mechanism 1 register accesses: Adjust the data port address by adding the two low order bits of the register number. The address port takes only a word address (i.e. ignores the two low order bits written to it).
|
#
26173 |
|
26-May-1997 |
se |
Fix previous fix: The enable bit is bit 31 (0x8000000) and not bit 15.
|
#
26172 |
|
26-May-1997 |
se |
Set enable bit when writing the configuration address in configuration mode 1. Omission of this bit makes all config register accesses fail in on recent chip sets ...
(The problem was reported and debug output provided by: Steve Passe)
|
#
26159 |
|
26-May-1997 |
se |
Completely replace the PCI bus driver code to make it better reflect reality. There will be a new call interface, but for now the file pci_compat.c (which is to be deleted, after all drivers are converted) provides an emulation of the old PCI bus driver functions. The only change that might be visible to drivers is, that the type pcici_t (which had been meant to be just a handle, whose exact definition should not be relied on), has been converted into a pcicfgregs* .
The Tekram AMD SCSI driver bogusly relied on the definition of pcici_t and has been converted to just call the PCI drivers functions to access configuration space register, instead of inventing its own ...
This code is by no means complete, but assumed to be fully operational, and brings the official code base more in line with my development code.
A new generic device descriptor data type has to be agreed on. The PCI code will then use that data type to provide new functionality:
1) userconfig support 2) "wired" PCI devices 3) conflicts checking against ISA/EISA 4) maps will depend on the command register enable bits 5) PCI to Anything bridges can be defined as devices, and are probed like any "standard" PCI device.
The following features are currently missing, but will be added back, soon:
1) unknown device probe message 2) suppression of "mirrored" devices caused by ancient, broken chip-sets
This code relies on generic shared interrupt support just commited to kern_intr.c (plus the modifications of isa.c and isa_device.h).
|
#
24743 |
|
09-Apr-1997 |
se |
Mask out revision register in consistency test of class register.
|
#
24740 |
|
09-Apr-1997 |
se |
Fix spelling of align and interrupt in comments.
|
#
24739 |
|
09-Apr-1997 |
se |
Fix consistency test to not fail on pre PCI 2.0 motherboards
|
#
23415 |
|
05-Mar-1997 |
se |
improve pcibus_check: Only assume PCI if at least one PCI to anything bridge on bus 0. This fixes problems with EISA-only systems mistakenly being assumed to support PCI.
|
#
22975 |
|
22-Feb-1997 |
peter |
Back out part 1 of the MCFH that changed $Id$ to $FreeBSD$. We are not ready for it yet.
|
#
22005 |
|
25-Jan-1997 |
bde |
Sync with <pci/pcibus.h>. pcibus.c unfortunately still compiled (with only 3 or 4 warnings) when pb_maxirq went away.
|
#
21673 |
|
14-Jan-1997 |
jkh |
Make the long-awaited change from $Id$ to $FreeBSD$
This will make a number of things easier in the future, as well as (finally!) avoiding the Id-smashing problem which has plagued developers for so long.
Boy, I'm glad we're not using sup anymore. This update would have been insane otherwise.
|
#
21438 |
|
08-Jan-1997 |
nate |
Make the code more consistant by using the INTR*MASK macros througout the code.
Reviewed by: bde
[ Bruce suggest removing the macros completely, but I'm not up to that task quite yet. ]
|
#
19269 |
|
30-Oct-1996 |
asami |
More merge and update.
(1) deleted #if 0
pc98/pc98/mse.c
(2) hold per-unit I/O ports in ed_softc
pc98/pc98/if_ed.c pc98/pc98/if_ed98.h
(3) merge more files by segregating changes into headers.
new file (moved from pc98/pc98):
i386/isa/aic_98.h
deleted:
well, it's already in the commit message so I won't repeat the long list here ;)
Submitted by: The FreeBSD(98) Development Team
|
#
16471 |
|
17-Jun-1996 |
bde |
Removed unused #includes of <i386/isa/icu.h> and <i386/isa/icu.h>. icu.h is only used by the icu support modules and by a few drivers that know too much about the icu (most only use it to convert `n' to `IRQn'). isa.h is only used by ioconf.c and by a few drivers that know too much about isa addresses (a few have to, because config is deficient).
|
#
16354 |
|
13-Jun-1996 |
se |
Change CONF1_ENABLE_MSK to 0x7ff00000 in another attempt to decide whether a system could possibly support PCI configuration mechanism 1 (or whether it rather is an EISA only system ...).
|
#
15478 |
|
30-Apr-1996 |
se |
Make pcibus_check() ignore Device/Vendor IDs of all 0.
|
#
15116 |
|
07-Apr-1996 |
bde |
Removed now-unused #includes of <machine/cpu.h>. They were for bootverbose being declared in the wrong place.
|
#
14919 |
|
29-Mar-1996 |
bde |
Count PCI irqs in up to 4 ISAish counters named `pci irqnn' instead of in the clk0 counter.
Reviewed by: s
|
#
12879 |
|
15-Dec-1995 |
bde |
Completed function declarations and/or added prototypes and/or added #includes to get prototypes.
pci now uses a different interrupt handler type for interrupts that it dispatches and the isa interrupt handler type for the interrupts that it handles.
|
#
12724 |
|
10-Dec-1995 |
phk |
Staticize and cleanup.
|
#
11552 |
|
17-Oct-1995 |
se |
Make CONF1_ENABLE_MSK1 even less restriktive: Ignore slot ID ...
|
#
11544 |
|
17-Oct-1995 |
se |
At least the ASUS Triton motherboards don't disable the PCI bus configuration accesses after the BIOS bus scan. The previous revision made the assumption, that every PCI motherboard did ...
Change the test on the initial value of the CONF1_ADDR_PORT register in a way that makes the probe succeed on triton based motherboards, without breaking the EISA motherboard that has some non-PCI register at the same address.
|
#
11524 |
|
15-Oct-1995 |
se |
Go back to separate tests for configuration mechanism 1 and mechanism 2. Require the state of the configuration enable bits to be OFF assuming that the BIOS left them that way, as it should anyway to avoid bad things to happen.
The tests themselves are copied from the previous release, with the exception of CONF1_ENABLE_MSK1 having the LSB set. This bit should be read back as '0', since only DWORD addresses are legal.
|
#
11378 |
|
09-Oct-1995 |
se |
Fix bad typo: CONF1_ENABLE_RES1 was written CONF1_ENABLE_CHK1 ...
|
#
10960 |
|
22-Sep-1995 |
se |
New approach to the PCI bus configuration mechanism probe problem: - try to make sure there is any kind of PCI device - if there is anything at port 0x0cf8, then check for mech. 1 or 2
|
#
10887 |
|
18-Sep-1995 |
se |
Revert most changes of previous commit. Changes relative to 1.12: - Put extra instruction between outl()/inl() sequence to prevent the old value being read back because of the bus capacitance. - Additional check for existence of register at CONF2_ENABLE_PORT.
|
#
10807 |
|
15-Sep-1995 |
se |
Another try to determine the PCI bus configuration mode (and whether there is a PCI bus at all) ...
- Do not expect the chip sets to follow even very clearly expressed requirements of the PCI 2.0 spec. - Do not read back the value just written to an I/O port without making sure that some other data have crossed the bus in between ...
|
#
10735 |
|
14-Sep-1995 |
se |
Improved verification of configuration space accesses working: Scan for devices instead of assuming that device 0 is present on bus 0 of every PCI motherboard.
|
#
10710 |
|
13-Sep-1995 |
se |
Make the PCI host bridge probe code more robust when dealing with chip sets that use configuration mode 1, but still violate the PCI 2.0 specs ... (Required for the Compaq Proliant, for example.)
|
#
9379 |
|
30-Jun-1995 |
se |
The PCI config mechanism 1 test failed for the Intel Aries. Make it less strict ...
Submitted by: NIIMI Satoshi <sa2c@and.or.jp>
|
#
9360 |
|
28-Jun-1995 |
se |
PCI configuration mechanism now determined by a method, that doesn't fail on new hardware (Compaq Prolinea and Compaq Prosignea), and that doesn't erroneously identify old mech. 2 chip sets as using mech. 1. (See section 3.6.4.1.1 of the PCI bus specs rev. 2.0)
|
#
7254 |
|
22-Mar-1995 |
se |
Correct pcibus_setup() to return as soon as one test succeeds.
|
#
7251 |
|
22-Mar-1995 |
se |
Delete PCI PCI bridge simulator code ...
Submitted by: Wolfgang Stanglmeier <wolf@kintaro.cologne.de>
|
#
7244 |
|
22-Mar-1995 |
se |
Remove spurious declaration of printf().
Submitted by: Michael Reifenberger <root@rz-wb.fh-sw.de>
|
#
7234 |
|
21-Mar-1995 |
se |
New ISA specific PCI code. Supports shared PCI interrupts.
Submitted by: Wolfgang Stanglmeier <wolf@kintaro.cologne.de>
|
#
6734 |
|
26-Feb-1995 |
bde |
Replace all remaining instances of `i386/include' by `machine' and fix nearby #include inconsistencies.
|
#
6706 |
|
25-Feb-1995 |
se |
Keep PCI_CONF_MODE in a safe place for later reference, if #defined.
Reviewed by: se Submitted by: seb@erix.ericsson.se (Sebastian Strollo)
|
#
6281 |
|
09-Feb-1995 |
se |
Initialisation of interrupt masks changed.
Reviewed by: se Submitted by: wolf (Wolfgang Stanglmeier)
|
#
6104 |
|
01-Feb-1995 |
se |
Reviewed by: se Submitted by: wolf (Wolfgang Stanglmeier) New ISA dependend file for PCI bus support. Replaces sys/i386/pci/pcibios.c.
|