NetBSD/sys/arch/mvme68k
thorpej a8f80ad4fd Fix a bogosity apparently inherited from when the Utah 4.3BSD code base
was converted to use Mach VM for Net2/4.4BSD.  The user segment table
pointer was originally stored in the PCB.  When Mach VM came along,
however, it was also stored in the pmap, and loaded into the PCB in
pmap_activate().  pmap_activate() would then note that the PCB's USTP
was now in sync with the pmap's USTP, and the low-level context switch
code would use the value from the PCB.

However, pmap_activate() would also load the hardware MMU context if
the pmap was the current pmap (or, in the case where pmaps can be shared,
such as in NetBSD, if the proc was the current proc).  The low-level
context switch code would then reload the hardware _again_ using the
USTP from the PCB.

However, the optimization of not calling pmap_activate() if "stchanged"
was false ended up causing some processes to use stale USTP values from
the PCB when the low-level context switch code reloaded the hardware!
This was noticed by using a real vfork(2) (which worked for some time
before failing, surprisingly!)

Since I'm hard pressed to find any real optimization here (since the
hardware was always reloaded once, sometimes twice!), the code now always
calls pmap_activate(), which uses the correct USTP value (the one in the
pmap).  The PCB's USTP is now ignored, and should eventually be g/c'd.

Another optimization can actually be performed, and I have added a comment
describing what it is, but have not yet implemented it.

Also note that most of the loadustp() functions where actually incomplete.
This has been corrected.  These functions should probably be split up into
MMU-specific operations, and called indirectly, rather than doing constant
run-time decision making based on values that will never change during the
course of a boot's lifetime.
1998-01-05 23:16:21 +00:00
..
compile mvme68k port -- for the motorola vme147 m68030 card 1995-07-25 23:11:53 +00:00
conf Conf file suitable for the ramdisk installation kernel. 1997-12-17 21:24:11 +00:00
dev Set rr0_dcd. 1997-11-02 08:05:06 +00:00
include Now that all ports have pmap_activate(), and it has an identical interface, 1998-01-03 01:12:59 +00:00
mvme68k Fix a bogosity apparently inherited from when the Utah 4.3BSD code base 1998-01-05 23:16:21 +00:00
stand RCSID Police. 1998-01-05 20:51:25 +00:00
Makefile mvme68k port -- for the motorola vme147 m68030 card 1995-07-25 23:11:53 +00:00
README merge in changes from 1.1 release branch 1995-11-30 00:56:23 +00:00
README.VMEbus-RAM Remove paragraph describing problem with initialising VMEbus RAM cards' 1997-11-01 19:18:39 +00:00

README

	$NetBSD: README,v 1.2 1995/11/30 00:58:30 jtc Exp $

NetBSD/mvme68k port README for NetBSD 1.1

supported environment:

	Motorola makes a number of m68k VME cards.  This port
currently only works on the m68030 based VME147 card (diskless only
for now).

requirements:
	- VME147 card
	- a machine to connect the console to
	- network connection
	- NFS server (to serve root and swap)

future plans:
	- VME147 scsi disk support
	- hopefully, support for the VME162 card


how to boot:
	Booting NetBSD/mvme68k on a VME147 is somewhat painful because
the ROM doesn't know how to talk to the ethernet chip.   I have solved
this problem by downloading a bootstrap into RAM via the console line.

	First, you will need a mvme68k NFS mountable /usr and root
directory.  Version 1.1 of NetBSD/mvme68k consists of the following files:
	export_exec_mvme68k.tar.gz: /export/exec/mvme68k files (mount on /usr)
	export_root_mvme68k.tar.gz: /export/root/mvme68k files (mount on /)
	domestic_mvme68k.tar.gz: domestic crypto stuff (restricted to US)
	README: this file

These files can be ftp'd from ftp.netbsd.org in mvme68k area of the 1.1
distribution.

	First extract the files in the proper place on your NFS server.   
Then get the following files: /export/exec/mvme68k/mdec/netboot and 
/export/exec/mvme68k/mdec/sboot.  Copy netboot to /tftpboot/boot.mvme68k of
your NFS server machine.  Make a symbolic link from the hex encoding of your 
IP address to that file.  For example:

lrwxrwxrwx  1 root     11 Apr 13 17:27 80FCA93F.147 -> boot.mvme68k


[80FCA93F is the IP address (128.252.169.63) of my vme147.]

Make sure you've got the right info in /etc/ethers and /etc/bootparams 
on your server.


Now, bring up your 147.  You should have the "bug" prompt:

COLD Start

Onboard  RAM start = $00000000,  stop = $007FFFFF

147-Bug>


Make sure the "stop" looks ok (if you've got 8MB you should have the
same value as I).  Also make sure the clock is ticking:

