an0: device timeout on x31

Jost Tobias Springenberg jspringe at uos.de
Sun May 18 08:26:31 PDT 2008


> BTW, is your card MPI350?  Its TX desc setup looks suspecious:
> ~line 2615 if_an.c
>                         for (i = 0; i < sizeof(an_tx_desc) / 4 ; i++) {
>                                 CSR_MEM_AUX_WRITE_4(sc, AN_TX_DESC_OFFSET
>                                     /* zero for now */
>                                     + (0 * sizeof(an_tx_desc))
>                                     + (i * 4),
>                                     ((u_int32_t*)&an_tx_desc)[i]);
>                         }
> 
> Physical address of the buffer is at the high end of the TX desc, but
> valid bit is at the low end of the TX desc, which means we tell
> hardware the TX desc is valid before we tell it the buffer's physical
> address.  This probably explains the watchdog timeout.
> 
> I think if your card is MPI350, you probably want to change the above code into:
>                         for (i = sizeof(an_tx_desc) / 4 - 1; i >= 0; --i) {
>                                 CSR_MEM_AUX_WRITE_4(sc, AN_TX_DESC_OFFSET
>                                     /* zero for now */
>                                     + (0 * sizeof(an_tx_desc))
>                                     + (i * 4),
>                                     ((u_int32_t*)&an_tx_desc)[i]);
>                         }
> 

Yes my card is MPI350 i applied your patch and also tried the changes you suggested:
freezes are gone but the timeout problem remains ..
I guess the card does not like the INTR bits :).
After pushing my previous patch back in I finally seem to have a working device!

Should I post a diff with all the changes, so that you can commit them back to HEAD ?
As far as I can see the changes should not affect anything else but MPI350.

Thanks for the great fast responses, I guess I never would have sorted it out all by myself :=).
You can now call yourselves the only bsd that has a MPI350 firmware friendly an driver, 
as it seems that neither FreeBSD nor NetBSD have a working solution right now (as far as i can tell reading their code), and OpenBSD did not even recognize my card.

Best Regards,
Tobias


-- 
Jost Tobias Springenberg <jspringe at uos.de>





More information about the Bugs mailing list