|
@@ -14,6 +14,7 @@
|
|
|
#include <linux/kernel.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/gpio.h>
|
|
|
+#include <linux/etherdevice.h>
|
|
|
#include <asm/mach-types.h>
|
|
|
#include <mach/hardware.h>
|
|
|
#include <asm/sizes.h>
|
|
@@ -28,6 +29,40 @@
|
|
|
#include "generic.h"
|
|
|
#include "devices.h"
|
|
|
|
|
|
+#if defined(CONFIG_AX88796)
|
|
|
+#define ETHER_ADDR_LEN 6
|
|
|
+static u8 ether_mac_addr[ETHER_ADDR_LEN];
|
|
|
+
|
|
|
+void __init colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+ u64 serial = ((u64) system_serial_high << 32) | system_serial_low;
|
|
|
+
|
|
|
+ /*
|
|
|
+ * If the bootloader passed in a serial boot tag, which contains a
|
|
|
+ * valid ethernet MAC, pass it to the interface. Toradex ships the
|
|
|
+ * modules with their own bootloader which provides a valid MAC
|
|
|
+ * this way.
|
|
|
+ */
|
|
|
+
|
|
|
+ for (i = 0; i < ETHER_ADDR_LEN; i++) {
|
|
|
+ ether_mac_addr[i] = serial & 0xff;
|
|
|
+ serial >>= 8;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (is_valid_ether_addr(ether_mac_addr)) {
|
|
|
+ plat_data->flags |= AXFLG_MAC_FROMPLATFORM;
|
|
|
+ plat_data->mac_addr = ether_mac_addr;
|
|
|
+ printk(KERN_INFO "%s(): taking MAC from serial boot tag\n",
|
|
|
+ __func__);
|
|
|
+ } else {
|
|
|
+ plat_data->flags |= AXFLG_MAC_FROMDEV;
|
|
|
+ printk(KERN_INFO "%s(): no valid serial boot tag found, "
|
|
|
+ "taking MAC from device\n", __func__);
|
|
|
+ }
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
|
|
static int mmc_detect_pin;
|
|
|
|