Tree/Branch: next-20161205
Git describe: next-20161205
Commit: cef87e9115 Add linux-next specific files for 20161205
Build Time: 12 min 33 sec
Passed: 7 / 10 ( 70.00 %)
Failed: 3 / 10 ( 30.00 %)
Errors: 17
Warnings: 4
Section Mismatches: 0
Failed defconfigs:
arm64-allnoconfig
arm64-allmodconfig
arm64-defconfig
Errors:
arm64-allnoconfig
../arch/arm64/lib/clear_user.S:33: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:53: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:33: Error: attempt to move .org backwards
../arch/arm64/lib/clear_user.S:53: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:67: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:70: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:67: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:70: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:68: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:71: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:68: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:71: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:66: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:69: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:66: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:69: Error: attempt to move .org backwards
arm64-allmodconfig
../arch/arm64/include/asm/probes.h:18:25: fatal error: asm/opcodes.h: No such file or directory
arm64-defconfig
../arch/arm64/lib/clear_user.S:33: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:53: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:33: Error: attempt to move .org backwards
../arch/arm64/lib/clear_user.S:53: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:67: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:70: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:67: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:70: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:68: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:71: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:68: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:71: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:66: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:69: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:66: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:69: Error: attempt to move .org backwards
-------------------------------------------------------------------------------
defconfigs with issues (other than build errors):
3 warnings 0 mismatches : arm-allmodconfig
1 warnings 0 mismatches : arm64-defconfig
-------------------------------------------------------------------------------
Errors summary: 17
2 ../arch/arm64/lib/copy_to_user.S:69: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/copy_to_user.S:69: Error: attempt to move .org backwards
2 ../arch/arm64/lib/copy_to_user.S:66: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/copy_to_user.S:66: Error: attempt to move .org backwards
2 ../arch/arm64/lib/copy_in_user.S:71: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/copy_in_user.S:71: Error: attempt to move .org backwards
2 ../arch/arm64/lib/copy_in_user.S:68: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/copy_in_user.S:68: Error: attempt to move .org backwards
2 ../arch/arm64/lib/copy_from_user.S:70: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/copy_from_user.S:70: Error: attempt to move .org backwards
2 ../arch/arm64/lib/copy_from_user.S:67: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/copy_from_user.S:67: Error: attempt to move .org backwards
2 ../arch/arm64/lib/clear_user.S:53: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/clear_user.S:53: Error: attempt to move .org backwards
2 ../arch/arm64/lib/clear_user.S:33: Error: bad or irreducible absolute expression
2 ../arch/arm64/lib/clear_user.S:33: Error: attempt to move .org backwards
1 ../arch/arm64/include/asm/probes.h:18:25: fatal error: asm/opcodes.h: No such file or directory
Warnings Summary: 4
1 ../net/netfilter/nft_payload.c:261:15: warning: 'tsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
1 ../include/net/checksum.h:71:9: warning: 'fsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
1 ../fs/btrfs/inode.c:1198:31: warning: 'cur_end' may be used uninitialized in this function [-Wmaybe-uninitialized]
1 ../drivers/net/ethernet/apm/xgene/xgene_enet_cle.c:836:1: warning: the frame size of 1056 bytes is larger than 1024 bytes [-Wframe-larger-than=]
===============================================================================
Detailed per-defconfig build reports below:
-------------------------------------------------------------------------------
arm64-allnoconfig : FAIL, 16 errors, 0 warnings, 0 section mismatches
Errors:
../arch/arm64/lib/clear_user.S:33: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:53: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:33: Error: attempt to move .org backwards
../arch/arm64/lib/clear_user.S:53: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:67: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:70: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:67: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:70: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:68: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:71: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:68: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:71: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:66: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:69: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:66: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:69: Error: attempt to move .org backwards
-------------------------------------------------------------------------------
arm64-allmodconfig : FAIL, 1 errors, 0 warnings, 0 section mismatches
Errors:
../arch/arm64/include/asm/probes.h:18:25: fatal error: asm/opcodes.h: No such file or directory
-------------------------------------------------------------------------------
arm-allmodconfig : PASS, 0 errors, 3 warnings, 0 section mismatches
Warnings:
../net/netfilter/nft_payload.c:261:15: warning: 'tsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
../include/net/checksum.h:71:9: warning: 'fsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
../drivers/net/ethernet/apm/xgene/xgene_enet_cle.c:836:1: warning: the frame size of 1056 bytes is larger than 1024 bytes [-Wframe-larger-than=]
-------------------------------------------------------------------------------
arm64-defconfig : FAIL, 16 errors, 1 warnings, 0 section mismatches
Errors:
../arch/arm64/lib/clear_user.S:33: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:53: Error: bad or irreducible absolute expression
../arch/arm64/lib/clear_user.S:33: Error: attempt to move .org backwards
../arch/arm64/lib/clear_user.S:53: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:67: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:70: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_from_user.S:67: Error: attempt to move .org backwards
../arch/arm64/lib/copy_from_user.S:70: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:68: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:71: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_in_user.S:68: Error: attempt to move .org backwards
../arch/arm64/lib/copy_in_user.S:71: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:66: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:69: Error: bad or irreducible absolute expression
../arch/arm64/lib/copy_to_user.S:66: Error: attempt to move .org backwards
../arch/arm64/lib/copy_to_user.S:69: Error: attempt to move .org backwards
Warnings:
../fs/btrfs/inode.c:1198:31: warning: 'cur_end' may be used uninitialized in this function [-Wmaybe-uninitialized]
-------------------------------------------------------------------------------
Passed with no errors, warnings or mismatches:
arm-multi_v5_defconfig
arm-multi_v7_defconfig
x86_64-defconfig
arm-allnoconfig
x86_64-allnoconfig
arm-multi_v4t_defconfig
version 3:
- no change on mfd and pwm divers patches
- add cross reference between bindings
- change compatible to "st,stm32-timer-trigger"
- fix attributes access rights
- use string instead of int for master_mode and slave_mode
- document device attributes in sysfs-bus-iio-timer-stm32
- udpate DT with the new compatible
version 2:
- keep only one compatible per driver
- use DT parameters to describe hardware block configuration:
- pwm channels, complementary output, counter size, break input
- triggers accepted and create by IIO timers
- change DT to limite use of reference to the node
- interrupt is now in IIO timer driver
- rename stm32-mfd-timer to stm32-gptimer (for general purpose timer)
The following patches enable pwm and IIO Timer features for stm32 platforms.
Those two features are mixed into the registers of the same hardware block
(named general purpose timer) which lead to introduce a multifunctions driver
on the top of them to be able to share the registers.
In stm32 14 instances of timer hardware block exist, even if they all have
the same register mapping they could have a different number of pwm channels
and/or different triggers capabilities. We use various parameters in DT to
describe the differences between hardware blocks
The MFD (stm32-gptimer.c) takes care of clock and register mapping
by using regmap. stm32_gptimer_dev structure is provided to its sub-node to
share those information.
PWM driver is implemented into pwm-stm32.c. Depending of the instance we may
have up to 4 channels, sometime with complementary outputs or 32 bits counter
instead of 16 bits. Some hardware blocks may also have a break input function
which allows to stop pwm depending of a level, defined in devicetree, on an
external pin.
IIO timer driver (stm32-iio-timer.c and stm32-iio-timers.h) define a list of
hardware triggers usable by hardware blocks like ADC, DAC or other timers.
The matrix of possible connections between blocks is quite complex so we use
trigger names and is_stm32_iio_timer_trigger() function to be sure that
triggers are valid and configure the IPs.
Possible triggers ar listed in include/dt-bindings/iio/timer/st,stm32-iio-timer.h
At run time IIO timer hardware blocks can configure (through "master_mode"
IIO device attribute) which internal signal (counter enable, reset,
comparison block, etc...) is used to generate the trigger.
By using "slave_mode" IIO device attribute timer can also configure on which
event (level, rising edge) of the block is enabled.
Since we can use trigger from one hardware to control an other block, we can
use a pwm to control an other one. The following example shows how to configure
pwm1 and pwm3 to make pwm3 generate pulse only when pwm1 pulse level is high.
/sys/bus/iio/devices # ls
iio:device0 iio:device1 trigger0 trigger1
configure timer1 to use pwm1 channel 0 as output trigger
/sys/bus/iio/devices # echo 'OC1REF' > iio\:device0/master_mode
configure timer3 to enable only when input is high
/sys/bus/iio/devices # echo 'gated' > iio\:device1/slave_mode
/sys/bus/iio/devices # cat trigger0/name
tim1_trgo
configure timer2 to use timer1 trigger is input
/sys/bus/iio/devices # echo "tim1_trgo" > iio\:device1/trigger/current_trigger
configure pwm3 channel 0 to generate a signal with a period of 100ms and a
duty cycle of 50%
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 0 > export
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 100000000 > pwm0/period
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 50000000 > pwm0/duty_cycle
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4# echo 1 > pwm0/enable
here pwm3 channel 0, as expected, doesn't start because has to be triggered by
pwm1 channel 0
configure pwm1 channel 0 to generate a signal with a period of 1s and a
duty cycle of 50%
/sys/devices/platform/soc/40010000.gptimer1/40010000.gptimer1:pwm1@0/pwm/pwmchip0 # echo 0 > export
/sys/devices/platform/soc/40010000.gptimer1/40010000.gptimer1:pwm1@0/pwm/pwmchip0 # echo 1000000000 > pwm0/period
/sys/devices/platform/soc/40010000.gptimer1/40010000.gptimer1:pwm1@0/pwm/pwmchip0 # echo 500000000 > pwm0/duty_cycle
/sys/devices/platform/soc/40010000.gptimer1/40010000.gptimer1:pwm1@0/pwm/pwmchip0 # echo 1 > pwm0/enable
finally pwm1 starts and pwm3 only generates pulse when pwm1 signal is high
An other example to use a timer as source of clock for another device.
Here timer1 is used a source clock for pwm3:
/sys/bus/iio/devices # echo 100000 > trigger0/sampling_frequency
/sys/bus/iio/devices # echo tim1_trgo > iio\:device1/trigger/current_trigger
/sys/bus/iio/devices # echo 'external_clock' > iio\:device1/slave_mode
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 0 > export
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 1000000 > pwm0/period
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 500000 > pwm0/duty_cycle
/sys/devices/platform/soc/40000400.gptimer3/40000400.gptimer3:pwm3@0/pwm/pwmchip4 # echo 1 > pwm0/enable
Benjamin Gaignard (7):
MFD: add bindings for stm32 general purpose timer driver
MFD: add stm32 general purpose timer driver
PWM: add pwm-stm32 DT bindings
PWM: add pwm driver for stm32 plaftorm
IIO: add bindings for stm32 timer trigger driver
IIO: add STM32 timer trigger driver
ARM: dts: stm32: add stm32 general purpose timer driver in DT
.../ABI/testing/sysfs-bus-iio-timer-stm32 | 47 ++
.../bindings/iio/timer/stm32-timer-trigger.txt | 39 ++
.../bindings/mfd/stm32-general-purpose-timer.txt | 47 ++
.../devicetree/bindings/pwm/pwm-stm32.txt | 38 ++
arch/arm/boot/dts/stm32f429.dtsi | 333 +++++++++++++-
arch/arm/boot/dts/stm32f469-disco.dts | 28 ++
drivers/iio/Kconfig | 2 +-
drivers/iio/Makefile | 1 +
drivers/iio/timer/Kconfig | 15 +
drivers/iio/timer/Makefile | 1 +
drivers/iio/timer/stm32-timer-trigger.c | 477 +++++++++++++++++++++
drivers/iio/trigger/Kconfig | 1 -
drivers/mfd/Kconfig | 10 +
drivers/mfd/Makefile | 2 +
drivers/mfd/stm32-gptimer.c | 73 ++++
drivers/pwm/Kconfig | 8 +
drivers/pwm/Makefile | 1 +
drivers/pwm/pwm-stm32.c | 285 ++++++++++++
.../iio/timer/st,stm32-timer-triggers.h | 60 +++
include/linux/iio/timer/stm32-timer-trigger.h | 16 +
include/linux/mfd/stm32-gptimer.h | 62 +++
21 files changed, 1543 insertions(+), 3 deletions(-)
create mode 100644 Documentation/ABI/testing/sysfs-bus-iio-timer-stm32
create mode 100644 Documentation/devicetree/bindings/iio/timer/stm32-timer-trigger.txt
create mode 100644 Documentation/devicetree/bindings/mfd/stm32-general-purpose-timer.txt
create mode 100644 Documentation/devicetree/bindings/pwm/pwm-stm32.txt
create mode 100644 drivers/iio/timer/Kconfig
create mode 100644 drivers/iio/timer/Makefile
create mode 100644 drivers/iio/timer/stm32-timer-trigger.c
create mode 100644 drivers/mfd/stm32-gptimer.c
create mode 100644 drivers/pwm/pwm-stm32.c
create mode 100644 include/dt-bindings/iio/timer/st,stm32-timer-triggers.h
create mode 100644 include/linux/iio/timer/stm32-timer-trigger.h
create mode 100644 include/linux/mfd/stm32-gptimer.h
--
1.9.1
Tree/Branch: next-20161206
Git describe: next-20161206
Commit: efe90db21f Add linux-next specific files for 20161206
Build Time: 98 min 51 sec
Passed: 10 / 10 (100.00 %)
Failed: 0 / 10 ( 0.00 %)
Errors: 0
Warnings: 3
Section Mismatches: 0
-------------------------------------------------------------------------------
defconfigs with issues (other than build errors):
2 warnings 0 mismatches : arm64-allmodconfig
3 warnings 0 mismatches : arm-allmodconfig
-------------------------------------------------------------------------------
Warnings Summary: 3
2 ../net/netfilter/nft_payload.c:261:15: warning: 'tsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
2 ../include/net/checksum.h:71:9: warning: 'fsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
1 ../drivers/net/ethernet/apm/xgene/xgene_enet_cle.c:836:1: warning: the frame size of 1056 bytes is larger than 1024 bytes [-Wframe-larger-than=]
===============================================================================
Detailed per-defconfig build reports below:
-------------------------------------------------------------------------------
arm64-allmodconfig : PASS, 0 errors, 2 warnings, 0 section mismatches
Warnings:
../net/netfilter/nft_payload.c:261:15: warning: 'tsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
../include/net/checksum.h:71:9: warning: 'fsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
-------------------------------------------------------------------------------
arm-allmodconfig : PASS, 0 errors, 3 warnings, 0 section mismatches
Warnings:
../net/netfilter/nft_payload.c:261:15: warning: 'tsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
../include/net/checksum.h:71:9: warning: 'fsum' may be used uninitialized in this function [-Wmaybe-uninitialized]
../drivers/net/ethernet/apm/xgene/xgene_enet_cle.c:836:1: warning: the frame size of 1056 bytes is larger than 1024 bytes [-Wframe-larger-than=]
-------------------------------------------------------------------------------
Passed with no errors, warnings or mismatches:
arm64-allnoconfig
arm-multi_v5_defconfig
arm-multi_v7_defconfig
x86_64-defconfig
arm-allnoconfig
x86_64-allnoconfig
arm-multi_v4t_defconfig
arm64-defconfig
When running kprobe on -rt kernel, the below bug is caught:
BUG: sleeping function called from invalid context at kernel/locking/rtmutex.c:931
in_atomic(): 1, irqs_disabled(): 128, pid: 14, name: migration/0
INFO: lockdep is turned off.
irq event stamp: 238
hardirqs last enabled at (237): [<80b5aecc>] _raw_spin_unlock_irqrestore+0x88/0x90
hardirqs last disabled at (238): [<80b56d88>] __schedule+0xec/0x94c
softirqs last enabled at (0): [<80225584>] copy_process.part.5+0x30c/0x1994
softirqs last disabled at (0): [< (null)>] (null)
Preemption disabled at:[<802f2b98>] cpu_stopper_thread+0xc0/0x140
CPU: 0 PID: 14 Comm: migration/0 Tainted: G O 4.8.3-rt2 #1
Hardware name: Freescale LS1021A
[<80212e7c>] (unwind_backtrace) from [<8020cd2c>] (show_stack+0x20/0x24)
[<8020cd2c>] (show_stack) from [<80689e14>] (dump_stack+0xa0/0xcc)
[<80689e14>] (dump_stack) from [<8025a43c>] (___might_sleep+0x1b8/0x2a4)
[<8025a43c>] (___might_sleep) from [<80b5b324>] (rt_spin_lock+0x34/0x74)
[<80b5b324>] (rt_spin_lock) from [<80b5c31c>] (__patch_text_real+0x70/0xe8)
[<80b5c31c>] (__patch_text_real) from [<80b5c3ac>] (patch_text_stop_machine+0x18/0x20)
[<80b5c3ac>] (patch_text_stop_machine) from [<802f2920>] (multi_cpu_stop+0xfc/0x134)
[<802f2920>] (multi_cpu_stop) from [<802f2ba0>] (cpu_stopper_thread+0xc8/0x140)
[<802f2ba0>] (cpu_stopper_thread) from [<802563a4>] (smpboot_thread_fn+0x1a4/0x354)
[<802563a4>] (smpboot_thread_fn) from [<80251d38>] (kthread+0x104/0x11c)
[<80251d38>] (kthread) from [<80207f70>] (ret_from_fork+0x14/0x24)
Since patch_text_stop_machine() is called in stop_machine() which disables IRQ,
sleepable lock should be not used in this atomic context, so replace patch_lock
to raw lock.
Signed-off-by: Yang Shi <yang.shi(a)linaro.org>
---
arch/arm/kernel/patch.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/arch/arm/kernel/patch.c b/arch/arm/kernel/patch.c
index 69bda1a..1f665ac 100644
--- a/arch/arm/kernel/patch.c
+++ b/arch/arm/kernel/patch.c
@@ -15,7 +15,7 @@ struct patch {
unsigned int insn;
};
-static DEFINE_SPINLOCK(patch_lock);
+static DEFINE_RAW_SPINLOCK(patch_lock);
static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags)
__acquires(&patch_lock)
@@ -32,7 +32,7 @@ static void __kprobes *patch_map(void *addr, int fixmap, unsigned long *flags)
return addr;
if (flags)
- spin_lock_irqsave(&patch_lock, *flags);
+ raw_spin_lock_irqsave(&patch_lock, *flags);
else
__acquire(&patch_lock);
@@ -47,7 +47,7 @@ static void __kprobes patch_unmap(int fixmap, unsigned long *flags)
clear_fixmap(fixmap);
if (flags)
- spin_unlock_irqrestore(&patch_lock, *flags);
+ raw_spin_unlock_irqrestore(&patch_lock, *flags);
else
__release(&patch_lock);
}
--
2.0.2