Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-elphel
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
linux-elphel
Commits
5f033e8d
Commit
5f033e8d
authored
Mar 16, 2016
by
Oleg Dzhimiev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1. update MAC in device tree 2. moved network driver to the end of the Makefile
parent
f6ed5ab4
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
254 additions
and
37 deletions
+254
-37
Makefile
src/drivers/Makefile
+172
-0
elphel393-init.c
src/drivers/elphel/elphel393-init.c
+82
-37
No files found.
src/drivers/Makefile
0 → 100644
View file @
5f033e8d
#
# 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/
src/drivers/elphel/elphel393-init.c
View file @
5f033e8d
...
...
@@ -48,8 +48,6 @@
#define SYSFS_READONLY 0444
#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
* This driver is run in the last place - at least after NAND driver is probed
...
...
@@ -63,6 +61,43 @@ static char boardinfo[2048];
static
char
serial
[
13
];
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
)
{
struct
device_node
*
node
;
...
...
@@ -195,13 +230,6 @@ static int elphel393_init_probe(struct platform_device *pdev)
u8
devnum
=
0
;
u8
unlock
=
0
;
/*
const u8 *mac_address;
u16 hwaddrh;
u32 hwaddrl;
struct device_node *node;
*/
pr_debug
(
"Probing"
);
//copy bootargs string
bootargs_copy
=
kstrdup
(
bootargs
,
GFP_KERNEL
);
...
...
@@ -250,24 +278,6 @@ static int elphel393_init_probe(struct platform_device *pdev)
// page size
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
();
elphel393_init_sysfs_register
(
pdev
);
return
0
;
...
...
@@ -289,15 +299,18 @@ static int get_factory_info(void){
int
ret
;
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
// but cannot get it from the declaration. Don't know.
memset
(
regvalh
,
0x00
,
5
);
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
);
if
(
ret
){
pr_err
(
"Flash page read, code %d"
,
ret
);
...
...
@@ -319,16 +332,46 @@ static int get_factory_info(void){
kstrtou16
(
regvalh
,
16
,
&
hwaddrh
);
kstrtou32
(
regvall
,
16
,
&
hwaddrl
);
//xemacps_write(0xE000B000,0x88,hwaddrl);
//xemacps_write(0xE000B000,0x8C,hwaddrh);
//get mac address from device tree
node
=
of_find_node_by_name
(
NULL
,
"ps7-ethernet"
);
if
(
!
node
){
pr_err
(
"Device tree node 'ps7-ethernet' not found."
);
return
-
ENODEV
;
}
writel
(
hwaddrl
,
0xE000B088
);
writel
(
hwaddrh
,
0xE000B08C
);
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
;
pr_info
(
"Wrote to hwaddr reg: 0x%08x 0x%08x
\n
"
,
hwaddrh
,
hwaddrl
);
of_update_property
(
node
,
newproperty
);
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
//kstrtou16(serial,16,®valh);
//serial
...
...
@@ -366,6 +409,8 @@ static struct platform_driver elphel393_initialize = {
},
};
//early_initcall(elphel393_early_initialize);
module_platform_driver
(
elphel393_initialize
);
module_init
(
elphel393_init_init
);
module_exit
(
elphel393_init_exit
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment