Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 347268
b: refs/heads/master
c: 33c760f
h: refs/heads/master
v: v3
  • Loading branch information
Chris Zankel committed Dec 19, 2012
1 parent 20e104c commit 2056427
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c4c4594b005d89b56964071bbbdeb07daac5bc76
refs/heads/master: 33c760fbb7a8fa46314437746dd7f5540da5498e
36 changes: 34 additions & 2 deletions trunk/arch/xtensa/platforms/xtfpga/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
#include <asm/platform.h>
#include <asm/bootparam.h>
#include <platform/lcd.h>
#include <platform/hardware.h>

void platform_halt(void)
{
Expand Down Expand Up @@ -84,8 +85,7 @@ static void __init update_clock_frequency(struct device_node *node)
struct property *newfreq;
u32 freq;

if (!of_property_read_u32(node, "clock-frequency", &freq) &&
freq != 0)
if (!of_property_read_u32(node, "clock-frequency", &freq) && freq != 0)
return;

newfreq = kzalloc(sizeof(*newfreq) + sizeof(u32), GFP_KERNEL);
Expand All @@ -103,12 +103,44 @@ static void __init update_clock_frequency(struct device_node *node)
prom_update_property(node, newfreq);
}

#define MAC_LEN 6
static void __init update_local_mac(struct device_node *node)
{
struct property *newmac;
const u8* macaddr;
int prop_len;

macaddr = of_get_property(node, "local-mac-address", &prop_len);
if (macaddr == NULL || prop_len != MAC_LEN)
return;

newmac = kzalloc(sizeof(*newmac) + MAC_LEN, GFP_KERNEL);
if (newmac == NULL)
return;

newmac->value = newmac + 1;
newmac->length = MAC_LEN;
newmac->name = kstrdup("local-mac-address", GFP_KERNEL);
if (newmac->name == NULL) {
kfree(newmac);
return;
}

memcpy(newmac->value, macaddr, MAC_LEN);
((u8*)newmac->value)[5] = (*(u32*)DIP_SWITCHES_VADDR) & 0x3f;
prom_update_property(node, newmac);
}

static int __init machine_setup(void)
{
struct device_node *serial;
struct device_node *eth = NULL;

for_each_compatible_node(serial, NULL, "ns16550a")
update_clock_frequency(serial);

if ((eth = of_find_compatible_node(eth, NULL, "opencores,ethoc")))
update_local_mac(eth);
return 0;
}
arch_initcall(machine_setup);
Expand Down

0 comments on commit 2056427

Please sign in to comment.