[U-Boot] [PATCH v2] Net: Add Intel E1000 82574L PCIe card support
Zang Roy-R61911
R61911 at freescale.com
Mon Apr 11 10:16:58 CEST 2011
Hi, Wolfgang
Could you help to consider this patch?
Thanks.
Roy
> -----Original Message-----
> From: Zang Roy-R61911
> Sent: Friday, January 21, 2011 11:30 AM
> To: u-boot at lists.denx.de
> Cc: Zang Roy-R61911
> Subject: [PATCH v2] Net: Add Intel E1000 82574L PCIe card support
>
> Add Intel E1000 82574L PCIe card support. Test on MPC8544DS
> and MPC8572 board.
> Add the missing contact information for future support.
>
> Signed-off-by: Roy Zang <tie-fei.zang at freescale.com>
> Acked-by: Kumar Gala <galak at kernel.crashing.org>
> ---
> minor style clean up vs. v1 version.
>
> drivers/net/e1000.c | 33 +++++++++++++++++++++++++--------
> drivers/net/e1000.h | 6 ++++++
> include/pci_ids.h | 1 +
> 3 files changed, 32 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c
> index 5f390bd..98145bc 100644
> --- a/drivers/net/e1000.c
> +++ b/drivers/net/e1000.c
> @@ -40,6 +40,8 @@ tested on both gig copper and gig fiber boards
> * Copyright (C) Linux Networx.
> * Massive upgrade to work with the new intel gigabit NICs.
> * <ebiederman at lnxi dot com>
> + *
> + * Copyright 2011 Freescale Semiconductor, Inc.
> */
>
> #include "e1000.h"
> @@ -100,6 +102,7 @@ static struct pci_device_id supported[] = {
> {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82573E},
> {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82573E_IAMT},
> {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82573L},
> + {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82574L},
> {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82546GB_QUAD_COPPER_KSP3},
> {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80003ES2LAN_COPPER_DPT},
> {PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_80003ES2LAN_SERDES_DPT},
> @@ -331,7 +334,7 @@ static boolean_t e1000_is_onboard_nvm_eeprom(struct
> e1000_hw *hw)
> if (hw->mac_type == e1000_ich8lan)
> return FALSE;
>
> - if (hw->mac_type == e1000_82573) {
> + if (hw->mac_type == e1000_82573 || hw->mac_type == e1000_82574) {
> eecd = E1000_READ_REG(hw, EECD);
>
> /* Isolate bits 15 & 16 */
> @@ -364,7 +367,7 @@ e1000_acquire_eeprom(struct e1000_hw *hw)
> return -E1000_ERR_SWFW_SYNC;
> eecd = E1000_READ_REG(hw, EECD);
>
> - if (hw->mac_type != e1000_82573) {
> + if (hw->mac_type != e1000_82573 || hw->mac_type != e1000_82574) {
> /* Request EEPROM Access */
> if (hw->mac_type > e1000_82544) {
> eecd |= E1000_EECD_REQ;
> @@ -498,6 +501,7 @@ static int32_t e1000_init_eeprom_params(struct e1000_hw
> *hw)
> eeprom->use_eewr = FALSE;
> break;
> case e1000_82573:
> + case e1000_82574:
> eeprom->type = e1000_eeprom_spi;
> eeprom->opcode_bits = 8;
> eeprom->delay_usec = 1;
> @@ -1317,6 +1321,9 @@ e1000_set_mac_type(struct e1000_hw *hw)
> case E1000_DEV_ID_82573L:
> hw->mac_type = e1000_82573;
> break;
> + case E1000_DEV_ID_82574L:
> + hw->mac_type = e1000_82574;
> + break;
> case E1000_DEV_ID_80003ES2LAN_COPPER_SPT:
> case E1000_DEV_ID_80003ES2LAN_SERDES_SPT:
> case E1000_DEV_ID_80003ES2LAN_COPPER_DPT:
> @@ -1487,6 +1494,7 @@ e1000_initialize_hardware_bits(struct e1000_hw *hw)
> E1000_WRITE_REG(hw, TARC1, reg_tarc1);
> break;
> case e1000_82573:
> + case e1000_82574:
> reg_ctrl_ext = E1000_READ_REG(hw, CTRL_EXT);
> reg_ctrl_ext &= ~(1 << 23);
> reg_ctrl_ext |= (1 << 22);
> @@ -1728,12 +1736,11 @@ e1000_init_hw(struct eth_device *nic)
> | E1000_TXDCTL_FULL_TX_DESC_WB;
> E1000_WRITE_REG(hw, TXDCTL1, ctrl);
> break;
> - }
> -
> - if (hw->mac_type == e1000_82573) {
> - uint32_t gcr = E1000_READ_REG(hw, GCR);
> - gcr |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
> - E1000_WRITE_REG(hw, GCR, gcr);
> + case e1000_82573:
> + case e1000_82574:
> + reg_data = E1000_READ_REG(hw, GCR);
> + reg_data |= E1000_GCR_L1_ACT_WITHOUT_L0S_RX;
> + E1000_WRITE_REG(hw, GCR, reg_data);
> }
>
> #if 0
> @@ -1812,6 +1819,7 @@ e1000_setup_link(struct eth_device *nic)
> switch (hw->mac_type) {
> case e1000_ich8lan:
> case e1000_82573:
> + case e1000_82574:
> hw->fc = e1000_fc_full;
> break;
> default:
> @@ -4560,6 +4568,9 @@ static int e1000_set_phy_type (struct e1000_hw *hw)
> hw->phy_type = e1000_phy_gg82563;
> break;
> }
> + case BME1000_E_PHY_ID:
> + hw->phy_type = e1000_phy_bm;
> + break;
> /* Fall Through */
> default:
> /* Should never have loaded on this device */
> @@ -4646,6 +4657,10 @@ e1000_detect_gig_phy(struct e1000_hw *hw)
> if (hw->phy_id == M88E1111_I_PHY_ID)
> match = TRUE;
> break;
> + case e1000_82574:
> + if (hw->phy_id == BME1000_E_PHY_ID)
> + match = TRUE;
> + break;
> case e1000_80003es2lan:
> if (hw->phy_id == GG82563_E_PHY_ID)
> match = TRUE;
> @@ -4710,6 +4725,7 @@ e1000_set_media_type(struct e1000_hw *hw)
> break;
> case e1000_ich8lan:
> case e1000_82573:
> + case e1000_82574:
> /* The STATUS_TBIMODE bit is reserved or reused
> * for the this device.
> */
> @@ -5125,6 +5141,7 @@ void e1000_get_bus_type(struct e1000_hw *hw)
> case e1000_82571:
> case e1000_82572:
> case e1000_82573:
> + case e1000_82574:
> case e1000_80003es2lan:
> hw->bus_type = e1000_bus_type_pci_express;
> break;
> diff --git a/drivers/net/e1000.h b/drivers/net/e1000.h
> index eb0804b..720d8c6 100644
> --- a/drivers/net/e1000.h
> +++ b/drivers/net/e1000.h
> @@ -2,6 +2,7 @@
>
>
> Copyright(c) 1999 - 2002 Intel Corporation. All rights reserved.
> + Copyright 2011 Freescale Semiconductor, Inc.
>
> This program is free software; you can redistribute it and/or modify it
> under the terms of the GNU General Public License as published by the Free
> @@ -81,6 +82,7 @@ typedef enum {
> e1000_82571,
> e1000_82572,
> e1000_82573,
> + e1000_82574,
> e1000_80003es2lan,
> e1000_ich8lan,
> e1000_num_macs
> @@ -200,6 +202,7 @@ typedef enum {
> e1000_phy_gg82563,
> e1000_phy_igp_3,
> e1000_phy_ife,
> + e1000_phy_bm,
> e1000_phy_undefined = 0xFF
> } e1000_phy_type;
>
> @@ -286,6 +289,7 @@ struct e1000_phy_stats {
> #define E1000_DEV_ID_82573E 0x108B
> #define E1000_DEV_ID_82573E_IAMT 0x108C
> #define E1000_DEV_ID_82573L 0x109A
> +#define E1000_DEV_ID_82574L 0x10D3
> #define E1000_DEV_ID_82546GB_QUAD_COPPER_KSP3 0x10B5
> #define E1000_DEV_ID_80003ES2LAN_COPPER_DPT 0x1096
> #define E1000_DEV_ID_80003ES2LAN_SERDES_DPT 0x1098
> @@ -2417,6 +2421,8 @@ struct e1000_hw {
> #define L1LXT971A_PHY_ID 0x001378E0
> #define GG82563_E_PHY_ID 0x01410CA0
>
> +#define BME1000_E_PHY_ID 0x01410CB0
> +
> /* Miscellaneous PHY bit definitions. */
> #define PHY_PREAMBLE 0xFFFFFFFF
> #define PHY_SOF 0x01
> diff --git a/include/pci_ids.h b/include/pci_ids.h
> index cb8398d..02a6c6e 100644
> --- a/include/pci_ids.h
> +++ b/include/pci_ids.h
> @@ -1853,6 +1853,7 @@
> #define PCI_DEVICE_ID_INTEL_82573E 0x108B
> #define PCI_DEVICE_ID_INTEL_82573E_IAMT 0x108C
> #define PCI_DEVICE_ID_INTEL_82573L 0x109A
> +#define PCI_DEVICE_ID_INTEL_82574L 0x10D3
> #define PCI_DEVICE_ID_INTEL_82546GB_QUAD_COPPER_KSP3 0x10B5
> #define PCI_DEVICE_ID_INTEL_80003ES2LAN_COPPER_DPT 0x1096
> #define PCI_DEVICE_ID_INTEL_80003ES2LAN_SERDES_DPT 0x1098
> --
> 1.7.3.5
More information about the U-Boot
mailing list