| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
| |
|
|
|
|
|
|
|
| |
addresses. While there, pave the way for BUS_DMA_64BIT (not working
yet).
Diff from miod@; OK dlg@
|
|
|
|
| |
OK miod@
|
| |
|
|
|
|
|
|
|
| |
- set size argument of free()
- remove pointless if expression around free() call
ok guenther@
|
| |
|
| |
|
|
|
|
| |
6 years ago when asked about this.
|
|
|
|
| |
apparently a risk of spurious parity errors if we don't.
|
|
|
|
| |
PIC sometimes loses isp^Wqlw interrupts.
|
|
|
|
|
|
|
|
| |
to a dedicated wrapper function, and register either xbridge_pci_intr_handler()
or the wrapper as the interrupt handler, depending upon which chip we run on.
Saves the cost of the workaround on non-affected chips, which are a large
majority.
|
|
|
|
|
|
|
| |
pre-existing atomics to match.
tested on sgi (octane) and octeon (erl)
ok miod@ dlg@
|
|
|
|
|
|
|
| |
interrupts in PIC rev 1; from IRIX via Linux 2.5.69.
This doesn't fix the lost SCSI interrupts jasper@ eventually experiences on
Origin 350 systems, but this can't hurt anyway.
|
|
|
|
| |
after discussions with beck deraadt kettenis.
|
|
|
|
| |
initial diff from jasper@
|
| |
|
| |
|
|
|
|
| |
such statements with it.
|
|
|
|
|
|
| |
the dma_constraint range. This allows the xbridge(4) bus_dma_tag_t to use the
generic routines instead of rolling its own, now that the ATE code has been
removed.
|
|
|
|
|
|
|
|
|
|
|
| |
accessors or the byte-swapped accessors, depending upon the byteswap setting
of the device we are trying to attach.
This allows for the removal of byteswap knowledge from ioc(4) and iof(4)
drivers.
While there, build pci_chipset_t md structs by bcopy'ing a template and
filling the few runtime fields, instead of assigning every field of them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This mandatory function will get invoked in pci_probe_device(), and allows
a pci host driver to alter the pci_attach_args passed to a device when
attaching.
This function will also, if returning non-zero, cause the device to be
skipped completely during all the phases of the PCI device discovery
(i.e. ressource enumeration, ressource assignment, and actual attachment).
This particular feature is experimental and might be reverted in the future
(or the scope narrowed to device attachment only).
A dummy #define pci_probe_device_hook() 0 is added to all platforms except
sgi, where real functions (currently only returning 0) are added; real meat
will be added shortly.
Discussed at s2k11, no objection from the usual suspects.
|
|
|
|
|
|
| |
hubs are known during autoconf. Then, pick the most populated 2GB window
as our DMA memory window. xbridge(4) can thus program the correct settings
regardless of the order in which the xbow(4) attach.
|
|
|
|
|
|
|
|
|
| |
Remember the hub widget number of each node, instead of only the master node.
Use this in xbridge to compute the proper direct DMA map configuration
register value (it needs to embed the hub widget number matching the
physical address range).
This should allow us to pick memory from a different node than the one
we booted from, as the DMA window, if wanted.
|
|
|
|
|
|
| |
at physical address zero onwards, but instead assume it is controlled by
the dma_constraints range.
This will eventually allow a different window to be selected.
|
| |
|
|
|
|
|
|
|
| |
given pcitag_t configuration address space. Currently, all pci controllers
will return the usual 0x100 bytes of PCI configuration space, but this will
eventually change on PCIe-capable controlers.
ok kettenis@
|
| |
|
|
|
|
| |
ok krw@ kettenis@
|
|
|
|
|
|
|
| |
hierarchy. Everything attached to a single root node anyway, so at
best we had a bush.
"i think it is good" deraadt@
|
|
|
|
| |
the pci write buffers.
|
|
|
|
|
| |
bridge interrupts dance when trying to access an uninplemented ioc3 register.
Makes PIC handling simpler as a bonus.
|
|
|
|
|
| |
on the bus, to workaround timeout problems, according to IRIX knowledge which
made its way to Linux.
|
|
|
|
|
| |
like it is everything.h
ok tedu
|
|
|
|
|
| |
and compare against them when attaching potential console drivers, to figure
out whether they indeed are acting are console devices or not.
|
|
|
|
| |
ok kettenis, sgi usage of rbus_new_body() pointed out by miod
|
|
|
|
|
|
|
|
|
| |
being set to zero; this allows a full PIC bus to correctly configure I/O
resources.
While there, when initializing a ppb, setup I/O resources before memory
resources; without this a ppb connected to a PIC could not get I/O resources
if devices behind it would use both I/O and memory resources.
|
|
|
|
|
| |
number the PCI bus they are on is connected to. Will be used shortly to help
the console device selection logic.
|
|
|
|
| |
errors at the widget level). Extremely crude for now.
|
|
|
|
|
|
|
|
|
|
| |
when invoking the cache functions. The physical address is needed when
operating on physically-indexed caches, such as the L2 cache on Loongson
processors.
Preprocessor abuse makes sure that the physical address computation gets
compiled out when running on a kernel compiled for virtually-indexed
caches only, such as the sgi kernel.
|
|
|
|
| |
struct intrhand, instead of having it malloc()'ed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to be aligned on a 2GB boundary. Therefore the `add 512MB' bit used on
Octane does not give us a 0.5GB-2.5GB usable DMA range, but a 0.5GB-2GB
range; trying to use address in the 2GB-2.5GB range would cause PCI
DMA errors at the xbridge level.
There is no real benefit in using it, since this required us to keep
subtracting or adding 0.5GB when converting DMA address to physical
memory address or the other way around.
So stop using it; this makes a few parts of the code simpler (and until
bounce buffers are implemented, Octane systems will not use more than
1.5GB of memory).
|
|
|
|
| |
update #include needs. No functional change.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
superio chip interrupt on two different pins (yet do not advertize
themselves as a multi-function device, of course).
So, on one hand, this makes the ioc attachment code simpler, because it
simply needs to map interrupt pins A and B, and another hand, this moves
all the interrupt knowledge to the PCI bridge driver, since routing of pin
B differs whether the device is the onboard IOC3 chip (and able to use
any of the 8 bridge interrupt sources...) or on a PCI board (with pin
mapping sane, since controlled by the bridge).
This makes superio interrupts on CADduo boards work. Tested to cause
no regressions on Origin 200, Octane and Fuel.
|
|
|
|
|
|
|
|
|
|
| |
TGT_ORIGIN, which enables support for all IP27 and IP35 systems. The original
two options have always been used together, and go back to when pefo thought
supporting multiple nodes would be significant work. Since an Origin 200
can be a dual-node system, making a distinction between single node and
multiple node systems is a moot point anyway.
Be sure to rerun config(8) before rebuilding a kernel.
|
|
|
|
|
|
| |
system type list (which really is the system family) and a subsystem type.
No functional change yet.
|
|
|
|
|
|
| |
irq we route it to; this makes clear that devices connected to different
xbridges but using the same xbridge irq are actually not shared at all; and
this also helps figure out which device cause spurious interrupts.
|
|
|
|
|
| |
figure out how the interrupt was routed from xbridge to xheart... (it bypasses
the regular `have xbridge send a xio interrupt packet' mechanism)
|
|
|
|
|
| |
instead of embedding that knowledge in xbridge(4); will be used elsewhere
shortly.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
logical IPL level, and per-platform (IP27/IP30/IP32) code will from the
necessary hardware mask registers.
This allows the use of more than one interrupt mask register. Also, the
generic (platform independent) interrupt code shrinks a lot, and the actual
interrupt handler chains and masking information is now per-platform private
data.
Interrupt dispatching is generated from a template; more routines will be
added to the template to reduce platform-specific changes and share as much
code as possible.
Tested on IP27, IP30, IP32 and IP35.
|