diff mbox

ARM: mach-moxart: platform port for MOXA ART SoC

Message ID CACmBeS1empYyoaKidgTrYwUFCw447OKndxZjT98TvYfKVWB00A@mail.gmail.com
State New
Headers show

Commit Message

Jonas Jensen May 15, 2013, 11:20 a.m. UTC
Hi,

.. it's been a while ..

This is now rebased for 3.10 and DT thanks to help from #armlinux on
Freenode. It should tick the boxes in the list from Arnd.

I'm only posting changes in arch/arm/* and will continue submitting
drivers separately as requested, this applies to next-20130515.

The full repository is available @
https://code.google.com/p/linux-3-9-rc3-moxart/source/list

Note: no boot without clocksource and irqchip drivers (I'll submit
these separately to the correct maintainers).

Also it won't boot without reverting the following commit:
e651eab0af88aa7a281fe9e8c36c0846552aa7fc - "ARM: 7677/1: LPAE: Fix
mapping in alloc_init_section for unaligned addresses"

Best regards,
Jonas


Signed-off-by: Jonas Jensen <jonas.jensen@gmail.com>
---
 arch/arm/Kconfig                           |    2 +
 arch/arm/Kconfig.debug                     |   10 +++
 arch/arm/Makefile                          |    1 +
 arch/arm/boot/dts/Makefile                 |    1 +
 arch/arm/boot/dts/moxart-uc7112lx.dts      |   90 ++++++++++++++++++++++
 arch/arm/boot/dts/moxart.dtsi              |   71 +++++++++++++++++
 arch/arm/configs/moxart_uc7112lx_defconfig |  113 ++++++++++++++++++++++++++++
 arch/arm/include/debug/moxart.S            |   14 ++++
 arch/arm/mach-moxart/Kconfig               |   34 ++++++++
 arch/arm/mach-moxart/Makefile              |   12 +++
 arch/arm/mach-moxart/Makefile.boot         |    3 +
 arch/arm/mach-moxart/idle.c                |   31 ++++++++
 arch/arm/mach-moxart/moxart.c              |   42 ++++++++++
 arch/arm/mach-moxart/moxart.h              |   11 +++
 14 files changed, 435 insertions(+), 0 deletions(-)

Comments

Arnd Bergmann May 15, 2013, 1:16 p.m. UTC | #1
On Wednesday 15 May 2013, Jonas Jensen wrote:
> diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
> index 29f7623..d534fce 100644
> --- a/arch/arm/Kconfig.debug
> +++ b/arch/arm/Kconfig.debug
> @@ -429,6 +429,15 @@ choice
>  		  Say Y here if you want kernel low-level debugging support
>  		  on Allwinner A1X based platforms on the UART1.
> 
> +	config DEBUG_MOXART_UART0
> +        bool "Kernel low-level debugging messages via MOXART UART0"
> +        depends on ARCH_MOXART
> +        help
> +          Say Y here if you want kernel low-level debugging support
> +          on MOXART based platforms on the UART0.
> +          select this to make sure "putc" in arch/arm/boot/compressed/debug.S
> +          uses arch/arm/include/debug/moxart.S:s "addruart" macro
> +
>  	config DEBUG_TEGRA_UART
>  		depends on ARCH_TEGRA
>  		bool "Use Tegra UART for low-level debug"
> @@ -651,6 +660,7 @@ config DEBUG_LL_INCLUDE
>  	default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
>  	default "debug/socfpga.S" if DEBUG_SOCFPGA_UART
>  	default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1
> +	default "debug/moxart.S" if DEBUG_MOXART_UART0
>  	default "debug/tegra.S" if DEBUG_TEGRA_UART
>  	default "debug/ux500.S" if DEBUG_UX500_UART
>  	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \

Please split this patch into separate patches. All the debug stuff can go into
one patch that is fairly separate from the rest. You can probably find a few
other things that can be split out, just make sure that the order is so that
we don't have a broken source tree when only applying a few of them.

You can use git-format-patch and git-send-email to send out a series properly.
> +
> +		intc: interrupt-controller@98800000 {
> +			compatible = "moxart,moxart-interrupt-controller";
> +			reg = <0x98800000 0x38>;
> +			interrupt-controller;
> +			#interrupt-cells = <2>;
> +			interrupt-mask = <0x00080000>;		/* single register vector,
> interrupts 0-31, 1s signify edge */
> +		};

That will also take care of broken line wrapping as above. The current version can not
be applied.

> +		timer0: timer@98400000 {
> +			compatible = "moxart,moxart-timer0";
> +			reg = <0x98400000 0x10>;
> +			interrupts = <19 1>;
> +		};

"moxart,moxart-timer0" is a strange identifier for a device. First of all, all your
compatible strings should probably start with "moxa," rather than "moxart,".

The part that I don't understand at all is the "timer0" part. Is that a string
from the data sheet?

> +		gpio: gpio@98700000 {
> +			compatible = "moxart,moxart-gpio";
> +			reg =	<0x98700000 0x1000>,
> +					<0x98100000 0x1000>;		/* PMU */
> +		};

Can you provide some more detail why what PMU registers are used here? Is that
a "Performance Measurement Unit", "Power Management Unit" or something else?
Are you sure that those registers are only ever needed for GPIO?

> @@ -0,0 +1,34 @@
> +config ARCH_MOXART
> +	bool "MOXA ART SoC" if (ARCH_MULTI_V4)
> +	select ARCH_REQUIRE_GPIOLIB
> +	select USE_OF
> +	help
> +	  Say Y here if you want to run your kernel on hardware
> +	  with a MOXA ART SoC.
> +	  These are DIN-rail / wall-mountable embedded PCs sold by MOXA.
> +	  http://www.moxa.com/product/Embedded_Computers.htm
> +
> +config SOC_MOXART
> +	bool "MOXART support"
> +	depends on ARCH_MOXART
> +	default y
> +	select CPU_FA526
> +	select ARM_DMA_MEM_BUFFERABLE
> +	help
> +	  Support for the MOXA ART SoC. This is a Faraday FA526 ARMv4 32-bit
> 192 MHz processor with MMU and 16KB/8KB D/I-cache (UC-7112-LX)
> +	  This perticular SoC is used on models UC-7101, UC-7112/UC-7110,
> IA240/IA241, IA3341.
> +	  These are DIN-rail / wall-mountable embedded PCs sold by MOXA (
> http://www.moxa.com/product/Embedded_Computers.htm ).
> +
> +if ARCH_MOXART
> +
> +menu "MOXA ART SoC Implementation"
> +
> +config MACH_UC7112LX
> +	bool "MOXA UC-7112-LX"
> +	depends on ARCH_MOXART && SOC_MOXART
> +	help
> +	  Say Y here if you intend to run this kernel on a MOXA UC-7112-LX
> embedded computer.

There should be no need for three separate symbols here. Just fold it
all into ARCH_MOXART. Note that you messed up the line wrapping above,
so that should be fixed. Hopefully the UC-7112-LX specific portions
can remain small to nonexisting so we don't have a need to make that
a separate option.

> +
> +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include

Just leave this out and move all header files into the arch/arm/mach-moxart/
directory directly.

> diff --git a/arch/arm/mach-moxart/Makefile.boot
> b/arch/arm/mach-moxart/Makefile.boot
> new file mode 100644
> index 0000000..760a0ef
> --- /dev/null
> +++ b/arch/arm/mach-moxart/Makefile.boot
> @@ -0,0 +1,3 @@
> +   zreladdr-y	+= 0x00008000
> +params_phys-y	:= 0x00000100
> +initrd_phys-y	:= 0x00800000

Is this still used?

> diff --git a/arch/arm/mach-moxart/idle.c b/arch/arm/mach-moxart/idle.c
> new file mode 100644
> index 0000000..5970c27
> --- /dev/null
> +++ b/arch/arm/mach-moxart/idle.c

> +static void moxart_idle(void)
> +{
> +	/*
> +	 * Because of broken hardware we have to enable interrupts or the CPU
> +	 * will never wakeup... Acctualy it is not very good to enable
> +	 * interrupts first since scheduler can miss a tick, but there is
> +	 * no other way around this. Platforms that needs it for power saving
> +	 * should call enable_hlt() in init code, since by default it is
> +	 * disabled.
> +	 */
> +/*	local_irq_enable();
> +	cpu_do_idle();*/
> +}
> +
> +static int __init moxart_idle_init(void)
> +{
> +	arm_pm_idle = moxart_idle;
> +	return 0;
> +}
> +
> +arch_initcall(moxart_idle_init);

This does not seem to do anything at this point. Does the comment still
apply?

> +
> +static void __init moxart_init(void)
> +{
> +	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
> +}
> +
> +void moxart_restart(char mode, const char *cmd)
> +{
> +	writel(1, reg_wdt + 4);
> +	writel(0x5ab9, reg_wdt + 8);
> +	writel(0x03, reg_wdt + 12);
> +}
> +
> +static const char * const moxart_board_dt_compat[] = {
> +	"moxart,moxart-uc-7112-lx",
> +	NULL,
> +};
> +
> +DT_MACHINE_START(MOXART, "MOXA UC-7112-LX")
> +	.init_irq		= moxart_init_irq,
> +	.init_time		= moxart_timer_init,
> +	.init_machine	= moxart_init,
> +	.handle_irq		= moxart_handle_irq,
> +	.restart        = moxart_restart,
> +	.dt_compat		= moxart_board_dt_compat,
> +	.nr_irqs		= 32,
> +MACHINE_END

You can leave out moxart_init() now, it's the default implementation.
moxart_init_irq, moxart_handle_irq and nr_irqs should be obsolete if
you did the irqchip driver correctly, same for moxart_timer_init and
the clocksource driver.

I think the only part remaining here is moxart_restart, but that is
broken as long as reg_wdt does not get initialized. I think you could
move that function into the watchdog driver and assign it to 
arm_pm_restart when you add that driver.

That would in fact make moxart the first platform that can run without
any platform specific code whatsoever.

	Arnd
Russell King - ARM Linux May 15, 2013, 1:32 p.m. UTC | #2
On Wed, May 15, 2013 at 03:16:52PM +0200, Arnd Bergmann wrote:
> > +static void moxart_idle(void)
> > +{
> > +	/*
> > +	 * Because of broken hardware we have to enable interrupts or the CPU
> > +	 * will never wakeup... Acctualy it is not very good to enable
> > +	 * interrupts first since scheduler can miss a tick, but there is
> > +	 * no other way around this. Platforms that needs it for power saving
> > +	 * should call enable_hlt() in init code, since by default it is
> > +	 * disabled.
> > +	 */
> > +/*	local_irq_enable();
> > +	cpu_do_idle();*/
> > +}
> > +
> > +static int __init moxart_idle_init(void)
> > +{
> > +	arm_pm_idle = moxart_idle;
> > +	return 0;
> > +}
> > +
> > +arch_initcall(moxart_idle_init);
> 
> This does not seem to do anything at this point. Does the comment still
> apply?

Actually, that's probably the whole point of this - to do nothing.
This changes the behaviour of the idle loop from using the WFI to
just spinning instead with no wait-for-interrupt or anything else.
We just keep reading the need_resched flag.

That's much better than the commented out code which opens a mighty
big race condition which will then give bad scheduling behaviour,
allowing the idle task to sleep in WFI until the next interrupt while
the need_resched flag may be set.

Sure, there's better ways to do this, via the disable_hlt() stuff,
and whatever its replacement implementation is now called.  But
ultimately this workaround really is about "doing nothing" when
idle!
Arnd Bergmann May 15, 2013, 10:54 p.m. UTC | #3
On Wednesday 15 May 2013, Russell King - ARM Linux wrote:
> Actually, that's probably the whole point of this - to do nothing.
> This changes the behaviour of the idle loop from using the WFI to
> just spinning instead with no wait-for-interrupt or anything else.
> We just keep reading the need_resched flag.
> 
> That's much better than the commented out code which opens a mighty
> big race condition which will then give bad scheduling behaviour,
> allowing the idle task to sleep in WFI until the next interrupt while
> the need_resched flag may be set.
> 
> Sure, there's better ways to do this, via the disable_hlt() stuff,
> and whatever its replacement implementation is now called.  But
> ultimately this workaround really is about "doing nothing" when
> idle!

Ah, I see. I also read the mach-gemini version of the idle code,
which is apparently the same thing as the code that was commented
out here, so that has the wakeup race.

Since it seems that WFI is broken on all fa526 cores, or at least
all the ones we want to support in Linux, maybe it's better to
not call WFI at all there?

	Arnd
Russell King - ARM Linux May 16, 2013, 8:57 a.m. UTC | #4
On Thu, May 16, 2013 at 12:54:20AM +0200, Arnd Bergmann wrote:
> Ah, I see. I also read the mach-gemini version of the idle code,
> which is apparently the same thing as the code that was commented
> out here, so that has the wakeup race.
> 
> Since it seems that WFI is broken on all fa526 cores, or at least
> all the ones we want to support in Linux, maybe it's better to
> not call WFI at all there?

Well, if its a CPU core thing, then it's even easier - the proc-*.S
file can handle it just fine (because that's where the WFI code is.)
Just delete the contents of the processor specific idle function, IOW:

/*
 * cpu_fa526_do_idle()
 */
        .align  4
ENTRY(cpu_fa526_do_idle)
        mcr     p15, 0, r0, c7, c0, 4           @ Wait for interrupt
        mov     pc, lr

remove the WFI from there.
Arnd Bergmann May 16, 2013, 1:35 p.m. UTC | #5
On Thursday 16 May 2013, Russell King - ARM Linux wrote:
> Well, if its a CPU core thing, then it's even easier - the proc-*.S
> file can handle it just fine (because that's where the WFI code is.)
> Just delete the contents of the processor specific idle function, IOW:
> 
> /*
>  * cpu_fa526_do_idle()
>  */
>         .align  4
> ENTRY(cpu_fa526_do_idle)
>         mcr     p15, 0, r0, c7, c0, 4           @ Wait for interrupt
>         mov     pc, lr
> 
> remove the WFI from there.

Yes, that was what I meant.

	Arnd
Jonas Jensen May 16, 2013, 1:37 p.m. UTC | #6
On 15 May 2013 15:16, Arnd Bergmann <arnd@arndb.de> wrote:
> The part that I don't understand at all is the "timer0" part. Is that a string
> from the data sheet?

I have next to no data sheets or documentation on the SoC itself. What
I know is from looking at old sources, which suggest there are more
than one timer (the rest were never implemented).

It only needs one for timer_tick? Does it make sense to just call it "timer"?

> Can you provide some more detail why what PMU registers are used here? Is that
> a "Performance Measurement Unit", "Power Management Unit" or something else?
> Are you sure that those registers are only ever needed for GPIO?

It's "Power Management Unit". The MMC driver uses it to read system
clock and write it to clock control, but I suspect it can be removed.
It's code under #ifdef MSD_SUPPORT_GET_CLOCK but I think the else is
perfectly acceptable.
GPIO uses it only to enable or disable pins.

>> diff --git a/arch/arm/mach-moxart/Makefile.boot
>> b/arch/arm/mach-moxart/Makefile.boot
>> new file mode 100644
>> index 0000000..760a0ef
>> --- /dev/null
>> +++ b/arch/arm/mach-moxart/Makefile.boot
>> @@ -0,0 +1,3 @@
>> +   zreladdr-y        += 0x00008000
>> +params_phys-y        := 0x00000100
>> +initrd_phys-y        := 0x00800000
>
> Is this still used?

Looks like this is no longer needed. Boots without it. Removed.

> You can leave out moxart_init() now, it's the default implementation.
> moxart_init_irq, moxart_handle_irq and nr_irqs should be obsolete if
> you did the irqchip driver correctly, same for moxart_timer_init and
> the clocksource driver.
>
> I think the only part remaining here is moxart_restart, but that is
> broken as long as reg_wdt does not get initialized. I think you could
> move that function into the watchdog driver and assign it to
> arm_pm_restart when you add that driver.

All removed. It boots after some additions to clocksource and irqchip.
arm_pm_restart is set in watchdog.


What I haven't commented on should already be fixed @
https://code.google.com/p/linux-3-10-rc1-moxart/

I'll send new patches.

Best regards,
Jonas
Jonas Jensen May 16, 2013, 1:50 p.m. UTC | #7
On 16 May 2013 00:54, Arnd Bergmann <arnd@arndb.de> wrote:
> Ah, I see. I also read the mach-gemini version of the idle code,
> which is apparently the same thing as the code that was commented
> out here, so that has the wakeup race.

The empty moxart_idle is the only way I get a successful boot to init.
It stalls half way using code from gemini or if left out (arm_pm_idle
not set).

"INFO: rcu_preempt detected stalls on CPUs/tasks" is printed in a loop
with the code from gemini though.

logs:

default idle (arm_pm_idle not set):

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.10.0-rc1-next-20130515+ (i@Ildjarn)
(gcc version 4.6.3 (crosstool-NG 1.16.0) ) #130 PREEMPT Thu May 16
09:25:22 CEST 2013
[    0.000000] CPU: FA526 [66015261] revision 1 (ARMv4), cr=0000397f
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: MOXA UC-7112-LX, model: MOXA UC-7112-LX
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] On node 0 totalpages: 8192
[    0.000000] free_area_init_node: node 0, pgdat c02d58c4,
node_mem_map c07f8000
[    0.000000]   Normal zone: 64 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 8192 pages, LIFO batch:0
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 8128
[    0.000000] Kernel command line: initcall_debug debug loglevel=9
console=ttyS0,115200n8 root=/dev/mmcblk0p1 rw rootwait
[    0.000000] PID hash table entries: 128 (order: -3, 512 bytes)
[    0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Memory: 32MB = 32MB total
[    0.000000] Memory: 24284k/24284k available, 8484k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc2800000 - 0xff000000   ( 968 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc2000000   (  32 MB)
[    0.000000]       .text : 0xc0008000 - 0xc02a19bc   (2663 kB)
[    0.000000]       .init : 0xc02a2000 - 0xc02b8638   (  90 kB)
[    0.000000]       .data : 0xc02ba000 - 0xc02d60c0   ( 113 kB)
[    0.000000]        .bss : 0xc02d60c0 - 0xc07f5f14   (5248 kB)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] NR_IRQS:16 nr_irqs:32 32
[    0.000000] /soc/interrupt-controller@98800000: moxart_of_init finished
[    0.000000] /soc/timer@98400000: count/load (APB_CLK=48000000/HZ=100) IRQ=19
[    0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns,
wraps every 4294967286ms
[    0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat,
Inc., Ingo Molnar
[    0.000000] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.000000] ... MAX_LOCK_DEPTH:          48
[    0.000000] ... MAX_LOCKDEP_KEYS:        8191
[    0.000000] ... CLASSHASH_SIZE:          4096
[    0.000000] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.000000] ... MAX_LOCKDEP_CHAINS:      32768
[    0.000000] ... CHAINHASH_SIZE:          16384
[    0.000000]  memory used by lock dependency info: 3695 kB
[    0.000000]  per task-struct memory footprint: 1152 bytes
[    0.010000] Calibrating delay loop... 144.79 BogoMIPS (lpj=723968)
[    0.080000] pid_max: default: 4096 minimum: 301
[    0.080000] Mount-cache hash table entries: 512
[    0.110000] CPU: Testing write buffer coherency: ok
[    0.110000] calling  init_static_idmap+0x0/0xd4 @ 1
[    0.120000] Setting up static identity map for 0xc0219820 - 0xc0219868
[    0.120000] initcall init_static_idmap+0x0/0xd4 returned 0 after 0 usecs
[    0.120000] calling  spawn_ksoftirqd+0x0/0x1c @ 1
[    0.120000] initcall spawn_ksoftirqd+0x0/0x1c returned 0 after 0 usecs
[    0.120000] calling  init_workqueues+0x0/0x2c0 @ 1
[    0.130000] initcall init_workqueues+0x0/0x2c0 returned 0 after 9765 usecs
[    0.130000] calling  check_cpu_stall_init+0x0/0x20 @ 1
[    0.130000] initcall check_cpu_stall_init+0x0/0x20 returned 0 after 0 usecs
[    0.130000] calling  rcu_scheduler_really_started+0x0/0x18 @ 1
[    0.130000] initcall rcu_scheduler_really_started+0x0/0x18 returned
0 after 0 usecs
[    0.130000] calling  rcu_spawn_gp_kthread+0x0/0x7c @ 1
[    0.140000] initcall rcu_spawn_gp_kthread+0x0/0x7c returned 0 after
9765 usecs
[    0.150000] devtmpfs: initialized
[    0.160000] calling  ipc_ns_init+0x0/0x18 @ 1
[    0.160000] initcall ipc_ns_init+0x0/0x18 returned 0 after 0 usecs
[    0.160000] calling  init_mmap_min_addr+0x0/0x20 @ 1
[    0.160000] initcall init_mmap_min_addr+0x0/0x20 returned 0 after 0 usecs
[    0.160000] calling  net_ns_init+0x0/0x1d4 @ 1
[    0.160000] initcall net_ns_init+0x0/0x1d4 returned 0 after 0 usecs
[    0.160000] calling  ptrace_break_init+0x0/0x2c @ 1
[    0.160000] initcall ptrace_break_init+0x0/0x2c returned 0 after 0 usecs
[    0.160000] calling  wq_sysfs_init+0x0/0x10 @ 1
[    0.170000] initcall wq_sysfs_init+0x0/0x10 returned 0 after 9765 usecs
[    0.170000] calling  ksysfs_init+0x0/0x98 @ 1
[    0.170000] initcall ksysfs_init+0x0/0x98 returned 0 after 0 usecs
[    0.170000] calling  init_jiffies_clocksource+0x0/0xc @ 1
[    0.170000] initcall init_jiffies_clocksource+0x0/0xc returned 0
after 0 usecs
[    0.170000] calling  init_zero_pfn+0x0/0x44 @ 1
[    0.180000] initcall init_zero_pfn+0x0/0x44 returned 0 after 0 usecs
[    0.180000] calling  fsnotify_init+0x0/0x34 @ 1
[    0.180000] initcall fsnotify_init+0x0/0x34 returned 0 after 0 usecs
[    0.180000] calling  filelock_init+0x0/0x40 @ 1
[    0.180000] initcall filelock_init+0x0/0x40 returned 0 after 0 usecs
[    0.180000] calling  init_script_binfmt+0x0/0x1c @ 1
[    0.180000] initcall init_script_binfmt+0x0/0x1c returned 0 after 0 usecs
[    0.180000] calling  init_elf_binfmt+0x0/0x1c @ 1
[    0.180000] initcall init_elf_binfmt+0x0/0x1c returned 0 after 0 usecs
[    0.180000] calling  prandom_init+0x0/0x88 @ 1
[    0.180000] initcall prandom_init+0x0/0x88 returned 0 after 0 usecs
[    0.180000] calling  sock_init+0x0/0x90 @ 1
[    0.180000] initcall sock_init+0x0/0x90 returned 0 after 0 usecs
[    0.180000] calling  netlink_proto_init+0x0/0x22c @ 1
[    0.190000] NET: Registered protocol family 16
[    0.190000] initcall netlink_proto_init+0x0/0x22c returned 0 after 9765 usecs
[    0.190000] calling  atomic_pool_init+0x0/0x124 @ 1
[    0.200000] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.200000] initcall atomic_pool_init+0x0/0x124 returned 0 after 9765 usecs
[    0.200000] calling  bdi_class_init+0x0/0x44 @ 1
[    0.200000] initcall bdi_class_init+0x0/0x44 returned 0 after 0 usecs
[    0.200000] calling  kobject_uevent_init+0x0/0xc @ 1
[    0.200000] initcall kobject_uevent_init+0x0/0xc returned 0 after 0 usecs
[    0.200000] calling  moxart_gpio_init+0x0/0xc @ 1
[    0.210000] initcall moxart_gpio_init+0x0/0xc returned 0 after 9765 usecs
[    0.210000] calling  tty_class_init+0x0/0x44 @ 1
[    0.210000] initcall tty_class_init+0x0/0x44 returned 0 after 0 usecs
[    0.210000] calling  gate_vma_init+0x0/0x24 @ 1
[    0.210000] initcall gate_vma_init+0x0/0x24 returned 0 after 0 usecs
[    0.210000] calling  customize_machine+0x0/0x44 @ 1
[    0.240000] moxart-gpio 98700000.gpio: finished moxart_gpio_probe
gpio_base=c284a000 pmu_base=c284c000
[    0.290000] initcall customize_machine+0x0/0x44 returned 0 after 78125 usecs
[    0.290000] calling  exceptions_init+0x0/0x90 @ 1
[    0.290000] initcall exceptions_init+0x0/0x90 returned 0 after 0 usecs
[    0.290000] calling  dma_bus_init+0x0/0x14 @ 1
[    0.290000] initcall dma_bus_init+0x0/0x14 returned 0 after 0 usecs
[    0.290000] calling  dma_channel_table_init+0x0/0x11c @ 1
[    0.290000] initcall dma_channel_table_init+0x0/0x11c returned 0
after 0 usecs
[    0.290000] calling  topology_init+0x0/0x28 @ 1
[    0.300000] initcall topology_init+0x0/0x28 returned 0 after 9765 usecs
[    0.300000] calling  param_sysfs_init+0x0/0x2d0 @ 1
[    0.480000] initcall param_sysfs_init+0x0/0x2d0 returned 0 after 175781 usecs
[    0.480000] calling  pm_sysrq_init+0x0/0x1c @ 1
[    0.480000] initcall pm_sysrq_init+0x0/0x1c returned 0 after 0 usecs
[    0.480000] calling  default_bdi_init+0x0/0x7c @ 1
[    0.490000] initcall default_bdi_init+0x0/0x7c returned 0 after 9765 usecs
[    0.490000] calling  init_bio+0x0/0xfc @ 1
[    0.490000] bio: create slab <bio-0> at 0
[    0.490000] initcall init_bio+0x0/0xfc returned 0 after 0 usecs
[    0.490000] calling  fsnotify_notification_init+0x0/0x98 @ 1
[    0.500000] initcall fsnotify_notification_init+0x0/0x98 returned 0
after 0 usecs
[    0.500000] calling  blk_settings_init+0x0/0x34 @ 1
[    0.500000] initcall blk_settings_init+0x0/0x34 returned 0 after 0 usecs
[    0.500000] calling  blk_ioc_init+0x0/0x40 @ 1
[    0.500000] initcall blk_ioc_init+0x0/0x40 returned 0 after 0 usecs
[    0.500000] calling  blk_softirq_init+0x0/0x2c @ 1
[    0.500000] initcall blk_softirq_init+0x0/0x2c returned 0 after 0 usecs
[    0.500000] calling  blk_iopoll_setup+0x0/0x2c @ 1
[    0.500000] initcall blk_iopoll_setup+0x0/0x2c returned 0 after 0 usecs
[    0.500000] calling  genhd_device_init+0x0/0x80 @ 1
[    0.500000] initcall genhd_device_init+0x0/0x80 returned 0 after 0 usecs
[    0.500000] calling  moxart_init+0x0/0xc @ 1
[    0.530000] moxart-dma-engine 90500000.dma: finished moxart_probe IRQ=24
[    0.530000] initcall moxart_init+0x0/0xc returned 0 after 19531 usecs
[    0.530000] calling  misc_init+0x0/0xc0 @ 1
[    0.540000] initcall misc_init+0x0/0xc0 returned 0 after 9765 usecs
[    0.540000] calling  rtc_init+0x0/0x60 @ 1
[    0.540000] initcall rtc_init+0x0/0x60 returned 0 after 0 usecs
[    0.540000] calling  mmc_init+0x0/0x84 @ 1
[    0.550000] initcall mmc_init+0x0/0x84 returned 0 after 9765 usecs
[    0.550000] calling  proto_init+0x0/0xc @ 1
[    0.550000] initcall proto_init+0x0/0xc returned 0 after 0 usecs
[    0.550000] calling  net_dev_init+0x0/0x180 @ 1
[    0.580000] initcall net_dev_init+0x0/0x180 returned 0 after 29296 usecs
[    0.580000] calling  neigh_init+0x0/0xa4 @ 1
[    0.580000] initcall neigh_init+0x0/0xa4 returned 0 after 0 usecs
[    0.580000] calling  genl_init+0x0/0x80 @ 1
[    0.580000] initcall genl_init+0x0/0x80 returned 0 after 0 usecs
[    0.580000] calling  proc_cpu_init+0x0/0x24 @ 1
[    0.580000] initcall proc_cpu_init+0x0/0x24 returned 0 after 0 usecs
[    0.580000] calling  dma_debug_do_init+0x0/0x8 @ 1
[    0.580000] initcall dma_debug_do_init+0x0/0x8 returned 0 after 0 usecs
[    0.580000] calling  alignment_init+0x0/0xf4 @ 1
[    0.580000] initcall alignment_init+0x0/0xf4 returned 0 after 0 usecs
[    0.580000] calling  clocksource_done_booting+0x0/0x58 @ 1
[    0.580000] initcall clocksource_done_booting+0x0/0x58 returned 0
after 0 usecs
[    0.580000] calling  init_pipe_fs+0x0/0x4c @ 1
[    0.580000] initcall init_pipe_fs+0x0/0x4c returned 0 after 0 usecs
[    0.580000] calling  eventpoll_init+0x0/0xac @ 1
[    0.590000] initcall eventpoll_init+0x0/0xac returned 0 after 9765 usecs
[    0.590000] calling  anon_inode_init+0x0/0x64 @ 1
[    0.590000] initcall anon_inode_init+0x0/0x64 returned 0 after 0 usecs
[    0.590000] calling  blk_scsi_ioctl_init+0x0/0xdc @ 1
[    0.590000] initcall blk_scsi_ioctl_init+0x0/0xdc returned 0 after 0 usecs
[    0.590000] calling  chr_dev_init+0x0/0xd4 @ 1
[    0.640000] initcall chr_dev_init+0x0/0xd4 returned 0 after 48828 usecs
[    0.640000] calling  sysctl_core_init+0x0/0x30 @ 1
[    0.640000] initcall sysctl_core_init+0x0/0x30 returned 0 after 0 usecs
[    0.640000] calling  inet_init+0x0/0x250 @ 1
[    0.650000] NET: Registered protocol family 2
[    0.660000] TCP established hash table entries: 512 (order: 0, 4096 bytes)
[    0.660000] TCP bind hash table entries: 512 (order: 2, 18432 bytes)
[    0.660000] TCP: Hash tables configured (established 512 bind 512)
[    0.660000] TCP: reno registered
[    0.660000] UDP hash table entries: 128 (order: 1, 10240 bytes)
[    0.660000] UDP-Lite hash table entries: 128 (order: 1, 10240 bytes)
[    0.680000] initcall inet_init+0x0/0x250 returned 0 after 39062 usecs
[    0.680000] calling  ipv4_offload_init+0x0/0x64 @ 1
[    0.680000] initcall ipv4_offload_init+0x0/0x64 returned 0 after 0 usecs
[    0.680000] calling  af_unix_init+0x0/0x54 @ 1
[    0.680000] NET: Registered protocol family 1
[    0.680000] initcall af_unix_init+0x0/0x54 returned 0 after 0 usecs
[    0.680000] calling  ipv6_offload_init+0x0/0x64 @ 1
[    0.680000] initcall ipv6_offload_init+0x0/0x64 returned 0 after 0 usecs
[    0.680000] calling  default_rootfs+0x0/0x70 @ 1
[    0.680000] initcall default_rootfs+0x0/0x70 returned 0 after 0 usecs
[    0.680000] calling  sched_clock_syscore_init+0x0/0x18 @ 1
[    0.680000] initcall sched_clock_syscore_init+0x0/0x18 returned 0
after 0 usecs
[    0.680000] calling  proc_execdomains_init+0x0/0x38 @ 1
[    0.680000] initcall proc_execdomains_init+0x0/0x38 returned 0 after 0 usecs
[    0.680000] calling  ioresources_init+0x0/0x58 @ 1
[    0.680000] initcall ioresources_init+0x0/0x58 returned 0 after 0 usecs
[    0.680000] calling  uid_cache_init+0x0/0x98 @ 1
[    0.680000] initcall uid_cache_init+0x0/0x98 returned 0 after 0 usecs
[    0.680000] calling  init_posix_timers+0x0/0x208 @ 1
[    0.680000] initcall init_posix_timers+0x0/0x208 returned 0 after 0 usecs
[    0.680000] calling  init_posix_cpu_timers+0x0/0xe4 @ 1
[    0.680000] initcall init_posix_cpu_timers+0x0/0xe4 returned 0 after 0 usecs
[    0.680000] calling  timekeeping_init_ops+0x0/0x18 @ 1
[    0.680000] initcall timekeeping_init_ops+0x0/0x18 returned 0 after 0 usecs
[    0.680000] calling  init_clocksource_sysfs+0x0/0x54 @ 1
[    0.690000] initcall init_clocksource_sysfs+0x0/0x54 returned 0
after 9765 usecs
[    0.690000] calling  init_timer_list_procfs+0x0/0x40 @ 1
[    0.690000] initcall init_timer_list_procfs+0x0/0x40 returned 0 after 0 usecs
[    0.690000] calling  alarmtimer_init+0x0/0x1a4 @ 1
[    0.700000] initcall alarmtimer_init+0x0/0x1a4 returned 0 after 9765 usecs
[    0.700000] calling  lockdep_proc_init+0x0/0x74 @ 1
[    0.700000] initcall lockdep_proc_init+0x0/0x74 returned 0 after 0 usecs
[    0.700000] calling  futex_init+0x0/0x84 @ 1
[    0.700000] initcall futex_init+0x0/0x84 returned 0 after 0 usecs
[    0.700000] calling  kallsyms_init+0x0/0x38 @ 1
[    0.700000] initcall kallsyms_init+0x0/0x38 returned 0 after 0 usecs
[    0.700000] calling  ikconfig_init+0x0/0x58 @ 1
[    0.700000] initcall ikconfig_init+0x0/0x58 returned 0 after 0 usecs
[    0.700000] calling  hung_task_init+0x0/0x54 @ 1
[    0.700000] initcall hung_task_init+0x0/0x54 returned 0 after 0 usecs
[    0.710000] calling  utsname_sysctl_init+0x0/0x18 @ 1
[    0.710000] initcall utsname_sysctl_init+0x0/0x18 returned 0 after 0 usecs
[    0.710000] calling  init_per_zone_wmark_min+0x0/0x88 @ 1
[    0.710000] initcall init_per_zone_wmark_min+0x0/0x88 returned 0
after 0 usecs
[    0.710000] calling  kswapd_init+0x0/0x18 @ 1
[    0.710000] initcall kswapd_init+0x0/0x18 returned 0 after 0 usecs
[    0.710000] calling  setup_vmstat+0x0/0x90 @ 1
[    0.710000] initcall setup_vmstat+0x0/0x90 returned 0 after 0 usecs
[    0.710000] calling  mm_sysfs_init+0x0/0x38 @ 1
[    0.710000] initcall mm_sysfs_init+0x0/0x38 returned 0 after 0 usecs
[    0.710000] calling  init_reserve_notifier+0x0/0x8 @ 1
[    0.710000] initcall init_reserve_notifier+0x0/0x8 returned 0 after 0 usecs
[    0.710000] calling  init_admin_reserve+0x0/0x30 @ 1
[    0.710000] initcall init_admin_reserve+0x0/0x30 returned 0 after 0 usecs
[    0.710000] calling  init_user_reserve+0x0/0x30 @ 1
[    0.710000] initcall init_user_reserve+0x0/0x30 returned 0 after 0 usecs
[    0.710000] calling  proc_vmalloc_init+0x0/0x38 @ 1
[    0.710000] initcall proc_vmalloc_init+0x0/0x38 returned 0 after 0 usecs
[    0.710000] calling  slab_sysfs_init+0x0/0x108 @ 1
[    0.940000] initcall slab_sysfs_init+0x0/0x108 returned 0 after 224609 usecs
[    0.940000] calling  fcntl_init+0x0/0x40 @ 1
[    0.950000] initcall fcntl_init+0x0/0x40 returned 0 after 9765 usecs
[    0.950000] calling  proc_filesystems_init+0x0/0x38 @ 1
[    0.950000] initcall proc_filesystems_init+0x0/0x38 returned 0 after 0 usecs
[    0.950000] calling  dio_init+0x0/0x40 @ 1
[    0.960000] initcall dio_init+0x0/0x40 returned 0 after 9765 usecs
[    0.960000] calling  fsnotify_mark_init+0x0/0x40 @ 1
[    0.960000] initcall fsnotify_mark_init+0x0/0x40 returned 0 after 0 usecs
[    0.960000] calling  dnotify_init+0x0/0x80 @ 1
[    0.960000] initcall dnotify_init+0x0/0x80 returned 0 after 0 usecs
[    0.960000] calling  inotify_user_setup+0x0/0x78 @ 1
[    0.960000] initcall inotify_user_setup+0x0/0x78 returned 0 after 0 usecs
[    0.960000] calling  proc_locks_init+0x0/0x38 @ 1
[    0.960000] initcall proc_locks_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  init_mbcache+0x0/0x18 @ 1
[    0.960000] initcall init_mbcache+0x0/0x18 returned 0 after 0 usecs
[    0.960000] calling  proc_cmdline_init+0x0/0x38 @ 1
[    0.960000] initcall proc_cmdline_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_consoles_init+0x0/0x38 @ 1
[    0.960000] initcall proc_consoles_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_cpuinfo_init+0x0/0x38 @ 1
[    0.960000] initcall proc_cpuinfo_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_devices_init+0x0/0x38 @ 1
[    0.960000] initcall proc_devices_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_interrupts_init+0x0/0x38 @ 1
[    0.960000] initcall proc_interrupts_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_loadavg_init+0x0/0x38 @ 1
[    0.960000] initcall proc_loadavg_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_meminfo_init+0x0/0x38 @ 1
[    0.960000] initcall proc_meminfo_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_stat_init+0x0/0x38 @ 1
[    0.960000] initcall proc_stat_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_uptime_init+0x0/0x38 @ 1
[    0.960000] initcall proc_uptime_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_version_init+0x0/0x38 @ 1
[    0.960000] initcall proc_version_init+0x0/0x38 returned 0 after 0 usecs
[    0.970000] calling  proc_softirqs_init+0x0/0x38 @ 1
[    0.970000] initcall proc_softirqs_init+0x0/0x38 returned 0 after 0 usecs
[    0.970000] calling  proc_kmsg_init+0x0/0x38 @ 1
[    0.970000] initcall proc_kmsg_init+0x0/0x38 returned 0 after 0 usecs
[    0.970000] calling  proc_page_init+0x0/0x58 @ 1
[    0.970000] initcall proc_page_init+0x0/0x58 returned 0 after 0 usecs
[    0.970000] calling  init_devpts_fs+0x0/0x68 @ 1
[    0.970000] initcall init_devpts_fs+0x0/0x68 returned 0 after 0 usecs
[    0.970000] calling  init_ext3_fs+0x0/0x8c @ 1
[    0.980000] initcall init_ext3_fs+0x0/0x8c returned 0 after 9765 usecs
[    0.980000] calling  journal_init+0x0/0xb4 @ 1
[    1.000000] initcall journal_init+0x0/0xb4 returned 0 after 19531 usecs
[    1.000000] calling  init_ramfs_fs+0x0/0xc @ 1
[    1.000000] initcall init_ramfs_fs+0x0/0xc returned 0 after 0 usecs
[    1.000000] calling  init_jffs2_fs+0x0/0xd8 @ 1
[    1.000000] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[    1.010000] initcall init_jffs2_fs+0x0/0xd8 returned 0 after 9765 usecs
[    1.010000] calling  ipc_init+0x0/0x24 @ 1
[    1.010000] msgmni has been set to 47
[    1.010000] initcall ipc_init+0x0/0x24 returned 0 after 0 usecs
[    1.010000] calling  ipc_sysctl_init+0x0/0x18 @ 1
[    1.010000] initcall ipc_sysctl_init+0x0/0x18 returned 0 after 0 usecs
[    1.010000] calling  key_proc_init+0x0/0x48 @ 1
[    1.010000] initcall key_proc_init+0x0/0x48 returned 0 after 0 usecs
[    1.010000] calling  crypto_algapi_init+0x0/0x10 @ 1
[    1.010000] initcall crypto_algapi_init+0x0/0x10 returned 0 after 0 usecs
[    1.010000] calling  aes_init+0x0/0xc @ 1
[    1.020000] initcall aes_init+0x0/0xc returned 0 after 9765 usecs
[    1.020000] calling  krng_mod_init+0x0/0xc @ 1
[    1.020000] initcall krng_mod_init+0x0/0xc returned 0 after 0 usecs
[    1.020000] calling  prng_mod_init+0x0/0x10 @ 1
[    1.020000] initcall prng_mod_init+0x0/0x10 returned 0 after 0 usecs
[    1.020000] calling  proc_genhd_init+0x0/0x58 @ 1
[    1.020000] initcall proc_genhd_init+0x0/0x58 returned 0 after 0 usecs
[    1.020000] calling  noop_init+0x0/0xc @ 1
[    1.020000] io scheduler noop registered
[    1.020000] initcall noop_init+0x0/0xc returned 0 after 0 usecs
[    1.020000] calling  cfq_init+0x0/0x94 @ 1
[    1.020000] io scheduler cfq registered (default)
[    1.020000] initcall cfq_init+0x0/0x94 returned 0 after 0 usecs
[    1.020000] calling  pty_init+0x0/0x230 @ 1
[    1.020000] initcall pty_init+0x0/0x230 returned 0 after 0 usecs
[    1.030000] calling  sysrq_init+0x0/0x48 @ 1
[    1.030000] initcall sysrq_init+0x0/0x48 returned 0 after 0 usecs
[    1.030000] calling  serial8250_init+0x0/0x158 @ 1
[    1.030000] Serial: 8250/16550 driver, 1 ports, IRQ sharing enabled
[    1.040000] initcall serial8250_init+0x0/0x158 returned 0 after 9765 usecs
[    1.040000] calling  of_platform_serial_driver_init+0x0/0xc @ 1
[    1.070000] 98200000.uart: ttyS0 at MMIO 0x98200000 (irq = 31) is a 16550A
[    2.960000] console [ttyS0] enabled
[    2.970000] initcall of_platform_serial_driver_init+0x0/0xc
returned 0 after 1884765 usecs
[    2.980000] calling  mxser_module_init+0x0/0x49c @ 1
[    2.990000] MOXA Smartio/Industio family driver version 2.0.5
[    3.000000] mxser: found MOXA UC-7112-LX board (CAP=0x0)
[    3.000000] mxser: mxser_initbrd success IRQ=31 max baud=921600 bps
[    3.020000] initcall mxser_module_init+0x0/0x49c returned 0 after 29296 usecs
[    3.030000] calling  rand_initialize+0x0/0x2c @ 1
[    3.030000] initcall rand_initialize+0x0/0x2c returned 0 after 0 usecs
[    3.040000] calling  topology_sysfs_init+0x0/0x20 @ 1
[    3.050000] initcall topology_sysfs_init+0x0/0x20 returned 0 after 0 usecs
[    3.060000] calling  init_mtd+0x0/0xf8 @ 1
[    3.070000] initcall init_mtd+0x0/0xf8 returned 0 after 9765 usecs
[    3.080000] calling  ofpart_parser_init+0x0/0x38 @ 1
[    3.090000] initcall ofpart_parser_init+0x0/0x38 returned 0 after 0 usecs
[    3.100000] calling  init_mtdblock+0x0/0xc @ 1
[    3.100000] initcall init_mtdblock+0x0/0xc returned 0 after 0 usecs
[    3.110000] calling  cfi_probe_init+0x0/0x18 @ 1
[    3.120000] initcall cfi_probe_init+0x0/0x18 returned 0 after 0 usecs
[    3.120000] calling  physmap_init+0x0/0xc @ 1
[    3.130000] initcall physmap_init+0x0/0xc returned 0 after 0 usecs
[    3.140000] calling  of_flash_driver_init+0x0/0xc @ 1
[    3.170000] 80000000.flash: Found 1 x16 devices at 0x0 in 16-bit
bank. Manufacturer ID 0x000089 Chip ID 0x000018
[    3.180000] Intel/Sharp Extended Query Table at 0x0031
[    3.190000] Intel/Sharp Extended Query Table at 0x0031
[    3.190000] Using buffer write method
[    3.200000] cfi_cmdset_0001: Erase suspend on write enabled
[    3.200000] erase region 0: offset=0x0,size=0x20000,blocks=128
[    3.210000] 4 ofpart partitions found on MTD device 80000000.flash
[    3.220000] Creating 4 MTD partitions on "80000000.flash":
[    3.220000] 0x000000000000-0x000000040000 : "bootloader"
[    3.260000] 0x000000040000-0x000000200000 : "linux kernel"
[    3.300000] 0x000000200000-0x000000a00000 : "root filesystem"
[    3.330000] 0x000000a00000-0x000001000000 : "user filesystem"
[    3.370000] initcall of_flash_driver_init+0x0/0xc returned 0 after
224609 usecs
[    3.370000] calling  net_olddevs_init+0x0/0x68 @ 1
[    3.380000] initcall net_olddevs_init+0x0/0x68 returned 0 after 0 usecs
[    3.390000] calling  moxart_mac_init+0x0/0xc @ 1
[    3.440000] moxart-ethernet 90900000.mac eth0: moxart_mac_probe:
IRQ=25 address=00:90:e8:1b:e2:a5
[    3.500000] moxart-ethernet 92000000.mac eth1: moxart_mac_probe:
IRQ=27 address=00:90:e8:1b:e2:a6
[    3.520000] initcall moxart_mac_init+0x0/0xc returned 0 after 126953 usecs
[    3.520000] calling  moxart_rtc_init+0x0/0xc @ 1
[    3.540000] moxart-rtc rtc.0: rtc core: registered rtc.0 as rtc0
[    3.550000] moxart-rtc rtc.0: finished moxart_rtc_probe
[    3.560000] initcall moxart_rtc_init+0x0/0xc returned 0 after 29296 usecs
[    3.570000] calling  moxart_wdt_init+0x0/0xc @ 1
[    3.580000] moxart-watchdog 98500000.watchdog: finished
moxart_wdt_probe base=c2920000
[    3.600000] initcall moxart_wdt_init+0x0/0xc returned 0 after 29296 usecs
[    3.600000] calling  mmc_blk_init+0x0/0x74 @ 1
[    3.610000] initcall mmc_blk_init+0x0/0x74 returned 0 after 0 usecs
[    3.620000] calling  moxart_init+0x0/0xc @ 1


gemini idle:

Uncompressing Linux... done, booting the kernel.
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 3.10.0-rc1-next-20130515+ (i@Ildjarn)
(gcc version 4.6.3 (crosstool-NG 1.16.0) ) #129 PREEMPT Thu May 16
09:20:50 CEST 2013
[    0.000000] CPU: FA526 [66015261] revision 1 (ARMv4), cr=0000397f
[    0.000000] CPU: VIVT data cache, VIVT instruction cache
[    0.000000] Machine: MOXA UC-7112-LX, model: MOXA UC-7112-LX
[    0.000000] Memory policy: ECC disabled, Data cache writeback
[    0.000000] On node 0 totalpages: 8192
[    0.000000] free_area_init_node: node 0, pgdat c02d58c4,
node_mem_map c07f8000
[    0.000000]   Normal zone: 64 pages used for memmap
[    0.000000]   Normal zone: 0 pages reserved
[    0.000000]   Normal zone: 8192 pages, LIFO batch:0
[    0.000000] pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
[    0.000000] pcpu-alloc: [0] 0
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.
Total pages: 8128
[    0.000000] Kernel command line: initcall_debug debug loglevel=9
console=ttyS0,115200n8 root=/dev/mmcblk0p1 rw rootwait
[    0.000000] PID hash table entries: 128 (order: -3, 512 bytes)
[    0.000000] Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
[    0.000000] Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
[    0.000000] Memory: 32MB = 32MB total
[    0.000000] Memory: 24284k/24284k available, 8484k reserved, 0K highmem
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vector  : 0xffff0000 - 0xffff1000   (   4 kB)
[    0.000000]     fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
[    0.000000]     vmalloc : 0xc2800000 - 0xff000000   ( 968 MB)
[    0.000000]     lowmem  : 0xc0000000 - 0xc2000000   (  32 MB)
[    0.000000]       .text : 0xc0008000 - 0xc02a19d0   (2663 kB)
[    0.000000]       .init : 0xc02a2000 - 0xc02b865c   (  90 kB)
[    0.000000]       .data : 0xc02ba000 - 0xc02d60c0   ( 113 kB)
[    0.000000]        .bss : 0xc02d60c0 - 0xc07f5f14   (5248 kB)
[    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
[    0.000000] Preemptible hierarchical RCU implementation.
[    0.000000] NR_IRQS:16 nr_irqs:32 32
[    0.000000] /soc/interrupt-controller@98800000: moxart_of_init finished
[    0.000000] /soc/timer@98400000: count/load (APB_CLK=48000000/HZ=100) IRQ=19
[    0.000000] sched_clock: 32 bits at 100 Hz, resolution 10000000ns,
wraps every 4294967286ms
[    0.000000] Lock dependency validator: Copyright (c) 2006 Red Hat,
Inc., Ingo Molnar
[    0.000000] ... MAX_LOCKDEP_SUBCLASSES:  8
[    0.000000] ... MAX_LOCK_DEPTH:          48
[    0.000000] ... MAX_LOCKDEP_KEYS:        8191
[    0.000000] ... CLASSHASH_SIZE:          4096
[    0.000000] ... MAX_LOCKDEP_ENTRIES:     16384
[    0.000000] ... MAX_LOCKDEP_CHAINS:      32768
[    0.000000] ... CHAINHASH_SIZE:          16384
[    0.000000]  memory used by lock dependency info: 3695 kB
[    0.000000]  per task-struct memory footprint: 1152 bytes
[    0.010000] Calibrating delay loop... 144.79 BogoMIPS (lpj=723968)
[    0.080000] pid_max: default: 4096 minimum: 301
[    0.080000] Mount-cache hash table entries: 512
[    0.110000] CPU: Testing write buffer coherency: ok
[    0.120000] calling  init_static_idmap+0x0/0xd4 @ 1
[    0.120000] Setting up static identity map for 0xc0219820 - 0xc0219868
[    0.120000] initcall init_static_idmap+0x0/0xd4 returned 0 after 0 usecs
[    0.120000] calling  spawn_ksoftirqd+0x0/0x1c @ 1
[    0.120000] initcall spawn_ksoftirqd+0x0/0x1c returned 0 after 0 usecs
[    0.120000] calling  init_workqueues+0x0/0x2c0 @ 1
[    0.130000] initcall init_workqueues+0x0/0x2c0 returned 0 after 9765 usecs
[    0.130000] calling  check_cpu_stall_init+0x0/0x20 @ 1
[    0.130000] initcall check_cpu_stall_init+0x0/0x20 returned 0 after 0 usecs
[    0.130000] calling  rcu_scheduler_really_started+0x0/0x18 @ 1
[    0.130000] initcall rcu_scheduler_really_started+0x0/0x18 returned
0 after 0 usecs
[    0.130000] calling  rcu_spawn_gp_kthread+0x0/0x7c @ 1
[    0.140000] initcall rcu_spawn_gp_kthread+0x0/0x7c returned 0 after
9765 usecs
[    0.150000] devtmpfs: initialized
[    0.160000] calling  ipc_ns_init+0x0/0x18 @ 1
[    0.160000] initcall ipc_ns_init+0x0/0x18 returned 0 after 0 usecs
[    0.160000] calling  init_mmap_min_addr+0x0/0x20 @ 1
[    0.160000] initcall init_mmap_min_addr+0x0/0x20 returned 0 after 0 usecs
[    0.160000] calling  net_ns_init+0x0/0x1d4 @ 1
[    0.160000] initcall net_ns_init+0x0/0x1d4 returned 0 after 0 usecs
[    0.160000] calling  ptrace_break_init+0x0/0x2c @ 1
[    0.160000] initcall ptrace_break_init+0x0/0x2c returned 0 after 0 usecs
[    0.160000] calling  wq_sysfs_init+0x0/0x10 @ 1
[    0.170000] initcall wq_sysfs_init+0x0/0x10 returned 0 after 9765 usecs
[    0.170000] calling  ksysfs_init+0x0/0x98 @ 1
[    0.170000] initcall ksysfs_init+0x0/0x98 returned 0 after 0 usecs
[    0.170000] calling  init_jiffies_clocksource+0x0/0xc @ 1
[    0.170000] initcall init_jiffies_clocksource+0x0/0xc returned 0
after 0 usecs
[    0.180000] calling  init_zero_pfn+0x0/0x44 @ 1
[    0.180000] initcall init_zero_pfn+0x0/0x44 returned 0 after 0 usecs
[    0.180000] calling  fsnotify_init+0x0/0x34 @ 1
[    0.180000] initcall fsnotify_init+0x0/0x34 returned 0 after 0 usecs
[    0.180000] calling  filelock_init+0x0/0x40 @ 1
[    0.180000] initcall filelock_init+0x0/0x40 returned 0 after 0 usecs
[    0.180000] calling  init_script_binfmt+0x0/0x1c @ 1
[    0.180000] initcall init_script_binfmt+0x0/0x1c returned 0 after 0 usecs
[    0.180000] calling  init_elf_binfmt+0x0/0x1c @ 1
[    0.180000] initcall init_elf_binfmt+0x0/0x1c returned 0 after 0 usecs
[    0.180000] calling  prandom_init+0x0/0x88 @ 1
[    0.180000] initcall prandom_init+0x0/0x88 returned 0 after 0 usecs
[    0.180000] calling  sock_init+0x0/0x90 @ 1
[    0.180000] initcall sock_init+0x0/0x90 returned 0 after 0 usecs
[    0.180000] calling  netlink_proto_init+0x0/0x22c @ 1
[    0.190000] NET: Registered protocol family 16
[    0.190000] initcall netlink_proto_init+0x0/0x22c returned 0 after 9765 usecs
[    0.190000] calling  atomic_pool_init+0x0/0x124 @ 1
[    0.200000] DMA: preallocated 256 KiB pool for atomic coherent allocations
[    0.200000] initcall atomic_pool_init+0x0/0x124 returned 0 after 9765 usecs
[    0.200000] calling  bdi_class_init+0x0/0x44 @ 1
[    0.200000] initcall bdi_class_init+0x0/0x44 returned 0 after 0 usecs
[    0.200000] calling  kobject_uevent_init+0x0/0xc @ 1
[    0.200000] initcall kobject_uevent_init+0x0/0xc returned 0 after 0 usecs
[    0.200000] calling  moxart_gpio_init+0x0/0xc @ 1
[    0.210000] initcall moxart_gpio_init+0x0/0xc returned 0 after 9765 usecs
[    0.210000] calling  tty_class_init+0x0/0x44 @ 1
[    0.210000] initcall tty_class_init+0x0/0x44 returned 0 after 0 usecs
[    0.210000] calling  gate_vma_init+0x0/0x24 @ 1
[    0.210000] initcall gate_vma_init+0x0/0x24 returned 0 after 0 usecs
[    0.210000] calling  customize_machine+0x0/0x44 @ 1
[    0.240000] moxart-gpio 98700000.gpio: finished moxart_gpio_probe
gpio_base=c284a000 pmu_base=c284c000
[    0.280000] initcall customize_machine+0x0/0x44 returned 0 after 68359 usecs
[    0.290000] calling  exceptions_init+0x0/0x90 @ 1
[    0.290000] initcall exceptions_init+0x0/0x90 returned 0 after 0 usecs
[    0.290000] calling  moxart_idle_init+0x0/0x1c @ 1
[    0.290000] initcall moxart_idle_init+0x0/0x1c returned 0 after 0 usecs
[    0.290000] calling  dma_bus_init+0x0/0x14 @ 1
[    0.290000] initcall dma_bus_init+0x0/0x14 returned 0 after 0 usecs
[    0.290000] calling  dma_channel_table_init+0x0/0x11c @ 1
[    0.290000] initcall dma_channel_table_init+0x0/0x11c returned 0
after 0 usecs
[    0.290000] calling  topology_init+0x0/0x28 @ 1
[    0.290000] initcall topology_init+0x0/0x28 returned 0 after 0 usecs
[    0.300000] calling  param_sysfs_init+0x0/0x2d0 @ 1
[    0.480000] initcall param_sysfs_init+0x0/0x2d0 returned 0 after 175781 usecs
[    0.480000] calling  pm_sysrq_init+0x0/0x1c @ 1
[    0.480000] initcall pm_sysrq_init+0x0/0x1c returned 0 after 0 usecs
[    0.480000] calling  default_bdi_init+0x0/0x7c @ 1
[    0.490000] initcall default_bdi_init+0x0/0x7c returned 0 after 9765 usecs
[    0.490000] calling  init_bio+0x0/0xfc @ 1
[    0.490000] bio: create slab <bio-0> at 0
[    0.490000] initcall init_bio+0x0/0xfc returned 0 after 0 usecs
[    0.490000] calling  fsnotify_notification_init+0x0/0x98 @ 1
[    0.490000] initcall fsnotify_notification_init+0x0/0x98 returned 0
after 0 usecs
[    0.490000] calling  blk_settings_init+0x0/0x34 @ 1
[    0.490000] initcall blk_settings_init+0x0/0x34 returned 0 after 0 usecs
[    0.490000] calling  blk_ioc_init+0x0/0x40 @ 1
[    0.490000] initcall blk_ioc_init+0x0/0x40 returned 0 after 0 usecs
[    0.490000] calling  blk_softirq_init+0x0/0x2c @ 1
[    0.490000] initcall blk_softirq_init+0x0/0x2c returned 0 after 0 usecs
[    0.490000] calling  blk_iopoll_setup+0x0/0x2c @ 1
[    0.490000] initcall blk_iopoll_setup+0x0/0x2c returned 0 after 0 usecs
[    0.490000] calling  genhd_device_init+0x0/0x80 @ 1
[    0.500000] initcall genhd_device_init+0x0/0x80 returned 0 after 9765 usecs
[    0.500000] calling  moxart_init+0x0/0xc @ 1
[    0.520000] moxart-dma-engine 90500000.dma: finished moxart_probe IRQ=24
[    0.530000] initcall moxart_init+0x0/0xc returned 0 after 29296 usecs
[    0.530000] calling  misc_init+0x0/0xc0 @ 1
[    0.530000] initcall misc_init+0x0/0xc0 returned 0 after 0 usecs
[    0.530000] calling  rtc_init+0x0/0x60 @ 1
[    0.540000] initcall rtc_init+0x0/0x60 returned 0 after 0 usecs
[    0.540000] calling  mmc_init+0x0/0x84 @ 1
[    0.550000] initcall mmc_init+0x0/0x84 returned 0 after 9765 usecs
[    0.550000] calling  proto_init+0x0/0xc @ 1
[    0.550000] initcall proto_init+0x0/0xc returned 0 after 0 usecs
[    0.550000] calling  net_dev_init+0x0/0x180 @ 1
[    0.570000] initcall net_dev_init+0x0/0x180 returned 0 after 19531 usecs
[    0.570000] calling  neigh_init+0x0/0xa4 @ 1
[    0.570000] initcall neigh_init+0x0/0xa4 returned 0 after 0 usecs
[    0.570000] calling  genl_init+0x0/0x80 @ 1
[    0.580000] initcall genl_init+0x0/0x80 returned 0 after 9765 usecs
[    0.580000] calling  proc_cpu_init+0x0/0x24 @ 1
[    0.580000] initcall proc_cpu_init+0x0/0x24 returned 0 after 0 usecs
[    0.580000] calling  dma_debug_do_init+0x0/0x8 @ 1
[    0.580000] initcall dma_debug_do_init+0x0/0x8 returned 0 after 0 usecs
[    0.580000] calling  alignment_init+0x0/0xf4 @ 1
[    0.580000] initcall alignment_init+0x0/0xf4 returned 0 after 0 usecs
[    0.580000] calling  clocksource_done_booting+0x0/0x58 @ 1
[    0.580000] initcall clocksource_done_booting+0x0/0x58 returned 0
after 0 usecs
[    0.580000] calling  init_pipe_fs+0x0/0x4c @ 1
[    0.580000] initcall init_pipe_fs+0x0/0x4c returned 0 after 0 usecs
[    0.580000] calling  eventpoll_init+0x0/0xac @ 1
[    0.580000] initcall eventpoll_init+0x0/0xac returned 0 after 0 usecs
[    0.580000] calling  anon_inode_init+0x0/0x64 @ 1
[    0.580000] initcall anon_inode_init+0x0/0x64 returned 0 after 0 usecs
[    0.590000] calling  blk_scsi_ioctl_init+0x0/0xdc @ 1
[    0.590000] initcall blk_scsi_ioctl_init+0x0/0xdc returned 0 after 0 usecs
[    0.590000] calling  chr_dev_init+0x0/0xd4 @ 1
[    0.640000] initcall chr_dev_init+0x0/0xd4 returned 0 after 48828 usecs
[    0.640000] calling  sysctl_core_init+0x0/0x30 @ 1
[    0.640000] initcall sysctl_core_init+0x0/0x30 returned 0 after 0 usecs
[    0.640000] calling  inet_init+0x0/0x250 @ 1
[    0.640000] NET: Registered protocol family 2
[    0.650000] TCP established hash table entries: 512 (order: 0, 4096 bytes)
[    0.660000] TCP bind hash table entries: 512 (order: 2, 18432 bytes)
[    0.660000] TCP: Hash tables configured (established 512 bind 512)
[    0.660000] TCP: reno registered
[    0.660000] UDP hash table entries: 128 (order: 1, 10240 bytes)
[    0.660000] UDP-Lite hash table entries: 128 (order: 1, 10240 bytes)
[    0.670000] initcall inet_init+0x0/0x250 returned 0 after 29296 usecs
[    0.670000] calling  ipv4_offload_init+0x0/0x64 @ 1
[    0.670000] initcall ipv4_offload_init+0x0/0x64 returned 0 after 0 usecs
[    0.670000] calling  af_unix_init+0x0/0x54 @ 1
[    0.670000] NET: Registered protocol family 1
[    0.670000] initcall af_unix_init+0x0/0x54 returned 0 after 0 usecs
[    0.670000] calling  ipv6_offload_init+0x0/0x64 @ 1
[    0.670000] initcall ipv6_offload_init+0x0/0x64 returned 0 after 0 usecs
[    0.670000] calling  default_rootfs+0x0/0x70 @ 1
[    0.670000] initcall default_rootfs+0x0/0x70 returned 0 after 0 usecs
[    0.680000] calling  sched_clock_syscore_init+0x0/0x18 @ 1
[    0.680000] initcall sched_clock_syscore_init+0x0/0x18 returned 0
after 0 usecs
[    0.680000] calling  proc_execdomains_init+0x0/0x38 @ 1
[    0.680000] initcall proc_execdomains_init+0x0/0x38 returned 0 after 0 usecs
[    0.680000] calling  ioresources_init+0x0/0x58 @ 1
[    0.680000] initcall ioresources_init+0x0/0x58 returned 0 after 0 usecs
[    0.680000] calling  uid_cache_init+0x0/0x98 @ 1
[    0.680000] initcall uid_cache_init+0x0/0x98 returned 0 after 0 usecs
[    0.680000] calling  init_posix_timers+0x0/0x208 @ 1
[    0.680000] initcall init_posix_timers+0x0/0x208 returned 0 after 0 usecs
[    0.680000] calling  init_posix_cpu_timers+0x0/0xe4 @ 1
[    0.680000] initcall init_posix_cpu_timers+0x0/0xe4 returned 0 after 0 usecs
[    0.680000] calling  timekeeping_init_ops+0x0/0x18 @ 1
[    0.680000] initcall timekeeping_init_ops+0x0/0x18 returned 0 after 0 usecs
[    0.680000] calling  init_clocksource_sysfs+0x0/0x54 @ 1
[    0.690000] initcall init_clocksource_sysfs+0x0/0x54 returned 0
after 9765 usecs
[    0.690000] calling  init_timer_list_procfs+0x0/0x40 @ 1
[    0.690000] initcall init_timer_list_procfs+0x0/0x40 returned 0 after 0 usecs
[    0.690000] calling  alarmtimer_init+0x0/0x1a4 @ 1
[    0.700000] initcall alarmtimer_init+0x0/0x1a4 returned 0 after 9765 usecs
[    0.700000] calling  lockdep_proc_init+0x0/0x74 @ 1
[    0.700000] initcall lockdep_proc_init+0x0/0x74 returned 0 after 0 usecs
[    0.700000] calling  futex_init+0x0/0x84 @ 1
[    0.700000] initcall futex_init+0x0/0x84 returned 0 after 0 usecs
[    0.700000] calling  kallsyms_init+0x0/0x38 @ 1
[    0.700000] initcall kallsyms_init+0x0/0x38 returned 0 after 0 usecs
[    0.700000] calling  ikconfig_init+0x0/0x58 @ 1
[    0.700000] initcall ikconfig_init+0x0/0x58 returned 0 after 0 usecs
[    0.700000] calling  hung_task_init+0x0/0x54 @ 1
[    0.700000] initcall hung_task_init+0x0/0x54 returned 0 after 0 usecs
[    0.700000] calling  utsname_sysctl_init+0x0/0x18 @ 1
[    0.700000] initcall utsname_sysctl_init+0x0/0x18 returned 0 after 0 usecs
[    0.700000] calling  init_per_zone_wmark_min+0x0/0x88 @ 1
[    0.700000] initcall init_per_zone_wmark_min+0x0/0x88 returned 0
after 0 usecs
[    0.700000] calling  kswapd_init+0x0/0x18 @ 1
[    0.700000] initcall kswapd_init+0x0/0x18 returned 0 after 0 usecs
[    0.700000] calling  setup_vmstat+0x0/0x90 @ 1
[    0.700000] initcall setup_vmstat+0x0/0x90 returned 0 after 0 usecs
[    0.700000] calling  mm_sysfs_init+0x0/0x38 @ 1
[    0.700000] initcall mm_sysfs_init+0x0/0x38 returned 0 after 0 usecs
[    0.710000] calling  init_reserve_notifier+0x0/0x8 @ 1
[    0.710000] initcall init_reserve_notifier+0x0/0x8 returned 0 after 0 usecs
[    0.710000] calling  init_admin_reserve+0x0/0x30 @ 1
[    0.710000] initcall init_admin_reserve+0x0/0x30 returned 0 after 0 usecs
[    0.710000] calling  init_user_reserve+0x0/0x30 @ 1
[    0.710000] initcall init_user_reserve+0x0/0x30 returned 0 after 0 usecs
[    0.710000] calling  proc_vmalloc_init+0x0/0x38 @ 1
[    0.710000] initcall proc_vmalloc_init+0x0/0x38 returned 0 after 0 usecs
[    0.710000] calling  slab_sysfs_init+0x0/0x108 @ 1
[    0.940000] initcall slab_sysfs_init+0x0/0x108 returned 0 after 224609 usecs
[    0.940000] calling  fcntl_init+0x0/0x40 @ 1
[    0.940000] initcall fcntl_init+0x0/0x40 returned 0 after 0 usecs
[    0.940000] calling  proc_filesystems_init+0x0/0x38 @ 1
[    0.940000] initcall proc_filesystems_init+0x0/0x38 returned 0 after 0 usecs
[    0.940000] calling  dio_init+0x0/0x40 @ 1
[    0.950000] initcall dio_init+0x0/0x40 returned 0 after 9765 usecs
[    0.950000] calling  fsnotify_mark_init+0x0/0x40 @ 1
[    0.950000] initcall fsnotify_mark_init+0x0/0x40 returned 0 after 0 usecs
[    0.950000] calling  dnotify_init+0x0/0x80 @ 1
[    0.950000] initcall dnotify_init+0x0/0x80 returned 0 after 0 usecs
[    0.950000] calling  inotify_user_setup+0x0/0x78 @ 1
[    0.950000] initcall inotify_user_setup+0x0/0x78 returned 0 after 0 usecs
[    0.950000] calling  proc_locks_init+0x0/0x38 @ 1
[    0.950000] initcall proc_locks_init+0x0/0x38 returned 0 after 0 usecs
[    0.950000] calling  init_mbcache+0x0/0x18 @ 1
[    0.950000] initcall init_mbcache+0x0/0x18 returned 0 after 0 usecs
[    0.950000] calling  proc_cmdline_init+0x0/0x38 @ 1
[    0.950000] initcall proc_cmdline_init+0x0/0x38 returned 0 after 0 usecs
[    0.950000] calling  proc_consoles_init+0x0/0x38 @ 1
[    0.950000] initcall proc_consoles_init+0x0/0x38 returned 0 after 0 usecs
[    0.950000] calling  proc_cpuinfo_init+0x0/0x38 @ 1
[    0.950000] initcall proc_cpuinfo_init+0x0/0x38 returned 0 after 0 usecs
[    0.950000] calling  proc_devices_init+0x0/0x38 @ 1
[    0.950000] initcall proc_devices_init+0x0/0x38 returned 0 after 0 usecs
[    0.950000] calling  proc_interrupts_init+0x0/0x38 @ 1
[    0.960000] initcall proc_interrupts_init+0x0/0x38 returned 0 after
9765 usecs
[    0.960000] calling  proc_loadavg_init+0x0/0x38 @ 1
[    0.960000] initcall proc_loadavg_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_meminfo_init+0x0/0x38 @ 1
[    0.960000] initcall proc_meminfo_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_stat_init+0x0/0x38 @ 1
[    0.960000] initcall proc_stat_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_uptime_init+0x0/0x38 @ 1
[    0.960000] initcall proc_uptime_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_version_init+0x0/0x38 @ 1
[    0.960000] initcall proc_version_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_softirqs_init+0x0/0x38 @ 1
[    0.960000] initcall proc_softirqs_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_kmsg_init+0x0/0x38 @ 1
[    0.960000] initcall proc_kmsg_init+0x0/0x38 returned 0 after 0 usecs
[    0.960000] calling  proc_page_init+0x0/0x58 @ 1
[    0.960000] initcall proc_page_init+0x0/0x58 returned 0 after 0 usecs
[    0.960000] calling  init_devpts_fs+0x0/0x68 @ 1
[    0.960000] initcall init_devpts_fs+0x0/0x68 returned 0 after 0 usecs
[    0.960000] calling  init_ext3_fs+0x0/0x8c @ 1
[    0.970000] initcall init_ext3_fs+0x0/0x8c returned 0 after 9765 usecs
[    0.970000] calling  journal_init+0x0/0xb4 @ 1
[    0.990000] initcall journal_init+0x0/0xb4 returned 0 after 19531 usecs
[    0.990000] calling  init_ramfs_fs+0x0/0xc @ 1
[    0.990000] initcall init_ramfs_fs+0x0/0xc returned 0 after 0 usecs
[    0.990000] calling  init_jffs2_fs+0x0/0xd8 @ 1
[    0.990000] jffs2: version 2.2. (NAND) © 2001-2006 Red Hat, Inc.
[    1.000000] initcall init_jffs2_fs+0x0/0xd8 returned 0 after 9765 usecs
[    1.000000] calling  ipc_init+0x0/0x24 @ 1
[    1.000000] msgmni has been set to 47
[    1.000000] initcall ipc_init+0x0/0x24 returned 0 after 0 usecs
[    1.000000] calling  ipc_sysctl_init+0x0/0x18 @ 1
[    1.000000] initcall ipc_sysctl_init+0x0/0x18 returned 0 after 0 usecs
[    1.000000] calling  key_proc_init+0x0/0x48 @ 1
[    1.000000] initcall key_proc_init+0x0/0x48 returned 0 after 0 usecs
[    1.000000] calling  crypto_algapi_init+0x0/0x10 @ 1
[    1.000000] initcall crypto_algapi_init+0x0/0x10 returned 0 after 0 usecs
[    1.000000] calling  aes_init+0x0/0xc @ 1
[    1.010000] initcall aes_init+0x0/0xc returned 0 after 9765 usecs
[    1.010000] calling  krng_mod_init+0x0/0xc @ 1
[    1.010000] initcall krng_mod_init+0x0/0xc returned 0 after 0 usecs
[    1.010000] calling  prng_mod_init+0x0/0x10 @ 1
[    1.010000] initcall prng_mod_init+0x0/0x10 returned 0 after 0 usecs
[    1.010000] calling  proc_genhd_init+0x0/0x58 @ 1
[    1.010000] initcall proc_genhd_init+0x0/0x58 returned 0 after 0 usecs
[    1.010000] calling  noop_init+0x0/0xc @ 1
[    1.010000] io scheduler noop registered
[    1.010000] initcall noop_init+0x0/0xc returned 0 after 0 usecs
[    1.010000] calling  cfq_init+0x0/0x94 @ 1
[    1.010000] io scheduler cfq registered (default)
[    1.010000] initcall cfq_init+0x0/0x94 returned 0 after 0 usecs
[    1.010000] calling  pty_init+0x0/0x230 @ 1
[    1.020000] initcall pty_init+0x0/0x230 returned 0 after 9765 usecs
[    1.020000] calling  sysrq_init+0x0/0x48 @ 1
[    1.020000] initcall sysrq_init+0x0/0x48 returned 0 after 0 usecs
[    1.020000] calling  serial8250_init+0x0/0x158 @ 1
[    1.020000] Serial: 8250/16550 driver, 1 ports, IRQ sharing enabled
[    1.030000] initcall serial8250_init+0x0/0x158 returned 0 after 9765 usecs
[    1.040000] calling  of_platform_serial_driver_init+0x0/0xc @ 1
[    1.060000] 98200000.uart: ttyS0 at MMIO 0x98200000 (irq = 31) is a 16550A
[    2.960000] console [ttyS0] enabled
[    2.970000] initcall of_platform_serial_driver_init+0x0/0xc
returned 0 after 1884765 usecs
[    2.980000] calling  mxser_module_init+0x0/0x49c @ 1
[    2.990000] MOXA Smartio/Industio family driver version 2.0.5
[    3.000000] mxser: found MOXA UC-7112-LX board (CAP=0x0)
[    3.000000] mxser: mxser_initbrd success IRQ=31 max baud=921600 bps
[    3.020000] initcall mxser_module_init+0x0/0x49c returned 0 after 29296 usecs
[    3.030000] calling  rand_initialize+0x0/0x2c @ 1
[    3.040000] initcall rand_initialize+0x0/0x2c returned 0 after 0 usecs
[    3.040000] calling  topology_sysfs_init+0x0/0x20 @ 1
[    3.050000] initcall topology_sysfs_init+0x0/0x20 returned 0 after 0 usecs
[    3.060000] calling  init_mtd+0x0/0xf8 @ 1
[    3.080000] initcall init_mtd+0x0/0xf8 returned 0 after 19531 usecs
[    3.090000] calling  ofpart_parser_init+0x0/0x38 @ 1
[    3.090000] initcall ofpart_parser_init+0x0/0x38 returned 0 after 0 usecs
[    3.100000] calling  init_mtdblock+0x0/0xc @ 1
[    3.110000] initcall init_mtdblock+0x0/0xc returned 0 after 0 usecs
[    3.110000] calling  cfi_probe_init+0x0/0x18 @ 1
[    3.120000] initcall cfi_probe_init+0x0/0x18 returned 0 after 0 usecs
[    3.130000] calling  physmap_init+0x0/0xc @ 1
[    3.130000] initcall physmap_init+0x0/0xc returned 0 after 0 usecs
[    3.140000] calling  of_flash_driver_init+0x0/0xc @ 1
[    3.170000] 80000000.flash: Found 1 x16 devices at 0x0 in 16-bit
bank. Manufacturer ID 0x000089 Chip ID 0x000018
[    3.180000] Intel/Sharp Extended Query Table at 0x0031
[    3.190000] Intel/Sharp Extended Query Table at 0x0031
[    3.200000] Using buffer write method
[    3.200000] cfi_cmdset_0001: Erase suspend on write enabled
[    3.210000] erase region 0: offset=0x0,size=0x20000,blocks=128
[    3.210000] 4 ofpart partitions found on MTD device 80000000.flash
[    3.220000] Creating 4 MTD partitions on "80000000.flash":
[    3.220000] 0x000000000000-0x000000040000 : "bootloader"
[    3.270000] 0x000000040000-0x000000200000 : "linux kernel"
[    3.300000] 0x000000200000-0x000000a00000 : "root filesystem"
[    3.330000] 0x000000a00000-0x000001000000 : "user filesystem"
[    3.370000] initcall of_flash_driver_init+0x0/0xc returned 0 after
214843 usecs
[    3.380000] calling  net_olddevs_init+0x0/0x68 @ 1
[    3.380000] initcall net_olddevs_init+0x0/0x68 returned 0 after 0 usecs
[    3.390000] calling  moxart_mac_init+0x0/0xc @ 1
[    3.440000] moxart-ethernet 90900000.mac eth0: moxart_mac_probe:
IRQ=25 address=00:90:e8:1b:e2:a5
[    3.500000] moxart-ethernet 92000000.mac eth1: moxart_mac_probe:
IRQ=27 address=00:90:e8:1b:e2:a6
[    3.520000] initcall moxart_mac_init+0x0/0xc returned 0 after 126953 usecs
[    3.520000] calling  moxart_rtc_init+0x0/0xc @ 1
[    3.540000] moxart-rtc rtc.0: rtc core: registered rtc.0 as rtc0
[    3.550000] moxart-rtc rtc.0: finished moxart_rtc_probe
[    3.560000] initcall moxart_rtc_init+0x0/0xc returned 0 after 29296 usecs
[    3.570000] calling  moxart_wdt_init+0x0/0xc @ 1
[    3.580000] moxart-watchdog 98500000.watchdog: finished
moxart_wdt_probe base=c2920000
[    3.600000] initcall moxart_wdt_init+0x0/0xc returned 0 after 29296 usecs
[    3.600000] calling  mmc_blk_init+0x0/0x74 @ 1
[    3.610000] initcall mmc_blk_init+0x0/0x74 returned 0 after 0 usecs
[    3.620000] calling  moxart_init+0x0/0xc @ 1
[   24.650000] INFO: rcu_preempt detected stalls on CPUs/tasks: {}
(detected by 0, t=2102 jiffies, g=4294967164, c=4294967163, q=9)
[   24.650000] INFO: Stall ended before state dump start
[   87.700000] INFO: rcu_preempt detected stalls on CPUs/tasks: {}
(detected by 0, t=8407 jiffies, g=4294967164, c=4294967163, q=9)
[   87.700000] INFO: Stall ended before state dump start
[  150.750000] INFO: rcu_preempt detected stalls on CPUs/tasks: {}
(detected by 0, t=14712 jiffies, g=4294967164, c=4294967163, q=9)
[  150.750000] INFO: Stall ended before state dump start
Arnd Bergmann May 16, 2013, 2:52 p.m. UTC | #8
On Thursday 16 May 2013 15:37:16 Jonas Jensen wrote:
> On 15 May 2013 15:16, Arnd Bergmann <arnd@arndb.de> wrote:
> > The part that I don't understand at all is the "timer0" part. Is that a string
> > from the data sheet?
> 
> I have next to no data sheets or documentation on the SoC itself. What
> I know is from looking at old sources, which suggest there are more
> than one timer (the rest were never implemented).
> 
> It only needs one for timer_tick? Does it make sense to just call it "timer"?

Yes, I think just "moxa,moxart-timer" is fine. Chances are that if you have
more of them, they are actually compatible with one another. If they are not
and you need more than one, you can always pick a different name
if you need another one.

> > Can you provide some more detail why what PMU registers are used here? Is that
> > a "Performance Measurement Unit", "Power Management Unit" or something else?
> > Are you sure that those registers are only ever needed for GPIO?
> 
> It's "Power Management Unit". The MMC driver uses it to read system
> clock and write it to clock control, but I suspect it can be removed.
> It's code under #ifdef MSD_SUPPORT_GET_CLOCK but I think the else is
> perfectly acceptable.
> GPIO uses it only to enable or disable pins.

It sounds like this is used for what should be separate drivers/clk and
drivers/pinctrl drivers:

A pinctrl driver is often the superset of a gpio driver and can control
more aspects of a pin than the gpio interface can.

The clk driver is supposed to give an abstraction of the clock tree
to be used with interfaces like clk_get() and clk_set_rate(). It
can probably be really simple in case of moxart. Is the mmc driver
the only one that needs access to clocks?

Are the pinctrl and clk registers in different parts of the PMU, or are
they intermixed? In the former case, you can just turn it into separate
devices that have their own distinct "reg" properties, in the second
case, the best solution is likely to mark the pmu 'compatible="syscon"'
and use the drivers/mfd/syscon.c driver to get a regmap that is used
by the clock and pinctrl drivers, respectively.

	Arnd
diff mbox

Patch

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 7b7ab65..eba7935 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -938,6 +938,8 @@  source "arch/arm/mach-footbridge/Kconfig"

 source "arch/arm/mach-gemini/Kconfig"

+source "arch/arm/mach-moxart/Kconfig"
+
 source "arch/arm/mach-highbank/Kconfig"

 source "arch/arm/mach-integrator/Kconfig"
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug
index 29f7623..d534fce 100644
--- a/arch/arm/Kconfig.debug
+++ b/arch/arm/Kconfig.debug
@@ -429,6 +429,15 @@  choice
 		  Say Y here if you want kernel low-level debugging support
 		  on Allwinner A1X based platforms on the UART1.

+	config DEBUG_MOXART_UART0
+        bool "Kernel low-level debugging messages via MOXART UART0"
+        depends on ARCH_MOXART
+        help
+          Say Y here if you want kernel low-level debugging support
+          on MOXART based platforms on the UART0.
+          select this to make sure "putc" in arch/arm/boot/compressed/debug.S
+          uses arch/arm/include/debug/moxart.S:s "addruart" macro
+
 	config DEBUG_TEGRA_UART
 		depends on ARCH_TEGRA
 		bool "Use Tegra UART for low-level debug"
@@ -651,6 +660,7 @@  config DEBUG_LL_INCLUDE
 	default "debug/sirf.S" if DEBUG_SIRFPRIMA2_UART1 || DEBUG_SIRFMARCO_UART1
 	default "debug/socfpga.S" if DEBUG_SOCFPGA_UART
 	default "debug/sunxi.S" if DEBUG_SUNXI_UART0 || DEBUG_SUNXI_UART1
+	default "debug/moxart.S" if DEBUG_MOXART_UART0
 	default "debug/tegra.S" if DEBUG_TEGRA_UART
 	default "debug/ux500.S" if DEBUG_UX500_UART
 	default "debug/vexpress.S" if DEBUG_VEXPRESS_UART0_DETECT || \
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index 3380c4f..2e964a9 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -148,6 +148,7 @@  machine-$(CONFIG_ARCH_DOVE)		+= dove
 machine-$(CONFIG_ARCH_EBSA110)		+= ebsa110
 machine-$(CONFIG_ARCH_EP93XX)		+= ep93xx
 machine-$(CONFIG_ARCH_GEMINI)		+= gemini
+machine-$(CONFIG_ARCH_MOXART)       += moxart
 machine-$(CONFIG_ARCH_HIGHBANK)		+= highbank
 machine-$(CONFIG_ARCH_INTEGRATOR)	+= integrator
 machine-$(CONFIG_ARCH_IOP13XX)		+= iop13xx
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile
index 87e603c..8fbd32d 100644
--- a/arch/arm/boot/dts/Makefile
+++ b/arch/arm/boot/dts/Makefile
@@ -210,6 +210,7 @@  dtb-$(CONFIG_ARCH_VT8500) += vt8500-bv07.dtb \
 	wm8650-mid.dtb \
 	wm8850-w70v2.dtb
 dtb-$(CONFIG_ARCH_ZYNQ) += zynq-zc702.dtb
+dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb

 targets += dtbs
 targets += $(dtb-y)
diff --git a/arch/arm/boot/dts/moxart-uc7112lx.dts
b/arch/arm/boot/dts/moxart-uc7112lx.dts
new file mode 100644
index 0000000..44d4e33
--- /dev/null
+++ b/arch/arm/boot/dts/moxart-uc7112lx.dts
@@ -0,0 +1,90 @@ 
+/* moxart-uc7112lx.dts - Device Tree file for MOXA UC-7112-LX
+ *
+ * Copyright (C) 2013 Jonas Jensen <jonas.jensen@gmail.com>
+ *
+ * Licensed under GPLv2 or later. */
+
+/dts-v1/;
+/include/ "moxart.dtsi"
+
+/ {
+	model = "MOXA UC-7112-LX";
+	compatible = "moxart,moxart-uc-7112-lx";
+
+	memory {
+		reg = <0x00000000 0x02000000>;
+	};
+
+	flash@80000000,0 {
+		/* JS28F128 J3D75 A9087684 - Numonyx™ Embedded Flash Memory (J3 v. D) */
+		compatible = "numonyx,js28f128", "cfi-flash";
+		reg = <0x80000000 0x01000000>;
+		bank-width = <2>;
+		#address-cells = <1>;
+		#size-cells = <1>;
+		partition@0 {
+			label = "bootloader";
+			reg = <0x00000000 0x00040000>;
+		};
+		partition@40000 {
+			label = "linux kernel";
+			reg = <0x00040000 0x001C0000>;
+		};
+		partition@200000 {
+			label = "root filesystem";
+			reg = <0x00200000 0x00800000>;
+		};
+		partition@a00000 {
+			label = "user filesystem";
+			reg = <0x00a00000 0x00600000>;
+		};
+	};
+
+	mmc@98e00000 {
+		compatible = "moxart,moxart-mmc";
+		reg =	<0x98e00000 0x00001000>,
+				<0x98100000 0x1000>;		/* PMU */
+		interrupts = <5 0>;
+	};
+
+	mxser@98200040 {
+		compatible = "moxart,moxart-mxser";
+		reg =	<0x98200040 0x00000080>,	/* UART "3" base */
+				<0x982000e4 0x00000080>,	/* UART mode base */
+				<0x982000c0 0x00000020>;	/* UART interrupt vector */
+		interrupts = <31 1>;
+	};
+
+	mac0: mac@90900000 {
+		compatible = "moxart,moxart-mac0";
+		reg =   <0x90900000 0x1000>,
+				<0x80000000 0x01000000>;	/* MAC address stored on flash */
+		interrupts = <25 0>;
+		flash-offset = <0x50>;
+	};
+
+	mac1: mac@92000000 {
+		compatible = "moxart,moxart-mac1";
+		reg =   <0x92000000 0x1000>,
+				<0x80000000 0x01000000>;	/* MAC address stored on flash */
+		interrupts = <27 0>;
+		flash-offset = <0x56>;
+	};
+
+	uart0: uart@98200000 {
+		compatible = "ns16550a";
+		reg = <0x98200000 0x20>;
+		interrupts = <31 0>;
+		reg-shift = <2>;
+		reg-io-width = <4>;
+		clock-frequency = <14745600>;
+		status = "okay";
+	};
+
+	chosen {
+		/* uncomment to use on board flash root
+		bootargs = "console=ttyS0,115200n8 root=/dev/mtdblock2 rootfstype=jffs2 rw";
+		*/
+		bootargs = "console=ttyS0,115200n8 root=/dev/mmcblk0p1 rw rootwait";
+	};
+};
diff --git a/arch/arm/boot/dts/moxart.dtsi b/arch/arm/boot/dts/moxart.dtsi
new file mode 100644
index 0000000..56743bc
--- /dev/null
+++ b/arch/arm/boot/dts/moxart.dtsi
@@ -0,0 +1,71 @@ 
+/* moxart.dtsi - Device Tree Include file for MOXA ART family SoC
+ *
+ * Copyright (C) 2013 Jonas Jensen <jonas.jensen@gmail.com>
+ *
+ * Licensed under GPLv2 or later. */
+
+/include/ "skeleton.dtsi"
+
+/ {
+	interrupt-parent = <&intc>;
+
+	cpus {
+		cpu@0 {
+			compatible = "faraday,fa526";
+		};
+	};
+
+	clocks {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		osc: oscillator {
+			#clock-cells = <0>;
+			compatible = "fixed-clock";
+			clock-frequency = <24000000>;
+		};
+	};
+
+	soc {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <1>;
+		reg = <0x90000000 0x10000000>;
+		ranges;
+
+		intc: interrupt-controller@98800000 {
+			compatible = "moxart,moxart-interrupt-controller";
+			reg = <0x98800000 0x38>;
+			interrupt-controller;
+			#interrupt-cells = <2>;
+			interrupt-mask = <0x00080000>;		/* single register vector,
interrupts 0-31, 1s signify edge */
+		};
+
+		timer0: timer@98400000 {
+			compatible = "moxart,moxart-timer0";
+			reg = <0x98400000 0x10>;
+			interrupts = <19 1>;
+		};
+
+		gpio: gpio@98700000 {
+			compatible = "moxart,moxart-gpio";
+			reg =	<0x98700000 0x1000>,
+					<0x98100000 0x1000>;		/* PMU */
+		};
+
+		rtc: rtc {
+			compatible = "moxart,moxart-rtc";
+		};
+
+		dma: dma@90500000 {
+			compatible = "moxart,moxart-dma";
+			reg = <0x90500000 0x1000>;
+			interrupts = <24 0>;
+		};
+
+		watchdog: watchdog@98500000 {
+			compatible = "moxart,moxart-watchdog";
+			reg = <0x98500000 0x1000>;
+		};
+	};
+};
diff --git a/arch/arm/configs/moxart_uc7112lx_defconfig
b/arch/arm/configs/moxart_uc7112lx_defconfig
new file mode 100644
index 0000000..7c40502
--- /dev/null
+++ b/arch/arm/configs/moxart_uc7112lx_defconfig
@@ -0,0 +1,113 @@ 
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_SYSCTL_SYSCALL=y
+# CONFIG_ELF_CORE is not set
+# CONFIG_BASE_FULL is not set
+# CONFIG_SIGNALFD is not set
+# CONFIG_TIMERFD is not set
+# CONFIG_EVENTFD is not set
+# CONFIG_AIO is not set
+CONFIG_EMBEDDED=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+CONFIG_ARCH_MULTI_V4=y
+# CONFIG_ARCH_MULTI_V7 is not set
+CONFIG_ARCH_MOXART=y
+CONFIG_MACH_UC7112LX=y
+CONFIG_PREEMPT=y
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ATAGS is not set
+CONFIG_ARM_APPENDED_DTB=y
+CONFIG_NET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_WIRELESS is not set
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+# CONFIG_FW_LOADER is not set
+CONFIG_MTD=y
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_OF=y
+CONFIG_PROC_DEVICETREE=y
+CONFIG_NETDEVICES=y
+# CONFIG_NET_CADENCE is not set
+# CONFIG_NET_VENDOR_BROADCOM is not set
+# CONFIG_NET_VENDOR_CIRRUS is not set
+# CONFIG_NET_VENDOR_FARADAY is not set
+# CONFIG_NET_VENDOR_INTEL is not set
+# CONFIG_NET_VENDOR_MARVELL is not set
+# CONFIG_NET_VENDOR_MICREL is not set
+# CONFIG_NET_VENDOR_NATSEMI is not set
+# CONFIG_NET_VENDOR_SEEQ is not set
+# CONFIG_NET_VENDOR_SMSC is not set
+# CONFIG_NET_VENDOR_STMICRO is not set
+# CONFIG_NET_VENDOR_WIZNET is not set
+CONFIG_ARM_MOXART_ETHER=y
+# CONFIG_WLAN is not set
+# CONFIG_INPUT is not set
+# CONFIG_SERIO is not set
+# CONFIG_VT is not set
+# CONFIG_LEGACY_PTYS is not set
+CONFIG_MOXA_SMARTIO=y
+# CONFIG_DEVKMEM is not set
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=1
+CONFIG_SERIAL_8250_RUNTIME_UARTS=1
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_HW_RANDOM is not set
+CONFIG_GPIO_MOXART=y
+# CONFIG_HWMON is not set
+CONFIG_WATCHDOG=y
+CONFIG_MOXART_WDT=y
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI_MOXART=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_MOXART=y
+CONFIG_DMADEVICES=y
+CONFIG_MOXART_DMA=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_EXT3_FS=y
+CONFIG_TMPFS=y
+CONFIG_JFFS2_FS=y
+CONFIG_PRINTK_TIME=y
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_SHIRQ=y
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_PREEMPT is not set
+CONFIG_PROVE_LOCKING=y
+CONFIG_DEBUG_INFO=y
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_FTRACE is not set
+CONFIG_DEBUG_LL=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_KEYS=y
diff --git a/arch/arm/include/debug/moxart.S b/arch/arm/include/debug/moxart.S
new file mode 100644
index 0000000..01e2aee
--- /dev/null
+++ b/arch/arm/include/debug/moxart.S
@@ -0,0 +1,14 @@ 
+/* Copyright (C) 2013 Jonas Jensen <jonas.jensen@gmail.com>
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. */
+
+#define MOXART_UART_DEBUG_PHYS_BASE		0x98200000
+
+.macro	addruart, rp, rv, tmp
+	ldr	\rp, =MOXART_UART_DEBUG_PHYS_BASE	@ physical
+.endm
+
+#define UART_SHIFT	2
+#include <asm/hardware/debug-8250.S>
diff --git a/arch/arm/mach-moxart/Kconfig b/arch/arm/mach-moxart/Kconfig
new file mode 100644
index 0000000..e19934c
--- /dev/null
+++ b/arch/arm/mach-moxart/Kconfig
@@ -0,0 +1,34 @@ 
+config ARCH_MOXART
+	bool "MOXA ART SoC" if (ARCH_MULTI_V4)
+	select ARCH_REQUIRE_GPIOLIB
+	select USE_OF
+	help
+	  Say Y here if you want to run your kernel on hardware
+	  with a MOXA ART SoC.
+	  These are DIN-rail / wall-mountable embedded PCs sold by MOXA.
+	  http://www.moxa.com/product/Embedded_Computers.htm
+
+config SOC_MOXART
+	bool "MOXART support"
+	depends on ARCH_MOXART
+	default y
+	select CPU_FA526
+	select ARM_DMA_MEM_BUFFERABLE
+	help
+	  Support for the MOXA ART SoC. This is a Faraday FA526 ARMv4 32-bit
192 MHz processor with MMU and 16KB/8KB D/I-cache (UC-7112-LX)
+	  This perticular SoC is used on models UC-7101, UC-7112/UC-7110,
IA240/IA241, IA3341.
+	  These are DIN-rail / wall-mountable embedded PCs sold by MOXA (
http://www.moxa.com/product/Embedded_Computers.htm ).
+
+if ARCH_MOXART
+
+menu "MOXA ART SoC Implementation"
+
+config MACH_UC7112LX
+	bool "MOXA UC-7112-LX"
+	depends on ARCH_MOXART && SOC_MOXART
+	help
+	  Say Y here if you intend to run this kernel on a MOXA UC-7112-LX
embedded computer.
+
+endmenu
+
+endif
diff --git a/arch/arm/mach-moxart/Makefile b/arch/arm/mach-moxart/Makefile
new file mode 100644
index 0000000..b4a1923
--- /dev/null
+++ b/arch/arm/mach-moxart/Makefile
@@ -0,0 +1,12 @@ 
+#
+# Makefile for the linux kernel.
+#
+
+ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include
+
+# Object file lists.
+
+obj-y          := idle.o
+
+obj-$(CONFIG_MACH_UC7112LX)	+= moxart.o
+
diff --git a/arch/arm/mach-moxart/Makefile.boot
b/arch/arm/mach-moxart/Makefile.boot
new file mode 100644
index 0000000..760a0ef
--- /dev/null
+++ b/arch/arm/mach-moxart/Makefile.boot
@@ -0,0 +1,3 @@ 
+   zreladdr-y	+= 0x00008000
+params_phys-y	:= 0x00000100
+initrd_phys-y	:= 0x00800000
diff --git a/arch/arm/mach-moxart/idle.c b/arch/arm/mach-moxart/idle.c
new file mode 100644
index 0000000..5970c27
--- /dev/null
+++ b/arch/arm/mach-moxart/idle.c
@@ -0,0 +1,31 @@ 
+/* Copyright (C) 2013 Jonas Jensen <jonas.jensen@gmail.com>
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. */
+
+#include <linux/init.h>
+#include <asm/system.h>
+#include <asm/proc-fns.h>
+
+static void moxart_idle(void)
+{
+	/*
+	 * Because of broken hardware we have to enable interrupts or the CPU
+	 * will never wakeup... Acctualy it is not very good to enable
+	 * interrupts first since scheduler can miss a tick, but there is
+	 * no other way around this. Platforms that needs it for power saving
+	 * should call enable_hlt() in init code, since by default it is
+	 * disabled.
+	 */
+/*	local_irq_enable();
+	cpu_do_idle();*/
+}
+
+static int __init moxart_idle_init(void)
+{
+	arm_pm_idle = moxart_idle;
+	return 0;
+}
+
+arch_initcall(moxart_idle_init);
diff --git a/arch/arm/mach-moxart/moxart.c b/arch/arm/mach-moxart/moxart.c
new file mode 100644
index 0000000..4c89a21
--- /dev/null
+++ b/arch/arm/mach-moxart/moxart.c
@@ -0,0 +1,42 @@ 
+/* Copyright (C) 2013 Jonas Jensen <jonas.jensen@gmail.com>
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/io.h>
+#include <linux/of_platform.h>
+
+#include <asm/mach/arch.h>
+
+#include "moxart.h"
+
+static void __init moxart_init(void)
+{
+	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+void moxart_restart(char mode, const char *cmd)
+{
+	writel(1, reg_wdt + 4);
+	writel(0x5ab9, reg_wdt + 8);
+	writel(0x03, reg_wdt + 12);
+}
+
+static const char * const moxart_board_dt_compat[] = {
+	"moxart,moxart-uc-7112-lx",
+	NULL,
+};
+
+DT_MACHINE_START(MOXART, "MOXA UC-7112-LX")
+	.init_irq		= moxart_init_irq,
+	.init_time		= moxart_timer_init,
+	.init_machine	= moxart_init,
+	.handle_irq		= moxart_handle_irq,
+	.restart        = moxart_restart,
+	.dt_compat		= moxart_board_dt_compat,
+	.nr_irqs		= 32,
+MACHINE_END
+
diff --git a/arch/arm/mach-moxart/moxart.h b/arch/arm/mach-moxart/moxart.h
new file mode 100644
index 0000000..255ad85
--- /dev/null
+++ b/arch/arm/mach-moxart/moxart.h
@@ -0,0 +1,11 @@ 
+/* Copyright (C) 2013 Jonas Jensen <jonas.jensen@gmail.com>
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License,
+ * or (at your option) any later version. */
+
+extern __iomem void *reg_wdt;
+extern void moxart_timer_init(void);
+extern void moxart_init_irq(void);
+extern void moxart_handle_irq(struct pt_regs *regs);
+