|
@@ -781,93 +781,6 @@ static int read_eeprom (struct eth_device *dev, int location, int addr_len)
|
|
|
return retval;
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_EEPRO100_SROM_WRITE
|
|
|
-int eepro100_write_eeprom (struct eth_device* dev, int location, int addr_len, unsigned short data)
|
|
|
-{
|
|
|
- unsigned short dataval;
|
|
|
- int enable_cmd = 0x3f | EE_EWENB_CMD;
|
|
|
- int write_cmd = location | EE_WRITE_CMD;
|
|
|
- int i;
|
|
|
- unsigned long datalong, tmplong;
|
|
|
-
|
|
|
- OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB, SCBeeprom);
|
|
|
-
|
|
|
- /* Shift the enable command bits out. */
|
|
|
- for (i = (addr_len+EE_CMD_BITS-1); i >= 0; i--)
|
|
|
- {
|
|
|
- dataval = (enable_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
|
|
|
- OUTW(dev, EE_ENB | dataval, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- }
|
|
|
-
|
|
|
- OUTW(dev, EE_ENB, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB, SCBeeprom);
|
|
|
-
|
|
|
-
|
|
|
- /* Shift the write command bits out. */
|
|
|
- for (i = (addr_len+EE_CMD_BITS-1); i >= 0; i--)
|
|
|
- {
|
|
|
- dataval = (write_cmd & (1 << i)) ? EE_DATA_WRITE : 0;
|
|
|
- OUTW(dev, EE_ENB | dataval, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- }
|
|
|
-
|
|
|
- /* Write the data */
|
|
|
- datalong= (unsigned long) ((((data) & 0x00ff) << 8) | ( (data) >> 8));
|
|
|
-
|
|
|
- for (i = 0; i< EE_DATA_BITS; i++)
|
|
|
- {
|
|
|
- /* Extract and move data bit to bit DI */
|
|
|
- dataval = ((datalong & 0x8000)>>13) ? EE_DATA_WRITE : 0;
|
|
|
-
|
|
|
- OUTW(dev, EE_ENB | dataval, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
- OUTW(dev, EE_ENB | dataval, SCBeeprom);
|
|
|
- udelay(1);
|
|
|
-
|
|
|
- datalong = datalong << 1; /* Adjust significant data bit*/
|
|
|
- }
|
|
|
-
|
|
|
- /* Finish up command (toggle CS) */
|
|
|
- OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom);
|
|
|
- udelay(1); /* delay for more than 250 ns */
|
|
|
- OUTW(dev, EE_ENB, SCBeeprom);
|
|
|
-
|
|
|
- /* Wait for programming ready (D0 = 1) */
|
|
|
- tmplong = 10;
|
|
|
- do
|
|
|
- {
|
|
|
- dataval = INW(dev, SCBeeprom);
|
|
|
- if (dataval & EE_DATA_READ)
|
|
|
- break;
|
|
|
- udelay(10000);
|
|
|
- }
|
|
|
- while (-- tmplong);
|
|
|
-
|
|
|
- if (tmplong == 0)
|
|
|
- {
|
|
|
- printf ("Write i82559 eeprom timed out (100 ms waiting for data ready.\n");
|
|
|
- return -1;
|
|
|
- }
|
|
|
-
|
|
|
- /* Terminate the EEPROM access. */
|
|
|
- OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-#endif
|
|
|
-
|
|
|
static void init_rx_ring (struct eth_device *dev)
|
|
|
{
|
|
|
int i;
|