|
发表于 2014-11-11 11:58:30
|
显示全部楼层
楼上的方法是不可行的,下一版应该能固定,如果LZ有条件的话可打上这个临时的补丁- --- a/drivers/net/ethernet/sunxi/eth/sunxi_geth.c
- +++ b/drivers/net/ethernet/sunxi/eth/sunxi_geth.c
- @@ -33,11 +33,14 @@
- #include <linux/pinctrl/consumer.h>
- #include <linux/pinctrl/pinctrl.h>
- #include <linux/netdevice.h>
- +//#include <mach/hardware.h>
- #include <linux/clk/sunxi_name.h>
- #include <mach/sys_config.h>
- #include <mach/gpio.h>
- +#include <mach/sun9i/platform-sun9iw1p1.h>
- +
- #include "sunxi_geth.h"
- #include "sunxi_geth_status.h"
- @@ -47,6 +50,8 @@
- #define BUDGET (DMA_DESC_RX/4)
- #define TX_THRESH (DMA_DESC_TX/4)
- +#define IO_ADDRESS(x) (x + 0xf0000000)
- +
- #define HASH_TABLE_SIZE 64
- #define MAX_BUF_SZ (SZ_2K - 1)
- @@ -609,10 +614,30 @@ static void geth_check_addr(struct net_device *ndev, unsigned char *mac)
- for (i=0; i<ETH_ALEN; i++, p++)
- ndev->dev_addr[i] = simple_strtoul(p, &p, 16);
- +
- + unsigned int reg_val;
- + reg_val = readl(SUNXI_SID_VBASE);
- + pr_warning("emac: use mac address from chipid\n");
- + ndev->dev_addr[0] = 0x02; /* Non OUI / registered MAC address */
- +
- + pr_warning("reg_val=%d",reg_val);
- + ndev->dev_addr[1] = (reg_val >> 0) & 0xff;
- + reg_val = readl(SUNXI_SID_VBASE + 0x0c);
- + ndev->dev_addr[2] = readl(SUNXI_SID_VBASE + 0x200);
- + ndev->dev_addr[3] = readl(SUNXI_SID_VBASE + 0x200 + 0x4);
- + ndev->dev_addr[4] = readl(SUNXI_SID_VBASE + 0x200 + 0x8);
- + ndev->dev_addr[5] = readl(SUNXI_SID_VBASE + 0x200 + 0xc);
- +
- +
- +
- +/*
- if (!is_valid_ether_addr(ndev->dev_addr)) {
- random_ether_addr(ndev->dev_addr);
- printk(KERN_WARNING "%s: Use random mac address\n", ndev->name);
- }
- +
- +
- + */
- }
- }
复制代码 |
|