Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b14dc0f9 authored by Mark A. Greer's avatar Mark A. Greer Committed by Kevin Hilman
Browse files

davinci: Factor out emac mac address handling



Factor out the code to extract that mac address from
i2c eeprom.

Signed-off-by: default avatarMark A. Greer <mgreer@mvista.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent c97909fc
Loading
Loading
Loading
Loading
+3 −18
Original line number Diff line number Diff line
@@ -44,6 +44,7 @@
#include <mach/psc.h>
#include <mach/nand.h>
#include <mach/mmc.h>
#include <mach/emac.h>
#include <mach/common.h>

#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)
 *  - ... 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 = {
	.byte_len	= (256*1024) / 8,
	.page_size	= 64,
	.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->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY;
	dm644x_init_emac(soc_info->emac_pdata);

	/* Register the fixup for PHY on DaVinci */
	phy_register_fixup_for_uid(LXT971_PHY_ID, LXT971_PHY_MASK,
+2 −18
Original line number Diff line number Diff line
@@ -198,28 +198,13 @@ static struct pcf857x_platform_data pcf_data = {
 *  - 0x7f00, 6 bytes Ethernet Address
 *  - ... 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 = {
	.byte_len       = (256*1024) / 8,
	.page_size      = 64,
	.flags          = AT24_FLAG_ADDR16,
	.setup          = at24_setup,
	.setup          = davinci_get_mac_addr,
	.context	= (void *)0x7f00,
};

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->mdio_max_freq = DM646X_EVM_MDIO_FREQUENCY;
	dm646x_init_emac(soc_info->emac_pdata);
}

static __init void davinci_dm646x_evm_irq_init(void)
+12 −0
Original line number Diff line number Diff line
@@ -10,12 +10,14 @@
 */
#include <linux/module.h>
#include <linux/io.h>
#include <linux/etherdevice.h>

#include <asm/tlb.h>
#include <asm/mach/map.h>

#include <mach/common.h>
#include <mach/cputype.h>
#include <mach/emac.h>

#include "clock.h"

@@ -24,6 +26,16 @@ EXPORT_SYMBOL(davinci_soc_info);

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)
{
	int i;
+0 −26
Original line number Diff line number Diff line
@@ -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)
{
	/* please keep these calls, and their implementations above,
+3 −3
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#define _MACH_DAVINCI_EMAC_H

#include <linux/if_ether.h>
#include <linux/memory.h>

struct emac_platform_data {
	char mac_addr[ETH_ALEN];
@@ -30,7 +31,6 @@ enum {
	EMAC_VERSION_1,	/* DM644x */
	EMAC_VERSION_2,	/* DM646x */
};
void davinci_init_emac(struct emac_platform_data *pdata);
#endif


void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context);
#endif