1. 01 7月, 2006 1 次提交
  2. 18 6月, 2006 2 次提交
    • M
      [TG3]: Convert to non-LLTX · 00b70504
      Michael Chan 提交于
      Herbert Xu pointed out that it is unsafe to call netif_tx_disable()
      from LLTX drivers because it uses dev->xmit_lock to synchronize
      whereas LLTX drivers use private locks.
      
      Convert tg3 to non-LLTX to fix this issue. tg3 is a lockless driver
      where hard_start_xmit and tx completion handling can run concurrently
      under normal conditions. A tx_lock is only needed to prevent
      netif_stop_queue and netif_wake_queue race condtions when the queue
      is full.
      
      So whether we use LLTX or non-LLTX, it makes practically no
      difference.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      00b70504
    • M
      [TG3]: Add recovery logic when MMIOs are re-ordered · df3e6548
      Michael Chan 提交于
      Add recovery logic when we suspect that the system is re-ordering
      MMIOs. Re-ordered MMIOs to the send mailbox can cause bogus tx
      completions and hit BUG_ON() in the tx completion path.
      
      tg3 already has logic to handle re-ordered MMIOs by flushing the MMIOs
      that must be strictly ordered (such as the send mailbox).  Determining
      when to enable the flush is currently a manual process of adding known
      chipsets to a list.
      
      The new code replaces the BUG_ON() in the tx completion path with the
      call to tg3_tx_recover(). It will set the TG3_FLAG_MBOX_WRITE_REORDER
      flag and reset the chip later in the workqueue to recover and start
      flushing MMIOs to the mailbox.
      
      A message to report the problem will be printed. We will then decide
      whether or not to add the host bridge to the list of chipsets that do
      re-ordering.
      
      We may add some additional code later to print the host bridge's ID so
      that the user can report it more easily.
      
      The assumption that re-ordering can only happen on x86 systems is also
      removed.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      df3e6548
  3. 10 6月, 2006 1 次提交
    • D
      [TG3]: Handle Sun onboard tg3 chips more correctly. · f49639e6
      David S. Miller 提交于
      Get rid of all the SUN_570X logic and instead:
      
      1) Make sure MEMARB_ENABLE is set when we probe the SRAM
         for config information.  If that is off we will get
         timeouts.
      
      2) Always try to sync with the firmware, if there is no
         firmware running do not treat it as an error and instead
         just report it the first time we notice this condition.
      
      3) If there is no valid SRAM signature, assume the device
         is onboard by setting TG3_FLAG_EEPROM_WRITE_PROT.
      
      Update driver version and release date.
      
      With help from Michael Chan and Fabio Massimo Di Nitto.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f49639e6
  4. 30 4月, 2006 1 次提交
  5. 10 4月, 2006 2 次提交
    • M
      [TG3]: Speed up SRAM access (2nd version) · bbadf503
      Michael Chan 提交于
      Speed up SRAM read and write functions if possible by using MMIO
      instead of config. cycles. With this change, the post reset signature
      done at the end of D3 power change must now be moved before the D3
      power change.
      
      IBM reported a problem on powerpc blades during ethtool self test that
      was caused by the memory test taking excessively long. Config.  cycles
      are very slow on powerpc and the memory test can take more than 10
      seconds to complete using config. cycles.
      
      David Miller informed me that an earlier version of the patch caused
      problems on sparc64 systems with built-in tg3 chips. This version
      fixes the problem by excluding all SUN built-in tg3 chips from doing
      MMIO SRAM access.
      
      TG3_FLAG_EEPROM_WRITE_PROT is also set unconditionally when
      TG3_FLG2_SUN_570X is set. This should be sane as all SUN chips are
      built-in and do not require Vaux switching.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      bbadf503
    • M
      [TG3]: Kill some less useful flags · d2d746f8
      Michael Chan 提交于
      Kill the TG3_FLAG_NO_{TX|RX}_PSEUDO_CSUM flags because they are not
      very useful. This will free up some bits for new flags.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      d2d746f8
  6. 23 3月, 2006 2 次提交
  7. 21 3月, 2006 5 次提交
  8. 20 3月, 2006 1 次提交
    • M
      [TG3]: 40-bit DMA workaround part 2 · 4a29cc2e
      Michael Chan 提交于
      The 40-bit DMA workaround recently implemented for 5714, 5715, and
      5780 needs to be expanded because there may be other tg3 devices
      behind the EPB Express to PCIX bridge in the 5780 class device.
      
      For example, some 4-port card or mother board designs have 5704 behind
      the 5714.
      
      All devices behind the EPB require the 40-bit DMA workaround.
      
      Thanks to Chris Elmquist again for reporting the problem and testing
      the patch.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      4a29cc2e
  9. 03 2月, 2006 1 次提交
    • M
      [TG3]: Flush tg3_reset_task() · 7faa006f
      Michael Chan 提交于
      Make sure tg3_reset_task() is flushed in the close and suspend paths
      as noted by Jeff Garzik.
      
      In the close path, calling flush_scheduled_work() may cause deadlock
      if linkwatch_event() is on the workqueue. linkwatch_event() will try
      to get the rtnl_lock() which is already held by tg3_close(). So
      instead, we set a flag in tg3_reset_task() and tg3_close() polls
      the flag until it is cleared.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      7faa006f
  10. 17 1月, 2006 1 次提交
    • M
      [TG3]: Refine nvram locking · ec41c7df
      Michael Chan 提交于
      Add nvram lock count so that calls to tg3_nvram_lock()/unlock() can
      be nested. Add error checking to all callers of tg3_nvram_lock()
      where appropriate. To prevent nvram lock failures after halting the
      firmware, it is also necessary to release firmware's nvram lock in
      tg3_halt_cpu().
      
      Update version to 3.48.
      
      Based on David Miller's initial patch.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ec41c7df
  11. 29 12月, 2005 1 次提交
  12. 14 12月, 2005 1 次提交
    • M
      [TG3]: Fix low power state · 6921d201
      Michael Chan 提交于
      Fix the following bugs in tg3_set_power_state():
      
      1. Both WOL and ASF flags require switching to aux power.
      
      2. Add a missing handshake with firmware to enable WOL.
      
      3. Turn off the PHY if both WOL and ASF are disabled.
      
      4. Add nvram arbitration before halting the firmware.
      
      5. Fix tg3_setup_copper_phy() to switch to 100Mbps when
         changing to low power state.
      
      Update revision and date.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6921d201
  13. 29 10月, 2005 2 次提交
  14. 28 9月, 2005 1 次提交
    • M
      [TG3]: 5780 PHY fixes · c94e3941
      Michael Chan 提交于
      Fix 5780 PHY related problems:
      
      1. MAC_RX_MODE reset must be done before setting up the MAC_MODE
         register on 5705_PLUS chips or the chip will stop receiving after
         a while. The MAC_RX_MODE reset is needed to prevent intermittently
         losing the first receive packet on serdes chips.
      
      2. Skip MAC loopback test on 5780 because of hardware errata. Normal
         traffic including PHY loopback is not affected by the errata.
      
      3. PHY loopback fails intermittently on 5708S and this is fixed by
         putting the PHY in loopback mode first before programming the MAC
         mode register. A MAC_RX_MODE reset is also added.
      
      4. Return -EINVAL in tg3_nway_reset() if device is in TBI mode. Allow
         nway_reset if 5780S is in parallel detect mode.
      
      5. Add missing PHY IDs in KNOWN_PHY_ID() macro.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c94e3941
  15. 30 8月, 2005 3 次提交
    • M
      [TG3]: Add indirect register method for 5703 behind ICH · 6892914f
      Michael Chan 提交于
      This patch adds the new workaround for 5703 A1/A2 if it is behind
      certain ICH bridges. The workaround disables memory and uses config.
      cycles only to access all registers. The 5702/03 chips can mistakenly
      decode the special cycles from the ICH chipsets as memory write cycles,
      causing corruption of register and memory space. Only certain ICH
      bridges will drive special cycles with non-zero data during the address
      phase which can fall within the 5703's address range. This is not an ICH
      bug as the PCI spec allows non-zero address during special cycles.
      However, only these ICH bridges are known to drive non-zero addresses
      during special cycles.
      
      The indirect_lock is also changed to spin_lock_irqsave from spin_lock_bh
      because it is used in irq handler when using the indirect method to
      disable interrupts.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      6892914f
    • M
      [TG3]: Add mailbox read method · 09ee929c
      Michael Chan 提交于
      This patch adds the mailbox read method and also adds an inline function
      tw32_mailbox_f() for mailbox writes that require read flush.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      09ee929c
    • M
      [TG3]: Add basic register access function pointers · 20094930
      Michael Chan 提交于
      This patch adds the basic function pointers to do register accesses in
      the fast path. This was suggested by David Miller. The idea is that
      various register access methods for different hardware errata can easily
      be implemented with these function pointers and performance will not be
      degraded on chips that use normal register access methods.
      
      The various register read write macros (e.g. tw32, tr32, tw32_mailbox)
      are redefined to call the function pointers.
      Signed-off-by: NMichael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      20094930
  16. 26 7月, 2005 5 次提交
  17. 06 7月, 2005 1 次提交
  18. 25 6月, 2005 1 次提交
    • D
      [TG3]: Eliminate all hw IRQ handler spinlocks. · f47c11ee
      David S. Miller 提交于
      Move all driver spinlocks to be taken at sw IRQ
      context only.
      
      This fixes the skb_copy() we were doing with hw
      IRQs disabled (which is illegal and triggers a
      BUG() with HIGHMEM enabled).  It also simplifies
      the locking all over the driver tremendously.
      
      We accomplish this feat by creating a special
      sequence to synchronize with the hw IRQ handler
      using a binary state and synchronize_irq().
      This idea is from Herbert Xu.
      
      Thanks to Michael Chan for helping to track down
      all of the race conditions in initial versions
      of this code.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      f47c11ee
  19. 19 5月, 2005 2 次提交
    • D
      [TG3]: Set minimal hw interrupt mitigation. · 15f9850d
      David S. Miller 提交于
      Even though we do software interrupt mitigation
      via NAPI, it still helps to have some minimal
      hw assisted mitigation.
      
      This helps, particularly, on systems where register
      I/O overhead is much greater than the CPU horsepower.
      
      For example, it helps on NUMA systems.  In such cases
      the PIO overhead to disable interrupts for NAPI accounts
      for the majority of the packet processing cost.  The
      CPU is fast enough such that only a single packet is
      processed by each NAPI poll call.
      
      Thanks to Michael Chan for reviewing this patch.
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      15f9850d
    • D
      [TG3]: Add tagged status support. · fac9b83e
      David S. Miller 提交于
      When supported, use the TAGGED interrupt processing support
      the chip provides.  In this mode, instead of a "on/off" binary
      semaphore, an incrementing tag scheme is used to ACK interrupts.
      
      All MSI supporting chips support TAGGED mode, so the tg3_msi()
      interrupt handler uses it unconditionally.  This invariant is
      verified when MSI support is tested.
      
      Since we can invoke tg3_poll() multiple times per interrupt under
      high packet load, we fetch a new copy of the tag value in the
      status block right before we actually do the work.
      
      Also, because the tagged status tells the chip exactly which
      work we have processed, we can make two optimizations:
      
      1) tg3_restart_ints() need not check tg3_has_work()
      2) the tg3_timer() need not poke the chip 10 times per
         second to keep from losing interrupt events
      
      Based upon valuable feedback from Michael Chan <mchan@broadcom.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fac9b83e
  20. 22 4月, 2005 6 次提交