Hi Rafael,
You can pretty much ignore this series until all other OPP cleanup/fixes
get merged. I am posting these to get early reviews from Stephen as
these patches have been lying with me for almost a week now. And I am
also _not_ pushing these for 4.10-rc1. It all depends on how the reviews
go.
The RCU locking isn't well suited for the OPP core. The RCU locking fits
better for reader heavy stuff, while the OPP core have at max one or two
readers only at a time.
Over that, it was getting very confusing the way RCU locking was used
within the OPP core. The individual OPPs are mostly well handled, i.e.
for an update a new structure was created and then that replaced the
older one. But the OPP tables were updated directly all the time from
various parts of the core. Though they were mostly used from within RCU
locked region, they didn't had much to do with RCU and were governed by
the mutex instead.
And that mixed with the 'opp_table_lock' has made the core even more
confusing.
Similar concerns were shared by Stephen Boyd earlier [1].
This patchset simplifies the locking in OPP core to great extent using
Kernel reference counting mechanism along with per OPP table mutex.
And finally it gets rid of RCU locking as well.
Each and every patch of this series is individually:
- build tested
- boot tested with cpufreq-dt.ko module. Insmod and rmmod to make sure
the OPPs and the OPP tables are getting freed.
More testing is also done by various build and boot bots for last few
days. And they reported lots of issues (both build and boot time) that
helped making this series more robust:
- Kernel CI (Linaro)
- Fengguang Wu's bot (Intel)
This series has few dependencies though. It is rebased over:
pm/bleeding-edge
+ OPP cleanup series [2]
+ few devfreq fixes [3], [4], and [5].
+ A recent revert [6]
Though all of those shall get merged before we end up reviewing this
series.
--
viresh
[1] https://marc.info/?l=linux-kernel&m=147742717527548&w=2
[2] https://marc.info/?l=linux-pm&m=148108573618896&w=2
[3] https://patchwork.kernel.org/patch/9455789/
[4] https://patchwork.kernel.org/patch/9455757/
[5] https://marc.info/?l=linux-pm&m=148090824301852&w=2
[6] https://marc.info/?l=linux-kernel&m=148110674223377&w=2
Viresh Kumar (12):
PM / OPP: Add per OPP table mutex
PM / OPP: Add 'struct kref' to OPP table
PM / OPP: Return opp_table from dev_pm_opp_set_*() routines
PM / OPP: Take reference of the OPP table while adding/removing OPPs
PM / OPP: Use dev_pm_opp_get_opp_table() instead of _add_opp_table()
PM / OPP: Add 'struct kref' to struct dev_pm_opp
PM / OPP: Update OPP users to put reference
PM / OPP: Take kref from _find_opp_table()
PM / OPP: Move away from RCU locking
PM / OPP: Simplify _opp_set_availability()
PM / OPP: Simplify dev_pm_opp_get_max_volt_latency()
PM / OPP: Update Documentation to remove RCU specific bits
Documentation/power/opp.txt | 47 +-
arch/arm/mach-omap2/pm.c | 5 +-
drivers/base/power/opp/core.c | 888 +++++++++++------------------------
drivers/base/power/opp/cpu.c | 66 +--
drivers/base/power/opp/of.c | 94 +---
drivers/base/power/opp/opp.h | 31 +-
drivers/clk/tegra/clk-dfll.c | 17 +-
drivers/cpufreq/exynos5440-cpufreq.c | 5 +-
drivers/cpufreq/imx6q-cpufreq.c | 10 +-
drivers/cpufreq/mt8173-cpufreq.c | 8 +-
drivers/cpufreq/omap-cpufreq.c | 4 +-
drivers/cpufreq/sti-cpufreq.c | 13 +-
drivers/devfreq/devfreq.c | 14 +-
drivers/devfreq/exynos-bus.c | 14 +-
drivers/devfreq/governor_passive.c | 4 +-
drivers/devfreq/rk3399_dmc.c | 16 +-
drivers/devfreq/tegra-devfreq.c | 4 +-
drivers/thermal/cpu_cooling.c | 11 +-
drivers/thermal/devfreq_cooling.c | 14 +-
include/linux/pm_opp.h | 48 +-
20 files changed, 429 insertions(+), 884 deletions(-)
--
2.7.1.410.g6faf27b
Tree/Branch: master
Git describe: v4.10-rc4-164-g44b4b46
Commit: 44b4b461a0 Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Build Time: 127 min 51 sec
Passed: 8 / 9 ( 88.89 %)
Failed: 0 / 9 ( 0.00 %)
Unknown: 1 / 9 ( 11.11 %)
Errors: 73
Warnings: 0
Section Mismatches: 0
-------------------------------------------------------------------------------
defconfigs with issues (other than build errors):
-------------------------------------------------------------------------------
Errors summary: 73
1 /tmp/ccLTO4eP.s: Fatal error: can't write 64 bytes to section .text of net/core/.tmp_net_namespace.o because: 'No space left on device'
1 /tmp/ccLTO4eP.s: Fatal error: can't close net/core/.tmp_net_namespace.o: No space left on device
1 /tmp/ccBFtQW6.s: Fatal error: can't write 52 bytes to section .text of net/ceph/.tmp_armor.o because: 'No space left on device'
1 /tmp/ccBFtQW6.s: Fatal error: can't close net/ceph/.tmp_armor.o: No space left on device
1 ../sound/pci/echoaudio/gina20.c:105:0: fatal error: error writing to /tmp/ccJqjV92.s: No space left on device
1 ../sound/pci/echoaudio/darla20.c:101:0: fatal error: error writing to /tmp/cc7JDCnr.s: No space left on device
1 ../sound/pci/ctxfi/cttimer.c:442:1: fatal error: error writing to /tmp/ccZMY7e7.s: No space left on device
1 ../sound/pci/ctxfi/ctpcm.c:488:1: fatal error: error writing to /tmp/ccSTcejh.s: No space left on device
1 ../sound/pci/ctxfi/ctimap.c:111:1: fatal error: error writing to /tmp/ccyRwHAu.s: No space left on device
1 ../sound/pci/ctxfi/cthw20k2.c:2360:1: fatal error: error writing to /tmp/ccCacZcI.s: No space left on device
1 ../sound/pci/ctxfi/cthw20k1.c:2294:1: fatal error: error writing to /tmp/cczhbKBK.s: No space left on device
1 ../sound/pci/cs5535audio/cs5535audio.c:416:1: fatal error: error writing to /tmp/ccEHCHSs.s: No space left on device
1 ../sound/pci/cs46xx/dsp_spos.c:2049:1: fatal error: error writing to /tmp/cc9HVEn5.s: No space left on device
1 ../sound/pci/cs46xx/cs46xx_lib.c:4051:1: fatal error: error writing to /tmp/ccI6NMD6.s: No space left on device
1 ../sound/pci/ca0106/ca_midi.c:315:1: fatal error: error writing to /tmp/ccCbCHvb.s: No space left on device
1 ../sound/pci/ca0106/ca0106_proc.c:453:1: fatal error: error writing to /tmp/cc0hgTFW.s: No space left on device
1 ../sound/pci/ca0106/ca0106_mixer.c:931:1: fatal error: error writing to /tmp/ccRobsnv.s: No space left on device
1 ../sound/pci/ca0106/ca0106_main.c:1972:1: fatal error: error writing to /tmp/ccdYa3X8.s: No space left on device
1 ../net/dccp/timer.c:271:1: fatal error: error writing to /tmp/cc5lwnP6.s: No space left on device
1 ../net/dccp/sysctl.c:118:1: fatal error: opening dependency file net/dccp/.sysctl.o.d: No such file or directory
1 ../net/dccp/qpolicy.c:137:1: fatal error: error writing to /tmp/cctNXU4d.s: No space left on device
1 ../net/dccp/proto.c:1256:1: fatal error: opening dependency file net/dccp/.proto.o.d: No such file or directory
1 ../net/dccp/probe.c:203:1: fatal error: opening dependency file net/dccp/.probe.o.d: No such file or directory
1 ../net/dccp/output.c:703:1: fatal error: opening dependency file net/dccp/.output.o.d: No such file or directory
1 ../net/dccp/options.c:609:1: fatal error: opening dependency file net/dccp/.options.o.d: No such file or directory
1 ../net/dccp/ipv6.c:1132:1: fatal error: opening dependency file net/dccp/.ipv6.o.d: No such file or directory
1 ../net/dccp/ipv4.c:1072:1: fatal error: opening dependency file net/dccp/.ipv4.o.d: No such file or directory
1 ../net/dccp/input.c:732:1: fatal error: opening dependency file net/dccp/.input.o.d: No such file or directory
1 ../net/dccp/feat.c:1561:1: fatal error: opening dependency file net/dccp/.feat.o.d: No such file or directory
1 ../net/dccp/diag.c:88:1: fatal error: opening dependency file net/dccp/.diag.o.d: No such file or directory
1 ../net/dccp/ccids/lib/tfrc_equation.c:705:1: fatal error: error writing to /tmp/ccy4CcBS.s: No space left on device
1 ../net/dccp/ccids/lib/tfrc.c:45:1: fatal error: opening dependency file net/dccp/ccids/lib/.tfrc.o.d: No such file or directory
1 ../net/dccp/ccids/lib/packet_history.c:449:1: fatal error: opening dependency file net/dccp/ccids/lib/.packet_history.o.d: No such file or directory
1 ../net/dccp/ccids/lib/loss_interval.c:185:1: fatal error: opening dependency file net/dccp/ccids/lib/.loss_interval.o.d: No such file or directory
1 ../net/dccp/ccids/ccid3.c:869:1: fatal error: error writing to /tmp/ccvqAB6V.s: No space left on device
1 ../net/dccp/ccids/ccid2.c:783:1: fatal error: error writing to /tmp/ccBb8PfS.s: No space left on device
1 ../net/dccp/ccid.c:222:1: fatal error: opening dependency file net/dccp/.ccid.o.d: No such file or directory
1 ../net/dccp/ackvec.c:405:1: fatal error: opening dependency file net/dccp/.ackvec.o.d: No such file or directory
1 ../net/dcb/dcbnl.c:1945:1: fatal error: error writing to /tmp/ccFdhLmn.s: No space left on device
1 ../net/dcb/dcbevent.c:41:1: fatal error: error writing to /tmp/ccPjuLs1.s: No space left on device
1 ../net/core/rtnetlink.c:4147:1: fatal error: error writing to /tmp/cc1hijle.s: No space left on device
1 ../net/core/neighbour.c:3223:1: fatal error: error writing to /tmp/cc9syBEz.s: No space left on device
1 ../net/core/flow_dissector.c:1048:1: fatal error: error writing to /tmp/cc3WGO8d.s: No space left on device
1 ../net/core/ethtool.c:2796:1: fatal error: error writing to /tmp/cc6bIDFM.s: No space left on device
1 ../net/core/dev.c:8414:1: fatal error: error writing to /tmp/ccVveDbZ.s: No space left on device
1 ../net/ceph/auth_x.c:821:1: fatal error: error writing to /tmp/cc8EPxjH.s: No space left on device
1 ../net/ceph/auth_none.c:143:1: fatal error: error writing to /tmp/cc0qHpib.s: No space left on device
1 ../include/linux/export.h:63:22: fatal error: opening dependency file net/dccp/.minisocks.o.d: No such file or directory
1 ../include/linux/export.h:63:22: fatal error: error writing to /tmp/ccsX5XkG.s: No space left on device
1 ../include/linux/export.h:63:22: fatal error: error closing /tmp/cc1l4q6r.s: No space left on device
1 ../fs/f2fs/super.c:2246:1: fatal error: error writing to /tmp/cclvCDv1.s: No space left on device
1 ../fs/f2fs/segment.c:2806:1: fatal error: error writing to /tmp/ccvqV2P2.s: No space left on device
1 ../fs/f2fs/node.c:2462:1: fatal error: error writing to /tmp/ccTEJYcA.s: No space left on device
1 ../fs/f2fs/namei.c:1123:1: fatal error: error writing to /tmp/ccnggT4u.s: No space left on device
1 ../fs/f2fs/hash.c:103:1: fatal error: error writing to /tmp/cc5Fjb1Y.s: No space left on device
1 ../fs/f2fs/data.c:2021:1: fatal error: error writing to /tmp/ccdfN7hS.s: No space left on device
1 ../fs/f2fs/checkpoint.c:1335:1: fatal error: error writing to /tmp/ccDdzn6r.s: No space left on device
1 ../fs/ext4/symlink.c:101:1: fatal error: error writing to /tmp/ccfkeaMd.s: No space left on device
1 ../fs/ext4/super.c:5696:1: fatal error: error writing to /tmp/ccjE7fHG.s: No space left on device
1 ../fs/ext4/resize.c:2018:1: fatal error: error writing to /tmp/ccBkGmqO.s: No space left on device
1 ../fs/ext4/namei.c:3898:1: fatal error: error writing to /tmp/cc2Q79HI.s: No space left on device
1 ../fs/ext4/inode.c:5947:1: fatal error: error writing to /tmp/cckfiULj.s: No space left on device
1 ../fs/ext4/hash.c:207:1: fatal error: error writing to /tmp/ccw4LG5o.s: No space left on device
1 ../fs/ext4/extents.c:5941:1: fatal error: error writing to /tmp/ccosvK2q.s: No space left on device
1 ../drivers/atm/nicstar.c:2751:1: fatal error: error writing to /tmp/ccdQuD2B.s: No space left on device
1 ../drivers/atm/idt77252.c:3804:1: fatal error: error writing to /tmp/cczxaeWr.s: No space left on device
1 ../drivers/atm/fore200e.c:3177:1: fatal error: error writing to /tmp/ccpPMopa.s: No space left on device
1 ../drivers/atm/eni.c:2341:1: fatal error: error writing to /tmp/ccTHBoQp.s: No space left on device
1 ../drivers/ata/pata_triflex.c:248:1: fatal error: error writing to /tmp/ccTar8Ro.s: No space left on device
1 ../drivers/ata/pata_sl82c105.c:380:1: fatal error: error closing /tmp/ccGwtXdY.s: No space left on device
1 ../drivers/ata/pata_rz1000.c:148:1: fatal error: error writing to /tmp/cc72E6rN.s: No space left on device
1 ../drivers/ata/pata_opti.c:199:1: fatal error: error writing to /tmp/ccaz7mHj.s: No space left on device
1 ../drivers/ata/pata_legacy.c:1276:1: fatal error: error writing to /tmp/cclEdxAJ.s: No space left on device
===============================================================================
Detailed per-defconfig build reports below:
-------------------------------------------------------------------------------
arm64-allmodconfig : UNKNOWN, 73 errors, 0 warnings, 0 section mismatches
Errors:
/tmp/ccLTO4eP.s: Fatal error: can't write 64 bytes to section .text of net/core/.tmp_net_namespace.o because: 'No space left on device'
/tmp/ccLTO4eP.s: Fatal error: can't close net/core/.tmp_net_namespace.o: No space left on device
../include/linux/export.h:63:22: fatal error: error closing /tmp/cc1l4q6r.s: No space left on device
../drivers/ata/pata_triflex.c:248:1: fatal error: error writing to /tmp/ccTar8Ro.s: No space left on device
../sound/pci/ca0106/ca0106_main.c:1972:1: fatal error: error writing to /tmp/ccdYa3X8.s: No space left on device
../net/ceph/auth_none.c:143:1: fatal error: error writing to /tmp/cc0qHpib.s: No space left on device
../sound/pci/ca0106/ca0106_mixer.c:931:1: fatal error: error writing to /tmp/ccRobsnv.s: No space left on device
/tmp/ccBFtQW6.s: Fatal error: can't write 52 bytes to section .text of net/ceph/.tmp_armor.o because: 'No space left on device'
/tmp/ccBFtQW6.s: Fatal error: can't close net/ceph/.tmp_armor.o: No space left on device
../fs/f2fs/namei.c:1123:1: fatal error: error writing to /tmp/ccnggT4u.s: No space left on device
../sound/pci/ca0106/ca_midi.c:315:1: fatal error: error writing to /tmp/ccCbCHvb.s: No space left on device
../drivers/ata/pata_sl82c105.c:380:1: fatal error: error closing /tmp/ccGwtXdY.s: No space left on device
../fs/f2fs/hash.c:103:1: fatal error: error writing to /tmp/cc5Fjb1Y.s: No space left on device
../fs/ext4/inode.c:5947:1: fatal error: error writing to /tmp/cckfiULj.s: No space left on device
../sound/pci/ca0106/ca0106_proc.c:453:1: fatal error: error writing to /tmp/cc0hgTFW.s: No space left on device
../net/ceph/auth_x.c:821:1: fatal error: error writing to /tmp/cc8EPxjH.s: No space left on device
../net/core/flow_dissector.c:1048:1: fatal error: error writing to /tmp/cc3WGO8d.s: No space left on device
../drivers/ata/pata_opti.c:199:1: fatal error: error writing to /tmp/ccaz7mHj.s: No space left on device
../include/linux/export.h:63:22: fatal error: error writing to /tmp/ccsX5XkG.s: No space left on device
../sound/pci/cs46xx/cs46xx_lib.c:4051:1: fatal error: error writing to /tmp/ccI6NMD6.s: No space left on device
../fs/f2fs/super.c:2246:1: fatal error: error writing to /tmp/cclvCDv1.s: No space left on device
../drivers/ata/pata_rz1000.c:148:1: fatal error: error writing to /tmp/cc72E6rN.s: No space left on device
../sound/pci/cs46xx/dsp_spos.c:2049:1: fatal error: error writing to /tmp/cc9HVEn5.s: No space left on device
../fs/ext4/namei.c:3898:1: fatal error: error writing to /tmp/cc2Q79HI.s: No space left on device
../net/dcb/dcbnl.c:1945:1: fatal error: error writing to /tmp/ccFdhLmn.s: No space left on device
../sound/pci/cs5535audio/cs5535audio.c:416:1: fatal error: error writing to /tmp/ccEHCHSs.s: No space left on device
../net/dcb/dcbevent.c:41:1: fatal error: error writing to /tmp/ccPjuLs1.s: No space left on device
../drivers/ata/pata_legacy.c:1276:1: fatal error: error writing to /tmp/cclEdxAJ.s: No space left on device
../net/dccp/ccid.c:222:1: fatal error: opening dependency file net/dccp/.ccid.o.d: No such file or directory
../fs/f2fs/checkpoint.c:1335:1: fatal error: error writing to /tmp/ccDdzn6r.s: No space left on device
../net/core/dev.c:8414:1: fatal error: error writing to /tmp/ccVveDbZ.s: No space left on device
../net/dccp/feat.c:1561:1: fatal error: opening dependency file net/dccp/.feat.o.d: No such file or directory
../drivers/atm/nicstar.c:2751:1: fatal error: error writing to /tmp/ccdQuD2B.s: No space left on device
../net/dccp/input.c:732:1: fatal error: opening dependency file net/dccp/.input.o.d: No such file or directory
../sound/pci/ctxfi/ctpcm.c:488:1: fatal error: error writing to /tmp/ccSTcejh.s: No space left on device
../include/linux/export.h:63:22: fatal error: opening dependency file net/dccp/.minisocks.o.d: No such file or directory
../net/core/ethtool.c:2796:1: fatal error: error writing to /tmp/cc6bIDFM.s: No space left on device
../net/dccp/options.c:609:1: fatal error: opening dependency file net/dccp/.options.o.d: No such file or directory
../fs/f2fs/data.c:2021:1: fatal error: error writing to /tmp/ccdfN7hS.s: No space left on device
../net/dccp/output.c:703:1: fatal error: opening dependency file net/dccp/.output.o.d: No such file or directory
../net/dccp/proto.c:1256:1: fatal error: opening dependency file net/dccp/.proto.o.d: No such file or directory
../sound/pci/ctxfi/ctimap.c:111:1: fatal error: error writing to /tmp/ccyRwHAu.s: No space left on device
../fs/ext4/super.c:5696:1: fatal error: error writing to /tmp/ccjE7fHG.s: No space left on device
../net/dccp/timer.c:271:1: fatal error: error writing to /tmp/cc5lwnP6.s: No space left on device
../fs/ext4/symlink.c:101:1: fatal error: error writing to /tmp/ccfkeaMd.s: No space left on device
../sound/pci/ctxfi/cttimer.c:442:1: fatal error: error writing to /tmp/ccZMY7e7.s: No space left on device
../fs/ext4/hash.c:207:1: fatal error: error writing to /tmp/ccw4LG5o.s: No space left on device
../net/dccp/qpolicy.c:137:1: fatal error: error writing to /tmp/cctNXU4d.s: No space left on device
../fs/f2fs/node.c:2462:1: fatal error: error writing to /tmp/ccTEJYcA.s: No space left on device
../drivers/atm/fore200e.c:3177:1: fatal error: error writing to /tmp/ccpPMopa.s: No space left on device
../net/dccp/ccids/ccid2.c:783:1: fatal error: error writing to /tmp/ccBb8PfS.s: No space left on device
../sound/pci/ctxfi/cthw20k2.c:2360:1: fatal error: error writing to /tmp/ccCacZcI.s: No space left on device
../net/core/neighbour.c:3223:1: fatal error: error writing to /tmp/cc9syBEz.s: No space left on device
../fs/ext4/resize.c:2018:1: fatal error: error writing to /tmp/ccBkGmqO.s: No space left on device
../net/dccp/ackvec.c:405:1: fatal error: opening dependency file net/dccp/.ackvec.o.d: No such file or directory
../sound/pci/ctxfi/cthw20k1.c:2294:1: fatal error: error writing to /tmp/cczhbKBK.s: No space left on device
../net/dccp/ccids/ccid3.c:869:1: fatal error: error writing to /tmp/ccvqAB6V.s: No space left on device
../drivers/atm/eni.c:2341:1: fatal error: error writing to /tmp/ccTHBoQp.s: No space left on device
../fs/f2fs/segment.c:2806:1: fatal error: error writing to /tmp/ccvqV2P2.s: No space left on device
../net/dccp/ccids/lib/tfrc.c:45:1: fatal error: opening dependency file net/dccp/ccids/lib/.tfrc.o.d: No such file or directory
../sound/pci/echoaudio/darla20.c:101:0: fatal error: error writing to /tmp/cc7JDCnr.s: No space left on device
../net/dccp/ccids/lib/tfrc_equation.c:705:1: fatal error: error writing to /tmp/ccy4CcBS.s: No space left on device
../net/core/rtnetlink.c:4147:1: fatal error: error writing to /tmp/cc1hijle.s: No space left on device
../net/dccp/ccids/lib/packet_history.c:449:1: fatal error: opening dependency file net/dccp/ccids/lib/.packet_history.o.d: No such file or directory
../sound/pci/echoaudio/gina20.c:105:0: fatal error: error writing to /tmp/ccJqjV92.s: No space left on device
../drivers/atm/idt77252.c:3804:1: fatal error: error writing to /tmp/cczxaeWr.s: No space left on device
../net/dccp/ccids/lib/loss_interval.c:185:1: fatal error: opening dependency file net/dccp/ccids/lib/.loss_interval.o.d: No such file or directory
../fs/ext4/extents.c:5941:1: fatal error: error writing to /tmp/ccosvK2q.s: No space left on device
../net/dccp/sysctl.c:118:1: fatal error: opening dependency file net/dccp/.sysctl.o.d: No such file or directory
../net/dccp/ipv4.c:1072:1: fatal error: opening dependency file net/dccp/.ipv4.o.d: No such file or directory
../net/dccp/ipv6.c:1132:1: fatal error: opening dependency file net/dccp/.ipv6.o.d: No such file or directory
../net/dccp/diag.c:88:1: fatal error: opening dependency file net/dccp/.diag.o.d: No such file or directory
../net/dccp/probe.c:203:1: fatal error: opening dependency file net/dccp/.probe.o.d: No such file or directory
-------------------------------------------------------------------------------
Passed with no errors, warnings or mismatches:
arm-multi_v5_defconfig
arm-multi_v7_defconfig
x86_64-defconfig
arm-allmodconfig
arm-allnoconfig
x86_64-allnoconfig
arm-multi_v4t_defconfig
arm64-defconfig
close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr
version 8:
- rebase on v4.10-rc4
- fix comments done by Thierry on PWM
- reword "reg" parameter description
- change kernel kernel in IIO ABI documentation
version 7:
- rebase on v4.10-rc2
- remove iio_device code from driver and keep only the trigger part
version 6:
- rename stm32-gptimer in stm32-timers.
- change "st,stm32-gptimer" compatible to "st,stm32-timers".
- modify "st,breakinput" parameter in pwm part.
- split DT patch in 2
version 5:
- fix comments done on version 4
- rebased on kernel 4.9-rc8
- change nodes names and re-order then by addresses
version 4:
- fix comments done on version 3
- don't use interrupts anymore in IIO timer
- detect hardware capabilities at probe time to simplify binding
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
- update 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-timers (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 STM32f4 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-timers.c) takes care of clock and register mapping
by using regmap. stm32_timers 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-timer-trigger.c and stm32-timer-trigger.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.
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.
Benjamin Gaignard (8):
MFD: add bindings for STM32 Timers driver
MFD: add STM32 Timers 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 Timers driver for stm32f429 MCU
ARM: dts: stm32: Enable pwm1 and pwm3 for stm32f469-disco
.../ABI/testing/sysfs-bus-iio-timer-stm32 | 29 ++
.../bindings/iio/timer/stm32-timer-trigger.txt | 23 ++
.../devicetree/bindings/mfd/stm32-timers.txt | 46 +++
.../devicetree/bindings/pwm/pwm-stm32.txt | 35 ++
arch/arm/boot/dts/stm32f429.dtsi | 275 ++++++++++++++
arch/arm/boot/dts/stm32f469-disco.dts | 28 ++
drivers/iio/trigger/Kconfig | 9 +
drivers/iio/trigger/Makefile | 1 +
drivers/iio/trigger/stm32-timer-trigger.c | 342 ++++++++++++++++++
drivers/mfd/Kconfig | 11 +
drivers/mfd/Makefile | 2 +
drivers/mfd/stm32-timers.c | 80 +++++
drivers/pwm/Kconfig | 9 +
drivers/pwm/Makefile | 1 +
drivers/pwm/pwm-stm32.c | 398 +++++++++++++++++++++
include/linux/iio/timer/stm32-timer-trigger.h | 62 ++++
include/linux/mfd/stm32-timers.h | 71 ++++
17 files changed, 1422 insertions(+)
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-timers.txt
create mode 100644 Documentation/devicetree/bindings/pwm/pwm-stm32.txt
create mode 100644 drivers/iio/trigger/stm32-timer-trigger.c
create mode 100644 drivers/mfd/stm32-timers.c
create mode 100644 drivers/pwm/pwm-stm32.c
create mode 100644 include/linux/iio/timer/stm32-timer-trigger.h
create mode 100644 include/linux/mfd/stm32-timers.h
--
1.9.1
Hi Alex, Mark,
Please consider following linaro-android pull request for
"linux-linaro-lsk-v4.1-android" LSK branch.
Boot tested on Qemu + Android M.
KernelCI build job:
https://kernelci.org/build/linaro-android/kernel/v4.1-5317-g65117109f634/
Backlog:
Again, for the record, here is a list of aosp/android-4.1 patches
dropped from lsk-4.1-android topic branch. "arm64: User Access
Override" feature and dependent patches from aosp/android-4.1 are
dropped due to non-trivial merge errors including a "#define" conflict
in one of arm64:UAO patches which might have made that feature
unusable.
BACKPORT: arm64: kernel: Add support for User Access Override
UPSTREAM: arm64: cpufeature: Test 'matches' pointer to find the end of the list
BACKPORT: arm64: kernel: Don't toggle PAN on systems with UAO
UPSTREAM: arm64: Remove the get_thread_info() function
UPSTREAM: arm64: fix dump_instr when PAN and UAO are in use
UPSTREAM: arm64: add macro to extract ESR_ELx.EC
UPSTREAM: arm64: kill ESR_LNX_EXEC
BACKPORT: arm64: kernel: Save and restore UAO and addr_limit on exception entry
BACKPORT: arm64: Handle el1 synchronous instruction aborts cleanly
BACKPORT: arm64: Factor out PAN enabling/disabling into separate
uaccess_* macros
BACKPORT: arm64: Introduce uaccess_{disable,enable} functionality
based on TTBR0_EL1
BACKPORT: arm64: Disable TTBR0_EL1 during normal kernel execution
UPSTREAM: arm64: Handle faults caused by inadvertent user access with
PAN enabled
UPSTREAM: arm64: xen: Enable user access before a privcmd hvc call
UPSTREAM: arm64: Enable CONFIG_ARM64_SW_TTBR0_PAN
UPSTREAM: arm64: Disable PAN on uaccess_enable()
ANDROID: configs: CONFIG_ARM64_SW_TTBR0_PAN=y
Regards,
Amit Pundir
The following changes since commit 8b496701188f07a1c4821d833337e4a0998191b9:
Merge branch 'lsk-v4.1-android' of
git://android.git.linaro.org/kernel/linaro-android into
linux-linaro-lsk-v4.1-android (2017-01-03 17:57:57 +0800)
are available in the git repository at:
git://android.git.linaro.org/kernel/linaro-android lsk-v4.1-android
for you to fetch changes up to 65117109f6344fa46542f85844bc292842116192:
ANDROID: sdcardfs: Propagate dentry down to inode_change_ok()
(2017-01-16 15:54:02 +0530)
----------------------------------------------------------------
Amit Pundir (1):
ANDROID: sdcardfs: Propagate dentry down to inode_change_ok()
Eric Biggers (1):
net: socket: don't set sk_uid to garbage value in ->setattr()
Eric Dumazet (1):
UPSTREAM: net: avoid signed overflows for SO_{SND|RCV}BUFFORCE
Guillaume Nault (1):
UPSTREAM: l2tp: fix racy SOCK_ZAPPED flag check in l2tp_ip{,6}_bind()
Mark Rutland (1):
UPSTREAM: arm64: alternative: add auto-nop infrastructure
Sami Tolvanen (2):
Revert "FROMLIST: arm64: Enable CONFIG_ARM64_SW_TTBR0_PAN"
Revert "FROMLIST: arm64: xen: Enable user access before a
privcmd hvc call"
Will Deacon (1):
BACKPORT: arm64: barriers: introduce nops and __nops macros for
NOP sequences
arch/arm64/Kconfig | 8 --------
arch/arm64/include/asm/alternative.h | 71
++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------------
arch/arm64/include/asm/assembler.h | 9 +++++++++
arch/arm64/include/asm/barrier.h | 3 +++
arch/arm64/xen/hypercall.S | 19 -------------------
fs/sdcardfs/inode.c | 4 ++--
net/core/sock.c | 4 ++--
net/l2tp/l2tp_ip.c | 5 +++--
net/l2tp/l2tp_ip6.c | 5 +++--
net/socket.c | 2 +-
10 files changed, 77 insertions(+), 53 deletions(-)
Hi all,
before sending this RFC to a larger audience I would like to get our opinion
about it. Please feel very free to comment it, thanks !
The goal of this RFC is to understand if a common ioctl for specific memory
regions allocations is needed/welcome.
Obviously it will not replace allocation done in linux kernel frameworks like
v4l2 or dmr/kms, but offer an alternative when you don't want/need to use them
for buffer allocation.
"Unix Device Memory Allocator" project [1] wants to create a userland library
which may allow to select, depending of the devices constraint, the best
back-end for allocation. With this RFC I would to propose to have common ioctl
for a maximum of allocator to avoid to duplicated back-end for this library.
Since the beginning it is a problem to allocate contiguous memory (CMA) without
using v4l2 or drm/kms so the first allocator available in this RFC use CMA
memory.
An other question is: do we have others memory regions that could be interested
by this new framework ? I have in mind that some title memory regions could use
it or replace ION heaps (system, carveout etc...).
Maybe it only solve CMA allocation issue, in this case no need to create a
common ioctl, a custom should be enough.
Maybe the first thing to do is to change the name and the location of this
module, suggestions are welcome.
[1] https://github.com/cubanismo/allocator
Benjamin Gaignard (2):
Create Simple Allocator module
add CMA simple allocator module
drivers/Kconfig | 2 +
drivers/Makefile | 1 +
drivers/simpleallocator/Kconfig | 17 +++
drivers/simpleallocator/Makefile | 2 +
drivers/simpleallocator/simple-allocator-cma.c | 163 +++++++++++++++++++++++
drivers/simpleallocator/simple-allocator-priv.h | 27 ++++
drivers/simpleallocator/simple-allocator.c | 167 ++++++++++++++++++++++++
include/uapi/linux/simple-allocator.h | 35 +++++
8 files changed, 414 insertions(+)
create mode 100644 drivers/simpleallocator/Kconfig
create mode 100644 drivers/simpleallocator/Makefile
create mode 100644 drivers/simpleallocator/simple-allocator-cma.c
create mode 100644 drivers/simpleallocator/simple-allocator-priv.h
create mode 100644 drivers/simpleallocator/simple-allocator.c
create mode 100644 include/uapi/linux/simple-allocator.h
--
1.9.1