diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-09-30 11:33:23 -0600 |
|---|---|---|
| committer | Linux Build Service Account <lnxbuild@localhost> | 2016-09-30 11:33:23 -0600 |
| commit | 89ca2e2c45e6e48a2d47ebb5bf845bfec88e4319 (patch) | |
| tree | a4a13dd84e201ffd7398caffd3043265621e1aa4 /include/linux | |
| parent | 8d9657e7e077f13fd3e4e8091d3f1c5ca81f6649 (diff) | |
| parent | 46692be6dd06ce405cb09cf8338b1f0edbbfb295 (diff) | |
Promotion of kernel.lnx.4.4-160930.
CRs Change ID Subject
--------------------------------------------------------------------------------------------------------------
1054226 Ifefb2f1cf6c24af7bc46fc62797955b8c8ad5815 perf: Add cpu isolation awareness
1055668 Ibb8afffdc1e4780a48d085918cb6d6cf84cc0dba msm: camera: Export IR LED device to mm-qcamera-daemon
1065513 I45690b239c73f636538b864f0c4a7e539a02eedb input: touchscreen: Change dev_pm_ops for Goodix driver
1069068 Ie19fececd9d2bc6cd3328a6c63c956bcc9eed9a6 arm64: process: Reduce the no. of bytes of data around r
1064336 I18a27267eebdca2c87bf4bffc11a120822cdc7c2 msm: ipa3: hal: change FnR prints to low
1063261 Id38c8e21a853907c884bccd2978f2fd0a547a1ca wil6210: fix wiphy registration sequence
1067981 I3f78196927501f582c36d5815096581185d797b4 soc: qcom: glink: Fix uninitialzed return value.
1065513 I3a00fb46106f859128f0fa9b8c99b5d6ba24bc7b input: touchscreen: Code clean-up for Goodix driver
1054226 I2c62af441fb9e5ba9f29719853a63e4c8f2d031b defconfig: msm: Disable core control helper
1054000 I783b7df9c7e0253e5dc88bd60e0b5300e26fba56 drivers: soc: Enable APR driver to use audio notifier
1044635 1053246 I8c5b8ffc62d34a44bfb47ec4f11477d4320d30a8 misc: qcom: qdsp6v2: SSR recovery support for NT decoder
1001175 I7d1e4d5cc421b800d2f00b6d23f6ff19ba4c4c7d msm: pcie: configurable PERST propagation delay
1067178 I9951f061ad22cc91eba1c75aba3bdfbdde904cb9 ASoC: wcd934x: Add dapm ignore suspend for backend dais
1068464 I479e23db73a64e0fc1371e6b5abfaf1c8969954b ARM: dts: msm: correct PM8005 S1 min/max voltage for msm
1053827 Icee01f6ba95e469acac9eed6bf2fdbc83947f5a8 msm: kgsl: Revisit the GPU snapshot dumping
1068464 I8539ca3a3456b9562e7ff0e48fd7824c15cea68f regulator: cpr3-mmss-regulator: update reference voltage
1066695 I11e71639291479d544849d0f8672b9384fa34d0a ARM: dts: msm: Add SMP2P entries for MSMTRITON
1064336 Ie1f0f48ffc1fd67fc8a2074d3d334fb8cd29c99f msm: ipa3: change FnR prints to low
1054000 I15325c1385eaa0f0cca2c07130f2b4a997d98e1f drivers: soc: Add Audio Notifier, PDR, and SSR drivers
1071217 I37e6f76b60ef0085d102c5d98179b467f6b77dee ARM: dts: msm: Add bus name to venus pil for MSMCOBALT
1060610 I88b6c0748e6683b2f11b751840ab26e3ed397b70 ASoC: wcd9335: add handset speaker gain mixer control
1054000 Ief6e89b003aa1e2b02f33e21e3cb17f8731425ad ASoC: msmcobalt: Add Audio Notifier, PDR, and SSR to Kco
1054226 I62acddeb707fc7d5626580166b3466e63f45fd89 core_ctl_helper: Remove code since it is not used anymor
1056661 Ida0d2d010f7bd226d7e2221f63e64a1d7e5a9075 ARM: dts: msm: Remove 710Mhz frequency for A540v2 GPU.
1063261 I51e58438672a45d210df5db3ac813e656cb525df wil6210: change HALP logging category to IRQ
1062271 If462fe3d82f139d72547f82dc7eb564f83cb35bf ASoC: msm: initialize the params array before using it
1054226 I4f1514ba5bac2e259a1105fcafb31d6a92ddd249 sched/core_ctl: Integrate core control with cpu isolatio
1063261 Ibc1e6dc2994268a60384b7d9bd459abc3791a0c4 wil6210: fix protection of wil->scan_request
1066424 Ic6dd2d1e7f829630dc6eae5ff74fae04f7fc7f9b ARM: dts: msm: enable more FG interrupts for PMICOBALT
1066695 I82e992df1bfa1113843a0772ca8b88e48050dd8d ARM: dts: msm: Add glink_pkt devices for MSMTRITON
1069455 Ibae066276b099ffb78c72a890a689f83e4df56a9 thermal: tsens: Update sensor ID index
1054226 Ice1a9503666a2b720bdb324289ca55ceb33097cd cpumask: Add cpu isolation support
1054226 I96505aeb9d07a6fa3a2c28648ffa299e0cfa2e41 sched/core_ctl: Refactor cpu data
1054226 Ib911a0d34c250c4df020bdb265b92d2b8df8db93 timer: Do not require CPUSETS to be enabled for migratio
1054226 Ie4c6cb1496ae3490d81681f1ad51c8103caa0014 soc: qcom: watchdog_v2: Add support for cpu isolation
1068464 I3fbfa4c1fc5a6b4f30f8acaf659d2abcc05a7d16 ARM: dts: msm: modify VDD_GFX CPR ceiling voltages for m
1066695 I1aaeec4eea40fedbadf8b6008233dbd6ce5b3312 ARM: dts: msm: Add ipc-spinlock entry for MSMTRITON
1054226 Icc4d1c183e993b4b3c9b96ec9779c234e73ecab7 hrtimer: make sure PINNED flag is cleared after removing
1069455 I63e2a0a29f6bbe787fa10170c28569cf692d2807 ARM: dts: msm: Update TSENS sensor ID for MSMCOBALT
1070187 Id2de8e2ac94476c1a4927f719f2987a31d692ab5 ARM: dts: msm: modify VDD_APC0/1 CPR voltages for msmcob
1065513 I0a9037eac6e30a6319919043dd2ef1c226663af9 input: touchscreen: Remove irq polling from Goodix drive
1065513 I5132854367330a9b47f678409cbe6a45f2b5abb3 msm: reap unused kernel files
1063261 I20bc8d4b2b58fc3235ec3fe778738055d7535276 wil6210: extract firmware capabilities from FW file
1069380 Ic332f87666e405edbf3511671828ba824af1f3a2 ARM: dts: msm: Fix smem rpm xprt entry for msmfalcon
1054226 I8624e0659b86b7b8fa425a3fafdb0784fe005124 timer: create timer_quiesce_cpu() to isolate CPU from ti
1056910 I09fcc019133f4d37b7be3287da8e0733e40fc0ac sched: constrain HMP scheduler tunable range with in bet
1063261 Ib5c55a37208d76505658635b12afc88552d5a220 wil6210: support rx key setting for all TIDs
1071204 Ib44789559c69e5808ed362cf9191486c93b2b66e msm: mink: Accept zero args for invoke command
1071752 I1dddc7df26caa1556e57128603afd32b2613ebde soc: qcom: pil: add PBL spare error status
1066569 I99ce1e5940506a5e65debfe822460c210a276b00 thermal: adc_tm: Initialize ADC parameters
1054000 I2ab027d4a6e2cb98df5358e24f6bebacd9aecca7 drivers: soc: Add Kconfigs for Audio Notifier, PDR, and
1002389 Id74650d5c4aaf9f84a56372f60ff5a40374e8f7b diag: Fix possible buffer corruption by proper typecasti
1054226 I5975f1e5d7a1947dc5ee1cf8a0c16ec88b0fc6fb defconfig: msmcortex: Enable core control
1065513 I3ade13181957d327ad9d0266b1999a4b0f2d8d1a input: touchscreen: Add threaded irq support to Goodix d
1069084 I916e37bd79a6645bdc186a78a65051ce1c4dd475 soc: qcom: Listen to SUBSYS_AFTER_SHUTDOWN notification
1054226 I401de0b52fa6d20573187265ee56edd543b1419e vmstat: Add cpu isolation awareness
1066422 Id9f28a0eeb2a904aca41eb46d0215d80287e0b88 qcom-charger: fg-util: add float decode function
1071363 I542fab59eadbea404c0001d25315172cc993488b ASoC: wcd934x: Avoid pop during dsd path tear down
1054226 I51259ea41e3bd5cdba50b718201a6840174a7224 hrtimer: create hrtimer_quiesce_cpu() to isolate CPU fro
1054226 I5d849dfd29aa5bb594454473768d7db1da258028 sched/tick: Ensure timers does not get queued on isolate
1054226 I7b50778615541a64f9956573757c7f28748c4f69 irq: Make irq affinity function cpu isolation aware
1068946 I6943b7f5565ad95eddb9e3d30de5efbc47106e3d qpnp-smb2: support batteryless platforms
1054226 I83e9fbb800df259616a145d311b50627dc42a5ff pmqos: Enable cpu isolation awareness
1054226 I632f37874ef79887ee1202a028ef734f392d6ed0 hrtimer.h: prevent pinned timer state from breaking inac
1066695 I53657de1a41e727b29793f02c7f2c1a43db1c96c ARM: dts: msm: Add G-Link SSR entries for MSMTRITON
1055668 I63da161f90bce2c33d1e7e9d5822c8635e307fd5 msm: camera: Export IR CUT device to mm-qcamera-daemon
1054226 I88a728ee1d54aaa887fab52e5e40d1d4e4fc69ca watchdog: Add support for cpu isolation
1070189 I791941fbede4b136c3f24d15b7fb0b60dd5477e6 ASoC: wcd934x: Check for null pointer before access
1066695 I6ee171881943d8ab77445ede1c6ee714ed171d4d ARM: dts: msm: Add SMEM entry for MSMTRITON
1054226 I370e404001344e635a663822b07557abbe0f6f52 timer: Add function to migrate timers
1046649 I941f91eeba01f4e7aa5427056bc57875e7edf197 msm: kgsl: Add memory and periphery clock control for A5
1068888 I5637e52be59ea9504ea6ae317394bef0c28c7865 net: ipc_router: fix NULL pointer de-reference issue
1066695 I276db2a07870864fca046627a615a30bc4e3936e ARM: dts: msm: Add IPC Router devices for MSMTRITON
1067981 I82b08ff548a9abb0538a0ba24f699a99547ec7b7 soc: qcom: glink_ssr: Fix uninitialized variable
1066695 I1e59ec8028e128a764d3a79d446b5e8d650937b1 ARM: dts: msm: Add G-Link SMEM Transport entries for MSM
1054226 I24d6e91b6dff468c640c2fe3a37a7f31b6f0c79a timer: Ensure timers are not running before migrating
1054226 I65943d8e4a9eac1f9f5a40ad5aaf166679215f48 trace: Move core control trace events to scheduler
1065513 I280f2201c69838ad4da8eb94e9f10768f54ed457 input: touchscreen: Fix issues in suspend path
1065513 I6c18e153ddf18667ca83d47df20c71bce6dbfa21 input: touchscreen: Remove redundant code from Goodix dr
1055668 I2e04fa47efd1454bb487eca67bd9ceaeab3e9edf msm: camera: Add a driver to control IR LED device
1054226 Ia78e701468ea3828195c2a15c9cf9fafd099804a core_ctrl: Move core control into kernel
1054226 If2d30000f068afc50db953940f4636ef6a089b24 sched/core: Add trace point for cpu isolation
1057562 I76c9a9e44755a4a77e6cffb1dc07f5b28c8b34b8 Migrate mpq demux driver from kernel 3.18 to 4.4
1036232 If6c273d9a86f9fc4bc841388b11b96c385dc64f4 net: cnss: Add support to get fw files for QCA SDIO targ
1068464 I2b0a8e5353c9bce25c965a8b6ead7494454466c9 ARM: dts: msm: modify VDD_GFX CPR voltage adjustments fo
1065513 Ic2b1b2562b63ccecdf15bdc64ad7e45996d196d3 input: touchscreen: Add debugfs support for suspend/resu
1070872 I6cbe4167ab9d980b75f4fefdd4add0d8e8adaef8 ARM: dts: msm: add slimbus7 and slimbus8 cpu dais for ms
1054226 If3b3770e547971809e789ea7c8033c48ec2aa92d hrtimer: update timer->state with 'pinned' information
1064336 I5cfadb3ee7cb339b89b0c428bae46d3802476eb9 msm: ipa3: increase SSR tag timeout
1055668 I30d1c4e6c40b8e58a70f06db9e05231b4c7f676f msm: camera: Add a driver to control IR CUT device
1054226 I0bbddb56238c2958c5987877c5bfc3e79afa67cc sched: add cpu isolation support
1051762 Ife6146d28c8bc834a79e861959eca03e58e12d5e ASoC: msm: qdsp6v2: Change device switch handling
1063261 I95c14c0fe7a33c078eb7d9aa44dd97a64f9b0fae wil6210: align to latest auto generated wmi.h
1063261 I169e0c94edf5df31336af1ede36900ec337f4314 wil6210: align to latest auto generated wmi.h
1071938 I7ab180e06ececf8136903ee04565b8b4a2bf3524 icnss: update logs for QMI rejected messages
1057065 Ie6234ae30ad47a063982e5cc50f4ecedf1f61de2 msm: pcie: verify EP is accessible before conf restore
993625 I2c99df5de44a6fd924ce7f5921db0e1cf3ba5d11 msm: pil: Adding function name and buffer size informati
1065983 I12154b0aa315fde6dd92267d4c8f4a78a6f0236f ASoC: msmcobalt: send ANC config for WCD9340 codec
1071464 Ic3ef2229fa8552301e09dfb912e79e044a81324f usb: dwc3: fix overriding core clock rate to default max
1054000 Ib88a71e2fdb2b58fd5f87a65cb7d3253884f2d97 ASoC: msmcobalt: Enable msmcobalt to use audio notifier
1063261 Ifb92501aab14843309fed8e1214a867b2ccccfce wil6210: Fix driver down flow
1065983 I8c83f6305dbc0a40b67bf2ffd53d37a0abdcf953 ASoC: wcd934x: enable rate converter clock for AANC
1054226 I07702bb5b738c1c75c49a2ca4cb08be0231ccb12 smp: Do not wake up all idle CPUs
1063261 Id17271823d167677a323dd1f52c7de4c6025b56e wil6210: prevent usage of incorrect TX hwtail
1063261 I79f8522ae84dd209cb98c3bbc52cfaeb199dd342 wil6210: fix stop p2p device handling
1057562 Ia50bd897f6bf4c0ea7adc27d53a657090a09e229 Migrate demux driver from kernel 3.18 to 4.4
1066563 I0e21c5966e0072eab826c92fc332c54e11cb0b23 thermal: tsens: Update readl call in msm_tsens_get_temp(
1054226 I6a13e8dda99130ca794e5b6f51600f4c57a3e921 drivers/base: cpu: Add node for cpu isolation
Change-Id: If82c9559e44520d270bc164fcb86b382b71301ff
CRs-Fixed: 1036232, 1069455, 1071204, 1001175, 1053827, 1057562, 1060610, 1068946, 1071363, 1071938, 1068888, 1069380, 1069068, 1065983, 1055668, 1066695, 1067981, 1063261, 1064336, 1067178, 1066422, 1066424, 1065513, 1066569, 1070189, 1057065, 1068464, 1071217, 1066563, 1069084, 1070187, 993625, 1053246, 1070872, 1051762, 1046649, 1056661, 1062271, 1002389, 1071752, 1056910, 1054000, 1044635, 1054226, 1071464
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/cpumask.h | 8 | ||||
| -rw-r--r-- | include/linux/device.h | 1 | ||||
| -rw-r--r-- | include/linux/hrtimer.h | 6 | ||||
| -rw-r--r-- | include/linux/qcom_tspp.h | 99 | ||||
| -rw-r--r-- | include/linux/qdsp6v2/apr.h | 4 | ||||
| -rw-r--r-- | include/linux/qdsp6v2/audio_notifier.h | 105 | ||||
| -rw-r--r-- | include/linux/qdsp6v2/audio_pdr.h | 101 | ||||
| -rw-r--r-- | include/linux/qdsp6v2/audio_ssr.h | 78 | ||||
| -rw-r--r-- | include/linux/sched.h | 43 | ||||
| -rw-r--r-- | include/linux/tick.h | 12 | ||||
| -rw-r--r-- | include/linux/timer.h | 3 |
11 files changed, 456 insertions, 4 deletions
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index 59915ea5373c..0eab4811ee92 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h @@ -53,6 +53,7 @@ extern int nr_cpu_ids; * cpu_present_mask - has bit 'cpu' set iff cpu is populated * cpu_online_mask - has bit 'cpu' set iff cpu available to scheduler * cpu_active_mask - has bit 'cpu' set iff cpu available to migration + * cpu_isolated_mask- has bit 'cpu' set iff cpu isolated * * If !CONFIG_HOTPLUG_CPU, present == possible, and active == online. * @@ -89,25 +90,30 @@ extern const struct cpumask *const cpu_possible_mask; extern const struct cpumask *const cpu_online_mask; extern const struct cpumask *const cpu_present_mask; extern const struct cpumask *const cpu_active_mask; +extern const struct cpumask *const cpu_isolated_mask; #if NR_CPUS > 1 #define num_online_cpus() cpumask_weight(cpu_online_mask) #define num_possible_cpus() cpumask_weight(cpu_possible_mask) #define num_present_cpus() cpumask_weight(cpu_present_mask) #define num_active_cpus() cpumask_weight(cpu_active_mask) +#define num_isolated_cpus() cpumask_weight(cpu_isolated_mask) #define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask) #define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask) #define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask) #define cpu_active(cpu) cpumask_test_cpu((cpu), cpu_active_mask) +#define cpu_isolated(cpu) cpumask_test_cpu((cpu), cpu_isolated_mask) #else #define num_online_cpus() 1U #define num_possible_cpus() 1U #define num_present_cpus() 1U #define num_active_cpus() 1U +#define num_isolated_cpus() 0U #define cpu_online(cpu) ((cpu) == 0) #define cpu_possible(cpu) ((cpu) == 0) #define cpu_present(cpu) ((cpu) == 0) #define cpu_active(cpu) ((cpu) == 0) +#define cpu_isolated(cpu) ((cpu) == 0) #endif /* verify cpu argument to cpumask_* operators */ @@ -714,12 +720,14 @@ extern const DECLARE_BITMAP(cpu_all_bits, NR_CPUS); #define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask) #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) #define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask) +#define for_each_isolated_cpu(cpu) for_each_cpu((cpu), cpu_isolated_mask) /* Wrappers for arch boot code to manipulate normally-constant masks */ void set_cpu_possible(unsigned int cpu, bool possible); void set_cpu_present(unsigned int cpu, bool present); void set_cpu_online(unsigned int cpu, bool online); void set_cpu_active(unsigned int cpu, bool active); +void set_cpu_isolated(unsigned int cpu, bool isolated); void init_cpu_present(const struct cpumask *src); void init_cpu_possible(const struct cpumask *src); void init_cpu_online(const struct cpumask *src); diff --git a/include/linux/device.h b/include/linux/device.h index 9f27351c6b9c..4b4e2d5ce6e7 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -1023,6 +1023,7 @@ static inline bool device_supports_offline(struct device *dev) extern void lock_device_hotplug(void); extern void unlock_device_hotplug(void); extern int lock_device_hotplug_sysfs(void); +extern void lock_device_hotplug_assert(void); extern int device_offline(struct device *dev); extern int device_online(struct device *dev); extern void set_primary_fwnode(struct device *dev, struct fwnode_handle *fwnode); diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 2ead22dd74a0..952adcacc4cf 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h @@ -53,6 +53,7 @@ enum hrtimer_restart { * * 0x00 inactive * 0x01 enqueued into rbtree + * 0x02 timer is pinned to a cpu * * The callback state is not part of the timer->state because clearing it would * mean touching the timer after the callback, this makes it impossible to free @@ -72,6 +73,8 @@ enum hrtimer_restart { */ #define HRTIMER_STATE_INACTIVE 0x00 #define HRTIMER_STATE_ENQUEUED 0x01 +#define HRTIMER_PINNED_SHIFT 1 +#define HRTIMER_STATE_PINNED (1 << HRTIMER_PINNED_SHIFT) /** * struct hrtimer - the basic hrtimer structure @@ -357,6 +360,9 @@ DECLARE_PER_CPU(struct tick_device, tick_cpu_device); /* Exported timer functions: */ +/* To be used from cpusets, only */ +extern void hrtimer_quiesce_cpu(void *cpup); + /* Initialize timers: */ extern void hrtimer_init(struct hrtimer *timer, clockid_t which_clock, enum hrtimer_mode mode); diff --git a/include/linux/qcom_tspp.h b/include/linux/qcom_tspp.h new file mode 100644 index 000000000000..28e6695fb057 --- /dev/null +++ b/include/linux/qcom_tspp.h @@ -0,0 +1,99 @@ +/* Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#ifndef _MSM_TSPP_H_ +#define _MSM_TSPP_H_ + +struct tspp_data_descriptor { + void *virt_base; /* logical address of the actual data */ + phys_addr_t phys_base; /* physical address of the actual data */ + u32 size; /* size of buffer in bytes */ + int id; /* unique identifier */ + void *user; /* user-defined data */ +}; + +enum tspp_key_parity { + TSPP_KEY_PARITY_EVEN, + TSPP_KEY_PARITY_ODD +}; + +struct tspp_key { + enum tspp_key_parity parity; + int lsb; + int msb; +}; + +enum tspp_source { + TSPP_SOURCE_TSIF0, + TSPP_SOURCE_TSIF1, + TSPP_SOURCE_MEM, + TSPP_SOURCE_NONE = -1 +}; + +enum tspp_mode { + TSPP_MODE_DISABLED, + TSPP_MODE_PES, + TSPP_MODE_RAW, + TSPP_MODE_RAW_NO_SUFFIX +}; + +enum tspp_tsif_mode { + TSPP_TSIF_MODE_LOOPBACK, /* loopback mode */ + TSPP_TSIF_MODE_1, /* without sync */ + TSPP_TSIF_MODE_2 /* with sync signal */ +}; + +struct tspp_filter { + int pid; + int mask; + enum tspp_mode mode; + unsigned int priority; /* 0 - 15 */ + int decrypt; + enum tspp_source source; +}; + +struct tspp_select_source { + enum tspp_source source; + enum tspp_tsif_mode mode; + int clk_inverse; + int data_inverse; + int sync_inverse; + int enable_inverse; +}; + +typedef void (tspp_notifier)(int channel_id, void *user); +typedef void* (tspp_allocator)(int channel_id, u32 size, + phys_addr_t *phys_base, void *user); +typedef void (tspp_memfree)(int channel_id, u32 size, + void *virt_base, phys_addr_t phys_base, void *user); + +/* Kernel API functions */ +int tspp_open_stream(u32 dev, u32 channel_id, + struct tspp_select_source *source); +int tspp_close_stream(u32 dev, u32 channel_id); +int tspp_open_channel(u32 dev, u32 channel_id); +int tspp_close_channel(u32 dev, u32 channel_id); +int tspp_get_ref_clk_counter(u32 dev, + enum tspp_source source, u32 *tcr_counter); +int tspp_add_filter(u32 dev, u32 channel_id, struct tspp_filter *filter); +int tspp_remove_filter(u32 dev, u32 channel_id, struct tspp_filter *filter); +int tspp_set_key(u32 dev, u32 channel_id, struct tspp_key *key); +int tspp_register_notification(u32 dev, u32 channel_id, tspp_notifier *notify, + void *data, u32 timer_ms); +int tspp_unregister_notification(u32 dev, u32 channel_id); +const struct tspp_data_descriptor *tspp_get_buffer(u32 dev, u32 channel_id); +int tspp_release_buffer(u32 dev, u32 channel_id, u32 descriptor_id); +int tspp_allocate_buffers(u32 dev, u32 channel_id, u32 count, + u32 size, u32 int_freq, tspp_allocator *alloc, + tspp_memfree *memfree, void *user); + +#endif /* _MSM_TSPP_H_ */ diff --git a/include/linux/qdsp6v2/apr.h b/include/linux/qdsp6v2/apr.h index 84c822234e00..29deb3ca5ac7 100644 --- a/include/linux/qdsp6v2/apr.h +++ b/include/linux/qdsp6v2/apr.h @@ -172,8 +172,8 @@ inline int apr_fill_hdr(void *handle, uint32_t *buf, uint16_t src_port, int apr_send_pkt(void *handle, uint32_t *buf); int apr_deregister(void *handle); -void subsys_notif_register(struct notifier_block *mod_notif, - struct notifier_block *lp_notif); +void subsys_notif_register(char *client_name, int domain, + struct notifier_block *nb); int apr_get_dest_id(char *dest); uint16_t apr_get_data_src(struct apr_hdr *hdr); void change_q6_state(int state); diff --git a/include/linux/qdsp6v2/audio_notifier.h b/include/linux/qdsp6v2/audio_notifier.h new file mode 100644 index 000000000000..3587b49a05c6 --- /dev/null +++ b/include/linux/qdsp6v2/audio_notifier.h @@ -0,0 +1,105 @@ +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __AUDIO_NOTIFIER_H_ +#define __AUDIO_NOTIFIER_H_ + +/* State of the notifier domain */ +enum { + AUDIO_NOTIFIER_SERVICE_DOWN, + AUDIO_NOTIFIER_SERVICE_UP +}; + +/* Service order determines connection priority + * Highest number connected first + */ +enum { + AUDIO_NOTIFIER_SSR_SERVICE, + AUDIO_NOTIFIER_PDR_SERVICE, + AUDIO_NOTIFIER_MAX_SERVICES +}; + +enum { + AUDIO_NOTIFIER_ADSP_DOMAIN, + AUDIO_NOTIFIER_MODEM_DOMAIN, + AUDIO_NOTIFIER_MAX_DOMAINS +}; + +/* Structure populated in void *data of nb function + * callback used for audio_notifier_register + */ +struct audio_notifier_cb_data { + int service; + int domain; +}; + +#ifdef CONFIG_MSM_QDSP6_NOTIFIER + +/* + * Use audio_notifier_register to register any audio + * clients who need to be notified of a remote process. + * This API will determine and register the client with + * the best available subsystem (SSR or PDR) for that + * domain (Adsp or Modem). When an event is sent from that + * domain the notifier block callback function will be called. + * + * client_name - A unique user name defined by the client. + * If the same name is used for multiple calls each will + * be tracked & called back separately and a single call + * to deregister will delete them all. + * domain - Domain the client wants to get events from. + * AUDIO_NOTIFIER_ADSP_DOMAIN + * AUDIO_NOTIFIER_MODEM_DOMAIN + * *nb - Pointer to a notifier block. Provide a callback function + * to be notified of an even on that domain. + * + * nb_func(struct notifier_block *this, unsigned long opcode, void *data) + * this - pointer to own nb + * opcode - event from registered domain + * AUDIO_NOTIFIER_SERVICE_DOWN + * AUDIO_NOTIFIER_SERVICE_UP + * *data - pointer to struct audio_notifier_cb_data + * + * Returns: Success: 0 + * Error: -# + */ +int audio_notifier_register(char *client_name, int domain, + struct notifier_block *nb); + +/* + * Use audio_notifier_deregister to deregister the clients from + * all domains registered using audio_notifier_register that + * match the client name. + * + * client_name - Unique user name used in audio_notifier_register. + * Returns: Success: 0 + * Error: -# + */ +int audio_notifier_deregister(char *client_name); + +#else + +static inline int audio_notifier_register(char *client_name, int domain, + struct notifier_block *nb) +{ + return -ENODEV; +} + +static inline int audio_notifier_deregister(char *client_name) +{ + return 0; +} + +#endif /* CONFIG_MSM_QDSP6_PDR */ + +#endif diff --git a/include/linux/qdsp6v2/audio_pdr.h b/include/linux/qdsp6v2/audio_pdr.h new file mode 100644 index 000000000000..b8eb1be3ee64 --- /dev/null +++ b/include/linux/qdsp6v2/audio_pdr.h @@ -0,0 +1,101 @@ +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __AUDIO_PDR_H_ +#define __AUDIO_PDR_H_ + +enum { + AUDIO_PDR_DOMAIN_ADSP, + AUDIO_PDR_DOMAIN_MAX +}; + +enum { + AUDIO_PDR_FRAMEWORK_DOWN, + AUDIO_PDR_FRAMEWORK_UP +}; + +#ifdef CONFIG_MSM_QDSP6_PDR + +/* + * Use audio_pdr_register to register with the PDR subsystem this + * should be done before module late init otherwise notification + * of the AUDIO_PDR_FRAMEWORK_UP cannot be guaranteed. + * + * *nb - Pointer to a notifier block. Provide a callback function + * to be notified once the PDR framework has been initialized. + * Callback will receive either the AUDIO_PDR_FRAMEWORK_DOWN + * or AUDIO_PDR_FRAMEWORK_UP ioctl depending on the state of + * the PDR framework. + * + * Returns: Success: 0 + * Failure: Error code + */ +int audio_pdr_register(struct notifier_block *nb); + +/* + * Use audio_pdr_service_register to register with a PDR service + * Function should be called after nb callback registered with + * audio_pdr_register has been called back with the + * AUDIO_PDR_FRAMEWORK_UP ioctl. + * + * domain_id - Domain to use, example: AUDIO_PDR_ADSP + * *nb - Pointer to a notifier block. Provide a callback function + * that will be notified of the state of the domain + * requested. The ioctls received by the callback are + * defined in service-notifier.h. + * + * Returns: Success: Client handle + * Failure: Pointer error code + */ +void *audio_pdr_service_register(int domain_id, + struct notifier_block *nb, int *curr_state); + + /* + * Use audio_pdr_service_deregister to deregister with a PDR + * service that was registered using the audio_pdr_service_register + * API. + * + * *service_handle - Service handle returned by audio_pdr_service_register + * *nb - Pointer to the notifier block. Used in the call to + * audio_pdr_service_register. + * + * Returns: Success: Client handle + * Failure: Error code + */ +int audio_pdr_service_deregister(void *service_handle, + struct notifier_block *nb); + +#else + +static inline int audio_pdr_register(struct notifier_block *nb) +{ + return -ENODEV; +} + + +static inline void *audio_pdr_service_register(int domain_id, + struct notifier_block *nb, + int *curr_state) +{ + return NULL; +} + +static inline int audio_pdr_service_deregister(void *service_handle, + struct notifier_block *nb) +{ + return 0; +} + +#endif /* CONFIG_MSM_QDSP6_PDR */ + +#endif diff --git a/include/linux/qdsp6v2/audio_ssr.h b/include/linux/qdsp6v2/audio_ssr.h new file mode 100644 index 000000000000..a807021ba7ca --- /dev/null +++ b/include/linux/qdsp6v2/audio_ssr.h @@ -0,0 +1,78 @@ +/* Copyright (c) 2016, The Linux Foundation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 and + * only version 2 as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + */ + +#ifndef __AUDIO_SSR_H_ +#define __AUDIO_SSR_H_ + +enum { + AUDIO_SSR_DOMAIN_ADSP, + AUDIO_SSR_DOMAIN_MODEM, + AUDIO_SSR_DOMAIN_MAX +}; + +#ifdef CONFIG_MSM_QDSP6_SSR + +/* + * Use audio_ssr_register to register with the SSR subsystem + * + * domain_id - Service to use, example: AUDIO_SSR_DOMAIN_ADSP + * *nb - Pointer to a notifier block. Provide a callback function + * to be notified of an event for that service. The ioctls + * used by the callback are defined in subsystem_notif.h. + * + * Returns: Success: Client handle + * Failure: Pointer error code + */ +void *audio_ssr_register(int domain_id, struct notifier_block *nb); + +/* + * Use audio_ssr_deregister to register with the SSR subsystem + * + * handle - Handle received from audio_ssr_register + * *nb - Pointer to a notifier block. Callback function + * Used from audio_ssr_register. + * + * Returns: Success: 0 + * Failure: Error code + */ +int audio_ssr_deregister(void *handle, struct notifier_block *nb); + + +/* + * Use audio_ssr_send_nmi to force a RAM dump on ADSP + * down event. + * + * *ssr_cb_data - *data received from notifier callback + */ +void audio_ssr_send_nmi(void *ssr_cb_data); + +#else + +static inline void *audio_ssr_register(int domain_id, + struct notifier_block *nb) +{ + return NULL; +} + +static inline int audio_ssr_deregister(void *handle, struct notifier_block *nb) +{ + return 0; +} + +static inline void audio_ssr_send_nmi(void *ssr_cb_data) +{ +} + +#endif /* CONFIG_MSM_QDSP6_SSR */ + +#endif diff --git a/include/linux/sched.h b/include/linux/sched.h index 4701e0403167..a395d8a9ff73 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -363,6 +363,41 @@ extern cpumask_var_t cpu_isolated_map; extern int runqueue_is_locked(int cpu); +#ifdef CONFIG_HOTPLUG_CPU +extern int sched_isolate_count(const cpumask_t *mask, bool include_offline); +extern int sched_isolate_cpu(int cpu); +extern int sched_unisolate_cpu(int cpu); +extern int sched_unisolate_cpu_unlocked(int cpu); +#else +static inline int sched_isolate_count(const cpumask_t *mask, + bool include_offline) +{ + cpumask_t count_mask; + + if (include_offline) + cpumask_andnot(&count_mask, mask, cpu_online_mask); + else + return 0; + + return cpumask_weight(&count_mask); +} + +static inline int sched_isolate_cpu(int cpu) +{ + return 0; +} + +static inline int sched_unisolate_cpu(int cpu) +{ + return 0; +} + +static inline int sched_unisolate_cpu_unlocked(int cpu) +{ + return 0; +} +#endif + #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) extern void nohz_balance_enter_idle(int cpu); extern void set_cpu_sd_state_idle(void); @@ -409,6 +444,8 @@ extern int proc_dowatchdog_thresh(struct ctl_table *table, int write, extern unsigned int softlockup_panic; extern unsigned int hardlockup_panic; void lockup_detector_init(void); +extern void watchdog_enable(unsigned int cpu); +extern void watchdog_disable(unsigned int cpu); #else static inline void touch_softlockup_watchdog_sched(void) { @@ -425,6 +462,12 @@ static inline void touch_all_softlockup_watchdogs(void) static inline void lockup_detector_init(void) { } +static inline void watchdog_enable(unsigned int cpu) +{ +} +static inline void watchdog_disable(unsigned int cpu) +{ +} #endif #ifdef CONFIG_DETECT_HUNG_TASK diff --git a/include/linux/tick.h b/include/linux/tick.h index 5bf3ddade19c..1732697ea419 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h @@ -161,7 +161,15 @@ extern void __tick_nohz_task_switch(void); #else static inline int housekeeping_any_cpu(void) { - return smp_processor_id(); + cpumask_t available; + int cpu; + + cpumask_andnot(&available, cpu_online_mask, cpu_isolated_mask); + cpu = cpumask_any(&available); + if (cpu >= nr_cpu_ids) + cpu = smp_processor_id(); + + return cpu; } static inline bool tick_nohz_full_enabled(void) { return false; } static inline bool tick_nohz_full_cpu(int cpu) { return false; } @@ -187,7 +195,7 @@ static inline bool is_housekeeping_cpu(int cpu) if (tick_nohz_full_enabled()) return cpumask_test_cpu(cpu, housekeeping_mask); #endif - return true; + return !cpu_isolated(cpu); } static inline void housekeeping_affine(struct task_struct *t) diff --git a/include/linux/timer.h b/include/linux/timer.h index 7a5602e19e87..b1617e8932b2 100644 --- a/include/linux/timer.h +++ b/include/linux/timer.h @@ -182,6 +182,9 @@ extern void set_timer_slack(struct timer_list *time, int slack_hz); */ #define NEXT_TIMER_MAX_DELTA ((1UL << 30) - 1) +/* To be used from cpusets, only */ +extern void timer_quiesce_cpu(void *cpup); + /* * Timer-statistics info: */ |
