Message ID | CACmBeS1empYyoaKidgTrYwUFCw447OKndxZjT98TvYfKVWB00A@mail.gmail.com |
---|---|
State | New |
Headers | show |
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
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!
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
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.
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
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
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
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 --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); +
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(-)