davinci: Factor out emac mac address handling
Factor out the code to extract that mac address from i2c eeprom. Signed-off-by: Mark A. Greer <mgreer@mvista.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
This commit is contained in:
committed by
Kevin Hilman
parent
c97909fcf1
commit
b14dc0f994
@@ -44,6 +44,7 @@
|
|||||||
#include <mach/psc.h>
|
#include <mach/psc.h>
|
||||||
#include <mach/nand.h>
|
#include <mach/nand.h>
|
||||||
#include <mach/mmc.h>
|
#include <mach/mmc.h>
|
||||||
|
#include <mach/emac.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
|
|
||||||
#define DM644X_EVM_PHY_MASK (0x2)
|
#define DM644X_EVM_PHY_MASK (0x2)
|
||||||
@@ -437,28 +438,13 @@ static struct pcf857x_platform_data pcf_data_u35 = {
|
|||||||
* - 0x0039, 1 byte NTSC vs PAL (bit 0x80 == PAL)
|
* - 0x0039, 1 byte NTSC vs PAL (bit 0x80 == PAL)
|
||||||
* - ... newer boards may have more
|
* - ... newer boards may have more
|
||||||
*/
|
*/
|
||||||
static struct memory_accessor *at24_mem_acc;
|
|
||||||
|
|
||||||
static void at24_setup(struct memory_accessor *mem_acc, void *context)
|
|
||||||
{
|
|
||||||
char mac_addr[ETH_ALEN];
|
|
||||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
|
||||||
|
|
||||||
at24_mem_acc = mem_acc;
|
|
||||||
|
|
||||||
/* Read MAC addr from EEPROM */
|
|
||||||
if (at24_mem_acc->read(at24_mem_acc, mac_addr, 0x7f00, ETH_ALEN) ==
|
|
||||||
ETH_ALEN) {
|
|
||||||
printk(KERN_INFO "Read MAC addr from EEPROM: %pM\n", mac_addr);
|
|
||||||
memcpy(soc_info->emac_pdata->mac_addr, mac_addr, ETH_ALEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct at24_platform_data eeprom_info = {
|
static struct at24_platform_data eeprom_info = {
|
||||||
.byte_len = (256*1024) / 8,
|
.byte_len = (256*1024) / 8,
|
||||||
.page_size = 64,
|
.page_size = 64,
|
||||||
.flags = AT24_FLAG_ADDR16,
|
.flags = AT24_FLAG_ADDR16,
|
||||||
.setup = at24_setup,
|
.setup = davinci_get_mac_addr,
|
||||||
|
.context = (void *)0x7f00,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -684,7 +670,6 @@ static __init void davinci_evm_init(void)
|
|||||||
|
|
||||||
soc_info->emac_pdata->phy_mask = DM644X_EVM_PHY_MASK;
|
soc_info->emac_pdata->phy_mask = DM644X_EVM_PHY_MASK;
|
||||||
soc_info->emac_pdata->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY;
|
soc_info->emac_pdata->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY;
|
||||||
dm644x_init_emac(soc_info->emac_pdata);
|
|
||||||
|
|
||||||
/* Register the fixup for PHY on DaVinci */
|
/* Register the fixup for PHY on DaVinci */
|
||||||
phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK,
|
phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK,
|
||||||
|
@@ -198,28 +198,13 @@ static struct pcf857x_platform_data pcf_data = {
|
|||||||
* - 0x7f00, 6 bytes Ethernet Address
|
* - 0x7f00, 6 bytes Ethernet Address
|
||||||
* - ... newer boards may have more
|
* - ... newer boards may have more
|
||||||
*/
|
*/
|
||||||
static struct memory_accessor *at24_mem_acc;
|
|
||||||
|
|
||||||
static void at24_setup(struct memory_accessor *mem_acc, void *context)
|
|
||||||
{
|
|
||||||
char mac_addr[ETH_ALEN];
|
|
||||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
|
||||||
|
|
||||||
at24_mem_acc = mem_acc;
|
|
||||||
|
|
||||||
/* Read MAC addr from EEPROM */
|
|
||||||
if (at24_mem_acc->read(at24_mem_acc, mac_addr, 0x7f00, ETH_ALEN) ==
|
|
||||||
ETH_ALEN) {
|
|
||||||
pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr);
|
|
||||||
memcpy(soc_info->emac_pdata->mac_addr, mac_addr, ETH_ALEN);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct at24_platform_data eeprom_info = {
|
static struct at24_platform_data eeprom_info = {
|
||||||
.byte_len = (256*1024) / 8,
|
.byte_len = (256*1024) / 8,
|
||||||
.page_size = 64,
|
.page_size = 64,
|
||||||
.flags = AT24_FLAG_ADDR16,
|
.flags = AT24_FLAG_ADDR16,
|
||||||
.setup = at24_setup,
|
.setup = davinci_get_mac_addr,
|
||||||
|
.context = (void *)0x7f00,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct i2c_board_info __initdata i2c_info[] = {
|
static struct i2c_board_info __initdata i2c_info[] = {
|
||||||
@@ -258,7 +243,6 @@ static __init void evm_init(void)
|
|||||||
|
|
||||||
soc_info->emac_pdata->phy_mask = DM646X_EVM_PHY_MASK;
|
soc_info->emac_pdata->phy_mask = DM646X_EVM_PHY_MASK;
|
||||||
soc_info->emac_pdata->mdio_max_freq = DM646X_EVM_MDIO_FREQUENCY;
|
soc_info->emac_pdata->mdio_max_freq = DM646X_EVM_MDIO_FREQUENCY;
|
||||||
dm646x_init_emac(soc_info->emac_pdata);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static __init void davinci_dm646x_evm_irq_init(void)
|
static __init void davinci_dm646x_evm_irq_init(void)
|
||||||
|
@@ -10,12 +10,14 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
|
|
||||||
#include <asm/tlb.h>
|
#include <asm/tlb.h>
|
||||||
#include <asm/mach/map.h>
|
#include <asm/mach/map.h>
|
||||||
|
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <mach/cputype.h>
|
#include <mach/cputype.h>
|
||||||
|
#include <mach/emac.h>
|
||||||
|
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
|
|
||||||
@@ -24,6 +26,16 @@ EXPORT_SYMBOL(davinci_soc_info);
|
|||||||
|
|
||||||
void __iomem *davinci_intc_base;
|
void __iomem *davinci_intc_base;
|
||||||
|
|
||||||
|
void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context)
|
||||||
|
{
|
||||||
|
char *mac_addr = davinci_soc_info.emac_pdata->mac_addr;
|
||||||
|
off_t offset = (off_t)context;
|
||||||
|
|
||||||
|
/* Read MAC addr from EEPROM */
|
||||||
|
if (mem_acc->read(mem_acc, mac_addr, offset, ETH_ALEN) == ETH_ALEN)
|
||||||
|
pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr);
|
||||||
|
}
|
||||||
|
|
||||||
static struct davinci_id * __init davinci_get_id(u32 jtag_id)
|
static struct davinci_id * __init davinci_get_id(u32 jtag_id)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@@ -254,32 +254,6 @@ struct davinci_timer_instance davinci_timer_instance[2] = {
|
|||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
/*-------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#if defined(CONFIG_TI_DAVINCI_EMAC) || defined(CONFIG_TI_DAVINCI_EMAC_MODULE)
|
|
||||||
|
|
||||||
void davinci_init_emac(struct emac_platform_data *pdata)
|
|
||||||
{
|
|
||||||
DECLARE_MAC_BUF(buf);
|
|
||||||
|
|
||||||
/* if valid MAC exists, don't re-register */
|
|
||||||
if (is_valid_ether_addr(pdata->mac_addr))
|
|
||||||
return;
|
|
||||||
else {
|
|
||||||
/* Use random MAC if none passed */
|
|
||||||
random_ether_addr(pdata->mac_addr);
|
|
||||||
|
|
||||||
printk(KERN_WARNING "%s: using random MAC addr: %s\n",
|
|
||||||
__func__, print_mac(buf, pdata->mac_addr));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
void davinci_init_emac(struct emac_platform_data *unused) {}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------------------*/
|
|
||||||
|
|
||||||
static int __init davinci_init_devices(void)
|
static int __init davinci_init_devices(void)
|
||||||
{
|
{
|
||||||
/* please keep these calls, and their implementations above,
|
/* please keep these calls, and their implementations above,
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#define _MACH_DAVINCI_EMAC_H
|
#define _MACH_DAVINCI_EMAC_H
|
||||||
|
|
||||||
#include <linux/if_ether.h>
|
#include <linux/if_ether.h>
|
||||||
|
#include <linux/memory.h>
|
||||||
|
|
||||||
struct emac_platform_data {
|
struct emac_platform_data {
|
||||||
char mac_addr[ETH_ALEN];
|
char mac_addr[ETH_ALEN];
|
||||||
@@ -30,7 +31,6 @@ enum {
|
|||||||
EMAC_VERSION_1, /* DM644x */
|
EMAC_VERSION_1, /* DM644x */
|
||||||
EMAC_VERSION_2, /* DM646x */
|
EMAC_VERSION_2, /* DM646x */
|
||||||
};
|
};
|
||||||
void davinci_init_emac(struct emac_platform_data *pdata);
|
|
||||||
|
void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user