1
2
3
4
5
6
7#ifndef _SPARC64_FHC_H
8#define _SPARC64_FHC_H
9
10#include <linux/timer.h>
11
12#include <asm/oplib.h>
13#include <asm/prom.h>
14#include <asm/upa.h>
15
16struct linux_fhc;
17
18
19#define CLOCK_CTRL 0x00UL
20#define CLOCK_STAT1 0x10UL
21#define CLOCK_STAT2 0x20UL
22#define CLOCK_PWRSTAT 0x30UL
23#define CLOCK_PWRPRES 0x40UL
24#define CLOCK_TEMP 0x50UL
25#define CLOCK_IRQDIAG 0x60UL
26#define CLOCK_PWRSTAT2 0x70UL
27
28#define CLOCK_CTRL_LLED 0x04
29#define CLOCK_CTRL_MLED 0x02
30#define CLOCK_CTRL_RLED 0x01
31
32struct linux_central {
33 struct linux_fhc *child;
34 unsigned long cfreg;
35 unsigned long clkregs;
36 unsigned long clkver;
37 int slots;
38 struct device_node *prom_node;
39
40 struct linux_prom_ranges central_ranges[PROMREG_MAX];
41 int num_central_ranges;
42};
43
44
45struct fhc_regs {
46 unsigned long pregs;
47#define FHC_PREGS_ID 0x00UL
48#define FHC_ID_VERS 0xf0000000
49#define FHC_ID_PARTID 0x0ffff000
50#define FHC_ID_MANUF 0x0000007e
51#define FHC_ID_RESV 0x00000001
52#define FHC_PREGS_RCS 0x10UL
53#define FHC_RCS_POR 0x80000000
54#define FHC_RCS_SPOR 0x40000000
55#define FHC_RCS_SXIR 0x20000000
56#define FHC_RCS_BPOR 0x10000000
57#define FHC_RCS_BXIR 0x08000000
58#define FHC_RCS_WEVENT 0x04000000
59#define FHC_RCS_CFATAL 0x02000000
60#define FHC_RCS_FENAB 0x01000000
61#define FHC_PREGS_CTRL 0x20UL
62#define FHC_CONTROL_ICS 0x00100000
63#define FHC_CONTROL_FRST 0x00080000
64#define FHC_CONTROL_LFAT 0x00040000
65#define FHC_CONTROL_SLINE 0x00010000
66#define FHC_CONTROL_DCD 0x00008000
67#define FHC_CONTROL_POFF 0x00004000
68#define FHC_CONTROL_FOFF 0x00002000
69#define FHC_CONTROL_AOFF 0x00001000
70#define FHC_CONTROL_BOFF 0x00000800
71#define FHC_CONTROL_PSOFF 0x00000400
72#define FHC_CONTROL_IXIST 0x00000200
73#define FHC_CONTROL_XMSTR 0x00000100
74#define FHC_CONTROL_LLED 0x00000040
75#define FHC_CONTROL_MLED 0x00000020
76#define FHC_CONTROL_RLED 0x00000010
77#define FHC_CONTROL_BPINS 0x00000003
78#define FHC_PREGS_BSR 0x30UL
79#define FHC_BSR_DA64 0x00040000
80#define FHC_BSR_DB64 0x00020000
81#define FHC_BSR_BID 0x0001e000
82#define FHC_BSR_SA 0x00001c00
83#define FHC_BSR_SB 0x00000380
84#define FHC_BSR_NDIAG 0x00000040
85#define FHC_BSR_NTBED 0x00000020
86#define FHC_BSR_NIA 0x0000001c
87#define FHC_BSR_SI 0x00000001
88#define FHC_PREGS_ECC 0x40UL
89#define FHC_PREGS_JCTRL 0xf0UL
90#define FHC_JTAG_CTRL_MENAB 0x80000000
91#define FHC_JTAG_CTRL_MNONE 0x40000000
92#define FHC_PREGS_JCMD 0x100UL
93 unsigned long ireg;
94#define FHC_IREG_IGN 0x00UL
95 unsigned long ffregs;
96#define FHC_FFREGS_IMAP 0x00UL
97#define FHC_FFREGS_ICLR 0x10UL
98 unsigned long sregs;
99#define FHC_SREGS_IMAP 0x00UL
100#define FHC_SREGS_ICLR 0x10UL
101 unsigned long uregs;
102#define FHC_UREGS_IMAP 0x00UL
103#define FHC_UREGS_ICLR 0x10UL
104 unsigned long tregs;
105#define FHC_TREGS_IMAP 0x00UL
106#define FHC_TREGS_ICLR 0x10UL
107};
108
109struct linux_fhc {
110 struct linux_fhc *next;
111 struct linux_central *parent;
112 struct fhc_regs fhc_regs;
113 int board;
114 int jtag_master;
115 struct device_node *prom_node;
116
117 struct linux_prom_ranges fhc_ranges[PROMREG_MAX];
118 int num_fhc_ranges;
119};
120
121extern struct linux_central *central_bus;
122
123extern void apply_central_ranges(struct linux_central *central,
124 struct linux_prom_registers *regs,
125 int nregs);
126
127extern void apply_fhc_ranges(struct linux_fhc *fhc,
128 struct linux_prom_registers *regs,
129 int nregs);
130
131#endif
132