diff --git a/drivers/amlogic/Makefile b/drivers/amlogic/Makefile index e8d9c80ab39d..a0227fbd2f17 100755 --- a/drivers/amlogic/Makefile +++ b/drivers/amlogic/Makefile @@ -9,6 +9,8 @@ obj-y +=early_init/ +obj-$(CONFIG_EFUSE)+=efuse/ + ###For Display, this is for quick logo show## obj-$(CONFIG_AM_DISPLAY_MODULE) += display/ @@ -46,7 +48,6 @@ obj-$(CONFIG_I2C) += i2c/ #obj-y += extern_io/ -obj-$(CONFIG_EFUSE)+=efuse/ obj-$(CONFIG_AM_INPUT) += input/ ifneq ($(wildcard $(srctree)/../hardware/amlogic/touch),) diff --git a/drivers/amlogic/efuse/efuse.c b/drivers/amlogic/efuse/efuse.c index c5d2990e53a4..86f40f1a8af2 100644 --- a/drivers/amlogic/efuse/efuse.c +++ b/drivers/amlogic/efuse/efuse.c @@ -239,40 +239,37 @@ static const struct file_operations efuse_fops = { .unlocked_ioctl = efuse_unlocked_ioctl, }; -#if defined(CONFIG_MACH_MESON8B_ODROIDC) -/* function: aml_efuse_get_item - * key_name: key name - * data: key data - * return : >=0 ok, <0 error - * */ -int aml_efuse_get_item(unsigned char* key_name, unsigned char* data) +unsigned char *aml_efuse_get_item(unsigned char* key_name) { char dec_mac[50] = {0}; efuseinfo_item_t info; unsigned id=0; - + unsigned char *ret; + if(strcmp(key_name,"mac")==0) id = EFUSE_MAC_ID; else if(strcmp(key_name,"mac_bt")==0) id = EFUSE_MAC_BT_ID; else if(strcmp(key_name,"mac_wifi")==0) id = EFUSE_MAC_WIFI_ID; else if(strcmp(key_name,"usid")==0) id = EFUSE_USID_ID; else { - printk(KERN_INFO"%s : UNKNOWN key_name\n",__func__); + pr_info("%s: UNKNOWN key_name\n", __func__); return -EFAULT; } if(efuse_getinfo_byID(id, &info) < 0){ - printk(KERN_INFO"ID is not found\n"); + pr_emerg("mac: ID is not found\n"); return -EFAULT; } - if (efuse_read_item(dec_mac, info.data_len, (loff_t*)&info.offset) < 0) - return -EFAULT; + + if (efuse_read_item(dec_mac, info.data_len, (loff_t*)&info.offset) < 0) { + pr_emerg("mac: couldn't read efuse now\n"); + return -EFAULT; + } - memcpy(&data[0],dec_mac,info.data_len); - - return 0; + ret = kzalloc(info.data_len + 6, GFP_KERNEL); + sprintf(ret, "%02x:%02x:%02x:%02x:%02x:%02x", dec_mac[0],dec_mac[1],dec_mac[2],dec_mac[3],dec_mac[4],dec_mac[5]); + return ret; } EXPORT_SYMBOL(aml_efuse_get_item); -#endif /* Sysfs Files */ static ssize_t mac_show(struct class *cla, struct class_attribute *attr, char *buf) diff --git a/drivers/amlogic/ethernet/am_net8218.c b/drivers/amlogic/ethernet/am_net8218.c old mode 100644 new mode 100755 index 3f05290b579d..f7e68d74f051 --- a/drivers/amlogic/ethernet/am_net8218.c +++ b/drivers/amlogic/ethernet/am_net8218.c @@ -119,6 +119,7 @@ static int ethernet_reset(struct net_device *dev); static int reset_mac(struct net_device *dev); static void am_net_dump_macreg(void); static void read_macreg(void); +extern char *aml_efuse_get_item(unsigned char* key_name); /* --------------------------------------------------------------------------*/ /** @@ -890,45 +891,6 @@ static int mac_pmt_enable(unsigned int enable) * @return */ /* --------------------------------------------------------------------------*/ -//#undef CONFIG_AML_NAND_KEY -#ifdef CONFIG_AML_NAND_KEY -extern int get_aml_key_kernel(const char* key_name, unsigned char* data, int ascii_flag); -extern int extenal_api_key_set_version(char *devvesion); -static char print_buff[1025]; -void read_mac_from_nand(struct net_device *ndev) -{ - int ret; - u8 mac[ETH_ALEN]; - char *endp; - int j; - ret = get_aml_key_kernel("mac", print_buff, 0); - extenal_api_key_set_version("nand3"); - printk("ret = %d\nprint_buff=%s\n", ret, print_buff); - if (ret >= 0) { - strcpy(ndev->dev_addr, print_buff); - for(j=0; j < ETH_ALEN; j++) - { - mac[j] = simple_strtol(&ndev->dev_addr[3 * j], &endp, 16); - printk("%d : %d\n", j, mac[j]); - } - memcpy(ndev->dev_addr, mac, ETH_ALEN); - } - -} -#endif - -#if defined(CONFIG_MACH_MESON8B_ODROIDC) -extern int aml_efuse_get_item(unsigned char* key_name, unsigned char* data); -void read_mac_from_efuse(struct net_device *ndev) -{ - int ret; - ret = aml_efuse_get_item("mac", ndev->dev_addr); - if (ret < 0) { - printk(KERN_INFO "ERROR! failed to read hardware mac address\n"); - random_ether_addr(ndev->dev_addr); - } -} -#endif static int aml_mac_init(struct net_device *ndev) { @@ -937,18 +899,15 @@ static int aml_mac_init(struct net_device *ndev) writel(1, (void*)(np->base_addr + ETH_DMA_0_Bus_Mode)); writel(0x00100800,(void*)(np->base_addr + ETH_DMA_0_Bus_Mode)); -#if defined(CONFIG_MACH_MESON8B_ODROIDC) - read_mac_from_efuse(ndev); -#else + printk("--1--write mac add to:"); data_dump(ndev->dev_addr, 6); -#ifdef CONFIG_AML_NAND_KEY - read_mac_from_nand(ndev); -#endif + printk("--2--write mac add to:"); + data_dump(ndev->dev_addr, 6); -#endif + write_mac_addr(ndev, ndev->dev_addr); val = 0xc80c | //8<<8 | 8<<17; //tx and rx all 8bit mode; @@ -1556,32 +1515,6 @@ static void tx_timeout(struct net_device *dev) * @param macaddr */ /* --------------------------------------------------------------------------*/ -/*static void get_mac_from_nand(struct net_device *dev, char *macaddr) -{ - int ret; - int use_nand_mac=0; - u8 mac[ETH_ALEN]; - - extenal_api_key_set_version("nand3"); - ret = get_aml_key_kernel("mac_wifi", print_buff, 0); - printk("ret = %d\nprint_buff=%s\n", ret, print_buff); - if (ret >= 0) { - strcpy(mac_addr, print_buff); - } - for(; j < ETH_ALEN; j++) - { - mac[j] = simple_strtol(&mac_addr[3 * j], &endp, 16); - printk("%d : %d\n", j, mac[j]); - } - memcpy(macaddr, mac, ETH_ALEN); -} -static void print_mac(char *macaddr) -{ - printk("write mac add to:"); - data_dump(macaddr, 6); -}*/ - - static void write_mac_addr(struct net_device *dev, char *macaddr) { @@ -1637,34 +1570,22 @@ static void config_mac_addr(struct net_device *dev, void *mac) write_mac_addr(dev, dev->dev_addr); } -/* --------------------------------------------------------------------------*/ -/** - * @brief mac_addr_set - * - * @param line - * - * @return - */ -/* --------------------------------------------------------------------------*/ -static int __init mac_addr_set(char *line) +static void mac_from_efuse_to_DEFMAC(void) { unsigned char mac[6]; - int i = 0; - for (i = 0; i < 6 && line[0] != '\0' && line[1] != '\0'; i++) { - mac[i] = chartonum(line[0]) << 4 | chartonum(line[1]); - line += 3; + unsigned char *efuse_mac; + int i; + + efuse_mac = aml_efuse_get_item("mac"); + + for (i = 0; i < 6 && efuse_mac[0] != '\0' && efuse_mac[1] != '\0'; i++) { + mac[i] = chartonum(efuse_mac[0]) << 4 | chartonum(efuse_mac[1]); + efuse_mac += 3; } memcpy(DEFMAC, mac, 6); - printk("******** uboot setup mac-addr: %x:%x:%x:%x:%x:%x\n", - DEFMAC[0], DEFMAC[1], DEFMAC[2], DEFMAC[3], DEFMAC[4], DEFMAC[5]); g_mac_addr_setup++; - - return 1; } -__setup("mac=", mac_addr_set); - - /* --------------------------------------------------------------------------*/ /** * @brief phy_mc_hash @@ -1893,31 +1814,13 @@ static int setup_net_device(struct net_device *dev) (1 << 13) | //FBI: Fatal Bus Error Interrupt (1) | //tx interrupt 0; + mac_from_efuse_to_DEFMAC(); config_mac_addr(dev, DEFMAC); dev_alloc_name(dev, "eth%d"); memset(&np->stats, 0, sizeof(np->stats)); return res; } -/* -M6TV - 23 -M6TVlite - 24 -M8 - 25 -M6TVd - 26 -M8baby - 27 -G9TV - 28 -*/ -#if 0 -static unsigned int get_cpuid(){ - return READ_CBUS_REG(0x1f53)&0xff; -} -#endif /* --------------------------------------------------------------------------*/ /** * @brief probe_init