[parisc-linux] PA8800 support issues
Grant Grundler
grundler at parisc-linux.org
Wed Apr 14 01:00:35 MDT 2004
Hi,
I just committed the first bit of PA8800 support while poking
at a cast off PA8800 prototype. In addition to problems described
below, I need to fix (at least) two issues in sba_iommu driver:
1) need to add ZX1 IODC values so sba_probe() will claim the IOC(s)
2) IOVA is not zero based (we think) - need to read that from ZX1
chips and use it to mask/OR values where we convert iopdir
indexes to/from IOVAs.
But we haven't gotten that far yet.
The palinux kernel is now panicing nicely here:
...
Determining PDC firmware type: 64 bit PAT.
model 000088a0 00000491 00000000 00000002 d4936494c9f85489 100000f0 00000008 000000b2 000000b2
vers 00000301
CPUID vers 20 rev 4 (0x00000284)
capabilities 0x35
model 9000/785/C8000
Only equivalent aliasing supported
Kernel panic: SMP kernel required to avoid non-equivalent aliasing
In idle task - not syncing
This corresponds to arch/parisc/kernel/cache.c:
...
if ((boot_cpu_data.pdc.capabilities & PDC_MODEL_NVA_MASK) ==
PDC_MODEL_NVA_UNSUPPORTED) {
printk(KERN_WARNING "Only equivalent aliasing supported\n");
#ifndef CONFIG_SMP
panic("SMP kernel required to avoid non-equivalent aliasing");
#endif
}
The PAT PDC ERS describes NVA bits like this:
| The NVA (Non-equivalent Virtual Aliasing) field is a two bit field
| which indicates whether non-equivalent virtual aliasing is supported
| on the platform, and if so, if it has a performance impact. NVA field
| values are shown in the following table:
| Key / Description
| 0b00 / Non-equivalent aliasing supported without performance penalty.
| 0b01 / Non-equivalent aliasing supported with performance penalty.
| 0b10 / Reserved
| 0b11 / Non-equivalent aliasing not supported. Data corruption or HPMCs
may result.
| Superdome will set the NVA bits to 0b11.
And apperently PA8800 on ZX1.
So what are my choices?
1) get SMP working on 2.6.x
o already working on that but can't figure out why set_bit()
is crashing my single CPU a500.
o long term, we still want to run UP kernels to narrow down SW bugs.
2) hack VM support so whatever magic makes NVA work on SMP=y is a
build time option that works when CONFIG_SMP=n as well.
o way beyond my skill set and time I've got to hack on palinux.
o may not be feasible...
Any other ideas?
BTW, I found one more bit of documentation relevant to
non-equivalent aliases:
| PA-RISC, version 1.1, edition 3, described updated rules for
| non-equivalent aliasing in order to support Tornado in KittyHawk.
| In truth, Tornado did not require that those aliasing rules be strictly
| enforced, since it was overdesigned to increase debugability. However,
| any PA-RISC processor interfacing to a shared Merced bus definition
| requires strict adherence to those aliasing rules.
|
| Specifically, if a load miss transaction is ever issued that finds both
| a Shared copy and a Dirty copy of the same line, the transaction will
| hang in the snoop phase, until the transaction times out and crashes
| the system. This situation can be caused by allowing non-equivalent
| read translations to exist while there is an existing write translation,
| or by not flushing all dirty data out of the caches (and Syncing) before
| re-enabling the read translations. Flush-only translations, however,
| are safe, since it is illegal to respond Shared to a flush transaction.
I'm hoping that's relevant to the current work on better cache support.
thanks,
grant
More information about the parisc-linux
mailing list