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