Home | History | Annotate | Line # | Download | only in vax
      1 /*	$NetBSD: ka730.c,v 1.6 2017/05/22 16:46:15 ragge Exp $ */
      2 /*
      3  * Copyright (c) 1982, 1986, 1988 The Regents of the University of California.
      4  * All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  * 3. Neither the name of the University nor the names of its contributors
     15  *    may be used to endorse or promote products derived from this software
     16  *    without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     19  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     21  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     22  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     23  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     24  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     25  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     27  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     28  * SUCH DAMAGE.
     29  *
     30  *	@(#)ka730.c	7.4 (Berkeley) 5/9/91
     31  *	@(#)autoconf.c	7.20 (Berkeley) 5/9/91
     32  */
     33 
     34 /*
     35  * Copyright (c) 1994 Ludd, University of Lule}, Sweden.
     36  * All rights reserved.
     37  *
     38  * Redistribution and use in source and binary forms, with or without
     39  * modification, are permitted provided that the following conditions
     40  * are met:
     41  * 1. Redistributions of source code must retain the above copyright
     42  *    notice, this list of conditions and the following disclaimer.
     43  * 2. Redistributions in binary form must reproduce the above copyright
     44  *    notice, this list of conditions and the following disclaimer in the
     45  *    documentation and/or other materials provided with the distribution.
     46  *
     47  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     48  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     49  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     50  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     51  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     52  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     53  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     54  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     55  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     56  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     57  * SUCH DAMAGE.
     58  *
     59  *	@(#)ka730.c	7.4 (Berkeley) 5/9/91
     60  *	@(#)autoconf.c	7.20 (Berkeley) 5/9/91
     61  */
     62 
     63 #include <sys/cdefs.h>
     64 __KERNEL_RCSID(0, "$NetBSD: ka730.c,v 1.6 2017/05/22 16:46:15 ragge Exp $");
     65 
     66 #include <sys/param.h>
     67 #include <sys/systm.h>
     68 #include <sys/bus.h>
     69 #include <sys/cpu.h>
     70 #include <sys/device.h>
     71 
     72 #include <machine/ka730.h>
     73 #include <machine/clock.h>
     74 #include <machine/sid.h>
     75 
     76 #include <vax/vax/gencons.h>
     77 
     78 #include "locators.h"
     79 
     80 void	ctuattach(void);
     81 static	void ka730_clrf(void);
     82 static	void ka730_conf(void);
     83 static	void ka730_memerr(void);
     84 static	int ka730_mchk(void *t);
     85 static	void ka730_attach_cpu(device_t);
     86 
     87 static const char * const ka730_devs[] = { "cpu", "ubi", NULL };
     88 
     89 struct	cpu_dep ka730_calls = {
     90 	.cpu_mchk	= ka730_mchk,
     91 	.cpu_memerr	= ka730_memerr,
     92 	.cpu_conf	= ka730_conf,
     93 	.cpu_gettime	= generic_gettime,
     94 	.cpu_settime	= generic_settime,
     95 	.cpu_vups	= 1,	/* ~VUPS */
     96 	.cpu_scbsz	= 4,	/* SCB pages */
     97 	.cpu_clrf	= ka730_clrf,
     98 	.cpu_devs	= ka730_devs,
     99 	.cpu_attach_cpu	= ka730_attach_cpu,
    100 
    101 };
    102 
    103 void
    104 ka730_conf(void)
    105 {
    106 	/* Call ctuattach() here so it can setup its vectors. */
    107 	ctuattach();
    108 }
    109 
    110 void
    111 ka730_attach_cpu(device_t self)
    112 {
    113 	aprint_normal(": KA730, ucode rev %d\n", V730UCODE(vax_cpudata));
    114 }
    115 
    116 static void ka730_memenable(device_t, device_t, void *);
    117 static int ka730_memmatch(device_t, cfdata_t, void *);
    118 
    119 CFATTACH_DECL_NEW(mem_ubi, 0,
    120     ka730_memmatch, ka730_memenable, NULL, NULL);
    121 
    122 int
    123 ka730_memmatch(device_t parent, cfdata_t cf, void *aux)
    124 {
    125 	struct	sbi_attach_args *sa = aux;
    126 
    127 	if (cf->cf_loc[UBICF_TR] != sa->sa_nexnum &&
    128 	    cf->cf_loc[UBICF_TR] > UBICF_TR_DEFAULT)
    129 		return 0;
    130 
    131 	if (sa->sa_type != NEX_MEM16)
    132 		return 0;
    133 
    134 	return 1;
    135 }
    136 
    137 struct	mcr730 {
    138 	int	mc_addr;		/* address and syndrome */
    139 	int	mc_err;			/* error bits */
    140 };
    141 
    142 /* enable crd interrupts */
    143 void
    144 ka730_memenable(device_t parent, device_t self, void *aux)
    145 {
    146 }
    147 
    148 /* log crd errors */
    149 void
    150 ka730_memerr(void)
    151 {
    152 }
    153 
    154 #define NMC730 12
    155 const char *mc730[]={"0","1","2","3","4","5","6","7","8","9","10","11","12","13",
    156 	"14","15"};
    157 
    158 struct mc730frame {
    159 	int	mc3_bcnt;		/* byte count == 0xc */
    160 	int	mc3_summary;		/* summary parameter (as above) */
    161 	int	mc3_parm[2];		/* parameters */
    162 	int	mc3_pc;			/* trapped pc */
    163 	int	mc3_psl;		/* trapped psl */
    164 };
    165 
    166 int
    167 ka730_mchk(void *cmcf)
    168 {
    169 	register struct mc730frame *mcf = (struct mc730frame *)cmcf;
    170 	register int type = mcf->mc3_summary;
    171 
    172 	printf("machine check %x: %s\n",
    173 	       type, type < NMC730 ? mc730[type] : "???");
    174 	printf("\tparams %x %x pc %x psl %x mcesr %x\n",
    175 	       mcf->mc3_parm[0], mcf->mc3_parm[1],
    176 	       mcf->mc3_pc, mcf->mc3_psl, mfpr(PR_MCESR));
    177 	mtpr(0xf, PR_MCESR);
    178 	return (MCHK_PANIC);
    179 }
    180 
    181 void
    182 ka730_clrf(void)
    183 {
    184 	int s = splhigh();
    185 
    186 #define WAIT	while ((mfpr(PR_TXCS) & GC_RDY) == 0) ;
    187 
    188 	WAIT;
    189 
    190 	mtpr(GC_CWFL|GC_CONS, PR_TXDB);
    191 
    192 	WAIT;
    193 	mtpr(GC_CCFL|GC_CONS, PR_TXDB);
    194 
    195 	WAIT;
    196 	splx(s);
    197 }
    198