[PATCH 08/21] e1000: Consolidate register offset fixups
Andrey Smirnov
andrew.smirnov at gmail.com
Wed Jun 1 14:35:38 PDT 2016
On Tue, May 31, 2016 at 1:42 PM, Trent Piepho <tpiepho at kymetacorp.com> wrote:
> On Tue, 2016-05-31 at 10:09 -0700, Andrey Smirnov wrote:
>> Consolidate all code taking care on CSR offset differences for i210
>> chips into a single place in the driver and integrate that
>> funcionality into E1000_{READ,WRITE}_REG macros. This way we can get
>> rid of all those
>>
>> if (hw->mac_type == e1000_igb) {
>> ....
>> } else {
>> ....
>> }
>>
>> snippets sprinkled all across the driver code.
>>
>> +
>> +static inline uint32_t e1000_true_offset(struct e1000_hw *hw, uint32_t reg)
>> +{
>
> Any reason this needs to be inlined? gcc space vs size optimization
> choice usually does the right thing.
No reason, just a leftover of copy and paste from header file (I
initially put those functions there). Will fix in v2.
>
>> + if (hw->mac_type == e1000_igb) {
>> + unsigned int i;
>> +
>> + const struct e1000_fixup_table fixup_table[] = {
>> + { E1000_EEWR, E1000_I210_EEWR },
>> + { E1000_PHY_CTRL, E1000_I210_PHY_CTRL },
>> + { E1000_EEMNGCTL, E1000_I210_EEMNGCTL },
>> + };
>> +
>> + for (i = 0; i < ARRAY_SIZE(fixup_table); i++) {
>> + if (fixup_table[i].orig == reg)
>> + return fixup_table[i].fixed;
>> + }
>
> Looping through the table on each reg access seems a bit costly. What
> if the registers with different addresses had a flag bit in their
> definition? Then you could check the bit and only translate those that
> need translating. It would also document in the register definition
> that the register got translated.
>
> #define I210_ALT 0x100000 /* register has alternate addr on I210 */
> #define E1000_EEWR (0x0102C | I210_ALT)/* EEPROM Write Register - RW */
>
> if (reg & I210_ALT) {
> reg &= ~I210_ALT;
> if (hw->mac_type == e1000_igb) {
> /* look up alternate. note a case statement can be faster... */
> case (reg) {
> case E1000_EEWR: reg = E1000_I210_EEWR; break;
> default: ;
> }
> }
>
Sure, sounds like a good idea, will do in v2.
Thanks,
Andrey
More information about the barebox
mailing list