2.11BSD boot looping
Steven M. Schultz
sms at moe.2bsd.com
Fri Dec 10 10:50:12 AEST 1999
> From: "Daniel A. Seagraves" <DSEAGRAV at toad.xkl.com>
> I was saying I needed to know where/how to change the bootstrap (modify the
> bootstrap, not use a different one) so that it will work.
Hmmm, ok - that wasn't clear. It read as if the documentation was
needed to install a new/different bootblock.
> I got a pointer at some 3BSD stuff on Minnie, but that code used a boot ROM on
> the VAX 750 to get it's job done.
Yep - same in 4BSD too, I remember thinking at one time "ah, I'll
just use the 4BSD bootcode as a guide" only to find out it was
calling into the ROMs.
> I don't have any MSCP books so I don't know where or how to change the
> bootstrap to make it work on my machine.
IF the bug is what has been suspected so far then presenting a
vector to the controller during the 4 step init process is what
needs to be done.
Looking at the standalone MSCP driver (/sys/pdpstand/ra.c) which has
the logic to specify a vector even though interrupts are not use the
logic is:
if (rainit[ctlr] == 0) {
again: raaddr->raip = 0;
if (ra_step(raaddr, RA_STEP1, 1))
goto again;
raaddr->rasa = RA_ERR | (0154/4);
if (ra_step(raaddr, RA_STEP2, 2))
goto again;
iomapadr(&racom->ra_ca.ca_ringbase, &bae, &lo16);
raaddr->rasa = lo16;
if (ra_step(raaddr, RA_STEP3, 3))
goto again;
raaddr->rasa = bae;
if (ra_step(raaddr, RA_STEP4, 4))
goto again;
raaddr->rasa = RA_GO;
if (racmd(M_OP_STCON, io) < 0) {
printf("%s STCON err\n", devname(io));
return(-1);
}
rainit[ctlr] = 1;
}
Thus it is only done on 'first open'.
It is in step 1 that the vector divided by 4 needs to be "OR"'d into
the work presented to the controller.
The ra boot block code (/sys/mdec/rauboot.s) has a loop:
/
/ RA initialize controller
/
mov $RASTEP1,r0
mov raip,r1
clr (r1)+ / go through controller init seq.
mov $icons,r2
1:
bit r0,(r1)
beq 1b
---->>>>
mov (r2)+,(r1)
asl r0
bpl 1b
mov $ra+RARSPREF,*$ra+RARSPL / set controller characteristics
mov $ra+RACMDREF,*$ra+RACMDL
mov $RASTCON,r0
jsr pc,racmd
mov unit,*$ra+RAUNIT / bring boot unit online
mov $RAONLIN,r0
jsr pc,racmd
...
I suspect that the loop at ---->>> needs to be modified to do something
special for step 1.
Steve
More information about the TUHS
mailing list