Commit 5f033e8d authored by Oleg Dzhimiev's avatar Oleg Dzhimiev

1. update MAC in device tree 2. moved network driver to the end of the Makefile

parent f6ed5ab4
#
# Makefile for the Linux kernel device drivers.
#
# 15 Sep 2000, Christoph Hellwig <hch@infradead.org>
# Rewritten to use lists instead of if-statements.
#
obj-y += irqchip/
obj-y += bus/
obj-$(CONFIG_GENERIC_PHY) += phy/
# GPIO must come after pinctrl as gpios may need to mux pins etc
obj-y += pinctrl/
obj-y += gpio/
obj-y += pwm/
obj-$(CONFIG_PCI) += pci/
obj-$(CONFIG_PARISC) += parisc/
obj-$(CONFIG_RAPIDIO) += rapidio/
obj-y += video/
obj-y += idle/
# IPMI must come before ACPI in order to provide IPMI opregion support
obj-$(CONFIG_IPMI_HANDLER) += char/ipmi/
obj-$(CONFIG_ACPI) += acpi/
obj-$(CONFIG_SFI) += sfi/
# PnP must come after ACPI since it will eventually need to check if acpi
# was used and do nothing if so
obj-$(CONFIG_PNP) += pnp/
obj-y += amba/
# Many drivers will want to use DMA so this has to be made available
# really early.
obj-$(CONFIG_DMADEVICES) += dma/
# SOC specific infrastructure drivers.
obj-y += soc/
obj-$(CONFIG_VIRTIO) += virtio/
obj-$(CONFIG_XEN) += xen/
# regulators early, since some subsystems rely on them to initialize
obj-$(CONFIG_REGULATOR) += regulator/
# reset controllers early, since gpu drivers might rely on them to initialize
obj-$(CONFIG_RESET_CONTROLLER) += reset/
# tty/ comes before char/ so that the VT console is the boot-time
# default.
obj-y += tty/
obj-y += char/
# iommu/ comes before gpu as gpu are using iommu controllers
obj-$(CONFIG_IOMMU_SUPPORT) += iommu/
# gpu/ comes after char for AGP vs DRM startup and after iommu
obj-y += gpu/
obj-$(CONFIG_CONNECTOR) += connector/
# i810fb and intelfb depend on char/agp/
obj-$(CONFIG_FB_I810) += video/fbdev/i810/
obj-$(CONFIG_FB_INTEL) += video/fbdev/intelfb/
obj-$(CONFIG_PARPORT) += parport/
obj-y += base/ block/ misc/ mfd/ nfc/
obj-$(CONFIG_DMA_SHARED_BUFFER) += dma-buf/
obj-$(CONFIG_NUBUS) += nubus/
obj-y += macintosh/
obj-$(CONFIG_IDE) += ide/
obj-$(CONFIG_SCSI) += scsi/
obj-$(CONFIG_ATA) += ata/
obj-$(CONFIG_TARGET_CORE) += target/
obj-$(CONFIG_MTD) += mtd/
obj-$(CONFIG_SPI) += spi/
obj-$(CONFIG_SPMI) += spmi/
obj-y += hsi/
obj-$(CONFIG_ATM) += atm/
obj-$(CONFIG_FUSION) += message/
obj-y += firewire/
obj-$(CONFIG_UIO) += uio/
obj-$(CONFIG_VFIO) += vfio/
obj-y += cdrom/
obj-y += auxdisplay/
obj-$(CONFIG_PCCARD) += pcmcia/
obj-$(CONFIG_DIO) += dio/
obj-$(CONFIG_SBUS) += sbus/
obj-$(CONFIG_ZORRO) += zorro/
obj-$(CONFIG_ATA_OVER_ETH) += block/aoe/
obj-$(CONFIG_PARIDE) += block/paride/
obj-$(CONFIG_TC) += tc/
obj-$(CONFIG_UWB) += uwb/
obj-$(CONFIG_USB_PHY) += usb/
obj-$(CONFIG_USB) += usb/
obj-$(CONFIG_PCI) += usb/
obj-$(CONFIG_USB_GADGET) += usb/
obj-$(CONFIG_SERIO) += input/serio/
obj-$(CONFIG_GAMEPORT) += input/gameport/
obj-$(CONFIG_INPUT) += input/
obj-$(CONFIG_I2O) += message/
obj-$(CONFIG_RTC_LIB) += rtc/
obj-y += i2c/ media/
obj-$(CONFIG_PPS) += pps/
obj-$(CONFIG_PTP_1588_CLOCK) += ptp/
obj-$(CONFIG_W1) += w1/
obj-$(CONFIG_POWER_SUPPLY) += power/
obj-$(CONFIG_HWMON) += hwmon/
obj-$(CONFIG_THERMAL) += thermal/
obj-$(CONFIG_WATCHDOG) += watchdog/
obj-$(CONFIG_MD) += md/
obj-$(CONFIG_BT) += bluetooth/
obj-$(CONFIG_ACCESSIBILITY) += accessibility/
obj-$(CONFIG_ISDN) += isdn/
obj-$(CONFIG_EDAC) += edac/
obj-$(CONFIG_EISA) += eisa/
obj-y += lguest/
obj-$(CONFIG_CPU_FREQ) += cpufreq/
obj-$(CONFIG_CPU_IDLE) += cpuidle/
obj-y += mmc/
obj-$(CONFIG_MEMSTICK) += memstick/
obj-y += leds/
obj-$(CONFIG_INFINIBAND) += infiniband/
obj-$(CONFIG_SGI_SN) += sn/
obj-y += firmware/
obj-$(CONFIG_CRYPTO) += crypto/
obj-$(CONFIG_SUPERH) += sh/
obj-$(CONFIG_ARCH_SHMOBILE) += sh/
ifndef CONFIG_ARCH_USES_GETTIMEOFFSET
obj-y += clocksource/
endif
obj-$(CONFIG_DCA) += dca/
obj-$(CONFIG_HID) += hid/
obj-$(CONFIG_PPC_PS3) += ps3/
obj-$(CONFIG_OF) += of/
obj-$(CONFIG_SSB) += ssb/
obj-$(CONFIG_BCMA) += bcma/
obj-$(CONFIG_VHOST_RING) += vhost/
obj-$(CONFIG_VLYNQ) += vlynq/
obj-$(CONFIG_STAGING) += staging/
obj-y += platform/
#common clk code
obj-y += clk/
obj-$(CONFIG_MAILBOX) += mailbox/
obj-$(CONFIG_HWSPINLOCK) += hwspinlock/
obj-$(CONFIG_REMOTEPROC) += remoteproc/
obj-$(CONFIG_RPMSG) += rpmsg/
# Virtualization drivers
obj-$(CONFIG_VIRT_DRIVERS) += virt/
obj-$(CONFIG_HYPERV) += hv/
obj-$(CONFIG_PM_DEVFREQ) += devfreq/
obj-$(CONFIG_EXTCON) += extcon/
obj-$(CONFIG_MEMORY) += memory/
obj-$(CONFIG_IIO) += iio/
obj-$(CONFIG_VME_BUS) += vme/
obj-$(CONFIG_IPACK_BUS) += ipack/
obj-$(CONFIG_NTB) += ntb/
obj-$(CONFIG_FMC) += fmc/
obj-$(CONFIG_POWERCAP) += powercap/
obj-$(CONFIG_MCB) += mcb/
obj-$(CONFIG_RAS) += ras/
obj-$(CONFIG_THUNDERBOLT) += thunderbolt/
obj-$(CONFIG_CORESIGHT) += coresight/
obj-$(CONFIG_ANDROID) += android/
obj-$(CONFIG_ELPHEL393) += elphel/
obj-$(CONFIG_ELPHELDRVONMICROZED) += elphel/
obj-y += net/
...@@ -48,8 +48,6 @@ ...@@ -48,8 +48,6 @@
#define SYSFS_READONLY 0444 #define SYSFS_READONLY 0444
#define SYSFS_WRITEONLY 0222 #define SYSFS_WRITEONLY 0222
#define xemacps_write(base, reg, val) writel_relaxed((val), ((void __iomem *)(base)) + (reg))
/* /*
* Read and parse bootargs parameter in the device tree * Read and parse bootargs parameter in the device tree
* This driver is run in the last place - at least after NAND driver is probed * This driver is run in the last place - at least after NAND driver is probed
...@@ -63,6 +61,43 @@ static char boardinfo[2048]; ...@@ -63,6 +61,43 @@ static char boardinfo[2048];
static char serial[13]; static char serial[13];
static char revision[8]; static char revision[8];
/*
static int __init elphel393_early_initialize(void){
struct device_node *node;
struct property *newproperty;
u8 *macaddr;
pr_info("VERY EARLY CALL TO UPDATE DEVICE TREE");
node = of_find_node_by_name(NULL, "ps7-ethernet");
if (!node){
pr_err("Device tree node 'ps7-ethernet' not found.");
return -ENODEV;
}
newproperty = kzalloc(sizeof(*newproperty) + 6, GFP_KERNEL);
if (!newproperty)
return -ENOMEM;
newproperty->value = newproperty + 1;
newproperty->length = 6;
newproperty->name = kstrdup("local-mac-address", GFP_KERNEL);
if (!newproperty->name) {
kfree(newproperty);
return -ENOMEM;
}
macaddr = newproperty->value;
macaddr[0] = 0x02;
macaddr[1] = 0x03;
macaddr[2] = 0x04;
macaddr[3] = 0x05;
macaddr[4] = 0x06;
macaddr[5] = 0x07;
of_update_property(node,newproperty);
return 0;
}
*/
static int __init elphel393_init_init (void) static int __init elphel393_init_init (void)
{ {
struct device_node *node; struct device_node *node;
...@@ -195,13 +230,6 @@ static int elphel393_init_probe(struct platform_device *pdev) ...@@ -195,13 +230,6 @@ static int elphel393_init_probe(struct platform_device *pdev)
u8 devnum= 0; u8 devnum= 0;
u8 unlock= 0; u8 unlock= 0;
/*
const u8 *mac_address;
u16 hwaddrh;
u32 hwaddrl;
struct device_node *node;
*/
pr_debug("Probing"); pr_debug("Probing");
//copy bootargs string //copy bootargs string
bootargs_copy = kstrdup(bootargs,GFP_KERNEL); bootargs_copy = kstrdup(bootargs,GFP_KERNEL);
...@@ -250,24 +278,6 @@ static int elphel393_init_probe(struct platform_device *pdev) ...@@ -250,24 +278,6 @@ static int elphel393_init_probe(struct platform_device *pdev)
// page size // page size
BUG_ON(mtd->writesize > 2048); BUG_ON(mtd->writesize > 2048);
/*
node = of_find_node_by_name(NULL, "ps7_ethernet_0");
if (!node){
pr_err("Device tree node 'ps7_ethernet_0' not found.");
return -ENODEV;
}
mac_address = of_get_mac_address(node);
hwaddrl = cpu_to_le32(*((u32 *)mac_address));
hwaddrh = cpu_to_le16(*((u16 *)(mac_address + 4)));
pr_info("MY_MAC_FROM_DT: 0x%08x, 0x%08x, %02x:%02x:%02x:%02x:%02x:%02x\n",
hwaddrl, hwaddrh,
(hwaddrl & 0xff), ((hwaddrl >> 8) & 0xff),
((hwaddrl >> 16) & 0xff), (hwaddrl >> 24),
(hwaddrh & 0xff), (hwaddrh >> 8));
*/
get_factory_info(); get_factory_info();
elphel393_init_sysfs_register(pdev); elphel393_init_sysfs_register(pdev);
return 0; return 0;
...@@ -289,15 +299,18 @@ static int get_factory_info(void){ ...@@ -289,15 +299,18 @@ static int get_factory_info(void){
int ret; int ret;
char *ps,*pe; char *ps,*pe;
const u8 *mac_address; // const u8 *mac_address;
struct device_node *node;
struct property *newproperty;
u32 *mac32; // = (u32*) mac_address;
u8 *macaddr;
// I expected to have null terminated strings // I expected to have null terminated strings
// but cannot get it from the declaration. Don't know. // but cannot get it from the declaration. Don't know.
memset(regvalh,0x00,5); memset(regvalh,0x00,5);
memset(regvall,0x00,9); memset(regvall,0x00,9);
pr_info("reading back: 0x%08x 0x%08x\n",readl(0xE000B08C),readl(0xE000B088));
ret = mtd_read_user_prot_reg(mtd, *ppos+4*2048, size, &retlen, kbuf); ret = mtd_read_user_prot_reg(mtd, *ppos+4*2048, size, &retlen, kbuf);
if (ret){ if (ret){
pr_err("Flash page read, code %d",ret); pr_err("Flash page read, code %d",ret);
...@@ -319,16 +332,46 @@ static int get_factory_info(void){ ...@@ -319,16 +332,46 @@ static int get_factory_info(void){
kstrtou16(regvalh,16,&hwaddrh); kstrtou16(regvalh,16,&hwaddrh);
kstrtou32(regvall,16,&hwaddrl); kstrtou32(regvall,16,&hwaddrl);
//xemacps_write(0xE000B000,0x88,hwaddrl); node = of_find_node_by_name(NULL, "ps7-ethernet");
//xemacps_write(0xE000B000,0x8C,hwaddrh); if (!node){
//get mac address from device tree pr_err("Device tree node 'ps7-ethernet' not found.");
return -ENODEV;
}
pr_debug("MAC from flash: %02x:%02x:%02x:%02x:%02x:%02x\n",
(hwaddrl & 0xff), ((hwaddrl >> 8) & 0xff),
((hwaddrl >> 16) & 0xff), (hwaddrl >> 24),
(hwaddrh & 0xff), (hwaddrh >> 8));
newproperty = kzalloc(sizeof(*newproperty) + 6, GFP_KERNEL);
if (!newproperty)
return -ENOMEM;
newproperty->value = newproperty + 1;
newproperty->length = 6;
newproperty->name = kstrdup("local-mac-address", GFP_KERNEL);
if (!newproperty->name) {
kfree(newproperty);
return -ENOMEM;
}
macaddr = newproperty->value;
macaddr[0] = (hwaddrh >> 8) & 0xff;
macaddr[1] = hwaddrh & 0xff;
macaddr[2] = (hwaddrl >> 24) & 0xff;
macaddr[3] = (hwaddrl >> 16) & 0xff;
macaddr[4] = (hwaddrl >> 8) & 0xff;
macaddr[5] = hwaddrl & 0xff;
writel(hwaddrl,0xE000B088); of_update_property(node,newproperty);
writel(hwaddrh,0xE000B08C);
pr_info("Wrote to hwaddr reg: 0x%08x 0x%08x\n",hwaddrh,hwaddrl); mac32 = (u32 *) of_get_mac_address(node);
hwaddrl = cpu_to_le32(mac32[0]);
hwaddrh = cpu_to_le16(mac32[1]);
pr_debug("MAC from device tree: %02x:%02x:%02x:%02x:%02x:%02x\n",
(hwaddrl & 0xff), ((hwaddrl >> 8) & 0xff),
((hwaddrl >> 16) & 0xff), (hwaddrl >> 24),
(hwaddrh & 0xff), (hwaddrh >> 8));
pr_info("read back: 0x%08x 0x%08x\n",readl(0xE000B08C),readl(0xE000B088));
//write hwaddr to zynq reg //write hwaddr to zynq reg
//kstrtou16(serial,16,&regvalh); //kstrtou16(serial,16,&regvalh);
//serial //serial
...@@ -366,6 +409,8 @@ static struct platform_driver elphel393_initialize = { ...@@ -366,6 +409,8 @@ static struct platform_driver elphel393_initialize = {
}, },
}; };
//early_initcall(elphel393_early_initialize);
module_platform_driver(elphel393_initialize); module_platform_driver(elphel393_initialize);
module_init(elphel393_init_init); module_init(elphel393_init_init);
module_exit(elphel393_init_exit); module_exit(elphel393_init_exit);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment