AlphaStation 200 NVRAM Problem

Maciej W. Rozycki macro at linux-mips.org
Wed Apr 27 07:47:27 CDT 2016


On Tue, 26 Apr 2016, Robert Jarratt wrote:

> I examined the bank 8 configuration register contents using the console. It
> contained 0x0136, which suggests the cache is not valid. The base address
> register contained 0x4000.

 Both correct:

* 0x4000 << (23 - 5) => 0x100000000

* 0x0136:
  s8_Check  => 0b0    -- ECC/parity disabled 
  s8_ColSel => 0b100  -- row/column bits: 9/9
  s8_SubEna => 0b1    -- subbanks enabled
  s8_Size   => 0b1011 -- bankset size: 2MB
  s8_Valid  => 0b0    -- access disabled

Clearly the index and the data register are wired as individual subbanks 
each.

> I then went back to the console to check the bank 0 configuration register
> which gave me 0x0069, which indicates it is valid. So there is a good chance
> I am reading the right things.

 Indeed; memory controller register addresses are hardwired IIUC, so 
they're always there.  As to the bankset configuration register:

* 0x0069:
  s0_ColSel => 0b001  -- row/column bits: 12/10 or 11/11
  s0_SubEna => 0b1    -- subbanks enabled
  s0_Size   => 0b0100 -- bankset size: 64MB
  s0_Valid  => 0b1    -- access enabled

I take it it corresponds to your memory module installed.

> This I think explains why I get the machine check. While in the console I
> changed the bank 8 config register to 0x0137, and then I was able to read
> and write to the address of the flashbus index register, but it didn't
> change the LEDs when I wrote to the data register, and reading back the data
> register gave me a value I didn't write. So there is still something not

 You won't read LEDs back as it's a write-only location, a plain octal D 
flip-flop presumably.  Is it not a 74F273 that I can see right below the 
unfortunate NVRAM chip on your photo?  That would be it then.  Its outputs 
are rated 20mA each, plenty to drive LEDs without additional circuitry.

 Have you tried using your C program instead to poke at these LEDs?  SRM 
might be interfering, e.g. accessing NVRAM or maybe LEDs even between your 
commands, and consequently your data register writes issued with `deposit' 
may go elsewhere as the index register has been since changed under your 
feet.

 While experimenting with C code make sure you synchronise accesses -- 
insert `asm("mb")' or suchlike (whatever OpenVMS C compiler supports) just 
after each flashbus index or data register access and read back the index 
register before accessing the data register to avoid weak ordering effects 
in the chipsed, just as noted in the system manual.

> right, perhaps the other values in the bank 8 config register, because I
> don't know what they mean. However the base address seems correct as it's
> value is 0x4000 (the raw value in the register), and this equates to
> 0x1.000.0000 based on it being bits 19 upwards in the physical address
> space.

 Timings are documented in the chipset datasheet, though this is all 
cryptic of course as we don't know what the requirements are for flashbus.  
We could assume though that they're the same for the index and data side 
and then try to match them to the NVRAM being 70ns.  Perhaps you could 
post them too?

> I wonder if the SROM failing to read the DROM means that it does not set up
> bank 8?

 Well, but didn't it poke at LEDs?  It also tried to load DROM before 
loading SRM and PALcode from flash, both of which are on flashbus, so it 
must have got bank 8 right.  If anything it's SRM or PALcode interfering 
here probably.

  Maciej


More information about the cctech mailing list