On Mon, Jan 25, 2021 at 7:00 AM Lorenzo Carletti <lorenzo.carlett...@gmail.com> wrote: > > In the rtl8366rb driver there are some jam tables which contain > undocumented values. > While trying to understand what these tables actually do, > I noticed a discrepancy in how one of those was treated. > Most of them were plain u16 arrays, while the ethernet one was > an u16 matrix. > By looking at the vendor's droplets of source code these tables came from, > I found out that they were all originally u16 matrixes. > > This commit standardizes the jam tables, turning them all into > u16 matrixes. > This change makes it easier to understand how the jam tables are used > and also makes it possible for a single function to handle all of them, > removing some duplicated code.
... Since further replies removed code, I reply here for everybody with an example of my thoughts against this cryptic data. If you look into the below, for example, you may notice a few things. - it pokes different address regions (sounds like data section, text section, etc.) - it has different meaning for some addresses (0xBE prefix) +static const u16 rtl8366rb_init_jam_f5d8235[][2] = { + {0x0242, 0x02BF}, {0x0245, 0x02BF}, {0x0248, 0x02BF}, {0x024B, 0x02BF}, + {0x024E, 0x02BF}, {0x0251, 0x02BF}, {0x0254, 0x0A3F}, {0x0256, 0x0A3F}, + {0x0258, 0x0A3F}, {0x025A, 0x0A3F}, {0x025C, 0x0A3F}, {0x025E, 0x0A3F}, Sounds like we program some buffer lengths / limits (0x2c0, 0xa40 if it rings any bell to anybody). + {0x0263, 0x007C}, {0x0100, 0x0004}, {0xBE5B, 0x3500}, {0x800E, 0x200F}, BE5B seems like "execute the routine at 0x3500 address". Thus I think shuffling those pairs before 0xbe shouldn't give any difference (but I have no hw to try). + {0xBE1D, 0x0F00}, {0x8001, 0x5011}, {0x800A, 0xA2F4}, {0x800B, 0x17A3}, + {0xBE4B, 0x17A3}, {0xBE41, 0x5011}, {0xBE17, 0x2100}, {0x8000, 0x8304}, + {0xBE40, 0x8304}, {0xBE4A, 0xA2F4}, {0x800C, 0xA8D5}, {0x8014, 0x5500}, + {0x8015, 0x0004}, {0xBE4C, 0xA8D5}, {0xBE59, 0x0008}, {0xBE09, 0x0E00}, + {0xBE36, 0x1036}, {0xBE37, 0x1036}, {0x800D, 0x00FF}, {0xBE4D, 0x00FF}, 0x80 addresses are some kind of magic, like interrupt vector returns or so. You may notice some 0xBE commands against the addresses that are put into the 0x8000 address region. }; Overall it seems you have to discover a full firmware image to make any assumptions about CPU ISA used there and address mapping. -- With Best Regards, Andy Shevchenko