aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ppc/platforms/katana.h
blob: 0a9b036526b1dbfb6bc963c964c279341280e714 (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
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
/*
 * Definitions for Artesyn Katana750i/3750 board.
 *
 * Author: Tim Montgomery <timm@artesyncp.com>
 * Maintained by: Mark A. Greer <mgreer@mvista.com>
 *
 * Based on code done by Rabeeh Khoury - rabeeh@galileo.co.il
 * Based on code done by Mark A. Greer <mgreer@mvista.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by the
 * Free Software Foundation; either version 2 of the License, or (at your
 * option) any later version.
 */

/*
 * The MV64360 has 2 PCI buses each with 1 window from the CPU bus to
 * PCI I/O space and 4 windows from the CPU bus to PCI MEM space.
 * We'll only use one PCI MEM window on each PCI bus.
 *
 * This is the CPU physical memory map (windows must be at least 64 KB and start
 * on a boundary that is a multiple of the window size):
 *
 *    0xff800000-0xffffffff      - Boot window
 *    0xf8400000-0xf843ffff      - Internal SRAM
 *    0xf8200000-0xf83fffff      - CPLD
 *    0xf8100000-0xf810ffff      - MV64360 Registers (CONFIG_MV64X60_NEW_BASE)
 *    0xf8000000-0xf80fffff      - Socketed FLASH
 *    0xe0000000-0xefffffff      - Soldered FLASH
 *    0xc0000000-0xc3ffffff      - PCI I/O (second hose)
 *    0x80000000-0xbfffffff      - PCI MEM (second hose)
 */

#ifndef __PPC_PLATFORMS_KATANA_H
#define __PPC_PLATFORMS_KATANA_H

/* CPU Physical Memory Map setup. */
#define KATANA_BOOT_WINDOW_BASE			0xff800000
#define KATANA_BOOT_WINDOW_SIZE			0x00800000 /* 8 MB */
#define KATANA_INTERNAL_SRAM_BASE		0xf8400000
#define KATANA_CPLD_BASE			0xf8200000
#define KATANA_CPLD_SIZE			0x00200000 /* 2 MB */
#define KATANA_SOCKET_BASE			0xf8000000
#define KATANA_SOCKETED_FLASH_SIZE		0x00100000 /* 1 MB */
#define KATANA_SOLDERED_FLASH_BASE		0xe0000000
#define KATANA_SOLDERED_FLASH_SIZE		0x10000000 /* 256 MB */

#define KATANA_PCI1_MEM_START_PROC_ADDR         0x80000000
#define KATANA_PCI1_MEM_START_PCI_HI_ADDR       0x00000000
#define KATANA_PCI1_MEM_START_PCI_LO_ADDR       0x80000000
#define KATANA_PCI1_MEM_SIZE                    0x40000000 /* 1 GB */
#define KATANA_PCI1_IO_START_PROC_ADDR          0xc0000000
#define KATANA_PCI1_IO_START_PCI_ADDR           0x00000000
#define KATANA_PCI1_IO_SIZE                     0x04000000 /* 64 MB */

/* Board-specific IRQ info */
#define  KATANA_PCI_INTA_IRQ_3750		(64+8)
#define  KATANA_PCI_INTB_IRQ_3750		(64+9)
#define  KATANA_PCI_INTC_IRQ_3750		(64+10)

#define  KATANA_PCI_INTA_IRQ_750i		(64+8)
#define  KATANA_PCI_INTB_IRQ_750i		(64+9)
#define  KATANA_PCI_INTC_IRQ_750i		(64+10)
#define  KATANA_PCI_INTD_IRQ_750i		(64+14)

#define KATANA_CPLD_RST_EVENT			0x00000000
#define KATANA_CPLD_RST_CMD			0x00001000
#define KATANA_CPLD_PCI_ERR_INT_EN		0x00002000
#define KATANA_CPLD_PCI_ERR_INT_PEND		0x00003000
#define KATANA_CPLD_PRODUCT_ID			0x00004000
#define KATANA_CPLD_EREADY			0x00005000

#define KATANA_CPLD_HARDWARE_VER		0x00007000
#define KATANA_CPLD_PLD_VER			0x00008000
#define KATANA_CPLD_BD_CFG_0			0x00009000
#define KATANA_CPLD_BD_CFG_1			0x0000a000
#define KATANA_CPLD_BD_CFG_3			0x0000c000
#define KATANA_CPLD_LED				0x0000d000
#define KATANA_CPLD_RESET_OUT			0x0000e000

#define KATANA_CPLD_RST_EVENT_INITACT		0x80
#define KATANA_CPLD_RST_EVENT_SW		0x40
#define KATANA_CPLD_RST_EVENT_WD		0x20
#define KATANA_CPLD_RST_EVENT_COPS		0x10
#define KATANA_CPLD_RST_EVENT_COPH		0x08
#define KATANA_CPLD_RST_EVENT_CPCI		0x02
#define KATANA_CPLD_RST_EVENT_FP		0x01

#define KATANA_CPLD_RST_CMD_SCL			0x80
#define KATANA_CPLD_RST_CMD_SDA			0x40
#define KATANA_CPLD_RST_CMD_I2C			0x10
#define KATANA_CPLD_RST_CMD_FR			0x08
#define KATANA_CPLD_RST_CMD_SR			0x04
#define KATANA_CPLD_RST_CMD_HR			0x01

#define KATANA_CPLD_BD_CFG_0_SYSCLK_MASK	0xc0
#define KATANA_CPLD_BD_CFG_0_SYSCLK_200		0x00
#define KATANA_CPLD_BD_CFG_0_SYSCLK_166		0x80
#define KATANA_CPLD_BD_CFG_0_SYSCLK_133		0xc0
#define KATANA_CPLD_BD_CFG_0_SYSCLK_100		0x40

#define KATANA_CPLD_BD_CFG_1_FL_BANK_MASK	0x03
#define KATANA_CPLD_BD_CFG_1_FL_BANK_16MB	0x00
#define KATANA_CPLD_BD_CFG_1_FL_BANK_32MB	0x01
#define KATANA_CPLD_BD_CFG_1_FL_BANK_64MB	0x02
#define KATANA_CPLD_BD_CFG_1_FL_BANK_128MB	0x03

#define KATANA_CPLD_BD_CFG_1_FL_NUM_BANKS_MASK	0x04
#define KATANA_CPLD_BD_CFG_1_FL_NUM_BANKS_ONE	0x00
#define KATANA_CPLD_BD_CFG_1_FL_NUM_BANKS_TWO	0x04

#define KATANA_CPLD_BD_CFG_3_MONARCH		0x04

#define KATANA_CPLD_RESET_OUT_PORTSEL		0x80
#define KATANA_CPLD_RESET_OUT_WD		0x20
#define KATANA_CPLD_RESET_OUT_COPH		0x08
#define KATANA_CPLD_RESET_OUT_PCI_RST_PCI	0x02
#define KATANA_CPLD_RESET_OUT_PCI_RST_FP	0x01

#define KATANA_MBOX_RESET_REQUEST		0xC83A
#define KATANA_MBOX_RESET_ACK			0xE430
#define KATANA_MBOX_RESET_DONE			0x32E5

#define HSL_PLD_BASE				0x00010000
#define HSL_PLD_J4SGA_REG_OFF			0
#define HSL_PLD_J4GA_REG_OFF			1
#define HSL_PLD_J2GA_REG_OFF			2
#define HSL_PLD_HOT_SWAP_OFF			6
#define HSL_PLD_HOT_SWAP_LED_BIT		0x1
#define GA_MASK					0x1f
#define HSL_PLD_SIZE				0x1000
#define K3750_GPP_GEO_ADDR_PINS			0xf8000000
#define K3750_GPP_GEO_ADDR_SHIFT		27

#define K3750_GPP_EVENT_PROC_0			(1 << 21)
#define K3750_GPP_EVENT_PROC_1_2		(1 << 2)

#define PCI_VENDOR_ID_ARTESYN			0x1223
#define PCI_DEVICE_ID_KATANA_3750_PROC0		0x0041
#define PCI_DEVICE_ID_KATANA_3750_PROC1		0x0042
#define PCI_DEVICE_ID_KATANA_3750_PROC2		0x0043

#define COPROC_MEM_FUNCTION			0
#define COPROC_MEM_BAR				0
#define COPROC_REGS_FUNCTION			0
#define COPROC_REGS_BAR				4
#define COPROC_FLASH_FUNCTION			2
#define COPROC_FLASH_BAR			4

#define KATANA_IPMB_LOCAL_I2C_ADDR		0x08

#define	KATANA_DEFAULT_BAUD			9600
#define	KATANA_MPSC_CLK_SRC			8	  /* TCLK */

#define	KATANA_MTD_MONITOR_SIZE			(1 << 20) /* 1 MB */

#define	KATANA_ETH0_PHY_ADDR			12
#define	KATANA_ETH1_PHY_ADDR			11
#define	KATANA_ETH2_PHY_ADDR			4

#define KATANA_PRODUCT_ID_3750			0x01
#define KATANA_PRODUCT_ID_750i			0x02
#define KATANA_PRODUCT_ID_752i			0x04

#define KATANA_ETH_TX_QUEUE_SIZE		800
#define KATANA_ETH_RX_QUEUE_SIZE		400

#define	KATANA_ETH_PORT_CONFIG_VALUE			\
	ETH_UNICAST_NORMAL_MODE			|	\
	ETH_DEFAULT_RX_QUEUE_0			|	\
	ETH_DEFAULT_RX_ARP_QUEUE_0		|	\
	ETH_RECEIVE_BC_IF_NOT_IP_OR_ARP		|	\
	ETH_RECEIVE_BC_IF_IP			|	\
	ETH_RECEIVE_BC_IF_ARP			|	\
	ETH_CAPTURE_TCP_FRAMES_DIS		|	\
	ETH_CAPTURE_UDP_FRAMES_DIS		|	\
	ETH_DEFAULT_RX_TCP_QUEUE_0		|	\
	ETH_DEFAULT_RX_UDP_QUEUE_0		|	\
	ETH_DEFAULT_RX_BPDU_QUEUE_0

#define	KATANA_ETH_PORT_CONFIG_EXTEND_VALUE		\
	ETH_SPAN_BPDU_PACKETS_AS_NORMAL		|	\
	ETH_PARTITION_DISABLE

#define	GT_ETH_IPG_INT_RX(value)			\
	((value & 0x3fff) << 8)

#define	KATANA_ETH_PORT_SDMA_CONFIG_VALUE		\
	ETH_RX_BURST_SIZE_4_64BIT		|	\
	GT_ETH_IPG_INT_RX(0)			|	\
	ETH_TX_BURST_SIZE_4_64BIT

#define	KATANA_ETH_PORT_SERIAL_CONTROL_VALUE		\
	ETH_FORCE_LINK_PASS			|	\
	ETH_ENABLE_AUTO_NEG_FOR_DUPLX		|	\
	ETH_DISABLE_AUTO_NEG_FOR_FLOW_CTRL	|	\
	ETH_ADV_SYMMETRIC_FLOW_CTRL		|	\
	ETH_FORCE_FC_MODE_NO_PAUSE_DIS_TX	|	\
	ETH_FORCE_BP_MODE_NO_JAM		|	\
	BIT9					|	\
	ETH_DO_NOT_FORCE_LINK_FAIL		|	\
	ETH_RETRANSMIT_16_ATTEMPTS		|	\
	ETH_ENABLE_AUTO_NEG_SPEED_GMII		|	\
	ETH_DTE_ADV_0				|	\
	ETH_DISABLE_AUTO_NEG_BYPASS		|	\
	ETH_AUTO_NEG_NO_CHANGE			|	\
	ETH_MAX_RX_PACKET_9700BYTE		|	\
	ETH_CLR_EXT_LOOPBACK			|	\
	ETH_SET_FULL_DUPLEX_MODE		|	\
	ETH_ENABLE_FLOW_CTRL_TX_RX_IN_FULL_DUPLEX

#ifndef __ASSEMBLY__

typedef enum {
	KATANA_ID_3750,
	KATANA_ID_750I,
	KATANA_ID_752I,
	KATANA_ID_MAX
} katana_id_t;

#endif

static inline u32
katana_bus_freq(void __iomem *cpld_base)
{
	u8 bd_cfg_0;

	bd_cfg_0 = in_8(cpld_base + KATANA_CPLD_BD_CFG_0);

	switch (bd_cfg_0 & KATANA_CPLD_BD_CFG_0_SYSCLK_MASK) {
	case KATANA_CPLD_BD_CFG_0_SYSCLK_200:
		return 200000000;
		break;

	case KATANA_CPLD_BD_CFG_0_SYSCLK_166:
		return 166666666;
		break;

	case KATANA_CPLD_BD_CFG_0_SYSCLK_133:
		return 133333333;
		break;

	case KATANA_CPLD_BD_CFG_0_SYSCLK_100:
		return 100000000;
		break;

	default:
		return 133333333;
		break;
	}
}

#endif	/* __PPC_PLATFORMS_KATANA_H */