Home | History | Annotate | Line # | Download | only in vax
ka43.c revision 1.3
      1  1.3  christos /*	$NetBSD: ka43.c,v 1.3 1996/10/13 03:35:43 christos Exp $ */
      2  1.1     ragge /*
      3  1.1     ragge  * Copyright (c) 1996 Ludd, University of Lule}, Sweden.
      4  1.1     ragge  * All rights reserved.
      5  1.1     ragge  *
      6  1.1     ragge  * This code is derived from software contributed to Ludd by Bertram Barth.
      7  1.1     ragge  *
      8  1.1     ragge  * Redistribution and use in source and binary forms, with or without
      9  1.1     ragge  * modification, are permitted provided that the following conditions
     10  1.1     ragge  * are met:
     11  1.1     ragge  * 1. Redistributions of source code must retain the above copyright
     12  1.1     ragge  *    notice, this list of conditions and the following disclaimer.
     13  1.1     ragge  * 2. Redistributions in binary form must reproduce the above copyright
     14  1.1     ragge  *    notice, this list of conditions and the following disclaimer in the
     15  1.1     ragge  *    documentation and/or other materials provided with the distribution.
     16  1.1     ragge  * 3. All advertising materials mentioning features or use of this software
     17  1.1     ragge  *    must display the following acknowledgement:
     18  1.1     ragge  *      This product includes software developed at Ludd, University of
     19  1.1     ragge  *      Lule}, Sweden and its contributors.
     20  1.1     ragge  * 4. The name of the author may not be used to endorse or promote products
     21  1.1     ragge  *    derived from this software without specific prior written permission
     22  1.1     ragge  *
     23  1.1     ragge  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     24  1.1     ragge  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     25  1.1     ragge  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     26  1.1     ragge  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     27  1.1     ragge  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     28  1.1     ragge  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     29  1.1     ragge  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     30  1.1     ragge  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     31  1.1     ragge  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     32  1.1     ragge  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     33  1.1     ragge  */
     34  1.1     ragge 
     35  1.1     ragge #include <sys/param.h>
     36  1.1     ragge #include <sys/types.h>
     37  1.1     ragge #include <sys/device.h>
     38  1.1     ragge #include <sys/kernel.h>
     39  1.1     ragge 
     40  1.1     ragge #include <vm/vm.h>
     41  1.1     ragge #include <vm/vm_kern.h>
     42  1.1     ragge 
     43  1.1     ragge #include <machine/pte.h>
     44  1.1     ragge #include <machine/mtpr.h>
     45  1.1     ragge #include <machine/sid.h>
     46  1.1     ragge #include <machine/pmap.h>
     47  1.1     ragge #include <machine/nexus.h>
     48  1.1     ragge #include <machine/uvax.h>
     49  1.1     ragge #include <machine/ka43.h>
     50  1.1     ragge #include <machine/clock.h>
     51  1.1     ragge #include <machine/ka650.h>	/* cache ??? */
     52  1.1     ragge 
     53  1.1     ragge #define	xtrace(x)
     54  1.1     ragge 
     55  1.1     ragge void	ka43_conf __P((struct device*, struct device*, void*));
     56  1.1     ragge void	ka43_steal_pages __P((void));
     57  1.1     ragge 
     58  1.1     ragge void	ka43_memerr __P((void));
     59  1.1     ragge int	ka43_mchk __P((caddr_t));
     60  1.1     ragge 
     61  1.1     ragge struct	ka43_cpu   *ka43_cpuptr = (void*)KA43_CPU_BASE;
     62  1.1     ragge struct	ka43_clock *ka43_clkptr = (void*)KA43_WAT_BASE;
     63  1.1     ragge 
     64  1.1     ragge extern int uVAX_fillmap __P((struct uc_map *));
     65  1.1     ragge 
     66  1.1     ragge struct uc_map ka43_map[] = {
     67  1.1     ragge 	{ KA43_CFGTST,		KA43_CFGTST,	4,		0 },
     68  1.1     ragge 	{ KA43_ROM_BASE,	KA43_ROM_END,	KA43_ROM_SIZE,	0 },
     69  1.1     ragge 	{ KA43_CPU_BASE,	KA43_CPU_END,	KA43_CPU_SIZE,	0 },
     70  1.1     ragge 	{ KA43_CT2_BASE,	KA43_CT2_END,	KA43_CT2_SIZE,	0 },
     71  1.1     ragge 	{ KA43_CH2_CREG,	KA43_CH2_CREG,	4,		0 },
     72  1.1     ragge 	{ KA43_NWA_BASE,	KA43_NWA_END,	KA43_NWA_SIZE,	0 },
     73  1.1     ragge 	{ KA43_SER_BASE,	KA43_SER_END,	KA43_SER_SIZE,	0 },
     74  1.1     ragge 	{ KA43_WAT_BASE,	KA43_WAT_END,	KA43_WAT_SIZE,	0 },
     75  1.1     ragge 	{ KA43_SCS_BASE,	KA43_SCS_END,	KA43_SCS_SIZE,	0 },
     76  1.1     ragge 	{ KA43_LAN_BASE,	KA43_LAN_END,	KA43_LAN_SIZE,	0 },
     77  1.1     ragge 	{ KA43_CUR_BASE,	KA43_CUR_END,	KA43_CUR_SIZE,	0 },
     78  1.1     ragge 	{ KA43_DMA_BASE,	KA43_DMA_END,	KA43_DMA_SIZE,	0 },
     79  1.1     ragge 	{ KA43_VME_BASE,	KA43_VME_END,	KA43_VME_SIZE,	0 },
     80  1.1     ragge 	/*
     81  1.1     ragge 	 * there's more to come, eg. framebuffers (GPX/SPX)
     82  1.1     ragge 	 */
     83  1.1     ragge 	{0, 0, 0, 0},
     84  1.1     ragge };
     85  1.1     ragge 
     86  1.1     ragge #define CH1_BITS \
     87  1.1     ragge 	"\020\015BCHIT\014BUSERR\013PPERR\012DPERR\011TPERR\010TRAP1" \
     88  1.1     ragge 	"\007TRAP2\006INTR\005HIT\004REFRESH\003FLUSH\002ENABLE\001FORCEHIT"
     89  1.1     ragge 
     90  1.1     ragge #define CH2_BITS \
     91  1.1     ragge 	"\020\010TPE\007DPE\006MISS\005DIRTY\004CERR\003LERR\002SERR\001ENAB"
     92  1.1     ragge 
     93  1.1     ragge void
     94  1.1     ragge ka43_memerr()
     95  1.1     ragge {
     96  1.1     ragge 	int mapen;
     97  1.1     ragge 	int *ch2reg;
     98  1.1     ragge 
     99  1.3  christos 	printf("memory error!\n");
    100  1.3  christos 	printf("primary cache status: %b\n", mfpr(PR_PCSTS), CH1_BITS);
    101  1.1     ragge 
    102  1.1     ragge 	mapen = mfpr(PR_MAPEN);
    103  1.1     ragge 	if (mapen)
    104  1.1     ragge 		ch2reg = (void*)uvax_phys2virt(KA43_CH2_CREG);
    105  1.1     ragge 	else
    106  1.1     ragge 		ch2reg = (void*)KA43_CH2_CREG;
    107  1.3  christos 	printf("secondary cache status: %b\n", *ch2reg, CH2_BITS);
    108  1.1     ragge }
    109  1.1     ragge 
    110  1.1     ragge static char *mcc43[] = {
    111  1.1     ragge 	"no error (0)",
    112  1.1     ragge 	"FPA signalled protocoll error",
    113  1.1     ragge 	"FPA signalled illegal opcode",
    114  1.1     ragge 	"FPA detected parity error",
    115  1.1     ragge 	"FPA returned unknown status",
    116  1.1     ragge 	"FPA result has parity error",
    117  1.1     ragge 	"unused (6)",
    118  1.1     ragge 	"unused (7)",
    119  1.1     ragge 	"MMU error (TLB miss)",
    120  1.1     ragge 	"MMU error (TLB hit)",
    121  1.1     ragge 	"HW interrupt at unused IPL",
    122  1.1     ragge 	"impossible microcode state",
    123  1.1     ragge 	"undefined trap code (i-box)",
    124  1.1     ragge 	"undefined control store address",
    125  1.1     ragge 	"unused (14)",
    126  1.1     ragge 	"unused (15)",
    127  1.1     ragge 	"PC tag or data parity error",
    128  1.1     ragge 	"data bus parity error",
    129  1.1     ragge 	"data bus error (NXM)",
    130  1.1     ragge 	"undefined data bus state",
    131  1.1     ragge };
    132  1.1     ragge 
    133  1.1     ragge int
    134  1.1     ragge ka43_mchk(addr)
    135  1.1     ragge 	caddr_t addr;
    136  1.1     ragge {
    137  1.1     ragge 	struct {
    138  1.1     ragge 	  int bcount;	/* byte count (0x18) */
    139  1.1     ragge 	  int mcc;	/* "R"-flag and machine check code */
    140  1.1     ragge 	  int mrva;	/* most recent virtual address */
    141  1.1     ragge 	  int viba;	/* contents of VIBA register */
    142  1.1     ragge 	  int sisr;	/* ICCS bit 6 and SISR bits 15:0 */
    143  1.1     ragge 	  int isd;	/* internal state */
    144  1.1     ragge 	  int scr;	/* shift count register */
    145  1.1     ragge 	  int pc;	/* program counter */
    146  1.1     ragge 	  int psl;	/* processor status longword */
    147  1.1     ragge 	} *p = (void*)addr;
    148  1.1     ragge 
    149  1.3  christos 	printf("machine check: 0x%x\n", p->mcc);
    150  1.3  christos 	printf("reason: %s\n", mcc43[p->mcc & 0xff]);
    151  1.1     ragge 
    152  1.3  christos 	printf("bcount:0x%x, check-code:0x%x, virtaddr:0x%x\n",
    153  1.1     ragge 	       p->bcount, p->mcc, p->mrva);
    154  1.3  christos 	printf("pc:0x%x, psl:0x%x, viba: %x, state: %x\n",
    155  1.1     ragge 	       p->pc, p->psl, p->viba, p->isd);
    156  1.1     ragge 
    157  1.1     ragge 	return (-1);
    158  1.1     ragge }
    159  1.1     ragge 
    160  1.1     ragge int
    161  1.1     ragge ka43_setup(uc,flags)
    162  1.1     ragge 	struct uvax_calls *uc;
    163  1.1     ragge 	int flags;
    164  1.1     ragge {
    165  1.1     ragge 	uc->uc_name = "ka43";
    166  1.1     ragge 
    167  1.1     ragge 	uc->uc_phys2virt = NULL;
    168  1.1     ragge 	uc->uc_physmap = ka43_map;
    169  1.1     ragge 
    170  1.1     ragge 	uc->uc_steal_pages = ka43_steal_pages;
    171  1.1     ragge 	uc->uc_conf = ka43_conf;
    172  1.1     ragge 	uc->uc_clkread = ka43_clkread;
    173  1.1     ragge 	uc->uc_clkwrite = ka43_clkwrite;
    174  1.1     ragge 
    175  1.1     ragge 	uc->uc_memerr = ka43_memerr;
    176  1.1     ragge 	uc->uc_mchk = ka43_mchk;
    177  1.1     ragge 
    178  1.1     ragge 	uc->uc_intreq = (void*)KA43_INTREQ;
    179  1.1     ragge 	uc->uc_intclr = (void*)KA43_INTCLR;
    180  1.1     ragge 	uc->uc_intmsk = (void*)KA43_INTMSK;
    181  1.1     ragge 
    182  1.1     ragge 	uc->uc_busTypes = VAX_VSBUS;
    183  1.1     ragge }
    184  1.1     ragge 
    185  1.1     ragge ka43_discache()
    186  1.1     ragge {
    187  1.1     ragge 	int *ctag;
    188  1.1     ragge 	int *creg;
    189  1.1     ragge 	int mapen;
    190  1.1     ragge 	int i;
    191  1.1     ragge 
    192  1.1     ragge 	xtrace(("ka43_discache()\n"));
    193  1.1     ragge 	return (0);
    194  1.1     ragge 
    195  1.1     ragge 	/*
    196  1.1     ragge 	 * first disable primary cache
    197  1.1     ragge 	 */
    198  1.1     ragge #if 0
    199  1.1     ragge 	mtpr(0, PR_PCSTS);
    200  1.1     ragge 	mtpr(0, PR_PCERR);
    201  1.1     ragge 	mtpr(0, PR_PCIDX);
    202  1.1     ragge 	mtpr(0, PR_PCTAG);
    203  1.1     ragge #else
    204  1.1     ragge 	i = mfpr(PR_PCSTS);
    205  1.1     ragge 	mtpr((i & ~2), PR_PCSTS);
    206  1.3  christos 	printf("pcsts: %x --> %x\n", i, mfpr(PR_PCSTS));
    207  1.1     ragge #endif
    208  1.1     ragge 	/*
    209  1.1     ragge 	 * now secondary cache
    210  1.1     ragge 	 */
    211  1.1     ragge 	mapen = mfpr(PR_MAPEN);
    212  1.1     ragge 	if (mapen) {
    213  1.1     ragge 		ctag = (void*)uvax_phys2virt(KA43_CT2_BASE);
    214  1.1     ragge 		creg = (void*)uvax_phys2virt(KA43_CH2_CREG);
    215  1.1     ragge 	} else {
    216  1.1     ragge 		ctag = (void*)KA43_CT2_BASE;
    217  1.1     ragge 		creg = (void*)KA43_CH2_CREG;
    218  1.1     ragge 	}
    219  1.1     ragge 	i = *creg;
    220  1.1     ragge 	*creg = (i & ~1);
    221  1.3  christos 	printf("creg: %x --> %x\n", i, *creg);
    222  1.1     ragge 
    223  1.1     ragge 	xtrace(("ka43_discache() done.\n"));
    224  1.1     ragge }
    225  1.1     ragge 
    226  1.1     ragge ka43_encache()
    227  1.1     ragge {
    228  1.1     ragge 	int *ctag;
    229  1.1     ragge 	int *creg;
    230  1.1     ragge 	int mapen;
    231  1.1     ragge 	int i;
    232  1.1     ragge 
    233  1.1     ragge 	xtrace(("ka43_encache()\n"));
    234  1.1     ragge 
    235  1.1     ragge 	ka43_discache();
    236  1.1     ragge 
    237  1.1     ragge 	/*
    238  1.1     ragge 	 * first enable primary cache
    239  1.1     ragge 	 */
    240  1.3  christos 	printf("P-0");
    241  1.1     ragge 	i = mfpr(PR_PCSTS);
    242  1.1     ragge 	mtpr((i & ~2), PR_PCSTS);
    243  1.1     ragge 	mtpr(0, PR_PCSTS);
    244  1.3  christos 	printf("P-1");
    245  1.1     ragge #if 1
    246  1.1     ragge 	mtpr(KA43_PCS_ENABLE | KA43_PCS_FLUSH | KA43_PCS_REFRESH, PR_PCSTS);
    247  1.1     ragge #else
    248  1.1     ragge 	mtpr(KA43_PCS_ENABLE, PR_PCSTS);
    249  1.1     ragge #endif
    250  1.3  christos 	printf("P-2");
    251  1.1     ragge 
    252  1.1     ragge 	/*
    253  1.1     ragge 	 * now secondary cache
    254  1.1     ragge 	 */
    255  1.1     ragge 	mapen = mfpr(PR_MAPEN);
    256  1.1     ragge 	if (mapen) {
    257  1.1     ragge 		ctag = (void*)uvax_phys2virt(KA43_CT2_BASE);
    258  1.1     ragge 		creg = (void*)uvax_phys2virt(KA43_CH2_CREG);
    259  1.1     ragge 	} else {
    260  1.1     ragge 		ctag = (void*)KA43_CT2_BASE;
    261  1.1     ragge 		creg = (void*)KA43_CH2_CREG;
    262  1.1     ragge 	}
    263  1.3  christos 	printf("ctag: %x, creg: %x\n", ctag, creg);
    264  1.3  christos 	printf("S-1");
    265  1.1     ragge 	i = *creg;
    266  1.3  christos 	printf("creg=[%x] ", *creg);
    267  1.1     ragge #if 0
    268  1.1     ragge 	*creg = (i & ~1);
    269  1.3  christos 	printf("creg=[%x] ", *creg);
    270  1.3  christos 	printf("S-2");
    271  1.1     ragge 	for (i = 0; i < KA43_CT2_SIZE; i += 4)		/* Quadword entries */
    272  1.1     ragge 		ctag[i/4] = 0;				/* reset lower half */
    273  1.3  christos 	printf("S-3");
    274  1.1     ragge 	i = *creg;
    275  1.3  christos 	printf("creg=[%x] ", *creg);
    276  1.1     ragge 	*creg = (i & ~1);
    277  1.3  christos 	printf("creg=[%x] ", *creg);
    278  1.3  christos 	printf("S-4");
    279  1.1     ragge 	/* *creg = 1; */
    280  1.3  christos 	printf("S-5");
    281  1.1     ragge #endif
    282  1.1     ragge 	xtrace(("ka43_encache() done.\n"));
    283  1.1     ragge 
    284  1.3  christos 	printf("primary cache status: %b\n", mfpr(PR_PCSTS), CH1_BITS);
    285  1.3  christos 	printf("secondary cache status: %b\n", *creg, CH2_BITS);
    286  1.1     ragge }
    287  1.1     ragge 
    288  1.1     ragge void
    289  1.1     ragge ka43_conf(parent, self, aux)
    290  1.1     ragge 	struct	device *parent, *self;
    291  1.1     ragge 	void	*aux;
    292  1.1     ragge {
    293  1.1     ragge 	extern char cpu_model[];
    294  1.1     ragge 	extern int vax_siedata;
    295  1.1     ragge 
    296  1.1     ragge 	if (vax_siedata & 0x02)		/* "single-user" flag */
    297  1.1     ragge 		strcpy(cpu_model,"VAXstation 3100 model 76");
    298  1.1     ragge 	else if (vax_siedata & 0x01)	/* "multiuser" flag */
    299  1.1     ragge 		strcpy(cpu_model,"MicroVAX 3100 model 76(?)");
    300  1.1     ragge 	else
    301  1.1     ragge 		strcpy(cpu_model, "unknown KA43 board");
    302  1.1     ragge 
    303  1.3  christos 	printf(": %s\n", cpu_model);
    304  1.1     ragge 
    305  1.1     ragge 	ka43_encache();
    306  1.1     ragge }
    307  1.1     ragge 
    308  1.1     ragge 
    309  1.1     ragge /*
    310  1.1     ragge  *
    311  1.1     ragge  */
    312  1.1     ragge u_long le_iomem;		/* base addr of RAM -- CPU's view */
    313  1.1     ragge u_long le_ioaddr;		/* base addr of RAM -- LANCE's view */
    314  1.1     ragge 
    315  1.1     ragge void
    316  1.1     ragge ka43_steal_pages()
    317  1.1     ragge {
    318  1.1     ragge 	extern  vm_offset_t avail_start, virtual_avail, avail_end;
    319  1.1     ragge 	int	junk;
    320  1.1     ragge 	int	i;
    321  1.1     ragge 	struct {
    322  1.1     ragge 	  u_long     :2;
    323  1.1     ragge 	  u_long data:8;
    324  1.1     ragge 	  u_long     :22;
    325  1.1     ragge 	} *p;
    326  1.1     ragge 	int *srp;	/* Scratch Ram */
    327  1.1     ragge 	int *pctl;	/* parity control register */
    328  1.1     ragge 	char *q = (void*)&srp;
    329  1.1     ragge 	char line[20];
    330  1.1     ragge 
    331  1.1     ragge 	ka43_encache();
    332  1.1     ragge 
    333  1.1     ragge 	pctl = (void*)KA43_PARCTL;
    334  1.3  christos 	printf("parctl: 0x%x\n", *pctl);
    335  1.1     ragge #if 0
    336  1.1     ragge 	*pctl = KA43_PCTL_DPEN | KA43_PCTL_CPEN;
    337  1.1     ragge #else
    338  1.1     ragge 	*pctl = KA43_PCTL_CPEN;
    339  1.1     ragge #endif
    340  1.3  christos 	printf("new value for parctl: ");
    341  1.1     ragge 	gets(line);
    342  1.1     ragge 	*pctl = *line - '0';
    343  1.3  christos 	printf("parctl: 0x%x\n", *pctl);
    344  1.1     ragge 
    345  1.1     ragge 	srp = NULL;
    346  1.1     ragge 	p = (void*)KA43_SCR;
    347  1.1     ragge 	for (i=0; i<4; i++) {
    348  1.3  christos 	  printf("p[%d] = %x, ", i, p[i].data);
    349  1.1     ragge 	  q[i]  = p[i].data;
    350  1.1     ragge 	}
    351  1.1     ragge 	p = (void*)KA43_SCRLEN;
    352  1.3  christos 	printf("\nlen = %d\n", p->data);
    353  1.3  christos 	printf("srp = 0x%x\n", srp);
    354  1.1     ragge 
    355  1.1     ragge 	for (i=0; i<0x2; i++) {
    356  1.3  christos 	  printf("%x:0x%x ", i*4, srp[i]);
    357  1.1     ragge 	  if ((i & 0x07) == 0x07)
    358  1.3  christos 	    printf("\n");
    359  1.1     ragge  	}
    360  1.3  christos 	printf("\n");
    361  1.1     ragge 
    362  1.3  christos 	printf ("ka43_steal_pages: avail_end=0x%x\n", avail_end);
    363  1.1     ragge 
    364  1.1     ragge 	/*
    365  1.1     ragge 	 * SCB is already copied/initialized at addr avail_start
    366  1.1     ragge 	 * by pmap_bootstrap(), but it's not yet mapped. Thus we use
    367  1.1     ragge 	 * the MAPPHYS() macro to reserve these two pages and to
    368  1.1     ragge 	 * perform the mapping. The mapped address is assigned to junk.
    369  1.1     ragge 	 */
    370  1.1     ragge 	MAPPHYS(junk, 2, VM_PROT_READ|VM_PROT_WRITE);
    371  1.1     ragge 
    372  1.1     ragge 	/*
    373  1.1     ragge 	 * At top of physical memory there are some console-prom and/or
    374  1.1     ragge 	 * restart-specific data. Make this area unavailable.
    375  1.1     ragge 	 */
    376  1.1     ragge #if 1
    377  1.1     ragge 	avail_end -= 10 * NBPG;
    378  1.1     ragge #endif
    379  1.1     ragge 
    380  1.1     ragge 	/*
    381  1.1     ragge 	 * If we need to map physical areas also, we can decrease avail_end
    382  1.1     ragge 	 * (the highest available memory-address), copy the stuff into the
    383  1.1     ragge 	 * gap between and use pmap_map to map it...
    384  1.1     ragge 	 *
    385  1.1     ragge 	 * Don't use the MAPPHYS macro here, since this uses and changes(!)
    386  1.1     ragge 	 * the value of avail_start. Use MAPVIRT even if it's name misleads.
    387  1.1     ragge 	 */
    388  1.1     ragge 	avail_end &= ~0xffff;
    389  1.1     ragge 	avail_end -= (64 * 1024);
    390  1.1     ragge 
    391  1.1     ragge 	avail_end = 0xf00000;
    392  1.1     ragge 	le_ioaddr = 0xf40000;
    393  1.1     ragge 
    394  1.1     ragge 	MAPVIRT(le_iomem, (64 * 1024)/NBPG);
    395  1.1     ragge 	pmap_map((vm_offset_t)le_iomem, le_ioaddr, le_ioaddr + 0xffff,
    396  1.1     ragge 		 VM_PROT_READ|VM_PROT_WRITE);
    397  1.1     ragge 
    398  1.1     ragge 	if (1 || le_ioaddr > 0xffffff) {
    399  1.1     ragge 		le_ioaddr &= 0xffffff;
    400  1.1     ragge 		*pctl |= KA43_PCTL_DMA;
    401  1.1     ragge 	}
    402  1.3  christos 	printf("le_iomem: %x, le_ioaddr: %x, parctl:%x\n",
    403  1.1     ragge 	       le_iomem, le_ioaddr, *pctl);
    404  1.1     ragge 
    405  1.1     ragge 	/*
    406  1.1     ragge 	 * now map in anything listed in ka43_map...
    407  1.1     ragge 	 */
    408  1.1     ragge 	uVAX_fillmap(ka43_map);
    409  1.1     ragge 
    410  1.1     ragge 	/*
    411  1.1     ragge 	 * Clear restart and boot in progress flags in the CPMBX.
    412  1.1     ragge 	 */
    413  1.1     ragge 	ka43_clkptr->cpmbx = ka43_clkptr->cpmbx & 0xF0;
    414  1.1     ragge 
    415  1.1     ragge 	/*
    416  1.1     ragge 	 * Enable memory parity error detection and clear error bits.
    417  1.1     ragge 	 */
    418  1.1     ragge 	ka43_cpuptr->ka43_mser = 0x01;
    419  1.1     ragge 	/* (UVAXIIMSER_PEN | UVAXIIMSER_MERR | UVAXIIMSER_LEB); */
    420  1.1     ragge 
    421  1.1     ragge 	/*
    422  1.1     ragge 	 * MM is not yet enabled, thus we still used the physical addresses,
    423  1.1     ragge 	 * but before leaving this routine, we need to reset them to virtual.
    424  1.1     ragge 	 */
    425  1.1     ragge 	ka43_cpuptr = (void*)uvax_phys2virt(KA43_CPU_BASE);
    426  1.1     ragge 	ka43_clkptr = (void*)uvax_phys2virt(KA43_WAT_BASE);
    427  1.1     ragge 
    428  1.3  christos 	printf ("steal_pages done.\n");
    429  1.1     ragge }
    430  1.1     ragge 
    431  1.1     ragge /*
    432  1.1     ragge  * define what we need and overwrite the uVAX_??? names
    433  1.1     ragge  */
    434  1.1     ragge 
    435  1.1     ragge #define NEED_UVAX_GENCLOCK
    436  1.1     ragge #define NEED_UVAX_PROTOCLOCK
    437  1.1     ragge 
    438  1.1     ragge #define uVAX_clock	ka43_clock
    439  1.1     ragge #define uVAX_clkptr	ka43_clkptr
    440  1.1     ragge #define uVAX_clkread	ka43_clkread
    441  1.1     ragge #define uVAX_clkwrite	ka43_clkwrite
    442  1.1     ragge #define uVAX_genclock	ka43_genclock
    443  1.1     ragge 
    444  1.1     ragge #include <arch/vax/vax/uvax_proto.c>
    445