* Re: r8169 chips on some Intel D945GSEJT boards fail to work after PXE boot
From: Simon Farnsworth @ 2009-10-05 9:47 UTC (permalink / raw)
To: Francois Romieu; +Cc: netdev
In-Reply-To: <20090930220702.GA15415@electric-eye.fr.zoreil.com>
Francois Romieu wrote:
> Simon Farnsworth <simon.farnsworth@onelan.com> :
[...]
>> Is my assumption wrong? If not, is there anything else I can do that
>> would help you diagnose this?
>
> Try this against 2.6.31 or latest -rc.
This worked for my boards.
Thanks for your help,
Tested-By: Simon Farnsworth <simon.farnsworth@onelan.com>
>
>
> diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
> index 50c6a3c..74488a6 100644
> --- a/drivers/net/r8169.c
> +++ b/drivers/net/r8169.c
> @@ -115,7 +115,9 @@ enum mac_version {
> RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
> RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
> RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
> - RTL_GIGA_MAC_VER_25 = 0x19 // 8168D
> + RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
> + RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
> + RTL_GIGA_MAC_VER_27 = 0x1b // 8168DP
> };
>
> #define _R(NAME,MAC,MASK) \
> @@ -150,7 +152,9 @@ static const struct {
> _R("RTL8168c/8111c", RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
> _R("RTL8168cp/8111cp", RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
> _R("RTL8168cp/8111cp", RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
> - _R("RTL8168d/8111d", RTL_GIGA_MAC_VER_25, 0xff7e1880) // PCI-E
> + _R("RTL8168d/8111d", RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
> + _R("RTL8168d/8111d", RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
> + _R("RTL8168dp/8111dp", RTL_GIGA_MAC_VER_27, 0xff7e1880) // PCI-E
> };
> #undef _R
>
> @@ -253,6 +257,13 @@ enum rtl8168_8101_registers {
> DBG_REG = 0xd1,
> #define FIX_NAK_1 (1 << 4)
> #define FIX_NAK_2 (1 << 3)
> + EFUSEAR = 0xdc,
> +#define EFUSEAR_FLAG 0x80000000
> +#define EFUSEAR_WRITE_CMD 0x80000000
> +#define EFUSEAR_READ_CMD 0x00000000
> +#define EFUSEAR_REG_MASK 0x03ff
> +#define EFUSEAR_REG_SHIFT 8
> +#define EFUSEAR_DATA_MASK 0xff
> };
>
> enum rtl_register_content {
> @@ -568,6 +579,14 @@ static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
> mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
> }
>
> +static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m)
> +{
> + int val;
> +
> + val = mdio_read(ioaddr, reg_addr);
> + mdio_write(ioaddr, reg_addr, (val | p) & ~m);
> +}
> +
> static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
> int val)
> {
> @@ -651,6 +670,24 @@ static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
> return value;
> }
>
> +static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
> +{
> + u8 value = 0xff;
> + unsigned int i;
> +
> + RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
> +
> + for (i = 0; i < 300; i++) {
> + if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
> + value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
> + break;
> + }
> + udelay(100);
> + }
> +
> + return value;
> +}
> +
> static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
> {
> RTL_W16(IntrMask, 0x0000);
> @@ -1243,7 +1280,10 @@ static void rtl8169_get_mac_version(struct rtl8169_private *tp,
> int mac_version;
> } mac_info[] = {
> /* 8168D family. */
> - { 0x7c800000, 0x28000000, RTL_GIGA_MAC_VER_25 },
> + { 0x7cf00000, 0x28300000, RTL_GIGA_MAC_VER_26 },
> + { 0x7cf00000, 0x28100000, RTL_GIGA_MAC_VER_25 },
> + { 0x7c800000, 0x28800000, RTL_GIGA_MAC_VER_27 },
> + { 0x7c800000, 0x28000000, RTL_GIGA_MAC_VER_26 },
>
> /* 8168C family. */
> { 0x7cf00000, 0x3ca00000, RTL_GIGA_MAC_VER_24 },
> @@ -1648,74 +1688,903 @@ static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
> rtl8168c_3_hw_phy_config(ioaddr);
> }
>
> -static void rtl8168d_hw_phy_config(void __iomem *ioaddr)
> +static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
> {
> struct phy_reg phy_reg_init_0[] = {
> { 0x1f, 0x0001 },
> - { 0x09, 0x2770 },
> - { 0x08, 0x04d0 },
> - { 0x0b, 0xad15 },
> - { 0x0c, 0x5bf0 },
> - { 0x1c, 0xf101 },
> + { 0x06, 0x4064 },
> + { 0x07, 0x2863 },
> + { 0x08, 0x059c },
> + { 0x09, 0x26b4 },
> + { 0x0a, 0x6a19 },
> + { 0x0b, 0xdcc8 },
> + { 0x10, 0xf06d },
> + { 0x14, 0x7f68 },
> + { 0x18, 0x7fd9 },
> + { 0x1c, 0xf0ff },
> + { 0x1d, 0x3d9c },
> { 0x1f, 0x0003 },
> - { 0x14, 0x94d7 },
> - { 0x12, 0xf4d6 },
> - { 0x09, 0xca0f },
> - { 0x1f, 0x0002 },
> - { 0x0b, 0x0b10 },
> - { 0x0c, 0xd1f7 },
> - { 0x1f, 0x0002 },
> - { 0x06, 0x5461 },
> + { 0x12, 0xf49f },
> + { 0x13, 0x070b },
> + { 0x1a, 0x05ad },
> + { 0x14, 0x94c0 }
> + };
> + struct phy_reg phy_reg_init_1[] = {
> { 0x1f, 0x0002 },
> - { 0x05, 0x6662 },
> + { 0x06, 0x5561 },
> + { 0x1f, 0x0005 },
> + { 0x05, 0x8332 },
> + { 0x06, 0x5561 }
> + };
> + struct phy_reg phy_reg_init_2[] = {
> + { 0x1f, 0x0005 },
> + { 0x05, 0xffc2 },
> + { 0x1f, 0x0005 },
> + { 0x05, 0x8000 },
> + { 0x06, 0xf8f9 },
> + { 0x06, 0xfaef },
> + { 0x06, 0x59ee },
> + { 0x06, 0xf8ea },
> + { 0x06, 0x00ee },
> + { 0x06, 0xf8eb },
> + { 0x06, 0x00e0 },
> + { 0x06, 0xf87c },
> + { 0x06, 0xe1f8 },
> + { 0x06, 0x7d59 },
> + { 0x06, 0x0fef },
> + { 0x06, 0x0139 },
> + { 0x06, 0x029e },
> + { 0x06, 0x06ef },
> + { 0x06, 0x1039 },
> + { 0x06, 0x089f },
> + { 0x06, 0x2aee },
> + { 0x06, 0xf8ea },
> + { 0x06, 0x00ee },
> + { 0x06, 0xf8eb },
> + { 0x06, 0x01e0 },
> + { 0x06, 0xf87c },
> + { 0x06, 0xe1f8 },
> + { 0x06, 0x7d58 },
> + { 0x06, 0x409e },
> + { 0x06, 0x0f39 },
> + { 0x06, 0x46aa },
> + { 0x06, 0x0bbf },
> + { 0x06, 0x8290 },
> + { 0x06, 0xd682 },
> + { 0x06, 0x9802 },
> + { 0x06, 0x014f },
> + { 0x06, 0xae09 },
> + { 0x06, 0xbf82 },
> + { 0x06, 0x98d6 },
> + { 0x06, 0x82a0 },
> + { 0x06, 0x0201 },
> + { 0x06, 0x4fef },
> + { 0x06, 0x95fe },
> + { 0x06, 0xfdfc },
> + { 0x06, 0x05f8 },
> + { 0x06, 0xf9fa },
> + { 0x06, 0xeef8 },
> + { 0x06, 0xea00 },
> + { 0x06, 0xeef8 },
> + { 0x06, 0xeb00 },
> + { 0x06, 0xe2f8 },
> + { 0x06, 0x7ce3 },
> + { 0x06, 0xf87d },
> + { 0x06, 0xa511 },
> + { 0x06, 0x1112 },
> + { 0x06, 0xd240 },
> + { 0x06, 0xd644 },
> + { 0x06, 0x4402 },
> + { 0x06, 0x8217 },
> + { 0x06, 0xd2a0 },
> + { 0x06, 0xd6aa },
> + { 0x06, 0xaa02 },
> + { 0x06, 0x8217 },
> + { 0x06, 0xae0f },
> + { 0x06, 0xa544 },
> + { 0x06, 0x4402 },
> + { 0x06, 0xae4d },
> + { 0x06, 0xa5aa },
> + { 0x06, 0xaa02 },
> + { 0x06, 0xae47 },
> + { 0x06, 0xaf82 },
> + { 0x06, 0x13ee },
> + { 0x06, 0x834e },
> + { 0x06, 0x00ee },
> + { 0x06, 0x834d },
> + { 0x06, 0x0fee },
> + { 0x06, 0x834c },
> + { 0x06, 0x0fee },
> + { 0x06, 0x834f },
> + { 0x06, 0x00ee },
> + { 0x06, 0x8351 },
> + { 0x06, 0x00ee },
> + { 0x06, 0x834a },
> + { 0x06, 0xffee },
> + { 0x06, 0x834b },
> + { 0x06, 0xffe0 },
> + { 0x06, 0x8330 },
> + { 0x06, 0xe183 },
> + { 0x06, 0x3158 },
> + { 0x06, 0xfee4 },
> + { 0x06, 0xf88a },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x8be0 },
> + { 0x06, 0x8332 },
> + { 0x06, 0xe183 },
> + { 0x06, 0x3359 },
> + { 0x06, 0x0fe2 },
> + { 0x06, 0x834d },
> + { 0x06, 0x0c24 },
> + { 0x06, 0x5af0 },
> + { 0x06, 0x1e12 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x8ce5 },
> + { 0x06, 0xf88d },
> + { 0x06, 0xaf82 },
> + { 0x06, 0x13e0 },
> + { 0x06, 0x834f },
> + { 0x06, 0x10e4 },
> + { 0x06, 0x834f },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x009f },
> + { 0x06, 0x0ae0 },
> + { 0x06, 0x834f },
> + { 0x06, 0xa010 },
> + { 0x06, 0xa5ee },
> + { 0x06, 0x834e },
> + { 0x06, 0x01e0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7805 },
> + { 0x06, 0x9e9a },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x049e },
> + { 0x06, 0x10e0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7803 },
> + { 0x06, 0x9e0f },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x019e },
> + { 0x06, 0x05ae },
> + { 0x06, 0x0caf },
> + { 0x06, 0x81f8 },
> + { 0x06, 0xaf81 },
> + { 0x06, 0xa3af },
> + { 0x06, 0x81dc },
> + { 0x06, 0xaf82 },
> + { 0x06, 0x13ee },
> + { 0x06, 0x8348 },
> + { 0x06, 0x00ee },
> + { 0x06, 0x8349 },
> + { 0x06, 0x00e0 },
> + { 0x06, 0x8351 },
> + { 0x06, 0x10e4 },
> + { 0x06, 0x8351 },
> + { 0x06, 0x5801 },
> + { 0x06, 0x9fea },
> + { 0x06, 0xd000 },
> + { 0x06, 0xd180 },
> + { 0x06, 0x1f66 },
> + { 0x06, 0xe2f8 },
> + { 0x06, 0xeae3 },
> + { 0x06, 0xf8eb },
> + { 0x06, 0x5af8 },
> + { 0x06, 0x1e20 },
> + { 0x06, 0xe6f8 },
> + { 0x06, 0xeae5 },
> + { 0x06, 0xf8eb },
> + { 0x06, 0xd302 },
> + { 0x06, 0xb3fe },
> + { 0x06, 0xe2f8 },
> + { 0x06, 0x7cef },
> + { 0x06, 0x325b },
> + { 0x06, 0x80e3 },
> + { 0x06, 0xf87d },
> + { 0x06, 0x9e03 },
> + { 0x06, 0x7dff },
> + { 0x06, 0xff0d },
> + { 0x06, 0x581c },
> + { 0x06, 0x551a },
> + { 0x06, 0x6511 },
> + { 0x06, 0xa190 },
> + { 0x06, 0xd3e2 },
> + { 0x06, 0x8348 },
> + { 0x06, 0xe383 },
> + { 0x06, 0x491b },
> + { 0x06, 0x56ab },
> + { 0x06, 0x08ef },
> + { 0x06, 0x56e6 },
> + { 0x06, 0x8348 },
> + { 0x06, 0xe783 },
> + { 0x06, 0x4910 },
> + { 0x06, 0xd180 },
> + { 0x06, 0x1f66 },
> + { 0x06, 0xa004 },
> + { 0x06, 0xb9e2 },
> + { 0x06, 0x8348 },
> + { 0x06, 0xe383 },
> + { 0x06, 0x49ef },
> + { 0x06, 0x65e2 },
> + { 0x06, 0x834a },
> + { 0x06, 0xe383 },
> + { 0x06, 0x4b1b },
> + { 0x06, 0x56aa },
> + { 0x06, 0x0eef },
> + { 0x06, 0x56e6 },
> + { 0x06, 0x834a },
> + { 0x06, 0xe783 },
> + { 0x06, 0x4be2 },
> + { 0x06, 0x834d },
> + { 0x06, 0xe683 },
> + { 0x06, 0x4ce0 },
> + { 0x06, 0x834d },
> + { 0x06, 0xa000 },
> + { 0x06, 0x0caf },
> + { 0x06, 0x81dc },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4d10 },
> + { 0x06, 0xe483 },
> + { 0x06, 0x4dae },
> + { 0x06, 0x0480 },
> + { 0x06, 0xe483 },
> + { 0x06, 0x4de0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7803 },
> + { 0x06, 0x9e0b },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x049e },
> + { 0x06, 0x04ee },
> + { 0x06, 0x834e },
> + { 0x06, 0x02e0 },
> + { 0x06, 0x8332 },
> + { 0x06, 0xe183 },
> + { 0x06, 0x3359 },
> + { 0x06, 0x0fe2 },
> + { 0x06, 0x834d },
> + { 0x06, 0x0c24 },
> + { 0x06, 0x5af0 },
> + { 0x06, 0x1e12 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x8ce5 },
> + { 0x06, 0xf88d },
> + { 0x06, 0xe083 },
> + { 0x06, 0x30e1 },
> + { 0x06, 0x8331 },
> + { 0x06, 0x6801 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x8ae5 },
> + { 0x06, 0xf88b },
> + { 0x06, 0xae37 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4e03 },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4ce1 },
> + { 0x06, 0x834d },
> + { 0x06, 0x1b01 },
> + { 0x06, 0x9e04 },
> + { 0x06, 0xaaa1 },
> + { 0x06, 0xaea8 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4e04 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4f00 },
> + { 0x06, 0xaeab },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4f78 },
> + { 0x06, 0x039f },
> + { 0x06, 0x14ee },
> + { 0x06, 0x834e },
> + { 0x06, 0x05d2 },
> + { 0x06, 0x40d6 },
> + { 0x06, 0x5554 },
> + { 0x06, 0x0282 },
> + { 0x06, 0x17d2 },
> + { 0x06, 0xa0d6 },
> + { 0x06, 0xba00 },
> + { 0x06, 0x0282 },
> + { 0x06, 0x17fe },
> + { 0x06, 0xfdfc },
> + { 0x06, 0x05f8 },
> + { 0x06, 0xe0f8 },
> + { 0x06, 0x60e1 },
> + { 0x06, 0xf861 },
> + { 0x06, 0x6802 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x60e5 },
> + { 0x06, 0xf861 },
> + { 0x06, 0xe0f8 },
> + { 0x06, 0x48e1 },
> + { 0x06, 0xf849 },
> + { 0x06, 0x580f },
> + { 0x06, 0x1e02 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x48e5 },
> + { 0x06, 0xf849 },
> + { 0x06, 0xd000 },
> + { 0x06, 0x0282 },
> + { 0x06, 0x5bbf },
> + { 0x06, 0x8350 },
> + { 0x06, 0xef46 },
> + { 0x06, 0xdc19 },
> + { 0x06, 0xddd0 },
> + { 0x06, 0x0102 },
> + { 0x06, 0x825b },
> + { 0x06, 0x0282 },
> + { 0x06, 0x77e0 },
> + { 0x06, 0xf860 },
> + { 0x06, 0xe1f8 },
> + { 0x06, 0x6158 },
> + { 0x06, 0xfde4 },
> + { 0x06, 0xf860 },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x61fc },
> + { 0x06, 0x04f9 },
> + { 0x06, 0xfafb },
> + { 0x06, 0xc6bf },
> + { 0x06, 0xf840 },
> + { 0x06, 0xbe83 },
> + { 0x06, 0x50a0 },
> + { 0x06, 0x0101 },
> + { 0x06, 0x071b },
> + { 0x06, 0x89cf },
> + { 0x06, 0xd208 },
> + { 0x06, 0xebdb },
> + { 0x06, 0x19b2 },
> + { 0x06, 0xfbff },
> + { 0x06, 0xfefd },
> + { 0x06, 0x04f8 },
> + { 0x06, 0xe0f8 },
> + { 0x06, 0x48e1 },
> + { 0x06, 0xf849 },
> + { 0x06, 0x6808 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x48e5 },
> + { 0x06, 0xf849 },
> + { 0x06, 0x58f7 },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x48e5 },
> + { 0x06, 0xf849 },
> + { 0x06, 0xfc04 },
> + { 0x06, 0x4d20 },
> + { 0x06, 0x0002 },
> + { 0x06, 0x4e22 },
> + { 0x06, 0x0002 },
> + { 0x06, 0x4ddf },
> + { 0x06, 0xff01 },
> + { 0x06, 0x4edd },
> + { 0x06, 0xff01 },
> + { 0x05, 0x83d4 },
> + { 0x06, 0x8000 },
> + { 0x05, 0x83d8 },
> + { 0x06, 0x8051 },
> + { 0x02, 0x6010 },
> + { 0x03, 0xdc00 },
> + { 0x05, 0xfff6 },
> + { 0x06, 0x00fc },
> { 0x1f, 0x0000 },
> - { 0x14, 0x0060 },
> +
> { 0x1f, 0x0000 },
> - { 0x0d, 0xf8a0 },
> + { 0x0d, 0xf880 },
> + { 0x1f, 0x0000 }
> + };
> +
> + rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
> +
> + mdio_write(ioaddr, 0x1f, 0x0002);
> + mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
> + mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
> +
> + rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
> +
> + if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
> + struct phy_reg phy_reg_init[] = {
> + { 0x1f, 0x0002 },
> + { 0x05, 0x669a },
> + { 0x1f, 0x0005 },
> + { 0x05, 0x8330 },
> + { 0x06, 0x669a },
> + { 0x1f, 0x0002 }
> + };
> + int val;
> +
> + rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
> +
> + val = mdio_read(ioaddr, 0x0d);
> +
> + if ((val & 0x00ff) != 0x006c) {
> + u32 set[] = {
> + 0x0065, 0x0066, 0x0067, 0x0068,
> + 0x0069, 0x006a, 0x006b, 0x006c
> + };
> + int i;
> +
> + mdio_write(ioaddr, 0x1f, 0x0002);
> +
> + val &= 0xff00;
> + for (i = 0; i < ARRAY_SIZE(set); i++)
> + mdio_write(ioaddr, 0x0d, val | set[i]);
> + }
> + } else {
> + struct phy_reg phy_reg_init[] = {
> + { 0x1f, 0x0002 },
> + { 0x05, 0x6662 },
> + { 0x1f, 0x0005 },
> + { 0x05, 0x8330 },
> + { 0x06, 0x6662 }
> + };
> +
> + rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
> + }
> +
> + mdio_write(ioaddr, 0x1f, 0x0002);
> + mdio_patch(ioaddr, 0x0d, 0x0300);
> + mdio_patch(ioaddr, 0x0f, 0x0010);
> +
> + mdio_write(ioaddr, 0x1f, 0x0002);
> + mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
> + mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
> +
> + rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
> +}
> +
> +static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
> +{
> + struct phy_reg phy_reg_init_0[] = {
> + { 0x1f, 0x0001 },
> + { 0x06, 0x4064 },
> + { 0x07, 0x2863 },
> + { 0x08, 0x059c },
> + { 0x09, 0x26b4 },
> + { 0x0a, 0x6a19 },
> + { 0x0b, 0xdcc8 },
> + { 0x10, 0xf06d },
> + { 0x14, 0x7f68 },
> + { 0x18, 0x7fd9 },
> + { 0x1c, 0xf0ff },
> + { 0x1d, 0x3d9c },
> + { 0x1f, 0x0003 },
> + { 0x12, 0xf49f },
> + { 0x13, 0x070b },
> + { 0x1a, 0x05ad },
> + { 0x14, 0x94c0 },
> +
> + { 0x1f, 0x0002 },
> + { 0x06, 0x5561 },
> { 0x1f, 0x0005 },
> - { 0x05, 0xffc2 }
> + { 0x05, 0x8332 },
> + { 0x06, 0x5561 }
> + };
> + struct phy_reg phy_reg_init_1[] = {
> + { 0x1f, 0x0005 },
> + { 0x05, 0xffc2 },
> + { 0x1f, 0x0005 },
> + { 0x05, 0x8000 },
> + { 0x06, 0xf8f9 },
> + { 0x06, 0xfaee },
> + { 0x06, 0xf8ea },
> + { 0x06, 0x00ee },
> + { 0x06, 0xf8eb },
> + { 0x06, 0x00e2 },
> + { 0x06, 0xf87c },
> + { 0x06, 0xe3f8 },
> + { 0x06, 0x7da5 },
> + { 0x06, 0x1111 },
> + { 0x06, 0x12d2 },
> + { 0x06, 0x40d6 },
> + { 0x06, 0x4444 },
> + { 0x06, 0x0281 },
> + { 0x06, 0xc6d2 },
> + { 0x06, 0xa0d6 },
> + { 0x06, 0xaaaa },
> + { 0x06, 0x0281 },
> + { 0x06, 0xc6ae },
> + { 0x06, 0x0fa5 },
> + { 0x06, 0x4444 },
> + { 0x06, 0x02ae },
> + { 0x06, 0x4da5 },
> + { 0x06, 0xaaaa },
> + { 0x06, 0x02ae },
> + { 0x06, 0x47af },
> + { 0x06, 0x81c2 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4e00 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4d0f },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4c0f },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4f00 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x5100 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4aff },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4bff },
> + { 0x06, 0xe083 },
> + { 0x06, 0x30e1 },
> + { 0x06, 0x8331 },
> + { 0x06, 0x58fe },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x8ae5 },
> + { 0x06, 0xf88b },
> + { 0x06, 0xe083 },
> + { 0x06, 0x32e1 },
> + { 0x06, 0x8333 },
> + { 0x06, 0x590f },
> + { 0x06, 0xe283 },
> + { 0x06, 0x4d0c },
> + { 0x06, 0x245a },
> + { 0x06, 0xf01e },
> + { 0x06, 0x12e4 },
> + { 0x06, 0xf88c },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x8daf },
> + { 0x06, 0x81c2 },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4f10 },
> + { 0x06, 0xe483 },
> + { 0x06, 0x4fe0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7800 },
> + { 0x06, 0x9f0a },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4fa0 },
> + { 0x06, 0x10a5 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4e01 },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x059e },
> + { 0x06, 0x9ae0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7804 },
> + { 0x06, 0x9e10 },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x039e },
> + { 0x06, 0x0fe0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7801 },
> + { 0x06, 0x9e05 },
> + { 0x06, 0xae0c },
> + { 0x06, 0xaf81 },
> + { 0x06, 0xa7af },
> + { 0x06, 0x8152 },
> + { 0x06, 0xaf81 },
> + { 0x06, 0x8baf },
> + { 0x06, 0x81c2 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4800 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4900 },
> + { 0x06, 0xe083 },
> + { 0x06, 0x5110 },
> + { 0x06, 0xe483 },
> + { 0x06, 0x5158 },
> + { 0x06, 0x019f },
> + { 0x06, 0xead0 },
> + { 0x06, 0x00d1 },
> + { 0x06, 0x801f },
> + { 0x06, 0x66e2 },
> + { 0x06, 0xf8ea },
> + { 0x06, 0xe3f8 },
> + { 0x06, 0xeb5a },
> + { 0x06, 0xf81e },
> + { 0x06, 0x20e6 },
> + { 0x06, 0xf8ea },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0xebd3 },
> + { 0x06, 0x02b3 },
> + { 0x06, 0xfee2 },
> + { 0x06, 0xf87c },
> + { 0x06, 0xef32 },
> + { 0x06, 0x5b80 },
> + { 0x06, 0xe3f8 },
> + { 0x06, 0x7d9e },
> + { 0x06, 0x037d },
> + { 0x06, 0xffff },
> + { 0x06, 0x0d58 },
> + { 0x06, 0x1c55 },
> + { 0x06, 0x1a65 },
> + { 0x06, 0x11a1 },
> + { 0x06, 0x90d3 },
> + { 0x06, 0xe283 },
> + { 0x06, 0x48e3 },
> + { 0x06, 0x8349 },
> + { 0x06, 0x1b56 },
> + { 0x06, 0xab08 },
> + { 0x06, 0xef56 },
> + { 0x06, 0xe683 },
> + { 0x06, 0x48e7 },
> + { 0x06, 0x8349 },
> + { 0x06, 0x10d1 },
> + { 0x06, 0x801f },
> + { 0x06, 0x66a0 },
> + { 0x06, 0x04b9 },
> + { 0x06, 0xe283 },
> + { 0x06, 0x48e3 },
> + { 0x06, 0x8349 },
> + { 0x06, 0xef65 },
> + { 0x06, 0xe283 },
> + { 0x06, 0x4ae3 },
> + { 0x06, 0x834b },
> + { 0x06, 0x1b56 },
> + { 0x06, 0xaa0e },
> + { 0x06, 0xef56 },
> + { 0x06, 0xe683 },
> + { 0x06, 0x4ae7 },
> + { 0x06, 0x834b },
> + { 0x06, 0xe283 },
> + { 0x06, 0x4de6 },
> + { 0x06, 0x834c },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4da0 },
> + { 0x06, 0x000c },
> + { 0x06, 0xaf81 },
> + { 0x06, 0x8be0 },
> + { 0x06, 0x834d },
> + { 0x06, 0x10e4 },
> + { 0x06, 0x834d },
> + { 0x06, 0xae04 },
> + { 0x06, 0x80e4 },
> + { 0x06, 0x834d },
> + { 0x06, 0xe083 },
> + { 0x06, 0x4e78 },
> + { 0x06, 0x039e },
> + { 0x06, 0x0be0 },
> + { 0x06, 0x834e },
> + { 0x06, 0x7804 },
> + { 0x06, 0x9e04 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4e02 },
> + { 0x06, 0xe083 },
> + { 0x06, 0x32e1 },
> + { 0x06, 0x8333 },
> + { 0x06, 0x590f },
> + { 0x06, 0xe283 },
> + { 0x06, 0x4d0c },
> + { 0x06, 0x245a },
> + { 0x06, 0xf01e },
> + { 0x06, 0x12e4 },
> + { 0x06, 0xf88c },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x8de0 },
> + { 0x06, 0x8330 },
> + { 0x06, 0xe183 },
> + { 0x06, 0x3168 },
> + { 0x06, 0x01e4 },
> + { 0x06, 0xf88a },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x8bae },
> + { 0x06, 0x37ee },
> + { 0x06, 0x834e },
> + { 0x06, 0x03e0 },
> + { 0x06, 0x834c },
> + { 0x06, 0xe183 },
> + { 0x06, 0x4d1b },
> + { 0x06, 0x019e },
> + { 0x06, 0x04aa },
> + { 0x06, 0xa1ae },
> + { 0x06, 0xa8ee },
> + { 0x06, 0x834e },
> + { 0x06, 0x04ee },
> + { 0x06, 0x834f },
> + { 0x06, 0x00ae },
> + { 0x06, 0xabe0 },
> + { 0x06, 0x834f },
> + { 0x06, 0x7803 },
> + { 0x06, 0x9f14 },
> + { 0x06, 0xee83 },
> + { 0x06, 0x4e05 },
> + { 0x06, 0xd240 },
> + { 0x06, 0xd655 },
> + { 0x06, 0x5402 },
> + { 0x06, 0x81c6 },
> + { 0x06, 0xd2a0 },
> + { 0x06, 0xd6ba },
> + { 0x06, 0x0002 },
> + { 0x06, 0x81c6 },
> + { 0x06, 0xfefd },
> + { 0x06, 0xfc05 },
> + { 0x06, 0xf8e0 },
> + { 0x06, 0xf860 },
> + { 0x06, 0xe1f8 },
> + { 0x06, 0x6168 },
> + { 0x06, 0x02e4 },
> + { 0x06, 0xf860 },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x61e0 },
> + { 0x06, 0xf848 },
> + { 0x06, 0xe1f8 },
> + { 0x06, 0x4958 },
> + { 0x06, 0x0f1e },
> + { 0x06, 0x02e4 },
> + { 0x06, 0xf848 },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x49d0 },
> + { 0x06, 0x0002 },
> + { 0x06, 0x820a },
> + { 0x06, 0xbf83 },
> + { 0x06, 0x50ef },
> + { 0x06, 0x46dc },
> + { 0x06, 0x19dd },
> + { 0x06, 0xd001 },
> + { 0x06, 0x0282 },
> + { 0x06, 0x0a02 },
> + { 0x06, 0x8226 },
> + { 0x06, 0xe0f8 },
> + { 0x06, 0x60e1 },
> + { 0x06, 0xf861 },
> + { 0x06, 0x58fd },
> + { 0x06, 0xe4f8 },
> + { 0x06, 0x60e5 },
> + { 0x06, 0xf861 },
> + { 0x06, 0xfc04 },
> + { 0x06, 0xf9fa },
> + { 0x06, 0xfbc6 },
> + { 0x06, 0xbff8 },
> + { 0x06, 0x40be },
> + { 0x06, 0x8350 },
> + { 0x06, 0xa001 },
> + { 0x06, 0x0107 },
> + { 0x06, 0x1b89 },
> + { 0x06, 0xcfd2 },
> + { 0x06, 0x08eb },
> + { 0x06, 0xdb19 },
> + { 0x06, 0xb2fb },
> + { 0x06, 0xfffe },
> + { 0x06, 0xfd04 },
> + { 0x06, 0xf8e0 },
> + { 0x06, 0xf848 },
> + { 0x06, 0xe1f8 },
> + { 0x06, 0x4968 },
> + { 0x06, 0x08e4 },
> + { 0x06, 0xf848 },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x4958 },
> + { 0x06, 0xf7e4 },
> + { 0x06, 0xf848 },
> + { 0x06, 0xe5f8 },
> + { 0x06, 0x49fc },
> + { 0x06, 0x044d },
> + { 0x06, 0x2000 },
> + { 0x06, 0x024e },
> + { 0x06, 0x2200 },
> + { 0x06, 0x024d },
> + { 0x06, 0xdfff },
> + { 0x06, 0x014e },
> + { 0x06, 0xddff },
> + { 0x06, 0x0100 },
> + { 0x05, 0x83d8 },
> + { 0x06, 0x8000 },
> + { 0x03, 0xdc00 },
> + { 0x05, 0xfff6 },
> + { 0x06, 0x00fc },
> + { 0x1f, 0x0000 },
> +
> + { 0x1f, 0x0000 },
> + { 0x0d, 0xf880 },
> + { 0x1f, 0x0000 }
> };
>
> rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
>
> - if (mdio_read(ioaddr, 0x06) == 0xc400) {
> - struct phy_reg phy_reg_init_1[] = {
> + if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
> + struct phy_reg phy_reg_init[] = {
> + { 0x1f, 0x0002 },
> + { 0x05, 0x669a },
> { 0x1f, 0x0005 },
> - { 0x01, 0x0300 },
> - { 0x1f, 0x0000 },
> - { 0x11, 0x401c },
> - { 0x16, 0x4100 },
> + { 0x05, 0x8330 },
> + { 0x06, 0x669a },
> +
> + { 0x1f, 0x0002 }
> + };
> + int val;
> +
> + rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
> +
> + val = mdio_read(ioaddr, 0x0d);
> + if ((val & 0x00ff) != 0x006c) {
> + u32 set[] = {
> + 0x0065, 0x0066, 0x0067, 0x0068,
> + 0x0069, 0x006a, 0x006b, 0x006c
> + };
> + int i;
> +
> + mdio_write(ioaddr, 0x1f, 0x0002);
> +
> + val &= 0xff00;
> + for (i = 0; i < ARRAY_SIZE(set); i++)
> + mdio_write(ioaddr, 0x0d, val | set[i]);
> + }
> + } else {
> + struct phy_reg phy_reg_init[] = {
> + { 0x1f, 0x0002 },
> + { 0x05, 0x2642 },
> { 0x1f, 0x0005 },
> - { 0x07, 0x0010 },
> - { 0x05, 0x83dc },
> - { 0x06, 0x087d },
> - { 0x05, 0x8300 },
> - { 0x06, 0x0101 },
> - { 0x06, 0x05f8 },
> - { 0x06, 0xf9fa },
> - { 0x06, 0xfbef },
> - { 0x06, 0x79e2 },
> - { 0x06, 0x835f },
> - { 0x06, 0xe0f8 },
> - { 0x06, 0x9ae1 },
> - { 0x06, 0xf89b },
> - { 0x06, 0xef31 },
> - { 0x06, 0x3b65 },
> - { 0x06, 0xaa07 },
> - { 0x06, 0x81e4 },
> - { 0x06, 0xf89a },
> - { 0x06, 0xe5f8 },
> - { 0x06, 0x9baf },
> - { 0x06, 0x06ae },
> - { 0x05, 0x83dc },
> - { 0x06, 0x8300 },
> + { 0x05, 0x8330 },
> + { 0x06, 0x2642 }
> };
>
> - rtl_phy_write(ioaddr, phy_reg_init_1,
> - ARRAY_SIZE(phy_reg_init_1));
> + rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
> }
>
> - mdio_write(ioaddr, 0x1f, 0x0000);
> + mdio_write(ioaddr, 0x1f, 0x0002);
> + mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
> + mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
> +
> + mdio_write(ioaddr, 0x1f, 0x0001);
> + mdio_write(ioaddr, 0x17, 0x0cc0);
> +
> + mdio_write(ioaddr, 0x1f, 0x0002);
> + mdio_patch(ioaddr, 0x0f, 0x0017);
> +
> + rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
> +}
> +
> +static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
> +{
> + struct phy_reg phy_reg_init[] = {
> + { 0x1f, 0x0002 },
> + { 0x10, 0x0008 },
> + { 0x0d, 0x006c },
> +
> + { 0x1f, 0x0000 },
> + { 0x0d, 0xf880 },
> +
> + { 0x1f, 0x0001 },
> + { 0x17, 0x0cc0 },
> +
> + { 0x1f, 0x0001 },
> + { 0x0b, 0xa4d8 },
> + { 0x09, 0x281c },
> + { 0x07, 0x2883 },
> + { 0x0a, 0x6b35 },
> + { 0x1d, 0x3da4 },
> + { 0x1c, 0xeffd },
> + { 0x14, 0x7f52 },
> + { 0x18, 0x7fc6 },
> + { 0x08, 0x0601 },
> + { 0x06, 0x4063 },
> + { 0x10, 0xf074 },
> + { 0x1f, 0x0003 },
> + { 0x13, 0x0789 },
> + { 0x12, 0xf4bd },
> + { 0x1a, 0x04fd },
> + { 0x14, 0x84b0 },
> + { 0x1f, 0x0000 },
> + { 0x00, 0x9200 },
> +
> + { 0x1f, 0x0005 },
> + { 0x01, 0x0340 },
> + { 0x1f, 0x0001 },
> + { 0x04, 0x4000 },
> + { 0x03, 0x1d21 },
> + { 0x02, 0x0c32 },
> + { 0x01, 0x0200 },
> + { 0x00, 0x5554 },
> + { 0x04, 0x4800 },
> + { 0x04, 0x4000 },
> + { 0x04, 0xf000 },
> + { 0x03, 0xdf01 },
> + { 0x02, 0xdf20 },
> + { 0x01, 0x101a },
> + { 0x00, 0xa0ff },
> + { 0x04, 0xf800 },
> + { 0x04, 0xf000 },
> + { 0x1f, 0x0000 },
> +
> + { 0x1f, 0x0007 },
> + { 0x1e, 0x0023 },
> + { 0x16, 0x0000 },
> + { 0x1f, 0x0000 }
> + };
> +
> + rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
> }
>
> static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
> @@ -1792,7 +2661,13 @@ static void rtl_hw_phy_config(struct net_device *dev)
> rtl8168cp_2_hw_phy_config(ioaddr);
> break;
> case RTL_GIGA_MAC_VER_25:
> - rtl8168d_hw_phy_config(ioaddr);
> + rtl8168d_1_hw_phy_config(ioaddr);
> + break;
> + case RTL_GIGA_MAC_VER_26:
> + rtl8168d_2_hw_phy_config(ioaddr);
> + break;
> + case RTL_GIGA_MAC_VER_27:
> + rtl8168d_3_hw_phy_config(ioaddr);
> break;
>
> default:
> @@ -2200,6 +3075,11 @@ rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
> tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
> if (!tp->pcie_cap && netif_msg_probe(tp))
> dev_info(&pdev->dev, "no PCI Express capability\n");
> + else {
> + pci_write_config_word(pdev, tp->pcie_cap + PCI_EXP_DEVSTA,
> + PCI_EXP_DEVSTA_CED | PCI_EXP_DEVSTA_NFED |
> + PCI_EXP_DEVSTA_FED | PCI_EXP_DEVSTA_URD);
> + }
>
> RTL_W16(IntrMask, 0x0000);
>
> @@ -2863,6 +3743,8 @@ static void rtl_hw_start_8168(struct net_device *dev)
> break;
>
> case RTL_GIGA_MAC_VER_25:
> + case RTL_GIGA_MAC_VER_26:
> + case RTL_GIGA_MAC_VER_27:
> rtl_hw_start_8168d(ioaddr, pdev);
> break;
>
--
Simon Farnsworth
^ permalink raw reply
* RE: [net-next-2.6 PATCH 1/9] vxge: Modify __vxge_hw_device_is_privilaged() to not assume function-0 as privilaged function.
From: Sreenivasa Honnur @ 2009-10-05 9:43 UTC (permalink / raw)
To: Sreenivasa Honnur, David Miller; +Cc: netdev, support
In-Reply-To: <78C9135A3D2ECE4B8162EBDCE82CAD7705C1618F@nekter>
I could apply these patches with "patch -p1 < patch_file" command.
i.e /usr/src/davem-net-2.6 # patch -p1 < patch_2-0-6-1
-----Original Message-----
From: Sreenivasa Honnur
Sent: Monday, October 05, 2009 3:10 PM
To: David Miller
Cc: netdev@vger.kernel.org; support
Subject: RE: [net-next-2.6 PATCH 1/9] vxge: Modify
__vxge_hw_device_is_privilaged() to not assume function-0 as privilaged
function.
I could apply these patches with "patch -p1 patch_file" command.
-----Original Message-----
From: David Miller [mailto:davem@davemloft.net]
Sent: Monday, October 05, 2009 2:50 PM
To: Sreenivasa Honnur
Cc: netdev@vger.kernel.org; support
Subject: Re: [net-next-2.6 PATCH 1/9] vxge: Modify
__vxge_hw_device_is_privilaged() to not assume function-0 as privilaged
function.
From: Sreenivasa Honnur <Sreenivasa.Honnur@neterion.com>
Date: Mon, 5 Oct 2009 05:06:06 -0400 (EDT)
> - vxge driver was assuming function-0 is always the privilaged
function. Now that
> restriction has been removed any function can act as a privilaged
function.
>
> - This patch modifies the __vxge_hw_device_is_privilaged routine to
not assume
> function-0 as the privileged function.
>
> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
> ---
> diff -urpN orig//drivers/net/vxge/vxge-config.c
patch1//drivers/net/vxge/vxge-config.c
> --- orig//drivers/net/vxge/vxge-config.c 2009-09-03
22:39:48.000000000 -0700
> +++ patch1//drivers/net/vxge/vxge-config.c 2009-09-03
23:11:24.000000000 -0700
You can't have the double slash there in your paths, this gets
interpreted as "/drivers/net/vxge/vxge-config.c" by all the patch
applying tools.
Please "-p1" root your patches properly as described in
linux/Documentation/SubmittingPatches
You'll need to resubmit your entire patch set with this fixed up.
Thanks.
^ permalink raw reply
* RE: [net-next-2.6 PATCH 1/9] vxge: Modify __vxge_hw_device_is_privilaged() to not assume function-0 as privilaged function.
From: Sreenivasa Honnur @ 2009-10-05 9:40 UTC (permalink / raw)
To: David Miller; +Cc: netdev, support
In-Reply-To: <20091005.022017.252887922.davem@davemloft.net>
I could apply these patches with "patch -p1 patch_file" command.
-----Original Message-----
From: David Miller [mailto:davem@davemloft.net]
Sent: Monday, October 05, 2009 2:50 PM
To: Sreenivasa Honnur
Cc: netdev@vger.kernel.org; support
Subject: Re: [net-next-2.6 PATCH 1/9] vxge: Modify
__vxge_hw_device_is_privilaged() to not assume function-0 as privilaged
function.
From: Sreenivasa Honnur <Sreenivasa.Honnur@neterion.com>
Date: Mon, 5 Oct 2009 05:06:06 -0400 (EDT)
> - vxge driver was assuming function-0 is always the privilaged
function. Now that
> restriction has been removed any function can act as a privilaged
function.
>
> - This patch modifies the __vxge_hw_device_is_privilaged routine to
not assume
> function-0 as the privileged function.
>
> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
> ---
> diff -urpN orig//drivers/net/vxge/vxge-config.c
patch1//drivers/net/vxge/vxge-config.c
> --- orig//drivers/net/vxge/vxge-config.c 2009-09-03
22:39:48.000000000 -0700
> +++ patch1//drivers/net/vxge/vxge-config.c 2009-09-03
23:11:24.000000000 -0700
You can't have the double slash there in your paths, this gets
interpreted as "/drivers/net/vxge/vxge-config.c" by all the patch
applying tools.
Please "-p1" root your patches properly as described in
linux/Documentation/SubmittingPatches
You'll need to resubmit your entire patch set with this fixed up.
Thanks.
^ permalink raw reply
* Re: vxge: Update driver_config->vpath_per_dev for each function in probe.
From: David Miller @ 2009-10-05 9:38 UTC (permalink / raw)
To: Sreenivasa.Honnur; +Cc: netdev, support
In-Reply-To: <78C9135A3D2ECE4B8162EBDCE82CAD7705C1618E@nekter>
From: "Sreenivasa Honnur" <Sreenivasa.Honnur@neterion.com>
Date: Mon, 5 Oct 2009 05:36:19 -0400
> Please ignore this patch.
>
> I submitted this patch without patch number. I again resubmitted it with
> patch number.
Ok.
^ permalink raw reply
* RE: vxge: Update driver_config->vpath_per_dev for each function in probe.
From: Sreenivasa Honnur @ 2009-10-05 9:36 UTC (permalink / raw)
To: David Miller; +Cc: netdev, support
In-Reply-To: <20091005.023219.45309053.davem@davemloft.net>
Please ignore this patch.
I submitted this patch without patch number. I again resubmitted it with
patch number.
-----Original Message-----
From: David Miller [mailto:davem@davemloft.net]
Sent: Monday, October 05, 2009 3:02 PM
To: Sreenivasa Honnur
Cc: netdev@vger.kernel.org; support
Subject: Re: vxge: Update driver_config->vpath_per_dev for each function
in probe.
From: Sreenivasa Honnur <Sreenivasa.Honnur@neterion.com>
Date: Mon, 5 Oct 2009 05:06:56 -0400 (EDT)
> - Update driver_config->vpath_per_dev for each function in probe.
>
> - vpath_per_device specifies number of vpaths supported for each
function/device. The
> current code was updating vpath_per_device only for physical device,
however this has
> to be updated for each function also in case of a MF(Multi function)
device.
>
> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
You keep posting this patch twice.
Once without the proper "[PATCH 2/9]" indication in the subject heading,
and once with it there.
Please sort out your patch set, there is something wrong with what
you're submitting for this.
^ permalink raw reply
* Re: vxge: Update driver_config->vpath_per_dev for each function in probe.
From: David Miller @ 2009-10-05 9:32 UTC (permalink / raw)
To: Sreenivasa.Honnur; +Cc: netdev, support
In-Reply-To: <Pine.GSO.4.10.10910050506150.2346-100000@guinness>
From: Sreenivasa Honnur <Sreenivasa.Honnur@neterion.com>
Date: Mon, 5 Oct 2009 05:06:56 -0400 (EDT)
> - Update driver_config->vpath_per_dev for each function in probe.
>
> - vpath_per_device specifies number of vpaths supported for each function/device. The
> current code was updating vpath_per_device only for physical device, however this has
> to be updated for each function also in case of a MF(Multi function) device.
>
> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
You keep posting this patch twice.
Once without the proper "[PATCH 2/9]" indication in the subject
heading, and once with it there.
Please sort out your patch set, there is something wrong with
what you're submitting for this.
^ permalink raw reply
* [net-next-2.6 PATCH 3/9] vxge: Removed accessing non-supported registers.
From: Sreenivasa Honnur @ 2009-10-05 9:08 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Removed accessing GENDMA_INT register
- This allowed the firmware to perform a generic DMA write to host memory.
This feature is not supported by the ASIC, this patch removes access to
GENDMA_INT register.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch2/drivers/net/vxge/vxge-config.c patch3/drivers/net/vxge/vxge-config.c
--- patch2/drivers/net/vxge/vxge-config.c 2009-09-04 01:17:22.000000000 -0700
+++ patch3/drivers/net/vxge/vxge-config.c 2009-09-04 01:19:53.000000000 -0700
@@ -4106,8 +4106,6 @@ __vxge_hw_vpath_initialize(struct __vxge
if (status != VXGE_HW_OK)
goto exit;
- writeq(0, &vp_reg->gendma_int);
-
val64 = readq(&vp_reg->rtdma_rd_optimization_ctrl);
/* Get MRRS value from device control */
diff -urpN patch2/drivers/net/vxge/vxge-reg.h patch3/drivers/net/vxge/vxge-reg.h
--- patch2/drivers/net/vxge/vxge-reg.h 2009-09-04 01:17:22.000000000 -0700
+++ patch3/drivers/net/vxge/vxge-reg.h 2009-09-04 01:20:26.000000000 -0700
@@ -4326,10 +4326,6 @@ struct vxge_hw_vpath_reg {
/*0x011e0*/ u64 umq_bwr_init_byte;
#define VXGE_HW_UMQ_BWR_INIT_BYTE_COUNT(val) vxge_vBIT(val, 0, 32)
/*0x011e8*/ u64 gendma_int;
-#define VXGE_HW_GENDMA_INT_IMMED_ENABLE vxge_mBIT(6)
-#define VXGE_HW_GENDMA_INT_EVENT_ENABLE vxge_mBIT(7)
-#define VXGE_HW_GENDMA_INT_NUMBER(val) vxge_vBIT(val, 9, 7)
-#define VXGE_HW_GENDMA_INT_BITMAP(val) vxge_vBIT(val, 16, 16)
/*0x011f0*/ u64 umqdmq_ir_init_notify;
#define VXGE_HW_UMQDMQ_IR_INIT_NOTIFY_PULSE vxge_mBIT(3)
/*0x011f8*/ u64 dmq_init_notify;
^ permalink raw reply
* [net-next-2.6 PATCH 2/9] vxge: Update driver_config->vpath_per_dev for each function in probe
From: Sreenivasa Honnur @ 2009-10-05 9:08 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Update driver_config->vpath_per_dev for each function in probe.
- vpath_per_device specifies number of vpaths supported for each function/device. The
current code was updating vpath_per_device only for physical device, however this has
to be updated for each function also in case of a MF(Multi function) device.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch1/drivers/net/vxge/vxge-main.c patch2/drivers/net/vxge/vxge-main.c
--- patch1/drivers/net/vxge/vxge-main.c 2009-09-03 22:40:14.000000000 -0700
+++ patch2/drivers/net/vxge/vxge-main.c 2009-09-04 01:18:13.000000000 -0700
@@ -4088,9 +4088,10 @@ vxge_probe(struct pci_dev *pdev, const s
driver_config->config_dev_cnt = 0;
driver_config->total_dev_cnt = 0;
driver_config->g_no_cpus = 0;
- driver_config->vpath_per_dev = max_config_vpath;
}
+ driver_config->vpath_per_dev = max_config_vpath;
+
driver_config->total_dev_cnt++;
if (++driver_config->config_dev_cnt > max_config_dev) {
ret = 0;
^ permalink raw reply
* [net-next-2.6 PATCH 1/9] vxge: Modify __vxge_hw_device_is_privilaged() to not assume function-0 as privilaged function.
From: Sreenivasa Honnur @ 2009-10-05 9:06 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- vxge driver was assuming function-0 is always the privilaged function. Now that
restriction has been removed any function can act as a privilaged function.
- This patch modifies the __vxge_hw_device_is_privilaged routine to not assume
function-0 as the privileged function.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN orig//drivers/net/vxge/vxge-config.c patch1//drivers/net/vxge/vxge-config.c
--- orig//drivers/net/vxge/vxge-config.c 2009-09-03 22:39:48.000000000 -0700
+++ patch1//drivers/net/vxge/vxge-config.c 2009-09-03 23:11:24.000000000 -0700
@@ -356,10 +356,8 @@ __vxge_hw_device_access_rights_get(u32 h
switch (host_type) {
case VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION:
- if (func_id == 0) {
- access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
- VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM;
- }
+ access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
+ VXGE_HW_DEVICE_ACCESS_RIGHT_SRPCIM;
break;
case VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION:
access_rights |= VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM |
@@ -382,6 +380,22 @@ __vxge_hw_device_access_rights_get(u32 h
return access_rights;
}
/*
+ * __vxge_hw_device_is_privilaged
+ * This routine checks if the device function is privilaged or not
+ */
+
+enum vxge_hw_status
+__vxge_hw_device_is_privilaged(u32 host_type, u32 func_id)
+{
+ if (__vxge_hw_device_access_rights_get(host_type,
+ func_id) &
+ VXGE_HW_DEVICE_ACCESS_RIGHT_MRPCIM)
+ return VXGE_HW_OK;
+ else
+ return VXGE_HW_ERR_PRIVILAGED_OPEARATION;
+}
+
+/*
* __vxge_hw_device_host_info_get
* This routine returns the host type assignments
*/
@@ -446,18 +460,6 @@ __vxge_hw_verify_pci_e_info(struct __vxg
return VXGE_HW_OK;
}
-enum vxge_hw_status
-__vxge_hw_device_is_privilaged(struct __vxge_hw_device *hldev)
-{
- if ((hldev->host_type == VXGE_HW_NO_MR_NO_SR_NORMAL_FUNCTION ||
- hldev->host_type == VXGE_HW_MR_NO_SR_VH0_BASE_FUNCTION ||
- hldev->host_type == VXGE_HW_NO_MR_SR_VH0_FUNCTION0) &&
- (hldev->func_id == 0))
- return VXGE_HW_OK;
- else
- return VXGE_HW_ERR_PRIVILAGED_OPEARATION;
-}
-
/*
* vxge_hw_wrr_rebalance - Rebalance the RX_WRR and KDFC_WRR calandars.
* Rebalance the RX_WRR and KDFC_WRR calandars.
@@ -470,7 +472,8 @@ vxge_hw_status vxge_hw_wrr_rebalance(str
u32 i, j, how_often = 1;
enum vxge_hw_status status = VXGE_HW_OK;
- status = __vxge_hw_device_is_privilaged(hldev);
+ status = __vxge_hw_device_is_privilaged(hldev->host_type,
+ hldev->func_id);
if (status != VXGE_HW_OK)
goto exit;
@@ -668,7 +671,8 @@ enum vxge_hw_status __vxge_hw_device_ini
{
enum vxge_hw_status status = VXGE_HW_OK;
- if (VXGE_HW_OK == __vxge_hw_device_is_privilaged(hldev)) {
+ if (VXGE_HW_OK == __vxge_hw_device_is_privilaged(hldev->host_type,
+ hldev->func_id)) {
/* Validate the pci-e link width and speed */
status = __vxge_hw_verify_pci_e_info(hldev);
if (status != VXGE_HW_OK)
@@ -953,7 +957,8 @@ vxge_hw_mrpcim_stats_access(struct __vxg
u64 val64;
enum vxge_hw_status status = VXGE_HW_OK;
- status = __vxge_hw_device_is_privilaged(hldev);
+ status = __vxge_hw_device_is_privilaged(hldev->host_type,
+ hldev->func_id);
if (status != VXGE_HW_OK)
goto exit;
@@ -990,7 +995,8 @@ vxge_hw_device_xmac_aggr_stats_get(struc
val64 = (u64 *)aggr_stats;
- status = __vxge_hw_device_is_privilaged(hldev);
+ status = __vxge_hw_device_is_privilaged(hldev->host_type,
+ hldev->func_id);
if (status != VXGE_HW_OK)
goto exit;
@@ -1023,7 +1029,8 @@ vxge_hw_device_xmac_port_stats_get(struc
u32 offset = 0x0;
val64 = (u64 *) port_stats;
- status = __vxge_hw_device_is_privilaged(hldev);
+ status = __vxge_hw_device_is_privilaged(hldev->host_type,
+ hldev->func_id);
if (status != VXGE_HW_OK)
goto exit;
@@ -1221,7 +1228,8 @@ enum vxge_hw_status vxge_hw_device_setpa
goto exit;
}
- status = __vxge_hw_device_is_privilaged(hldev);
+ status = __vxge_hw_device_is_privilaged(hldev->host_type,
+ hldev->func_id);
if (status != VXGE_HW_OK)
goto exit;
^ permalink raw reply
* [net-next-2.6 PATCH 5/9] vxge: Removed unused functions.
From: Sreenivasa Honnur @ 2009-10-05 9:10 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Removed the wrr_rebalance function
- This feature is not supported by the ASIC, hence removing the related code.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch4/drivers/net/vxge/vxge-config.c patch5/drivers/net/vxge/vxge-config.c
--- patch4/drivers/net/vxge/vxge-config.c 2009-09-04 01:21:52.000000000 -0700
+++ patch5/drivers/net/vxge/vxge-config.c 2009-09-04 01:24:25.000000000 -0700
@@ -461,209 +461,6 @@ __vxge_hw_verify_pci_e_info(struct __vxg
}
/*
- * vxge_hw_wrr_rebalance - Rebalance the RX_WRR and KDFC_WRR calandars.
- * Rebalance the RX_WRR and KDFC_WRR calandars.
- */
-static enum
-vxge_hw_status vxge_hw_wrr_rebalance(struct __vxge_hw_device *hldev)
-{
- u64 val64;
- u32 wrr_states[VXGE_HW_WEIGHTED_RR_SERVICE_STATES];
- u32 i, j, how_often = 1;
- enum vxge_hw_status status = VXGE_HW_OK;
-
- status = __vxge_hw_device_is_privilaged(hldev->host_type,
- hldev->func_id);
- if (status != VXGE_HW_OK)
- goto exit;
-
- /* Reset the priorities assigned to the WRR arbitration
- phases for the receive traffic */
- for (i = 0; i < VXGE_HW_WRR_RING_COUNT; i++)
- writeq(0, ((&hldev->mrpcim_reg->rx_w_round_robin_0) + i));
-
- /* Reset the transmit FIFO servicing calendar for FIFOs */
- for (i = 0; i < VXGE_HW_WRR_FIFO_COUNT; i++) {
- writeq(0, ((&hldev->mrpcim_reg->kdfc_w_round_robin_0) + i));
- writeq(0, ((&hldev->mrpcim_reg->kdfc_w_round_robin_20) + i));
- }
-
- /* Assign WRR priority 0 for all FIFOs */
- for (i = 1; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
- writeq(VXGE_HW_KDFC_FIFO_0_CTRL_WRR_NUMBER(0),
- ((&hldev->mrpcim_reg->kdfc_fifo_0_ctrl) + i));
-
- writeq(VXGE_HW_KDFC_FIFO_17_CTRL_WRR_NUMBER(0),
- ((&hldev->mrpcim_reg->kdfc_fifo_17_ctrl) + i));
- }
-
- /* Reset to service non-offload doorbells */
- writeq(0, &hldev->mrpcim_reg->kdfc_entry_type_sel_0);
- writeq(0, &hldev->mrpcim_reg->kdfc_entry_type_sel_1);
-
- /* Set priority 0 to all receive queues */
- writeq(0, &hldev->mrpcim_reg->rx_queue_priority_0);
- writeq(0, &hldev->mrpcim_reg->rx_queue_priority_1);
- writeq(0, &hldev->mrpcim_reg->rx_queue_priority_2);
-
- /* Initialize all the slots as unused */
- for (i = 0; i < VXGE_HW_WEIGHTED_RR_SERVICE_STATES; i++)
- wrr_states[i] = -1;
-
- /* Prepare the Fifo service states */
- for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
-
- if (!hldev->config.vp_config[i].min_bandwidth)
- continue;
-
- how_often = VXGE_HW_VPATH_BANDWIDTH_MAX /
- hldev->config.vp_config[i].min_bandwidth;
- if (how_often) {
-
- for (j = 0; j < VXGE_HW_WRR_FIFO_SERVICE_STATES;) {
- if (wrr_states[j] == -1) {
- wrr_states[j] = i;
- /* Make sure each fifo is serviced
- * atleast once */
- if (i == j)
- j += VXGE_HW_MAX_VIRTUAL_PATHS;
- else
- j += how_often;
- } else
- j++;
- }
- }
- }
-
- /* Fill the unused slots with 0 */
- for (j = 0; j < VXGE_HW_WEIGHTED_RR_SERVICE_STATES; j++) {
- if (wrr_states[j] == -1)
- wrr_states[j] = 0;
- }
-
- /* Assign WRR priority number for FIFOs */
- for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
- writeq(VXGE_HW_KDFC_FIFO_0_CTRL_WRR_NUMBER(i),
- ((&hldev->mrpcim_reg->kdfc_fifo_0_ctrl) + i));
-
- writeq(VXGE_HW_KDFC_FIFO_17_CTRL_WRR_NUMBER(i),
- ((&hldev->mrpcim_reg->kdfc_fifo_17_ctrl) + i));
- }
-
- /* Modify the servicing algorithm applied to the 3 types of doorbells.
- i.e, none-offload, message and offload */
- writeq(VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_0(0) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_1(0) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_2(0) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_3(0) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_4(1) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_5(0) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_6(0) |
- VXGE_HW_KDFC_ENTRY_TYPE_SEL_0_NUMBER_7(0),
- &hldev->mrpcim_reg->kdfc_entry_type_sel_0);
-
- writeq(VXGE_HW_KDFC_ENTRY_TYPE_SEL_1_NUMBER_8(1),
- &hldev->mrpcim_reg->kdfc_entry_type_sel_1);
-
- for (i = 0, j = 0; i < VXGE_HW_WRR_FIFO_COUNT; i++) {
-
- val64 = VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_0(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_1(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_2(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_3(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_4(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_5(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_6(wrr_states[j++]);
- val64 |= VXGE_HW_KDFC_W_ROUND_ROBIN_0_NUMBER_7(wrr_states[j++]);
-
- writeq(val64, (&hldev->mrpcim_reg->kdfc_w_round_robin_0 + i));
- writeq(val64, (&hldev->mrpcim_reg->kdfc_w_round_robin_20 + i));
- }
-
- /* Set up the priorities assigned to receive queues */
- writeq(VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_0(0) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_1(1) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_2(2) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_3(3) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_4(4) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_5(5) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_6(6) |
- VXGE_HW_RX_QUEUE_PRIORITY_0_RX_Q_NUMBER_7(7),
- &hldev->mrpcim_reg->rx_queue_priority_0);
-
- writeq(VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_8(8) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_9(9) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_10(10) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_11(11) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_12(12) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_13(13) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_14(14) |
- VXGE_HW_RX_QUEUE_PRIORITY_1_RX_Q_NUMBER_15(15),
- &hldev->mrpcim_reg->rx_queue_priority_1);
-
- writeq(VXGE_HW_RX_QUEUE_PRIORITY_2_RX_Q_NUMBER_16(16),
- &hldev->mrpcim_reg->rx_queue_priority_2);
-
- /* Initialize all the slots as unused */
- for (i = 0; i < VXGE_HW_WEIGHTED_RR_SERVICE_STATES; i++)
- wrr_states[i] = -1;
-
- /* Prepare the Ring service states */
- for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
-
- if (!hldev->config.vp_config[i].min_bandwidth)
- continue;
-
- how_often = VXGE_HW_VPATH_BANDWIDTH_MAX /
- hldev->config.vp_config[i].min_bandwidth;
-
- if (how_often) {
- for (j = 0; j < VXGE_HW_WRR_RING_SERVICE_STATES;) {
- if (wrr_states[j] == -1) {
- wrr_states[j] = i;
- /* Make sure each ring is
- * serviced atleast once */
- if (i == j)
- j += VXGE_HW_MAX_VIRTUAL_PATHS;
- else
- j += how_often;
- } else
- j++;
- }
- }
- }
-
- /* Fill the unused slots with 0 */
- for (j = 0; j < VXGE_HW_WEIGHTED_RR_SERVICE_STATES; j++) {
- if (wrr_states[j] == -1)
- wrr_states[j] = 0;
- }
-
- for (i = 0, j = 0; i < VXGE_HW_WRR_RING_COUNT; i++) {
- val64 = VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_0(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_1(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_2(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_3(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_4(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_5(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_6(
- wrr_states[j++]);
- val64 |= VXGE_HW_RX_W_ROUND_ROBIN_0_RX_W_PRIORITY_SS_7(
- wrr_states[j++]);
-
- writeq(val64, ((&hldev->mrpcim_reg->rx_w_round_robin_0) + i));
- }
-exit:
- return status;
-}
-
-/*
* __vxge_hw_device_initialize
* Initialize Titan-V hardware.
*/
@@ -679,7 +476,6 @@ enum vxge_hw_status __vxge_hw_device_ini
goto exit;
}
- vxge_hw_wrr_rebalance(hldev);
exit:
return status;
}
^ permalink raw reply
* [net-next-2.6 PATCH 4/9] vxge: Fixed crash in PAE system due to wrong typecasting.
From: Sreenivasa Honnur @ 2009-10-05 9:09 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Fix a crash in PAE system due to wrong typecasting.
- On PAE system size_t is unsigned int which is 32bit. Avoid casting
64 bit address to 32 bit
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch3/drivers/net/vxge/vxge-traffic.c patch4/drivers/net/vxge/vxge-traffic.c
--- patch3/drivers/net/vxge/vxge-traffic.c 2009-09-04 01:19:23.000000000 -0700
+++ patch4/drivers/net/vxge/vxge-traffic.c 2009-09-04 01:22:35.000000000 -0700
@@ -1232,7 +1232,7 @@ void vxge_hw_fifo_txdl_post(struct __vxg
vxge_hw_channel_dtr_post(&fifo->channel, txdlh);
__vxge_hw_non_offload_db_post(fifo,
- (u64)(size_t)txdl_priv->dma_addr,
+ (u64)txdl_priv->dma_addr,
txdl_priv->frags - 1,
fifo->no_snoop_bits);
^ permalink raw reply
* vxge: Update driver_config->vpath_per_dev for each function in probe.
From: Sreenivasa Honnur @ 2009-10-05 9:06 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Update driver_config->vpath_per_dev for each function in probe.
- vpath_per_device specifies number of vpaths supported for each function/device. The
current code was updating vpath_per_device only for physical device, however this has
to be updated for each function also in case of a MF(Multi function) device.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch1/drivers/net/vxge/vxge-main.c patch2/drivers/net/vxge/vxge-main.c
--- patch1/drivers/net/vxge/vxge-main.c 2009-09-03 22:40:14.000000000 -0700
+++ patch2/drivers/net/vxge/vxge-main.c 2009-09-04 01:18:13.000000000 -0700
@@ -4088,9 +4088,10 @@ vxge_probe(struct pci_dev *pdev, const s
driver_config->config_dev_cnt = 0;
driver_config->total_dev_cnt = 0;
driver_config->g_no_cpus = 0;
- driver_config->vpath_per_dev = max_config_vpath;
}
+ driver_config->vpath_per_dev = max_config_vpath;
+
driver_config->total_dev_cnt++;
if (++driver_config->config_dev_cnt > max_config_dev) {
ret = 0;
^ permalink raw reply
* Re: [PATCH] TCPCT+1: initial SYN exchange with SYNACK data
From: Eric Dumazet @ 2009-10-05 9:22 UTC (permalink / raw)
To: William Allen Simpson; +Cc: David Miller, netdev
In-Reply-To: <4AC9AD14.2060500@gmail.com>
William Allen Simpson a écrit :
> This will be widely deployed. Deployment in DNS root servers is
> expected by December. It will be hammered with 600,000+ queries per
> minute. Does that impact your design expectations?
>
10.000 queries per second are challenging, definitly worth to study.
I could not find exact RFC number for this new feature.
Could you give us the up2date info ?
http://ietfreport.isoc.org/all-ids/draft-agl-tcpm-sadata-00.txt is expired.
^ permalink raw reply
* Re: [PATCH] wext: let get_wireless_stats() sleep
From: David Miller @ 2009-10-05 9:22 UTC (permalink / raw)
To: johannes-cdvu00un1VgdHxzADdlk8Q
Cc: linville-2XuSBdqkA4R54TAoqtyWWQ,
miles.lane-Re5JQEeQqe8AvxtiuMwx3w,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
In-Reply-To: <1254734159.22426.6.camel-YfaajirXv2244ywRPIzf9A@public.gmane.org>
From: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
Date: Mon, 05 Oct 2009 11:15:59 +0200
> A number of drivers (recently including cfg80211-based ones)
> assume that all wireless handlers, including statistics, can
> sleep and they often also implicitly assume that the rtnl is
> held around their invocation. This is almost always true now
> except when reading from sysfs:
...
> Fix this by using the rtnl instead of dev_base_lock.
>
> Reported-by: Miles Lane <miles.lane-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
> Signed-off-by: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
Fair enough, applied, thanks!
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* Re: [net-next-2.6 PATCH 1/9] vxge: Modify __vxge_hw_device_is_privilaged() to not assume function-0 as privilaged function.
From: David Miller @ 2009-10-05 9:20 UTC (permalink / raw)
To: Sreenivasa.Honnur; +Cc: netdev, support
In-Reply-To: <Pine.GSO.4.10.10910050503530.2346-100000@guinness>
From: Sreenivasa Honnur <Sreenivasa.Honnur@neterion.com>
Date: Mon, 5 Oct 2009 05:06:06 -0400 (EDT)
> - vxge driver was assuming function-0 is always the privilaged function. Now that
> restriction has been removed any function can act as a privilaged function.
>
> - This patch modifies the __vxge_hw_device_is_privilaged routine to not assume
> function-0 as the privileged function.
>
> Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
> ---
> diff -urpN orig//drivers/net/vxge/vxge-config.c patch1//drivers/net/vxge/vxge-config.c
> --- orig//drivers/net/vxge/vxge-config.c 2009-09-03 22:39:48.000000000 -0700
> +++ patch1//drivers/net/vxge/vxge-config.c 2009-09-03 23:11:24.000000000 -0700
You can't have the double slash there in your paths, this
gets interpreted as "/drivers/net/vxge/vxge-config.c" by
all the patch applying tools.
Please "-p1" root your patches properly as described in
linux/Documentation/SubmittingPatches
You'll need to resubmit your entire patch set with this
fixed up.
Thanks.
^ permalink raw reply
* [net-next-2.6 PATCH 9/9] vxge: Version update
From: Sreenivasa Honnur @ 2009-10-05 9:15 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Version Update.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN orig//drivers/net/vxge/vxge-version.h patch-9//drivers/net/vxge/vxge-version.h
--- orig//drivers/net/vxge/vxge-version.h 2009-10-04 22:43:59.000000000 -0700
+++ patch-9//drivers/net/vxge/vxge-version.h 2009-10-04 22:43:08.000000000 -0700
@@ -17,7 +17,7 @@
#define VXGE_VERSION_MAJOR "2"
#define VXGE_VERSION_MINOR "0"
-#define VXGE_VERSION_FIX "5"
-#define VXGE_VERSION_BUILD "18053"
+#define VXGE_VERSION_FIX "6"
+#define VXGE_VERSION_BUILD "18707"
#define VXGE_VERSION_FOR "k"
#endif
^ permalink raw reply
* [PATCH] wext: let get_wireless_stats() sleep
From: Johannes Berg @ 2009-10-05 9:15 UTC (permalink / raw)
To: John Linville; +Cc: Miles Lane, linux-wireless, netdev
A number of drivers (recently including cfg80211-based ones)
assume that all wireless handlers, including statistics, can
sleep and they often also implicitly assume that the rtnl is
held around their invocation. This is almost always true now
except when reading from sysfs:
BUG: sleeping function called from invalid context at kernel/mutex.c:280
in_atomic(): 1, irqs_disabled(): 0, pid: 10450, name: head
2 locks held by head/10450:
#0: (&buffer->mutex){+.+.+.}, at: [<c10ceb99>] sysfs_read_file+0x24/0xf4
#1: (dev_base_lock){++.?..}, at: [<c12844ee>] wireless_show+0x1a/0x4c
Pid: 10450, comm: head Not tainted 2.6.32-rc3 #1
Call Trace:
[<c102301c>] __might_sleep+0xf0/0xf7
[<c1324355>] mutex_lock_nested+0x1a/0x33
[<f8cea53b>] wdev_lock+0xd/0xf [cfg80211]
[<f8cea58f>] cfg80211_wireless_stats+0x45/0x12d [cfg80211]
[<c13118d6>] get_wireless_stats+0x16/0x1c
[<c12844fe>] wireless_show+0x2a/0x4c
Fix this by using the rtnl instead of dev_base_lock.
Reported-by: Miles Lane <miles.lane-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
Signed-off-by: Johannes Berg <johannes-cdvu00un1VgdHxzADdlk8Q@public.gmane.org>
---
net/core/net-sysfs.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- wireless-testing.orig/net/core/net-sysfs.c 2009-10-05 11:09:56.000000000 +0200
+++ wireless-testing/net/core/net-sysfs.c 2009-10-05 11:10:52.000000000 +0200
@@ -366,13 +366,13 @@ static ssize_t wireless_show(struct devi
const struct iw_statistics *iw;
ssize_t ret = -EINVAL;
- read_lock(&dev_base_lock);
+ rtnl_lock();
if (dev_isalive(dev)) {
iw = get_wireless_stats(dev);
if (iw)
ret = (*format)(iw, buf);
}
- read_unlock(&dev_base_lock);
+ rtnl_unlock();
return ret;
}
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply
* [net-next-2.6 PATCH 8/9] vxge: Acquire correct lock based on interrupt context.
From: Sreenivasa Honnur @ 2009-10-05 9:14 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Added macros that check if the thread is in interrupt context or not to
acquire or release locks
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch7/drivers/net/vxge/vxge-main.c patch8/drivers/net/vxge/vxge-main.c
--- patch7/drivers/net/vxge/vxge-main.c 2009-09-04 02:13:34.000000000 -0700
+++ patch8/drivers/net/vxge/vxge-main.c 2009-09-04 02:18:15.000000000 -0700
@@ -97,10 +97,10 @@ static inline void VXGE_COMPLETE_VPATH_T
more = 0;
skb_ptr = completed;
- if (spin_trylock_irqsave(&fifo->tx_lock, flags)) {
+ if (vxge_spin_trylock(&fifo->tx_lock, flags)) {
vxge_hw_vpath_poll_tx(fifo->handle, &skb_ptr,
NR_SKB_COMPLETED, &more);
- spin_unlock_irqrestore(&fifo->tx_lock, flags);
+ vxge_spin_unlock(&fifo->tx_lock, flags);
}
/* free SKBs */
for (temp = completed; temp != skb_ptr; temp++)
diff -urpN patch7/drivers/net/vxge/vxge-main.h patch8/drivers/net/vxge/vxge-main.h
--- patch7/drivers/net/vxge/vxge-main.h 2009-09-04 02:05:36.000000000 -0700
+++ patch8/drivers/net/vxge/vxge-main.h 2009-09-04 02:16:40.000000000 -0700
@@ -89,6 +89,26 @@
#define VXGE_LL_MAX_FRAME_SIZE(dev) ((dev)->mtu + VXGE_HW_MAC_HEADER_MAX_SIZE)
+#define vxge_spin_lock(l, f) { \
+ if (in_interrupt()) \
+ spin_lock(l); \
+ else \
+ spin_lock_irqsave(l, f); \
+}
+
+#define vxge_spin_trylock(l, f) \
+({ \
+ in_interrupt() ? \
+ spin_trylock(l) : spin_trylock_irqsave(l, f); \
+})
+
+#define vxge_spin_unlock(l, f) { \
+ if (in_interrupt()) \
+ spin_unlock(l); \
+ else \
+ spin_unlock_irqrestore(l, f); \
+}
+
enum vxge_reset_event {
/* reset events */
VXGE_LL_VPATH_RESET = 0,
^ permalink raw reply
* [net-next-2.6 PATCH 7/9] vxge: Allow multiple functions with INTA.
From: Sreenivasa Honnur @ 2009-10-05 9:12 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Allow multiple functions with INTA.
- Removed the condition to allow only one vpath with INTA
- Ensure that the alarm bit in titan_mask_all_int register is cleared when
driver exits.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch6/drivers/net/vxge/vxge-config.c patch7/drivers/net/vxge/vxge-config.cllow multiple functions with INTA.
- Removed the condition to allow only one vpath with INTA
- Ensure that the alarm bit in titan_mask_all_int register is cleared when
driver exits.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
--- patch6/drivers/net/vxge/vxge-config.c 2009-09-04 01:33:43.000000000 -0700
+++ patch7/drivers/net/vxge/vxge-config.c 2009-09-04 02:11:29.000000000 -0700
@@ -3882,6 +3882,30 @@ __vxge_hw_vpath_tim_configure(struct __v
return status;
}
+void
+vxge_hw_vpath_tti_ci_set(struct __vxge_hw_device *hldev, u32 vp_id)
+{
+ struct __vxge_hw_virtualpath *vpath;
+ struct vxge_hw_vpath_reg __iomem *vp_reg;
+ struct vxge_hw_vp_config *config;
+ u64 val64;
+
+ vpath = &hldev->virtual_paths[vp_id];
+ vp_reg = vpath->vp_reg;
+ config = vpath->vp_config;
+
+ if (config->fifo.enable == VXGE_HW_FIFO_ENABLE) {
+ val64 = readq(&vp_reg->tim_cfg1_int_num[VXGE_HW_VPATH_INTR_TX]);
+
+ if (config->tti.timer_ci_en != VXGE_HW_TIM_TIMER_CI_ENABLE) {
+ config->tti.timer_ci_en = VXGE_HW_TIM_TIMER_CI_ENABLE;
+ val64 |= VXGE_HW_TIM_CFG1_INT_NUM_TIMER_CI;
+ writeq(val64,
+ &vp_reg->tim_cfg1_int_num[VXGE_HW_VPATH_INTR_TX]);
+ }
+ }
+ return;
+}
/*
* __vxge_hw_vpath_initialize
* This routine is the final phase of init which initializes the
diff -urpN patch6/drivers/net/vxge/vxge-main.c patch7/drivers/net/vxge/vxge-main.c
--- patch6/drivers/net/vxge/vxge-main.c 2009-09-04 01:31:12.000000000 -0700
+++ patch7/drivers/net/vxge/vxge-main.c 2009-09-04 02:13:34.000000000 -0700
@@ -2435,7 +2435,6 @@ static int vxge_add_isr(struct vxgedev *
int ret = 0;
#ifdef CONFIG_PCI_MSI
int vp_idx = 0, intr_idx = 0, intr_cnt = 0, msix_idx = 0, irq_req = 0;
- u64 function_mode = vdev->config.device_hw_info.function_mode;
int pci_fun = PCI_FUNC(vdev->pdev->devfn);
if (vdev->config.intr_type == MSI_X)
@@ -2444,20 +2443,9 @@ static int vxge_add_isr(struct vxgedev *
if (ret) {
vxge_debug_init(VXGE_ERR,
"%s: Enabling MSI-X Failed", VXGE_DRIVER_NAME);
- if ((function_mode == VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION) &&
- test_and_set_bit(__VXGE_STATE_CARD_UP,
- &driver_config->inta_dev_open))
- return VXGE_HW_FAIL;
- else {
- vxge_debug_init(VXGE_ERR,
- "%s: Defaulting to INTA", VXGE_DRIVER_NAME);
- vdev->config.intr_type = INTA;
- vxge_hw_device_set_intr_type(vdev->devh,
- VXGE_HW_INTR_MODE_IRQLINE);
- vxge_close_vpaths(vdev, 1);
- vdev->no_of_vpath = 1;
- vdev->stats.vpaths_open = 1;
- }
+ vxge_debug_init(VXGE_ERR,
+ "%s: Defaulting to INTA", VXGE_DRIVER_NAME);
+ vdev->config.intr_type = INTA;
}
if (vdev->config.intr_type == MSI_X) {
@@ -2505,24 +2493,11 @@ static int vxge_add_isr(struct vxgedev *
"%s: MSIX - %d Registration failed",
vdev->ndev->name, intr_cnt);
vxge_rem_msix_isr(vdev);
- if ((function_mode ==
- VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION) &&
- test_and_set_bit(__VXGE_STATE_CARD_UP,
- &driver_config->inta_dev_open))
- return VXGE_HW_FAIL;
- else {
- vxge_hw_device_set_intr_type(
- vdev->devh,
- VXGE_HW_INTR_MODE_IRQLINE);
- vdev->config.intr_type = INTA;
- vxge_debug_init(VXGE_ERR,
- "%s: Defaulting to INTA"
- , vdev->ndev->name);
- vxge_close_vpaths(vdev, 1);
- vdev->no_of_vpath = 1;
- vdev->stats.vpaths_open = 1;
+ vdev->config.intr_type = INTA;
+ vxge_debug_init(VXGE_ERR,
+ "%s: Defaulting to INTA"
+ , vdev->ndev->name);
goto INTA_MODE;
- }
}
if (irq_req) {
@@ -2555,23 +2530,11 @@ static int vxge_add_isr(struct vxgedev *
"%s: MSIX - %d Registration failed",
vdev->ndev->name, intr_cnt);
vxge_rem_msix_isr(vdev);
- if ((function_mode ==
- VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION) &&
- test_and_set_bit(__VXGE_STATE_CARD_UP,
- &driver_config->inta_dev_open))
- return VXGE_HW_FAIL;
- else {
- vxge_hw_device_set_intr_type(vdev->devh,
- VXGE_HW_INTR_MODE_IRQLINE);
- vdev->config.intr_type = INTA;
- vxge_debug_init(VXGE_ERR,
- "%s: Defaulting to INTA",
- vdev->ndev->name);
- vxge_close_vpaths(vdev, 1);
- vdev->no_of_vpath = 1;
- vdev->stats.vpaths_open = 1;
+ vdev->config.intr_type = INTA;
+ vxge_debug_init(VXGE_ERR,
+ "%s: Defaulting to INTA",
+ vdev->ndev->name);
goto INTA_MODE;
- }
}
vxge_hw_vpath_msix_unmask(vdev->vpaths[vp_idx].handle,
@@ -2584,6 +2547,10 @@ INTA_MODE:
snprintf(vdev->desc[0], VXGE_INTR_STRLEN, "%s:vxge", vdev->ndev->name);
if (vdev->config.intr_type == INTA) {
+ vxge_hw_device_set_intr_type(vdev->devh,
+ VXGE_HW_INTR_MODE_IRQLINE);
+ vxge_hw_vpath_tti_ci_set(vdev->devh,
+ vdev->vpaths[0].device_id);
ret = request_irq((int) vdev->pdev->irq,
vxge_isr_napi,
IRQF_SHARED, vdev->desc[0], vdev);
@@ -2688,13 +2655,6 @@ vxge_open(struct net_device *dev)
* initialized */
netif_carrier_off(dev);
- /* Check for another device already opn with INTA */
- if ((function_mode == VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION) &&
- test_bit(__VXGE_STATE_CARD_UP, &driver_config->inta_dev_open)) {
- ret = -EPERM;
- goto out0;
- }
-
/* Open VPATHs */
status = vxge_open_vpaths(vdev);
if (status != VXGE_HW_OK) {
@@ -2983,7 +2943,6 @@ int do_vxge_close(struct net_device *dev
vxge_debug_entryexit(VXGE_TRACE,
"%s: %s:%d Exiting...", dev->name, __func__, __LINE__);
- clear_bit(__VXGE_STATE_CARD_UP, &driver_config->inta_dev_open);
clear_bit(__VXGE_STATE_RESET_CARD, &vdev->state);
return 0;
@@ -4397,6 +4356,27 @@ vxge_probe(struct pci_dev *pdev, const s
}
kfree(device_config);
+
+ /*
+ * INTA is shared in multi-function mode. This is unlike the INTA
+ * implementation in MR mode, where each VH has its own INTA message.
+ * - INTA is masked (disabled) as long as at least one function sets
+ * its TITAN_MASK_ALL_INT.ALARM bit.
+ * - INTA is unmasked (enabled) when all enabled functions have cleared
+ * their own TITAN_MASK_ALL_INT.ALARM bit.
+ * The TITAN_MASK_ALL_INT ALARM & TRAFFIC bits are cleared on power up.
+ * Though this driver leaves the top level interrupts unmasked while
+ * leaving the required module interrupt bits masked on exit, there
+ * could be a rougue driver around that does not follow this procedure
+ * resulting in a failure to generate interrupts. The following code is
+ * present to prevent such a failure.
+ */
+
+ if (ll_config.device_hw_info.function_mode ==
+ VXGE_HW_FUNCTION_MODE_MULTI_FUNCTION)
+ if (vdev->config.intr_type == INTA)
+ vxge_hw_device_unmask_all(hldev);
+
vxge_debug_entryexit(VXGE_TRACE, "%s: %s:%d Exiting...",
vdev->ndev->name, __func__, __LINE__);
diff -urpN patch6/drivers/net/vxge/vxge-main.h patch7/drivers/net/vxge/vxge-main.h
--- patch6/drivers/net/vxge/vxge-main.h 2009-09-04 01:25:50.000000000 -0700
+++ patch7/drivers/net/vxge/vxge-main.h 2009-09-04 02:05:36.000000000 -0700
@@ -112,7 +112,6 @@ enum vxge_mac_addr_state {
struct vxge_drv_config {
int config_dev_cnt;
int total_dev_cnt;
- unsigned long inta_dev_open;
int g_no_cpus;
unsigned int vpath_per_dev;
};
diff -urpN patch6/drivers/net/vxge/vxge-traffic.c patch7/drivers/net/vxge/vxge-traffic.c
--- patch6/drivers/net/vxge/vxge-traffic.c 2009-09-04 01:25:50.000000000 -0700
+++ patch7/drivers/net/vxge/vxge-traffic.c 2009-09-04 02:06:25.000000000 -0700
@@ -295,6 +295,8 @@ void vxge_hw_device_intr_enable(struct _
u64 val64;
u32 val32;
+ vxge_hw_device_mask_all(hldev);
+
for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
if (!(hldev->vpaths_deployed & vxge_mBIT(i)))
diff -urpN patch6/drivers/net/vxge/vxge-traffic.h patch7/drivers/net/vxge/vxge-traffic.h
--- patch6/drivers/net/vxge/vxge-traffic.h 2009-09-04 01:25:50.000000000 -0700
+++ patch7/drivers/net/vxge/vxge-traffic.h 2009-09-04 02:07:28.000000000 -0700
@@ -2389,6 +2389,8 @@ vxge_hw_channel_dtr_free(struct __vxge_h
int
vxge_hw_channel_dtr_count(struct __vxge_hw_channel *channel);
+void
+vxge_hw_vpath_tti_ci_set(struct __vxge_hw_device *hldev, u32 vp_id);
/* ========================== PRIVATE API ================================= */
^ permalink raw reply
* [net-next-2.6 PATCH 6/9] vxge: Check if FCS stripping is disabled by the firmware.
From: Sreenivasa Honnur @ 2009-10-05 9:11 UTC (permalink / raw)
To: davem; +Cc: netdev, support
- Added a function to check if FCS stripping is disabled by the firmware, if
it is not disabled fail driver load.
- By default FCS stripping is disabled by the firmware. With this assumption
driver decrements the indicated packet length by 4 bytes(FCS length).
- This patch ensures that FCS stripping is disabled during driver load time.
Signed-off-by: Sreenivasa Honnur <sreenivasa.honnur@neterion.com>
---
diff -urpN patch5/drivers/net/vxge/vxge-config.c patch6/drivers/net/vxge/vxge-config.c
--- patch5/drivers/net/vxge/vxge-config.c 2009-09-04 01:24:25.000000000 -0700
+++ patch6/drivers/net/vxge/vxge-config.c 2009-09-04 01:33:43.000000000 -0700
@@ -2157,6 +2157,28 @@ exit:
}
/*
+ * vxge_hw_vpath_strip_fcs_check - Check for FCS strip.
+ */
+enum vxge_hw_status
+vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask)
+{
+ struct vxge_hw_vpmgmt_reg __iomem *vpmgmt_reg;
+ enum vxge_hw_status status = VXGE_HW_OK;
+ int i = 0, j = 0;
+
+ for (i = 0; i < VXGE_HW_MAX_VIRTUAL_PATHS; i++) {
+ if (!((vpath_mask) & vxge_mBIT(i)))
+ continue;
+ vpmgmt_reg = hldev->vpmgmt_reg[i];
+ for (j = 0; j < VXGE_HW_MAC_MAX_MAC_PORT_ID; j++) {
+ if (readq(&vpmgmt_reg->rxmac_cfg0_port_vpmgmt_clone[j])
+ & VXGE_HW_RXMAC_CFG0_PORT_VPMGMT_CLONE_STRIP_FCS)
+ return VXGE_HW_FAIL;
+ }
+ }
+ return status;
+}
+/*
* vxge_hw_mgmt_reg_Write - Write Titan register.
*/
enum vxge_hw_status
diff -urpN patch5/drivers/net/vxge/vxge-config.h patch6/drivers/net/vxge/vxge-config.h
--- patch5/drivers/net/vxge/vxge-config.h 2009-09-04 01:23:26.000000000 -0700
+++ patch6/drivers/net/vxge/vxge-config.h 2009-09-04 01:29:17.000000000 -0700
@@ -2201,6 +2201,8 @@ __vxge_hw_vpath_func_id_get(
enum vxge_hw_status
__vxge_hw_vpath_reset_check(struct __vxge_hw_virtualpath *vpath);
+enum vxge_hw_status
+vxge_hw_vpath_strip_fcs_check(struct __vxge_hw_device *hldev, u64 vpath_mask);
/**
* vxge_debug
* @level: level of debug verbosity.
diff -urpN patch5/drivers/net/vxge/vxge-main.c patch6/drivers/net/vxge/vxge-main.c
--- patch5/drivers/net/vxge/vxge-main.c 2009-09-04 01:23:26.000000000 -0700
+++ patch6/drivers/net/vxge/vxge-main.c 2009-09-04 01:31:12.000000000 -0700
@@ -4244,6 +4244,15 @@ vxge_probe(struct pci_dev *pdev, const s
goto _exit3;
}
+ /* if FCS stripping is not disabled in MAC fail driver load */
+ if (vxge_hw_vpath_strip_fcs_check(hldev, vpath_mask) != VXGE_HW_OK) {
+ vxge_debug_init(VXGE_ERR,
+ "%s: FCS stripping is not disabled in MAC"
+ " failing driver load", VXGE_DRIVER_NAME);
+ ret = -EINVAL;
+ goto _exit4;
+ }
+
vxge_hw_device_debug_set(hldev, VXGE_ERR, VXGE_COMPONENT_LL);
/* set private device info */
^ permalink raw reply
* Re: [PATCH] be2net: Fix a bug in preparation of mcc wrb which was causing flash operation to fail
From: David Miller @ 2009-10-05 9:09 UTC (permalink / raw)
To: ajitk, ajitkhaparde; +Cc: netdev
In-Reply-To: <20091005090555.GA12287@serverengines.com>
From: Ajit Khaparde <ajitkhaparde@gmail.com>
Date: Mon, 5 Oct 2009 14:36:07 +0530
> This patch fixes a bug that got introduced in commit 76998bc7.
> During preparation of mcc wrb, req was being wrongly overwritten
> and the flash operation was failing.
> This patch is against the net-2.6 tree.
>
> Signed-off-by: Ajit Khaparde <ajitk@serverengines.com>
Applied, thanks.
^ permalink raw reply
* [PATCH] be2net: Fix a bug in preparation of mcc wrb which was causing flash operation to fail
From: Ajit Khaparde @ 2009-10-05 9:06 UTC (permalink / raw)
To: davem, netdev
This patch fixes a bug that got introduced in commit 76998bc7.
During preparation of mcc wrb, req was being wrongly overwritten
and the flash operation was failing.
This patch is against the net-2.6 tree.
Signed-off-by: Ajit Khaparde <ajitk@serverengines.com>
---
drivers/net/benet/be_cmds.c | 1 -
1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/drivers/net/benet/be_cmds.c b/drivers/net/benet/be_cmds.c
index 79d35d1..89876ad 100644
--- a/drivers/net/benet/be_cmds.c
+++ b/drivers/net/benet/be_cmds.c
@@ -1129,7 +1129,6 @@ int be_cmd_write_flashrom(struct be_adapter *adapter, struct be_dma_mem *cmd,
spin_lock_bh(&adapter->mcc_lock);
wrb = wrb_from_mccq(adapter);
- req = embedded_payload(wrb);
sge = nonembedded_sgl(wrb);
be_wrb_hdr_prepare(wrb, cmd->size, false, 1);
--
1.6.0.4
^ permalink raw reply related
* [PATCH] iproute2 add hoplimit and reordering route options usage and parsing
From: Gilad Ben-Yossef @ 2009-10-05 8:54 UTC (permalink / raw)
To: netdev; +Cc: ori
From: Yuki Arbel <yuki@comsleep.com>
iproute2 git HEAD (spotted originally on 2.6.26, so it's probably not new)
does not parse the hoplimit route option when proccessing parameters, nor
does it print hoplimit and reordering options in the usage lines.
This patch fixes both.
Tested by setting hoplimit and be retreiving it via "show".
Signed-off-by: Gilad Ben-Yossef <gilad@codefidence.com>
[ported to HEAD and fixed a bug with hoplimit lock handling in original]
Signed-off-by: Ori Finkelman <ori@comsleep.com>
Signed-off-by: Yuki Arbel <yuki@comsleep.com>
---
Carved out from original patch by Yuki Arbel and Ori Finkelman from
Comsleep Ltd. which I'm asssiting in mainlining.
diff --git a/ip/iproute.c b/ip/iproute.c
index bf0f31b..4821a1d 100644
--- a/ip/iproute.c
+++ b/ip/iproute.c
@@ -73,7 +73,7 @@ static void usage(void)
fprintf(stderr, " [ rtt TIME ] [ rttvar TIME ]\n");
fprintf(stderr, " [ window NUMBER] [ cwnd NUMBER ] [ initcwnd NUMBER ]\n");
fprintf(stderr, " [ ssthresh NUMBER ] [ realms REALM ] [ src ADDRESS ]\n");
- fprintf(stderr, " [ rto_min TIME ]\n");
+ fprintf(stderr, " [ rto_min TIME ] [ hoplimit NUMBER ] [ reordering NUMBER] \n");
fprintf(stderr, "TYPE := [ unicast | local | broadcast | multicast | throw |\n");
fprintf(stderr, " unreachable | prohibit | blackhole | nat ]\n");
fprintf(stderr, "TABLE_ID := [ local | main | default | all | NUMBER ]\n");
@@ -768,6 +768,16 @@ int iproute_modify(int cmd, unsigned flags, int argc, char **argv)
if (get_unsigned(&mtu, *argv, 0))
invarg("\"mtu\" value is invalid\n", *argv);
rta_addattr32(mxrta, sizeof(mxbuf), RTAX_MTU, mtu);
+ } else if (strcmp(*argv, "hoplimit") == 0) {
+ unsigned hoplimit;
+ NEXT_ARG();
+ if (strcmp(*argv, "lock") == 0) {
+ mxlock |= (1<<RTAX_HOPLIMIT);
+ NEXT_ARG();
+ }
+ if (get_unsigned(&hoplimit, *argv, 0))
+ invarg("\"hoplimit\" value is invalid\n", *argv);
+ rta_addattr32(mxrta, sizeof(mxbuf), RTAX_HOPLIMIT, hoplimit);
#ifdef RTAX_ADVMSS
} else if (strcmp(*argv, "advmss") == 0) {
unsigned mss;
^ permalink raw reply related
* Re: [PATCH] TCPCT+1: initial SYN exchange with SYNACK data
From: David Miller @ 2009-10-05 8:50 UTC (permalink / raw)
To: william.allen.simpson; +Cc: netdev
In-Reply-To: <4AC9AD14.2060500@gmail.com>
From: William Allen Simpson <william.allen.simpson@gmail.com>
Date: Mon, 05 Oct 2009 04:23:48 -0400
> This will be widely deployed. Deployment in DNS root servers is
> expected by December. It will be hammered with 600,000+ queries per
> minute. Does that impact your design expectations?
Great, so 600,000 times per second we'll take two new atomic
operations with your most recent suggestion...
> Tomorrow, I'll send out a new patch with everything buried in a single
> kref, the various tests will only be a trifle slower....
This one..
The reason we want tcp_sock smaller is to get better performance (less
memory references) and to save memory. If you're exchanging the space
savings for atomic operations and whatnot, you're defeating half of
the point of making the tcp_sock state smaller.
Make your state take up less space in tcp_sock without making it cost
more in some other form.
And btw, it's not our problem that all of a sudden this is critical
and important for you, and that you don't like how not all aspects of
your implementation were commented upon long ago when the first
implementation was posted.
Your insistence to keep harping on those issues will only irritate me
(and probably others). So please keep that out of the discussion,
thanks.
^ permalink raw reply
* Re: [PATCH] TCPCT+1: initial SYN exchange with SYNACK data
From: David Miller @ 2009-10-05 8:45 UTC (permalink / raw)
To: william.allen.simpson; +Cc: netdev
In-Reply-To: <4AC9AA3E.2090001@gmail.com>
From: William Allen Simpson <william.allen.simpson@gmail.com>
Date: Mon, 05 Oct 2009 04:11:42 -0400
> Given that size is now a concern, would a single kref pointer with a
> u16 field for flags be acceptable? I could bury the rest in the
> kref block.
>
> Would that be acceptable without a config option?
Then we'll eat an atomic operation every connect() or something
like that?
That's bad too. We're trying desperately to remove as many
atomic operations as possible from the socket paths.
Compress your state, really compress it, don't just externalize
it somewhere else in exchange for a different cost.
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox