summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-09-30 11:33:23 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-09-30 11:33:23 -0600
commit89ca2e2c45e6e48a2d47ebb5bf845bfec88e4319 (patch)
treea4a13dd84e201ffd7398caffd3043265621e1aa4 /include/linux
parent8d9657e7e077f13fd3e4e8091d3f1c5ca81f6649 (diff)
parent46692be6dd06ce405cb09cf8338b1f0edbbfb295 (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.h8
-rw-r--r--include/linux/device.h1
-rw-r--r--include/linux/hrtimer.h6
-rw-r--r--include/linux/qcom_tspp.h99
-rw-r--r--include/linux/qdsp6v2/apr.h4
-rw-r--r--include/linux/qdsp6v2/audio_notifier.h105
-rw-r--r--include/linux/qdsp6v2/audio_pdr.h101
-rw-r--r--include/linux/qdsp6v2/audio_ssr.h78
-rw-r--r--include/linux/sched.h43
-rw-r--r--include/linux/tick.h12
-rw-r--r--include/linux/timer.h3
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:
*/