ar71xx_setup.c revision 211502
1211476Sadrian/*-
2211476Sadrian * Copyright (c) 2010 Adrian Chadd
3211476Sadrian * All rights reserved.
4211476Sadrian *
5211476Sadrian * Redistribution and use in source and binary forms, with or without
6211476Sadrian * modification, are permitted provided that the following conditions
7211476Sadrian * are met:
8211476Sadrian * 1. Redistributions of source code must retain the above copyright
9211476Sadrian *    notice, this list of conditions and the following disclaimer.
10211476Sadrian * 2. Redistributions in binary form must reproduce the above copyright
11211476Sadrian *    notice, this list of conditions and the following disclaimer in the
12211476Sadrian *    documentation and/or other materials provided with the distribution.
13211476Sadrian *
14211476Sadrian * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15211476Sadrian * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16211476Sadrian * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17211476Sadrian * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18211476Sadrian * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19211476Sadrian * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20211476Sadrian * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21211476Sadrian * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22211476Sadrian * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23211476Sadrian * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24211476Sadrian * SUCH DAMAGE.
25211476Sadrian */
26211476Sadrian
27211476Sadrian#include <sys/cdefs.h>
28211476Sadrian__FBSDID("$FreeBSD: head/sys/mips/atheros/ar71xx_setup.c 211502 2010-08-19 11:40:10Z adrian $");
29211476Sadrian
30211476Sadrian#include <sys/param.h>
31211476Sadrian#include <machine/cpuregs.h>
32211476Sadrian
33211476Sadrian#include <mips/sentry5/s5reg.h>
34211476Sadrian
35211476Sadrian#include "opt_ddb.h"
36211476Sadrian
37211476Sadrian#include <sys/param.h>
38211476Sadrian#include <sys/conf.h>
39211476Sadrian#include <sys/kernel.h>
40211476Sadrian#include <sys/systm.h>
41211476Sadrian#include <sys/bus.h>
42211476Sadrian#include <sys/cons.h>
43211476Sadrian#include <sys/kdb.h>
44211476Sadrian#include <sys/reboot.h>
45211476Sadrian
46211476Sadrian#include <vm/vm.h>
47211476Sadrian#include <vm/vm_page.h>
48211476Sadrian
49211476Sadrian#include <net/ethernet.h>
50211476Sadrian
51211476Sadrian#include <machine/clock.h>
52211476Sadrian#include <machine/cpu.h>
53211476Sadrian#include <machine/hwfunc.h>
54211476Sadrian#include <machine/md_var.h>
55211476Sadrian#include <machine/trap.h>
56211476Sadrian#include <machine/vmparam.h>
57211476Sadrian
58211476Sadrian#include <mips/atheros/ar71xxreg.h>
59211476Sadrian#include <mips/atheros/ar71xx_setup.h>
60211476Sadrian
61211476Sadrian#include <mips/atheros/ar71xx_cpudef.h>
62211476Sadrian
63211476Sadrian#include <mips/atheros/ar71xx_chip.h>
64211502Sadrian#include <mips/atheros/ar91xx_chip.h>
65211476Sadrian
66211476Sadrian#define	AR71XX_SYS_TYPE_LEN		128
67211476Sadrian
68211476Sadrianstatic char ar71xx_sys_type[AR71XX_SYS_TYPE_LEN];
69211476Sadrianenum ar71xx_soc_type ar71xx_soc;
70211476Sadrianstruct ar71xx_cpu_def * ar71xx_cpu_ops = NULL;
71211476Sadrian
72211476Sadrianvoid
73211476Sadrianar71xx_detect_sys_type(void)
74211476Sadrian{
75211476Sadrian	char *chip = "????";
76211476Sadrian	uint32_t id;
77211476Sadrian	uint32_t major;
78211476Sadrian	uint32_t minor;
79211476Sadrian	uint32_t rev = 0;
80211476Sadrian
81211476Sadrian	id = ATH_READ_REG(AR71XX_RST_RESET_REG_REV_ID);
82211476Sadrian	major = id & REV_ID_MAJOR_MASK;
83211476Sadrian
84211476Sadrian	switch (major) {
85211476Sadrian	case REV_ID_MAJOR_AR71XX:
86211476Sadrian		minor = id & AR71XX_REV_ID_MINOR_MASK;
87211476Sadrian		rev = id >> AR71XX_REV_ID_REVISION_SHIFT;
88211476Sadrian		rev &= AR71XX_REV_ID_REVISION_MASK;
89211476Sadrian		ar71xx_cpu_ops	= &ar71xx_chip_def;
90211476Sadrian		switch (minor) {
91211476Sadrian		case AR71XX_REV_ID_MINOR_AR7130:
92211476Sadrian			ar71xx_soc = AR71XX_SOC_AR7130;
93211476Sadrian			chip = "7130";
94211476Sadrian			break;
95211476Sadrian
96211476Sadrian		case AR71XX_REV_ID_MINOR_AR7141:
97211476Sadrian			ar71xx_soc = AR71XX_SOC_AR7141;
98211476Sadrian			chip = "7141";
99211476Sadrian			break;
100211476Sadrian
101211476Sadrian		case AR71XX_REV_ID_MINOR_AR7161:
102211476Sadrian			ar71xx_soc = AR71XX_SOC_AR7161;
103211476Sadrian			chip = "7161";
104211476Sadrian			break;
105211476Sadrian		}
106211476Sadrian		break;
107211476Sadrian
108211502Sadrian	case REV_ID_MAJOR_AR913X:
109211502Sadrian		minor = id & AR91XX_REV_ID_MINOR_MASK;
110211502Sadrian		rev = id >> AR91XX_REV_ID_REVISION_SHIFT;
111211502Sadrian		rev &= AR91XX_REV_ID_REVISION_MASK;
112211502Sadrian		ar71xx_cpu_ops	= &ar91xx_chip_def;
113211502Sadrian		switch (minor) {
114211502Sadrian		case AR91XX_REV_ID_MINOR_AR9130:
115211502Sadrian			ar71xx_soc = AR71XX_SOC_AR9130;
116211502Sadrian			chip = "9130";
117211502Sadrian			break;
118211502Sadrian
119211502Sadrian		case AR91XX_REV_ID_MINOR_AR9132:
120211502Sadrian			ar71xx_soc = AR71XX_SOC_AR9132;
121211502Sadrian			chip = "9132";
122211502Sadrian			break;
123211502Sadrian		}
124211502Sadrian		break;
125211502Sadrian
126211502Sadrian
127211476Sadrian	default:
128211476Sadrian		panic("ar71xx: unknown chip id:0x%08x\n", id);
129211476Sadrian	}
130211476Sadrian
131211476Sadrian	sprintf(ar71xx_sys_type, "Atheros AR%s rev %u", chip, rev);
132211476Sadrian}
133211476Sadrian
134211476Sadrianconst char *
135211476Sadrianar71xx_get_system_type(void)
136211476Sadrian{
137211476Sadrian	return ar71xx_sys_type;
138211476Sadrian}
139211476Sadrian
140