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));
		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
	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.


More information about the TUHS mailing list