e1000 driver hangs during probe

Uwe Kleine-König u.kleine-koenig at pengutronix.de
Thu Mar 9 13:18:08 PST 2017


Hello,

I work with an i.MX6 based hardware that has an i210 pcie device with
barebox 2016.11.0 (but there didn't happen anything relevant since them
if I'm not mistaken). When enabling all necessary things to make the
e1000 bind, the driver seems to hang. The problem is the following code
in e1000_get_hw_eeprom_semaphore():

        /* Get the FW semaphore. */
        timeout = hw->eeprom.word_size + 1;
        while (timeout) {
                swsm = e1000_read_reg(hw, E1000_SWSM);
                swsm |= E1000_SWSM_SWESMBI;
                e1000_write_reg(hw, E1000_SWSM, swsm);
                /* if we managed to set the bit we got the semaphore. */
                swsm = e1000_read_reg(hw, E1000_SWSM);
                if (swsm & E1000_SWSM_SWESMBI)
                        break;

                udelay(50);
                timeout--;
        }

together with the fact that hw->eeprom.word_size is either 0x200000 or
0x400000. (I saw both values already in three runs) This value is setup
in e1000_init_eeprom_params() in the hw->mac_type == e1000_igb case.

When waiting log enough the code finally terminates with a failure.

In my case there is an 8Mb-Flash equipped on NVM_* that isn't programmed
yet. (M25PE80, Page size: 256 bytes, Subsector erase: 4KB, Sector erase: 64KB,
Bulk erase: 8Mb)

Is someone able to shed some light on where the problem is?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |



More information about the barebox mailing list