* [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21)
@ 2012-10-19 10:19 Romain Naour
2012-10-19 12:18 ` Gilles Chanteperdrix
0 siblings, 1 reply; 11+ messages in thread
From: Romain Naour @ 2012-10-19 10:19 UTC (permalink / raw)
To: xenomai
Hi Gilles,
First, I followed your advice and I converted the timers to
clocksouce/clockevent framework.
> Other things which could be done for s3c24xx are:
> - convert the timers to clocksource/clockevent: since this platform is
> the only one not to use clocksource/clockevent, we have to keep code
> around for this case in xenomai-forge which could be removed. Having two
> different timers for clocksource and clockevent would allow to avoid the
> tsc emulation based on the decrementer, which I am not sure is really
> reliable since the conversion to CONFIG_IPIPE_ARM_KUSER_TSC.
I had to reduce timers frequency to 4,21MHz in order to produce an
timer's overflow every 15,5ms.
At 8,45Mhz it does not work.
Thanks to this, I am able to activate hrtimer on Linux :)
Secondly, I adapted the code for Adeos (Xenomai 2.6.1).
But I'm not sure about the tsc emulation...
Should I keep using the IPIPE_TSC_TYPE_DECREMENTER ?
Do you think we need something like
IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN_16 ?
In order to adjust scheduling latency, I set /proc/xenomai/latency to 0
But I still have negative latency
(test-latency.txt)
# echo 0 >/proc/xenomai/latency
# latency
== Sampling period: 1000 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat
best|--lat worst
RTD| -0.238| 16.592| 57.599| 0| 0| -0.238| 57.599
RTD| 5.925| 16.829| 83.911| 0| 0| -0.238| 83.911
RTD| 5.688| 16.829| 78.696| 0| 0| -0.238| 83.911
RTD| 5.688| 16.829| 80.355| 0| 0| -0.238| 83.911
RTD| 5.925| 17.066| 75.140| 0| 0| -0.238| 83.911
RTD| -0.712| 18.251| 84.622| 0| 0| -0.712| 84.622
RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 84.622
RTD| 5.688| 16.829| 73.481| 0| 0| -0.712| 84.622
...
Can you tell me If this seems good.
Finally, I add a last patch because I had a problem with the debug port.
The Tx IRQ was not unmasked by root domain in some circumstances.
Therefore, the debug console hangs when you type "dmesg", "ls"...
kernel 2.6.38.8 is not affected by this bug, but i found It with kernel
3.0.36.
Thank you for your help.
Romain
-------------- next part --------------
A non-text attachment was scrubbed...
Name: linux-0001_s3c24xx_clockevents.patch
Type: text/x-patch
Size: 11228 bytes
Desc: not available
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20121019/9d0fd466/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: linux-0003-s3c24xx-fix-UART-unmask.patch
Type: text/x-patch
Size: 931 bytes
Desc: not available
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20121019/9d0fd466/attachment-0001.bin>
-------------- next part --------------
# echo 0 >/proc/xenomai/latency
# latency
== Sampling period: 1000 us
== Test mode: periodic user-mode task
== All results in microseconds
warming up...
RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| -0.238| 16.592| 57.599| 0| 0| -0.238| 57.599
RTD| 5.925| 16.829| 83.911| 0| 0| -0.238| 83.911
RTD| 5.688| 16.829| 78.696| 0| 0| -0.238| 83.911
RTD| 5.688| 16.829| 80.355| 0| 0| -0.238| 83.911
RTD| 5.925| 17.066| 75.140| 0| 0| -0.238| 83.911
RTD| -0.712| 18.251| 84.622| 0| 0| -0.712| 84.622
RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 84.622
RTD| 5.688| 16.829| 73.481| 0| 0| -0.712| 84.622
RTD| 5.688| 16.829| 82.251| 0| 0| -0.712| 84.622
RTD| 5.688| 16.829| 79.881| 0| 0| -0.712| 84.622
RTD| 0.948| 17.540| 77.274| 0| 0| -0.712| 84.622
RTD| -0.475| 17.303| 80.118| 0| 0| -0.712| 84.622
RTD| 5.688| 16.829| 84.859| 0| 0| -0.712| 84.859
RTD| 5.688| 17.066| 84.148| 0| 0| -0.712| 84.859
RTD| 5.688| 16.829| 76.325| 0| 0| -0.712| 84.859
RTD| 5.688| 16.829| 76.325| 0| 0| -0.712| 84.859
RTD| -0.238| 18.251| 82.962| 0| 0| -0.712| 84.859
RTD| 5.688| 16.829| 89.125| 0| 0| -0.712| 89.125
RTD| 5.925| 16.829| 79.644| 0| 0| -0.712| 89.125
RTD| 5.925| 16.829| 79.407| 0| 0| -0.712| 89.125
RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 89.125
RTT| 00:00:22 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 5.688| 16.829| 89.362| 0| 0| -0.712| 89.362
RTD| -0.712| 18.251| 82.962| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 81.303| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 87.703| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 77.037| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 78.459| 0| 0| -0.712| 89.362
RTD| 2.370| 18.251| 80.829| 0| 0| -0.712| 89.362
RTD| -0.475| 16.829| 63.288| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 73.007| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 86.755| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 78.459| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 72.770| 0| 0| -0.712| 89.362
RTD| -0.238| 18.251| 75.614| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 78.933| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 71.111| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 77.037| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 74.666| 0| 0| -0.712| 89.362
RTD| -0.475| 17.066| 70.637| 0| 0| -0.712| 89.362
RTD| -0.475| 18.014| 80.829| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 82.962| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 75.377| 0| 0| -0.712| 89.362
RTT| 00:00:43 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 5.925| 16.829| 83.437| 0| 0| -0.712| 89.362
RTD| 5.925| 16.829| 71.348| 0| 0| -0.712| 89.362
RTD| 2.844| 18.488| 72.059| 0| 0| -0.712| 89.362
RTD| 0.000| 16.829| 80.355| 0| 0| -0.712| 89.362
RTD| 5.688| 16.829| 95.051| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 74.429| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 81.777| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 88.177| 0| 0| -0.712| 95.051
RTD| -0.475| 18.014| 79.407| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 73.244| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 84.385| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 79.644| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 76.325| 0| 0| -0.712| 95.051
RTD| 0.474| 17.777| 71.585| 0| 0| -0.712| 95.051
RTD| -0.712| 17.066| 68.740| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 73.244| 0| 0| -0.712| 95.051
RTD| 5.925| 17.066| 75.140| 0| 0| -0.712| 95.051
RTD| 5.688| 16.592| 66.133| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 70.162| 0| 0| -0.712| 95.051
RTD| -0.475| 18.251| 81.540| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 73.481| 0| 0| -0.712| 95.051
RTT| 00:01:04 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 5.688| 17.066| 84.385| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 85.333| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 71.585| 0| 0| -0.712| 95.051
RTD| 5.688| 17.066| 77.511| 0| 0| -0.712| 95.051
RTD| -0.712| 18.014| 79.644| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 70.162| 0| 0| -0.712| 95.051
RTD| 5.688| 17.066| 85.333| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 83.199| 0| 0| -0.712| 95.051
RTD| 5.688| 17.066| 72.770| 0| 0| -0.712| 95.051
RTD| 5.688| 18.251| 82.725| 0| 0| -0.712| 95.051
RTD| -0.475| 16.829| 77.511| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 78.696| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 77.037| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 68.977| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 83.911| 0| 0| -0.712| 95.051
RTD| -0.475| 18.014| 86.518| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 71.348| 0| 0| -0.712| 95.051
RTD| 5.688| 17.066| 74.903| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 77.985| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 76.799| 0| 0| -0.712| 95.051
RTD| 2.844| 17.066| 70.399| 0| 0| -0.712| 95.051
RTT| 00:01:25 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| -0.238| 18.014| 70.162| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 71.585| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 73.244| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 73.718| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 82.014| 0| 0| -0.712| 95.051
RTD| -0.238| 18.251| 82.488| 0| 0| -0.712| 95.051
RTD| -0.475| 16.829| 77.985| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 82.014| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 84.622| 0| 0| -0.712| 95.051
RTD| 5.688| 17.066| 79.170| 0| 0| -0.712| 95.051
RTD| -0.238| 18.488| 83.674| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 69.688| 0| 0| -0.712| 95.051
RTD| 5.925| 16.829| 82.962| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 72.770| 0| 0| -0.712| 95.051
RTD| 5.688| 16.829| 77.511| 0| 0| -0.712| 95.051
RTD| 0.000| 17.777| 82.962| 0| 0| -0.712| 95.051
RTD| 0.000| 17.066| 99.081| 0| 0| -0.712| 99.081
RTD| 5.925| 16.829| 86.992| 0| 0| -0.712| 99.081
RTD| 5.688| 16.829| 77.511| 0| 0| -0.712| 99.081
RTD| 5.688| 16.829| 69.214| 0| 0| -0.712| 99.081
RTT| 00:01:46 (periodic user-mode task, 1000 us period, priority 99)
RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat best|--lat worst
RTD| 5.688| 16.829| 77.511| 0| 0| -0.712| 99.081
RTD| -0.238| 18.014| 84.622| 0| 0| -0.712| 99.081
RTD| 5.925| 16.829| 71.348| 0| 0| -0.712| 99.081
RTD| 5.925| 16.829| 86.044| 0| 0| -0.712| 99.081
RTD| 5.688| 17.066| 74.429| 0| 0| -0.712| 99.081
RTD| 5.688| 16.829| 72.059| 0| 0| -0.712| 99.081
RTD| 5.925| 16.829| 81.303| 0| 0| -0.712| 99.081
RTD| -0.712| 18.014| 62.814| 0| 0| -0.712| 99.081
RTD| 5.925| 16.829| 90.548| 0| 0| -0.712| 99.081
RTD| 5.688| 16.829| 81.777| 0| 0| -0.712| 99.081
---|-----------|-----------|-----------|--------|------|-------------------------
RTS| -0.712| 17.066| 99.081| 0| 0| 00:01:56/00:01:56
-------------- next part --------------
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 3.2.21 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
CONFIG_GENERIC_TIME_VSYSCALL=y
# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_KTIME_SCALAR=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_NO_IOPORT=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_ARCH_HAS_CPUFREQ=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_ARM_PATCH_PHYS_VIRT=y
CONFIG_GENERIC_BUG=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_HAVE_IRQ_WORK=y
#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_LZO=y
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_LZO is not set
CONFIG_DEFAULT_HOSTNAME="(none)"
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
CONFIG_POSIX_MQUEUE_SYSCTL=y
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_FHANDLE is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
CONFIG_HAVE_GENERIC_HARDIRQS=y
#
# IRQ subsystem
#
CONFIG_GENERIC_HARDIRQS=y
CONFIG_HAVE_SPARSE_IRQ=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_CHIP=y
# CONFIG_SPARSE_IRQ is not set
#
# RCU Subsystem
#
CONFIG_TINY_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
# CONFIG_RCU_TRACE is not set
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
# CONFIG_CGROUPS is not set
CONFIG_NAMESPACES=y
CONFIG_UTS_NS=y
CONFIG_IPC_NS=y
CONFIG_USER_NS=y
CONFIG_PID_NS=y
CONFIG_NET_NS=y
# CONFIG_SCHED_AUTOGROUP is not set
# CONFIG_SYSFS_DEPRECATED is not set
CONFIG_RELAY=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
# CONFIG_EXPERT is not set
CONFIG_UID16=y
# CONFIG_SYSCTL_SYSCALL is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
# CONFIG_EMBEDDED is not set
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
#
# Kernel Performance Events And Counters
#
# CONFIG_PERF_EVENTS is not set
# CONFIG_PERF_COUNTERS is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
# CONFIG_COMPAT_BRK is not set
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_PROFILING is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_DMA_API_DEBUG=y
#
# GCOV-based kernel profiling
#
# CONFIG_GCOV_KERNEL is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_BLOCK=y
CONFIG_LBDAF=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_BLK_DEV_BSGLIB is not set
CONFIG_BLK_DEV_INTEGRITY=y
#
# IO Schedulers
#
CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
# CONFIG_DEFAULT_DEADLINE is not set
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
# CONFIG_INLINE_SPIN_UNLOCK is not set
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
# CONFIG_INLINE_READ_UNLOCK is not set
# CONFIG_INLINE_READ_UNLOCK_BH is not set
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
# CONFIG_INLINE_WRITE_UNLOCK is not set
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
#
# Real-time sub-system
#
CONFIG_XENOMAI=y
CONFIG_XENO_GENERIC_STACKPOOL=y
CONFIG_XENO_FASTSYNCH_DEP=y
CONFIG_XENO_FASTSYNCH=y
CONFIG_XENO_OPT_NUCLEUS=y
CONFIG_XENO_OPT_PERVASIVE=y
# CONFIG_XENO_OPT_PRIOCPL is not set
CONFIG_XENO_OPT_PIPELINE_HEAD=y
# CONFIG_XENO_OPT_SCHED_CLASSES is not set
CONFIG_XENO_OPT_PIPE=y
CONFIG_XENO_OPT_VFILE=y
CONFIG_XENO_OPT_PIPE_NRDEV=32
CONFIG_XENO_OPT_REGISTRY_NRSLOTS=512
CONFIG_XENO_OPT_SYS_HEAPSZ=256
CONFIG_XENO_OPT_SYS_STACKPOOLSZ=128
CONFIG_XENO_OPT_SEM_HEAPSZ=12
CONFIG_XENO_OPT_GLOBAL_SEM_HEAPSZ=12
CONFIG_XENO_OPT_STATS=y
CONFIG_XENO_OPT_DEBUG=y
# CONFIG_XENO_OPT_DEBUG_NUCLEUS is not set
# CONFIG_XENO_OPT_DEBUG_XNLOCK is not set
# CONFIG_XENO_OPT_DEBUG_QUEUES is not set
# CONFIG_XENO_OPT_DEBUG_REGISTRY is not set
# CONFIG_XENO_OPT_DEBUG_TIMERS is not set
CONFIG_XENO_OPT_DEBUG_SYNCH_RELAX=y
CONFIG_XENO_OPT_WATCHDOG=y
CONFIG_XENO_OPT_WATCHDOG_TIMEOUT=4
# CONFIG_XENO_OPT_SHIRQ is not set
CONFIG_XENO_OPT_SELECT=y
CONFIG_XENO_OPT_HOSTRT=y
#
# Timing
#
# CONFIG_XENO_OPT_TIMING_PERIODIC is not set
CONFIG_XENO_OPT_TIMING_VIRTICK=1000
CONFIG_XENO_OPT_TIMING_SCHEDLAT=0
#
# Scalability
#
# CONFIG_XENO_OPT_SCALABLE_SCHED is not set
CONFIG_XENO_OPT_TIMER_LIST=y
# CONFIG_XENO_OPT_TIMER_HEAP is not set
# CONFIG_XENO_OPT_TIMER_WHEEL is not set
#
# Machine
#
CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH=y
CONFIG_XENO_HW_FPU=y
CONFIG_XENO_HW_UNLOCKED_SWITCH=y
#
# Interfaces
#
CONFIG_XENO_SKIN_NATIVE=y
CONFIG_XENO_OPT_NATIVE_PERIOD=0
CONFIG_XENO_OPT_NATIVE_PIPE=y
CONFIG_XENO_OPT_NATIVE_PIPE_BUFSZ=1024
CONFIG_XENO_OPT_NATIVE_SEM=y
CONFIG_XENO_OPT_NATIVE_EVENT=y
CONFIG_XENO_OPT_NATIVE_MUTEX=y
CONFIG_XENO_OPT_NATIVE_COND=y
CONFIG_XENO_OPT_NATIVE_QUEUE=y
CONFIG_XENO_OPT_NATIVE_BUFFER=y
CONFIG_XENO_OPT_NATIVE_HEAP=y
CONFIG_XENO_OPT_NATIVE_ALARM=y
CONFIG_XENO_OPT_NATIVE_MPS=y
# CONFIG_XENO_OPT_NATIVE_INTR is not set
CONFIG_XENO_OPT_DEBUG_NATIVE=y
CONFIG_XENO_SKIN_POSIX=y
CONFIG_XENO_OPT_POSIX_PERIOD=0
# CONFIG_XENO_OPT_POSIX_SHM is not set
# CONFIG_XENO_OPT_POSIX_INTR is not set
CONFIG_XENO_OPT_POSIX_SELECT=y
CONFIG_XENO_OPT_DEBUG_POSIX=y
# CONFIG_XENO_SKIN_PSOS is not set
# CONFIG_XENO_SKIN_UITRON is not set
# CONFIG_XENO_SKIN_VRTX is not set
# CONFIG_XENO_SKIN_VXWORKS is not set
# CONFIG_XENO_OPT_NOWARN_DEPRECATED is not set
CONFIG_XENO_SKIN_RTDM=y
CONFIG_XENO_OPT_RTDM_PERIOD=0
CONFIG_XENO_OPT_RTDM_FILDES=128
CONFIG_XENO_OPT_RTDM_SELECT=y
# CONFIG_XENO_OPT_DEBUG_RTDM is not set
CONFIG_XENO_OPT_DEBUG_RTDM_APPL=y
#
# Drivers
#
#
# Serial drivers
#
# CONFIG_XENO_DRIVERS_16550A is not set
#
# Testing drivers
#
CONFIG_XENO_DRIVERS_TIMERBENCH=y
# CONFIG_XENO_DRIVERS_KLATENCY is not set
# CONFIG_XENO_DRIVERS_IRQBENCH is not set
CONFIG_XENO_DRIVERS_SWITCHTEST=y
# CONFIG_XENO_DRIVERS_RTDMTEST is not set
#
# CAN drivers
#
# CONFIG_XENO_DRIVERS_CAN is not set
#
# ANALOGY drivers
#
# CONFIG_XENO_DRIVERS_ANALOGY is not set
#
# Real-time IPC drivers
#
# CONFIG_XENO_DRIVERS_RTIPC is not set
# CONFIG_FREEZER is not set
#
# System Type
#
CONFIG_MMU=y
# CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_REALVIEW is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_VEXPRESS is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_BCMRING is not set
# CONFIG_ARCH_HIGHBANK is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CNS3XXX is not set
# CONFIG_ARCH_GEMINI is not set
# CONFIG_ARCH_PRIMA2 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_ARCH_MXS is not set
# CONFIG_ARCH_NETX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_DOVE is not set
# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_LPC32XX is not set
# CONFIG_ARCH_MV78XX0 is not set
# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_MMP is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_W90X900 is not set
# CONFIG_ARCH_TEGRA is not set
# CONFIG_ARCH_PICOXCELL is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_MSM is not set
# CONFIG_ARCH_SHMOBILE is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
CONFIG_ARCH_S3C2410=y
# CONFIG_ARCH_S3C64XX is not set
# CONFIG_ARCH_S5P64X0 is not set
# CONFIG_ARCH_S5PC100 is not set
# CONFIG_ARCH_S5PV210 is not set
# CONFIG_ARCH_EXYNOS is not set
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_TCC_926 is not set
# CONFIG_ARCH_U300 is not set
# CONFIG_ARCH_U8500 is not set
# CONFIG_ARCH_NOMADIK is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
# CONFIG_PLAT_SPEAR is not set
# CONFIG_ARCH_VT8500 is not set
# CONFIG_ARCH_ZYNQ is not set
# CONFIG_GPIO_PCA953X is not set
# CONFIG_KEYBOARD_GPIO_POLLED is not set
CONFIG_PLAT_SAMSUNG=y
#
# Boot options
#
# CONFIG_S3C_BOOT_WATCHDOG is not set
# CONFIG_S3C_BOOT_ERROR_RESET is not set
CONFIG_S3C_BOOT_UART_FORCE_FIFO=y
CONFIG_S3C_LOWLEVEL_UART_PORT=0
CONFIG_SAMSUNG_GPIO_EXTRA=0
CONFIG_S3C_GPIO_SPACE=0
CONFIG_S3C_ADC=y
CONFIG_S3C_DEV_USB_HOST=y
CONFIG_S3C_DEV_WDT=y
CONFIG_S3C_DEV_NAND=y
CONFIG_SAMSUNG_DEV_PWM=y
# CONFIG_S3C24XX_PWM is not set
CONFIG_S3C_DMA=y
#
# Power management
#
#
# Power Domain
#
CONFIG_DEBUG_S3C_UART=0
CONFIG_PLAT_S3C24XX=y
CONFIG_CPU_LLSERIAL_S3C2440_ONLY=y
CONFIG_CPU_LLSERIAL_S3C2440=y
CONFIG_S3C2410_CLOCK=y
CONFIG_S3C24XX_GPIO_EXTRA=0
CONFIG_S3C2410_DMA=y
# CONFIG_S3C2410_DMA_DEBUG is not set
#
# System MMU
#
#
# S3C2410 Machines
#
# CONFIG_ARCH_SMDK2410 is not set
# CONFIG_ARCH_H1940 is not set
# CONFIG_MACH_N30 is not set
# CONFIG_ARCH_BAST is not set
# CONFIG_MACH_OTOM is not set
# CONFIG_MACH_AML_M5900 is not set
# CONFIG_MACH_TCT_HAMMER is not set
# CONFIG_MACH_VR1000 is not set
# CONFIG_MACH_QT2410 is not set
#
# S3C2412 Machines
#
# CONFIG_MACH_JIVE is not set
# CONFIG_MACH_SMDK2413 is not set
# CONFIG_MACH_SMDK2412 is not set
# CONFIG_MACH_VSTMS is not set
#
# S3C2416 Machines
#
# CONFIG_MACH_SMDK2416 is not set
CONFIG_CPU_S3C2440=y
CONFIG_CPU_S3C244X=y
CONFIG_S3C2440_DMA=y
#
# S3C2440 and S3C2442 Machines
#
# CONFIG_MACH_ANUBIS is not set
# CONFIG_MACH_NEO1973_GTA02 is not set
# CONFIG_MACH_OSIRIS is not set
# CONFIG_MACH_RX3715 is not set
# CONFIG_ARCH_S3C2440 is not set
# CONFIG_MACH_NEXCODER_2440 is not set
# CONFIG_SMDK2440_CPU2440 is not set
# CONFIG_SMDK2440_CPU2442 is not set
# CONFIG_MACH_AT2440EVB is not set
CONFIG_MACH_MINI2440=y
# CONFIG_MACH_RX1950 is not set
#
# S3C2443 Machines
#
# CONFIG_MACH_SMDK2443 is not set
CONFIG_IPIPE_ARM_KUSER_TSC=y
#
# Processor Type
#
CONFIG_CPU_ARM920T=y
CONFIG_CPU_32v4T=y
CONFIG_CPU_ABRT_EV4T=y
CONFIG_CPU_PABRT_LEGACY=y
CONFIG_CPU_CACHE_V4WT=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
CONFIG_CPU_CP15=y
CONFIG_CPU_CP15_MMU=y
CONFIG_CPU_USE_DOMAINS=y
#
# Processor Features
#
CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
CONFIG_ARM_L1_CACHE_SHIFT=5
CONFIG_ARM_FCSE=y
# CONFIG_ARM_FCSE_GUARANTEED is not set
CONFIG_ARM_FCSE_BEST_EFFORT=y
# CONFIG_ARM_FCSE_PREEMPT_FLUSH is not set
CONFIG_ARM_FCSE_MESSAGES=y
# CONFIG_ARM_FCSE_DEBUG is not set
#
# Bus support
#
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCCARD is not set
#
# Kernel Features
#
CONFIG_TICK_ONESHOT=y
# CONFIG_NO_HZ is not set
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_IPIPE=y
CONFIG_IPIPE_CORE=y
CONFIG_IPIPE_LEGACY=y
CONFIG_IPIPE_HAVE_HOSTRT=y
CONFIG_IPIPE_DELAYED_ATOMICSW=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_HZ=200
CONFIG_AEABI=y
# CONFIG_OABI_COMPAT is not set
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
CONFIG_HAVE_ARCH_PFN_VALID=y
# CONFIG_HIGHMEM is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=999999
# CONFIG_COMPACTION is not set
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
# CONFIG_CLEANCACHE is not set
CONFIG_FORCE_MAX_ZONEORDER=11
CONFIG_ALIGNMENT_TRAP=y
# CONFIG_UACCESS_WITH_MEMCPY is not set
# CONFIG_SECCOMP is not set
# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_DEPRECATED_PARAM_STRUCT is not set
#
# Boot options
#
# CONFIG_USE_OF is not set
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set
#
# CPU Power Management
#
#
# CPU Frequency scaling
#
# CONFIG_CPU_FREQ is not set
# CONFIG_CPU_IDLE is not set
#
# Floating point emulation
#
#
# At least one emulation must be selected
#
#
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_HAVE_AOUT=y
CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_MISC=m
#
# Power management options
#
# CONFIG_SUSPEND is not set
# CONFIG_PM_RUNTIME is not set
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_ARM_CPU_SUSPEND is not set
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
# CONFIG_XFRM_MIGRATE is not set
# CONFIG_XFRM_STATISTICS is not set
CONFIG_NET_KEY=m
# CONFIG_NET_KEY_MIGRATE is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
# CONFIG_IP_FIB_TRIE_STATS is not set
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE_DEMUX is not set
CONFIG_IP_MROUTE=y
# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
# 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=m
CONFIG_INET_TCP_DIAG=m
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=y
#
# Core Netfilter Configuration
#
# CONFIG_NETFILTER_NETLINK_QUEUE is not set
# CONFIG_NETFILTER_NETLINK_LOG is not set
# CONFIG_NF_CONNTRACK is not set
# CONFIG_NETFILTER_XTABLES is not set
# CONFIG_IP_VS is not set
#
# IP: Netfilter Configuration
#
# CONFIG_NF_DEFRAG_IPV4 is not set
# CONFIG_IP_NF_QUEUE is not set
# CONFIG_IP_NF_IPTABLES is not set
# CONFIG_IP_NF_ARPTABLES is not set
# CONFIG_BRIDGE_NF_EBTABLES is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_L2TP is not set
CONFIG_STP=m
CONFIG_GARP=m
CONFIG_BRIDGE=m
CONFIG_BRIDGE_IGMP_SNOOPING=y
# CONFIG_NET_DSA is not set
CONFIG_VLAN_8021Q=m
CONFIG_VLAN_8021Q_GVRP=y
# CONFIG_DECNET is not set
CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
# CONFIG_NET_SCHED is not set
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
# CONFIG_BATMAN_ADV is not set
#
# Network testing
#
CONFIG_NET_PKTGEN=m
# CONFIG_HAMRADIO is not set
# CONFIG_CAN is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
CONFIG_FIB_RULES=y
# CONFIG_WIRELESS is not set
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set
# CONFIG_NFC is not set
#
# Device Drivers
#
#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
CONFIG_CONNECTOR=m
CONFIG_MTD=y
# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_AFS_PARTS is not set
# CONFIG_MTD_AR7_PARTS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
CONFIG_FTL=y
CONFIG_NFTL=y
CONFIG_NFTL_RW=y
CONFIG_INFTL=y
CONFIG_RFD_FTL=y
# CONFIG_SSFDC is not set
# CONFIG_SM_FTL is not set
# CONFIG_MTD_OOPS is not set
# CONFIG_MTD_SWAP is not set
#
# RAM/ROM/Flash chip drivers
#
CONFIG_MTD_CFI=y
CONFIG_MTD_JEDECPROBE=y
CONFIG_MTD_GEN_PROBE=y
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
# CONFIG_MTD_CFI_INTELEXT is not set
CONFIG_MTD_CFI_AMDSTD=y
CONFIG_MTD_CFI_STAA=y
CONFIG_MTD_CFI_UTIL=y
CONFIG_MTD_RAM=y
CONFIG_MTD_ROM=y
# CONFIG_MTD_ABSENT is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
# CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_IMPA7 is not set
# CONFIG_MTD_PLATRAM is not set
#
# Self-contained MTD device drivers
#
# CONFIG_MTD_DATAFLASH is not set
# CONFIG_MTD_M25P80 is not set
# CONFIG_MTD_SST25L is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
# CONFIG_MTD_DOCG3 is not set
CONFIG_MTD_NAND_ECC=y
# CONFIG_MTD_NAND_ECC_SMC is not set
CONFIG_MTD_NAND=y
CONFIG_MTD_NAND_VERIFY_WRITE=y
# CONFIG_MTD_NAND_ECC_BCH is not set
# CONFIG_MTD_SM_COMMON is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_GPIO is not set
CONFIG_MTD_NAND_IDS=y
CONFIG_MTD_NAND_S3C2410=y
# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
# CONFIG_MTD_NAND_S3C2410_HWECC is not set
# CONFIG_MTD_NAND_S3C2410_CLKSTOP is not set
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_NANDSIM is not set
CONFIG_MTD_NAND_PLATFORM=y
# CONFIG_MTD_ONENAND is not set
#
# LPDDR flash memory drivers
#
CONFIG_MTD_LPDDR=y
CONFIG_MTD_QINFO_PROBE=y
# CONFIG_MTD_UBI is not set
# CONFIG_PARPORT is not set
CONFIG_BLK_DEV=y
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
# CONFIG_BLK_DEV_DRBD is not set
CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=y
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=65536
# CONFIG_BLK_DEV_XIP is not set
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
# CONFIG_ATA_OVER_ETH is not set
# CONFIG_MG_DISK is not set
# CONFIG_BLK_DEV_RBD is not set
# CONFIG_SENSORS_LIS3LV02D is not set
CONFIG_MISC_DEVICES=y
# CONFIG_AD525X_DPOT is not set
# CONFIG_ATMEL_PWM is not set
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_ISL29003 is not set
# CONFIG_ISL29020 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_SENSORS_BH1780 is not set
# CONFIG_SENSORS_BH1770 is not set
# CONFIG_SENSORS_APDS990X is not set
# CONFIG_HMC6352 is not set
# CONFIG_DS1682 is not set
# CONFIG_TI_DAC7512 is not set
# CONFIG_BMP085 is not set
# CONFIG_USB_SWITCH_FSA9480 is not set
# CONFIG_C2PORT is not set
#
# EEPROM support
#
CONFIG_EEPROM_AT24=y
# CONFIG_EEPROM_AT25 is not set
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
# CONFIG_EEPROM_93CX6 is not set
# CONFIG_EEPROM_93XX46 is not set
# CONFIG_IWMC3200TOP is not set
#
# Texas Instruments shared transport line discipline
#
# CONFIG_TI_ST is not set
# CONFIG_SENSORS_LIS3_SPI is not set
# CONFIG_SENSORS_LIS3_I2C is not set
#
# Altera FPGA firmware download module
#
# CONFIG_ALTERA_STAPL is not set
#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# CONFIG_RAID_ATTRS is not set
# CONFIG_SCSI is not set
# CONFIG_SCSI_DMA is not set
# CONFIG_SCSI_NETLINK is not set
# CONFIG_ATA is not set
# CONFIG_MD is not set
CONFIG_NETDEVICES=y
CONFIG_NET_CORE=y
# CONFIG_BONDING is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
CONFIG_MII=y
# CONFIG_MACVLAN is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
CONFIG_TUN=m
# CONFIG_VETH is not set
#
# CAIF transport drivers
#
CONFIG_ETHERNET=y
# CONFIG_NET_VENDOR_BROADCOM is not set
# CONFIG_NET_VENDOR_CHELSIO is not set
CONFIG_DM9000=y
# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
# CONFIG_DNET 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_MICROCHIP is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
# CONFIG_ETHOC 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_PHYLIB is not set
CONFIG_PPP=m
CONFIG_PPP_BSDCOMP=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_FILTER=y
CONFIG_PPP_MPPE=m
CONFIG_PPP_MULTILINK=y
# CONFIG_PPPOE is not set
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
# CONFIG_SLIP is not set
CONFIG_SLHC=m
# CONFIG_WLAN is not set
#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#
# CONFIG_WAN is not set
# CONFIG_ISDN is not set
# CONFIG_PHONE is not set
#
# Input device support
#
CONFIG_INPUT=y
# CONFIG_INPUT_FF_MEMLESS is not set
# CONFIG_INPUT_POLLDEV is not set
# CONFIG_INPUT_SPARSEKMAP is not set
#
# Userland interfaces
#
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_PSAUX=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=m
#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ADP5589 is not set
# CONFIG_KEYBOARD_ATKBD is not set
# CONFIG_KEYBOARD_QT1070 is not set
# CONFIG_KEYBOARD_QT2160 is not set
# CONFIG_KEYBOARD_LKKBD is not set
CONFIG_KEYBOARD_GPIO=y
# CONFIG_KEYBOARD_TCA6416 is not set
# CONFIG_KEYBOARD_MATRIX is not set
# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_OPENCORES is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
# CONFIG_INPUT_MISC is not set
#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
CONFIG_VT=y
CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
CONFIG_VT_HW_CONSOLE_BINDING=y
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=128
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_N_GSM is not set
# CONFIG_TRACE_SINK is not set
CONFIG_DEVKMEM=y
#
# Serial drivers
#
# CONFIG_SERIAL_8250 is not set
#
# Non-8250 serial port support
#
CONFIG_SERIAL_SAMSUNG=y
CONFIG_SERIAL_SAMSUNG_UARTS=3
# CONFIG_SERIAL_SAMSUNG_DEBUG is not set
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
CONFIG_SERIAL_S3C2440=y
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX3107 is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_IFX6X60 is not set
# CONFIG_SERIAL_XILINX_PS_UART is not set
# CONFIG_HVC_DCC is not set
CONFIG_IPMI_HANDLER=m
# CONFIG_IPMI_PANIC_EVENT is not set
CONFIG_IPMI_DEVICE_INTERFACE=m
CONFIG_IPMI_SI=m
CONFIG_IPMI_WATCHDOG=m
CONFIG_IPMI_POWEROFF=m
CONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
# CONFIG_RAMOOPS is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_MUX is not set
CONFIG_I2C_HELPER_AUTO=y
#
# I2C Hardware Bus support
#
#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
# CONFIG_I2C_GPIO is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_PXA_PCI is not set
CONFIG_HAVE_S3C2410_I2C=y
CONFIG_I2C_S3C2410=y
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_XILINX is not set
#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
CONFIG_SPI=y
# CONFIG_SPI_DEBUG is not set
CONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
CONFIG_SPI_BITBANG=y
# CONFIG_SPI_GPIO is not set
# CONFIG_SPI_OC_TINY is not set
# CONFIG_SPI_PXA2XX_PCI is not set
CONFIG_SPI_S3C24XX=y
# CONFIG_SPI_S3C24XX_FIQ is not set
# CONFIG_SPI_XILINX is not set
# CONFIG_SPI_DESIGNWARE is not set
#
# SPI Protocol Masters
#
CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_TLE62X0 is not set
#
# PPS support
#
# CONFIG_PPS is not set
#
# PPS generators support
#
#
# PTP clock support
#
#
# Enable Device Drivers -> PPS to see the PTP clock options.
#
CONFIG_ARCH_REQUIRE_GPIOLIB=y
CONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set
CONFIG_GPIO_SYSFS=y
#
# Memory mapped GPIO drivers:
#
# CONFIG_GPIO_GENERIC_PLATFORM is not set
# CONFIG_GPIO_IT8761E is not set
#
# I2C GPIO expanders:
#
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCF857X is not set
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_ADP5588 is not set
#
# PCI GPIO expanders:
#
#
# SPI GPIO expanders:
#
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_74X164 is not set
#
# AC97 GPIO expanders:
#
#
# MODULbus GPIO expanders:
#
# CONFIG_W1 is not set
# CONFIG_POWER_SUPPLY is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Native drivers
#
# CONFIG_SENSORS_AD7314 is not set
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADCXX is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ADT7411 is not set
# CONFIG_SENSORS_ADT7462 is not set
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7475 is not set
# CONFIG_SENSORS_ASC7621 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS620 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set
# CONFIG_SENSORS_F75375S is not set
# CONFIG_SENSORS_G760A is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
# CONFIG_SENSORS_IBMAEM is not set
# CONFIG_SENSORS_IBMPEX is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_JC42 is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM70 is not set
# CONFIG_SENSORS_LM73 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
# CONFIG_SENSORS_LTC4151 is not set
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4245 is not set
# CONFIG_SENSORS_LTC4261 is not set
# CONFIG_SENSORS_LM95241 is not set
# CONFIG_SENSORS_LM95245 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX16065 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX1668 is not set
# CONFIG_SENSORS_MAX6639 is not set
# CONFIG_SENSORS_MAX6642 is not set
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_NTC_THERMISTOR is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_PMBUS is not set
# CONFIG_SENSORS_SHT15 is not set
# CONFIG_SENSORS_SHT21 is not set
# CONFIG_SENSORS_S3C is not set
# CONFIG_SENSORS_SMM665 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_EMC1403 is not set
# CONFIG_SENSORS_EMC2103 is not set
# CONFIG_SENSORS_EMC6W201 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_SCH56XX_COMMON is not set
# CONFIG_SENSORS_SCH5627 is not set
# CONFIG_SENSORS_SCH5636 is not set
# CONFIG_SENSORS_ADS1015 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_AMC6821 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_TMP102 is not set
# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_TMP421 is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
CONFIG_THERMAL=m
CONFIG_THERMAL_HWMON=y
CONFIG_WATCHDOG=y
CONFIG_WATCHDOG_CORE=y
# CONFIG_WATCHDOG_NOWAYOUT is not set
#
# Watchdog Device Drivers
#
# CONFIG_SOFT_WATCHDOG is not set
CONFIG_S3C2410_WATCHDOG=y
# CONFIG_DW_WATCHDOG is not set
# CONFIG_MAX63XX_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y
#
# Broadcom specific AMBA
#
# CONFIG_BCMA is not set
#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_88PM860X is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_HTC_I2CPLD is not set
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
# CONFIG_MFD_TPS6586X is not set
# CONFIG_MFD_TPS65910 is not set
# CONFIG_MFD_TPS65912_I2C is not set
# CONFIG_MFD_TPS65912_SPI is not set
# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_STMPE is not set
# CONFIG_MFD_TC3589X is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_T7L66XB is not set
# CONFIG_MFD_TC6387XB is not set
# CONFIG_MFD_TC6393XB is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_MAX8925 is not set
# CONFIG_MFD_MAX8997 is not set
# CONFIG_MFD_MAX8998 is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM831X_I2C is not set
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_WM8994 is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_MC13XXX is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_EZX_PCAP is not set
# CONFIG_MFD_WL1273_CORE is not set
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_REGULATOR is not set
# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
#
# CONFIG_DRM is not set
# CONFIG_VGASTATE is not set
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
# CONFIG_FB is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Display device support
#
# CONFIG_DISPLAY_SUPPORT is not set
#
# Console display driver support
#
CONFIG_DUMMY_CONSOLE=y
# CONFIG_SOUND is not set
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
CONFIG_HIDRAW=y
CONFIG_HID_PID=y
#
# Special HID drivers
#
CONFIG_USB_SUPPORT=y
CONFIG_USB_COMMON=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
# CONFIG_USB_ARCH_HAS_XHCI is not set
# CONFIG_USB is not set
# CONFIG_USB_DWC3 is not set
#
# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#
CONFIG_USB_GADGET=y
# CONFIG_USB_GADGET_DEBUG is not set
# CONFIG_USB_GADGET_DEBUG_FILES is not set
# CONFIG_USB_GADGET_DEBUG_FS is not set
CONFIG_USB_GADGET_VBUS_DRAW=2
CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2
# CONFIG_USB_FUSB300 is not set
# CONFIG_USB_R8A66597 is not set
# CONFIG_USB_S3C2410 is not set
# CONFIG_USB_S3C_HSUDC is not set
# CONFIG_USB_M66592 is not set
# CONFIG_USB_NET2272 is not set
# CONFIG_USB_ZERO is not set
# CONFIG_USB_ETH is not set
# CONFIG_USB_G_NCM is not set
# CONFIG_USB_GADGETFS is not set
# CONFIG_USB_FUNCTIONFS is not set
# CONFIG_USB_FILE_STORAGE is not set
# CONFIG_USB_MASS_STORAGE is not set
# CONFIG_USB_G_SERIAL is not set
# CONFIG_USB_G_PRINTER is not set
# CONFIG_USB_CDC_COMPOSITE is not set
# CONFIG_USB_G_ACM_MS is not set
# CONFIG_USB_G_MULTI is not set
# CONFIG_USB_G_HID is not set
# CONFIG_USB_G_DBGP is not set
#
# OTG and related infrastructure
#
# CONFIG_USB_GPIO_VBUS is not set
# CONFIG_USB_ULPI is not set
# CONFIG_NOP_USB_XCEIV is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
# CONFIG_MMC_CLKGATE is not set
#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_MINORS=8
CONFIG_MMC_BLOCK_BOUNCE=y
CONFIG_SDIO_UART=y
# CONFIG_MMC_TEST is not set
#
# MMC/SD/SDIO Host Controller Drivers
#
CONFIG_MMC_SDHCI=y
# CONFIG_MMC_SDHCI_PLTFM is not set
# CONFIG_MMC_SDHCI_S3C is not set
# CONFIG_MMC_SDHCI_PXAV3 is not set
# CONFIG_MMC_SDHCI_PXAV2 is not set
CONFIG_MMC_SPI=y
CONFIG_MMC_S3C=y
# CONFIG_MMC_S3C_HW_SDIO_IRQ is not set
CONFIG_MMC_S3C_PIO=y
# CONFIG_MMC_S3C_DMA is not set
# CONFIG_MMC_S3C_PIODMA is not set
# CONFIG_MMC_DW is not set
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
#
# LED drivers
#
# CONFIG_LEDS_LM3530 is not set
# CONFIG_LEDS_S3C24XX is not set
# CONFIG_LEDS_PCA9532 is not set
# CONFIG_LEDS_GPIO is not set
# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_LP5521 is not set
# CONFIG_LEDS_LP5523 is not set
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_DAC124S085 is not set
# CONFIG_LEDS_BD2802 is not set
# CONFIG_LEDS_LT3593 is not set
# CONFIG_LEDS_RENESAS_TPU is not set
CONFIG_LEDS_TRIGGERS=y
#
# LED Triggers
#
# CONFIG_LEDS_TRIGGER_TIMER is not set
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
# CONFIG_LEDS_TRIGGER_GPIO is not set
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_ACCESSIBILITY is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
CONFIG_RTC_INTF_DEV_UIE_EMUL=y
# CONFIG_RTC_DRV_TEST is not set
#
# I2C RTC drivers
#
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1374 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS3232 is not set
# CONFIG_RTC_DRV_MAX6900 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_ISL12022 is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_BQ32K is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set
# CONFIG_RTC_DRV_RX8025 is not set
# CONFIG_RTC_DRV_EM3027 is not set
# CONFIG_RTC_DRV_RV3029C2 is not set
#
# SPI RTC drivers
#
# CONFIG_RTC_DRV_M41T93 is not set
# CONFIG_RTC_DRV_M41T94 is not set
# CONFIG_RTC_DRV_DS1305 is not set
# CONFIG_RTC_DRV_DS1390 is not set
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_R9701 is not set
# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_DS3234 is not set
# CONFIG_RTC_DRV_PCF2123 is not set
#
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_MSM6242 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_RP5C01 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
# on-CPU RTC drivers
#
CONFIG_RTC_DRV_S3C=y
CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
#
# DMA Devices
#
# CONFIG_DW_DMAC is not set
# CONFIG_TIMB_DMA is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
#
# Virtio drivers
#
# CONFIG_VIRTIO_BALLOON is not set
# CONFIG_VIRTIO_MMIO is not set
# CONFIG_STAGING is not set
CONFIG_CLKDEV_LOOKUP=y
#
# Hardware Spinlock drivers
#
CONFIG_CLKSRC_MMIO=y
CONFIG_IOMMU_SUPPORT=y
# CONFIG_VIRT_DRIVERS is not set
# CONFIG_PM_DEVFREQ is not set
#
# File systems
#
CONFIG_EXT2_FS=m
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_DEFAULTS_TO_ORDERED=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_XATTR=y
# CONFIG_EXT4_FS_POSIX_ACL is not set
# CONFIG_EXT4_FS_SECURITY is not set
# CONFIG_EXT4_DEBUG is not set
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_JBD2=y
# CONFIG_JBD2_DEBUG is not set
CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_XFS_FS is not set
# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
# CONFIG_FANOTIFY is not set
# CONFIG_QUOTA is not set
# CONFIG_QUOTACTL is not set
CONFIG_AUTOFS4_FS=y
# CONFIG_FUSE_FS is not set
CONFIG_GENERIC_ACL=y
#
# Caches
#
# CONFIG_FSCACHE is not set
#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
# CONFIG_UDF_FS is not set
#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
# CONFIG_NTFS_FS is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_CONFIGFS_FS=m
CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ADFS_FS is not set
# CONFIG_AFFS_FS is not set
# CONFIG_ECRYPT_FS is not set
# CONFIG_HFS_FS is not set
# CONFIG_HFSPLUS_FS is not set
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
# CONFIG_JFFS2_LZO is not set
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
# CONFIG_LOGFS is not set
CONFIG_CRAMFS=y
# CONFIG_SQUASHFS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_MINIX_FS is not set
# CONFIG_OMFS_FS is not set
# CONFIG_HPFS_FS is not set
# CONFIG_QNX4FS_FS is not set
CONFIG_ROMFS_FS=y
# CONFIG_ROMFS_BACKED_BY_BLOCK is not set
# CONFIG_ROMFS_BACKED_BY_MTD is not set
CONFIG_ROMFS_BACKED_BY_BOTH=y
CONFIG_ROMFS_ON_BLOCK=y
CONFIG_ROMFS_ON_MTD=y
# CONFIG_PSTORE is not set
# CONFIG_SYSV_FS is not set
# CONFIG_UFS_FS is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
# CONFIG_NFS_V4_1 is not set
CONFIG_ROOT_NFS=y
# CONFIG_NFS_USE_LEGACY_DNS is not set
CONFIG_NFS_USE_KERNEL_DNS=y
# CONFIG_NFS_USE_NEW_IDMAPPER is not set
# CONFIG_NFSD is not set
CONFIG_LOCKD=y
CONFIG_LOCKD_V4=y
CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
# CONFIG_CEPH_FS is not set
# CONFIG_CIFS is not set
# CONFIG_NCP_FS is not set
# CONFIG_CODA_FS is not set
# CONFIG_AFS_FS is not set
#
# Partition Types
#
CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_OSF_PARTITION is not set
# CONFIG_AMIGA_PARTITION is not set
# CONFIG_ATARI_PARTITION is not set
# CONFIG_MAC_PARTITION is not set
CONFIG_MSDOS_PARTITION=y
CONFIG_BSD_DISKLABEL=y
CONFIG_MINIX_SUBPARTITION=y
CONFIG_SOLARIS_X86_PARTITION=y
CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not set
CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="cp437"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_CODEPAGE_775=m
CONFIG_NLS_CODEPAGE_850=m
CONFIG_NLS_CODEPAGE_852=m
CONFIG_NLS_CODEPAGE_855=m
CONFIG_NLS_CODEPAGE_857=m
CONFIG_NLS_CODEPAGE_860=m
CONFIG_NLS_CODEPAGE_861=m
CONFIG_NLS_CODEPAGE_862=m
CONFIG_NLS_CODEPAGE_863=m
CONFIG_NLS_CODEPAGE_864=m
CONFIG_NLS_CODEPAGE_865=m
CONFIG_NLS_CODEPAGE_866=m
CONFIG_NLS_CODEPAGE_869=m
CONFIG_NLS_CODEPAGE_936=m
CONFIG_NLS_CODEPAGE_950=m
CONFIG_NLS_CODEPAGE_932=m
CONFIG_NLS_CODEPAGE_949=m
CONFIG_NLS_CODEPAGE_874=m
CONFIG_NLS_ISO8859_8=m
CONFIG_NLS_CODEPAGE_1250=m
CONFIG_NLS_CODEPAGE_1251=m
CONFIG_NLS_ASCII=m
CONFIG_NLS_ISO8859_1=m
CONFIG_NLS_ISO8859_2=m
CONFIG_NLS_ISO8859_3=m
CONFIG_NLS_ISO8859_4=m
CONFIG_NLS_ISO8859_5=m
CONFIG_NLS_ISO8859_6=m
CONFIG_NLS_ISO8859_7=m
CONFIG_NLS_ISO8859_9=m
CONFIG_NLS_ISO8859_13=m
CONFIG_NLS_ISO8859_14=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
CONFIG_NLS_UTF8=m
# CONFIG_DLM is not set
#
# Kernel hacking
#
# CONFIG_PRINTK_TIME is not set
CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
# CONFIG_ENABLE_WARN_DEPRECATED is not set
# CONFIG_ENABLE_MUST_CHECK is not set
CONFIG_FRAME_WARN=1024
# CONFIG_MAGIC_SYSRQ is not set
CONFIG_STRIP_ASM_SYMS=y
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_SECTION_MISMATCH is not set
# CONFIG_IPIPE_DEBUG is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
# CONFIG_LOCKUP_DETECTOR is not set
# CONFIG_HARDLOCKUP_DETECTOR is not set
# CONFIG_DETECT_HUNG_TASK is not set
# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_WRITECOUNT is not set
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_TEST_LIST_SORT is not set
# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_DEBUG_CREDENTIALS is not set
CONFIG_FRAME_POINTER=y
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_LKDTM is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_TRACING_SUPPORT=y
CONFIG_FTRACE=y
# CONFIG_FUNCTION_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_PREEMPT_TRACER is not set
# CONFIG_SCHED_TRACER is not set
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
CONFIG_BRANCH_PROFILE_NONE=y
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
# CONFIG_PROFILE_ALL_BRANCHES is not set
# CONFIG_STACK_TRACER is not set
# CONFIG_BLK_DEV_IO_TRACE is not set
# CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
# CONFIG_TEST_KSTRTOX is not set
CONFIG_STRICT_DEVMEM=y
# CONFIG_ARM_UNWIND is not set
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_LL=y
# CONFIG_DEBUG_LL_UART_NONE is not set
# CONFIG_DEBUG_ICEDCC is not set
CONFIG_DEBUG_S3C_UART0=y
# CONFIG_DEBUG_S3C_UART1 is not set
# CONFIG_DEBUG_S3C_UART2 is not set
CONFIG_EARLY_PRINTK=y
#
# Security options
#
CONFIG_KEYS=y
# CONFIG_ENCRYPTED_KEYS is not set
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
CONFIG_CRYPTO=y
#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG=m
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP=m
CONFIG_CRYPTO_PCOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_USER is not set
CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
CONFIG_CRYPTO_GF128MUL=m
CONFIG_CRYPTO_NULL=m
CONFIG_CRYPTO_WORKQUEUE=y
CONFIG_CRYPTO_CRYPTD=m
CONFIG_CRYPTO_AUTHENC=m
CONFIG_CRYPTO_TEST=m
#
# Authenticated Encryption with Associated Data
#
CONFIG_CRYPTO_CCM=m
CONFIG_CRYPTO_GCM=m
CONFIG_CRYPTO_SEQIV=m
#
# Block modes
#
# CONFIG_CRYPTO_CBC is not set
CONFIG_CRYPTO_CTR=m
CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=y
CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_PCBC=m
CONFIG_CRYPTO_XTS=m
#
# Hash modes
#
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_XCBC=m
# CONFIG_CRYPTO_VMAC is not set
#
# Digest
#
CONFIG_CRYPTO_CRC32C=m
CONFIG_CRYPTO_GHASH=m
CONFIG_CRYPTO_MD4=m
# CONFIG_CRYPTO_MD5 is not set
CONFIG_CRYPTO_MICHAEL_MIC=y
CONFIG_CRYPTO_RMD128=m
CONFIG_CRYPTO_RMD160=m
CONFIG_CRYPTO_RMD256=m
CONFIG_CRYPTO_RMD320=m
CONFIG_CRYPTO_SHA1=m
CONFIG_CRYPTO_SHA256=m
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=m
#
# Ciphers
#
CONFIG_CRYPTO_AES=y
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_BLOWFISH_COMMON=m
CONFIG_CRYPTO_CAMELLIA=m
CONFIG_CRYPTO_CAST5=m
CONFIG_CRYPTO_CAST6=m
# CONFIG_CRYPTO_DES is not set
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
CONFIG_CRYPTO_TWOFISH_COMMON=m
#
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
CONFIG_CRYPTO_ZLIB=m
CONFIG_CRYPTO_LZO=m
#
# Random Number Generation
#
CONFIG_CRYPTO_ANSI_CPRNG=m
# CONFIG_CRYPTO_USER_API_HASH is not set
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
CONFIG_CRYPTO_HW=y
# CONFIG_BINARY_PRINTF is not set
#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
CONFIG_CRC7=y
CONFIG_LIBCRC32C=m
# CONFIG_CRC8 is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=m
CONFIG_LZO_DECOMPRESS=y
CONFIG_XZ_DEC=y
CONFIG_XZ_DEC_X86=y
CONFIG_XZ_DEC_POWERPC=y
CONFIG_XZ_DEC_IA64=y
CONFIG_XZ_DEC_ARM=y
CONFIG_XZ_DEC_ARMTHUMB=y
CONFIG_XZ_DEC_SPARC=y
CONFIG_XZ_DEC_BCJ=y
# CONFIG_XZ_DEC_TEST is not set
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_DMA=y
CONFIG_NLATTR=y
CONFIG_GENERIC_ATOMIC64=y
# CONFIG_AVERAGE is not set
# CONFIG_CORDIC is not set
-------------- next part --------------
A non-text attachment was scrubbed...
Name: linux-0002_s3c24xx_Adeos.patch
Type: text/x-patch
Size: 3088 bytes
Desc: not available
URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20121019/9d0fd466/attachment-0002.bin>
^ permalink raw reply [flat|nested] 11+ messages in thread* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-19 10:19 [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) Romain Naour @ 2012-10-19 12:18 ` Gilles Chanteperdrix 2012-10-20 16:12 ` Romain Naour 0 siblings, 1 reply; 11+ messages in thread From: Gilles Chanteperdrix @ 2012-10-19 12:18 UTC (permalink / raw) To: Romain Naour; +Cc: xenomai On 10/19/2012 12:19 PM, Romain Naour wrote: > Hi Gilles, > > First, I followed your advice and I converted the timers to > clocksouce/clockevent framework. >> Other things which could be done for s3c24xx are: >> - convert the timers to clocksource/clockevent: since this platform is >> the only one not to use clocksource/clockevent, we have to keep code >> around for this case in xenomai-forge which could be removed. Having two >> different timers for clocksource and clockevent would allow to avoid the >> tsc emulation based on the decrementer, which I am not sure is really >> reliable since the conversion to CONFIG_IPIPE_ARM_KUSER_TSC. > I had to reduce timers frequency to 4,21MHz in order to produce an > timer's overflow every 15,5ms. For such overflow period, I would recommend running __ipipe_update_tsc in the acktimer routine. > At 8,45Mhz it does not work. > Thanks to this, I am able to activate hrtimer on Linux :) > > Secondly, I adapted the code for Adeos (Xenomai 2.6.1). > But I'm not sure about the tsc emulation... > Should I keep using the IPIPE_TSC_TYPE_DECREMENTER ? > Do you think we need something like > IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN_16 ? The type should correspond to the type of the hardware timer you are using, I do not know if you are using the decrementer as clocksource, or a separate freerunning countdown timer, so, I can not answer. You should run tsc -w to see if the tsc is wrapping correctly. > > In order to adjust scheduling latency, I set /proc/xenomai/latency to 0 > But I still have negative latency > > (test-latency.txt) > # echo 0 >/proc/xenomai/latency > # latency > == Sampling period: 1000 us > == Test mode: periodic user-mode task > == All results in microseconds > warming up... > RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99) > RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat > best|--lat worst > RTD| -0.238| 16.592| 57.599| 0| 0| -0.238| 57.599 > RTD| 5.925| 16.829| 83.911| 0| 0| -0.238| 83.911 > RTD| 5.688| 16.829| 78.696| 0| 0| -0.238| 83.911 > RTD| 5.688| 16.829| 80.355| 0| 0| -0.238| 83.911 > RTD| 5.925| 17.066| 75.140| 0| 0| -0.238| 83.911 > RTD| -0.712| 18.251| 84.622| 0| 0| -0.712| 84.622 > RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 84.622 > RTD| 5.688| 16.829| 73.481| 0| 0| -0.712| 84.622 > ... > > Can you tell me If this seems good. You can look at /proc/xenomai/timer to see if the timer calibration does not give a too large value. As a general advice, the "set_next_event" callback should make as few register accesses as possible, sometimes register accesses may be slow. > > Finally, I add a last patch because I had a problem with the debug port. > The Tx IRQ was not unmasked by root domain in some circumstances. > Therefore, the debug console hangs when you type "dmesg", "ls"... > kernel 2.6.38.8 is not affected by this bug, but i found It with kernel > 3.0.36. That is a nice work, however working with 3.0 was maybe not the best choice. Please: - upgrade to the latest linux version (3.7) and post your patches (converting to clockevent/clocksource) on the linux arm kernel mailing list, you will probably go over several iterations before the patches are accepted; - when they are accepted, backport them to the latest version of the I-pipe kernel (it is currently 3.4, but could be 3.5 soon). Note that moving the clockevent/clocksource code to 3.7 is probably not a lot of work, and getting this work integrated in mainline means that you can benefit from other people using and testing the code you wrote. We currently have an up to date documentation on how to port the I-pipe patch to a new arm board for such recent versions: http://xenomai.org/index.php/I-pipe-core:ArmPorting -- Gilles. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-19 12:18 ` Gilles Chanteperdrix @ 2012-10-20 16:12 ` Romain Naour 2012-10-20 17:26 ` Gilles Chanteperdrix 0 siblings, 1 reply; 11+ messages in thread From: Romain Naour @ 2012-10-20 16:12 UTC (permalink / raw) To: Gilles Chanteperdrix; +Cc: xenomai Le 19/10/2012 14:18, Gilles Chanteperdrix a écrit : > On 10/19/2012 12:19 PM, Romain Naour wrote: >> Hi Gilles, >> >> First, I followed your advice and I converted the timers to >> clocksouce/clockevent framework. >>> Other things which could be done for s3c24xx are: >>> - convert the timers to clocksource/clockevent: since this platform is >>> the only one not to use clocksource/clockevent, we have to keep code >>> around for this case in xenomai-forge which could be removed. Having two >>> different timers for clocksource and clockevent would allow to avoid the >>> tsc emulation based on the decrementer, which I am not sure is really >>> reliable since the conversion to CONFIG_IPIPE_ARM_KUSER_TSC. >> I had to reduce timers frequency to 4,21MHz in order to produce an >> timer's overflow every 15,5ms. As timers are previously used to produce an IRQ at 200Hz, some board use an external 12MHz signal to clock the timers. So it is not possible to reduce the overflow period... (use_tclk1_12() == 1). I need to check if I can use internal clock instead. > For such overflow period, I would recommend running __ipipe_update_tsc > in the acktimer routine. What is the recommended frequency for the TSC timer? I can reduce timers frequency to 1MHz in order to have a longer overflow period. >> At 8,45Mhz it does not work. >> Thanks to this, I am able to activate hrtimer on Linux :) >> >> Secondly, I adapted the code for Adeos (Xenomai 2.6.1). >> But I'm not sure about the tsc emulation... >> Should I keep using the IPIPE_TSC_TYPE_DECREMENTER ? >> Do you think we need something like >> IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN_16 ? > The type should correspond to the type of the hardware timer you are > using, I do not know if you are using the decrementer as clocksource, or > a separate freerunning countdown timer, so, I can not answer. There are five 16bits down counter (decrementer) timers in the s3c2440. I'm using the timer 3 as clocksource with auto-reload mode (reload value is 0xFFFF). (Which is not exactly an free-running down counter...) Timer 4 is the clockevent. > You should run tsc -w to see if the tsc is wrapping correctly. tsc -w with latency test in parallel (test-tsc.txt): min: 0, max: 14, avg: 0.923722 -> 0.218956 us it's good. >> In order to adjust scheduling latency, I set /proc/xenomai/latency to 0 >> But I still have negative latency >> >> (test-latency.txt) >> # echo 0 >/proc/xenomai/latency >> # latency >> == Sampling period: 1000 us >> == Test mode: periodic user-mode task >> == All results in microseconds >> warming up... >> RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99) >> RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat >> best|--lat worst >> RTD| -0.238| 16.592| 57.599| 0| 0| -0.238| 57.599 >> RTD| 5.925| 16.829| 83.911| 0| 0| -0.238| 83.911 >> RTD| 5.688| 16.829| 78.696| 0| 0| -0.238| 83.911 >> RTD| 5.688| 16.829| 80.355| 0| 0| -0.238| 83.911 >> RTD| 5.925| 17.066| 75.140| 0| 0| -0.238| 83.911 >> RTD| -0.712| 18.251| 84.622| 0| 0| -0.712| 84.622 >> RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 84.622 >> RTD| 5.688| 16.829| 73.481| 0| 0| -0.712| 84.622 >> ... >> >> Can you tell me If this seems good. > You can look at /proc/xenomai/timer to see if the timer calibration does > not give a too large value. # cat /proc/xenomai/timer status=on+watchdog:setup=3555:clock=126115699801:timerdev=s3c24xx_event_timer:clockdev=ipipe_tsc Setup = nklatency = 3555 (ns) > As a general advice, the "set_next_event" > callback should make as few register accesses as possible, sometimes > register accesses may be slow. I understand, but I have to do a "manual update" to reload the timer with a new value. Which requires 1 read and 3 write. >> Finally, I add a last patch because I had a problem with the debug port. >> The Tx IRQ was not unmasked by root domain in some circumstances. >> Therefore, the debug console hangs when you type "dmesg", "ls"... >> kernel 2.6.38.8 is not affected by this bug, but i found It with kernel >> 3.0.36. > That is a nice work, however working with 3.0 was maybe not the best > choice. Please: > - upgrade to the latest linux version (3.7) and post your patches > (converting to clockevent/clocksource) on the linux arm kernel mailing > list, you will probably go over several iterations before the patches > are accepted; > - when they are accepted, backport them to the latest version of the > I-pipe kernel (it is currently 3.4, but could be 3.5 soon). > > Note that moving the clockevent/clocksource code to 3.7 is probably not > a lot of work, and getting this work integrated in mainline means that > you can benefit from other people using and testing the code you wrote. > > We currently have an up to date documentation on how to port the I-pipe > patch to a new arm board for such recent versions: > http://xenomai.org/index.php/I-pipe-core:ArmPorting > Thank you very much, I appreciate your comment. I'll try to do that, I'm preparing 3.7-rc1 kernel for my mini2440. Until now, I used the latest supported kernel 3.2.21 with Xenomai 2.6.1. Without rework timer system with clocksource and clockevent, I need to set "s3c2410_itimer.min_delay_ticks" value (s3c24xx_fix_itimer.patch) Otherwise the timer hangs. And also, the last patch of my previous mail. Regards, Romain -------------- next part -------------- # ./tsc -w ARM: counter wrap time: 1 seconds Checking tsc for 1 minute(s) min: 0, max: 12, avg: 0.924279 min: 0, max: 13, avg: 0.923064 min: 0, max: 8, avg: 0.923259 min: 0, max: 8, avg: 0.924853 min: 0, max: 10, avg: 0.924099 min: 0, max: 10, avg: 0.923186 min: 0, max: 13, avg: 0.923514 min: 0, max: 11, avg: 0.924487 min: 0, max: 8, avg: 0.923202 min: 0, max: 13, avg: 0.923552 min: 0, max: 7, avg: 0.922993 min: 0, max: 11, avg: 0.923254 min: 0, max: 12, avg: 0.9238 min: 0, max: 11, avg: 0.92347 min: 0, max: 7, avg: 0.923207 min: 0, max: 12, avg: 0.923048 min: 0, max: 8, avg: 0.923853 min: 0, max: 12, avg: 0.923297 min: 0, max: 12, avg: 0.924282 min: 0, max: 7, avg: 0.923173 min: 0, max: 12, avg: 0.924477 min: 0, max: 10, avg: 0.925115 min: 0, max: 10, avg: 0.923965 min: 0, max: 12, avg: 0.922714 min: 0, max: 13, avg: 0.924288 min: 0, max: 8, avg: 0.924375 min: 0, max: 8, avg: 0.924003 min: 0, max: 11, avg: 0.923907 min: 0, max: 11, avg: 0.923686 min: 0, max: 12, avg: 0.923409 min: 0, max: 8, avg: 0.923861 min: 0, max: 8, avg: 0.923181 min: 0, max: 11, avg: 0.923351 min: 0, max: 7, avg: 0.923782 min: 0, max: 12, avg: 0.923809 min: 0, max: 13, avg: 0.923599 min: 0, max: 8, avg: 0.922992 min: 0, max: 8, avg: 0.924291 min: 0, max: 14, avg: 0.923375 min: 0, max: 12, avg: 0.923681 min: 0, max: 12, avg: 0.923767 min: 0, max: 10, avg: 0.922629 min: 0, max: 8, avg: 0.922909 min: 0, max: 8, avg: 0.923569 min: 0, max: 8, avg: 0.923693 min: 0, max: 12, avg: 0.923474 min: 0, max: 11, avg: 0.924789 min: 0, max: 7, avg: 0.923447 min: 0, max: 8, avg: 0.924191 min: 0, max: 10, avg: 0.924278 min: 0, max: 10, avg: 0.924057 min: 0, max: 12, avg: 0.923687 min: 0, max: 10, avg: 0.923998 min: 0, max: 7, avg: 0.92359 min: 0, max: 8, avg: 0.923864 min: 0, max: 7, avg: 0.92408 min: 0, max: 12, avg: 0.923517 min: 0, max: 13, avg: 0.924131 min: 0, max: 12, avg: 0.923814 min: 0, max: 13, avg: 0.924085 min: 0, max: 14, avg: 0.923722 -> 0.218956 us -------------- next part -------------- A non-text attachment was scrubbed... Name: linux-0004_s3c24xx_fix_itimer.patch Type: text/x-patch Size: 493 bytes Desc: not available URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20121020/240341d4/attachment.bin> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-20 16:12 ` Romain Naour @ 2012-10-20 17:26 ` Gilles Chanteperdrix 2012-10-21 1:35 ` Romain Naour 0 siblings, 1 reply; 11+ messages in thread From: Gilles Chanteperdrix @ 2012-10-20 17:26 UTC (permalink / raw) To: Romain Naour; +Cc: xenomai On 10/20/2012 06:12 PM, Romain Naour wrote: > Le 19/10/2012 14:18, Gilles Chanteperdrix a écrit : >> On 10/19/2012 12:19 PM, Romain Naour wrote: >>> Hi Gilles, >>> >>> First, I followed your advice and I converted the timers to >>> clocksouce/clockevent framework. >>>> Other things which could be done for s3c24xx are: >>>> - convert the timers to clocksource/clockevent: since this platform is >>>> the only one not to use clocksource/clockevent, we have to keep code >>>> around for this case in xenomai-forge which could be removed. Having two >>>> different timers for clocksource and clockevent would allow to avoid the >>>> tsc emulation based on the decrementer, which I am not sure is really >>>> reliable since the conversion to CONFIG_IPIPE_ARM_KUSER_TSC. >>> I had to reduce timers frequency to 4,21MHz in order to produce an >>> timer's overflow every 15,5ms. > As timers are previously used to produce an IRQ at 200Hz, some board use > an external 12MHz signal to clock the timers. > So it is not possible to reduce the overflow period... (use_tclk1_12() > == 1). > I need to check if I can use internal clock instead. Well, you can get the clock to tick at a higher rate, and ensure that it is always reprogrammed (for instance in order to get __ipipe_tsc_update called frequently enough) by reprogramming the timer systematically when it is not "stolen", in the "ack" handler. >> For such overflow period, I would recommend running __ipipe_update_tsc >> in the acktimer routine. > What is the recommended frequency for the TSC timer? > I can reduce timers frequency to 1MHz in order to have a longer overflow > period. __ipipe_update_tsc has nothing to do with the TSC frequency. It should simply be called often enough (that is once before the timer overflows) in order to avoid the tsc going back in time when the hardware timer overflows. As for the TSC frequency itself, 1MHz is probably enough, it gives you a 1us resolution, which I would guess is enough for pratical needs. >>> At 8,45Mhz it does not work. >>> Thanks to this, I am able to activate hrtimer on Linux :) >>> >>> Secondly, I adapted the code for Adeos (Xenomai 2.6.1). >>> But I'm not sure about the tsc emulation... >>> Should I keep using the IPIPE_TSC_TYPE_DECREMENTER ? >>> Do you think we need something like >>> IPIPE_TSC_TYPE_FREERUNNING_COUNTDOWN_16 ? >> The type should correspond to the type of the hardware timer you are >> using, I do not know if you are using the decrementer as clocksource, or >> a separate freerunning countdown timer, so, I can not answer. > There are five 16bits down counter (decrementer) timers in the s3c2440. > I'm using the timer 3 as clocksource with auto-reload mode (reload value > is 0xFFFF). > (Which is not exactly an free-running down counter...) Well, if when it reaches 0, it counts down to 0xFFFF, it looks very much like a free-running down counter to me. > Timer 4 is the clockevent. >> You should run tsc -w to see if the tsc is wrapping correctly. > tsc -w with latency test in parallel (test-tsc.txt): > min: 0, max: 14, avg: 0.923722 -> 0.218956 us > it's good. The point is not really to check the tsc latency, but to check that the wrapping takes place correctly, and that there is no hardware bug causing the timer to go back. For this, the "tsc" test has to be run without anything else running. 210ns looks good indeed. >>> In order to adjust scheduling latency, I set /proc/xenomai/latency to 0 >>> But I still have negative latency >>> >>> (test-latency.txt) >>> # echo 0 >/proc/xenomai/latency >>> # latency >>> == Sampling period: 1000 us >>> == Test mode: periodic user-mode task >>> == All results in microseconds >>> warming up... >>> RTT| 00:00:01 (periodic user-mode task, 1000 us period, priority 99) >>> RTH|----lat min|----lat avg|----lat max|-overrun|---msw|---lat >>> best|--lat worst >>> RTD| -0.238| 16.592| 57.599| 0| 0| -0.238| 57.599 >>> RTD| 5.925| 16.829| 83.911| 0| 0| -0.238| 83.911 >>> RTD| 5.688| 16.829| 78.696| 0| 0| -0.238| 83.911 >>> RTD| 5.688| 16.829| 80.355| 0| 0| -0.238| 83.911 >>> RTD| 5.925| 17.066| 75.140| 0| 0| -0.238| 83.911 >>> RTD| -0.712| 18.251| 84.622| 0| 0| -0.712| 84.622 >>> RTD| 5.925| 16.829| 76.088| 0| 0| -0.712| 84.622 >>> RTD| 5.688| 16.829| 73.481| 0| 0| -0.712| 84.622 >>> ... >>> >>> Can you tell me If this seems good. >> You can look at /proc/xenomai/timer to see if the timer calibration does >> not give a too large value. > # cat /proc/xenomai/timer > status=on+watchdog:setup=3555:clock=126115699801:timerdev=s3c24xx_event_timer:clockdev=ipipe_tsc > > Setup = nklatency = 3555 (ns) That is a bit high. >> As a general advice, the "set_next_event" >> callback should make as few register accesses as possible, sometimes >> register accesses may be slow. > I understand, but I have to do a "manual update" to reload the timer > with a new value. > Which requires 1 read and 3 write. The current code seems to only require 3 writes: static inline void set_dec(unsigned long reload) { __raw_writel(reload, S3C2410_TCNTB(4)); /* Manual update */ __raw_writel(free_running_tcon | S3C2410_TCON_T4MANUALUPD, S3C2410_TCON); /* Start timer */ __raw_writel(free_running_tcon | S3C2410_TCON_T4START, S3C2410_TCON); } >>> Finally, I add a last patch because I had a problem with the debug port. >>> The Tx IRQ was not unmasked by root domain in some circumstances. >>> Therefore, the debug console hangs when you type "dmesg", "ls"... >>> kernel 2.6.38.8 is not affected by this bug, but i found It with kernel >>> 3.0.36. >> That is a nice work, however working with 3.0 was maybe not the best >> choice. Please: >> - upgrade to the latest linux version (3.7) and post your patches >> (converting to clockevent/clocksource) on the linux arm kernel mailing >> list, you will probably go over several iterations before the patches >> are accepted; >> - when they are accepted, backport them to the latest version of the >> I-pipe kernel (it is currently 3.4, but could be 3.5 soon). >> >> Note that moving the clockevent/clocksource code to 3.7 is probably not >> a lot of work, and getting this work integrated in mainline means that >> you can benefit from other people using and testing the code you wrote. >> >> We currently have an up to date documentation on how to port the I-pipe >> patch to a new arm board for such recent versions: >> http://xenomai.org/index.php/I-pipe-core:ArmPorting >> > Thank you very much, I appreciate your comment. > I'll try to do that, I'm preparing 3.7-rc1 kernel for my mini2440. > > Until now, I used the latest supported kernel 3.2.21 with Xenomai 2.6.1. > Without rework timer system with clocksource and clockevent, > I need to set "s3c2410_itimer.min_delay_ticks" value > (s3c24xx_fix_itimer.patch) > Otherwise the timer hangs. > And also, the last patch of my previous mail. You mean the patch for the UART ? I can not take that patch. You have to understand what goes wrong in the I-pipe core, or irq chip callbacks implementation for this processor, and fix it there, not in the irq handler for the serial interrupt. That is clearly the wrong place. > > Regards, > Romain > -- Gilles. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-20 17:26 ` Gilles Chanteperdrix @ 2012-10-21 1:35 ` Romain Naour 2012-10-21 18:29 ` Gilles Chanteperdrix 2012-10-21 18:43 ` Gilles Chanteperdrix 0 siblings, 2 replies; 11+ messages in thread From: Romain Naour @ 2012-10-21 1:35 UTC (permalink / raw) To: Gilles Chanteperdrix; +Cc: xenomai >> Until now, I used the latest supported kernel 3.2.21 with Xenomai 2.6.1. >> Without rework timer system with clocksource and clockevent, >> I need to set "s3c2410_itimer.min_delay_ticks" value >> (s3c24xx_fix_itimer.patch) >> Otherwise the timer hangs. >> And also, the last patch of my previous mail. > > You mean the patch for the UART ? I can not take that patch. You have to > understand what goes wrong in the I-pipe core, or irq chip callbacks > implementation for this processor, and fix it there, not in the irq > handler for the serial interrupt. I think there is a problem when Linux unmask an IRQ line with irq_enable() and when there is an IRQ pending behind. I made some comments on the ipipe-tracer log (UART-samsung-bug-ipipe-tracer.txt) What do you think of this ? Are we need to disable IRQs before call irq_enable() ? > That is clearly the wrong place. I realize now, thanks Regards Romain -------------- next part -------------- I-pipe worst-case tracing service on 3.2.21/ipipe release #1 ------------------------------------------------------------- CPU: 0, Begin: 478009927 cycles, Trace Points: 26 (-3500/+105), Length: 1564 us Calibrated minimum trace-point overhead: 0.777 us +----- Hard IRQs ('|': locked) |+-- Xenomai ||+- Linux ('*': domain stalled, '+': current, '#': current+stalled) ||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) ||| | +- NMI noise ('N') ||| | | Type User Val. Time Delay Function (Parent) +func -250 3.444 __ipipe_syscall_root+0x10 (vector_swi+0x44) +func -247 1.333 sys_write+0x14 (ret_fast_syscall+0x0) +func -246 3.555 fget_light+0x10 (sys_write+0x28) +func -242 2.777 vfs_write+0x14 (sys_write+0x54) +func -239 4.222 rw_verify_area+0x14 (vfs_write+0x98) +func -235 2.333 tty_write+0x14 (vfs_write+0xc8) +func -233 3.888 tty_paranoia_check+0x10 (tty_write+0x40) +func -229 1.222 tty_ldisc_ref_wait+0x14 (tty_write+0x8c) +func -228 3.222 tty_ldisc_try+0x10 (tty_ldisc_ref_wait+0x20) #func -224 3.000 ipipe_unstall_root+0x10 (tty_ldisc_try+0x98) +func -221 1.666 tty_write_lock+0x10 (tty_write+0xb8) +func -220 7.222 mutex_trylock+0x10 (tty_write_lock+0x24) +func -212 3.666 n_tty_write+0x14 (tty_write+0x198) +func -209 2.111 process_echoes+0x14 (n_tty_write+0x90) +func -207 2.111 add_wait_queue+0x10 (n_tty_write+0xa4) #func -205 2.777 ipipe_unstall_root+0x10 (add_wait_queue+0x7c) +func -202 2.666 tty_hung_up_p+0x10 (n_tty_write+0xdc) +func -199 1.666 mutex_lock+0x10 (n_tty_write+0x128) +func -197 1.333 tty_write_room+0x10 (n_tty_write+0x130) +func -196 2.444 uart_write_room+0x10 (tty_write_room+0x2c) #func -194 13.111 ipipe_unstall_root+0x10 (uart_write_room+0x74) +func -181 6.000 uart_write+0x10 (n_tty_write+0x248) #func -175 2.111 ipipe_unstall_root+0x10 (uart_write+0x108) +func -172 2.222 uart_start+0x10 (uart_write+0x134) #func -170 2.333 __uart_start+0x10 (uart_start+0x50) #func -168 2.666 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) << driver enable Tx irq of UART0 #func -165 1.555 enable_irq+0x14 (s3c24xx_serial_start_tx+0xc4) #func -164 4.444 __irq_get_desc_lock+0x10 (enable_irq+0x2c) #func -159 2.222 __enable_irq+0x10 (enable_irq+0x64) #func -157 2.111 irq_enable+0x10 (__enable_irq+0xac)) << irq_state_clr_disabled(desc) #func -155 4.777 s3c_irq_uart0_unmask+0x10 (irq_enable+0x48) << IRQ is unmasked << I am not sure if we have the time to call irq_state_clr_masked(desc); | #func -150 2.666 __ipipe_grab_irq+0x10 (__irq_svc+0x24) << We get an IRQ (71: TX_UART0) | #func -147 3.666 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) | #func -144 1.777 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | #func -142 1.333 s3c_irq_demux_uart0+0x10 (__ipipe_ack_irq+0x1c) | #func -141 1.444 s3c_irq_demux_uart+0x10 (s3c_irq_demux_uart0+0x1c) | #func -139 1.888 __ipipe_dispatch_irq+0x10 (s3c_irq_demux_uart+0x54) | #func -137 1.777 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | #func -136 1.333 __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x1c) | #func -134 4.222 s3c_irq_uart0_ack+0x10 (__ipipe_ack_level_irq+0x34) << mask, ack IRQ, irq_state_set_masked(desc); | #func -130 5.111 __ipipe_set_irq_pending+0x10 (__ipipe_dispatch_irq+0x16c) | #func -125 2.888 __ipipe_do_sync_pipeline+0x10 (__ipipe_dispatch_irq+0x1b8) | #func -122 1.222 __ipipe_exit_irq+0x10 (__ipipe_grab_irq+0x5c) | #func -121 3.000 __ipipe_check_root_interruptible+0x10 (__irq_svc+0x94) << irq_state_clr_masked(desc); ?? #func -118 1.666 check_irq_resend+0x10 (__enable_irq+0xb8) #func -116 2.111 __irq_put_desc_unlock+0x10 (enable_irq+0x74) #func -114 1.777 ipipe_unstall_root+0x10 (uart_start+0x5c) | +func -112 4.111 __ipipe_do_sync_stage+0x10 (ipipe_unstall_root+0x3c) #func -108 2.111 __ipipe_do_IRQ+0x10 (__ipipe_do_sync_stage+0x1bc) #func -106 2.333 handle_IRQ+0x10 (__ipipe_do_IRQ+0x1c) #func -104 1.333 irq_enter+0x10 (handle_IRQ+0x28) #func -102 4.000 idle_cpu+0x10 (irq_enter+0x1c) #func -98 2.000 generic_handle_irq+0x10 (handle_IRQ+0x6c) #func -96 3.777 handle_level_irq+0x10 (generic_handle_irq+0x34) #func -93 2.000 handle_irq_event+0x10 (handle_level_irq+0x98) #func -91 3.111 handle_irq_event_percpu+0x14 (handle_irq_event+0x64) #func -87 23.555 s3c24xx_serial_tx_chars+0x10 (handle_irq_event_percpu+0xc0) #func -64 1.555 uart_write_wakeup+0x10 (s3c24xx_serial_tx_chars+0xe0) #func -62 2.000 tty_wakeup+0x10 (uart_write_wakeup+0x2c) #func -60 2.333 __wake_up+0x14 (tty_wakeup+0x64) #func -58 2.333 __wake_up_common+0x10 (__wake_up+0x5c) #func -56 1.666 default_wake_function+0x10 (__wake_up_common+0x58) #func -54 3.111 try_to_wake_up+0x10 (default_wake_function+0x1c) #func -51 3.444 ttwu_do_wakeup.constprop.138+0x10 (try_to_wake_up+0xa8) #func -47 3.444 check_preempt_curr+0x10 (ttwu_do_wakeup.constprop.138+0xb8) #func -44 2.777 check_preempt_wakeup+0x10 (check_preempt_curr+0x38) #func -41 6.333 __task_rq_unlock.isra.122+0x10 (try_to_wake_up+0xb0) << driver it doesn't call s3c24xx_serial_stop_tx here because the transmission is not complete. #func -35 4.000 note_interrupt+0x10 (handle_irq_event_percpu+0x290) << IRQ is not unmasked by cond_unmask_irq() in handle_level_irq << there is something wrong here... condition for cond_unmask_irq() are not meet. if (!irqd_irq_disabled(&desc->irq_data) && irqd_irq_masked(&desc->irq_data) && !desc->threads_oneshot) << we must have an unmask operation here unmask_irq(desc); #func -31 3.444 irq_exit+0x10 (handle_IRQ+0x70) +func -27 1.666 mutex_unlock+0x10 (n_tty_write+0x258) +func -26 0.888 process_output+0x10 (n_tty_write+0x288) +func -25 1.111 mutex_lock+0x10 (process_output+0x28) +func -24 0.888 tty_write_room+0x10 (process_output+0x30) +func -23 0.888 uart_write_room+0x10 (tty_write_room+0x2c) #func -22 1.666 ipipe_unstall_root+0x10 (uart_write_room+0x74) +func -20 2.555 do_output_char+0x10 (process_output+0x40) +func -18 1.444 uart_write+0x10 (do_output_char+0x9c) #func -16 1.111 ipipe_unstall_root+0x10 (uart_write+0x108) +func -15 0.777 uart_start+0x10 (uart_write+0x134) #func -14 1.111 __uart_start+0x10 (uart_start+0x50) #func -13 3.111 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) << driver wait for another IRQ #begin 0x52120007 -10 1.888 s3c24xx_serial_start_tx+0xd8 (__uart_start+0x54) << (!tx_enabled(port)) == 1 #end 0x52120007 -8 2.222 s3c24xx_serial_start_tx+0xe0 (__uart_start+0x54) #func -6 2.222 ipipe_unstall_root+0x10 (uart_start+0x5c) +func -4 1.555 mutex_unlock+0x10 (process_output+0x4c) +func -2 0.777 uart_flush_chars+0x10 (n_tty_write+0x2bc) +func -2 0.888 uart_start+0x10 (uart_flush_chars+0x18) #func -1 1.111 __uart_start+0x10 (uart_start+0x50) > #func 0! 1494.888 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) << O_O :| #func 1494+ 4.666 __ipipe_grab_irq+0x10 (__irq_svc+0x24) :| #func 1499+ 2.666 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) :| #func 1502+ 1.888 __ipipe_ack_hrtimer_irq+0x10 (__ipipe_dispatch_irq+0xe0) :| #func 1504+ 2.222 __ipipe_ack_level_irq+0x10 (__ipipe_ack_hrtimer_irq+0x2c) :| #func 1506+ 2.111 s3c_irq_mask+0x10 (__ipipe_ack_level_irq+0x40) :| #func 1508+ 2.222 s3c_irq_ack+0x10 (__ipipe_ack_level_irq+0x58) :| #func 1510+ 1.555 s3c2410_timer_ack+0x10 (__ipipe_ack_hrtimer_irq+0x3c) :| #func 1512+ 1.777 __ipipe_end_level_irq+0x10 (__ipipe_ack_hrtimer_irq+0x54) :| #func 1514+ 2.333 s3c_irq_unmask+0x10 (__ipipe_end_level_irq+0x24) :| #func 1516+ 3.333 __ipipe_dispatch_irq_fast+0x14 (__ipipe_dispatch_irq+0x160) :| #*func 1519+ 2.444 xnintr_clock_handler+0x10 (__ipipe_dispatch_irq_fast+0xdc) :| #*func 1522+ 8.888 xntimer_tick_aperiodic+0x14 (xnintr_clock_handler+0x34) :| #*func 1531+ 5.555 xntimer_next_local_shot+0x10 (xntimer_tick_aperiodic+0x258) :| #*event tick@5655 1536+ 3.000 xntimer_next_local_shot+0xe4 (xntimer_tick_aperiodic+0x258) :| #*func 1539+ 3.222 ipipe_timer_set+0x10 (xntimer_next_local_shot+0x104) :| #*func 1542+ 1.888 s3c2410_timer_set+0x10 (ipipe_timer_set+0x34) :| #*func 1544+ 3.222 __ipipe_spin_lock_irqsave+0x10 (s3c2410_timer_set+0x24) :| #*func 1547+ 3.666 __ipipe_tsc_update+0x10 (s3c2410_timer_set+0x48) :| #*func 1551+ 2.666 __ipipe_spin_unlock_irqrestore+0x10 (s3c2410_timer_set+0x78) :| #*func 1554+ 1.555 xnintr_host_tick+0x10 (xnintr_clock_handler+0x98) :| #*func 1555+ 2.444 __ipipe_set_irq_pending+0x10 (xnintr_host_tick+0x30) :| #func 1558+ 1.888 __ipipe_do_sync_pipeline+0x10 (__ipipe_dispatch_irq_fast+0x12c) :| #func 1560+ 1.222 __ipipe_exit_irq+0x10 (__ipipe_grab_irq+0x5c) :| #func 1561+ 2.777 __ipipe_check_root_interruptible+0x10 (__irq_svc+0x94) < #end 0x52120007 1564 1.888 s3c24xx_serial_start_tx+0xe0 (__uart_start+0x54) #func 1566 1.555 ipipe_unstall_root+0x10 (uart_start+0x5c) | +func 1567 1.444 __ipipe_do_sync_stage+0x10 (ipipe_unstall_root+0x3c) #func 1569 1.333 __ipipe_do_IRQ+0x10 (__ipipe_do_sync_stage+0x1bc) #func 1570 1.666 handle_IRQ+0x10 (__ipipe_do_IRQ+0x1c) #func 1572 1.000 irq_enter+0x10 (handle_IRQ+0x28) #func 1573 2.000 idle_cpu+0x10 (irq_enter+0x1c) #func 1575 1.333 generic_handle_irq+0x10 (handle_IRQ+0x6c) #func 1576 2.000 handle_level_irq+0x10 (generic_handle_irq+0x34) #func 1578 1.111 handle_irq_event+0x10 (handle_level_irq+0x98) #func 1579 1.888 handle_irq_event_percpu+0x14 (handle_irq_event+0x64) #func 1581 2.555 s3c2410_timer_interrupt+0x10 (handle_irq_event_percpu+0xc0) #func 1583 1.555 timer_tick+0x10 (s3c2410_timer_interrupt+0x50) #func 1585 2.222 xtime_update+0x10 (timer_tick+0x1c) #func 1587 17.333 do_timer+0x14 (xtime_update+0x40) #func 1605 2.111 update_vsyscall+0x10 (do_timer+0x910) #func 1607 3.333 calc_global_load+0x10 (do_timer+0x918) #func 1610 1.666 update_process_times+0x10 (timer_tick+0x38) #func 1612 2.222 account_process_tick+0x10 (update_process_times+0x34) #func 1614 4.777 account_system_time+0x10 (account_process_tick+0x74) #func 1619 1.555 run_local_timers+0x10 (update_process_times+0x38) #func 1620 2.222 hrtimer_run_queues+0x14 (run_local_timers+0x18) #func 1622 6.000 get_xtime_and_monotonic_and_sleep_offset+0x10 (hrtimer_run_queues+0x50) #func 1628 3.777 raise_softirq+0x10 (run_local_timers+0x20) #func 1632 1.333 rcu_check_callbacks+0x10 (update_process_times+0x44) #func 1634 1.777 idle_cpu+0x10 (rcu_check_callbacks+0x24) #func 1635 2.888 rcu_bh_qs+0x10 (rcu_check_callbacks+0x6c) #func 1638 2.000 raise_softirq+0x10 (rcu_check_callbacks+0xc0) #func 1640 2.111 printk_tick+0x10 (update_process_times+0x48) #func 1642 2.111 scheduler_tick+0x14 (update_process_times+0x4c) #func 1644 6.333 update_rq_clock+0x10 (scheduler_tick+0x40) #func 1651 2.000 task_tick_fair+0x10 (scheduler_tick+0x19c) #func 1653 3.111 update_curr.constprop.133+0x14 (task_tick_fair+0x28) #func 1656 5.111 update_min_vruntime.constprop.131+0x10 (update_curr.constprop.133+0x8c) #func 1661 3.777 run_posix_cpu_timers+0x14 (update_process_times+0x54) #func 1665 2.222 note_interrupt+0x10 (handle_irq_event_percpu+0x290) #func 1667 1.444 unmask_irq+0x10 (handle_level_irq+0xbc) | #func 1668 1.555 s3c_irq_unmask+0x10 (unmask_irq+0x40) #func 1670 1.666 irq_exit+0x10 (handle_IRQ+0x70) #func 1672 2.111 __do_softirq+0x14 (irq_exit+0x50) #func 1674 3.444 ipipe_unstall_root+0x10 (__do_softirq+0x50) +func 1677 1.555 run_timer_softirq+0x14 (__do_softirq+0x110) +func 1679 3.666 hrtimer_run_pending+0x10 (run_timer_softirq+0x24) #func 1682 2.444 ipipe_unstall_root+0x10 (run_timer_softirq+0x3c8) +func 1685 0.888 rcu_bh_qs+0x10 (__do_softirq+0x1d0) #func 1686 2.111 ipipe_unstall_root+0x10 (rcu_bh_qs+0x6c) +func 1688 1.777 rcu_process_callbacks+0x10 (__do_softirq+0x110) +func 1690 1.222 __rcu_process_callbacks+0x10 (rcu_process_callbacks+0x20) +func 1691 0.888 __rcu_process_callbacks+0x10 (rcu_process_callbacks+0x28) +func 1692 2.111 __rcu_process_callbacks+0x10 (rcu_process_callbacks+0x30) #func 1694 1.888 ipipe_unstall_root+0x10 (__rcu_process_callbacks+0x90) +func 1696 1.888 local_bh_disable+0x10 (__rcu_process_callbacks+0x9c) +func 1698 3.222 file_free_rcu+0x10 (__rcu_process_callbacks+0xc0) +func 1701 3.777 kmem_cache_free+0x10 (file_free_rcu+0x50) #func 1705 2.444 ipipe_unstall_root+0x10 (kmem_cache_free+0xdc) +func 1707 2.777 local_bh_enable+0x10 (__rcu_process_callbacks+0xc4) +func 1710 0.888 rcu_bh_qs+0x10 (__do_softirq+0x1d0) #func 1711 2.333 ipipe_unstall_root+0x10 (rcu_bh_qs+0x6c) #func 1713 4.777 __local_bh_enable+0x10 (__do_softirq+0x228) +func 1718 2.222 remove_wait_queue+0x10 (n_tty_write+0x35c) #func 1720 4.777 ipipe_unstall_root+0x10 (remove_wait_queue+0x78) +func 1725 1.555 current_fs_time+0x14 (tty_write+0x200) +func 1726 2.333 current_kernel_time+0x10 (current_fs_time+0x2c) +func 1729 2.666 timespec_trunc+0x14 (current_fs_time+0x3c) +func 1731 1.111 tty_write_unlock+0x10 (tty_write+0x214) +func 1733 1.444 mutex_unlock+0x10 (tty_write_unlock+0x20) +func 1734 1.666 __wake_up+0x14 (tty_write_unlock+0x34) #func 1736 1.444 __wake_up_common+0x10 (__wake_up+0x5c) #func 1737 2.111 ipipe_unstall_root+0x10 (__wake_up+0x68) +func 1739 1.333 tty_ldisc_deref+0x10 (tty_write+0x21c) +func 1741 3.777 put_ldisc+0x10 (tty_ldisc_deref+0x18) #func 1744 1.444 ipipe_unstall_root+0x10 (put_ldisc+0xe0) +func 1746 1.333 __wake_up+0x14 (put_ldisc+0xf4) #func 1747 1.888 __wake_up_common+0x10 (__wake_up+0x5c) #func 1749 3.111 ipipe_unstall_root+0x10 (__wake_up+0x68) +func 1752 2.555 __fsnotify_parent+0x14 (vfs_write+0x114) +func 1755 2.222 fsnotify+0x14 (vfs_write+0x130) +func 1757 4.555 __srcu_read_lock+0x10 (fsnotify+0x78) +func 1761 129.444 __srcu_read_unlock+0x10 (fsnotify+0x1e0) +func 1891 7.000 __ipipe_syscall_root+0x10 (vector_swi+0x44) +func 1898 1.333 sys_write+0x14 (ret_fast_syscall+0x0) +func 1899 3.111 fget_light+0x10 (sys_write+0x28) +func 1902 2.444 vfs_write+0x14 (sys_write+0x54) +func 1905 3.444 rw_verify_area+0x14 (vfs_write+0x98) +func 1908 2.555 tty_write+0x14 (vfs_write+0xc8) +func 1911 3.888 tty_paranoia_check+0x10 (tty_write+0x40) +func 1915 1.111 tty_ldisc_ref_wait+0x14 (tty_write+0x8c) +func 1916 2.777 tty_ldisc_try+0x10 (tty_ldisc_ref_wait+0x20) #func 1919 2.777 ipipe_unstall_root+0x10 (tty_ldisc_try+0x98) +func 1921 1.666 tty_write_lock+0x10 (tty_write+0xb8) +func 1923 6.000 mutex_trylock+0x10 (tty_write_lock+0x24) +func 1929 3.666 n_tty_write+0x14 (tty_write+0x198) +func 1933 2.111 process_echoes+0x14 (n_tty_write+0x90) +func 1935 1.777 add_wait_queue+0x10 (n_tty_write+0xa4) #func 1937 2.666 ipipe_unstall_root+0x10 (add_wait_queue+0x7c) +func 1939 2.333 tty_hung_up_p+0x10 (n_tty_write+0xdc) +func 1942 1.666 mutex_lock+0x10 (n_tty_write+0x128) +func 1943 1.333 tty_write_room+0x10 (n_tty_write+0x130) +func 1945 2.666 uart_write_room+0x10 (tty_write_room+0x2c) #func 1947 10.222 ipipe_unstall_root+0x10 (uart_write_room+0x74) +func 1957 4.666 uart_write+0x10 (n_tty_write+0x248) #func 1962 2.111 ipipe_unstall_root+0x10 (uart_write+0x108) +func 1964 1.888 uart_start+0x10 (uart_write+0x134) #func 1966 2.666 __uart_start+0x10 (uart_start+0x50) #func 1969 3.555 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) << Driver try to send something again and again... #begin 0x52120007 1972 0.000 s3c24xx_serial_start_tx+0xd8 (__uart_start+0x54) << but Tx IRQ is still masked ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-21 1:35 ` Romain Naour @ 2012-10-21 18:29 ` Gilles Chanteperdrix 2012-10-21 18:43 ` Gilles Chanteperdrix 1 sibling, 0 replies; 11+ messages in thread From: Gilles Chanteperdrix @ 2012-10-21 18:29 UTC (permalink / raw) To: Romain Naour; +Cc: xenomai On 10/21/2012 03:35 AM, Romain Naour wrote: >>> Until now, I used the latest supported kernel 3.2.21 with Xenomai 2.6.1. >>> Without rework timer system with clocksource and clockevent, >>> I need to set "s3c2410_itimer.min_delay_ticks" value >>> (s3c24xx_fix_itimer.patch) >>> Otherwise the timer hangs. >>> And also, the last patch of my previous mail. >> >> You mean the patch for the UART ? I can not take that patch. You have to >> understand what goes wrong in the I-pipe core, or irq chip callbacks >> implementation for this processor, and fix it there, not in the irq >> handler for the serial interrupt. > I think there is a problem when Linux unmask an IRQ line with > irq_enable() and when there is an IRQ pending behind. > I made some comments on the ipipe-tracer log > (UART-samsung-bug-ipipe-tracer.txt) > > What do you think of this ? Without looking at the trace, if the irqs need to be off during the execution of an irq chip callback, we usually do this inside the chip callback. When there is a spinlock, simply turn it into an ipipe spinlock and use spin_lock_irqsave_cond, as explained here: http://www.xenomai.org/index.php/I-pipe-core:ArmPorting#call-backs_implementation > Are we need to disable IRQs before call irq_enable() ? Usually not. -- Gilles. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-21 1:35 ` Romain Naour 2012-10-21 18:29 ` Gilles Chanteperdrix @ 2012-10-21 18:43 ` Gilles Chanteperdrix 2012-10-21 23:33 ` Romain Naour 1 sibling, 1 reply; 11+ messages in thread From: Gilles Chanteperdrix @ 2012-10-21 18:43 UTC (permalink / raw) To: Romain Naour; +Cc: xenomai On 10/21/2012 03:35 AM, Romain Naour wrote: >> You mean the patch for the UART ? I can not take that patch. You have to >> understand what goes wrong in the I-pipe core, or irq chip callbacks >> implementation for this processor, and fix it there, not in the irq >> handler for the serial interrupt. > I think there is a problem when Linux unmask an IRQ line with > irq_enable() and when there is an IRQ pending behind. > I made some comments on the ipipe-tracer log > (UART-samsung-bug-ipipe-tracer.txt) Ok: first comment: thanks to this patch: http://git.xenomai.org/?p=ipipe-gch.git;a=commitdiff;h=352ee07368a89133df74948f3dd71ae657c519a0;hp=5e7413789eb3d1ca1613e986cbeb6c979082a217 We know that irq_state_clr_masked is called when unmask_irq is called. Second, to know why cond_unmask_irq does not unmask the irq, you can use ipipe_trace_special to print the value of the various conditions. It would have been better to include the relevant parts of the trace in the mail body, this would have made answering simpler. -- Gilles. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-21 18:43 ` Gilles Chanteperdrix @ 2012-10-21 23:33 ` Romain Naour 2012-10-22 13:18 ` Gilles Chanteperdrix 0 siblings, 1 reply; 11+ messages in thread From: Romain Naour @ 2012-10-21 23:33 UTC (permalink / raw) To: Gilles Chanteperdrix; +Cc: xenomai Le 21/10/2012 20:43, Gilles Chanteperdrix a écrit : > On 10/21/2012 03:35 AM, Romain Naour wrote: > >>> You mean the patch for the UART ? I can not take that patch. You have to >>> understand what goes wrong in the I-pipe core, or irq chip callbacks >>> implementation for this processor, and fix it there, not in the irq >>> handler for the serial interrupt. >> I think there is a problem when Linux unmask an IRQ line with >> irq_enable() and when there is an IRQ pending behind. >> I made some comments on the ipipe-tracer log >> (UART-samsung-bug-ipipe-tracer.txt) > > Ok: first comment: thanks to this patch: > http://git.xenomai.org/?p=ipipe-gch.git;a=commitdiff;h=352ee07368a89133df74948f3dd71ae657c519a0;hp=5e7413789eb3d1ca1613e986cbeb6c979082a217 > > We know that irq_state_clr_masked is called when unmask_irq is called. > > Second, to know why cond_unmask_irq does not unmask the irq, you can use > ipipe_trace_special to print the value of the various conditions. > > It would have been better to include the relevant parts of the trace in > the mail body, this would have made answering simpler. > Ok, sorry for that. here are some new trace with id : (1): IRQ enabled == 1 (2): IRQ masked == 1 (3): Treads oneshot == 1 I-pipe worst-case tracing service on 3.2.21/ipipe release #1 ------------------------------------------------------------- CPU: 0, Begin: 328856864 cycles, Trace Points: 28 (-3500/+92), Length: 1559 us Calibrated minimum trace-point overhead: 0.777 us +----- Hard IRQs ('|': locked) |+-- Xenomai ||+- Linux ('*': domain stalled, '+': current, '#': current+stalled) ||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) ||| | +- NMI noise ('N') ||| | | Type User Val. Time Delay Function (Parent) +func -190 2.111 uart_start+0x10 (uart_write+0x134) #func -188 2.666 __uart_start+0x10 (uart_start+0x50) // driver start a new transmission, so it enable the IRQ. #func -185 4.222 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) #func -181 2.000 enable_irq+0x14 (s3c24xx_serial_start_tx+0xc4) #func -179 4.888 __irq_get_desc_lock+0x10 (enable_irq+0x2c) #func -174 2.555 __enable_irq+0x10 (enable_irq+0x64) #func -171 3.444 irq_enable+0x10 (__enable_irq+0xac) #(0x01) 0x00000001 -168 1.444 irq_enable+0x30 (__enable_irq+0xac) // enabled #(0x02) 0x00000000 -167 3.111 irq_enable+0x48 (__enable_irq+0xac) // not masked #func -163 4.777 s3c_irq_uart0_unmask+0x10 (irq_enable+0x70) | #func -159 2.666 __ipipe_grab_irq+0x10 (__irq_svc+0x24) | #func -156 3.888 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) | #func -152 1.666 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | #func -150 2.333 s3c_irq_demux_uart0+0x10 (__ipipe_ack_irq+0x1c) | #func -148 2.111 s3c_irq_demux_uart+0x10 (s3c_irq_demux_uart0+0x1c) | #func -146 1.444 __ipipe_dispatch_irq+0x10 (s3c_irq_demux_uart+0x54) | #func -145 1.666 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | #func -143 1.666 __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x1c) | #func -141 2.666 s3c_irq_uart0_ack+0x10 (__ipipe_ack_level_irq+0x34) | #(0x01) 0x00000001 -139 1.111 __ipipe_ack_level_irq+0x78 (__ipipe_ack_irq+0x1c) // enabled | #(0x02) 0x00000001 -137 2.555 __ipipe_ack_level_irq+0x90 (__ipipe_ack_irq+0x1c) // Adeos mask the IRQ | #func -135 5.222 __ipipe_set_irq_pending+0x10 (__ipipe_dispatch_irq+0x16c) | #func -130 3.444 __ipipe_do_sync_pipeline+0x10 (__ipipe_dispatch_irq+0x1b8) | #func -126 1.444 __ipipe_exit_irq+0x10 (__ipipe_grab_irq+0x5c) | #func -125 2.777 __ipipe_check_root_interruptible+0x10 (__irq_svc+0x94) #func -122 1.555 check_irq_resend+0x10 (__enable_irq+0xb8) #(0x01) 0x00000001 -120 1.111 __enable_irq+0xd0 (enable_irq+0x64) // enabled #(0x02) 0x00000000 -119 1.111 __enable_irq+0xe8 (enable_irq+0x64) // Linux reset the IRQ status flag IRQD_IRQ_MASKED, but irq still masked at hardware level !! #func -118 2.444 __irq_put_desc_unlock+0x10 (enable_irq+0x74) #func -116 1.666 ipipe_unstall_root+0x10 (uart_start+0x5c) | +func -114 4.000 __ipipe_do_sync_stage+0x10 (ipipe_unstall_root+0x3c) #func -110 2.000 __ipipe_do_IRQ+0x10 (__ipipe_do_sync_stage+0x1bc) #func -108 2.333 handle_IRQ+0x10 (__ipipe_do_IRQ+0x1c) #func -106 1.555 irq_enter+0x10 (handle_IRQ+0x28) #func -104 3.666 idle_cpu+0x10 (irq_enter+0x1c) #func -101 1.777 generic_handle_irq+0x10 (handle_IRQ+0x6c) #func -99 3.777 handle_level_irq+0x10 (generic_handle_irq+0x34) #func -95 2.222 handle_irq_event+0x10 (handle_level_irq+0x98) #func -93 3.222 handle_irq_event_percpu+0x14 (handle_irq_event+0x64) #func -90 23.888 s3c24xx_serial_tx_chars+0x10 (handle_irq_event_percpu+0xc0) #func -66 2.111 uart_write_wakeup+0x10 (s3c24xx_serial_tx_chars+0xe0) #func -64 2.222 tty_wakeup+0x10 (uart_write_wakeup+0x2c) #func -61 2.555 __wake_up+0x14 (tty_wakeup+0x64) #func -59 2.222 __wake_up_common+0x10 (__wake_up+0x5c) #func -57 1.888 default_wake_function+0x10 (__wake_up_common+0x58) #func -55 3.222 try_to_wake_up+0x10 (default_wake_function+0x1c) #func -51 3.111 ttwu_do_wakeup.constprop.138+0x10 (try_to_wake_up+0xa8) #func -48 2.555 check_preempt_curr+0x10 (ttwu_do_wakeup.constprop.138+0xb8) #func -46 3.000 check_preempt_wakeup+0x10 (check_preempt_curr+0x38) #func -43 5.777 __task_rq_unlock.isra.122+0x10 (try_to_wake_up+0xb0) #func -37 3.666 note_interrupt+0x10 (handle_irq_event_percpu+0x290) #(0x01) 0x00000001 -33 1.111 handle_level_irq+0xe0 (generic_handle_irq+0x34) // enabled #(0x02) 0x00000000 -32 1.333 handle_level_irq+0x100 (generic_handle_irq+0x34) // not masked #(0x03) 0x00000001 -31 1.888 handle_level_irq+0x118 (generic_handle_irq+0x34) // not oneshot // so we won't unmask the IRQ. #func -29 3.000 irq_exit+0x10 (handle_IRQ+0x70) +func -26 1.666 mutex_unlock+0x10 (n_tty_write+0x258) +func -24 0.777 process_output+0x10 (n_tty_write+0x288) +func -24 1.222 mutex_lock+0x10 (process_output+0x28) +func -22 1.000 tty_write_room+0x10 (process_output+0x30) +func -21 0.888 uart_write_room+0x10 (tty_write_room+0x2c) #func -20 1.666 ipipe_unstall_root+0x10 (uart_write_room+0x74) +func -19 2.444 do_output_char+0x10 (process_output+0x40) +func -16 1.444 uart_write+0x10 (do_output_char+0x9c) #func -15 1.111 ipipe_unstall_root+0x10 (uart_write+0x108) +func -14 0.888 uart_start+0x10 (uart_write+0x134) #func -13 1.222 __uart_start+0x10 (uart_start+0x50) #func -12 2.444 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) // (!tx_enabled(port)) == 0 #begin 0x52120007 -9 1.888 s3c24xx_serial_start_tx+0xd8 (__uart_start+0x54) #end 0x52120007 -7 1.666 s3c24xx_serial_start_tx+0xe0 (__uart_start+0x54) #func -6 1.777 ipipe_unstall_root+0x10 (uart_start+0x5c) +func -4 1.444 mutex_unlock+0x10 (process_output+0x4c) +func -2 0.888 uart_flush_chars+0x10 (n_tty_write+0x2bc) +func -2 0.888 uart_start+0x10 (uart_flush_chars+0x18) #func -1 1.111 __uart_start+0x10 (uart_start+0x50) > #func 0! 1493.333 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) :| #func 1493+ 4.222 __ipipe_grab_irq+0x10 (__irq_svc+0x24) :| #func 1497+ 2.555 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) > Without looking at the trace, if the irqs need to be off during the > execution of an irq chip callback, we usually do this inside the chip > callback. When there is a spinlock, simply turn it into an ipipe > spinlock and use spin_lock_irqsave_cond, as explained here: > http://www.xenomai.org/index.php/I-pipe-core:ArmPorting#call-backs_implementation Thank you for the explanation, I found a __SPIN_LOCK_UNLOCKED into the samsung driver code. I modified it into a IPIPE_SPIN_LOCK_UNLOCKED. It works, now :) +func -220 1.333 uart_start+0x10 (uart_write+0xec) +func -219 1.666 __ipipe_spin_lock_irqsave+0x10 (uart_start+0x28) << now, we use an IPIPE_SPINLOCK, IRQs are desabled. | #func -217 2.666 __uart_start+0x10 (uart_start+0x34) | #func -215 4.222 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) | #func -210 2.333 enable_irq+0x14 (s3c24xx_serial_start_tx+0x78) | #func -208 4.111 __irq_get_desc_lock+0x10 (enable_irq+0x2c) | #func -204 3.111 __enable_irq+0x10 (enable_irq+0x64) | #func -201 3.333 irq_enable+0x10 (__enable_irq+0xac) | #(0x01) 0x00000001 -197 1.000 irq_enable+0x30 (__enable_irq+0xac) | #(0x02) 0x00000001 -196 3.000 irq_enable+0x48 (__enable_irq+0xac) | #func -193 3.000 s3c_irq_uart0_unmask+0x10 (irq_enable+0x70) | #func -190 1.666 check_irq_resend+0x10 (__enable_irq+0xb8) | #(0x01) 0x00000001 -189 1.000 __enable_irq+0xd0 (enable_irq+0x64) | #(0x02) 0x00000000 -188 1.111 __enable_irq+0xe8 (enable_irq+0x64) << enable_irq end correctly | #func -187 2.333 __irq_put_desc_unlock+0x10 (enable_irq+0x74) | #func -184 3.555 __ipipe_spin_unlock_irqrestore+0x10 (uart_start+0x40) << ipipe_spinlock is unlocked here, IRQ are enabled | +func -181 2.444 __ipipe_grab_irq+0x10 (__irq_svc+0x24) | +func -178 3.555 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) | +func -175 1.333 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | +func -173 1.555 s3c_irq_demux_uart0+0x10 (__ipipe_ack_irq+0x1c) | +func -172 1.666 s3c_irq_demux_uart+0x10 (s3c_irq_demux_uart0+0x1c) | +func -170 1.555 __ipipe_dispatch_irq+0x10 (s3c_irq_demux_uart+0x54) | +func -169 1.111 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | +func -168 1.444 __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x1c) | +func -166 2.111 s3c_irq_uart0_ack+0x10 (__ipipe_ack_level_irq+0x34) | +(0x01) 0x00000001 -164 1.111 __ipipe_ack_level_irq+0x78 (__ipipe_ack_irq+0x1c) | +(0x02) 0x00000001 -163 2.555 __ipipe_ack_level_irq+0x90 (__ipipe_ack_irq+0x1c) | +func -160 4.666 __ipipe_set_irq_pending+0x10 (__ipipe_dispatch_irq+0x16c) | +func -156 2.888 __ipipe_do_sync_pipeline+0x10 (__ipipe_dispatch_irq+0x1b8) | +func -153 3.777 __ipipe_do_sync_stage+0x10 (__ipipe_do_sync_pipeline+0x90) #func -149 1.777 __ipipe_do_IRQ+0x10 (__ipipe_do_sync_stage+0x1bc) #func -147 1.555 handle_IRQ+0x10 (__ipipe_do_IRQ+0x1c) #func -146 1.555 irq_enter+0x10 (handle_IRQ+0x28) #func -144 2.555 idle_cpu+0x10 (irq_enter+0x1c) #func -142 1.888 generic_handle_irq+0x10 (handle_IRQ+0x6c) #func -140 2.888 handle_level_irq+0x10 (generic_handle_irq+0x34) #func -137 2.222 handle_irq_event+0x10 (handle_level_irq+0x98) #func -135 2.555 handle_irq_event_percpu+0x14 (handle_irq_event+0x64) #func -132 23.222 s3c24xx_serial_tx_chars+0x10 (handle_irq_event_percpu+0xc0) #func -109 2.111 uart_write_wakeup+0x10 (s3c24xx_serial_tx_chars+0xe0) #func -107 2.333 tty_wakeup+0x10 (uart_write_wakeup+0x2c) #func -104 2.444 __wake_up+0x14 (tty_wakeup+0x64) #func -102 2.555 __wake_up_common+0x10 (__wake_up+0x5c) #func -99 1.555 default_wake_function+0x10 (__wake_up_common+0x58) #func -98 2.666 try_to_wake_up+0x10 (default_wake_function+0x1c) #func -95 2.333 ttwu_do_wakeup.constprop.138+0x10 (try_to_wake_up+0xa8) #func -93 1.777 check_preempt_curr+0x10 (ttwu_do_wakeup.constprop.138+0xb8) #func -91 2.555 check_preempt_wakeup+0x10 (check_preempt_curr+0x38) #func -88 5.333 __task_rq_unlock.isra.122+0x10 (try_to_wake_up+0xb0) #func -83 3.444 note_interrupt+0x10 (handle_irq_event_percpu+0x290) #func -80 1.333 unmask_irq+0x10 (handle_level_irq+0xc0) | #func -78 1.888 s3c_irq_uart0_unmask+0x10 (unmask_irq+0x40) | #func -76 1.111 __ipipe_grab_irq+0x10 (__irq_svc+0x24) | #func -75 0.888 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) | #func -74 1.111 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | #func -73 1.111 s3c_irq_demux_uart0+0x10 (__ipipe_ack_irq+0x1c) | #func -72 1.111 s3c_irq_demux_uart+0x10 (s3c_irq_demux_uart0+0x1c) | #func -71 1.000 __ipipe_dispatch_irq+0x10 (s3c_irq_demux_uart+0x54) | #func -70 1.111 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0xe0) | #func -69 1.111 __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x1c) | #func -68 1.444 s3c_irq_uart0_ack+0x10 (__ipipe_ack_level_irq+0x34) | #(0x01) 0x00000001 -66 0.888 __ipipe_ack_level_irq+0x78 (__ipipe_ack_irq+0x1c) | #(0x02) 0x00000001 -66 1.222 __ipipe_ack_level_irq+0x90 (__ipipe_ack_irq+0x1c) | #func -64 1.333 __ipipe_set_irq_pending+0x10 (__ipipe_dispatch_irq+0x16c) | #func -63 1.444 __ipipe_do_sync_pipeline+0x10 (__ipipe_dispatch_irq+0x1b8) | #func -62 1.444 __ipipe_exit_irq+0x10 (__ipipe_grab_irq+0x5c) | #func -60 3.666 __ipipe_check_root_interruptible+0x10 (__irq_svc+0x94) #func -56 2.444 irq_exit+0x10 (handle_IRQ+0x70) #func -54 1.444 __ipipe_do_IRQ+0x10 (__ipipe_do_sync_stage+0x1bc) #func -53 0.777 handle_IRQ+0x10 (__ipipe_do_IRQ+0x1c) #func -52 1.111 irq_enter+0x10 (handle_IRQ+0x28) #func -51 1.111 idle_cpu+0x10 (irq_enter+0x1c) #func -50 1.111 generic_handle_irq+0x10 (handle_IRQ+0x6c) #func -48 0.888 handle_level_irq+0x10 (generic_handle_irq+0x34) #func -48 1.111 handle_irq_event+0x10 (handle_level_irq+0x98) #func -46 1.111 handle_irq_event_percpu+0x14 (handle_irq_event+0x64) #func -45 1.555 s3c24xx_serial_tx_chars+0x10 (handle_irq_event_percpu+0xc0) #func -44 0.888 uart_write_wakeup+0x10 (s3c24xx_serial_tx_chars+0xe0) #func -43 1.111 tty_wakeup+0x10 (uart_write_wakeup+0x2c) #func -42 1.555 __wake_up+0x14 (tty_wakeup+0x64) #func -40 1.000 __wake_up_common+0x10 (__wake_up+0x5c) #func -39 0.888 default_wake_function+0x10 (__wake_up_common+0x58) #func -38 1.555 try_to_wake_up+0x10 (default_wake_function+0x1c) #func -37 1.222 note_interrupt+0x10 (handle_irq_event_percpu+0x290) #func -36 1.111 unmask_irq+0x10 (handle_level_irq+0xc0) | #func -34 1.222 s3c_irq_uart0_unmask+0x10 (unmask_irq+0x40) #func -33 1.333 irq_exit+0x10 (handle_IRQ+0x70) | +func -32 1.333 __ipipe_exit_irq+0x10 (__ipipe_grab_irq+0x5c) | +func -31 2.000 __ipipe_check_root_interruptible+0x10 (__irq_svc+0x94) This patch is needed for kernel 3.0, 3.2 and probably for newer version. Regards Romain -------------- next part -------------- A non-text attachment was scrubbed... Name: linux-0003-Samsung-UART-convert-spinlock-to-ipipe_spinlock.patch Type: text/x-patch Size: 2152 bytes Desc: not available URL: <http://www.xenomai.org/pipermail/xenomai/attachments/20121022/9d838d18/attachment.bin> ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-21 23:33 ` Romain Naour @ 2012-10-22 13:18 ` Gilles Chanteperdrix 2012-10-22 14:05 ` Gilles Chanteperdrix 0 siblings, 1 reply; 11+ messages in thread From: Gilles Chanteperdrix @ 2012-10-22 13:18 UTC (permalink / raw) To: Romain Naour; +Cc: xenomai On 10/22/2012 01:33 AM, Romain Naour wrote: > Le 21/10/2012 20:43, Gilles Chanteperdrix a écrit : >> On 10/21/2012 03:35 AM, Romain Naour wrote: >> >>>> You mean the patch for the UART ? I can not take that patch. You have to >>>> understand what goes wrong in the I-pipe core, or irq chip callbacks >>>> implementation for this processor, and fix it there, not in the irq >>>> handler for the serial interrupt. >>> I think there is a problem when Linux unmask an IRQ line with >>> irq_enable() and when there is an IRQ pending behind. >>> I made some comments on the ipipe-tracer log >>> (UART-samsung-bug-ipipe-tracer.txt) >> >> Ok: first comment: thanks to this patch: >> http://git.xenomai.org/?p=ipipe-gch.git;a=commitdiff;h=352ee07368a89133df74948f3dd71ae657c519a0;hp=5e7413789eb3d1ca1613e986cbeb6c979082a217 >> >> We know that irq_state_clr_masked is called when unmask_irq is called. >> >> Second, to know why cond_unmask_irq does not unmask the irq, you can use >> ipipe_trace_special to print the value of the various conditions. >> >> It would have been better to include the relevant parts of the trace in >> the mail body, this would have made answering simpler. >> > Ok, sorry for that. > > here are some new trace with id : > (1): IRQ enabled == 1 > (2): IRQ masked == 1 > (3): Treads oneshot == 1 Ok, so, if it is a oneshot irq, it means that it is a threaded irq, and should be unmasked by the irq thread, not by handle_level_irq. You should find the reason why the irq thread does not unmask it. As explained on the page I directed you too, converting a spinlock to an ipipe_spinlock is not something that should be done lightly. Otherwise, you might well end-up with large masking sections, so, I would try and find what section needs to run with irqs off, and only disable irqs for that section. A good candidate would be for instance, in s3c24xx_serial_start_tx, to shuts off irqs around enable_irq and tx_enabled(port) = 1. Or, alternatively, put tx_enabled(port) = 1 before the call to enable_irq, and put a compiler barrier so that the instructions to not get reordered. Another candidate would be irq_enable in kernel/irq/chip.c, shut off the irqs around the whole section, or move irq_state_clk_masked before the call to irq_unmask with a compiler barrier. Yet another candidate would be changing cond_unmask_irq in kernel/irq/chip.c. -- Gilles. ^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-22 13:18 ` Gilles Chanteperdrix @ 2012-10-22 14:05 ` Gilles Chanteperdrix 2012-10-22 16:26 ` Romain Naour 0 siblings, 1 reply; 11+ messages in thread From: Gilles Chanteperdrix @ 2012-10-22 14:05 UTC (permalink / raw) To: Romain Naour; +Cc: xenomai On 10/22/2012 03:18 PM, Gilles Chanteperdrix wrote: > Another candidate would be irq_enable in kernel/irq/chip.c, shut off the > irqs around the whole section, or move irq_state_clk_masked before the > call to irq_unmask with a compiler barrier. Actually, the following patch fixes another bug I had, so, could you check if it fixes yours? (and thanks for the explanations, they were very helpful). diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c index f5d8d5e..cef1e78 100644 --- a/kernel/irq/chip.c +++ b/kernel/irq/chip.c @@ -167,8 +167,10 @@ int irq_startup(struct irq_desc *desc, bool resend) desc->depth = 0; if (desc->irq_data.chip->irq_startup) { + unsigned long flags = hard_cond_local_irq_save(); ret = desc->irq_data.chip->irq_startup(&desc->irq_data); irq_state_clr_masked(desc); + hard_cond_local_irq_restore(flags); } else { irq_enable(desc); } @@ -192,12 +194,14 @@ void irq_shutdown(struct irq_desc *desc) void irq_enable(struct irq_desc *desc) { + unsigned long flags = hard_cond_local_irq_save(); irq_state_clr_disabled(desc); if (desc->irq_data.chip->irq_enable) desc->irq_data.chip->irq_enable(&desc->irq_data); else desc->irq_data.chip->irq_unmask(&desc->irq_data); irq_state_clr_masked(desc); + hard_cond_local_irq_restore(flags); } void irq_disable(struct irq_desc *desc) @@ -211,11 +215,13 @@ void irq_disable(struct irq_desc *desc) void irq_percpu_enable(struct irq_desc *desc, unsigned int cpu) { + unsigned long flags = hard_cond_local_irq_save(); if (desc->irq_data.chip->irq_enable) desc->irq_data.chip->irq_enable(&desc->irq_data); else desc->irq_data.chip->irq_unmask(&desc->irq_data); cpumask_set_cpu(cpu, desc->percpu_enabled); + hard_cond_local_irq_restore(flags); } void irq_percpu_disable(struct irq_desc *desc, unsigned int cpu) -- Gilles. ^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) 2012-10-22 14:05 ` Gilles Chanteperdrix @ 2012-10-22 16:26 ` Romain Naour 0 siblings, 0 replies; 11+ messages in thread From: Romain Naour @ 2012-10-22 16:26 UTC (permalink / raw) To: Gilles Chanteperdrix; +Cc: xenomai Le 22/10/2012 16:05, Gilles Chanteperdrix a écrit : > On 10/22/2012 03:18 PM, Gilles Chanteperdrix wrote: > >> Another candidate would be irq_enable in kernel/irq/chip.c, shut off the >> irqs around the whole section, or move irq_state_clk_masked before the >> call to irq_unmask with a compiler barrier. > > Actually, the following patch fixes another bug I had, so, could you > check if it fixes yours? (and thanks for the explanations, they were > very helpful). > > diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c > index f5d8d5e..cef1e78 100644 > --- a/kernel/irq/chip.c > +++ b/kernel/irq/chip.c > @@ -167,8 +167,10 @@ int irq_startup(struct irq_desc *desc, bool resend) > desc->depth = 0; > > if (desc->irq_data.chip->irq_startup) { > + unsigned long flags = hard_cond_local_irq_save(); > ret = desc->irq_data.chip->irq_startup(&desc->irq_data); > irq_state_clr_masked(desc); > + hard_cond_local_irq_restore(flags); > } else { > irq_enable(desc); > } > @@ -192,12 +194,14 @@ void irq_shutdown(struct irq_desc *desc) > > void irq_enable(struct irq_desc *desc) > { > + unsigned long flags = hard_cond_local_irq_save(); > irq_state_clr_disabled(desc); > if (desc->irq_data.chip->irq_enable) > desc->irq_data.chip->irq_enable(&desc->irq_data); > else > desc->irq_data.chip->irq_unmask(&desc->irq_data); > irq_state_clr_masked(desc); > + hard_cond_local_irq_restore(flags); > } > > void irq_disable(struct irq_desc *desc) > @@ -211,11 +215,13 @@ void irq_disable(struct irq_desc *desc) > > void irq_percpu_enable(struct irq_desc *desc, unsigned int cpu) > { > + unsigned long flags = hard_cond_local_irq_save(); > if (desc->irq_data.chip->irq_enable) > desc->irq_data.chip->irq_enable(&desc->irq_data); > else > desc->irq_data.chip->irq_unmask(&desc->irq_data); > cpumask_set_cpu(cpu, desc->percpu_enabled); > + hard_cond_local_irq_restore(flags); > } > > void irq_percpu_disable(struct irq_desc *desc, unsigned int cpu) > > Indeed, it fixes my bug without modifying the samsung driver :) Thank you. > As explained on the page I directed you too, converting a spinlock to an > ipipe_spinlock is not something that should be done lightly. Otherwise, > you might well end-up with large masking sections, so, I would try and > find what section needs to run with irqs off, and only disable irqs for > that section. I can see that, IRQs are only disabled during the call of irq_enable(). It's better :) Here is the trace: I-pipe worst-case tracing service on 3.2.21/ipipe release #1 ------------------------------------------------------------- CPU: 0, Begin: 156240209 cycles, Trace Points: 22 (-3500/+85), Length: 1380 us Calibrated minimum trace-point overhead: 0.600 us +----- Hard IRQs ('|': locked) |+-- Xenomai ||+- Linux ('*': domain stalled, '+': current, '#': current+stalled) ||| +---------- Delay flag ('+': > 1 us, '!': > 10 us) ||| | +- NMI noise ('N') ||| | | +func -1750 2.400 uart_start+0x10 (uart_write+0x134) #func -1747 2.800 __uart_start+0x10 (uart_start+0x50) #func -1745 3.200 s3c24xx_serial_start_tx+0x10 (__uart_start+0x54) #func -1741 1.600 enable_irq+0x14 (s3c24xx_serial_start_tx+0xc4) #func -1740 4.600 __irq_get_desc_lock+0x10 (enable_irq+0x2c) #func -1735 2.200 __enable_irq+0x10 (enable_irq+0x64) #func -1733 3.200 irq_enable+0x10 (__enable_irq+0xac) | #(0x01) 0x00000001 -1730 1.000 irq_enable+0x3c (__enable_irq+0xac) | #(0x02) 0x00000001 -1729 2.000 irq_enable+0x54 (__enable_irq+0xac) | #func -1727 2.200 s3c_irq_uart0_unmask+0x10 (irq_enable+0x7c) | #(0x01) 0x00000001 -1725 1.000 irq_enable+0x9c (__enable_irq+0xac) | #(0x02) 0x00000000 -1724 3.800 irq_enable+0xb4 (__enable_irq+0xac) | #func -1720 2.800 __ipipe_grab_irq+0x10 (__irq_svc+0x24) | #func -1717 2.800 __ipipe_dispatch_irq+0x10 (__ipipe_grab_irq+0x54) | #func -1714 1.800 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0x94) | #func -1712 1.600 s3c_irq_demux_uart0+0x10 (__ipipe_ack_irq+0x1c) | #func -1711 1.600 s3c_irq_demux_uart+0x10 (s3c_irq_demux_uart0+0x1c) | #func -1709 1.400 __ipipe_dispatch_irq+0x10 (s3c_irq_demux_uart+0x54) | #func -1708 1.800 __ipipe_ack_irq+0x10 (__ipipe_dispatch_irq+0x94) | #func -1706 1.200 __ipipe_ack_level_irq+0x10 (__ipipe_ack_irq+0x1c) | #func -1705 2.600 s3c_irq_uart0_ack+0x10 (__ipipe_ack_level_irq+0x34) | #(0x01) 0x00000001 -1702 1.000 __ipipe_ack_level_irq+0x78 (__ipipe_ack_irq+0x1c) | #(0x02) 0x00000001 -1701 3.000 __ipipe_ack_level_irq+0x90 (__ipipe_ack_irq+0x1c) | #func -1698 4.600 __ipipe_set_irq_pending+0x10 (__ipipe_dispatch_irq+0x120) | #func -1694 2.200 __ipipe_do_sync_pipeline+0x10 (__ipipe_dispatch_irq+0x16c) | #func -1691 1.600 __ipipe_exit_irq+0x10 (__ipipe_grab_irq+0x5c) | #func -1690 2.400 __ipipe_check_root_interruptible+0x10 (__irq_svc+0x94) #func -1687 1.600 check_irq_resend+0x10 (__enable_irq+0xb8) #func -1686 1.600 __irq_put_desc_unlock+0x10 (enable_irq+0x74) #func -1684 1.200 ipipe_unstall_root+0x10 (uart_start+0x5c) | +func -1683 3.600 __ipipe_do_sync_stage+0x10 (ipipe_unstall_root+0x3c) Regards, Romain ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2012-10-22 16:26 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-10-19 10:19 [Xenomai] s3c24xx with clocksource/clockevent (kernel 3.2.21) Romain Naour 2012-10-19 12:18 ` Gilles Chanteperdrix 2012-10-20 16:12 ` Romain Naour 2012-10-20 17:26 ` Gilles Chanteperdrix 2012-10-21 1:35 ` Romain Naour 2012-10-21 18:29 ` Gilles Chanteperdrix 2012-10-21 18:43 ` Gilles Chanteperdrix 2012-10-21 23:33 ` Romain Naour 2012-10-22 13:18 ` Gilles Chanteperdrix 2012-10-22 14:05 ` Gilles Chanteperdrix 2012-10-22 16:26 ` Romain Naour
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.