aboutsummaryrefslogtreecommitdiff
path: root/sys/powerpc/mpc85xx/mpc85xx.h
blob: 669e8be446a850ce5f7ef426941c433d8faf067d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
/*-
 * SPDX-License-Identifier: BSD-2-Clause
 *
 * Copyright (C) 2008 Semihalf, Rafal Jaworowski
 * Copyright 2006 by Juniper Networks.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 */

#ifndef _MPC85XX_H_
#define _MPC85XX_H_

#include <machine/platformvar.h>

/*
 * Configuration control and status registers
 */
extern vm_offset_t		ccsrbar_va;
extern vm_paddr_t		ccsrbar_pa;
extern vm_size_t		ccsrbar_size;
#define CCSRBAR_VA		ccsrbar_va
#define	OCP85XX_CCSRBAR		(CCSRBAR_VA + 0x0)
#define	OCP85XX_BPTR		(CCSRBAR_VA + 0x20)

#define	OCP85XX_BSTRH		(CCSRBAR_VA + 0x20)
#define	OCP85XX_BSTRL		(CCSRBAR_VA + 0x24)
#define	OCP85XX_BSTAR		(CCSRBAR_VA + 0x28)

#define	OCP85XX_COREDISR	(CCSRBAR_VA + 0xE0094)
#define	OCP85XX_BRR		(CCSRBAR_VA + 0xE00E4)

/*
 * Run Control and Power Management registers
 */
#define CCSR_CTBENR		(CCSRBAR_VA + 0xE2084)
#define CCSR_CTBCKSELR		(CCSRBAR_VA + 0xE208C)
#define CCSR_CTBCHLTCR		(CCSRBAR_VA + 0xE2094)

/*
 * DDR Memory controller.
 */
#define	OCP85XX_DDR1_CS0_CONFIG		(CCSRBAR_VA + 0x8080)

/*
 * E500 Coherency Module registers
 */
#define	OCP85XX_EEBPCR		(CCSRBAR_VA + 0x1010)

/*
 * Local access registers
 */
/* Write order: OCP_LAWBARH -> OCP_LAWBARL -> OCP_LAWSR */
#define	OCP85XX_LAWBARH(n)	(CCSRBAR_VA + 0xc00 + 0x10 * (n))
#define	OCP85XX_LAWBARL(n)	(CCSRBAR_VA + 0xc04 + 0x10 * (n))
#define	OCP85XX_LAWSR_QORIQ(n)	(CCSRBAR_VA + 0xc08 + 0x10 * (n))
#define	OCP85XX_LAWBAR(n)	(CCSRBAR_VA + 0xc08 + 0x10 * (n))
#define	OCP85XX_LAWSR_85XX(n)	(CCSRBAR_VA + 0xc10 + 0x10 * (n))
#define	OCP85XX_LAWSR(n)	(mpc85xx_is_qoriq() ? OCP85XX_LAWSR_QORIQ(n) : \
				 OCP85XX_LAWSR_85XX(n))

/* Attribute register */
#define	OCP85XX_ENA_MASK	0x80000000
#define	OCP85XX_DIS_MASK	0x7fffffff

#define	OCP85XX_TGTIF_LBC_QORIQ	0x1f
#define	OCP85XX_TGTIF_RAM_INTL_QORIQ	0x14
#define	OCP85XX_TGTIF_RAM1_QORIQ	0x10
#define	OCP85XX_TGTIF_RAM2_QORIQ	0x11
#define	OCP85XX_TGTIF_BMAN		0x18
#define	OCP85XX_TGTIF_DCSR		0x1D
#define	OCP85XX_TGTIF_QMAN		0x3C
#define	OCP85XX_TRGT_SHIFT_QORIQ	20

#define	OCP85XX_TGTIF_LBC_85XX	0x04
#define	OCP85XX_TGTIF_RAM_INTL_85XX	0x0b
#define	OCP85XX_TGTIF_RIO_85XX	0x0c
#define	OCP85XX_TGTIF_RAM1_85XX	0x0f
#define	OCP85XX_TGTIF_RAM2_85XX	0x16