147-Bug>time
Sunday   5/30/27   16:25:14
147-Bug>time
Sunday   5/30/27   16:25:15
147-Bug>


Looks good.  you now need to download "sboot" into RAM.  you can
either do that through the console line or through a 2nd serial
connection.  I have my 147 connected to a sun4/110 and I access it via
"tip".  to load that way do this:

lo 0
~Ccat sboot
go 4000

which will look like this:
147-Bug>
147-Bug>lo 0
~CLocal command? cat sboot

away for 11 seconds 
!

147-Bug>g 4000
Effective address: 00004000 

sboot: serial line bootstrap program (&end = 5fd8)

>>> 


Now, if you want to do it through serial line 1, then connect serial
line one to a machine.  At the "147-Bug> " prompt do this "tm
1"... you should then login to what ever machine it is connected to.
Then hit "^A" to escape to Bug.  do "lo 1;x=cat sboot" ... then when
that is done you can reconnect "tm 1" and logout.  Then do "go 4000"
and you've got ">>> " prompt of sboot.


Once you've got the ">>> " prompt you can do commands such as:
"b"		- boot "netbsd" multiuser
"b gennetbsd"	- boot "gennetbsd" multiuser
"b -s"		- boot "netbsd" single user
"b gennetbsd -s"- boot "gennetbsd" single user

A typical boot looks like this:

sboot: serial line bootstrap program (&end = 5fc8)

>>> b
le0: ethernet address: 8:0:3e:20:cb:87
My ip address is: 128.252.169.63
Server ip address is: 128.252.169.2
3a00 
Download was a success!
Start @ 0x8000 ... 
>> NetBSD netboot [$Revision: 1.2 $]
boot: client addr: 128.252.169.63
boot: client name: vme147
boot: subnet mask: 255.255.0.0
boot: net gateway: 128.252.169.249
boot: server addr: 128.252.169.2
boot: server path: /export/root/vme147
452632+20360+64456+[30120+30477]=0x93809
Start @ 0x88aa ...
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.

NetBSD 1.1_ALPHA (VME147) #4: Thu Oct 12 19:03:10 CDT 1995
    chuck@vme147.ccrc.wustl.edu:/ui/netbsd/pain/src/sys/arch/mvme68k/compile/VME147
Motorola MVME147 MC68030 CPU+MMU, ???MHz MC68882 FPU)
real mem = 8388608
avail mem = 6823936
using 102 buffers containing 417792 bytes of memory
mainbus0 (root)
iio0 at mainbus0 addr 0xfffe0000
pcc0 at iio0 offset 0x1000 rev 0 intbvr 0x40
clock0 at iio0 offset 0x7f8 ipl 5
zs0 at iio0 offset 0x3000 ipl 4
le0 at iio0 offset 0x1800 ipl 2 ler2 0x96000 address 08:00:3e:20:cb:87
nfs_boot: using network interface 'le0'
nfs_boot: client_addr=0x80fca93f
nfs_boot: server_addr=0x80fca902
nfs_boot: hostname=vme147
root on dworkin:/export/root/vme147
root time: 0x30538658
WARNING: clock gained 37 days -- CHECK AND RESET THE DATE!
swap on dworkin:/export/swap/vme147
swap size: 0x4000 (blocks)
init: copying out path `/sbin/init' 11
Automatic boot in progress: starting file system checks.
[etc...]


good luck!


step by step installation directions:

[0] get the distribution
[1] unpack export_exec_mvme68k.tar.gz: gunzip, tar xfp, in /export/exec or equiv
[2] unpack export_root_mvme68k.tar.gz: gunzip, tar xfp, in /export/root or equiv
[3] run "MAKEDEV all" in NFS /export/root/mvme68k/dev directory
	(may have to add /etc, /usr/etc to the PATH line of MAKEDEV if 
	on non-NetBSD system)
[4] fix NFS root's etc/fstab
[5] fix NFS root's etc/myname (put your hostname in there)
[6] fix NFS root's etc/hosts
[7] create the file etc/hostname.le0 with "inet HOSTNAME" in it (replace
	"HOSTNAME" with your hostname as per etc/hosts)
[8] create etc/defaultdomain with your YP domainname (if using YP)
[9] adjust etc/localtime symbolic link as needed
[10] create etc/mygate with your default router in it (if wanted, also
		consider turning off routed in etc/netstart)
[11] create etc/resolv.conf (if wanted)
[12] make sure the mount point for /usr is there 
	(e.g. mkdir /export/root/mvme68k/usr)
[13] make sure the var/yp directory is there if you want to run YP
[14] boot as described above
[15] install domestic stuff if in US
[16] have fun