This patch does many things. The highlights are: 1) enables SPARSE_IRQ,
2) allocates ivector_table at boot time, 3) default to cookie only VIRQ
mechanism for supported firmware and 4) structures the code some.
The sysino is a deprecated HV mechanism according to the most recent
(impossible to find) SPARC Virtual Machine Specification. HV_GRP_INTR
is what controls the cookie/sysino firmware versioning. The history
appears to be something like this:
major version 2 was dropped.
major version 3 is where a cookie only VIRQ
is possible. Using version 3 means ivector_table isn't required.
The syino ivector_table is default large for major < 3. This is to accomodate
Athena and possibly T4-4. It might be possible to expand by page order on the
fly at boot but not done. Should you fail to boot (BUG_ON), then you'll need
to use the boot line option "num_ivecs" to increase the number of nr_vecs.
Note the BUG_ON sounds too catastrophic but better than indexing beyond
the array bounds like we had!
There are two new boot line options:
num_ivecs - the maximum size of the sysino. Each sysino requires two
extended words (unsigned long). It's default NR value is 0xffff.
It must be physically contiguous.
The other boot option:
hvirq - this is the version for HV_GRP_INTR. This is related to HV API
versioning. The code attempts major=3 first by default. The option can
be used to override this default.
There are puzzling issues which we carried over into SPARSE_IRQ. The first
two are iclr and imap. The other issue is in sun4v_build_virq -
LDC/VIRQ related: irq_set_status_flags(irq, IRQ_NOAUTOEN);.