lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Mon, 06 Dec 2010 23:38:14 +0200
From:	Maxim Levitsky <maximlevitsky@...il.com>
To:	Hayes Wang <hayeswang@...ltek.com>
Cc:	romieu@...zoreil.com, netdev@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] net/r8169: Remove the firmware of RTL8111D

On Mon, 2010-12-06 at 15:11 +0800, Hayes Wang wrote:
> Remove the firmware of RTL8111D from the kernel.
> The binary file of firmware would be moved to linux-firmware repository.
> The firmwares are rtl_nic/rtl8168d-1.fw and rtl_nic/rtl8168d-2.fw.
> The driver would load the firmware through request_firmware. The driver
> would just go along if the firmware couldn't be found. However, it is
> suggested to be done with the suitable firmware.
> 
> Signed-off-by: Hayes Wang <hayeswang@...ltek.com>
Good day.

Hayes Wang, maybe you know who is responsible for DVB division in your
company?
I recently bought a RTL2832 based DVB-T stick and I like to make it
supportable in linux out of box.

I think I have enough knowledge/experience to do that.

(I currently use your company's driver and it works just fine)


What I miss is datasheets on the device (I can manage without them using
your driver source as a reference, but datasheets will help me a lot
simplifying things, and reduce bugs).

And I need a official statement that driver you released is
GPL-compatible.

I found few versions of it in few unofficial locations in the web, and
it contains the 'MODULE_VERSION("GPL")', but files miss the GPL header,
and in few places the code comments state that source in the file was
taken from sources provided by other companies (e.g. Microtune).


Thanks in advance,
	Maxim Levitsky


> ---
>  drivers/net/r8169.c |  796 ++++++++-------------------------------------------
>  1 files changed, 117 insertions(+), 679 deletions(-)
>  mode change 100644 => 100755 drivers/net/r8169.c
> 
> diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c
> old mode 100644
> new mode 100755
> index 7d33ef4..e0df607
> --- a/drivers/net/r8169.c
> +++ b/drivers/net/r8169.c
> @@ -24,6 +24,7 @@
>  #include <linux/init.h>
>  #include <linux/dma-mapping.h>
>  #include <linux/pm_runtime.h>
> +#include <linux/firmware.h>
>  
>  #include <asm/system.h>
>  #include <asm/io.h>
> @@ -1383,6 +1384,50 @@ static void rtl_phy_write(void __iomem *ioaddr, const struct phy_reg *regs, int
>  	}
>  }
>  
> +#define PHY_READ		0x00000000
> +#define PHY_DATA_OR		0x10000000
> +#define PHY_DATA_AND		0x20000000
> +#define PHY_BJMPN		0x30000000
> +#define PHY_READ_EFUSE		0x40000000
> +#define PHY_READ_MAC_BYTE	0x50000000
> +#define PHY_WRITE_MAC_BYTE	0x60000000
> +#define PHY_CLEAR_READCOUNT	0x70000000
> +#define PHY_WRITE		0x80000000
> +#define PHY_READCOUNT_EQ_SKIP	0x90000000
> +#define PHY_COMP_EQ_SKIPN	0xA0000000
> +#define PHY_COMP_NEQ_SKIPN	0xB0000000
> +#define PHY_WRITE_PREVIOUS	0xC0000000
> +#define PHY_SKIPN		0xD0000000
> +#define PHY_DELAY_MS		0xE0000000
> +#define PHY_WRITE_ERI_WORD	0xF0000000
> +
> +static void
> +rtl_phy_write_fw(struct rtl8169_private *tp, const struct firmware *fw)
> +{
> +	void __iomem *ioaddr = tp->mmio_addr;
> +	u32 *phytable = (u32 *)fw->data;
> +	u32 action;
> +	size_t len = fw->size / sizeof(*phytable);
> +	u32 regno, data;
> +
> +	while (len-- > 0 && *phytable != 0) {
> +		action = le32_to_cpu(*phytable);
> +		regno = (action & 0x0FFF0000) >> 16;
> +		data = action & 0x0000FFFF;
> +
> +		switch(action & 0xF0000000) {
> +		case PHY_WRITE:
> +			mdio_write(ioaddr, regno, data);
> +			phytable++;
> +			break;
> +		default:
> +			netif_err(tp, probe, tp->dev,
> +				  "Unknown action 0x%08x\n", action);
> +			return;
> +		}
> +	}
> +}
> +
>  static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
>  {
>  	static const struct phy_reg phy_reg_init[] = {
> @@ -1715,9 +1760,10 @@ static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
>  	rtl8168c_3_hw_phy_config(ioaddr);
>  }
>  
> -static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
> +static void rtl8168d_1_hw_phy_config(struct rtl8169_private *tp)
>  {
>  	static const struct phy_reg phy_reg_init_0[] = {
> +		/* Channel Estimation */
>  		{ 0x1f, 0x0001 },
>  		{ 0x06, 0x4064 },
>  		{ 0x07, 0x2863 },
> @@ -1734,379 +1780,41 @@ static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
>  		{ 0x12, 0xf49f },
>  		{ 0x13, 0x070b },
>  		{ 0x1a, 0x05ad },
> -		{ 0x14, 0x94c0 }
> -	};
> -	static const struct phy_reg phy_reg_init_1[] = {
> +		{ 0x14, 0x94c0 },
> +
> +		/*
> +		 * Tx Error Issue
> +		 * enhance line driver power
> +		 */
>  		{ 0x1f, 0x0002 },
>  		{ 0x06, 0x5561 },
>  		{ 0x1f, 0x0005 },
>  		{ 0x05, 0x8332 },
> -		{ 0x06, 0x5561 }
> -	};
> -	static const 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 },
> +		{ 0x06, 0x5561 },
> +
> +		/*
> +		 * Can not link to 1Gbps with bad cable
> +		 * Decrease SNR threshold form 21.07dB to 19.04dB
> +		 */
> +		{ 0x1f, 0x0001 },
> +		{ 0x17, 0x0cc0 },
>  
>  		{ 0x1f, 0x0000 },
> -		{ 0x0d, 0xf880 },
> -		{ 0x1f, 0x0000 }
> +		{ 0x0d, 0xf880 }
>  	};
> +	void __iomem *ioaddr = tp->mmio_addr;
> +	const struct firmware *fw;
>  
>  	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
>  
> +	/*
> +	 * Rx Error Issue
> +	 * Fine Tune Switching regulator parameter
> +	 */
>  	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) {
>  		static const struct phy_reg phy_reg_init[] = {
>  			{ 0x1f, 0x0002 },
> @@ -2147,20 +1855,35 @@ static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
>  		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
>  	}
>  
> +	/* RSET couple improve */
>  	mdio_write(ioaddr, 0x1f, 0x0002);
>  	mdio_patch(ioaddr, 0x0d, 0x0300);
>  	mdio_patch(ioaddr, 0x0f, 0x0010);
>  
> +	/* Fine tune PLL performance */
>  	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));
> +	mdio_write(ioaddr, 0x1F, 0x0005);
> +	mdio_write(ioaddr, 0x05, 0x001B);
> +	if (mdio_read(ioaddr, 0x06) == 0xBF00 &&
> +	    request_firmware(&fw, "rtl_nic/rtl8168d-1.fw", &tp->pci_dev->dev) == 0) {
> +		rtl_phy_write_fw(tp, fw);
> +		release_firmware(fw);
> +	} else {
> +		netif_warn(tp, probe, tp->dev, "unable to apply firmware patch\n");
> +	}
> +
> +	mdio_write(ioaddr, 0x1f, 0x0000);
>  }
>  
> -static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
> +MODULE_FIRMWARE("rtl_nic/rtl8168d-1.fw");
> +
> +static void rtl8168d_2_hw_phy_config(struct rtl8169_private *tp)
>  {
>  	static const struct phy_reg phy_reg_init_0[] = {
> +		/* Channel Estimation */
>  		{ 0x1f, 0x0001 },
>  		{ 0x06, 0x4064 },
>  		{ 0x07, 0x2863 },
> @@ -2179,324 +1902,28 @@ static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
>  		{ 0x1a, 0x05ad },
>  		{ 0x14, 0x94c0 },
>  
> +		/*
> +		 * Tx Error Issue
> +		 * enhance line driver power
> +		 */
>  		{ 0x1f, 0x0002 },
>  		{ 0x06, 0x5561 },
>  		{ 0x1f, 0x0005 },
>  		{ 0x05, 0x8332 },
> -		{ 0x06, 0x5561 }
> -	};
> -	static const 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 },
> +		{ 0x06, 0x5561 },
> +
> +		/*
> +		 * Can not link to 1Gbps with bad cable
> +		 * Decrease SNR threshold form 21.07dB to 19.04dB
> +		 */
> +		{ 0x1f, 0x0001 },
> +		{ 0x17, 0x0cc0 },
>  
>  		{ 0x1f, 0x0000 },
> -		{ 0x0d, 0xf880 },
> -		{ 0x1f, 0x0000 }
> +		{ 0x0d, 0xf880 }
>  	};
> +	void __iomem *ioaddr = tp->mmio_addr;
> +	const struct firmware *fw;
>  
>  	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
>  
> @@ -2540,19 +1967,30 @@ static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
>  		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
>  	}
>  
> +	/* Fine tune PLL performance */
>  	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);
> -
> +	/* Switching regulator Slew rate */
>  	mdio_write(ioaddr, 0x1f, 0x0002);
>  	mdio_patch(ioaddr, 0x0f, 0x0017);
>  
> -	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
> +	mdio_write(ioaddr, 0x1F, 0x0005);
> +	mdio_write(ioaddr, 0x05, 0x001B);
> +	if (mdio_read(ioaddr, 0x06) == 0xB300 &&
> +	    request_firmware(&fw, "rtl_nic/rtl8168d-2.fw", &tp->pci_dev->dev) == 0) {
> +		rtl_phy_write_fw(tp, fw);
> +		release_firmware(fw);
> +	} else {
> +		netif_warn(tp, probe, tp->dev, "unable to apply firmware patch\n");
> +	}
> +
> +	mdio_write(ioaddr, 0x1f, 0x0000);
>  }
>  
> +MODULE_FIRMWARE("rtl_nic/rtl8168d-2.fw");
> +
>  static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
>  {
>  	static const struct phy_reg phy_reg_init[] = {
> @@ -2688,10 +2126,10 @@ static void rtl_hw_phy_config(struct net_device *dev)
>  		rtl8168cp_2_hw_phy_config(ioaddr);
>  		break;
>  	case RTL_GIGA_MAC_VER_25:
> -		rtl8168d_1_hw_phy_config(ioaddr);
> +		rtl8168d_1_hw_phy_config(tp);
>  		break;
>  	case RTL_GIGA_MAC_VER_26:
> -		rtl8168d_2_hw_phy_config(ioaddr);
> +		rtl8168d_2_hw_phy_config(tp);
>  		break;
>  	case RTL_GIGA_MAC_VER_27:
>  		rtl8168d_3_hw_phy_config(ioaddr);


--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