• Rasmus Villemoes's avatar
    ethernet: ucc_geth: fix definition and size of ucc_geth_tx_global_pram · 887078de
    Rasmus Villemoes authored
    Table 8-53 in the QUICC Engine Reference manual shows definitions of
    fields up to a size of 192 bytes, not just 128. But in table 8-111,
    one does find the text
    
      Base Address of the Global Transmitter Parameter RAM Page. [...]
      The user needs to allocate 128 bytes for this page. The address must
      be aligned to the page size.
    
    I've checked both rev. 7 (11/2015) and rev. 9 (05/2018) of the manual;
    they both have this inconsistency (and the table numbers are the
    same).
    
    Adding a bit of debug printing, on my board the struct
    ucc_geth_tx_global_pram is allocated at offset 0x880, while
    the (opaque) ucc_geth_thread_data_tx gets allocated immediately
    afterwards, at 0x900. So whatever the engine writes into the thread
    data overlaps with the tail of the global tx pram (and devmem says
    that something does get written during a simple ping).
    
    I haven't observed any failure that could be attributed to this, but
    it seems to be the kind of thing that would be extremely hard to
    debug. So extend the struct definition so that we do allocate 192
    bytes.
    Signed-off-by: default avatarRasmus Villemoes <rasmus.villemoes@prevas.dk>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    887078de
ucc_geth.h 44.7 KB