mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Trent Piepho <tpiepho@kymetacorp.com>
To: Andrey Smirnov <andrew.smirnov@gmail.com>
Cc: "barebox@lists.infradead.org" <barebox@lists.infradead.org>
Subject: Re: [PATCH 08/21] e1000: Consolidate register offset fixups
Date: Tue, 31 May 2016 20:42:58 +0000	[thread overview]
Message-ID: <1464727385.15779.125.camel@rtred1test09.kymeta.local> (raw)
In-Reply-To: <1464714580-31488-9-git-send-email-andrew.smirnov@gmail.com>

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.

> +	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: ;
  }
}

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2016-05-31 20:43 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-31 17:09 [PATCH 00/21] e1000 code cleanup and iNVM support Andrey Smirnov
2016-05-31 17:09 ` [PATCH 01/21] e1000: Split driver into multiple files Andrey Smirnov
2016-05-31 17:09 ` [PATCH 02/21] e1000: Include <net.h> in e1000.h Andrey Smirnov
2016-05-31 17:09 ` [PATCH 03/21] e1000: Convert E1000_*_REG macros to functions Andrey Smirnov
2016-05-31 17:09 ` [PATCH 04/21] e1000: Fix a bug in e1000_detect_gig_phy Andrey Smirnov
2016-05-31 17:09 ` [PATCH 05/21] e1000: Remove unnecessary variable Andrey Smirnov
2016-05-31 17:09 ` [PATCH 06/21] e1000: Do not read same register twice Andrey Smirnov
2016-05-31 17:09 ` [PATCH 07/21] e1000: Remove unneeded i210 specific register code Andrey Smirnov
2016-05-31 17:09 ` [PATCH 08/21] e1000: Consolidate register offset fixups Andrey Smirnov
2016-05-31 20:42   ` Trent Piepho [this message]
2016-06-01 21:35     ` Andrey Smirnov
2016-05-31 17:09 ` [PATCH 09/21] e1000: Remove 'use_eewr' parameter Andrey Smirnov
2016-05-31 17:09 ` [PATCH 10/21] e1000: Remove 'page_size' Andrey Smirnov
2016-05-31 17:09 ` [PATCH 11/21] e1000: Simplify EEPROM init for e1000_80003es2lan Andrey Smirnov
2016-05-31 17:09 ` [PATCH 12/21] e1000: Simplify EEPROM init for e1000_igb Andrey Smirnov
2016-05-31 17:09 ` [PATCH 13/21] e1000: Consolidate SPI EEPROM init code Andrey Smirnov
2016-05-31 17:09 ` [PATCH 14/21] e1000: Consolidate Microwire " Andrey Smirnov
2016-05-31 17:09 ` [PATCH 15/21] e1000: Fix a bug in e1000_probe() Andrey Smirnov
2016-05-31 17:09 ` [PATCH 16/21] e1000: Remove unnecessary intialization Andrey Smirnov
2016-05-31 17:09 ` [PATCH 17/21] e1000: Refactor Flash/EEPROM reading code Andrey Smirnov
2016-05-31 17:09 ` [PATCH 18/21] e1000: Properly release SW_FW_SYNC semaphore bits Andrey Smirnov
2016-05-31 17:09 ` [PATCH 19/21] e1000: Add EEPROM access locking for i210 Andrey Smirnov
2016-05-31 17:09 ` [PATCH 20/21] e1000: Add a "poll register" function Andrey Smirnov
2016-05-31 17:09 ` [PATCH 21/21] e1000: Expose i210's iNVM as a cdev Andrey Smirnov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1464727385.15779.125.camel@rtred1test09.kymeta.local \
    --to=tpiepho@kymetacorp.com \
    --cc=andrew.smirnov@gmail.com \
    --cc=barebox@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox