2013-03-13 15:37:19

by Jonas Jensen

[permalink] [raw]
Subject: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

Hi,

I ask for feedback and to submit (if possible) a new ARM SoC platform
port. This is now near complete (I think) (tested on UC-7112-LX Plus)
and applies to 2.6.34.14.

The patch contains the following drivers and platform specific implementations:

* ARCH_MOXART (FA526 processor)
* 100Hz interrupt timer
* UART
* MTD map driver
* Ethernet driver (RTL8201CP)
* MMC driver
* MOXA Smartio/Industio family multiport serial driver
* RTC driver
* Watchdog driver
* GPIO driver

Predicted patch rejects below (in need of a solution, feedback is much
appreciated) because they are critical in areas of boot, MMC and TTY.

arch/arm/boot/compressed/head.S:
A valid (and unique) architecture ID is not loaded to r1. Looks like
the bootloader is broken, it should be doing this!
http://gicl.cs.drexel.edu/people/sevy/linux/ARM_Linux_boot_sequence.html

arch/arm/tools/mach-types:
Omitted (do not edit manually / add a new machine using
http://www.arm.linux.org.uk/developer/machines/?action=new). A fix to
this and above is not feasible as long as MOXA withholds bootloader
sources (requested without success).

drivers/char/mxser.c drivers/char/mxser.h: MOXA
SMARTIO/INDUSTIO/INTELLIO SERIAL CARD (Jiří Slabý):
Force board setup for CONFIG_ARCH_MOXART.
ASYNCB_CLOSING is avoided because of a lockup (infinite wait after
tty_wait_until_sent). Why this happens is unknown (to me) I'm hoping
someone (Jiří?) can shed light. SysRq trace @ http://ideone.com/e845mr
What significance does ASYNCB_CLOSING have?
Obviously, automatic detection is better but "mxser_read_register" is
pointless on this hardware. What to do instead? Is it better to make a
copy and submit a new driver?

drivers/mmc/core/sd.c:
The MMC controller is "special"? "UNSTUFF_BITS" is redefined here
http://repo.or.cz/w/linux-2.6.19-moxart.git/blob/50cdf2c57662f9f69c5615976412f76bfd73311a:/drivers/mmc/mmc.c
. Without the new macro it'll report the wrong geometry and prod_name.
I'm thinking a driver should never have to redefine UNSTUFF_BITS.
Possible workaround: modify bits (in driver) to line up as expected
before returning the response (mmc_request_done).


For reference, this is my previous post from a few months back:
http://lists.infradead.org/pipermail/linux-arm-kernel/2012-December/137130.html

Gitweb: http://repo.or.cz/w/linux-2.6.34.14-moxart.git/commitdiff/?h=3bc2e98ebb92961e1c5992736186920cd070f4ee&hp=b7f1d43323eceb02fd663a71eb2f8be9c17e6740

Download link (size: 193K):
https://linux-2-6-34-14-moxart.googlecode.com/files/linux-2.6.34.14-moxart.patch


2013-03-13 18:34:36

by Daniel Mack

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

Hi Jonas,

On 13.03.2013 16:37, Jonas Jensen wrote:
> I ask for feedback and to submit (if possible) a new ARM SoC platform
> port. This is now near complete (I think) (tested on UC-7112-LX Plus)
> and applies to 2.6.34.14.

First of all - thanks for submitting to the upstream kernel!

However, your patch has many severe problems which you need to address.

* please rebase your work. 2.6.34 is almost three years old now. 3.9 is
in it's stabilisation phase, and all new support has to be done for 3.10.
* all new platforms must be written with device-tree support
* all drivers must have device-tree support as well

> The patch contains the following drivers and platform specific
implementations:
>
> * ARCH_MOXART (FA526 processor)
> * 100Hz interrupt timer
> * UART
> * MTD map driver
> * Ethernet driver (RTL8201CP)
> * MMC driver
> * MOXA Smartio/Industio family multiport serial driver
> * RTC driver
> * Watchdog driver
> * GPIO driver

Never send one big patch but series of smaller ones, so the individual
subsystem maintainers can review and approve their bits.

Please also read Documentation/SubmittingPatches for a lot more
information about this subject.


Best regards,
Daniel



> Predicted patch rejects below (in need of a solution, feedback is much
> appreciated) because they are critical in areas of boot, MMC and TTY.
>
> arch/arm/boot/compressed/head.S:
> A valid (and unique) architecture ID is not loaded to r1. Looks like
> the bootloader is broken, it should be doing this!
> http://gicl.cs.drexel.edu/people/sevy/linux/ARM_Linux_boot_sequence.html
>
> arch/arm/tools/mach-types:
> Omitted (do not edit manually / add a new machine using
> http://www.arm.linux.org.uk/developer/machines/?action=new). A fix to
> this and above is not feasible as long as MOXA withholds bootloader
> sources (requested without success).
>
> drivers/char/mxser.c drivers/char/mxser.h: MOXA
> SMARTIO/INDUSTIO/INTELLIO SERIAL CARD (Jiří Slabý):
> Force board setup for CONFIG_ARCH_MOXART.
> ASYNCB_CLOSING is avoided because of a lockup (infinite wait after
> tty_wait_until_sent). Why this happens is unknown (to me) I'm hoping
> someone (Jiří?) can shed light. SysRq trace @ http://ideone.com/e845mr
> What significance does ASYNCB_CLOSING have?
> Obviously, automatic detection is better but "mxser_read_register" is
> pointless on this hardware. What to do instead? Is it better to make a
> copy and submit a new driver?
>
> drivers/mmc/core/sd.c:
> The MMC controller is "special"? "UNSTUFF_BITS" is redefined here
> http://repo.or.cz/w/linux-2.6.19-moxart.git/blob/50cdf2c57662f9f69c5615976412f76bfd73311a:/drivers/mmc/mmc.c
> . Without the new macro it'll report the wrong geometry and prod_name.
> I'm thinking a driver should never have to redefine UNSTUFF_BITS.
> Possible workaround: modify bits (in driver) to line up as expected
> before returning the response (mmc_request_done).
>
>
> For reference, this is my previous post from a few months back:
> http://lists.infradead.org/pipermail/linux-arm-kernel/2012-December/137130.html
>
> Gitweb: http://repo.or.cz/w/linux-2.6.34.14-moxart.git/commitdiff/?h=3bc2e98ebb92961e1c5992736186920cd070f4ee&hp=b7f1d43323eceb02fd663a71eb2f8be9c17e6740
>
> Download link (size: 193K):
> https://linux-2-6-34-14-moxart.googlecode.com/files/linux-2.6.34.14-moxart.patch
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

2013-03-15 11:26:10

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

On Wednesday 13 March 2013, Daniel Mack wrote:
> On 13.03.2013 16:37, Jonas Jensen wrote:
> > I ask for feedback and to submit (if possible) a new ARM SoC platform
> > port. This is now near complete (I think) (tested on UC-7112-LX Plus)
> > and applies to 2.6.34.14.
>
> First of all - thanks for submitting to the upstream kernel!
>
> However, your patch has many severe problems which you need to address.
>
> * please rebase your work. 2.6.34 is almost three years old now. 3.9 is
> in it's stabilisation phase, and all new support has to be done for 3.10.
> * all new platforms must be written with device-tree support
> * all drivers must have device-tree support as well

+1 all of the above.

Also, if you want to get the port included into 3.10 or later, you need to
follow the latest platform coding standards (in order of files in your patch):

* make it a sub-item under ARCH_MULTIPLATFORM, not a separate top-level
platform
* generate the defconfig file using 'make safedefconfig' rather than copying
the whole .config file
* Use the dmaengine subsystem for your DMA driver and put it into drivers/dma
* Remove the board file and use a device tree for adding your platform
devices
* Use the gpio subsystem for your gpio driver and put it into drivers/gpio
* move mach/debug-macro.S to include/debug/moxart.S
* replace entry-macro.S with a .handle_irq function in the machine
descriptor
* move your mach/hardware.h into next to the platform C files in mach-moxart
* set the arch_reset function as machine_desc->restart
* set the arch_idle function as arm_pm_idle
* remove the CLOCK_TICK_RATE
* move your irq.c to drivers/irqchip/irq-moxart.c and use IRQ domains
* move your time.c to drivers/clocksource/clocksource-moxart.c and
GENERIC_CLOCKEVENTS
* configure the mxser driver using DT and remove all the #ifdef in there
* submit all device drivers to the respective subsystem maintainers
* use the generic watchdog interface in the wdt driver instead of a misc device.

Arnd

2013-03-17 15:32:33

by Jonas Jensen

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

Thank you for the feedback.

Some of the changes are sure to be a challenge for me, but I want to
move this forward, and having a list helps.

3.2.40 is as far as it'll go right now, nothing prints to UART
starting with 3.3.8 (last tested, it's somewhere around there).

I have been advised to enable early_printk (by landley on freenode IRC #edev).

Best regards,
Jonas

2013-03-18 15:04:01

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

On Sunday 17 March 2013, Jonas Jensen wrote:
> Thank you for the feedback.
>
> Some of the changes are sure to be a challenge for me, but I want to
> move this forward, and having a list helps.
>
> 3.2.40 is as far as it'll go right now, nothing prints to UART
> starting with 3.3.8 (last tested, it's somewhere around there).
>
> I have been advised to enable early_printk (by landley on freenode IRC #edev).

Yes, that is a good idea. I would also suggest that you don't try to port
all the code at once a few kernel versions at a time, but that you instead
move straight to the latest kernel, and basically start a new port one driver
at a time. Take one of the newer ports (highbank, virt, bcm, ...) as examples.

Since most of the code is now in drivers/ directories rather than arch/arm,
you can actually start getting stuff upstream before you have completed all
of it. If you have questions, I recommend asking on the #armlinux channel
on freenode, or here on the mailing list.

Arnd

2013-05-15 11:20:32

by Jonas Jensen

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

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 <[email protected]>
---
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(-)

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 <[email protected]>
+ *
+ * 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 <[email protected]>
+ *
+ * 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 <[email protected]>
+ * 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 <[email protected]>
+ * 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 <[email protected]>
+ * 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 <[email protected]>
+ * 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);
+

2013-05-15 13:17:28

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

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

2013-05-15 13:35:21

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

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!

2013-05-15 22:54:49

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

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

2013-05-16 09:00:00

by Russell King - ARM Linux

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

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.

2013-05-16 13:35:10

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

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

2013-05-16 13:37:20

by Jonas Jensen

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

On 15 May 2013 15:16, Arnd Bergmann <[email protected]> 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

2013-05-16 13:50:27

by Jonas Jensen

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

On 16 May 2013 00:54, Arnd Bergmann <[email protected]> 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

2013-05-16 14:52:13

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] ARM: mach-moxart: platform port for MOXA ART SoC

On Thursday 16 May 2013 15:37:16 Jonas Jensen wrote:
> On 15 May 2013 15:16, Arnd Bergmann <[email protected]> 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