#define	OCP85XX_TGTIF_LBC	\
    (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_LBC_QORIQ : OCP85XX_TGTIF_LBC_85XX)
#define	OCP85XX_TGTIF_RAM_INTL	\
     (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RAM_INTL_QORIQ : OCP85XX_TGTIF_RAM_INTL_85XX)
#define	OCP85XX_TGTIF_RIO	\
      (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RIO_QORIQ : OCP85XX_TGTIF_RIO_85XX)
#define	OCP85XX_TGTIF_RAM1	\
       (mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RAM1_QORIQ : OCP85XX_TGTIF_RAM1_85XX)
#define	OCP85XX_TGTIF_RAM2	\
	(mpc85xx_is_qoriq() ? OCP85XX_TGTIF_RAM2_QORIQ : OCP85XX_TGTIF_RAM2_85XX)

/*
 * L2 cache registers
 */
#define OCP85XX_L2CTL		(CCSRBAR_VA + 0x20000)

/*
 * L3 CoreNet platform cache (CPC) registers
 */
#define	OCP85XX_CPC_CSR0		(CCSRBAR_VA + 0x10000)
#define	  OCP85XX_CPC_CSR0_CE		  0x80000000
#define	  OCP85XX_CPC_CSR0_PE		  0x40000000
#define	  OCP85XX_CPC_CSR0_FI		  0x00200000
#define	  OCP85XX_CPC_CSR0_WT		  0x00080000
#define	  OCP85XX_CPC_CSR0_FL		  0x00000800
#define	  OCP85XX_CPC_CSR0_LFC		  0x00000400
#define	OCP85XX_CPC_CFG0		(CCSRBAR_VA + 0x10008)
#define	  OCP85XX_CPC_CFG_SZ_MASK	  0x00003fff
#define	  OCP85XX_CPC_CFG0_SZ_K(x)	  (((x) & OCP85XX_CPC_CFG_SZ_MASK) << 6)

/*
 * Power-On Reset configuration
 */
#define	OCP85XX_PORDEVSR	(CCSRBAR_VA + 0xe000c)
#define OCP85XX_PORDEVSR_IO_SEL	0x00780000
#define OCP85XX_PORDEVSR_IO_SEL_SHIFT 19

#define	OCP85XX_PORDEVSR2	(CCSRBAR_VA + 0xe0014)

/*
 * Status Registers.
 */
#define	OCP85XX_RSTCR		(CCSRBAR_VA + 0xe00b0)

#define	OCP85XX_CLKDVDR		(CCSRBAR_VA + 0xe0800)
#define	  OCP85XX_CLKDVDR_PXCKEN	  0x80000000
#define	  OCP85XX_CLKDVDR_SSICKEN	  0x20000000
#define	  OCP85XX_CLKDVDR_PXCKINV	  0x10000000
#define	  OCP85XX_CLKDVDR_PXCLK_MASK	  0x00FF0000
#define	  OCP85XX_CLKDVDR_SSICLK_MASK	  0x000000FF

/*
 * Run Control/Power Management Registers.
 */
#define	OCP85XX_RCPM_CDOZSR	(CCSRBAR_VA + 0xe2004)
#define	OCP85XX_RCPM_CDOZCR	(CCSRBAR_VA + 0xe200c)

/*
 * Prototypes.
 */
uint32_t ccsr_read4(uintptr_t addr);
void ccsr_write4(uintptr_t addr, uint32_t val);
int law_enable(int trgt, uint64_t bar, uint32_t size);
int law_disable(int trgt, uint64_t bar, uint32_t size);
int law_getmax(void);
int law_pci_target(struct resource *, int *, int *);

DECLARE_CLASS(mpc85xx_platform);
int mpc85xx_attach(platform_t);

void mpc85xx_enable_l3_cache(void);
int mpc85xx_is_qoriq(void);
uint32_t mpc85xx_get_platform_clock(void);
uint32_t mpc85xx_get_system_clock(void);

#endif /* _MPC85XX_H_ */