-
Notifications
You must be signed in to change notification settings - Fork 38
/
pci_boards.h
133 lines (111 loc) · 4.5 KB
/
pci_boards.h
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
//
// Copyright (C) 2013-2014 Michael Geszkiewicz
//
// 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.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
//
#ifndef __PCI_BOARDS_H
#define __PCI_BOARDS_H
#include "types.h"
#include "boards.h"
#define VENDORID_MESAPCI 0x2718
#define VENDORID_PLX 0x10B5
#define VENDORID_XIO2001 0x104C
#define DEVICEID_MESA4I74 0x4174
#define DEVICEID_MESA5I24 0x5124
#define DEVICEID_MESA5I25 0x5125
#define DEVICEID_MESA5I25T 0x5925
#define DEVICEID_MESA6I24 0x6124
#define DEVICEID_MESA6I25 0x6125
#define DEVICEID_PLX9030 0x9030
#define DEVICEID_PLX9054 0x9054
#define DEVICEID_PLX9056 0x9056
#define DEVICEID_PLX8112 0x8112
#define DEVICEID_XIO2001 0x8240
#define SUBDEVICEID_MESA5I20 0x3131
#define SUBDEVICEID_MESA4I65 0x3132
#define SUBDEVICEID_MESA4I68_OLD 0x3133
#define SUBDEVICEID_MESA4I68 0x3311
#define SUBDEVICEID_MESA5I21 0x3312
#define SUBDEVICEID_MESA5I22_15 0x3313
#define SUBDEVICEID_MESA5I22_10 0x3314
#define SUBDEVICEID_MESA5I23 0x3315
#define SUBDEVICEID_MESA3X20_10 0x3427
#define SUBDEVICEID_MESA3X20_15 0x3428
#define SUBDEVICEID_MESA3X20_20 0x3429
#define SUBDEVICEID_MESA4I69_16 0x3472
#define SUBDEVICEID_MESA4I69_25 0x3473
#define EEPROM_93C66_SIZE 256
#define EEPROM_93C66_CMD_LEN 3
#define EEPROM_93C66_ADDR_LEN 8
#define EEPROM_93C66_DATA_LEN 16
#define EEPROM_93C66_CMD_WREN 4
#define EEPROM_93C66_CMD_WRITE 5
#define EEPROM_93C66_CMD_READ 6
#define EEPROM_93C66_CMD_ERASE 7
#define EEPROM_93C66_CMD_MASK 0x04
#define EEPROM_93C66_ADDR_MASK 0x80
#define EEPROM_93C66_DATA_MASK 0x8000
//
// PLX 9030 (5i20, 4i65)
//
// I/O registers
#define PLX9030_CTRL_INIT_OFFSET 0x0052
#define PLX9030_CTRL_STAT_OFFSET 0x0054 /* 9030 GPIO register (region 1) */
// bit number in 9030 INIT register
#define PLX9030_EECLK_MASK 0x0100
#define PLX9030_EECS_MASK 0x0200
#define PLX9030_EEDI_MASK 0x0400
#define PLX9030_EEDO_MASK 0x0800
// bit number in 9030 GPIO register
#define PLX9030_GPIO_3_MASK (1<<11) /* GPIO 3 */
#define PLX9030_DONE_MASK (1<<11) /* GPIO 3 */
#define PLX9030_INIT_MASK (1<<14) /* GPIO 4 */
#define PLX9030_LED_MASK (1<<17) /* GPIO 5 */
#define PLX9030_GPIO_6_MASK (1<<20) /* GPIO 6 */
#define PLX9030_WRITE_MASK (1<<23) /* GPIO 7 */
#define PLX9030_PROGRAM_MASK (1<<26) /* GPIO 8 */
// the LAS?BRD registers are in the PLX 9030
//
// The HostMot2 firmware needs the #READY bit (0x2) set in order to work,
// but the EEPROMs on some older 5i20 cards dont set them right.
// The driver detects this problem and fixes it up.
//
#define PLX9030_LAS0BRD_OFFSET 0x28
#define PLX9030_LAS1BRD_OFFSET 0x2C
#define PLX9030_LAS2BRD_OFFSET 0x30
#define PLX9030_LAS3BRD_OFFSET 0x34
#define PLX9030_LASxBRD_READY 0x2
//
// PLX 9054 (5i22, 5i23, 4i68, 4i69)
// Note: also used for the PLX 9056 (3x20)
//
// I/O register indices.
#define PLX905X_CTRL_STAT_OFFSET 0x006C // 32-bit control/status register.
#define PLX9056_VPD_ADDR 0x4E
#define PLX9056_VPD_DATA 0x50
#define PLX9056_VPD_FMASK 0x8000 // F bit in VPD address register
// bit number in 9054 GPIO register
// yes, the direction control bits are not in the same order as the I/O bits
#define PLX905X_DONE_MASK (1<<17) // GPI
#define PLX905X_PROGRAM_MASK (1<<16) // GPO, active low
#define PLX905X_DONE_ENABLE (1<<18) // GPI direction control, 1=input
#define PLX905X_PROG_ENABLE (1<<19) // GPO direction control, 1=output
/* how long should we wait for DONE when programming 9054-based cards */
#define PLX905X_DONE_WAIT 20000
int pci_boards_init(board_access_t *access);
void pci_boards_cleanup(board_access_t *access);
void pci_boards_scan(board_access_t *access);
void pci_print_info(board_t *board);
#endif