1 |
27 |
unneback |
2002-06-14 Gary Thomas
|
2 |
|
|
|
3 |
|
|
* src/if_upd985xx.c:
|
4 |
|
|
Need to include for proper configuration
|
5 |
|
|
of stand-alone (polled) vs. system (interrupt driven) mode.
|
6 |
|
|
|
7 |
|
|
2001-09-13 Hugo Tyson
|
8 |
|
|
|
9 |
|
|
* src/if_upd985xx.c (upd985xx_eth_upd985xx_init): Fake an ESA if
|
10 |
|
|
we see all ones from the EEPROM as well as all zeros.
|
11 |
|
|
|
12 |
|
|
2001-08-30 Hugo Tyson
|
13 |
|
|
|
14 |
|
|
* cdl/upd985xx_eth_drivers.cdl: Make the "..._E2ONLY" workaround
|
15 |
|
|
option on by default since this is how it will be used - the CPU
|
16 |
|
|
load does suffer somewhat if promisc mode is set in the hardware.
|
17 |
|
|
This should be unset to allow the workaround for E1 at 100Mbit.
|
18 |
|
|
|
19 |
|
|
2001-08-30 Hugo Tyson
|
20 |
|
|
|
21 |
|
|
* src/if_upd985xx.c (PacketRxReady): Re-write the manual
|
22 |
|
|
implementation of ESA matching for workaround E1E2 when the device
|
23 |
|
|
is in promiscuous mode. It was having problems with the previous
|
24 |
|
|
version; this works better.
|
25 |
|
|
|
26 |
|
|
2001-08-24 Hugo Tyson
|
27 |
|
|
|
28 |
|
|
* cdl/upd985xx_eth_drivers.cdl: Configury for an alternate case
|
29 |
|
|
where we workaround hardware bug E2 only, as a subset of the E1E2
|
30 |
|
|
complete fix. Added more description to the options too.
|
31 |
|
|
|
32 |
|
|
* src/if_upd985xx.c (eth_upd985xx_configure): Handle an alternate
|
33 |
|
|
case where we workaround hardware bug E2 only. This means leaving
|
34 |
|
|
the device in normal mode (unless set to promisc) and doing MAC
|
35 |
|
|
address filtering by hand anyway.
|
36 |
|
|
|
37 |
|
|
2001-08-20 Hugo Tyson
|
38 |
|
|
|
39 |
|
|
* src/if_upd985xx.c: Guard all entrypoints that can mess with
|
40 |
|
|
hardware state by "active" check. If the net is included in an
|
41 |
|
|
app, but not used, it is init'd but not started - this can leave a
|
42 |
|
|
pending interrupt from RedBoot's use of the network to take us
|
43 |
|
|
completely by surprise. So init() acks and masks the interrupt,
|
44 |
|
|
can_send(), recv() and deliver() now demur if not active.
|
45 |
|
|
Also some additional STATIC's on entrypoint functions.
|
46 |
|
|
|
47 |
|
|
2001-08-16 Hugo Tyson
|
48 |
|
|
|
49 |
|
|
* src/if_upd985xx.c (upd985xx_eth_upd985xx_init): If the EEPROM
|
50 |
|
|
contains nothing (or isn't fitted?) fake an ESA so we can get
|
51 |
|
|
RedBoot going on the board without special configury.
|
52 |
|
|
|
53 |
|
|
2001-08-16 Hugo Tyson
|
54 |
|
|
|
55 |
|
|
* src/if_upd985xx.c (eth_upd985xx_configure): Use smaller numbers
|
56 |
|
|
for the Tx Fill Threshold [TX_FLTH] and DMA Tx Burst Size [DTBS]
|
57 |
|
|
because the hardware is even more broken than first throught -
|
58 |
|
|
this is new information on fault E4. I also tagged this with the
|
59 |
|
|
name of the option we would use if this were cdl controlled - but
|
60 |
|
|
since it's just setup I see no need to change it, so no CDL.
|
61 |
|
|
|
62 |
|
|
2001-08-16 Hugo Tyson
|
63 |
|
|
|
64 |
|
|
* src/if_upd985xx.c (TxDone): Since it still wedged occasionally,
|
65 |
|
|
with an "out of rx buffers" status but nothing else, this is a
|
66 |
|
|
much simplified workaround for bug E8. If we see the suspect
|
67 |
|
|
transmit status, simply reset the whole subsystem there and then.
|
68 |
|
|
This leaves it in far more of a known state. It's neater anyway.
|
69 |
|
|
|
70 |
|
|
2001-08-15 Hugo Tyson
|
71 |
|
|
|
72 |
|
|
* src/if_upd985xx.c (eth_upd985xx_send): Small hacks to recover
|
73 |
|
|
from various wedged states with bogus or unexpected ETH_ISR
|
74 |
|
|
values... 0x80000000: We detect this in the deliver routine and
|
75 |
|
|
totally reset the system. "out of rx buffers" with no "good rx":
|
76 |
|
|
we unmask and check for all these RX interrupts, not just "good
|
77 |
|
|
rx". Also PacketRxReady() shortcuts to resetting the receive
|
78 |
|
|
engine when it sees the problem. I suspect these might be caused
|
79 |
|
|
by the E8 workaround below, perhaps introducing some race
|
80 |
|
|
condition with turning off the receiver just when it rx'd - and of
|
81 |
|
|
course E1E2 means it receives far more packets.
|
82 |
|
|
|
83 |
|
|
2001-08-07 Hugo Tyson
|
84 |
|
|
|
85 |
|
|
* src/if_upd985xx.c: Workaround various bugs in the hardware;
|
86 |
|
|
these workarounds are conditionally compiled via CDL options named
|
87 |
|
|
CYGOPT_DEVS_ETH_MIPS_UPD985XX_HARDWARE_BUGS_xxx in general; 'xxx'
|
88 |
|
|
is the reference for the mis-feature. All are enabled by default.
|
89 |
|
|
|
90 |
|
|
To summarize:
|
91 |
|
|
(eth_upd985xx_reset): xxx=S1: insert reads between writes to the
|
92 |
|
|
device to avoid a possible deadlock; macro FLUSH_WRITES().
|
93 |
|
|
(PacketRxReady): xxx=E1E2: we set the device in promiscuous mode
|
94 |
|
|
always, and implement ESA matching in code. The cost is small.
|
95 |
|
|
If promisc mode is set by the stack, we pass all packets.
|
96 |
|
|
(eth_upd985xx_send): xxx=E3: we copy any transmit that uses 3 or
|
97 |
|
|
more SGs into a static contiguous buffer and transmit from that
|
98 |
|
|
thus using only one buffer descriptor.
|
99 |
|
|
(eth_upd985xx_send):
|
100 |
|
|
(TxDone): xxx=E8: we make a note that a tx ended badly and when
|
101 |
|
|
starting the next tx, we disable and reset the transmitter.
|
102 |
|
|
|
103 |
|
|
* cdl/upd985xx_eth_drivers.cdl: New subcomponent for controlling
|
104 |
|
|
these workarounds: CYGPKG_DEVS_ETH_MIPS_UPD985XX_HARDWARE_BUGS.
|
105 |
|
|
"Workarounds for Ethernet Hardware bugs"
|
106 |
|
|
|
107 |
|
|
2001-07-16 Hugo Tyson
|
108 |
|
|
|
109 |
|
|
* src/if_upd985xx.c (PacketRxReady): Test for, rather than assert,
|
110 |
|
|
packet size in range. The hardware can report a tiny packet as
|
111 |
|
|
AOK, with no bad in the status, despite the doc's reassurances.
|
112 |
|
|
|
113 |
|
|
2001-07-13 Hugo Tyson
|
114 |
|
|
|
115 |
|
|
* cdl/upd985xx_eth_drivers.cdl: Turn off the startup chatter.
|
116 |
|
|
|
117 |
|
|
2001-07-13 Hugo Tyson
|
118 |
|
|
|
119 |
|
|
* src/if_upd985xx.c (TxDone): Test a few more bits for tx
|
120 |
|
|
complete; it turns out you can get tx underruns when the CPU us
|
121 |
|
|
heavily loaded, as in the tcp_echo tests with high load.
|
122 |
|
|
|
123 |
|
|
2001-07-13 Hugo Tyson
|
124 |
|
|
|
125 |
|
|
* src/if_upd985xx.c (eth_upd985xx_send): Use HAL_DCACHE_STORE()
|
126 |
|
|
rather than syncing the whole of cache every sglist entry(=mbuf).
|
127 |
|
|
Turns out the cache op must be cache line aligned to work on the
|
128 |
|
|
4120, boo, unlike other MIPS and unlike the doc, even.
|
129 |
|
|
|
130 |
|
|
2001-07-12 Hugo Tyson
|
131 |
|
|
|
132 |
|
|
* cdl/upd985xx_eth_drivers.cdl (CYGPKG_DEVS_ETH_MIPS_UPD985XX_ETH0):
|
133 |
|
|
Whole new section to address configuring the source of the MAC
|
134 |
|
|
address. Also allows configury of the device's name ("eth0") for
|
135 |
|
|
cohabitation with additional devices.
|
136 |
|
|
|
137 |
|
|
* src/if_upd985xx.c (upd985xx_eth_upd985xx_init): Pick up the ESA
|
138 |
|
|
from EEPROM if it's available, also support a fixed ESA from CDL
|
139 |
|
|
configuration land. A few minor changes to the structure
|
140 |
|
|
initialization to accommodate this; also pick up the interrupt
|
141 |
|
|
vector from struct init.
|
142 |
|
|
(eth_set_mac_address): New routine available via the ioctl()
|
143 |
|
|
entry, for use when neither a fixed nor EEPROM address is
|
144 |
|
|
available.
|
145 |
|
|
|
146 |
|
|
2001-07-12 Hugo Tyson
|
147 |
|
|
|
148 |
|
|
* src/if_upd985xx.c (NUM_RXBUFS): Reduce NUM_RXBUFS to 8; IME
|
149 |
|
|
fewer results in lost rx's in typical systems. Enlarge rx buffers
|
150 |
|
|
slightly, to accommodate oversize VLAN packets. 128 bytes extra
|
151 |
|
|
should be enough. Implemented eth_upd985xx_configure() selection
|
152 |
|
|
of promiscuous mode and allow oversize packets - up to the allowed
|
153 |
|
|
oversize. Otherwise we would get confused if a packet ate more
|
154 |
|
|
than 1 rx buffer.
|
155 |
|
|
|
156 |
|
|
2001-07-12 Hugo Tyson
|
157 |
|
|
|
158 |
|
|
* src/if_upd985xx.c: Tidy up debug print defaults; make functions
|
159 |
|
|
static; add a few extra statistics to the device object; pass a
|
160 |
|
|
p_eth_upd985xx around more consistently for if we switch to
|
161 |
|
|
multiple devices in future; comment out mii_write(); handle
|
162 |
|
|
stopping the device with a tx pending; remove some commented-out
|
163 |
|
|
templates copied from another driver; and fill in SNMP statistics.
|
164 |
|
|
In other words, many minor changes.
|
165 |
|
|
|
166 |
|
|
2001-07-11 Hugo Tyson
|
167 |
|
|
|
168 |
|
|
* src/if_upd985xx.c (PacketRxReady): Recover from running out of
|
169 |
|
|
receive buffers. All very dodgy, but it seems to work.
|
170 |
|
|
Additional efforts are also made to reset the device, having
|
171 |
|
|
realized how hard it is to re-initialize the receive engine once
|
172 |
|
|
it has been awakened.
|
173 |
|
|
|
174 |
|
|
2001-07-11 Hugo Tyson
|
175 |
|
|
|
176 |
|
|
* src/if_upd985xx.c: Efficient Rx now essentially working, with a
|
177 |
|
|
simple circular buffer, always linked into a ring, and one entry
|
178 |
|
|
of which is always NULL,NULL to bring the rx machinery to a halt.
|
179 |
|
|
If it reaches thus far the rx mechanism seems to jam; will deal
|
180 |
|
|
with that next.
|
181 |
|
|
|
182 |
|
|
2001-07-09 Hugo Tyson
|
183 |
|
|
|
184 |
|
|
* src/if_upd985xx.c: Rejigged version of the rx buffer system;
|
185 |
|
|
still not working properly, still not a good match for the
|
186 |
|
|
hardware's elusive semantics. Committed anyway, to keep it around
|
187 |
|
|
for reference.
|
188 |
|
|
(eth_upd985xx_status): Also removed all the cruft about
|
189 |
|
|
renegotiating line status; it's not needed.
|
190 |
|
|
|
191 |
|
|
2001-07-06 Hugo Tyson
|
192 |
|
|
|
193 |
|
|
* include/upd985xx_eth.h (ETH_MADR_PHY_DEVICE_PHYS_ADDRESS):
|
194 |
|
|
Change name of PHY address symbol to generic not SEEQ.
|
195 |
|
|
Comment out the non-standard symbols for useful bits that the
|
196 |
|
|
previous PHY device supported.
|
197 |
|
|
|
198 |
|
|
* src/if_upd985xx.c (eth_upd985xx_reset): If there is a valid ESA
|
199 |
|
|
in the MAC already, run with it - it would have come from the
|
200 |
|
|
not-fitted serial EEPROM, via some different registers.
|
201 |
|
|
(upd985xx_eth_upd985xx_init): Moved the call to reset about to
|
202 |
|
|
accommodate this.
|
203 |
|
|
(eth_upd985xx_status): Omit renegotiation of link properties and
|
204 |
|
|
use the intersection of the capabilities bits to report what
|
205 |
|
|
speed, duplex, we are running at. More portable.
|
206 |
|
|
(mii_write):
|
207 |
|
|
(mii_read): Change name of PHY address symbol to generic not SEEQ
|
208 |
|
|
'cos the board has changed.
|
209 |
|
|
|
210 |
|
|
2001-07-06 Hugo Tyson
|
211 |
|
|
|
212 |
|
|
* ChangeLog:
|
213 |
|
|
* cdl/upd985xx_eth_drivers.cdl:
|
214 |
|
|
* include/upd985xx_eth.h:
|
215 |
|
|
* src/if_upd985xx.c:
|
216 |
|
|
New files. Initial checkin of limping along version of
|
217 |
|
|
NEC upd985xx ethernet driver.
|
218 |
|
|
|
219 |
|
|
Limitations:
|
220 |
|
|
ESA is hard coded.
|
221 |
|
|
It talks to the PHY just to make sure - helped with debug anyway.
|
222 |
|
|
No SNMP data exported.
|
223 |
|
|
No ioctl() for promiscuous mode or VLAN mode.
|
224 |
|
|
Only one TX at once.
|
225 |
|
|
Only one RX buffer, so no RX until serviced.
|
226 |
|
|
It seems to loose interrupts - inevitably, for an eth device - and
|
227 |
|
|
there's no "catchup" defense against this yet.
|
228 |
|
|
|
229 |
|
|
It's oriented to the "old" (already) board - so the particular PHY
|
230 |
|
|
and GPIO layout.
|
231 |
|
|
|
232 |
|
|
//===========================================================================
|
233 |
|
|
//####ECOSGPLCOPYRIGHTBEGIN####
|
234 |
|
|
// -------------------------------------------
|
235 |
|
|
// This file is part of eCos, the Embedded Configurable Operating System.
|
236 |
|
|
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
|
237 |
|
|
//
|
238 |
|
|
// eCos is free software; you can redistribute it and/or modify it under
|
239 |
|
|
// the terms of the GNU General Public License as published by the Free
|
240 |
|
|
// Software Foundation; either version 2 or (at your option) any later version.
|
241 |
|
|
//
|
242 |
|
|
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
|
243 |
|
|
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
244 |
|
|
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
245 |
|
|
// for more details.
|
246 |
|
|
//
|
247 |
|
|
// You should have received a copy of the GNU General Public License along
|
248 |
|
|
// with eCos; if not, write to the Free Software Foundation, Inc.,
|
249 |
|
|
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
|
250 |
|
|
//
|
251 |
|
|
// As a special exception, if other files instantiate templates or use macros
|
252 |
|
|
// or inline functions from this file, or you compile this file and link it
|
253 |
|
|
// with other works to produce a work based on this file, this file does not
|
254 |
|
|
// by itself cause the resulting work to be covered by the GNU General Public
|
255 |
|
|
// License. However the source code for this file must still be made available
|
256 |
|
|
// in accordance with section (3) of the GNU General Public License.
|
257 |
|
|
//
|
258 |
|
|
// This exception does not invalidate any other reasons why a work based on
|
259 |
|
|
// this file might be covered by the GNU General Public License.
|
260 |
|
|
//
|
261 |
|
|
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
|
262 |
|
|
// at http://sources.redhat.com/ecos/ecos-license/
|
263 |
|
|
// -------------------------------------------
|
264 |
|
|
//####ECOSGPLCOPYRIGHTEND####
|
265 |
|
|
//===========================================================================
|