+++ /dev/null
-From 164d8c6665213c931645578310256da7b1259331 Mon Sep 17 00:00:00 2001
-From: Daniel Borkmann <dborkman@redhat.com>
-Date: Fri, 28 Mar 2014 18:58:22 +0100
-Subject: [PATCH] net: ptp: do not reimplement PTP/BPF classifier
-
-There are currently pch_gbe, cpts, and ixp4xx_eth drivers that open-code
-and reimplement a BPF classifier for the PTP protocol. Since all of them
-effectively do the very same thing and load the very same PTP/BPF filter,
-we can just consolidate that code by introducing ptp_classify_raw() in
-the time-stamping core framework which can be used in drivers.
-
-As drivers get initialized after bootstrapping the core networking
-subsystem, they can make use of ptp_insns wrapped through
-ptp_classify_raw(), which allows to simplify and remove PTP classifier
-setup code in drivers.
-
-Joint work with Alexei Starovoitov.
-
-Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
-Cc: Richard Cochran <richard.cochran@omicron.at>
-Cc: Jiri Benc <jbenc@redhat.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 11 +----------
- drivers/net/ethernet/ti/cpts.c | 10 +---------
- drivers/net/ethernet/xscale/ixp4xx_eth.c | 11 +----------
- include/linux/ptp_classify.h | 10 ++--------
- net/core/timestamping.c | 8 +++++++-
- 5 files changed, 12 insertions(+), 38 deletions(-)
-
-diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-index 464e910..73e6683 100644
---- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-+++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
-@@ -120,10 +120,6 @@ static void pch_gbe_mdio_write(struct net_device *netdev, int addr, int reg,
- int data);
- static void pch_gbe_set_multi(struct net_device *netdev);
-
--static struct sock_filter ptp_filter[] = {
-- PTP_FILTER
--};
--
- static int pch_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid)
- {
- u8 *data = skb->data;
-@@ -131,7 +127,7 @@ static int pch_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid)
- u16 *hi, *id;
- u32 lo;
-
-- if (sk_run_filter(skb, ptp_filter) == PTP_CLASS_NONE)
-+ if (ptp_classify_raw(skb) == PTP_CLASS_NONE)
- return 0;
-
- offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
-@@ -2635,11 +2631,6 @@ static int pch_gbe_probe(struct pci_dev *pdev,
-
- adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number,
- PCI_DEVFN(12, 4));
-- if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) {
-- dev_err(&pdev->dev, "Bad ptp filter\n");
-- ret = -EINVAL;
-- goto err_free_netdev;
-- }
-
- netdev->netdev_ops = &pch_gbe_netdev_ops;
- netdev->watchdog_timeo = PCH_GBE_WATCHDOG_PERIOD;
-diff --git a/drivers/net/ethernet/ti/cpts.c b/drivers/net/ethernet/ti/cpts.c
-index 372cb19..a3bbf59 100644
---- a/drivers/net/ethernet/ti/cpts.c
-+++ b/drivers/net/ethernet/ti/cpts.c
-@@ -31,10 +31,6 @@
-
- #ifdef CONFIG_TI_CPTS
-
--static struct sock_filter ptp_filter[] = {
-- PTP_FILTER
--};
--
- #define cpts_read32(c, r) __raw_readl(&c->reg->r)
- #define cpts_write32(c, v, r) __raw_writel(v, &c->reg->r)
-
-@@ -301,7 +297,7 @@ static u64 cpts_find_ts(struct cpts *cpts, struct sk_buff *skb, int ev_type)
- u64 ns = 0;
- struct cpts_event *event;
- struct list_head *this, *next;
-- unsigned int class = sk_run_filter(skb, ptp_filter);
-+ unsigned int class = ptp_classify_raw(skb);
- unsigned long flags;
- u16 seqid;
- u8 mtype;
-@@ -372,10 +368,6 @@ int cpts_register(struct device *dev, struct cpts *cpts,
- int err, i;
- unsigned long flags;
-
-- if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) {
-- pr_err("cpts: bad ptp filter\n");
-- return -EINVAL;
-- }
- cpts->info = cpts_info;
- cpts->clock = ptp_clock_register(&cpts->info, dev);
- if (IS_ERR(cpts->clock)) {
-diff --git a/drivers/net/ethernet/xscale/ixp4xx_eth.c b/drivers/net/ethernet/xscale/ixp4xx_eth.c
-index 25283f1..f7e0f0f 100644
---- a/drivers/net/ethernet/xscale/ixp4xx_eth.c
-+++ b/drivers/net/ethernet/xscale/ixp4xx_eth.c
-@@ -256,10 +256,6 @@ static int ports_open;
- static struct port *npe_port_tab[MAX_NPES];
- static struct dma_pool *dma_pool;
-
--static struct sock_filter ptp_filter[] = {
-- PTP_FILTER
--};
--
- static int ixp_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid)
- {
- u8 *data = skb->data;
-@@ -267,7 +263,7 @@ static int ixp_ptp_match(struct sk_buff *skb, u16 uid_hi, u32 uid_lo, u16 seqid)
- u16 *hi, *id;
- u32 lo;
-
-- if (sk_run_filter(skb, ptp_filter) != PTP_CLASS_V1_IPV4)
-+ if (ptp_classify_raw(skb) != PTP_CLASS_V1_IPV4)
- return 0;
-
- offset = ETH_HLEN + IPV4_HLEN(data) + UDP_HLEN;
-@@ -1413,11 +1409,6 @@ static int eth_init_one(struct platform_device *pdev)
- char phy_id[MII_BUS_ID_SIZE + 3];
- int err;
-
-- if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) {
-- pr_err("ixp4xx_eth: bad ptp filter\n");
-- return -EINVAL;
-- }
--
- if (!(dev = alloc_etherdev(sizeof(struct port))))
- return -ENOMEM;
-
-diff --git a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h
-index 3decfa4..6d3b0a2 100644
---- a/include/linux/ptp_classify.h
-+++ b/include/linux/ptp_classify.h
-@@ -80,14 +80,6 @@
- #define OP_RETA (BPF_RET | BPF_A)
- #define OP_RETK (BPF_RET | BPF_K)
-
--static inline int ptp_filter_init(struct sock_filter *f, int len)
--{
-- if (OP_LDH == f[0].code)
-- return sk_chk_filter(f, len);
-- else
-- return 0;
--}
--
- #define PTP_FILTER \
- {OP_LDH, 0, 0, OFF_ETYPE }, /* */ \
- {OP_JEQ, 0, 12, ETH_P_IP }, /* f goto L20 */ \
-@@ -133,4 +125,6 @@ static inline int ptp_filter_init(struct sock_filter *f, int len)
- {OP_RETA, 0, 0, 0 }, /* */ \
- /*L6x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE },
-
-+unsigned int ptp_classify_raw(const struct sk_buff *skb);
-+
- #endif
-diff --git a/net/core/timestamping.c b/net/core/timestamping.c
-index e43d56a..9ff26b3 100644
---- a/net/core/timestamping.c
-+++ b/net/core/timestamping.c
-@@ -25,11 +25,17 @@
-
- static struct sk_filter *ptp_insns __read_mostly;
-
-+unsigned int ptp_classify_raw(const struct sk_buff *skb)
-+{
-+ return SK_RUN_FILTER(ptp_insns, skb);
-+}
-+EXPORT_SYMBOL_GPL(ptp_classify_raw);
-+
- static unsigned int classify(const struct sk_buff *skb)
- {
- if (likely(skb->dev && skb->dev->phydev &&
- skb->dev->phydev->drv))
-- return SK_RUN_FILTER(ptp_insns, skb);
-+ return ptp_classify_raw(skb);
- else
- return PTP_CLASS_NONE;
- }
---
-1.8.1.4
-
+++ /dev/null
-From 408eccce32044ee3285a7f6a812723ba3540c3e7 Mon Sep 17 00:00:00 2001
-From: Daniel Borkmann <dborkman@redhat.com>
-Date: Tue, 1 Apr 2014 16:20:23 +0200
-Subject: [PATCH] net: ptp: move PTP classifier in its own file
-
-This commit fixes a build error reported by Fengguang, that is
-triggered when CONFIG_NETWORK_PHY_TIMESTAMPING is not set:
-
- ERROR: "ptp_classify_raw" [drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.ko] undefined!
-
-The fix is to introduce its own file for the PTP BPF classifier,
-so that PTP_1588_CLOCK and/or NETWORK_PHY_TIMESTAMPING can select
-it independently from each other. IXP4xx driver on ARM needs to
-select it as well since it does not seem to select PTP_1588_CLOCK
-or similar that would pull it in automatically.
-
-This also allows for hiding all of the internals of the BPF PTP
-program inside that file, and only exporting relevant API bits
-to drivers.
-
-This patch also adds a kdoc documentation of ptp_classify_raw()
-API to make it clear that it can return PTP_CLASS_* defines. Also,
-the BPF program has been translated into bpf_asm code, so that it
-can be more easily read and altered (extensively documented in [1]).
-
-In the kernel tree under tools/net/ we have bpf_asm and bpf_dbg
-tools, so the commented program can simply be translated via
-`./bpf_asm -c prog` where prog is a file that contains the
-commented code. This makes it easily readable/verifiable and when
-there's a need to change something, jump offsets etc do not need
-to be replaced manually which can be very error prone. Instead,
-a newly translated version via bpf_asm can simply replace the old
-code. I have checked opcode diffs before/after and it's the very
-same filter.
-
- [1] Documentation/networking/filter.txt
-
-Fixes: 164d8c666521 ("net: ptp: do not reimplement PTP/BPF classifier")
-Reported-by: Fengguang Wu <fengguang.wu@intel.com>
-Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
-Cc: Richard Cochran <richardcochran@gmail.com>
-Cc: Jiri Benc <jbenc@redhat.com>
-Acked-by: Richard Cochran <richardcochran@gmail.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- drivers/net/ethernet/xscale/Kconfig | 1 +
- drivers/net/phy/dp83640.c | 1 +
- drivers/ptp/Kconfig | 1 +
- include/linux/ptp_classify.h | 95 ++++++------------------
- include/linux/skbuff.h | 2 -
- net/Kconfig | 4 +
- net/core/Makefile | 1 +
- net/core/ptp_classifier.c | 141 ++++++++++++++++++++++++++++++++++++
- net/core/timestamping.c | 18 -----
- net/socket.c | 5 +-
- 10 files changed, 173 insertions(+), 96 deletions(-)
- create mode 100644 net/core/ptp_classifier.c
-
-diff --git a/drivers/net/ethernet/xscale/Kconfig b/drivers/net/ethernet/xscale/Kconfig
-index 3f43101..b81bc9f 100644
---- a/drivers/net/ethernet/xscale/Kconfig
-+++ b/drivers/net/ethernet/xscale/Kconfig
-@@ -23,6 +23,7 @@ config IXP4XX_ETH
- tristate "Intel IXP4xx Ethernet support"
- depends on ARM && ARCH_IXP4XX && IXP4XX_NPE && IXP4XX_QMGR
- select PHYLIB
-+ select NET_PTP_CLASSIFY
- ---help---
- Say Y here if you want to use built-in Ethernet ports
- on IXP4xx processor.
-diff --git a/drivers/net/phy/dp83640.c b/drivers/net/phy/dp83640.c
-index 352c5e4..6a999e6 100644
---- a/drivers/net/phy/dp83640.c
-+++ b/drivers/net/phy/dp83640.c
-@@ -27,6 +27,7 @@
- #include <linux/module.h>
- #include <linux/net_tstamp.h>
- #include <linux/netdevice.h>
-+#include <linux/if_vlan.h>
- #include <linux/phy.h>
- #include <linux/ptp_classify.h>
- #include <linux/ptp_clock_kernel.h>
-diff --git a/drivers/ptp/Kconfig b/drivers/ptp/Kconfig
-index 5a7910e..6963bdf 100644
---- a/drivers/ptp/Kconfig
-+++ b/drivers/ptp/Kconfig
-@@ -7,6 +7,7 @@ menu "PTP clock support"
- config PTP_1588_CLOCK
- tristate "PTP clock support"
- select PPS
-+ select NET_PTP_CLASSIFY
- help
- The IEEE 1588 standard defines a method to precisely
- synchronize distributed clocks over Ethernet networks. The
-diff --git a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h
-index 6d3b0a2..7dfed71 100644
---- a/include/linux/ptp_classify.h
-+++ b/include/linux/ptp_classify.h
-@@ -23,11 +23,8 @@
- #ifndef _PTP_CLASSIFY_H_
- #define _PTP_CLASSIFY_H_
-
--#include <linux/if_ether.h>
--#include <linux/if_vlan.h>
- #include <linux/ip.h>
--#include <linux/filter.h>
--#include <linux/in.h>
-+#include <linux/skbuff.h>
-
- #define PTP_CLASS_NONE 0x00 /* not a PTP event message */
- #define PTP_CLASS_V1 0x01 /* protocol version 1 */
-@@ -40,7 +37,7 @@
- #define PTP_CLASS_PMASK 0xf0 /* mask for the packet type field */
-
- #define PTP_CLASS_V1_IPV4 (PTP_CLASS_V1 | PTP_CLASS_IPV4)
--#define PTP_CLASS_V1_IPV6 (PTP_CLASS_V1 | PTP_CLASS_IPV6) /*probably DNE*/
-+#define PTP_CLASS_V1_IPV6 (PTP_CLASS_V1 | PTP_CLASS_IPV6) /* probably DNE */
- #define PTP_CLASS_V2_IPV4 (PTP_CLASS_V2 | PTP_CLASS_IPV4)
- #define PTP_CLASS_V2_IPV6 (PTP_CLASS_V2 | PTP_CLASS_IPV6)
- #define PTP_CLASS_V2_L2 (PTP_CLASS_V2 | PTP_CLASS_L2)
-@@ -49,82 +46,34 @@
- #define PTP_EV_PORT 319
- #define PTP_GEN_BIT 0x08 /* indicates general message, if set in message type */
-
--#define OFF_ETYPE 12
--#define OFF_IHL 14
--#define OFF_FRAG 20
--#define OFF_PROTO4 23
--#define OFF_NEXT 6
--#define OFF_UDP_DST 2
--
- #define OFF_PTP_SOURCE_UUID 22 /* PTPv1 only */
- #define OFF_PTP_SEQUENCE_ID 30
- #define OFF_PTP_CONTROL 32 /* PTPv1 only */
-
--#define IPV4_HLEN(data) (((struct iphdr *)(data + OFF_IHL))->ihl << 2)
--
-+/* Below defines should actually be removed at some point in time. */
- #define IP6_HLEN 40
- #define UDP_HLEN 8
--
--#define RELOFF_DST4 (ETH_HLEN + OFF_UDP_DST)
--#define OFF_DST6 (ETH_HLEN + IP6_HLEN + OFF_UDP_DST)
-+#define OFF_IHL 14
- #define OFF_PTP6 (ETH_HLEN + IP6_HLEN + UDP_HLEN)
-+#define IPV4_HLEN(data) (((struct iphdr *)(data + OFF_IHL))->ihl << 2)
-
--#define OP_AND (BPF_ALU | BPF_AND | BPF_K)
--#define OP_JEQ (BPF_JMP | BPF_JEQ | BPF_K)
--#define OP_JSET (BPF_JMP | BPF_JSET | BPF_K)
--#define OP_LDB (BPF_LD | BPF_B | BPF_ABS)
--#define OP_LDH (BPF_LD | BPF_H | BPF_ABS)
--#define OP_LDHI (BPF_LD | BPF_H | BPF_IND)
--#define OP_LDX (BPF_LDX | BPF_B | BPF_MSH)
--#define OP_OR (BPF_ALU | BPF_OR | BPF_K)
--#define OP_RETA (BPF_RET | BPF_A)
--#define OP_RETK (BPF_RET | BPF_K)
--
--#define PTP_FILTER \
-- {OP_LDH, 0, 0, OFF_ETYPE }, /* */ \
-- {OP_JEQ, 0, 12, ETH_P_IP }, /* f goto L20 */ \
-- {OP_LDB, 0, 0, OFF_PROTO4 }, /* */ \
-- {OP_JEQ, 0, 9, IPPROTO_UDP }, /* f goto L10 */ \
-- {OP_LDH, 0, 0, OFF_FRAG }, /* */ \
-- {OP_JSET, 7, 0, 0x1fff }, /* t goto L11 */ \
-- {OP_LDX, 0, 0, OFF_IHL }, /* */ \
-- {OP_LDHI, 0, 0, RELOFF_DST4 }, /* */ \
-- {OP_JEQ, 0, 4, PTP_EV_PORT }, /* f goto L12 */ \
-- {OP_LDHI, 0, 0, ETH_HLEN + UDP_HLEN }, /* */ \
-- {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
-- {OP_OR, 0, 0, PTP_CLASS_IPV4 }, /* */ \
-- {OP_RETA, 0, 0, 0 }, /* */ \
--/*L1x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \
--/*L20*/ {OP_JEQ, 0, 9, ETH_P_IPV6 }, /* f goto L40 */ \
-- {OP_LDB, 0, 0, ETH_HLEN + OFF_NEXT }, /* */ \
-- {OP_JEQ, 0, 6, IPPROTO_UDP }, /* f goto L30 */ \
-- {OP_LDH, 0, 0, OFF_DST6 }, /* */ \
-- {OP_JEQ, 0, 4, PTP_EV_PORT }, /* f goto L31 */ \
-- {OP_LDH, 0, 0, OFF_PTP6 }, /* */ \
-- {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
-- {OP_OR, 0, 0, PTP_CLASS_IPV6 }, /* */ \
-- {OP_RETA, 0, 0, 0 }, /* */ \
--/*L3x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \
--/*L40*/ {OP_JEQ, 0, 9, ETH_P_8021Q }, /* f goto L50 */ \
-- {OP_LDH, 0, 0, OFF_ETYPE + 4 }, /* */ \
-- {OP_JEQ, 0, 15, ETH_P_1588 }, /* f goto L60 */ \
-- {OP_LDB, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \
-- {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \
-- {OP_JEQ, 0, 12, 0 }, /* f goto L6x */ \
-- {OP_LDH, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \
-- {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
-- {OP_OR, 0, 0, PTP_CLASS_VLAN }, /* */ \
-- {OP_RETA, 0, 0, 0 }, /* */ \
--/*L50*/ {OP_JEQ, 0, 7, ETH_P_1588 }, /* f goto L61 */ \
-- {OP_LDB, 0, 0, ETH_HLEN }, /* */ \
-- {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \
-- {OP_JEQ, 0, 4, 0 }, /* f goto L6x */ \
-- {OP_LDH, 0, 0, ETH_HLEN }, /* */ \
-- {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \
-- {OP_OR, 0, 0, PTP_CLASS_L2 }, /* */ \
-- {OP_RETA, 0, 0, 0 }, /* */ \
--/*L6x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE },
--
-+#if defined(CONFIG_NET_PTP_CLASSIFY)
-+/**
-+ * ptp_classify_raw - classify a PTP packet
-+ * @skb: buffer
-+ *
-+ * Runs a minimal BPF dissector to classify a network packet to
-+ * determine the PTP class. In case the skb does not contain any
-+ * PTP protocol data, PTP_CLASS_NONE will be returned, otherwise
-+ * PTP_CLASS_V1_IPV{4,6}, PTP_CLASS_V2_IPV{4,6} or
-+ * PTP_CLASS_V2_{L2,VLAN}, depending on the packet content.
-+ */
- unsigned int ptp_classify_raw(const struct sk_buff *skb);
-
-+void __init ptp_classifier_init(void);
-+#else
-+static inline void ptp_classifier_init(void)
-+{
-+}
- #endif
-+#endif /* _PTP_CLASSIFY_H_ */
-diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index 18ef022..31edf63 100644
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -2630,8 +2630,6 @@ static inline ktime_t net_invalid_timestamp(void)
- return ktime_set(0, 0);
- }
-
--void skb_timestamping_init(void);
--
- #ifdef CONFIG_NETWORK_PHY_TIMESTAMPING
-
- void skb_clone_tx_timestamp(struct sk_buff *skb);
-diff --git a/net/Kconfig b/net/Kconfig
-index e411046..d1f6f96 100644
---- a/net/Kconfig
-+++ b/net/Kconfig
-@@ -89,8 +89,12 @@ config NETWORK_SECMARK
- to nfmark, but designated for security purposes.
- If you are unsure how to answer this question, answer N.
-
-+config NET_PTP_CLASSIFY
-+ def_bool n
-+
- config NETWORK_PHY_TIMESTAMPING
- bool "Timestamping in PHY devices"
-+ select NET_PTP_CLASSIFY
- help
- This allows timestamping of network packets by PHYs with
- hardware timestamping capabilities. This option adds some
-diff --git a/net/core/Makefile b/net/core/Makefile
-index 9628c20..826b925 100644
---- a/net/core/Makefile
-+++ b/net/core/Makefile
-@@ -21,5 +21,6 @@ obj-$(CONFIG_FIB_RULES) += fib_rules.o
- obj-$(CONFIG_TRACEPOINTS) += net-traces.o
- obj-$(CONFIG_NET_DROP_MONITOR) += drop_monitor.o
- obj-$(CONFIG_NETWORK_PHY_TIMESTAMPING) += timestamping.o
-+obj-$(CONFIG_NET_PTP_CLASSIFY) += ptp_classifier.o
- obj-$(CONFIG_CGROUP_NET_PRIO) += netprio_cgroup.o
- obj-$(CONFIG_CGROUP_NET_CLASSID) += netclassid_cgroup.o
-diff --git a/net/core/ptp_classifier.c b/net/core/ptp_classifier.c
-new file mode 100644
-index 0000000..eaba0f6
---- /dev/null
-+++ b/net/core/ptp_classifier.c
-@@ -0,0 +1,141 @@
-+/* PTP classifier
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of version 2 of the GNU General Public
-+ * License 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.
-+ */
-+
-+/* The below program is the bpf_asm (tools/net/) representation of
-+ * the opcode array in the ptp_filter structure.
-+ *
-+ * For convenience, this can easily be altered and reviewed with
-+ * bpf_asm and bpf_dbg, e.g. `./bpf_asm -c prog` where prog is a
-+ * simple file containing the below program:
-+ *
-+ * ldh [12] ; load ethertype
-+ *
-+ * ; PTP over UDP over IPv4 over Ethernet
-+ * test_ipv4:
-+ * jneq #0x800, test_ipv6 ; ETH_P_IP ?
-+ * ldb [23] ; load proto
-+ * jneq #17, drop_ipv4 ; IPPROTO_UDP ?
-+ * ldh [20] ; load frag offset field
-+ * jset #0x1fff, drop_ipv4 ; don't allow fragments
-+ * ldxb 4*([14]&0xf) ; load IP header len
-+ * ldh [x + 16] ; load UDP dst port
-+ * jneq #319, drop_ipv4 ; is port PTP_EV_PORT ?
-+ * ldh [x + 22] ; load payload
-+ * and #0xf ; mask PTP_CLASS_VMASK
-+ * or #0x10 ; PTP_CLASS_IPV4
-+ * ret a ; return PTP class
-+ * drop_ipv4: ret #0x0 ; PTP_CLASS_NONE
-+ *
-+ * ; PTP over UDP over IPv6 over Ethernet
-+ * test_ipv6:
-+ * jneq #0x86dd, test_8021q ; ETH_P_IPV6 ?
-+ * ldb [20] ; load proto
-+ * jneq #17, drop_ipv6 ; IPPROTO_UDP ?
-+ * ldh [56] ; load UDP dst port
-+ * jneq #319, drop_ipv6 ; is port PTP_EV_PORT ?
-+ * ldh [62] ; load payload
-+ * and #0xf ; mask PTP_CLASS_VMASK
-+ * or #0x20 ; PTP_CLASS_IPV6
-+ * ret a ; return PTP class
-+ * drop_ipv6: ret #0x0 ; PTP_CLASS_NONE
-+ *
-+ * ; PTP over 802.1Q over Ethernet
-+ * test_8021q:
-+ * jneq #0x8100, test_ieee1588 ; ETH_P_8021Q ?
-+ * ldh [16] ; load inner type
-+ * jneq #0x88f7, drop_ieee1588 ; ETH_P_1588 ?
-+ * ldb [18] ; load payload
-+ * and #0x8 ; as we don't have ports here, test
-+ * jneq #0x0, drop_ieee1588 ; for PTP_GEN_BIT and drop these
-+ * ldh [18] ; reload payload
-+ * and #0xf ; mask PTP_CLASS_VMASK
-+ * or #0x40 ; PTP_CLASS_V2_VLAN
-+ * ret a ; return PTP class
-+ *
-+ * ; PTP over Ethernet
-+ * test_ieee1588:
-+ * jneq #0x88f7, drop_ieee1588 ; ETH_P_1588 ?
-+ * ldb [14] ; load payload
-+ * and #0x8 ; as we don't have ports here, test
-+ * jneq #0x0, drop_ieee1588 ; for PTP_GEN_BIT and drop these
-+ * ldh [14] ; reload payload
-+ * and #0xf ; mask PTP_CLASS_VMASK
-+ * or #0x30 ; PTP_CLASS_L2
-+ * ret a ; return PTP class
-+ * drop_ieee1588: ret #0x0 ; PTP_CLASS_NONE
-+ */
-+
-+#include <linux/skbuff.h>
-+#include <linux/filter.h>
-+#include <linux/ptp_classify.h>
-+
-+static struct sk_filter *ptp_insns __read_mostly;
-+
-+unsigned int ptp_classify_raw(const struct sk_buff *skb)
-+{
-+ return SK_RUN_FILTER(ptp_insns, skb);
-+}
-+EXPORT_SYMBOL_GPL(ptp_classify_raw);
-+
-+void __init ptp_classifier_init(void)
-+{
-+ static struct sock_filter ptp_filter[] = {
-+ { 0x28, 0, 0, 0x0000000c },
-+ { 0x15, 0, 12, 0x00000800 },
-+ { 0x30, 0, 0, 0x00000017 },
-+ { 0x15, 0, 9, 0x00000011 },
-+ { 0x28, 0, 0, 0x00000014 },
-+ { 0x45, 7, 0, 0x00001fff },
-+ { 0xb1, 0, 0, 0x0000000e },
-+ { 0x48, 0, 0, 0x00000010 },
-+ { 0x15, 0, 4, 0x0000013f },
-+ { 0x48, 0, 0, 0x00000016 },
-+ { 0x54, 0, 0, 0x0000000f },
-+ { 0x44, 0, 0, 0x00000010 },
-+ { 0x16, 0, 0, 0x00000000 },
-+ { 0x06, 0, 0, 0x00000000 },
-+ { 0x15, 0, 9, 0x000086dd },
-+ { 0x30, 0, 0, 0x00000014 },
-+ { 0x15, 0, 6, 0x00000011 },
-+ { 0x28, 0, 0, 0x00000038 },
-+ { 0x15, 0, 4, 0x0000013f },
-+ { 0x28, 0, 0, 0x0000003e },
-+ { 0x54, 0, 0, 0x0000000f },
-+ { 0x44, 0, 0, 0x00000020 },
-+ { 0x16, 0, 0, 0x00000000 },
-+ { 0x06, 0, 0, 0x00000000 },
-+ { 0x15, 0, 9, 0x00008100 },
-+ { 0x28, 0, 0, 0x00000010 },
-+ { 0x15, 0, 15, 0x000088f7 },
-+ { 0x30, 0, 0, 0x00000012 },
-+ { 0x54, 0, 0, 0x00000008 },
-+ { 0x15, 0, 12, 0x00000000 },
-+ { 0x28, 0, 0, 0x00000012 },
-+ { 0x54, 0, 0, 0x0000000f },
-+ { 0x44, 0, 0, 0x00000040 },
-+ { 0x16, 0, 0, 0x00000000 },
-+ { 0x15, 0, 7, 0x000088f7 },
-+ { 0x30, 0, 0, 0x0000000e },
-+ { 0x54, 0, 0, 0x00000008 },
-+ { 0x15, 0, 4, 0x00000000 },
-+ { 0x28, 0, 0, 0x0000000e },
-+ { 0x54, 0, 0, 0x0000000f },
-+ { 0x44, 0, 0, 0x00000030 },
-+ { 0x16, 0, 0, 0x00000000 },
-+ { 0x06, 0, 0, 0x00000000 },
-+ };
-+ struct sock_fprog ptp_prog = {
-+ .len = ARRAY_SIZE(ptp_filter), .filter = ptp_filter,
-+ };
-+
-+ BUG_ON(sk_unattached_filter_create(&ptp_insns, &ptp_prog));
-+}
-diff --git a/net/core/timestamping.c b/net/core/timestamping.c
-index 9ff26b3..6521dfd 100644
---- a/net/core/timestamping.c
-+++ b/net/core/timestamping.c
-@@ -23,14 +23,6 @@
- #include <linux/skbuff.h>
- #include <linux/export.h>
-
--static struct sk_filter *ptp_insns __read_mostly;
--
--unsigned int ptp_classify_raw(const struct sk_buff *skb)
--{
-- return SK_RUN_FILTER(ptp_insns, skb);
--}
--EXPORT_SYMBOL_GPL(ptp_classify_raw);
--
- static unsigned int classify(const struct sk_buff *skb)
- {
- if (likely(skb->dev && skb->dev->phydev &&
-@@ -140,13 +132,3 @@ bool skb_defer_rx_timestamp(struct sk_buff *skb)
- return false;
- }
- EXPORT_SYMBOL_GPL(skb_defer_rx_timestamp);
--
--void __init skb_timestamping_init(void)
--{
-- static struct sock_filter ptp_filter[] = { PTP_FILTER };
-- struct sock_fprog ptp_prog = {
-- .len = ARRAY_SIZE(ptp_filter), .filter = ptp_filter,
-- };
--
-- BUG_ON(sk_unattached_filter_create(&ptp_insns, &ptp_prog));
--}
-diff --git a/net/socket.c b/net/socket.c
-index f25eaa3..1b1e7e6 100644
---- a/net/socket.c
-+++ b/net/socket.c
-@@ -72,6 +72,7 @@
- #include <linux/if_bridge.h>
- #include <linux/if_frad.h>
- #include <linux/if_vlan.h>
-+#include <linux/ptp_classify.h>
- #include <linux/init.h>
- #include <linux/poll.h>
- #include <linux/cache.h>
-@@ -2685,9 +2686,7 @@ static int __init sock_init(void)
- goto out;
- #endif
-
--#ifdef CONFIG_NETWORK_PHY_TIMESTAMPING
-- skb_timestamping_init();
--#endif
-+ ptp_classifier_init();
-
- out:
- return err;
---
-1.8.1.4
-
+++ /dev/null
-From e62d2df084e2849edffb206559725fa81bb569a8 Mon Sep 17 00:00:00 2001
-From: Daniel Borkmann <dborkman@redhat.com>
-Date: Fri, 28 Mar 2014 18:58:21 +0100
-Subject: [PATCH] net: ptp: use sk_unattached_filter_create() for BPF
-
-This patch migrates an open-coded sk_run_filter() implementation with
-proper use of the BPF API, that is, sk_unattached_filter_create(). This
-migration is needed, as we will be internally transforming the filter
-to a different representation, and therefore needs to be decoupled.
-
-It is okay to do so as skb_timestamping_init() is called during
-initialization of the network stack in core initcall via sock_init().
-This would effectively also allow for PTP filters to be jit compiled if
-bpf_jit_enable is set.
-
-For better readability, there are also some newlines introduced, also
-ptp_classify.h is only in kernel space.
-
-Joint work with Alexei Starovoitov.
-
-Signed-off-by: Daniel Borkmann <dborkman@redhat.com>
-Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
-Cc: Richard Cochran <richard.cochran@omicron.at>
-Cc: Jiri Benc <jbenc@redhat.com>
-Signed-off-by: David S. Miller <davem@davemloft.net>
----
- include/linux/ptp_classify.h | 4 ----
- net/core/timestamping.c | 21 ++++++++++++++-------
- 2 files changed, 14 insertions(+), 11 deletions(-)
-
-diff --git a/include/linux/ptp_classify.h b/include/linux/ptp_classify.h
-index 1dc420b..3decfa4 100644
---- a/include/linux/ptp_classify.h
-+++ b/include/linux/ptp_classify.h
-@@ -27,11 +27,7 @@
- #include <linux/if_vlan.h>
- #include <linux/ip.h>
- #include <linux/filter.h>
--#ifdef __KERNEL__
- #include <linux/in.h>
--#else
--#include <netinet/in.h>
--#endif
-
- #define PTP_CLASS_NONE 0x00 /* not a PTP event message */
- #define PTP_CLASS_V1 0x01 /* protocol version 1 */
-diff --git a/net/core/timestamping.c b/net/core/timestamping.c
-index 661b5a4..e43d56a 100644
---- a/net/core/timestamping.c
-+++ b/net/core/timestamping.c
-@@ -23,16 +23,13 @@
- #include <linux/skbuff.h>
- #include <linux/export.h>
-
--static struct sock_filter ptp_filter[] = {
-- PTP_FILTER
--};
-+static struct sk_filter *ptp_insns __read_mostly;
-
- static unsigned int classify(const struct sk_buff *skb)
- {
-- if (likely(skb->dev &&
-- skb->dev->phydev &&
-+ if (likely(skb->dev && skb->dev->phydev &&
- skb->dev->phydev->drv))
-- return sk_run_filter(skb, ptp_filter);
-+ return SK_RUN_FILTER(ptp_insns, skb);
- else
- return PTP_CLASS_NONE;
- }
-@@ -60,11 +57,13 @@ void skb_clone_tx_timestamp(struct sk_buff *skb)
- if (likely(phydev->drv->txtstamp)) {
- if (!atomic_inc_not_zero(&sk->sk_refcnt))
- return;
-+
- clone = skb_clone(skb, GFP_ATOMIC);
- if (!clone) {
- sock_put(sk);
- return;
- }
-+
- clone->sk = sk;
- phydev->drv->txtstamp(phydev, clone, type);
- }
-@@ -89,12 +88,15 @@ void skb_complete_tx_timestamp(struct sk_buff *skb,
- }
-
- *skb_hwtstamps(skb) = *hwtstamps;
-+
- serr = SKB_EXT_ERR(skb);
- memset(serr, 0, sizeof(*serr));
- serr->ee.ee_errno = ENOMSG;
- serr->ee.ee_origin = SO_EE_ORIGIN_TIMESTAMPING;
- skb->sk = NULL;
-+
- err = sock_queue_err_skb(sk, skb);
-+
- sock_put(sk);
- if (err)
- kfree_skb(skb);
-@@ -135,5 +137,10 @@ EXPORT_SYMBOL_GPL(skb_defer_rx_timestamp);
-
- void __init skb_timestamping_init(void)
- {
-- BUG_ON(sk_chk_filter(ptp_filter, ARRAY_SIZE(ptp_filter)));
-+ static struct sock_filter ptp_filter[] = { PTP_FILTER };
-+ struct sock_fprog ptp_prog = {
-+ .len = ARRAY_SIZE(ptp_filter), .filter = ptp_filter,
-+ };
-+
-+ BUG_ON(sk_unattached_filter_create(&ptp_insns, &ptp_prog));
- }
---
-1.8.1.4
-
+++ /dev/null
-From f7723d32c993ea1e00bc11d9ef1c4a9ba2050f31 Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@open.eurogiciel.org>
-Date: Thu, 3 Apr 2014 09:51:07 +0200
-Subject: [PATCH 02/20] SMACK: Fix handling value==NULL in post setxattr
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function `smack_inode_post_setxattr` is called each
-time that a setxattr is done, for any value of name.
-The kernel allow to put value==NULL when size==0
-to set an empty attribute value. The systematic
-call to smk_import_entry was causing the dereference
-of a NULL pointer hence a KERNEL PANIC!
-
-The problem can be produced easily by issuing the
-command `setfattr -n user.data file` under bash prompt
-when SMACK is active.
-
-Moving the call to smk_import_entry as proposed by this
-patch is correcting the behaviour because the function
-smack_inode_post_setxattr is called for the SMACK's
-attributes only if the function smack_inode_setxattr validated
-the value and its size (what will not be the case when size==0).
-
-It also has a benefical effect to not fill the smack hash
-with garbage values coming from any extended attribute
-write.
-
-Change-Id: Iaf0039c2be9bccb6cee11c24a3b44d209101fe47
-Signed-off-by: José Bollo <jose.bollo@open.eurogiciel.org>
-Signed-off-by: Stephane Desneux <stephane.desneux@open.eurogiciel.org>
----
- security/smack/smack_lsm.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index acd8574..f0ebcb0 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -880,18 +880,20 @@ static void smack_inode_post_setxattr(struct dentry *dentry, const char *name,
- return;
- }
-
-- skp = smk_import_entry(value, size);
- if (strcmp(name, XATTR_NAME_SMACK) == 0) {
-+ skp = smk_import_entry(value, size);
- if (skp != NULL)
- isp->smk_inode = skp->smk_known;
- else
- isp->smk_inode = smack_known_invalid.smk_known;
- } else if (strcmp(name, XATTR_NAME_SMACKEXEC) == 0) {
-+ skp = smk_import_entry(value, size);
- if (skp != NULL)
- isp->smk_task = skp;
- else
- isp->smk_task = &smack_known_invalid;
- } else if (strcmp(name, XATTR_NAME_SMACKMMAP) == 0) {
-+ skp = smk_import_entry(value, size);
- if (skp != NULL)
- isp->smk_mmap = skp;
- else
---
-1.8.1.4
-
+++ /dev/null
-From da699868113882aae41dab690c98788abffe263a Mon Sep 17 00:00:00 2001
-From: Philippe Coval <philippe.coval@open.eurogiciel.org>
-Date: Fri, 22 Aug 2014 10:09:19 +0200
-Subject: [PATCH 03/20] Revert "x86/efi: Correct EFI boot stub use of
- code32_start"
-
-This reverts commit 45ada9fae6d836aa8e3be5302d7aeb50c44e0629.
-
-With this change in , nexcom's vtc1010 does not boot anynore
-even rebased on latest version v3.14.17
-and with latest firmware :
-ftp://ftp.nexcom.com/pub/BIOS/VTC1010/x86_32bit/MV11A109.rom
-( md5=f5ccb5284ca5bd8668fa1031067dad27 )
-
-The bug is now tracked upstream.
-
-Bug: https://bugzilla.kernel.org/show_bug.cgi?id=82891
-Change-Id: I82bb1227dcbcbfe1371d685d241e985a6e58ddf3
-Bug-Tizen: TC-1513/part
----
- arch/x86/boot/compressed/eboot.c | 5 ++---
- arch/x86/boot/compressed/head_32.S | 14 ++++++--------
- arch/x86/boot/compressed/head_64.S | 9 ++++++---
- 3 files changed, 14 insertions(+), 14 deletions(-)
-
-diff --git a/arch/x86/boot/compressed/eboot.c b/arch/x86/boot/compressed/eboot.c
-index 78cbb2d..a7677ba 100644
---- a/arch/x86/boot/compressed/eboot.c
-+++ b/arch/x86/boot/compressed/eboot.c
-@@ -425,9 +425,6 @@ void setup_graphics(struct boot_params *boot_params)
- * Because the x86 boot code expects to be passed a boot_params we
- * need to create one ourselves (usually the bootloader would create
- * one for us).
-- *
-- * The caller is responsible for filling out ->code32_start in the
-- * returned boot_params.
- */
- struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table)
- {
-@@ -486,6 +483,8 @@ struct boot_params *make_boot_params(void *handle, efi_system_table_t *_table)
- hdr->vid_mode = 0xffff;
- hdr->boot_flag = 0xAA55;
-
-+ hdr->code32_start = (__u64)(unsigned long)image->image_base;
-+
- hdr->type_of_loader = 0x21;
-
- /* Convert unicode cmdline to ascii */
-diff --git a/arch/x86/boot/compressed/head_32.S b/arch/x86/boot/compressed/head_32.S
-index c5b56ed..42cb93f 100644
---- a/arch/x86/boot/compressed/head_32.S
-+++ b/arch/x86/boot/compressed/head_32.S
-@@ -50,13 +50,6 @@ ENTRY(efi_pe_entry)
- pushl %eax
- pushl %esi
- pushl %ecx
--
-- call reloc
--reloc:
-- popl %ecx
-- subl reloc, %ecx
-- movl %ecx, BP_code32_start(%eax)
--
- sub $0x4, %esp
-
- ENTRY(efi_stub_entry)
-@@ -70,7 +63,12 @@ ENTRY(efi_stub_entry)
- hlt
- jmp 1b
- 2:
-- movl BP_code32_start(%esi), %eax
-+ call 3f
-+3:
-+ popl %eax
-+ subl $3b, %eax
-+ subl BP_pref_address(%esi), %eax
-+ add BP_code32_start(%esi), %eax
- leal preferred_addr(%eax), %eax
- jmp *%eax
-
-diff --git a/arch/x86/boot/compressed/head_64.S b/arch/x86/boot/compressed/head_64.S
-index 34bbc09..036d37f 100644
---- a/arch/x86/boot/compressed/head_64.S
-+++ b/arch/x86/boot/compressed/head_64.S
-@@ -217,8 +217,6 @@ ENTRY(efi_pe_entry)
- cmpq $0,%rax
- je 1f
- mov %rax, %rdx
-- leaq startup_32(%rip), %rax
-- movl %eax, BP_code32_start(%rdx)
- popq %rsi
- popq %rdi
-
-@@ -232,7 +230,12 @@ ENTRY(efi_stub_entry)
- hlt
- jmp 1b
- 2:
-- movl BP_code32_start(%esi), %eax
-+ call 3f
-+3:
-+ popq %rax
-+ subq $3b, %rax
-+ subq BP_pref_address(%rsi), %rax
-+ add BP_code32_start(%esi), %eax
- leaq preferred_addr(%rax), %rax
- jmp *%rax
-
---
-1.8.1.4
-
-From f029d2b6e4516c4ea5ecc9a740f4cafadb081330 Mon Sep 17 00:00:00 2001
+From 30b87ac2002207a5c6a74cd18d843bdb3b01fe92 Mon Sep 17 00:00:00 2001
From: Casey Schaufler <casey@schaufler-ca.com>
Date: Thu, 21 Nov 2013 10:55:10 +0200
-Subject: [PATCH 01/20] Smack: Cgroup filesystem access
+Subject: [PATCH 03/45] Smack: Cgroup filesystem access
The cgroup filesystems are not mounted using conventional
mechanisms. This prevents the use of mount options to
Change-Id: I1e0429f133db9e14117dc754d682dec08221354c
Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
-Signed-off-by: Stephane Desneux <stephane.desneux@open.eurogiciel.org>
---
security/smack/smack_lsm.c | 30 ++++++++++++++++++------------
1 file changed, 18 insertions(+), 12 deletions(-)
/*
* Casey says procfs appears not to care.
--
-1.8.1.4
+1.8.4.5
+++ /dev/null
-From 5bcfdca5ba3685dff3b0b0de0cf4d0a0fd4e6567 Mon Sep 17 00:00:00 2001
-From: David Howells <dhowells@redhat.com>
-Date: Fri, 14 Mar 2014 17:44:49 +0000
-Subject: [PATCH 04/20] KEYS: Move the flags representing required permission
- to linux/key.h
-
-Move the flags representing required permission to linux/key.h as the perm
-parameter of security_key_permission() is in terms of them - and not the
-permissions mask flags used in key->perm.
-
-Whilst we're at it:
-
- (1) Rename them to be KEY_NEED_xxx rather than KEY_xxx to avoid collisions
- with symbols in uapi/linux/input.h.
-
- (2) Don't use key_perm_t for a mask of required permissions, but rather limit
- it to the permissions mask attached to the key and arguments related
- directly to that.
-
-Change-Id: Id9de84f93e5dd668a3b8ba00fc2440c6d6c6f988
-Signed-off-by: David Howells <dhowells@redhat.com>
-Tested-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
-Origin: upstream
----
- include/linux/key.h | 11 +++++++++++
- include/linux/security.h | 6 +++---
- security/capability.c | 2 +-
- security/keys/internal.h | 11 +----------
- security/keys/key.c | 6 +++---
- security/keys/keyctl.c | 44 ++++++++++++++++++++++----------------------
- security/keys/keyring.c | 8 ++++----
- security/keys/permission.c | 4 ++--
- security/keys/persistent.c | 4 ++--
- security/keys/proc.c | 2 +-
- security/security.c | 2 +-
- security/selinux/hooks.c | 2 +-
- security/smack/smack_lsm.c | 2 +-
- 13 files changed, 53 insertions(+), 51 deletions(-)
-
-diff --git a/include/linux/key.h b/include/linux/key.h
-index 80d6774..cd0abb8 100644
---- a/include/linux/key.h
-+++ b/include/linux/key.h
-@@ -309,6 +309,17 @@ static inline key_serial_t key_serial(const struct key *key)
-
- extern void key_set_timeout(struct key *, unsigned);
-
-+/*
-+ * The permissions required on a key that we're looking up.
-+ */
-+#define KEY_NEED_VIEW 0x01 /* Require permission to view attributes */
-+#define KEY_NEED_READ 0x02 /* Require permission to read content */
-+#define KEY_NEED_WRITE 0x04 /* Require permission to update / modify */
-+#define KEY_NEED_SEARCH 0x08 /* Require permission to search (keyring) or find (key) */
-+#define KEY_NEED_LINK 0x10 /* Require permission to link */
-+#define KEY_NEED_SETATTR 0x20 /* Require permission to change attributes */
-+#define KEY_NEED_ALL 0x3f /* All the above permissions */
-+
- /**
- * key_is_instantiated - Determine if a key has been positively instantiated
- * @key: The key to check.
-diff --git a/include/linux/security.h b/include/linux/security.h
-index 2fc42d1..6726006 100644
---- a/include/linux/security.h
-+++ b/include/linux/security.h
-@@ -1708,7 +1708,7 @@ struct security_operations {
- void (*key_free) (struct key *key);
- int (*key_permission) (key_ref_t key_ref,
- const struct cred *cred,
-- key_perm_t perm);
-+ unsigned perm);
- int (*key_getsecurity)(struct key *key, char **_buffer);
- #endif /* CONFIG_KEYS */
-
-@@ -3030,7 +3030,7 @@ static inline int security_path_chroot(struct path *path)
- int security_key_alloc(struct key *key, const struct cred *cred, unsigned long flags);
- void security_key_free(struct key *key);
- int security_key_permission(key_ref_t key_ref,
-- const struct cred *cred, key_perm_t perm);
-+ const struct cred *cred, unsigned perm);
- int security_key_getsecurity(struct key *key, char **_buffer);
-
- #else
-@@ -3048,7 +3048,7 @@ static inline void security_key_free(struct key *key)
-
- static inline int security_key_permission(key_ref_t key_ref,
- const struct cred *cred,
-- key_perm_t perm)
-+ unsigned perm)
- {
- return 0;
- }
-diff --git a/security/capability.c b/security/capability.c
-index 21e2b9c..4a4bc41 100644
---- a/security/capability.c
-+++ b/security/capability.c
-@@ -879,7 +879,7 @@ static void cap_key_free(struct key *key)
- }
-
- static int cap_key_permission(key_ref_t key_ref, const struct cred *cred,
-- key_perm_t perm)
-+ unsigned perm)
- {
- return 0;
- }
-diff --git a/security/keys/internal.h b/security/keys/internal.h
-index 80b2aac..5f20da0 100644
---- a/security/keys/internal.h
-+++ b/security/keys/internal.h
-@@ -176,20 +176,11 @@ extern int key_task_permission(const key_ref_t key_ref,
- /*
- * Check to see whether permission is granted to use a key in the desired way.
- */
--static inline int key_permission(const key_ref_t key_ref, key_perm_t perm)
-+static inline int key_permission(const key_ref_t key_ref, unsigned perm)
- {
- return key_task_permission(key_ref, current_cred(), perm);
- }
-
--/* required permissions */
--#define KEY_VIEW 0x01 /* require permission to view attributes */
--#define KEY_READ 0x02 /* require permission to read content */
--#define KEY_WRITE 0x04 /* require permission to update / modify */
--#define KEY_SEARCH 0x08 /* require permission to search (keyring) or find (key) */
--#define KEY_LINK 0x10 /* require permission to link */
--#define KEY_SETATTR 0x20 /* require permission to change attributes */
--#define KEY_ALL 0x3f /* all the above permissions */
--
- /*
- * Authorisation record for request_key().
- */
-diff --git a/security/keys/key.c b/security/keys/key.c
-index 6e21c11..2048a11 100644
---- a/security/keys/key.c
-+++ b/security/keys/key.c
-@@ -714,7 +714,7 @@ static inline key_ref_t __key_update(key_ref_t key_ref,
- int ret;
-
- /* need write permission on the key to update it */
-- ret = key_permission(key_ref, KEY_WRITE);
-+ ret = key_permission(key_ref, KEY_NEED_WRITE);
- if (ret < 0)
- goto error;
-
-@@ -838,7 +838,7 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
-
- /* if we're going to allocate a new key, we're going to have
- * to modify the keyring */
-- ret = key_permission(keyring_ref, KEY_WRITE);
-+ ret = key_permission(keyring_ref, KEY_NEED_WRITE);
- if (ret < 0) {
- key_ref = ERR_PTR(ret);
- goto error_link_end;
-@@ -928,7 +928,7 @@ int key_update(key_ref_t key_ref, const void *payload, size_t plen)
- key_check(key);
-
- /* the key must be writable */
-- ret = key_permission(key_ref, KEY_WRITE);
-+ ret = key_permission(key_ref, KEY_NEED_WRITE);
- if (ret < 0)
- goto error;
-
-diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
-index cee72ce..cd5bd0c 100644
---- a/security/keys/keyctl.c
-+++ b/security/keys/keyctl.c
-@@ -111,7 +111,7 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
- }
-
- /* find the target keyring (which must be writable) */
-- keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
-+ keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_NEED_WRITE);
- if (IS_ERR(keyring_ref)) {
- ret = PTR_ERR(keyring_ref);
- goto error3;
-@@ -195,7 +195,7 @@ SYSCALL_DEFINE4(request_key, const char __user *, _type,
- dest_ref = NULL;
- if (destringid) {
- dest_ref = lookup_user_key(destringid, KEY_LOOKUP_CREATE,
-- KEY_WRITE);
-+ KEY_NEED_WRITE);
- if (IS_ERR(dest_ref)) {
- ret = PTR_ERR(dest_ref);
- goto error3;
-@@ -253,7 +253,7 @@ long keyctl_get_keyring_ID(key_serial_t id, int create)
- long ret;
-
- lflags = create ? KEY_LOOKUP_CREATE : 0;
-- key_ref = lookup_user_key(id, lflags, KEY_SEARCH);
-+ key_ref = lookup_user_key(id, lflags, KEY_NEED_SEARCH);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error;
-@@ -334,7 +334,7 @@ long keyctl_update_key(key_serial_t id,
- }
-
- /* find the target key (which must be writable) */
-- key_ref = lookup_user_key(id, 0, KEY_WRITE);
-+ key_ref = lookup_user_key(id, 0, KEY_NEED_WRITE);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error2;
-@@ -365,12 +365,12 @@ long keyctl_revoke_key(key_serial_t id)
- key_ref_t key_ref;
- long ret;
-
-- key_ref = lookup_user_key(id, 0, KEY_WRITE);
-+ key_ref = lookup_user_key(id, 0, KEY_NEED_WRITE);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- if (ret != -EACCES)
- goto error;
-- key_ref = lookup_user_key(id, 0, KEY_SETATTR);
-+ key_ref = lookup_user_key(id, 0, KEY_NEED_SETATTR);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error;
-@@ -401,7 +401,7 @@ long keyctl_invalidate_key(key_serial_t id)
-
- kenter("%d", id);
-
-- key_ref = lookup_user_key(id, 0, KEY_SEARCH);
-+ key_ref = lookup_user_key(id, 0, KEY_NEED_SEARCH);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error;
-@@ -428,7 +428,7 @@ long keyctl_keyring_clear(key_serial_t ringid)
- key_ref_t keyring_ref;
- long ret;
-
-- keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
-+ keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_NEED_WRITE);
- if (IS_ERR(keyring_ref)) {
- ret = PTR_ERR(keyring_ref);
-
-@@ -470,13 +470,13 @@ long keyctl_keyring_link(key_serial_t id, key_serial_t ringid)
- key_ref_t keyring_ref, key_ref;
- long ret;
-
-- keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
-+ keyring_ref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_NEED_WRITE);
- if (IS_ERR(keyring_ref)) {
- ret = PTR_ERR(keyring_ref);
- goto error;
- }
-
-- key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE, KEY_LINK);
-+ key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE, KEY_NEED_LINK);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error2;
-@@ -505,7 +505,7 @@ long keyctl_keyring_unlink(key_serial_t id, key_serial_t ringid)
- key_ref_t keyring_ref, key_ref;
- long ret;
-
-- keyring_ref = lookup_user_key(ringid, 0, KEY_WRITE);
-+ keyring_ref = lookup_user_key(ringid, 0, KEY_NEED_WRITE);
- if (IS_ERR(keyring_ref)) {
- ret = PTR_ERR(keyring_ref);
- goto error;
-@@ -548,7 +548,7 @@ long keyctl_describe_key(key_serial_t keyid,
- char *tmpbuf;
- long ret;
-
-- key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, KEY_VIEW);
-+ key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, KEY_NEED_VIEW);
- if (IS_ERR(key_ref)) {
- /* viewing a key under construction is permitted if we have the
- * authorisation token handy */
-@@ -639,7 +639,7 @@ long keyctl_keyring_search(key_serial_t ringid,
- }
-
- /* get the keyring at which to begin the search */
-- keyring_ref = lookup_user_key(ringid, 0, KEY_SEARCH);
-+ keyring_ref = lookup_user_key(ringid, 0, KEY_NEED_SEARCH);
- if (IS_ERR(keyring_ref)) {
- ret = PTR_ERR(keyring_ref);
- goto error2;
-@@ -649,7 +649,7 @@ long keyctl_keyring_search(key_serial_t ringid,
- dest_ref = NULL;
- if (destringid) {
- dest_ref = lookup_user_key(destringid, KEY_LOOKUP_CREATE,
-- KEY_WRITE);
-+ KEY_NEED_WRITE);
- if (IS_ERR(dest_ref)) {
- ret = PTR_ERR(dest_ref);
- goto error3;
-@@ -676,7 +676,7 @@ long keyctl_keyring_search(key_serial_t ringid,
-
- /* link the resulting key to the destination keyring if we can */
- if (dest_ref) {
-- ret = key_permission(key_ref, KEY_LINK);
-+ ret = key_permission(key_ref, KEY_NEED_LINK);
- if (ret < 0)
- goto error6;
-
-@@ -727,7 +727,7 @@ long keyctl_read_key(key_serial_t keyid, char __user *buffer, size_t buflen)
- key = key_ref_to_ptr(key_ref);
-
- /* see if we can read it directly */
-- ret = key_permission(key_ref, KEY_READ);
-+ ret = key_permission(key_ref, KEY_NEED_READ);
- if (ret == 0)
- goto can_read_key;
- if (ret != -EACCES)
-@@ -799,7 +799,7 @@ long keyctl_chown_key(key_serial_t id, uid_t user, gid_t group)
- goto error;
-
- key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
-- KEY_SETATTR);
-+ KEY_NEED_SETATTR);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error;
-@@ -905,7 +905,7 @@ long keyctl_setperm_key(key_serial_t id, key_perm_t perm)
- goto error;
-
- key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
-- KEY_SETATTR);
-+ KEY_NEED_SETATTR);
- if (IS_ERR(key_ref)) {
- ret = PTR_ERR(key_ref);
- goto error;
-@@ -947,7 +947,7 @@ static long get_instantiation_keyring(key_serial_t ringid,
-
- /* if a specific keyring is nominated by ID, then use that */
- if (ringid > 0) {
-- dkref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_WRITE);
-+ dkref = lookup_user_key(ringid, KEY_LOOKUP_CREATE, KEY_NEED_WRITE);
- if (IS_ERR(dkref))
- return PTR_ERR(dkref);
- *_dest_keyring = key_ref_to_ptr(dkref);
-@@ -1315,7 +1315,7 @@ long keyctl_set_timeout(key_serial_t id, unsigned timeout)
- long ret;
-
- key_ref = lookup_user_key(id, KEY_LOOKUP_CREATE | KEY_LOOKUP_PARTIAL,
-- KEY_SETATTR);
-+ KEY_NEED_SETATTR);
- if (IS_ERR(key_ref)) {
- /* setting the timeout on a key under construction is permitted
- * if we have the authorisation token handy */
-@@ -1418,7 +1418,7 @@ long keyctl_get_security(key_serial_t keyid,
- char *context;
- long ret;
-
-- key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, KEY_VIEW);
-+ key_ref = lookup_user_key(keyid, KEY_LOOKUP_PARTIAL, KEY_NEED_VIEW);
- if (IS_ERR(key_ref)) {
- if (PTR_ERR(key_ref) != -EACCES)
- return PTR_ERR(key_ref);
-@@ -1482,7 +1482,7 @@ long keyctl_session_to_parent(void)
- struct cred *cred;
- int ret;
-
-- keyring_r = lookup_user_key(KEY_SPEC_SESSION_KEYRING, 0, KEY_LINK);
-+ keyring_r = lookup_user_key(KEY_SPEC_SESSION_KEYRING, 0, KEY_NEED_LINK);
- if (IS_ERR(keyring_r))
- return PTR_ERR(keyring_r);
-
-diff --git a/security/keys/keyring.c b/security/keys/keyring.c
-index 2fb2576..9cf2575 100644
---- a/security/keys/keyring.c
-+++ b/security/keys/keyring.c
-@@ -541,7 +541,7 @@ static int keyring_search_iterator(const void *object, void *iterator_data)
- /* key must have search permissions */
- if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) &&
- key_task_permission(make_key_ref(key, ctx->possessed),
-- ctx->cred, KEY_SEARCH) < 0) {
-+ ctx->cred, KEY_NEED_SEARCH) < 0) {
- ctx->result = ERR_PTR(-EACCES);
- kleave(" = %d [!perm]", ctx->skipped_ret);
- goto skipped;
-@@ -721,7 +721,7 @@ ascend_to_node:
- /* Search a nested keyring */
- if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM) &&
- key_task_permission(make_key_ref(key, ctx->possessed),
-- ctx->cred, KEY_SEARCH) < 0)
-+ ctx->cred, KEY_NEED_SEARCH) < 0)
- continue;
-
- /* stack the current position */
-@@ -843,7 +843,7 @@ key_ref_t keyring_search_aux(key_ref_t keyring_ref,
- return ERR_PTR(-ENOTDIR);
-
- if (!(ctx->flags & KEYRING_SEARCH_NO_CHECK_PERM)) {
-- err = key_task_permission(keyring_ref, ctx->cred, KEY_SEARCH);
-+ err = key_task_permission(keyring_ref, ctx->cred, KEY_NEED_SEARCH);
- if (err < 0)
- return ERR_PTR(err);
- }
-@@ -973,7 +973,7 @@ struct key *find_keyring_by_name(const char *name, bool skip_perm_check)
-
- if (!skip_perm_check &&
- key_permission(make_key_ref(keyring, 0),
-- KEY_SEARCH) < 0)
-+ KEY_NEED_SEARCH) < 0)
- continue;
-
- /* we've got a match but we might end up racing with
-diff --git a/security/keys/permission.c b/security/keys/permission.c
-index efcc0c8..732cc0b 100644
---- a/security/keys/permission.c
-+++ b/security/keys/permission.c
-@@ -28,7 +28,7 @@
- * permissions bits or the LSM check.
- */
- int key_task_permission(const key_ref_t key_ref, const struct cred *cred,
-- key_perm_t perm)
-+ unsigned perm)
- {
- struct key *key;
- key_perm_t kperm;
-@@ -68,7 +68,7 @@ use_these_perms:
- if (is_key_possessed(key_ref))
- kperm |= key->perm >> 24;
-
-- kperm = kperm & perm & KEY_ALL;
-+ kperm = kperm & perm & KEY_NEED_ALL;
-
- if (kperm != perm)
- return -EACCES;
-diff --git a/security/keys/persistent.c b/security/keys/persistent.c
-index 0ad3ee2..c9fae5e 100644
---- a/security/keys/persistent.c
-+++ b/security/keys/persistent.c
-@@ -108,7 +108,7 @@ static long key_get_persistent(struct user_namespace *ns, kuid_t uid,
- return PTR_ERR(persistent_ref);
-
- found:
-- ret = key_task_permission(persistent_ref, current_cred(), KEY_LINK);
-+ ret = key_task_permission(persistent_ref, current_cred(), KEY_NEED_LINK);
- if (ret == 0) {
- persistent = key_ref_to_ptr(persistent_ref);
- ret = key_link(key_ref_to_ptr(dest_ref), persistent);
-@@ -151,7 +151,7 @@ long keyctl_get_persistent(uid_t _uid, key_serial_t destid)
- }
-
- /* There must be a destination keyring */
-- dest_ref = lookup_user_key(destid, KEY_LOOKUP_CREATE, KEY_WRITE);
-+ dest_ref = lookup_user_key(destid, KEY_LOOKUP_CREATE, KEY_NEED_WRITE);
- if (IS_ERR(dest_ref))
- return PTR_ERR(dest_ref);
- if (key_ref_to_ptr(dest_ref)->type != &key_type_keyring) {
-diff --git a/security/keys/proc.c b/security/keys/proc.c
-index 88e9a46..d3f6f2f 100644
---- a/security/keys/proc.c
-+++ b/security/keys/proc.c
-@@ -218,7 +218,7 @@ static int proc_keys_show(struct seq_file *m, void *v)
- * - the caller holds a spinlock, and thus the RCU read lock, making our
- * access to __current_cred() safe
- */
-- rc = key_task_permission(key_ref, ctx.cred, KEY_VIEW);
-+ rc = key_task_permission(key_ref, ctx.cred, KEY_NEED_VIEW);
- if (rc < 0)
- return 0;
-
-diff --git a/security/security.c b/security/security.c
-index 919cad9..d91fec4 100644
---- a/security/security.c
-+++ b/security/security.c
-@@ -1407,7 +1407,7 @@ void security_key_free(struct key *key)
- }
-
- int security_key_permission(key_ref_t key_ref,
-- const struct cred *cred, key_perm_t perm)
-+ const struct cred *cred, unsigned perm)
- {
- return security_ops->key_permission(key_ref, cred, perm);
- }
-diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c
-index 47b5c69..c8195b3 100644
---- a/security/selinux/hooks.c
-+++ b/security/selinux/hooks.c
-@@ -5723,7 +5723,7 @@ static void selinux_key_free(struct key *k)
-
- static int selinux_key_permission(key_ref_t key_ref,
- const struct cred *cred,
-- key_perm_t perm)
-+ unsigned perm)
- {
- struct key *key;
- struct key_security_struct *ksec;
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index f0ebcb0..eabb97f 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -3514,7 +3514,7 @@ static void smack_key_free(struct key *key)
- * an error code otherwise
- */
- static int smack_key_permission(key_ref_t key_ref,
-- const struct cred *cred, key_perm_t perm)
-+ const struct cred *cred, unsigned perm)
- {
- struct key *keyp;
- struct smk_audit_info ad;
---
-1.8.1.4
-
--- /dev/null
+From f6c3b1acf2bd4677be13d43ca0be07f8a3a83ccc Mon Sep 17 00:00:00 2001
+From: "Chew, Kean ho" <kean.ho.chew@intel.com>
+Date: Sat, 1 Mar 2014 00:03:56 +0800
+Subject: [PATCH 05/45] i2c: i801: enable Intel BayTrail SMBUS
+
+Add Device ID of Intel BayTrail SMBus Controller.
+
+Signed-off-by: Chew, Kean ho <kean.ho.chew@intel.com>
+Signed-off-by: Chew, Chiau Ee <chiau.ee.chew@intel.com>
+Reviewed-by: Jean Delvare <jdelvare@suse.de>
+Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
+---
+ Documentation/i2c/busses/i2c-i801 | 1 +
+ drivers/i2c/busses/Kconfig | 1 +
+ drivers/i2c/busses/i2c-i801.c | 3 +++
+ 3 files changed, 5 insertions(+)
+
+diff --git a/Documentation/i2c/busses/i2c-i801 b/Documentation/i2c/busses/i2c-i801
+index aaaf0693..adf5e33 100644
+--- a/Documentation/i2c/busses/i2c-i801
++++ b/Documentation/i2c/busses/i2c-i801
+@@ -26,6 +26,7 @@ Supported adapters:
+ * Intel Wellsburg (PCH)
+ * Intel Coleto Creek (PCH)
+ * Intel Wildcat Point-LP (PCH)
++ * Intel BayTrail (SOC)
+ Datasheets: Publicly available at the Intel website
+
+ On Intel Patsburg and later chipsets, both the normal host SMBus controller
+diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
+index de17c55..c5eec02 100644
+--- a/drivers/i2c/busses/Kconfig
++++ b/drivers/i2c/busses/Kconfig
+@@ -110,6 +110,7 @@ config I2C_I801
+ Wellsburg (PCH)
+ Coleto Creek (PCH)
+ Wildcat Point-LP (PCH)
++ BayTrail (SOC)
+
+ This driver can also be built as a module. If so, the module
+ will be called i2c-i801.
+diff --git a/drivers/i2c/busses/i2c-i801.c b/drivers/i2c/busses/i2c-i801.c
+index 349c2d3..899f559 100644
+--- a/drivers/i2c/busses/i2c-i801.c
++++ b/drivers/i2c/busses/i2c-i801.c
+@@ -60,6 +60,7 @@
+ Wellsburg (PCH) MS 0x8d7f 32 hard yes yes yes
+ Coleto Creek (PCH) 0x23b0 32 hard yes yes yes
+ Wildcat Point-LP (PCH) 0x9ca2 32 hard yes yes yes
++ BayTrail (SOC) 0x0f12 32 hard yes yes yes
+
+ Features supported by this driver:
+ Software PEC no
+@@ -161,6 +162,7 @@
+ STATUS_ERROR_FLAGS)
+
+ /* Older devices have their ID defined in <linux/pci_ids.h> */
++#define PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS 0x0f12
+ #define PCI_DEVICE_ID_INTEL_COUGARPOINT_SMBUS 0x1c22
+ #define PCI_DEVICE_ID_INTEL_PATSBURG_SMBUS 0x1d22
+ /* Patsburg also has three 'Integrated Device Function' SMBus controllers */
+@@ -822,6 +824,7 @@ static DEFINE_PCI_DEVICE_TABLE(i801_ids) = {
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WELLSBURG_SMBUS_MS2) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_COLETOCREEK_SMBUS) },
+ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_WILDCATPOINT_LP_SMBUS) },
++ { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_BAYTRAIL_SMBUS) },
+ { 0, }
+ };
+
+--
+1.8.4.5
+
+++ /dev/null
-From 959c5046ea4ee48436d62d41f60c0ae70872deeb Mon Sep 17 00:00:00 2001
-From: Dmitry Kasatkin <d.kasatkin@samsung.com>
-Date: Fri, 14 Mar 2014 17:44:49 +0000
-Subject: [PATCH 05/20] smack: fix key permission verification
-
-For any keyring access type SMACK always used MAY_READWRITE access check.
-It prevents reading the key with label "_", which should be allowed for anyone.
-
-This patch changes default access check to MAY_READ and use MAY_READWRITE in only
-appropriate cases.
-
-Change-Id: Ie357956730df93058198e2df13ef307ce4e8f675
-Signed-off-by: Dmitry Kasatkin <d.kasatkin@samsung.com>
-Signed-off-by: David Howells <dhowells@redhat.com>
-Acked-by: Casey Schaufler <casey@schaufler-ca.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 7 ++++++-
- 1 file changed, 6 insertions(+), 1 deletion(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index eabb97f..c972a71 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -3519,6 +3519,7 @@ static int smack_key_permission(key_ref_t key_ref,
- struct key *keyp;
- struct smk_audit_info ad;
- struct smack_known *tkp = smk_of_task(cred->security);
-+ int request = 0;
-
- keyp = key_ref_to_ptr(key_ref);
- if (keyp == NULL)
-@@ -3539,7 +3540,11 @@ static int smack_key_permission(key_ref_t key_ref,
- ad.a.u.key_struct.key = keyp->serial;
- ad.a.u.key_struct.key_desc = keyp->description;
- #endif
-- return smk_access(tkp, keyp->security, MAY_READWRITE, &ad);
-+ if (perm & KEY_NEED_READ)
-+ request = MAY_READ;
-+ if (perm & (KEY_NEED_WRITE | KEY_NEED_LINK | KEY_NEED_SETATTR))
-+ request = MAY_WRITE;
-+ return smk_access(tkp, keyp->security, request, &ad);
- }
- #endif /* CONFIG_KEYS */
-
---
-1.8.1.4
-
+++ /dev/null
-From 0d2724a3b7e348b2e2de0bbcdc147d0cd190a35f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@open.eurogiciel.org>
-Date: Wed, 8 Jan 2014 15:53:05 +0100
-Subject: [PATCH 06/20] Minor improvement of 'smack_sb_kern_mount'
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-Fix a possible memory access fault when transmute is true and isp is NULL.
-
-Change-Id: I29708ce54b96b34b440cf349e2b1891ea8d9d34f
-Signed-off-by: José Bollo <jose.bollo@open.eurogiciel.org>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 8 +++++---
- 1 file changed, 5 insertions(+), 3 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index c972a71..816e785 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -413,9 +413,11 @@ static int smack_sb_kern_mount(struct super_block *sb, int flags, void *data)
- * Initialize the root inode.
- */
- isp = inode->i_security;
-- if (inode->i_security == NULL) {
-- inode->i_security = new_inode_smack(sp->smk_root);
-- isp = inode->i_security;
-+ if (isp == NULL) {
-+ isp = new_inode_smack(sp->smk_root);
-+ if (isp == NULL)
-+ return -ENOMEM;
-+ inode->i_security = isp;
- } else
- isp->smk_inode = sp->smk_root;
-
---
-1.8.1.4
-
+++ /dev/null
-From 78cb905ed59e8b3c7c37c0ab562549aa105502d6 Mon Sep 17 00:00:00 2001
-From: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
-Date: Tue, 11 Mar 2014 17:07:04 +0100
-Subject: [PATCH 07/20] Smack: fix the subject/object order in
- smack_ptrace_traceme()
-
-The order of subject/object is currently reversed in
-smack_ptrace_traceme(). It is currently checked if the tracee has a
-capability to trace tracer and according to this rule a decision is made
-whether the tracer will be allowed to trace tracee.
-
-Change-Id: I70afd604b29e5d6515d042ab648b0513c1f77d7a
-Signed-off-by: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack.h | 1 +
- security/smack/smack_access.c | 33 ++++++++++++++++++++++++++-------
- security/smack/smack_lsm.c | 4 ++--
- 3 files changed, 29 insertions(+), 9 deletions(-)
-
-diff --git a/security/smack/smack.h b/security/smack/smack.h
-index d072fd3..b9dfc4e 100644
---- a/security/smack/smack.h
-+++ b/security/smack/smack.h
-@@ -225,6 +225,7 @@ struct inode_smack *new_inode_smack(char *);
- */
- int smk_access_entry(char *, char *, struct list_head *);
- int smk_access(struct smack_known *, char *, int, struct smk_audit_info *);
-+int smk_tskacc(struct task_smack *, char *, u32, struct smk_audit_info *);
- int smk_curacc(char *, u32, struct smk_audit_info *);
- struct smack_known *smack_from_secid(const u32);
- char *smk_parse_smack(const char *string, int len);
-diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
-index 14293cd..f161deb 100644
---- a/security/smack/smack_access.c
-+++ b/security/smack/smack_access.c
-@@ -192,20 +192,21 @@ out_audit:
- }
-
- /**
-- * smk_curacc - determine if current has a specific access to an object
-+ * smk_tskacc - determine if a task has a specific access to an object
-+ * @tsp: a pointer to the subject task
- * @obj_label: a pointer to the object's Smack label
- * @mode: the access requested, in "MAY" format
- * @a : common audit data
- *
-- * This function checks the current subject label/object label pair
-+ * This function checks the subject task's label/object label pair
- * in the access rule list and returns 0 if the access is permitted,
-- * non zero otherwise. It allows that current may have the capability
-+ * non zero otherwise. It allows that the task may have the capability
- * to override the rules.
- */
--int smk_curacc(char *obj_label, u32 mode, struct smk_audit_info *a)
-+int smk_tskacc(struct task_smack *subject, char *obj_label,
-+ u32 mode, struct smk_audit_info *a)
- {
-- struct task_smack *tsp = current_security();
-- struct smack_known *skp = smk_of_task(tsp);
-+ struct smack_known *skp = smk_of_task(subject);
- int may;
- int rc;
-
-@@ -219,7 +220,7 @@ int smk_curacc(char *obj_label, u32 mode, struct smk_audit_info *a)
- * it can further restrict access.
- */
- may = smk_access_entry(skp->smk_known, obj_label,
-- &tsp->smk_rules);
-+ &subject->smk_rules);
- if (may < 0)
- goto out_audit;
- if ((mode & may) == mode)
-@@ -241,6 +242,24 @@ out_audit:
- return rc;
- }
-
-+/**
-+ * smk_curacc - determine if current has a specific access to an object
-+ * @obj_label: a pointer to the object's Smack label
-+ * @mode: the access requested, in "MAY" format
-+ * @a : common audit data
-+ *
-+ * This function checks the current subject label/object label pair
-+ * in the access rule list and returns 0 if the access is permitted,
-+ * non zero otherwise. It allows that current may have the capability
-+ * to override the rules.
-+ */
-+int smk_curacc(char *obj_label, u32 mode, struct smk_audit_info *a)
-+{
-+ struct task_smack *tsp = current_security();
-+
-+ return smk_tskacc(tsp, obj_label, mode, a);
-+}
-+
- #ifdef CONFIG_AUDIT
- /**
- * smack_str_from_perm : helper to transalate an int to a
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 816e785..3617a56 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -207,11 +207,11 @@ static int smack_ptrace_traceme(struct task_struct *ptp)
- if (rc != 0)
- return rc;
-
-- skp = smk_of_task(task_security(ptp));
-+ skp = smk_of_task(current_security());
- smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_TASK);
- smk_ad_setfield_u_tsk(&ad, ptp);
-
-- rc = smk_curacc(skp->smk_known, MAY_READWRITE, &ad);
-+ rc = smk_tskacc(ptp, skp->smk_known, MAY_READWRITE, &ad);
- return rc;
- }
-
---
-1.8.1.4
-
--- /dev/null
+From 54c1b9943e31d54771be8b86ad277ec56ae9aa49 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Wed, 12 Feb 2014 12:26:24 -0800
+Subject: [PATCH 07/45] drm: export cmdline and preferred mode functions from
+ fb helper
+
+This allows drivers to use them in custom initial_config functions.
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Acked-by: Dave Airlie <airlied@gmail.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Change-Id: Ic9e2756e25c96a101e3cdc73b0b3b35c7a199efe
+---
+ drivers/gpu/drm/drm_fb_helper.c | 6 ++++--
+ include/drm/drm_fb_helper.h | 6 ++++++
+ 2 files changed, 10 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
+index 98a0363..d99df15 100644
+--- a/drivers/gpu/drm/drm_fb_helper.c
++++ b/drivers/gpu/drm/drm_fb_helper.c
+@@ -1136,7 +1136,7 @@ static int drm_fb_helper_probe_connector_modes(struct drm_fb_helper *fb_helper,
+ return count;
+ }
+
+-static struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector, int width, int height)
++struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector, int width, int height)
+ {
+ struct drm_display_mode *mode;
+
+@@ -1149,6 +1149,7 @@ static struct drm_display_mode *drm_has_preferred_mode(struct drm_fb_helper_conn
+ }
+ return NULL;
+ }
++EXPORT_SYMBOL(drm_has_preferred_mode);
+
+ static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector)
+ {
+@@ -1157,7 +1158,7 @@ static bool drm_has_cmdline_mode(struct drm_fb_helper_connector *fb_connector)
+ return cmdline_mode->specified;
+ }
+
+-static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
++struct drm_display_mode *drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
+ int width, int height)
+ {
+ struct drm_cmdline_mode *cmdline_mode;
+@@ -1197,6 +1198,7 @@ create_mode:
+ list_add(&mode->head, &fb_helper_conn->connector->modes);
+ return mode;
+ }
++EXPORT_SYMBOL(drm_pick_cmdline_mode);
+
+ static bool drm_connector_enabled(struct drm_connector *connector, bool strict)
+ {
+diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
+index 471f276..2d659dc 100644
+--- a/include/drm/drm_fb_helper.h
++++ b/include/drm/drm_fb_helper.h
+@@ -121,5 +121,11 @@ bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper, int bpp_sel);
+ int drm_fb_helper_single_add_all_connectors(struct drm_fb_helper *fb_helper);
+ int drm_fb_helper_debug_enter(struct fb_info *info);
+ int drm_fb_helper_debug_leave(struct fb_info *info);
++struct drm_display_mode *
++drm_has_preferred_mode(struct drm_fb_helper_connector *fb_connector,
++ int width, int height);
++struct drm_display_mode *
++drm_pick_cmdline_mode(struct drm_fb_helper_connector *fb_helper_conn,
++ int width, int height);
+
+ #endif
+--
+1.8.4.5
+
+++ /dev/null
-From f9ddb212e091949c27b5461015e817455f40a1fc Mon Sep 17 00:00:00 2001
-From: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
-Date: Tue, 11 Mar 2014 17:07:05 +0100
-Subject: [PATCH 08/20] Smack: unify all ptrace accesses in the smack
-
-The decision whether we can trace a process is made in the following
-functions:
- smack_ptrace_traceme()
- smack_ptrace_access_check()
- smack_bprm_set_creds() (in case the proces is traced)
-
-This patch unifies all those decisions by introducing one function that
-checks whether ptrace is allowed: smk_ptrace_rule_check().
-
-This makes possible to actually trace with TRACEME where first the
-TRACEME itself must be allowed and then exec() on a traced process.
-
-Additional bugs fixed:
-- The decision is made according to the mode parameter that is now correctly
- translated from PTRACE_MODE_* to MAY_* instead of being treated 1:1.
- PTRACE_MODE_READ requires MAY_READ.
- PTRACE_MODE_ATTACH requires MAY_READWRITE.
-- Add a smack audit log in case of exec() refused by bprm_set_creds().
-- Honor the PTRACE_MODE_NOAUDIT flag and don't put smack audit info
- in case this flag is set.
-
-Change-Id: I14d6de0c11ce190e53788a0b4fc096471506c736
-Signed-off-by: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 84 +++++++++++++++++++++++++++++++++++++++-------
- 1 file changed, 71 insertions(+), 13 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 3617a56..23d90cd 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -157,6 +157,54 @@ static int smk_copy_rules(struct list_head *nhead, struct list_head *ohead,
- return rc;
- }
-
-+/**
-+ * smk_ptrace_mode - helper function for converting PTRACE_MODE_* into MAY_*
-+ * @mode - input mode in form of PTRACE_MODE_*
-+ *
-+ * Returns a converted MAY_* mode usable by smack rules
-+ */
-+static inline unsigned int smk_ptrace_mode(unsigned int mode)
-+{
-+ switch (mode) {
-+ case PTRACE_MODE_READ:
-+ return MAY_READ;
-+ case PTRACE_MODE_ATTACH:
-+ return MAY_READWRITE;
-+ }
-+
-+ return 0;
-+}
-+
-+/**
-+ * smk_ptrace_rule_check - helper for ptrace access
-+ * @tracer: tracer process
-+ * @tracee_label: label of the process that's about to be traced
-+ * @mode: ptrace attachment mode (PTRACE_MODE_*)
-+ * @func: name of the function that called us, used for audit
-+ *
-+ * Returns 0 on access granted, -error on error
-+ */
-+static int smk_ptrace_rule_check(struct task_struct *tracer, char *tracee_label,
-+ unsigned int mode, const char *func)
-+{
-+ int rc;
-+ struct smk_audit_info ad, *saip = NULL;
-+ struct task_smack *tsp;
-+ struct smack_known *skp;
-+
-+ if ((mode & PTRACE_MODE_NOAUDIT) == 0) {
-+ smk_ad_init(&ad, func, LSM_AUDIT_DATA_TASK);
-+ smk_ad_setfield_u_tsk(&ad, tracer);
-+ saip = &ad;
-+ }
-+
-+ tsp = task_security(tracer);
-+ skp = smk_of_task(tsp);
-+
-+ rc = smk_tskacc(tsp, tracee_label, smk_ptrace_mode(mode), saip);
-+ return rc;
-+}
-+
- /*
- * LSM hooks.
- * We he, that is fun!
-@@ -165,16 +213,15 @@ static int smk_copy_rules(struct list_head *nhead, struct list_head *ohead,
- /**
- * smack_ptrace_access_check - Smack approval on PTRACE_ATTACH
- * @ctp: child task pointer
-- * @mode: ptrace attachment mode
-+ * @mode: ptrace attachment mode (PTRACE_MODE_*)
- *
- * Returns 0 if access is OK, an error code otherwise
- *
-- * Do the capability checks, and require read and write.
-+ * Do the capability checks.
- */
- static int smack_ptrace_access_check(struct task_struct *ctp, unsigned int mode)
- {
- int rc;
-- struct smk_audit_info ad;
- struct smack_known *skp;
-
- rc = cap_ptrace_access_check(ctp, mode);
-@@ -182,10 +229,8 @@ static int smack_ptrace_access_check(struct task_struct *ctp, unsigned int mode)
- return rc;
-
- skp = smk_of_task(task_security(ctp));
-- smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_TASK);
-- smk_ad_setfield_u_tsk(&ad, ctp);
-
-- rc = smk_curacc(skp->smk_known, mode, &ad);
-+ rc = smk_ptrace_rule_check(current, skp->smk_known, mode, __func__);
- return rc;
- }
-
-@@ -195,12 +240,11 @@ static int smack_ptrace_access_check(struct task_struct *ctp, unsigned int mode)
- *
- * Returns 0 if access is OK, an error code otherwise
- *
-- * Do the capability checks, and require read and write.
-+ * Do the capability checks, and require PTRACE_MODE_ATTACH.
- */
- static int smack_ptrace_traceme(struct task_struct *ptp)
- {
- int rc;
-- struct smk_audit_info ad;
- struct smack_known *skp;
-
- rc = cap_ptrace_traceme(ptp);
-@@ -208,10 +252,9 @@ static int smack_ptrace_traceme(struct task_struct *ptp)
- return rc;
-
- skp = smk_of_task(current_security());
-- smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_TASK);
-- smk_ad_setfield_u_tsk(&ad, ptp);
-
-- rc = smk_tskacc(ptp, skp->smk_known, MAY_READWRITE, &ad);
-+ rc = smk_ptrace_rule_check(ptp, skp->smk_known,
-+ PTRACE_MODE_ATTACH, __func__);
- return rc;
- }
-
-@@ -455,7 +498,7 @@ static int smack_sb_statfs(struct dentry *dentry)
- * smack_bprm_set_creds - set creds for exec
- * @bprm: the exec information
- *
-- * Returns 0 if it gets a blob, -ENOMEM otherwise
-+ * Returns 0 if it gets a blob, -EPERM if exec forbidden and -ENOMEM otherwise
- */
- static int smack_bprm_set_creds(struct linux_binprm *bprm)
- {
-@@ -475,7 +518,22 @@ static int smack_bprm_set_creds(struct linux_binprm *bprm)
- if (isp->smk_task == NULL || isp->smk_task == bsp->smk_task)
- return 0;
-
-- if (bprm->unsafe)
-+ if (bprm->unsafe & (LSM_UNSAFE_PTRACE | LSM_UNSAFE_PTRACE_CAP)) {
-+ struct task_struct *tracer;
-+ rc = 0;
-+
-+ rcu_read_lock();
-+ tracer = ptrace_parent(current);
-+ if (likely(tracer != NULL))
-+ rc = smk_ptrace_rule_check(tracer,
-+ isp->smk_task->smk_known,
-+ PTRACE_MODE_ATTACH,
-+ __func__);
-+ rcu_read_unlock();
-+
-+ if (rc != 0)
-+ return rc;
-+ } else if (bprm->unsafe)
- return -EPERM;
-
- bsp->smk_task = isp->smk_task;
---
-1.8.1.4
-
--- /dev/null
+From bc865ec261c3692d52f0918db911af738669bc59 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Tue, 11 Feb 2014 15:28:57 -0800
+Subject: [PATCH 08/45] drm/i915: Pass explicit mode into mode_from_pipe_config
+ v3
+
+We want to reuse this in the fbdev initial config code independently
+from any fastboot hacks. So allow a bit more flexibility.
+
+v2: Forgot to git add ...
+v3: make non-static (Jesse)
+
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Jin Song <jin.kyu.song@linux.intel.com>
+
+Conflicts:
+ drivers/gpu/drm/i915/intel_display.c
+ drivers/gpu/drm/i915/intel_drv.h
+Change-Id: I1df0ff06612d699035c6fdb1a760882bfa135d88
+---
+ drivers/gpu/drm/i915/intel_display.c | 32 ++++++++++++++------------------
+ drivers/gpu/drm/i915/intel_drv.h | 3 +++
+ 2 files changed, 17 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 9b8a7c7..da9b9bd 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -5259,25 +5259,23 @@ static void intel_get_pipe_timings(struct intel_crtc *crtc,
+ pipe_config->requested_mode.hdisplay = pipe_config->pipe_src_w;
+ }
+
+-static void intel_crtc_mode_from_pipe_config(struct intel_crtc *intel_crtc,
+- struct intel_crtc_config *pipe_config)
++void intel_mode_from_pipe_config(struct drm_display_mode *mode,
++ struct intel_crtc_config *pipe_config)
+ {
+- struct drm_crtc *crtc = &intel_crtc->base;
++ mode->hdisplay = pipe_config->adjusted_mode.crtc_hdisplay;
++ mode->htotal = pipe_config->adjusted_mode.crtc_htotal;
++ mode->hsync_start = pipe_config->adjusted_mode.crtc_hsync_start;
++ mode->hsync_end = pipe_config->adjusted_mode.crtc_hsync_end;
+
+- crtc->mode.hdisplay = pipe_config->adjusted_mode.crtc_hdisplay;
+- crtc->mode.htotal = pipe_config->adjusted_mode.crtc_htotal;
+- crtc->mode.hsync_start = pipe_config->adjusted_mode.crtc_hsync_start;
+- crtc->mode.hsync_end = pipe_config->adjusted_mode.crtc_hsync_end;
++ mode->vdisplay = pipe_config->adjusted_mode.crtc_vdisplay;
++ mode->vtotal = pipe_config->adjusted_mode.crtc_vtotal;
++ mode->vsync_start = pipe_config->adjusted_mode.crtc_vsync_start;
++ mode->vsync_end = pipe_config->adjusted_mode.crtc_vsync_end;
+
+- crtc->mode.vdisplay = pipe_config->adjusted_mode.crtc_vdisplay;
+- crtc->mode.vtotal = pipe_config->adjusted_mode.crtc_vtotal;
+- crtc->mode.vsync_start = pipe_config->adjusted_mode.crtc_vsync_start;
+- crtc->mode.vsync_end = pipe_config->adjusted_mode.crtc_vsync_end;
++ mode->flags = pipe_config->adjusted_mode.flags;
+
+- crtc->mode.flags = pipe_config->adjusted_mode.flags;
+-
+- crtc->mode.clock = pipe_config->adjusted_mode.crtc_clock;
+- crtc->mode.flags |= pipe_config->adjusted_mode.flags;
++ mode->clock = pipe_config->adjusted_mode.crtc_clock;
++ mode->flags |= pipe_config->adjusted_mode.flags;
+ }
+
+ static void i9xx_set_pipeconf(struct intel_crtc *intel_crtc)
+@@ -11266,9 +11264,7 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list,
+ base.head) {
+ if (crtc->active && i915_fastboot) {
+- intel_crtc_mode_from_pipe_config(crtc, &crtc->config);
+-
+- DRM_DEBUG_KMS("[CRTC:%d] found active mode: ",
++ intel_mode_from_pipe_config(&crtc->base.mode, &crtc->config); DRM_DEBUG_KMS("[CRTC:%d] found active mode: ",
+ crtc->base.base.id);
+ drm_mode_debug_printmodeline(&crtc->base.mode);
+ }
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index fbfaaba..ea49bf2 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -710,6 +710,9 @@ void hsw_enable_ips(struct intel_crtc *crtc);
+ void hsw_disable_ips(struct intel_crtc *crtc);
+ void intel_display_set_init_power(struct drm_device *dev, bool enable);
+ int valleyview_get_vco(struct drm_i915_private *dev_priv);
++int intel_format_to_fourcc(int format);
++void intel_mode_from_pipe_config(struct drm_display_mode *mode,
++ struct intel_crtc_config *pipe_config);
+
+ /* intel_dp.c */
+ void intel_dp_init(struct drm_device *dev, int output_reg, enum port port);
+--
+1.8.4.5
+
+++ /dev/null
-From 60ba6997583de20f90e354b4dc795424c053cb42 Mon Sep 17 00:00:00 2001
-From: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
-Date: Tue, 11 Mar 2014 17:07:06 +0100
-Subject: [PATCH 09/20] Smack: adds smackfs/ptrace interface
-
-This allows to limit ptrace beyond the regular smack access rules.
-It adds a smackfs/ptrace interface that allows smack to be configured
-to require equal smack labels for PTRACE_MODE_ATTACH access.
-See the changes in Documentation/security/Smack.txt below for details.
-
-Change-Id: If5d887a86b8d05ac46c82e1e7e123b86a5d62ddb
-Signed-off-by: Lukasz Pawelczyk <l.pawelczyk@partner.samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- Documentation/security/Smack.txt | 10 ++++++
- security/smack/smack.h | 9 +++++
- security/smack/smack_access.c | 5 ++-
- security/smack/smack_lsm.c | 22 +++++++++++-
- security/smack/smackfs.c | 74 ++++++++++++++++++++++++++++++++++++++++
- 5 files changed, 118 insertions(+), 2 deletions(-)
-
-diff --git a/Documentation/security/Smack.txt b/Documentation/security/Smack.txt
-index 7a2d30c..5597917 100644
---- a/Documentation/security/Smack.txt
-+++ b/Documentation/security/Smack.txt
-@@ -204,6 +204,16 @@ onlycap
- these capabilities are effective at for processes with any
- label. The value is set by writing the desired label to the
- file or cleared by writing "-" to the file.
-+ptrace
-+ This is used to define the current ptrace policy
-+ 0 - default: this is the policy that relies on smack access rules.
-+ For the PTRACE_READ a subject needs to have a read access on
-+ object. For the PTRACE_ATTACH a read-write access is required.
-+ 1 - exact: this is the policy that limits PTRACE_ATTACH. Attach is
-+ only allowed when subject's and object's labels are equal.
-+ PTRACE_READ is not affected. Can be overriden with CAP_SYS_PTRACE.
-+ 2 - draconian: this policy behaves like the 'exact' above with an
-+ exception that it can't be overriden with CAP_SYS_PTRACE.
- revoke-subject
- Writing a Smack label here sets the access to '-' for all access
- rules with that subject label.
-diff --git a/security/smack/smack.h b/security/smack/smack.h
-index b9dfc4e..fade085 100644
---- a/security/smack/smack.h
-+++ b/security/smack/smack.h
-@@ -177,6 +177,14 @@ struct smk_port_label {
- #define SMACK_CIPSO_MAXCATNUM 184 /* 23 * 8 */
-
- /*
-+ * Ptrace rules
-+ */
-+#define SMACK_PTRACE_DEFAULT 0
-+#define SMACK_PTRACE_EXACT 1
-+#define SMACK_PTRACE_DRACONIAN 2
-+#define SMACK_PTRACE_MAX SMACK_PTRACE_DRACONIAN
-+
-+/*
- * Flags for untraditional access modes.
- * It shouldn't be necessary to avoid conflicts with definitions
- * in fs.h, but do so anyway.
-@@ -245,6 +253,7 @@ extern struct smack_known *smack_net_ambient;
- extern struct smack_known *smack_onlycap;
- extern struct smack_known *smack_syslog_label;
- extern const char *smack_cipso_option;
-+extern int smack_ptrace_rule;
-
- extern struct smack_known smack_known_floor;
- extern struct smack_known smack_known_hat;
-diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
-index f161deb..c062e94 100644
---- a/security/smack/smack_access.c
-+++ b/security/smack/smack_access.c
-@@ -304,7 +304,10 @@ static void smack_log_callback(struct audit_buffer *ab, void *a)
- audit_log_untrustedstring(ab, sad->subject);
- audit_log_format(ab, " object=");
- audit_log_untrustedstring(ab, sad->object);
-- audit_log_format(ab, " requested=%s", sad->request);
-+ if (sad->request[0] == '\0')
-+ audit_log_format(ab, " labels_differ");
-+ else
-+ audit_log_format(ab, " requested=%s", sad->request);
- }
-
- /**
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 23d90cd..d430977 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -178,7 +178,8 @@ static inline unsigned int smk_ptrace_mode(unsigned int mode)
- /**
- * smk_ptrace_rule_check - helper for ptrace access
- * @tracer: tracer process
-- * @tracee_label: label of the process that's about to be traced
-+ * @tracee_label: label of the process that's about to be traced,
-+ * the pointer must originate from smack structures
- * @mode: ptrace attachment mode (PTRACE_MODE_*)
- * @func: name of the function that called us, used for audit
- *
-@@ -201,6 +202,25 @@ static int smk_ptrace_rule_check(struct task_struct *tracer, char *tracee_label,
- tsp = task_security(tracer);
- skp = smk_of_task(tsp);
-
-+ if ((mode & PTRACE_MODE_ATTACH) &&
-+ (smack_ptrace_rule == SMACK_PTRACE_EXACT ||
-+ smack_ptrace_rule == SMACK_PTRACE_DRACONIAN)) {
-+ if (skp->smk_known == tracee_label)
-+ rc = 0;
-+ else if (smack_ptrace_rule == SMACK_PTRACE_DRACONIAN)
-+ rc = -EACCES;
-+ else if (capable(CAP_SYS_PTRACE))
-+ rc = 0;
-+ else
-+ rc = -EACCES;
-+
-+ if (saip)
-+ smack_log(skp->smk_known, tracee_label, 0, rc, saip);
-+
-+ return rc;
-+ }
-+
-+ /* In case of rule==SMACK_PTRACE_DEFAULT or mode==PTRACE_MODE_READ */
- rc = smk_tskacc(tsp, tracee_label, smk_ptrace_mode(mode), saip);
- return rc;
- }
-diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
-index 3198cfe..177d878 100644
---- a/security/smack/smackfs.c
-+++ b/security/smack/smackfs.c
-@@ -53,6 +53,7 @@ enum smk_inos {
- SMK_REVOKE_SUBJ = 18, /* set rules with subject label to '-' */
- SMK_CHANGE_RULE = 19, /* change or add rules (long labels) */
- SMK_SYSLOG = 20, /* change syslog label) */
-+ SMK_PTRACE = 21, /* set ptrace rule */
- };
-
- /*
-@@ -101,6 +102,15 @@ struct smack_known *smack_onlycap;
- struct smack_known *smack_syslog_label;
-
- /*
-+ * Ptrace current rule
-+ * SMACK_PTRACE_DEFAULT regular smack ptrace rules (/proc based)
-+ * SMACK_PTRACE_EXACT labels must match, but can be overriden with
-+ * CAP_SYS_PTRACE
-+ * SMACK_PTRACE_DRACONIAN lables must match, CAP_SYS_PTRACE has no effect
-+ */
-+int smack_ptrace_rule = SMACK_PTRACE_DEFAULT;
-+
-+/*
- * Certain IP addresses may be designated as single label hosts.
- * Packets are sent there unlabeled, but only from tasks that
- * can write to the specified label.
-@@ -2244,6 +2254,68 @@ static const struct file_operations smk_syslog_ops = {
-
-
- /**
-+ * smk_read_ptrace - read() for /smack/ptrace
-+ * @filp: file pointer, not actually used
-+ * @buf: where to put the result
-+ * @count: maximum to send along
-+ * @ppos: where to start
-+ *
-+ * Returns number of bytes read or error code, as appropriate
-+ */
-+static ssize_t smk_read_ptrace(struct file *filp, char __user *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ char temp[32];
-+ ssize_t rc;
-+
-+ if (*ppos != 0)
-+ return 0;
-+
-+ sprintf(temp, "%d\n", smack_ptrace_rule);
-+ rc = simple_read_from_buffer(buf, count, ppos, temp, strlen(temp));
-+ return rc;
-+}
-+
-+/**
-+ * smk_write_ptrace - write() for /smack/ptrace
-+ * @file: file pointer
-+ * @buf: data from user space
-+ * @count: bytes sent
-+ * @ppos: where to start - must be 0
-+ */
-+static ssize_t smk_write_ptrace(struct file *file, const char __user *buf,
-+ size_t count, loff_t *ppos)
-+{
-+ char temp[32];
-+ int i;
-+
-+ if (!smack_privileged(CAP_MAC_ADMIN))
-+ return -EPERM;
-+
-+ if (*ppos != 0 || count >= sizeof(temp) || count == 0)
-+ return -EINVAL;
-+
-+ if (copy_from_user(temp, buf, count) != 0)
-+ return -EFAULT;
-+
-+ temp[count] = '\0';
-+
-+ if (sscanf(temp, "%d", &i) != 1)
-+ return -EINVAL;
-+ if (i < SMACK_PTRACE_DEFAULT || i > SMACK_PTRACE_MAX)
-+ return -EINVAL;
-+ smack_ptrace_rule = i;
-+
-+ return count;
-+}
-+
-+static const struct file_operations smk_ptrace_ops = {
-+ .write = smk_write_ptrace,
-+ .read = smk_read_ptrace,
-+ .llseek = default_llseek,
-+};
-+
-+/**
- * smk_fill_super - fill the smackfs superblock
- * @sb: the empty superblock
- * @data: unused
-@@ -2296,6 +2368,8 @@ static int smk_fill_super(struct super_block *sb, void *data, int silent)
- "change-rule", &smk_change_rule_ops, S_IRUGO|S_IWUSR},
- [SMK_SYSLOG] = {
- "syslog", &smk_syslog_ops, S_IRUGO|S_IWUSR},
-+ [SMK_PTRACE] = {
-+ "ptrace", &smk_ptrace_ops, S_IRUGO|S_IWUSR},
- /* last one */
- {""}
- };
---
-1.8.1.4
-
--- /dev/null
+From c00cc35d2f4398bafb749c46c5b2cc6dd383dfc4 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Wed, 12 Feb 2014 12:26:25 -0800
+Subject: [PATCH 09/45] drm/i915: allow re-use BIOS connector config for
+ initial fbdev config v3
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The BIOS or boot loader will generally create an initial display
+configuration for us that includes some set of active pipes and
+displays. This routine tries to figure out which pipes and connectors
+are active and stuffs them into the crtcs and modes array given to us by
+the drm_fb_helper code.
+
+The overall sequence is:
+ intel_fbdev_init - from driver load
+ intel_fbdev_init_bios - initialize the intel_fbdev using BIOS data
+ drm_fb_helper_init - build fb helper structs
+ drm_fb_helper_single_add_all_connectors - more fb helper structs
+ intel_fbdev_initial_config - apply the config
+ drm_fb_helper_initial_config - call ->probe then register_framebuffer()
+ drm_setup_crtcs - build crtc config for fbdev
+ intel_fb_initial_config - find active connectors etc
+ drm_fb_helper_single_fb_probe - set up fbdev
+ intelfb_create - re-use or alloc fb, build out fbdev structs
+
+v2: use BIOS connector config unconditionally if possible (Daniel)
+ check for crtc cloning and reject (Daniel)
+ fix up comments (Daniel)
+v3: use command line args and preferred modes first (Ville)
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Tested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+[danvet: Re-add the WARN_ON for a missing encoder crtc - the state
+sanitizer should take care of this. And spell-ocd the comments.]
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Signed-off-by: Jin Song <jin.kyu.song@linux.intel.com>
+
+Conflicts:
+ drivers/gpu/drm/i915/intel_display.c
+Change-Id: I95094252d1f5baf4c43bc4aa867d8d3567b8aabb
+---
+ drivers/gpu/drm/i915/intel_display.c | 5 +-
+ drivers/gpu/drm/i915/intel_fbdev.c | 123 +++++++++++++++++++++++++++++++++++
+ 2 files changed, 127 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index da9b9bd..d81bb88 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -51,7 +51,10 @@ static void ironlake_pch_clock_get(struct intel_crtc *crtc,
+
+ static int intel_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode,
+ int x, int y, struct drm_framebuffer *old_fb);
+-
++int intel_framebuffer_init(struct drm_device *dev,
++ struct intel_framebuffer *ifb,
++ struct drm_mode_fb_cmd2 *mode_cmd,
++ struct drm_i915_gem_object *obj);
+
+ typedef struct {
+ int min, max;
+diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
+index 39eac99..99835d4 100644
+--- a/drivers/gpu/drm/i915/intel_fbdev.c
++++ b/drivers/gpu/drm/i915/intel_fbdev.c
+@@ -236,7 +236,130 @@ static void intel_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
+ *blue = intel_crtc->lut_b[regno] << 8;
+ }
+
++static struct drm_fb_helper_crtc *
++intel_fb_helper_crtc(struct drm_fb_helper *fb_helper, struct drm_crtc *crtc)
++{
++ int i;
++
++ for (i = 0; i < fb_helper->crtc_count; i++)
++ if (fb_helper->crtc_info[i].mode_set.crtc == crtc)
++ return &fb_helper->crtc_info[i];
++
++ return NULL;
++}
++
++/*
++ * Try to read the BIOS display configuration and use it for the initial
++ * fb configuration.
++ *
++ * The BIOS or boot loader will generally create an initial display
++ * configuration for us that includes some set of active pipes and displays.
++ * This routine tries to figure out which pipes and connectors are active
++ * and stuffs them into the crtcs and modes array given to us by the
++ * drm_fb_helper code.
++ *
++ * The overall sequence is:
++ * intel_fbdev_init - from driver load
++ * intel_fbdev_init_bios - initialize the intel_fbdev using BIOS data
++ * drm_fb_helper_init - build fb helper structs
++ * drm_fb_helper_single_add_all_connectors - more fb helper structs
++ * intel_fbdev_initial_config - apply the config
++ * drm_fb_helper_initial_config - call ->probe then register_framebuffer()
++ * drm_setup_crtcs - build crtc config for fbdev
++ * intel_fb_initial_config - find active connectors etc
++ * drm_fb_helper_single_fb_probe - set up fbdev
++ * intelfb_create - re-use or alloc fb, build out fbdev structs
++ *
++ * Note that we don't make special consideration whether we could actually
++ * switch to the selected modes without a full modeset. E.g. when the display
++ * is in VGA mode we need to recalculate watermarks and set a new high-res
++ * framebuffer anyway.
++ */
++static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
++ struct drm_fb_helper_crtc **crtcs,
++ struct drm_display_mode **modes,
++ bool *enabled, int width, int height)
++{
++ int i, j;
++
++ for (i = 0; i < fb_helper->connector_count; i++) {
++ struct drm_fb_helper_connector *fb_conn;
++ struct drm_connector *connector;
++ struct drm_encoder *encoder;
++ struct drm_fb_helper_crtc *new_crtc;
++
++ fb_conn = fb_helper->connector_info[i];
++ connector = fb_conn->connector;
++ if (!enabled[i]) {
++ DRM_DEBUG_KMS("connector %d not enabled, skipping\n",
++ connector->base.id);
++ continue;
++ }
++
++ encoder = connector->encoder;
++ if (!encoder || WARN_ON(!encoder->crtc)) {
++ DRM_DEBUG_KMS("connector %d has no encoder or crtc, skipping\n",
++ connector->base.id);
++ enabled[i] = false;
++ continue;
++ }
++
++ new_crtc = intel_fb_helper_crtc(fb_helper, encoder->crtc);
++
++ /*
++ * Make sure we're not trying to drive multiple connectors
++ * with a single CRTC, since our cloning support may not
++ * match the BIOS.
++ */
++ for (j = 0; j < fb_helper->connector_count; j++) {
++ if (crtcs[j] == new_crtc)
++ return false;
++ }
++
++ DRM_DEBUG_KMS("looking for cmdline mode on connector %d\n",
++ fb_conn->connector->base.id);
++
++ /* go for command line mode first */
++ modes[i] = drm_pick_cmdline_mode(fb_conn, width, height);
++
++ /* try for preferred next */
++ if (!modes[i]) {
++ DRM_DEBUG_KMS("looking for preferred mode on connector %d\n",
++ fb_conn->connector->base.id);
++ modes[i] = drm_has_preferred_mode(fb_conn, width,
++ height);
++ }
++
++ /* last resort: use current mode */
++ if (!modes[i]) {
++ /*
++ * IMPORTANT: We want to use the adjusted mode (i.e.
++ * after the panel fitter upscaling) as the initial
++ * config, not the input mode, which is what crtc->mode
++ * usually contains. But since our current fastboot
++ * code puts a mode derived from the post-pfit timings
++ * into crtc->mode this works out correctly. We don't
++ * use hwmode anywhere right now, so use it for this
++ * since the fb helper layer wants a pointer to
++ * something we own.
++ */
++ intel_mode_from_pipe_config(&encoder->crtc->hwmode,
++ &to_intel_crtc(encoder->crtc)->config);
++ modes[i] = &encoder->crtc->hwmode;
++ }
++ crtcs[i] = new_crtc;
++
++ DRM_DEBUG_KMS("connector %s on crtc %d: %s\n",
++ drm_get_connector_name(connector),
++ encoder->crtc->base.id,
++ modes[i]->name);
++ }
++
++ return true;
++}
++
+ static struct drm_fb_helper_funcs intel_fb_helper_funcs = {
++ .initial_config = intel_fb_initial_config,
+ .gamma_set = intel_crtc_fb_gamma_set,
+ .gamma_get = intel_crtc_fb_gamma_get,
+ .fb_probe = intelfb_create,
+--
+1.8.4.5
+
+++ /dev/null
-From d162327c8181f3cefeb0dc9ed1e1399ab6637288 Mon Sep 17 00:00:00 2001
-From: Pankaj Kumar <pankaj.k2@samsung.com>
-Date: Fri, 13 Dec 2013 15:12:22 +0530
-Subject: [PATCH 10/20] bugfix patch for SMACK
-
-1. In order to remove any SMACK extended attribute from a file, a user
-should have CAP_MAC_ADMIN capability. But user without having this
-capability is able to remove SMACK64MMAP security attribute.
-
-2. While validating size and value of smack extended attribute in
-smack_inode_setsecurity hook, wrong error code is returned.
-
-Change-Id: Ib4b290150f4a003733f76cbb7ccc25d228310ecb
-Signed-off-by: Pankaj Kumar <pamkaj.k2@samsung.com>
-Signed-off-by: Himanshu Shukla <himanshu.sh@samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index d430977..b86825b 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -1020,7 +1020,7 @@ static int smack_inode_removexattr(struct dentry *dentry, const char *name)
- strcmp(name, XATTR_NAME_SMACKIPOUT) == 0 ||
- strcmp(name, XATTR_NAME_SMACKEXEC) == 0 ||
- strcmp(name, XATTR_NAME_SMACKTRANSMUTE) == 0 ||
-- strcmp(name, XATTR_NAME_SMACKMMAP)) {
-+ strcmp(name, XATTR_NAME_SMACKMMAP) == 0) {
- if (!smack_privileged(CAP_MAC_ADMIN))
- rc = -EPERM;
- } else
-@@ -2158,7 +2158,7 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
- int rc = 0;
-
- if (value == NULL || size > SMK_LONGLABEL || size == 0)
-- return -EACCES;
-+ return -EINVAL;
-
- skp = smk_import_entry(value, size);
- if (skp == NULL)
---
-1.8.1.4
-
--- /dev/null
+From 1108d2686713edf15ca667480138a834703b0f2d Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Fri, 7 Feb 2014 12:10:35 -0800
+Subject: [PATCH 10/45] drm/i915: split aligned height calculation out v2
+
+For use by get_plane_config.
+
+v2: cleanup tile_height bits (Chris)
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Change-Id: Ie4a01d12622ca0a7ffa1385fb41a67c12961e2fc
+---
+ drivers/gpu/drm/i915/intel_display.c | 15 +++++++++++----
+ 1 file changed, 11 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index d81bb88..949efa6 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -1932,6 +1932,14 @@ static bool need_vtd_wa(struct drm_device *dev)
+ return false;
+ }
+
++static int intel_align_height(struct drm_device *dev, int height, bool tiled)
++{
++ int tile_height;
++
++ tile_height = tiled ? (IS_GEN2(dev) ? 16 : 8) : 1;
++ return ALIGN(height, tile_height);
++}
++
+ int
+ intel_pin_and_fence_fb_obj(struct drm_device *dev,
+ struct drm_i915_gem_object *obj,
+@@ -10469,7 +10477,7 @@ int intel_framebuffer_init(struct drm_device *dev,
+ struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_i915_gem_object *obj)
+ {
+- int aligned_height, tile_height;
++ int aligned_height;
+ int pitch_limit;
+ int ret;
+
+@@ -10563,9 +10571,8 @@ int intel_framebuffer_init(struct drm_device *dev,
+ if (mode_cmd->offsets[0] != 0)
+ return -EINVAL;
+
+- tile_height = IS_GEN2(dev) ? 16 : 8;
+- aligned_height = ALIGN(mode_cmd->height,
+- obj->tiling_mode ? tile_height : 1);
++ aligned_height = intel_align_height(dev, mode_cmd->height,
++ obj->tiling_mode);
+ /* FIXME drm helper for size checks (especially planar formats)? */
+ if (obj->base.size < aligned_height * mode_cmd->pitches[0])
+ return -EINVAL;
+--
+1.8.4.5
+
+++ /dev/null
-From a9aab799877935740562b588c00c74e7f092b626 Mon Sep 17 00:00:00 2001
-From: Casey Schaufler <casey@schaufler-ca.com>
-Date: Thu, 10 Apr 2014 16:35:36 -0700
-Subject: [PATCH 11/20] Smack: Correctly remove SMACK64TRANSMUTE attribute
-
-Sam Henderson points out that removing the SMACK64TRANSMUTE
-attribute from a directory does not result in the directory
-transmuting. This is because the inode flag indicating that
-the directory is transmuting isn't cleared. The fix is a tad
-less than trivial because smk_task and smk_mmap should have
-been broken out, too.
-
-Targeted for git://git.gitorious.org/smack-next/kernel.git
-
-Change-Id: Iae25080bfd0ec247391c997a59f3e2327423e33d
-Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 25 +++++++++++++++++++------
- 1 file changed, 19 insertions(+), 6 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index b86825b..1c05130 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -1026,18 +1026,31 @@ static int smack_inode_removexattr(struct dentry *dentry, const char *name)
- } else
- rc = cap_inode_removexattr(dentry, name);
-
-+ if (rc != 0)
-+ return rc;
-+
- smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_DENTRY);
- smk_ad_setfield_u_fs_path_dentry(&ad, dentry);
-- if (rc == 0)
-- rc = smk_curacc(smk_of_inode(dentry->d_inode), MAY_WRITE, &ad);
-
-- if (rc == 0) {
-- isp = dentry->d_inode->i_security;
-+ rc = smk_curacc(smk_of_inode(dentry->d_inode), MAY_WRITE, &ad);
-+ if (rc != 0)
-+ return rc;
-+
-+ isp = dentry->d_inode->i_security;
-+ /*
-+ * Don't do anything special for these.
-+ * XATTR_NAME_SMACKIPIN
-+ * XATTR_NAME_SMACKIPOUT
-+ * XATTR_NAME_SMACKEXEC
-+ */
-+ if (strcmp(name, XATTR_NAME_SMACK) == 0)
- isp->smk_task = NULL;
-+ else if (strcmp(name, XATTR_NAME_SMACKMMAP) == 0)
- isp->smk_mmap = NULL;
-- }
-+ else if (strcmp(name, XATTR_NAME_SMACKTRANSMUTE) == 0)
-+ isp->smk_flags &= ~SMK_INODE_TRANSMUTE;
-
-- return rc;
-+ return 0;
- }
-
- /**
---
-1.8.1.4
-
--- /dev/null
+From 5f8ee93160d759522fa0a88b1687030e5dcb6d4e Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Thu, 16 Jan 2014 22:28:44 +0100
+Subject: [PATCH 11/45] drm/i915: Shuffle modeset reset handling around
+
+Currently we're doing the reset handling a bit late, and we're doing
+it both in the driver load code and on resume. This makes it unusable
+for e.g. resetting the panel power sequence state like Paulo wants to.
+
+Instead of adding yet another single-use callback shuffle things
+around:
+- Output handling code is responsible to reset/init all state on its
+ own at driver load time.
+- We call the reset functions much earlier, before we start using any
+ of the modeset code.
+
+Compared to Paulo's new ->resume callback the only difference in
+placement is that ->reset is still called without dev->struct_mutex
+held. Which is imo a feature.
+
+v2: Rebase on top of the now merge dinq.
+
+Cc: Paulo Zanoni <przanoni@gmail.com>
+Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Change-Id: Ie0812bdc232f20b533225fd1b190e5e97b1f3aa1
+---
+ drivers/gpu/drm/i915/i915_drv.c | 2 +-
+ drivers/gpu/drm/i915/intel_crt.c | 2 ++
+ drivers/gpu/drm/i915/intel_display.c | 1 -
+ 3 files changed, 3 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index ec7bb0f..c50c17a 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -638,6 +638,7 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
+ /* KMS EnterVT equivalent */
+ if (drm_core_check_feature(dev, DRIVER_MODESET)) {
+ intel_init_pch_refclk(dev);
++ drm_mode_config_reset(dev);
+
+ mutex_lock(&dev->struct_mutex);
+
+@@ -650,7 +651,6 @@ static int __i915_drm_thaw(struct drm_device *dev, bool restore_gtt_mappings)
+ intel_modeset_init_hw(dev);
+
+ drm_modeset_lock_all(dev);
+- drm_mode_config_reset(dev);
+ intel_modeset_setup_hw_state(dev, true);
+ drm_modeset_unlock_all(dev);
+
+diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
+index e2e39e6..5b444a4 100644
+--- a/drivers/gpu/drm/i915/intel_crt.c
++++ b/drivers/gpu/drm/i915/intel_crt.c
+@@ -857,4 +857,6 @@ void intel_crt_init(struct drm_device *dev)
+
+ dev_priv->fdi_rx_config = I915_READ(_FDI_RXA_CTL) & fdi_config;
+ }
++
++ intel_crt_reset(connector);
+ }
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 949efa6..b5c02ee 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -11335,7 +11335,6 @@ void intel_modeset_gem_init(struct drm_device *dev)
+ intel_setup_overlay(dev);
+
+ mutex_lock(&dev->mode_config.mutex);
+- drm_mode_config_reset(dev);
+ intel_modeset_setup_hw_state(dev, false);
+ mutex_unlock(&dev->mode_config.mutex);
+ }
+--
+1.8.4.5
+
+++ /dev/null
-From fe21a66f10ef0ce622fd71befe95eefab7648457 Mon Sep 17 00:00:00 2001
-From: Casey Schaufler <casey@schaufler-ca.com>
-Date: Thu, 10 Apr 2014 16:37:08 -0700
-Subject: [PATCH 12/20] Smack: bidirectional UDS connect check
-
-Smack IPC policy requires that the sender have write access
-to the receiver. UDS streams don't do per-packet checks. The
-only check is done at connect time. The existing code checks
-if the connecting process can write to the other, but not the
-other way around. This change adds a check that the other end
-can write to the connecting process.
-
-Targeted for git://git.gitorious.org/smack-next/kernel.git
-
-Change-Id: I0dd9124261cb66a364322ed88e9dcb3213157cb6
-Signed-off-by: Casey Schuafler <casey@schaufler-ca.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack.h | 6 +++---
- security/smack/smack_lsm.c | 44 ++++++++++++++++++++++++--------------------
- 2 files changed, 27 insertions(+), 23 deletions(-)
-
-diff --git a/security/smack/smack.h b/security/smack/smack.h
-index fade085..020307e 100644
---- a/security/smack/smack.h
-+++ b/security/smack/smack.h
-@@ -80,8 +80,8 @@ struct superblock_smack {
-
- struct socket_smack {
- struct smack_known *smk_out; /* outbound label */
-- char *smk_in; /* inbound label */
-- char *smk_packet; /* TCP peer label */
-+ struct smack_known *smk_in; /* inbound label */
-+ struct smack_known *smk_packet; /* TCP peer label */
- };
-
- /*
-@@ -133,7 +133,7 @@ struct smk_port_label {
- struct list_head list;
- struct sock *smk_sock; /* socket initialized on */
- unsigned short smk_port; /* the port number */
-- char *smk_in; /* incoming label */
-+ struct smack_known *smk_in; /* inbound label */
- struct smack_known *smk_out; /* outgoing label */
- };
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 1c05130..40f2681 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -1095,7 +1095,7 @@ static int smack_inode_getsecurity(const struct inode *inode,
- ssp = sock->sk->sk_security;
-
- if (strcmp(name, XATTR_SMACK_IPIN) == 0)
-- isp = ssp->smk_in;
-+ isp = ssp->smk_in->smk_known;
- else if (strcmp(name, XATTR_SMACK_IPOUT) == 0)
- isp = ssp->smk_out->smk_known;
- else
-@@ -1859,7 +1859,7 @@ static int smack_sk_alloc_security(struct sock *sk, int family, gfp_t gfp_flags)
- if (ssp == NULL)
- return -ENOMEM;
-
-- ssp->smk_in = skp->smk_known;
-+ ssp->smk_in = skp;
- ssp->smk_out = skp;
- ssp->smk_packet = NULL;
-
-@@ -2099,7 +2099,7 @@ static int smk_ipv6_port_check(struct sock *sk, struct sockaddr_in6 *address,
-
- if (act == SMK_RECEIVING) {
- skp = smack_net_ambient;
-- object = ssp->smk_in;
-+ object = ssp->smk_in->smk_known;
- } else {
- skp = ssp->smk_out;
- object = smack_net_ambient->smk_known;
-@@ -2129,9 +2129,9 @@ static int smk_ipv6_port_check(struct sock *sk, struct sockaddr_in6 *address,
- list_for_each_entry(spp, &smk_ipv6_port_list, list) {
- if (spp->smk_port != port)
- continue;
-- object = spp->smk_in;
-+ object = spp->smk_in->smk_known;
- if (act == SMK_CONNECTING)
-- ssp->smk_packet = spp->smk_out->smk_known;
-+ ssp->smk_packet = spp->smk_out;
- break;
- }
-
-@@ -2195,7 +2195,7 @@ static int smack_inode_setsecurity(struct inode *inode, const char *name,
- ssp = sock->sk->sk_security;
-
- if (strcmp(name, XATTR_SMACK_IPIN) == 0)
-- ssp->smk_in = skp->smk_known;
-+ ssp->smk_in = skp;
- else if (strcmp(name, XATTR_SMACK_IPOUT) == 0) {
- ssp->smk_out = skp;
- if (sock->sk->sk_family == PF_INET) {
-@@ -3060,30 +3060,34 @@ static int smack_unix_stream_connect(struct sock *sock,
- struct sock *other, struct sock *newsk)
- {
- struct smack_known *skp;
-+ struct smack_known *okp;
- struct socket_smack *ssp = sock->sk_security;
- struct socket_smack *osp = other->sk_security;
- struct socket_smack *nsp = newsk->sk_security;
- struct smk_audit_info ad;
- int rc = 0;
--
- #ifdef CONFIG_AUDIT
- struct lsm_network_audit net;
--
-- smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
-- smk_ad_setfield_u_net_sk(&ad, other);
- #endif
-
- if (!smack_privileged(CAP_MAC_OVERRIDE)) {
- skp = ssp->smk_out;
-- rc = smk_access(skp, osp->smk_in, MAY_WRITE, &ad);
-+ okp = osp->smk_out;
-+#ifdef CONFIG_AUDIT
-+ smk_ad_init_net(&ad, __func__, LSM_AUDIT_DATA_NET, &net);
-+ smk_ad_setfield_u_net_sk(&ad, other);
-+#endif
-+ rc = smk_access(skp, okp->smk_known, MAY_WRITE, &ad);
-+ if (rc == 0)
-+ rc = smk_access(okp, okp->smk_known, MAY_WRITE, NULL);
- }
-
- /*
- * Cross reference the peer labels for SO_PEERSEC.
- */
- if (rc == 0) {
-- nsp->smk_packet = ssp->smk_out->smk_known;
-- ssp->smk_packet = osp->smk_out->smk_known;
-+ nsp->smk_packet = ssp->smk_out;
-+ ssp->smk_packet = osp->smk_out;
- }
-
- return rc;
-@@ -3115,7 +3119,7 @@ static int smack_unix_may_send(struct socket *sock, struct socket *other)
- return 0;
-
- skp = ssp->smk_out;
-- return smk_access(skp, osp->smk_in, MAY_WRITE, &ad);
-+ return smk_access(skp, osp->smk_in->smk_known, MAY_WRITE, &ad);
- }
-
- /**
-@@ -3210,7 +3214,7 @@ static struct smack_known *smack_from_secattr(struct netlbl_lsm_secattr *sap,
- if (found)
- return skp;
-
-- if (ssp != NULL && ssp->smk_in == smack_known_star.smk_known)
-+ if (ssp != NULL && ssp->smk_in == &smack_known_star)
- return &smack_known_web;
- return &smack_known_star;
- }
-@@ -3329,7 +3333,7 @@ static int smack_socket_sock_rcv_skb(struct sock *sk, struct sk_buff *skb)
- * This is the simplist possible security model
- * for networking.
- */
-- rc = smk_access(skp, ssp->smk_in, MAY_WRITE, &ad);
-+ rc = smk_access(skp, ssp->smk_in->smk_known, MAY_WRITE, &ad);
- if (rc != 0)
- netlbl_skbuff_err(skb, rc, 0);
- break;
-@@ -3364,7 +3368,7 @@ static int smack_socket_getpeersec_stream(struct socket *sock,
-
- ssp = sock->sk->sk_security;
- if (ssp->smk_packet != NULL) {
-- rcp = ssp->smk_packet;
-+ rcp = ssp->smk_packet->smk_known;
- slen = strlen(rcp) + 1;
- }
-
-@@ -3449,7 +3453,7 @@ static void smack_sock_graft(struct sock *sk, struct socket *parent)
- return;
-
- ssp = sk->sk_security;
-- ssp->smk_in = skp->smk_known;
-+ ssp->smk_in = skp;
- ssp->smk_out = skp;
- /* cssp->smk_packet is already set in smack_inet_csk_clone() */
- }
-@@ -3509,7 +3513,7 @@ static int smack_inet_conn_request(struct sock *sk, struct sk_buff *skb,
- * Receiving a packet requires that the other end be able to write
- * here. Read access is not required.
- */
-- rc = smk_access(skp, ssp->smk_in, MAY_WRITE, &ad);
-+ rc = smk_access(skp, ssp->smk_in->smk_known, MAY_WRITE, &ad);
- if (rc != 0)
- return rc;
-
-@@ -3553,7 +3557,7 @@ static void smack_inet_csk_clone(struct sock *sk,
-
- if (req->peer_secid != 0) {
- skp = smack_from_secid(req->peer_secid);
-- ssp->smk_packet = skp->smk_known;
-+ ssp->smk_packet = skp;
- } else
- ssp->smk_packet = NULL;
- }
---
-1.8.1.4
-
--- /dev/null
+From 6f853494e0776317bcc59d20bda40a1428d74934 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Tue, 11 Feb 2014 15:28:56 -0800
+Subject: [PATCH 12/45] drm/i915: read out hw state earlier v2
+
+We want to do this early on before we try to fetch the plane config,
+which depends on some of the pipe config state.
+
+Note that the important part is that we do this before we initialize
+gem, since otherwise we can't properly pre-reserve the stolen memory
+for framebuffers inherited from the bios.
+
+v2: split back out from get_plane_config change (Daniel)
+ update for recent locking & reset changes (Jesse)
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+[danvet: Explain a bit more why we need to move this.]
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Change-Id: I2dd546b72346df60d9f80910ed607139bef639dc
+---
+ drivers/gpu/drm/i915/intel_display.c | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index b5c02ee..c2817e3 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -10968,6 +10968,8 @@ void intel_modeset_init(struct drm_device *dev)
+
+ /* Just in case the BIOS is doing something questionable. */
+ intel_disable_fbc(dev);
++
++ intel_modeset_setup_hw_state(dev, false);
+ }
+
+ static void
+@@ -11333,10 +11335,6 @@ void intel_modeset_gem_init(struct drm_device *dev)
+ intel_modeset_init_hw(dev);
+
+ intel_setup_overlay(dev);
+-
+- mutex_lock(&dev->mode_config.mutex);
+- intel_modeset_setup_hw_state(dev, false);
+- mutex_unlock(&dev->mode_config.mutex);
+ }
+
+ void intel_modeset_cleanup(struct drm_device *dev)
+--
+1.8.4.5
+
+++ /dev/null
-From 8bc0ffa8453714e928d548164560c52d2c7c4897 Mon Sep 17 00:00:00 2001
-From: Casey Schaufler <casey@schaufler-ca.com>
-Date: Mon, 21 Apr 2014 11:10:26 -0700
-Subject: [PATCH 13/20] Smack: Verify read access on file open - v3
-
-Smack believes that many of the operatons that can
-be performed on an open file descriptor are read operations.
-The fstat and lseek system calls are examples.
-An implication of this is that files shouldn't be open
-if the task doesn't have read access even if it has
-write access and the file is being opened write only.
-
-Targeted for git://git.gitorious.org/smack-next/kernel.git
-
-Change-Id: Iefff38549f9f2e242fd21fce42db067c4c4d8a12
-Signed-off-by: Casey Schaufler <casey@schaufler-ca.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 19 ++++++++++++++++---
- 1 file changed, 16 insertions(+), 3 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 40f2681..f2c3080 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -1462,19 +1462,32 @@ static int smack_file_receive(struct file *file)
- /**
- * smack_file_open - Smack dentry open processing
- * @file: the object
-- * @cred: unused
-+ * @cred: task credential
- *
- * Set the security blob in the file structure.
-+ * Allow the open only if the task has read access. There are
-+ * many read operations (e.g. fstat) that you can do with an
-+ * fd even if you have the file open write-only.
- *
- * Returns 0
- */
- static int smack_file_open(struct file *file, const struct cred *cred)
- {
-+ struct task_smack *tsp = cred->security;
- struct inode_smack *isp = file_inode(file)->i_security;
-+ struct smk_audit_info ad;
-+ int rc;
-
-- file->f_security = isp->smk_inode;
-+ if (smack_privileged(CAP_MAC_OVERRIDE))
-+ return 0;
-
-- return 0;
-+ smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
-+ smk_ad_setfield_u_fs_path(&ad, file->f_path);
-+ rc = smk_access(tsp->smk_task, isp->smk_inode, MAY_READ, &ad);
-+ if (rc == 0)
-+ file->f_security = isp->smk_inode;
-+
-+ return rc;
- }
-
- /*
---
-1.8.1.4
-
--- /dev/null
+From 07da4125bc8cad1691c9bddf87b39e2f9362bb5b Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Fri, 21 Feb 2014 13:13:39 -0800
+Subject: [PATCH 13/45] drm/i915: re-add locking around hw state readout
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+To silence locking complaints. This was a rebase failure on my part in
+
+commit fa9fa083d0606cb323f6105c17702460ea0a6780
+Author: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Tue Feb 11 15:28:56 2014 -0800
+
+ drm/i915: read out hw state earlier v2
+
+Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+Change-Id: I61afbe305dd4f6042b85040eb4b877ff15e3c423
+---
+ drivers/gpu/drm/i915/intel_display.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index c2817e3..1fbd1c4 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -10969,7 +10969,9 @@ void intel_modeset_init(struct drm_device *dev)
+ /* Just in case the BIOS is doing something questionable. */
+ intel_disable_fbc(dev);
+
++ mutex_lock(&dev->mode_config.mutex);
+ intel_modeset_setup_hw_state(dev, false);
++ mutex_unlock(&dev->mode_config.mutex);
+ }
+
+ static void
+--
+1.8.4.5
+
+++ /dev/null
-From 2feea04e966c9c32a9ae53931f5b54f5a830712c Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Toralf=20F=C3=B6rster?= <toralf.foerster@gmx.de>
-Date: Sun, 27 Apr 2014 19:33:34 +0200
-Subject: [PATCH 14/20] Warning in scanf string typing
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-This fixes a warning about the mismatch of types between
-the declared unsigned and integer.
-
-Change-Id: Ie7170fa22c1f641b2990721b44059d399c92ffe6
-Signed-off-by: Toralf Förster <toralf.foerster@gmx.de>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smackfs.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
-index 177d878..32b2488 100644
---- a/security/smack/smackfs.c
-+++ b/security/smack/smackfs.c
-@@ -1193,7 +1193,7 @@ static ssize_t smk_write_netlbladdr(struct file *file, const char __user *buf,
-
- data[count] = '\0';
-
-- rc = sscanf(data, "%hhd.%hhd.%hhd.%hhd/%d %s",
-+ rc = sscanf(data, "%hhd.%hhd.%hhd.%hhd/%u %s",
- &host[0], &host[1], &host[2], &host[3], &m, smack);
- if (rc != 6) {
- rc = sscanf(data, "%hhd.%hhd.%hhd.%hhd %s",
---
-1.8.1.4
-
--- /dev/null
+From 1cbb745dab6405cb59d0847f3b9101e548d10bdd Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Wed, 12 Feb 2014 12:14:43 -0800
+Subject: [PATCH 14/45] drm/i915: add plane_config fetching infrastructure v2
+
+Early at init time, we can try to read out the plane config structure
+and try to preserve it if possible.
+
+v2: alloc fb obj at init time after fetching plane config
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Change-Id: Iae206aef87013f59560db2fd15ff321c0bce8397
+---
+ drivers/gpu/drm/i915/i915_drv.h | 3 ++
+ drivers/gpu/drm/i915/intel_display.c | 92 ++++++++++++++++++++++++++++++++++++
+ drivers/gpu/drm/i915/intel_drv.h | 8 ++++
+ 3 files changed, 103 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index df77e20..42fc371 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -367,6 +367,7 @@ struct drm_i915_error_state {
+
+ struct intel_connector;
+ struct intel_crtc_config;
++struct intel_plane_config;
+ struct intel_crtc;
+ struct intel_limit;
+ struct dpll;
+@@ -405,6 +406,8 @@ struct drm_i915_display_funcs {
+ * fills out the pipe-config with the hw state. */
+ bool (*get_pipe_config)(struct intel_crtc *,
+ struct intel_crtc_config *);
++ void (*get_plane_config)(struct intel_crtc *,
++ struct intel_plane_config *);
+ int (*crtc_mode_set)(struct drm_crtc *crtc,
+ int x, int y,
+ struct drm_framebuffer *old_fb);
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 1fbd1c4..4328d89 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -2036,6 +2036,70 @@ unsigned long intel_gen4_compute_page_offset(int *x, int *y,
+ }
+ }
+
++int intel_format_to_fourcc(int format)
++{
++ switch (format) {
++ case DISPPLANE_8BPP:
++ return DRM_FORMAT_C8;
++ case DISPPLANE_BGRX555:
++ return DRM_FORMAT_XRGB1555;
++ case DISPPLANE_BGRX565:
++ return DRM_FORMAT_RGB565;
++ default:
++ case DISPPLANE_BGRX888:
++ return DRM_FORMAT_XRGB8888;
++ case DISPPLANE_RGBX888:
++ return DRM_FORMAT_XBGR8888;
++ case DISPPLANE_BGRX101010:
++ return DRM_FORMAT_XRGB2101010;
++ case DISPPLANE_RGBX101010:
++ return DRM_FORMAT_XBGR2101010;
++ }
++}
++
++static void intel_alloc_plane_obj(struct intel_crtc *crtc,
++ struct intel_plane_config *plane_config)
++{
++ struct drm_device *dev = crtc->base.dev;
++ struct drm_i915_gem_object *obj = NULL;
++ struct drm_mode_fb_cmd2 mode_cmd = { 0 };
++ u32 base = plane_config->base;
++
++ if (!plane_config->fb)
++ return;
++
++ obj = i915_gem_object_create_stolen_for_preallocated(dev, base, base,
++ plane_config->size);
++ if (!obj)
++ return;
++
++ if (plane_config->tiled) {
++ obj->tiling_mode = I915_TILING_X;
++ obj->stride = plane_config->fb->base.pitches[0];
++ }
++
++ mode_cmd.pixel_format = plane_config->fb->base.pixel_format;
++ mode_cmd.width = plane_config->fb->base.width;
++ mode_cmd.height = plane_config->fb->base.height;
++ mode_cmd.pitches[0] = plane_config->fb->base.pitches[0];
++
++ mutex_lock(&dev->struct_mutex);
++
++ if (intel_framebuffer_init(dev, plane_config->fb, &mode_cmd, obj)) {
++ DRM_DEBUG_KMS("intel fb init failed\n");
++ goto out_unref_obj;
++ }
++
++ mutex_unlock(&dev->struct_mutex);
++ DRM_DEBUG_KMS("plane fb obj %p\n", plane_config->fb->obj);
++ return;
++
++out_unref_obj:
++ drm_gem_object_unreference(&obj->base);
++ mutex_unlock(&dev->struct_mutex);
++
++}
++
+ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+ int x, int y)
+ {
+@@ -10910,6 +10974,7 @@ void intel_modeset_init(struct drm_device *dev)
+ {
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i, j, ret;
++ struct intel_crtc *crtc;
+
+ drm_mode_config_init(dev);
+
+@@ -10972,6 +11037,33 @@ void intel_modeset_init(struct drm_device *dev)
+ mutex_lock(&dev->mode_config.mutex);
+ intel_modeset_setup_hw_state(dev, false);
+ mutex_unlock(&dev->mode_config.mutex);
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list,
++ base.head) {
++ if (!crtc->active)
++ continue;
++
++#if IS_ENABLED(CONFIG_FB)
++ /*
++ * We don't have a good way of freeing the buffer w/o the FB
++ * layer owning it...
++ * Note that reserving the BIOS fb up front prevents us
++ * from stuffing other stolen allocations like the ring
++ * on top. This prevents some ugliness at boot time, and
++ * can even allow for smooth boot transitions if the BIOS
++ * fb is large enough for the active pipe configuration.
++ */
++ if (dev_priv->display.get_plane_config) {
++ dev_priv->display.get_plane_config(crtc,
++ &crtc->plane_config);
++ /*
++ * If the fb is shared between multiple heads, we'll
++ * just get the first one.
++ */
++ intel_alloc_plane_obj(crtc, &crtc->plane_config);
++ }
++#endif
++ }
+ }
+
+ static void
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index ea49bf2..f6af206 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -210,6 +210,13 @@ typedef struct dpll {
+ int p;
+ } intel_clock_t;
+
++struct intel_plane_config {
++ struct intel_framebuffer *fb; /* ends up managed by intel_fbdev.c */
++ bool tiled;
++ int size;
++ u32 base;
++};
++
+ struct intel_crtc_config {
+ /**
+ * quirks - bitfield with hw state readout quirks
+@@ -358,6 +365,7 @@ struct intel_crtc {
+ int16_t cursor_width, cursor_height;
+ bool cursor_visible;
+
++ struct intel_plane_config plane_config;
+ struct intel_crtc_config config;
+
+ uint32_t ddi_pll_sel;
+--
+1.8.4.5
+
+++ /dev/null
-From f57b7f5bb1c2d7d1fa93a807f3290eae2514ab3f Mon Sep 17 00:00:00 2001
-From: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
-Date: Thu, 7 Aug 2014 20:52:33 +0400
-Subject: [PATCH 15/20] Smack: fix behavior of smack_inode_listsecurity
-
-Security operation ->inode_listsecurity is used for generating list of
-available extended attributes for syscall listxattr. Currently it's used
-only in nfs4 or if filesystem doesn't provide i_op->listxattr.
-
-The list is the set of NULL-terminated names, one after the other.
-This method must include zero byte at the and into result.
-
-Also this function must return length even if string does not fit into
-output buffer or it is NULL, see similar method in selinux and man listxattr.
-
-Change-Id: I3ba4524fead6ef6ab0c93238fa8d422e6b155efb
-Signed-off-by: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 9 ++++-----
- 1 file changed, 4 insertions(+), 5 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index f2c3080..8473576 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -1122,13 +1122,12 @@ static int smack_inode_getsecurity(const struct inode *inode,
- static int smack_inode_listsecurity(struct inode *inode, char *buffer,
- size_t buffer_size)
- {
-- int len = strlen(XATTR_NAME_SMACK);
-+ int len = sizeof(XATTR_NAME_SMACK);
-
-- if (buffer != NULL && len <= buffer_size) {
-+ if (buffer != NULL && len <= buffer_size)
- memcpy(buffer, XATTR_NAME_SMACK, len);
-- return len;
-- }
-- return -EINVAL;
-+
-+ return len;
- }
-
- /**
---
-1.8.1.4
-
--- /dev/null
+From dc42277d501d67c8b65c449cececea685d6b1668 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Wed, 12 Feb 2014 12:20:57 -0800
+Subject: [PATCH 15/45] drm/i915: get_plane_config for i9xx v13
+
+Read out the current plane configuration at init time into a new
+plane_config structure. This allows us to track any existing
+framebuffers attached to the plane and potentially re-use them in our
+fbdev code for a smooth handoff.
+
+v2: update for new pitch_for_width function (Jesse)
+ comment how get_plane_config works with shared fbs (Jesse)
+v3: s/ARGB/XRGB (Ville)
+ use pipesrc width/height (Ville)
+ fix fourcc comment (Bob)
+ use drm_format_plane_cpp (Ville)
+v4: use fb for tracking fb data object (Ville)
+v5: fix up gen2 pitch limits (Ville)
+v6: read out stride as well (Daniel)
+v7: split out init ordering changes (Daniel)
+ don't fetch config if !CONFIG_FB
+v8: use proper height in get_plane_config (Chris)
+v9: fix CONFIG_FB check for modular configs (Jani)
+v10: add comment about stolen allocation stomping
+v11: drop hw state readout hunk (Daniel)
+v12: handle tiled BIOS fbs (Kristian)
+ pull out common bits (Jesse)
+v13: move fb obj alloc out to _init
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Change-Id: I67ba4b7f7010eb2af44ea1814faa52e0345edcb7
+---
+ drivers/gpu/drm/i915/intel_display.c | 63 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 63 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 4328d89..38806d9 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -5585,6 +5585,67 @@ static void vlv_crtc_clock_get(struct intel_crtc *crtc,
+ pipe_config->port_clock = clock.dot / 5;
+ }
+
++static void i9xx_get_plane_config(struct intel_crtc *crtc,
++ struct intel_plane_config *plane_config)
++{
++ struct drm_device *dev = crtc->base.dev;
++ struct drm_i915_private *dev_priv = dev->dev_private;
++ u32 val, base, offset;
++ int pipe = crtc->pipe, plane = crtc->plane;
++ int fourcc, pixel_format;
++ int aligned_height;
++
++ plane_config->fb = kzalloc(sizeof(*plane_config->fb), GFP_KERNEL);
++ if (!plane_config->fb) {
++ DRM_DEBUG_KMS("failed to alloc fb\n");
++ return;
++ }
++
++ val = I915_READ(DSPCNTR(plane));
++
++ if (INTEL_INFO(dev)->gen >= 4)
++ if (val & DISPPLANE_TILED)
++ plane_config->tiled = true;
++
++ pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
++ fourcc = intel_format_to_fourcc(pixel_format);
++ plane_config->fb->base.pixel_format = fourcc;
++ plane_config->fb->base.bits_per_pixel =
++ drm_format_plane_cpp(fourcc, 0) * 8;
++
++ if (INTEL_INFO(dev)->gen >= 4) {
++ if (plane_config->tiled)
++ offset = I915_READ(DSPTILEOFF(plane));
++ else
++ offset = I915_READ(DSPLINOFF(plane));
++ base = I915_READ(DSPSURF(plane)) & 0xfffff000;
++ } else {
++ base = I915_READ(DSPADDR(plane));
++ }
++ plane_config->base = base;
++
++ val = I915_READ(PIPESRC(pipe));
++ plane_config->fb->base.width = ((val >> 16) & 0xfff) + 1;
++ plane_config->fb->base.height = ((val >> 0) & 0xfff) + 1;
++
++ val = I915_READ(DSPSTRIDE(pipe));
++ plane_config->fb->base.pitches[0] = val & 0xffffff80;
++
++ aligned_height = intel_align_height(dev, plane_config->fb->base.height,
++ plane_config->tiled);
++
++ plane_config->size = ALIGN(plane_config->fb->base.pitches[0] *
++ aligned_height, PAGE_SIZE);
++
++ DRM_DEBUG_KMS("pipe/plane %d/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
++ pipe, plane, plane_config->fb->base.width,
++ plane_config->fb->base.height,
++ plane_config->fb->base.bits_per_pixel, base,
++ plane_config->fb->base.pitches[0],
++ plane_config->size);
++
++}
++
+ static bool i9xx_get_pipe_config(struct intel_crtc *crtc,
+ struct intel_crtc_config *pipe_config)
+ {
+@@ -10710,6 +10771,7 @@ static void intel_init_display(struct drm_device *dev)
+ dev_priv->display.update_plane = ironlake_update_plane;
+ } else if (IS_VALLEYVIEW(dev)) {
+ dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
++ dev_priv->display.get_plane_config = i9xx_get_plane_config;
+ dev_priv->display.crtc_mode_set = i9xx_crtc_mode_set;
+ dev_priv->display.crtc_enable = valleyview_crtc_enable;
+ dev_priv->display.crtc_disable = i9xx_crtc_disable;
+@@ -10717,6 +10779,7 @@ static void intel_init_display(struct drm_device *dev)
+ dev_priv->display.update_plane = i9xx_update_plane;
+ } else {
+ dev_priv->display.get_pipe_config = i9xx_get_pipe_config;
++ dev_priv->display.get_plane_config = i9xx_get_plane_config;
+ dev_priv->display.crtc_mode_set = i9xx_crtc_mode_set;
+ dev_priv->display.crtc_enable = i9xx_crtc_enable;
+ dev_priv->display.crtc_disable = i9xx_crtc_disable;
+--
+1.8.4.5
+
+++ /dev/null
-From bc71ad29132e6774789de28eda50693be0beeef0 Mon Sep 17 00:00:00 2001
-From: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
-Date: Thu, 7 Aug 2014 20:52:43 +0400
-Subject: [PATCH 16/20] Smack: handle zero-length security labels without panic
-
-Zero-length security labels are invalid but kernel should handle them.
-
-This patch fixes kernel panic after setting zero-length security labels:
-
-And after writing zero-length string into smackfs files syslog and onlycp:
-
-The problem is caused by brain-damaged logic in function smk_parse_smack()
-which takes pointer to buffer and its length but if length below or equal zero
-it thinks that the buffer is zero-terminated. Unfortunately callers of this
-function are widely used and proper fix requires serious refactoring.
-
-Change-Id: I931735ccfaea4d8d2f0a98eacf8467f0a8359bc6
-Signed-off-by: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 2 +-
- security/smack/smackfs.c | 4 ++--
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 8473576..7bd0363 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -923,7 +923,7 @@ static int smack_inode_setxattr(struct dentry *dentry, const char *name,
- rc = -EPERM;
-
- if (rc == 0 && check_import) {
-- skp = smk_import_entry(value, size);
-+ skp = size ? smk_import_entry(value, size) : NULL;
- if (skp == NULL || (check_star &&
- (skp == &smack_known_star || skp == &smack_known_web)))
- rc = -EINVAL;
-diff --git a/security/smack/smackfs.c b/security/smack/smackfs.c
-index 32b2488..585bea0 100644
---- a/security/smack/smackfs.c
-+++ b/security/smack/smackfs.c
-@@ -1677,7 +1677,7 @@ static ssize_t smk_write_onlycap(struct file *file, const char __user *buf,
- if (smack_onlycap != NULL && smack_onlycap != skp)
- return -EPERM;
-
-- data = kzalloc(count, GFP_KERNEL);
-+ data = kzalloc(count + 1, GFP_KERNEL);
- if (data == NULL)
- return -ENOMEM;
-
-@@ -2228,7 +2228,7 @@ static ssize_t smk_write_syslog(struct file *file, const char __user *buf,
- if (!smack_privileged(CAP_MAC_ADMIN))
- return -EPERM;
-
-- data = kzalloc(count, GFP_KERNEL);
-+ data = kzalloc(count + 1, GFP_KERNEL);
- if (data == NULL)
- return -ENOMEM;
-
---
-1.8.1.4
-
--- /dev/null
+From 52a300264162f1a847e313eb1ae6375dc4287aa3 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Tue, 4 Feb 2014 17:35:24 +0000
+Subject: [PATCH 16/45] drm/i915: get_plane_config support for ILK+ v3
+
+This should allow BIOS fb inheritance to work on ILK+ machines too.
+
+v2: handle tiled BIOS fbs (Kristian)
+ split out common bits (Jesse)
+v3: alloc fb obj out in _init
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Change-Id: I54ca903612b13e89268daeb383131d4e98c38880
+---
+ drivers/gpu/drm/i915/intel_display.c | 62 ++++++++++++++++++++++++++++++++++++
+ 1 file changed, 62 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 38806d9..47fb2b3 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -6589,6 +6589,66 @@ static void ironlake_get_pfit_config(struct intel_crtc *crtc,
+ }
+ }
+
++static void ironlake_get_plane_config(struct intel_crtc *crtc,
++ struct intel_plane_config *plane_config)
++{
++ struct drm_device *dev = crtc->base.dev;
++ struct drm_i915_private *dev_priv = dev->dev_private;
++ u32 val, base, offset;
++ int pipe = crtc->pipe, plane = crtc->plane;
++ int fourcc, pixel_format;
++ int aligned_height;
++
++ plane_config->fb = kzalloc(sizeof(*plane_config->fb), GFP_KERNEL);
++ if (!plane_config->fb) {
++ DRM_DEBUG_KMS("failed to alloc fb\n");
++ return;
++ }
++
++ val = I915_READ(DSPCNTR(plane));
++
++ if (INTEL_INFO(dev)->gen >= 4)
++ if (val & DISPPLANE_TILED)
++ plane_config->tiled = true;
++
++ pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
++ fourcc = intel_format_to_fourcc(pixel_format);
++ plane_config->fb->base.pixel_format = fourcc;
++ plane_config->fb->base.bits_per_pixel =
++ drm_format_plane_cpp(fourcc, 0) * 8;
++
++ base = I915_READ(DSPSURF(plane)) & 0xfffff000;
++ if (IS_HASWELL(dev) || IS_BROADWELL(dev)) {
++ offset = I915_READ(DSPOFFSET(plane));
++ } else {
++ if (plane_config->tiled)
++ offset = I915_READ(DSPTILEOFF(plane));
++ else
++ offset = I915_READ(DSPLINOFF(plane));
++ }
++ plane_config->base = base;
++
++ val = I915_READ(PIPESRC(pipe));
++ plane_config->fb->base.width = ((val >> 16) & 0xfff) + 1;
++ plane_config->fb->base.height = ((val >> 0) & 0xfff) + 1;
++
++ val = I915_READ(DSPSTRIDE(pipe));
++ plane_config->fb->base.pitches[0] = val & 0xffffff80;
++
++ aligned_height = intel_align_height(dev, plane_config->fb->base.height,
++ plane_config->tiled);
++
++ plane_config->size = ALIGN(plane_config->fb->base.pitches[0] *
++ aligned_height, PAGE_SIZE);
++
++ DRM_DEBUG_KMS("pipe/plane %d/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
++ pipe, plane, plane_config->fb->base.width,
++ plane_config->fb->base.height,
++ plane_config->fb->base.bits_per_pixel, base,
++ plane_config->fb->base.pitches[0],
++ plane_config->size);
++}
++
+ static bool ironlake_get_pipe_config(struct intel_crtc *crtc,
+ struct intel_crtc_config *pipe_config)
+ {
+@@ -10757,6 +10817,7 @@ static void intel_init_display(struct drm_device *dev)
+
+ if (HAS_DDI(dev)) {
+ dev_priv->display.get_pipe_config = haswell_get_pipe_config;
++ dev_priv->display.get_plane_config = ironlake_get_plane_config;
+ dev_priv->display.crtc_mode_set = haswell_crtc_mode_set;
+ dev_priv->display.crtc_enable = haswell_crtc_enable;
+ dev_priv->display.crtc_disable = haswell_crtc_disable;
+@@ -10764,6 +10825,7 @@ static void intel_init_display(struct drm_device *dev)
+ dev_priv->display.update_plane = ironlake_update_plane;
+ } else if (HAS_PCH_SPLIT(dev)) {
+ dev_priv->display.get_pipe_config = ironlake_get_pipe_config;
++ dev_priv->display.get_plane_config = ironlake_get_plane_config;
+ dev_priv->display.crtc_mode_set = ironlake_crtc_mode_set;
+ dev_priv->display.crtc_enable = ironlake_crtc_enable;
+ dev_priv->display.crtc_disable = ironlake_crtc_disable;
+--
+1.8.4.5
+
+++ /dev/null
-From 5cb34576acc99cf42232a14f4645c6a9fbc78c63 Mon Sep 17 00:00:00 2001
-From: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
-Date: Thu, 7 Aug 2014 20:52:49 +0400
-Subject: [PATCH 17/20] Smack: remove unneeded NULL-termination from securtity
- label
-
-Values of extended attributes are stored as binary blobs. NULL-termination
-of them isn't required. It just wastes disk space and confuses command-line
-tools like getfattr because they have to print that zero byte at the end.
-
-This patch removes terminating zero byte from initial security label in
-smack_inode_init_security and cuts it out in function smack_inode_getsecurity
-which is used by syscall getxattr. This change seems completely safe, because
-function smk_parse_smack ignores everything after first zero byte.
-
-Change-Id: I131879e36fc9e71b65857b46714ccd0e512fc83c
-Signed-off-by: Konstantin Khlebnikov <k.khlebnikov@samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
----
- security/smack/smack_lsm.c | 6 +++---
- 1 file changed, 3 insertions(+), 3 deletions(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index 7bd0363..d347b79 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -672,7 +672,7 @@ static int smack_inode_init_security(struct inode *inode, struct inode *dir,
- }
-
- if (len)
-- *len = strlen(isp) + 1;
-+ *len = strlen(isp);
-
- return 0;
- }
-@@ -1076,7 +1076,7 @@ static int smack_inode_getsecurity(const struct inode *inode,
-
- if (strcmp(name, XATTR_SMACK_SUFFIX) == 0) {
- isp = smk_of_inode(inode);
-- ilen = strlen(isp) + 1;
-+ ilen = strlen(isp);
- *buffer = isp;
- return ilen;
- }
-@@ -1101,7 +1101,7 @@ static int smack_inode_getsecurity(const struct inode *inode,
- else
- return -EOPNOTSUPP;
-
-- ilen = strlen(isp) + 1;
-+ ilen = strlen(isp);
- if (rc == 0) {
- *buffer = isp;
- rc = ilen;
---
-1.8.1.4
-
--- /dev/null
+From 4bd48e332168d88f159d230a1c2ea0c28064fcb8 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Tue, 17 Dec 2013 14:46:59 -0800
+Subject: [PATCH 17/45] drm/i915: Wrap the preallocated BIOS framebuffer and
+ preserve for KMS fbcon v12
+
+Retrieve current framebuffer config info from the regs and create an fb
+object for the buffer the BIOS or boot loader left us. This should
+allow for smooth transitions to userspace apps once we finish the
+initial configuration construction.
+
+v2: check for non-native modes and adjust (Jesse)
+ fixup aperture and cmap frees (Imre)
+ use unlocked unref if init_bios fails (Jesse)
+ fix curly brace around DSPADDR check (Imre)
+ comment failure path for pin_and_fence (Imre)
+v3: fixup fixup of aperture frees (Chris)
+v4: update to current bits (locking & pin_and_fence hack) (Jesse)
+v5: move fb config fetch to display code (Jesse)
+ re-order hw state readout on initial load to suit fb inherit (Jesse)
+ re-add pin_and_fence in fbdev code to make sure we refcount properly (Je
+v6: rename to plane_config (Daniel)
+ check for valid object when initializing BIOS fb (Jesse)
+ split from plane_config readout and other display changes (Jesse)
+ drop use_bios_fb option (Chris)
+ update comments (Jesse)
+ rework fbdev_init_bios for clarity (Jesse)
+ drop fb obj ref under lock (Chris)
+v7: use fb object from plane_config instead (Ville)
+ take ref on fb object (Jesse)
+v8: put under i915_fastboot option (Jesse)
+ fix fb ptr checking (Jesse)
+ inform drm_fb_helper if we fail to enable a connector (Jesse)
+ drop unnecessary enabled[] modifications in failure cases (Chris)
+ split from BIOS connector config readout (Daniel)
+ don't memset the fb buffer if preallocated (Chris)
+ alloc ifbdev up front and pass to init_bios (Chris)
+ check for bad ifbdev in restore_mode too (Chris)
+v9: fix up !fastboot bpp setting (Jesse)
+ fix up !fastboot helper alloc (Jesse)
+ make sure BIOS fb is sufficient for biggest active pipe (Jesse)
+v10:fix up size calculation for proposed fbs (Chris)
+ go back to two pass pipe fb assignment (Chris)
+ add warning for active pipes w/o fbs (Chris)
+ clean up num_pipes checks in fbdev_init and fbdev_restore_mode (Chris)
+ move i915.fastboot into fbdev_init (Chris)
+v11:make BIOS connector config usage unconditional (Daniel)
+v12:fix up fb vs pipe size checking (Chris)
+
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Jin Song <jin.kyu.song@linux.intel.com>
+
+Conflicts:
+ drivers/gpu/drm/i915/intel_fbdev.c
+Change-Id: I6ba517f0e0c0339bf6c7663ef04ea67181c0286a
+---
+ drivers/gpu/drm/i915/intel_display.c | 1 -
+ drivers/gpu/drm/i915/intel_drv.h | 1 +
+ drivers/gpu/drm/i915/intel_fbdev.c | 174 +++++++++++++++++++++++++++++++++--
+ 3 files changed, 166 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 47fb2b3..f07d366 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -2097,7 +2097,6 @@ static void intel_alloc_plane_obj(struct intel_crtc *crtc,
+ out_unref_obj:
+ drm_gem_object_unreference(&obj->base);
+ mutex_unlock(&dev->struct_mutex);
+-
+ }
+
+ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index f6af206..9a9c56ce 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -113,6 +113,7 @@ struct intel_fbdev {
+ struct intel_framebuffer ifb;
+ struct list_head fbdev_list;
+ struct drm_display_mode *our_mode;
++ int preferred_bpp;
+ };
+
+ struct intel_encoder {
+diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
+index 99835d4..fb70f5e 100644
+--- a/drivers/gpu/drm/i915/intel_fbdev.c
++++ b/drivers/gpu/drm/i915/intel_fbdev.c
+@@ -123,6 +123,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
+ struct drm_framebuffer *fb;
+ struct drm_i915_gem_object *obj;
+ int size, ret;
++ bool prealloc = false;
+
+ mutex_lock(&dev->struct_mutex);
+
+@@ -133,6 +134,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
+ goto out_unlock;
+ } else {
+ DRM_DEBUG_KMS("re-using BIOS fb\n");
++ prealloc = true;
+ sizes->fb_width = intel_fb->base.width;
+ sizes->fb_height = intel_fb->base.height;
+ }
+@@ -194,7 +196,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
+ * If the object is stolen however, it will be full of whatever
+ * garbage was left in there.
+ */
+- if (ifbdev->ifb.obj->stolen)
++ if (ifbdev->ifb.obj->stolen && !prealloc)
+ memset_io(info->screen_base, 0, info->screen_size);
+
+ /* Use default scratch pixmap (info->pixmap.flags = FB_PIXMAP_SYSTEM) */
+@@ -385,27 +387,179 @@ static void intel_fbdev_destroy(struct drm_device *dev,
+ intel_framebuffer_fini(&ifbdev->ifb);
+ }
+
++/*
++ * Build an intel_fbdev struct using a BIOS allocated framebuffer, if possible.
++ * The core display code will have read out the current plane configuration,
++ * so we use that to figure out if there's an object for us to use as the
++ * fb, and if so, we re-use it for the fbdev configuration.
++ *
++ * Note we only support a single fb shared across pipes for boot (mostly for
++ * fbcon), so we just find the biggest and use that.
++ */
++static bool intel_fbdev_init_bios(struct drm_device *dev,
++ struct intel_fbdev *ifbdev)
++{
++ struct intel_framebuffer *fb = NULL;
++ struct drm_crtc *crtc;
++ struct intel_crtc *intel_crtc;
++ struct intel_plane_config *plane_config = NULL;
++ unsigned int max_size = 0;
++
++ if (!i915_fastboot)
++ return false;
++
++ /* Find the largest fb */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ intel_crtc = to_intel_crtc(crtc);
++
++ if (!intel_crtc->active || !intel_crtc->plane_config.fb) {
++ DRM_DEBUG_KMS("pipe %c not active or no fb, skipping\n",
++ pipe_name(intel_crtc->pipe));
++ continue;
++ }
++
++ if (intel_crtc->plane_config.size > max_size) {
++ DRM_DEBUG_KMS("found possible fb from plane %c\n",
++ pipe_name(intel_crtc->pipe));
++ plane_config = &intel_crtc->plane_config;
++ fb = plane_config->fb;
++ max_size = plane_config->size;
++ }
++ }
++
++ if (!fb) {
++ DRM_DEBUG_KMS("no active fbs found, not using BIOS config\n");
++ goto out;
++ }
++
++ /* Now make sure all the pipes will fit into it */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ unsigned int cur_size;
++
++ intel_crtc = to_intel_crtc(crtc);
++
++ if (!intel_crtc->active) {
++ DRM_DEBUG_KMS("pipe %c not active, skipping\n",
++ pipe_name(intel_crtc->pipe));
++ continue;
++ }
++
++ DRM_DEBUG_KMS("checking plane %c for BIOS fb\n",
++ pipe_name(intel_crtc->pipe));
++
++ /*
++ * See if the plane fb we found above will fit on this
++ * pipe. Note we need to use the selected fb's bpp rather
++ * than the current pipe's, since they could be different.
++ */
++ cur_size = intel_crtc->config.adjusted_mode.crtc_hdisplay *
++ intel_crtc->config.adjusted_mode.crtc_vdisplay;
++ DRM_DEBUG_KMS("pipe %c area: %d\n", pipe_name(intel_crtc->pipe),
++ cur_size);
++ cur_size *= fb->base.bits_per_pixel / 8;
++ DRM_DEBUG_KMS("total size %d (bpp %d)\n", cur_size,
++ fb->base.bits_per_pixel / 8);
++
++ if (cur_size > max_size) {
++ DRM_DEBUG_KMS("fb not big enough for plane %c (%d vs %d)\n",
++ pipe_name(intel_crtc->pipe),
++ cur_size, max_size);
++ plane_config = NULL;
++ fb = NULL;
++ break;
++ }
++
++ DRM_DEBUG_KMS("fb big enough for plane %c (%d >= %d)\n",
++ pipe_name(intel_crtc->pipe),
++ max_size, cur_size);
++ }
++
++ /* Free unused fbs */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct intel_framebuffer *cur_fb;
++
++ intel_crtc = to_intel_crtc(crtc);
++ cur_fb = intel_crtc->plane_config.fb;
++
++ if (cur_fb && cur_fb != fb)
++ drm_framebuffer_unreference(&cur_fb->base);
++ }
++
++ if (!fb) {
++ DRM_DEBUG_KMS("BIOS fb not suitable for all pipes, not using\n");
++ goto out;
++ }
++
++ ifbdev->preferred_bpp = plane_config->fb->base.bits_per_pixel;
++ ifbdev->ifb = *fb;
++
++ /* Assuming a single fb across all pipes here */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ intel_crtc = to_intel_crtc(crtc);
++
++ if (!intel_crtc->active)
++ continue;
++
++ /*
++ * This should only fail on the first one so we don't need
++ * to cleanup any secondary crtc->fbs
++ */
++ if (intel_pin_and_fence_fb_obj(dev, fb->obj, NULL))
++ goto out_unref_obj;
++
++ crtc->fb = &fb->base;
++ drm_gem_object_reference(&fb->obj->base);
++ drm_framebuffer_reference(&fb->base);
++ }
++
++ /* Final pass to check if any active pipes don't have fbs */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ intel_crtc = to_intel_crtc(crtc);
++
++ if (!intel_crtc->active)
++ continue;
++
++ WARN(!crtc->fb,
++ "re-used BIOS config but lost an fb on crtc %d\n",
++ crtc->base.id);
++ }
++
++
++ DRM_DEBUG_KMS("using BIOS fb for initial console\n");
++ return true;
++
++out_unref_obj:
++ drm_framebuffer_unreference(&fb->base);
++out:
++
++ return false;
++}
++
+ int intel_fbdev_init(struct drm_device *dev)
+ {
+ struct intel_fbdev *ifbdev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+- ifbdev = kzalloc(sizeof(*ifbdev), GFP_KERNEL);
+- if (!ifbdev)
++ if (WARN_ON(INTEL_INFO(dev)->num_pipes == 0))
++ return -ENODEV;
++
++ ifbdev = kzalloc(sizeof(struct intel_fbdev), GFP_KERNEL);
++ if (ifbdev == NULL)
+ return -ENOMEM;
+
+- dev_priv->fbdev = ifbdev;
+ ifbdev->helper.funcs = &intel_fb_helper_funcs;
++ if (!intel_fbdev_init_bios(dev, ifbdev))
++ ifbdev->preferred_bpp = 32;
+
+ ret = drm_fb_helper_init(dev, &ifbdev->helper,
+- INTEL_INFO(dev)->num_pipes,
+- 4);
++ INTEL_INFO(dev)->num_pipes, 4);
+ if (ret) {
+ kfree(ifbdev);
+ return ret;
+ }
+
++ dev_priv->fbdev = ifbdev;
+ drm_fb_helper_single_add_all_connectors(&ifbdev->helper);
+
+ return 0;
+@@ -414,9 +568,10 @@ int intel_fbdev_init(struct drm_device *dev)
+ void intel_fbdev_initial_config(struct drm_device *dev)
+ {
+ struct drm_i915_private *dev_priv = dev->dev_private;
++ struct intel_fbdev *ifbdev = dev_priv->fbdev;
+
+ /* Due to peculiar init order wrt to hpd handling this is separate. */
+- drm_fb_helper_initial_config(&dev_priv->fbdev->helper, 32);
++ drm_fb_helper_initial_config(&ifbdev->helper, ifbdev->preferred_bpp);
+ }
+
+ void intel_fbdev_fini(struct drm_device *dev)
+@@ -454,7 +609,8 @@ void intel_fbdev_set_suspend(struct drm_device *dev, int state)
+ void intel_fbdev_output_poll_changed(struct drm_device *dev)
+ {
+ struct drm_i915_private *dev_priv = dev->dev_private;
+- drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
++ if (dev_priv->fbdev)
++ drm_fb_helper_hotplug_event(&dev_priv->fbdev->helper);
+ }
+
+ void intel_fbdev_restore_mode(struct drm_device *dev)
+@@ -462,7 +618,7 @@ void intel_fbdev_restore_mode(struct drm_device *dev)
+ int ret;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+- if (INTEL_INFO(dev)->num_pipes == 0)
++ if (!dev_priv->fbdev)
+ return;
+
+ drm_modeset_lock_all(dev);
+--
+1.8.4.5
+
+++ /dev/null
-From 6bcb8f43991ad739edfb61f59359c2e9ea9fd159 Mon Sep 17 00:00:00 2001
-From: Marcin Niesluchowski <m.niesluchow@samsung.com>
-Date: Tue, 19 Aug 2014 14:26:32 +0200
-Subject: [PATCH 18/20] Smack: Fix setting label on successful file open
-
-While opening with CAP_MAC_OVERRIDE file label is not set.
-Other calls may access it after CAP_MAC_OVERRIDE is dropped from process.
-
-Change-Id: I937d070e1c0cb251f4a0dd3291efbc94be3ca548
-Signed-off-by: Marcin Niesluchowski <m.niesluchow@samsung.com>
-Signed-off-by: Rafal Krypa <r.krypa@samsung.com>
-Origin: git://git.gitorious.org/smack-next/kernel.git# smack-for-3.18
----
- security/smack/smack_lsm.c | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
-
-diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c
-index d347b79..47ed6a4 100644
---- a/security/smack/smack_lsm.c
-+++ b/security/smack/smack_lsm.c
-@@ -1477,8 +1477,10 @@ static int smack_file_open(struct file *file, const struct cred *cred)
- struct smk_audit_info ad;
- int rc;
-
-- if (smack_privileged(CAP_MAC_OVERRIDE))
-+ if (smack_privileged(CAP_MAC_OVERRIDE)) {
-+ file->f_security = isp->smk_inode;
- return 0;
-+ }
-
- smk_ad_init(&ad, __func__, LSM_AUDIT_DATA_PATH);
- smk_ad_setfield_u_fs_path(&ad, file->f_path);
---
-1.8.1.4
-
--- /dev/null
+From 463b6cca4f6bc5ed5f2fff01eb7637f2d4b33f1d Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Thu, 13 Feb 2014 09:49:20 -0800
+Subject: [PATCH 18/45] drm/i915: preserve SSC if previously set
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Some machines may have a broken VBT or no VBT at all, but we still want
+to use SSC there. So check for it and keep it enabled if we see it
+already on. Based on an earlier fix from Kristian.
+
+Reported-by: Kristian Høgsberg <hoegsberg@gmail.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Jin Song <jin.kyu.song@linux.intel.com>
+
+Conflicts:
+ drivers/gpu/drm/i915/intel_display.c
+Change-Id: Ic19cd9332fd7b4280cc43fef54701c666fdfebfd
+---
+ drivers/gpu/drm/i915/intel_display.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index f07d366..86af442 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -5764,6 +5764,10 @@ static void ironlake_init_pch_refclk(struct drm_device *dev)
+ */
+ val = I915_READ(PCH_DREF_CONTROL);
+
++ /* Preserve SSC if the BIOS set it */
++ if (val & DREF_SSC1_ENABLE)
++ i915_panel_use_ssc = 1;
++
+ /* As we must carefully and slowly disable/enable each source in turn,
+ * compute the final state we want first and check if we need to
+ * make any changes at all.
+--
+1.8.4.5
+
--- /dev/null
+From 467b7a842012692a26cdd984bb5369cfbce062c1 Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Fri, 21 Feb 2014 13:50:53 -0800
+Subject: [PATCH 19/45] drm/i915: don't bother enabling swizzle bits on gen7+
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+As of IVB, the memory controller does internal swizzling already, so we
+shouldn't need to enable these. Based on an earlier fix from Kristian.
+
+Reported-by: Kristian Høgsberg <hoegsberg@gmail.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Change-Id: I134aa8bb22d42b7e39675641df2a5434255a58a9
+---
+ drivers/gpu/drm/i915/i915_gem.c | 7 +++----
+ drivers/gpu/drm/i915/i915_gem_tiling.c | 2 +-
+ 2 files changed, 4 insertions(+), 5 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 00c8361..0a732a1 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -4412,6 +4412,9 @@ void i915_gem_init_swizzling(struct drm_device *dev)
+ dev_priv->mm.bit_6_swizzle_x == I915_BIT_6_SWIZZLE_NONE)
+ return;
+
++ if (INTEL_INFO(dev)->gen >= 7)
++ return;
++
+ I915_WRITE(DISP_ARB_CTL, I915_READ(DISP_ARB_CTL) |
+ DISP_TILE_SURFACE_SWIZZLING);
+
+@@ -4421,10 +4424,6 @@ void i915_gem_init_swizzling(struct drm_device *dev)
+ I915_WRITE(TILECTL, I915_READ(TILECTL) | TILECTL_SWZCTL);
+ if (IS_GEN6(dev))
+ I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_SNB));
+- else if (IS_GEN7(dev))
+- I915_WRITE(ARB_MODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_IVB));
+- else if (IS_GEN8(dev))
+- I915_WRITE(GAMTARBMODE, _MASKED_BIT_ENABLE(ARB_MODE_SWIZZLE_BDW));
+ else
+ BUG();
+ }
+diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
+index b139053..5763362 100644
+--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
++++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
+@@ -91,7 +91,7 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
+ uint32_t swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
+ uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
+
+- if (IS_VALLEYVIEW(dev)) {
++ if (INTEL_INFO(dev)->gen >= 7) {
+ swizzle_x = I915_BIT_6_SWIZZLE_NONE;
+ swizzle_y = I915_BIT_6_SWIZZLE_NONE;
+ } else if (INTEL_INFO(dev)->gen >= 6) {
+--
+1.8.4.5
+
+++ /dev/null
-From bd0310a223ab0726327e59d4dfe52c5a138449aa Mon Sep 17 00:00:00 2001
-From: Chanho Park <chanho61.park@samsung.com>
-Date: Fri, 12 Sep 2014 11:03:01 +0900
-Subject: [PATCH 19/20] perf tools: define _DEFAULT_SOURCE for glibc_2.20
-
-_BSD_SOURCE was deprecated in favour of _DEFAULT_SOURCE since glibc
-2.20[1]. To avoid build warning on glibc2.20, _DEFAULT_SOURCE should
-also be defined.
-
-[1]: https://sourceware.org/glibc/wiki/Release/2.20
-
-Change-Id: I01a2849bb8642cbf5c875caf227ab05e6fa0fa41
-Signed-off-by: Chanho Park <chanho61.park@samsung.com>
----
- tools/perf/util/util.h | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h
-index 6995d66..3830f6d 100644
---- a/tools/perf/util/util.h
-+++ b/tools/perf/util/util.h
-@@ -39,6 +39,8 @@
-
- #define _ALL_SOURCE 1
- #define _BSD_SOURCE 1
-+/* glibc 2.20 deprecates _BSD_SOURCE in favour of _DEFAULT_SOURCE */
-+#define _DEFAULT_SOURCE 1
- #define HAS_BOOL
-
- #include <unistd.h>
---
-1.8.1.4
-
+++ /dev/null
-From d686f81341ff627f841153f6ebe0a382f30a9f4f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Jos=C3=A9=20Bollo?= <jose.bollo@open.eurogiciel.org>
-Date: Mon, 15 Sep 2014 11:42:04 +0200
-Subject: [PATCH 20/20] SMACK: Fix wrong copy size
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-The function strncpy was copying an extra character 9
-when i == len (what is possible via revoke interface).
-
-Change-Id: Ic7452da05773e620a1d7bbc55e859c25a86c65f6
-Signed-off-by: José Bollo <jose.bollo@open.eurogiciel.org>
----
- security/smack/smack_access.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/security/smack/smack_access.c b/security/smack/smack_access.c
-index c062e94..930e548 100644
---- a/security/smack/smack_access.c
-+++ b/security/smack/smack_access.c
-@@ -432,7 +432,7 @@ char *smk_parse_smack(const char *string, int len)
-
- smack = kzalloc(i + 1, GFP_KERNEL);
- if (smack != NULL) {
-- strncpy(smack, string, i + 1);
-+ strncpy(smack, string, i);
- smack[i] = '\0';
- }
- return smack;
---
-1.8.1.4
-
--- /dev/null
+From 6f71ab91a680a083b71ec88c0fc601ddd64f048a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Kristian=20H=C3=B8gsberg?= <hoegsberg@gmail.com>
+Date: Tue, 25 Feb 2014 14:33:09 -0800
+Subject: [PATCH 20/45] drm/i915: use current mode if the size matches the
+ preferred mode
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+The BIOS may set a native mode that doesn't quite match the preferred
+mode timings. It should be ok to use however if it uses the same size,
+so try to avoid a mode set in that case.
+
+Signed-off-by: Kristian Høgsberg <hoegsberg@gmail.com>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Change-Id: I8b6fecd1522013dfbd1ae975ac6c6557522348e2
+---
+ drivers/gpu/drm/drm_modes.c | 8 ++++++++
+ drivers/gpu/drm/i915/intel_fbdev.c | 35 +++++++++++++++++------------------
+ include/drm/drm_crtc.h | 2 ++
+ 3 files changed, 27 insertions(+), 18 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
+index b073315..7d2dda4 100644
+--- a/drivers/gpu/drm/drm_modes.c
++++ b/drivers/gpu/drm/drm_modes.c
+@@ -894,6 +894,14 @@ bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1,
+ }
+ EXPORT_SYMBOL(drm_mode_equal_no_clocks_no_stereo);
+
++bool drm_mode_same_size(const struct drm_display_mode *mode1,
++ const struct drm_display_mode *mode2)
++{
++ return mode1->vdisplay == mode2->vdisplay &&
++ mode1->hdisplay == mode2->hdisplay;
++}
++EXPORT_SYMBOL(drm_mode_same_size);
++
+ /**
+ * drm_mode_validate_size - make sure modes adhere to size constraints
+ * @dev: DRM device
+diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
+index fb70f5e..8421b91 100644
+--- a/drivers/gpu/drm/i915/intel_fbdev.c
++++ b/drivers/gpu/drm/i915/intel_fbdev.c
+@@ -324,31 +324,30 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
+ /* go for command line mode first */
+ modes[i] = drm_pick_cmdline_mode(fb_conn, width, height);
+
+- /* try for preferred next */
++ /* try for preferred next or match current */
+ if (!modes[i]) {
++ struct drm_display_mode *preferred;
++
+ DRM_DEBUG_KMS("looking for preferred mode on connector %d\n",
+ fb_conn->connector->base.id);
+- modes[i] = drm_has_preferred_mode(fb_conn, width,
+- height);
+- }
+-
+- /* last resort: use current mode */
+- if (!modes[i]) {
+- /*
+- * IMPORTANT: We want to use the adjusted mode (i.e.
+- * after the panel fitter upscaling) as the initial
+- * config, not the input mode, which is what crtc->mode
+- * usually contains. But since our current fastboot
+- * code puts a mode derived from the post-pfit timings
+- * into crtc->mode this works out correctly. We don't
+- * use hwmode anywhere right now, so use it for this
+- * since the fb helper layer wants a pointer to
+- * something we own.
+- */
++ preferred = drm_has_preferred_mode(fb_conn, width,
++ height);
+ intel_mode_from_pipe_config(&encoder->crtc->hwmode,
+ &to_intel_crtc(encoder->crtc)->config);
+ modes[i] = &encoder->crtc->hwmode;
++
++ if (preferred &&
++ !drm_mode_same_size(preferred, modes[i])) {
++ DRM_DEBUG_KMS("using preferred mode %s "
++ "instead of current mode %s "
++ "on connector %d\n",
++ preferred->name,
++ modes[i]->name,
++ fb_conn->connector->base.id);
++ modes[i] = preferred;
++ }
+ }
++
+ crtcs[i] = new_crtc;
+
+ DRM_DEBUG_KMS("connector %s on crtc %d: %s\n",
+diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
+index 8f3dee0..c074759 100644
+--- a/include/drm/drm_crtc.h
++++ b/include/drm/drm_crtc.h
+@@ -1019,6 +1019,8 @@ extern bool drm_mode_equal(const struct drm_display_mode *mode1, const struct dr
+ extern bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2);
+ extern int drm_mode_width(const struct drm_display_mode *mode);
+ extern int drm_mode_height(const struct drm_display_mode *mode);
++extern bool drm_mode_same_size(const struct drm_display_mode *mode1,
++ const struct drm_display_mode *mode2);
+
+ /* for us by fb module */
+ extern struct drm_display_mode *drm_mode_create(struct drm_device *dev);
+--
+1.8.4.5
+
--- /dev/null
+From d49d180211853ec599af25b285ca1916ff664def Mon Sep 17 00:00:00 2001
+From: Jesse Barnes <jbarnes@virtuousgeek.org>
+Date: Thu, 6 Mar 2014 14:53:18 -0800
+Subject: [PATCH 21/45] drm/i915: remove early fb allocation dependency on
+ CONFIG_FB v2
+
+By stuffing the fb allocation into the crtc, we get mode set lifetime
+refcounting for free, but have to handle the initial pin & fence
+slightly differently. It also means we can move the shared fb handling
+into the core rather than leaving it out in the fbdev code.
+
+v2: null out crtc->fb on error (Daniel)
+ take fbdev fb ref and remove unused error path (Daniel)
+
+Requested-by: Daniel Vetter <daniel@ffwll.ch>
+Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Signed-off-by: Jin Song <jin.kyu.song@linux.intel.com>
+
+Conflicts:
+ drivers/gpu/drm/i915/intel_display.c
+Change-Id: I90bfc953e3b181cb5d6201ee97d191b537cc07cd
+---
+ drivers/gpu/drm/i915/intel_display.c | 145 ++++++++++++++++++++++++-----------
+ drivers/gpu/drm/i915/intel_drv.h | 1 -
+ drivers/gpu/drm/i915/intel_fbdev.c | 38 +--------
+ 3 files changed, 105 insertions(+), 79 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 86af442..6a52f52 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -2057,7 +2057,7 @@ int intel_format_to_fourcc(int format)
+ }
+ }
+
+-static void intel_alloc_plane_obj(struct intel_crtc *crtc,
++static bool intel_alloc_plane_obj(struct intel_crtc *crtc,
+ struct intel_plane_config *plane_config)
+ {
+ struct drm_device *dev = crtc->base.dev;
+@@ -2065,38 +2065,76 @@ static void intel_alloc_plane_obj(struct intel_crtc *crtc,
+ struct drm_mode_fb_cmd2 mode_cmd = { 0 };
+ u32 base = plane_config->base;
+
+- if (!plane_config->fb)
+- return;
+-
+ obj = i915_gem_object_create_stolen_for_preallocated(dev, base, base,
+ plane_config->size);
+ if (!obj)
+- return;
++ return false;
+
+ if (plane_config->tiled) {
+ obj->tiling_mode = I915_TILING_X;
+- obj->stride = plane_config->fb->base.pitches[0];
++ obj->stride = crtc->base.fb->pitches[0];
+ }
+
+- mode_cmd.pixel_format = plane_config->fb->base.pixel_format;
+- mode_cmd.width = plane_config->fb->base.width;
+- mode_cmd.height = plane_config->fb->base.height;
+- mode_cmd.pitches[0] = plane_config->fb->base.pitches[0];
++ mode_cmd.pixel_format = crtc->base.fb->pixel_format;
++ mode_cmd.width = crtc->base.fb->width;
++ mode_cmd.height = crtc->base.fb->height;
++ mode_cmd.pitches[0] = crtc->base.fb->pitches[0];
+
+ mutex_lock(&dev->struct_mutex);
+
+- if (intel_framebuffer_init(dev, plane_config->fb, &mode_cmd, obj)) {
++ if (intel_framebuffer_init(dev, to_intel_framebuffer(crtc->base.fb),
++ &mode_cmd, obj)) {
+ DRM_DEBUG_KMS("intel fb init failed\n");
+ goto out_unref_obj;
+ }
+
+ mutex_unlock(&dev->struct_mutex);
+- DRM_DEBUG_KMS("plane fb obj %p\n", plane_config->fb->obj);
+- return;
++
++ DRM_DEBUG_KMS("plane fb obj %p\n", obj);
++ return true;
+
+ out_unref_obj:
+ drm_gem_object_unreference(&obj->base);
+ mutex_unlock(&dev->struct_mutex);
++ return false;
++}
++
++static void intel_find_plane_obj(struct intel_crtc *intel_crtc,
++ struct intel_plane_config *plane_config)
++{
++ struct drm_device *dev = intel_crtc->base.dev;
++ struct drm_crtc *c;
++ struct intel_crtc *i;
++ struct intel_framebuffer *fb;
++
++ if (!intel_crtc->base.fb)
++ return;
++
++ if (intel_alloc_plane_obj(intel_crtc, plane_config))
++ return;
++
++ kfree(intel_crtc->base.fb);
++
++ /*
++ * Failed to alloc the obj, check to see if we should share
++ * an fb with another CRTC instead
++ */
++ list_for_each_entry(c, &dev->mode_config.crtc_list, head) {
++ i = to_intel_crtc(c);
++
++ if (c == &intel_crtc->base)
++ continue;
++
++ if (!i->active || !c->fb)
++ continue;
++
++ fb = to_intel_framebuffer(c->fb);
++ if (i915_gem_obj_ggtt_offset(fb->obj) == plane_config->base) {
++ drm_framebuffer_reference(c->fb);
++ intel_crtc->base.fb = c->fb;
++ break;
++ }
++ }
+ }
+
+ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
+@@ -5594,8 +5632,8 @@ static void i9xx_get_plane_config(struct intel_crtc *crtc,
+ int fourcc, pixel_format;
+ int aligned_height;
+
+- plane_config->fb = kzalloc(sizeof(*plane_config->fb), GFP_KERNEL);
+- if (!plane_config->fb) {
++ crtc->base.fb = kzalloc(sizeof(struct intel_framebuffer), GFP_KERNEL);
++ if (!crtc->base.fb) {
+ DRM_DEBUG_KMS("failed to alloc fb\n");
+ return;
+ }
+@@ -5608,8 +5646,8 @@ static void i9xx_get_plane_config(struct intel_crtc *crtc,
+
+ pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
+ fourcc = intel_format_to_fourcc(pixel_format);
+- plane_config->fb->base.pixel_format = fourcc;
+- plane_config->fb->base.bits_per_pixel =
++ crtc->base.fb->pixel_format = fourcc;
++ crtc->base.fb->bits_per_pixel =
+ drm_format_plane_cpp(fourcc, 0) * 8;
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+@@ -5624,23 +5662,23 @@ static void i9xx_get_plane_config(struct intel_crtc *crtc,
+ plane_config->base = base;
+
+ val = I915_READ(PIPESRC(pipe));
+- plane_config->fb->base.width = ((val >> 16) & 0xfff) + 1;
+- plane_config->fb->base.height = ((val >> 0) & 0xfff) + 1;
++ crtc->base.fb->width = ((val >> 16) & 0xfff) + 1;
++ crtc->base.fb->height = ((val >> 0) & 0xfff) + 1;
+
+ val = I915_READ(DSPSTRIDE(pipe));
+- plane_config->fb->base.pitches[0] = val & 0xffffff80;
++ crtc->base.fb->pitches[0] = val & 0xffffff80;
+
+- aligned_height = intel_align_height(dev, plane_config->fb->base.height,
++ aligned_height = intel_align_height(dev, crtc->base.fb->height,
+ plane_config->tiled);
+
+- plane_config->size = ALIGN(plane_config->fb->base.pitches[0] *
++ plane_config->size = ALIGN(crtc->base.fb->pitches[0] *
+ aligned_height, PAGE_SIZE);
+
+ DRM_DEBUG_KMS("pipe/plane %d/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
+- pipe, plane, plane_config->fb->base.width,
+- plane_config->fb->base.height,
+- plane_config->fb->base.bits_per_pixel, base,
+- plane_config->fb->base.pitches[0],
++ pipe, plane, crtc->base.fb->width,
++ crtc->base.fb->height,
++ crtc->base.fb->bits_per_pixel, base,
++ crtc->base.fb->pitches[0],
+ plane_config->size);
+
+ }
+@@ -6602,8 +6640,8 @@ static void ironlake_get_plane_config(struct intel_crtc *crtc,
+ int fourcc, pixel_format;
+ int aligned_height;
+
+- plane_config->fb = kzalloc(sizeof(*plane_config->fb), GFP_KERNEL);
+- if (!plane_config->fb) {
++ crtc->base.fb = kzalloc(sizeof(struct intel_framebuffer), GFP_KERNEL);
++ if (!crtc->base.fb) {
+ DRM_DEBUG_KMS("failed to alloc fb\n");
+ return;
+ }
+@@ -6616,8 +6654,8 @@ static void ironlake_get_plane_config(struct intel_crtc *crtc,
+
+ pixel_format = val & DISPPLANE_PIXFORMAT_MASK;
+ fourcc = intel_format_to_fourcc(pixel_format);
+- plane_config->fb->base.pixel_format = fourcc;
+- plane_config->fb->base.bits_per_pixel =
++ crtc->base.fb->pixel_format = fourcc;
++ crtc->base.fb->bits_per_pixel =
+ drm_format_plane_cpp(fourcc, 0) * 8;
+
+ base = I915_READ(DSPSURF(plane)) & 0xfffff000;
+@@ -6632,23 +6670,23 @@ static void ironlake_get_plane_config(struct intel_crtc *crtc,
+ plane_config->base = base;
+
+ val = I915_READ(PIPESRC(pipe));
+- plane_config->fb->base.width = ((val >> 16) & 0xfff) + 1;
+- plane_config->fb->base.height = ((val >> 0) & 0xfff) + 1;
++ crtc->base.fb->width = ((val >> 16) & 0xfff) + 1;
++ crtc->base.fb->height = ((val >> 0) & 0xfff) + 1;
+
+ val = I915_READ(DSPSTRIDE(pipe));
+- plane_config->fb->base.pitches[0] = val & 0xffffff80;
++ crtc->base.fb->pitches[0] = val & 0xffffff80;
+
+- aligned_height = intel_align_height(dev, plane_config->fb->base.height,
++ aligned_height = intel_align_height(dev, crtc->base.fb->height,
+ plane_config->tiled);
+
+- plane_config->size = ALIGN(plane_config->fb->base.pitches[0] *
++ plane_config->size = ALIGN(crtc->base.fb->pitches[0] *
+ aligned_height, PAGE_SIZE);
+
+ DRM_DEBUG_KMS("pipe/plane %d/%d with fb: size=%dx%d@%d, offset=%x, pitch %d, size 0x%x\n",
+- pipe, plane, plane_config->fb->base.width,
+- plane_config->fb->base.height,
+- plane_config->fb->base.bits_per_pixel, base,
+- plane_config->fb->base.pitches[0],
++ pipe, plane, crtc->base.fb->width,
++ crtc->base.fb->height,
++ crtc->base.fb->bits_per_pixel, base,
++ crtc->base.fb->pitches[0],
+ plane_config->size);
+ }
+
+@@ -11171,10 +11209,7 @@ void intel_modeset_init(struct drm_device *dev)
+ if (!crtc->active)
+ continue;
+
+-#if IS_ENABLED(CONFIG_FB)
+ /*
+- * We don't have a good way of freeing the buffer w/o the FB
+- * layer owning it...
+ * Note that reserving the BIOS fb up front prevents us
+ * from stuffing other stolen allocations like the ring
+ * on top. This prevents some ugliness at boot time, and
+@@ -11188,9 +11223,8 @@ void intel_modeset_init(struct drm_device *dev)
+ * If the fb is shared between multiple heads, we'll
+ * just get the first one.
+ */
+- intel_alloc_plane_obj(crtc, &crtc->plane_config);
++ intel_find_plane_obj(crtc, &crtc->plane_config);
+ }
+-#endif
+ }
+ }
+
+@@ -11554,9 +11588,32 @@ void intel_modeset_setup_hw_state(struct drm_device *dev,
+
+ void intel_modeset_gem_init(struct drm_device *dev)
+ {
++ struct drm_crtc *c;
++ struct intel_framebuffer *fb;
++
+ intel_modeset_init_hw(dev);
+
+ intel_setup_overlay(dev);
++
++ /*
++ * Make sure any fbs we allocated at startup are properly
++ * pinned & fenced. When we do the allocation it's too early
++ * for this.
++ */
++ mutex_lock(&dev->struct_mutex);
++ list_for_each_entry(c, &dev->mode_config.crtc_list, head) {
++ if (!c->fb)
++ continue;
++
++ fb = to_intel_framebuffer(c->fb);
++ if (intel_pin_and_fence_fb_obj(dev, fb->obj, NULL)) {
++ DRM_ERROR("failed to pin boot fb on pipe %d\n",
++ to_intel_crtc(c)->pipe);
++ drm_framebuffer_unreference(c->fb);
++ c->fb = NULL;
++ }
++ }
++ mutex_unlock(&dev->struct_mutex);
+ }
+
+ void intel_modeset_cleanup(struct drm_device *dev)
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index 9a9c56ce..bababa7 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -212,7 +212,6 @@ typedef struct dpll {
+ } intel_clock_t;
+
+ struct intel_plane_config {
+- struct intel_framebuffer *fb; /* ends up managed by intel_fbdev.c */
+ bool tiled;
+ int size;
+ u32 base;
+diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
+index 8421b91..ff9a509 100644
+--- a/drivers/gpu/drm/i915/intel_fbdev.c
++++ b/drivers/gpu/drm/i915/intel_fbdev.c
+@@ -411,7 +411,7 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ intel_crtc = to_intel_crtc(crtc);
+
+- if (!intel_crtc->active || !intel_crtc->plane_config.fb) {
++ if (!intel_crtc->active || !crtc->fb) {
+ DRM_DEBUG_KMS("pipe %c not active or no fb, skipping\n",
+ pipe_name(intel_crtc->pipe));
+ continue;
+@@ -421,7 +421,7 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
+ DRM_DEBUG_KMS("found possible fb from plane %c\n",
+ pipe_name(intel_crtc->pipe));
+ plane_config = &intel_crtc->plane_config;
+- fb = plane_config->fb;
++ fb = to_intel_framebuffer(crtc->fb);
+ max_size = plane_config->size;
+ }
+ }
+@@ -473,43 +473,15 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
+ max_size, cur_size);
+ }
+
+- /* Free unused fbs */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct intel_framebuffer *cur_fb;
+-
+- intel_crtc = to_intel_crtc(crtc);
+- cur_fb = intel_crtc->plane_config.fb;
+-
+- if (cur_fb && cur_fb != fb)
+- drm_framebuffer_unreference(&cur_fb->base);
+- }
+-
+ if (!fb) {
+ DRM_DEBUG_KMS("BIOS fb not suitable for all pipes, not using\n");
+ goto out;
+ }
+
+- ifbdev->preferred_bpp = plane_config->fb->base.bits_per_pixel;
++ ifbdev->preferred_bpp = fb->base.bits_per_pixel;
+ ifbdev->ifb = *fb;
+
+- /* Assuming a single fb across all pipes here */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- intel_crtc = to_intel_crtc(crtc);
+-
+- if (!intel_crtc->active)
+- continue;
+-
+- /*
+- * This should only fail on the first one so we don't need
+- * to cleanup any secondary crtc->fbs
+- */
+- if (intel_pin_and_fence_fb_obj(dev, fb->obj, NULL))
+- goto out_unref_obj;
+-
+- crtc->fb = &fb->base;
+- drm_gem_object_reference(&fb->obj->base);
+- drm_framebuffer_reference(&fb->base);
+- }
++ drm_framebuffer_reference(&ifbdev->ifb.base);
+
+ /* Final pass to check if any active pipes don't have fbs */
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+@@ -527,8 +499,6 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
+ DRM_DEBUG_KMS("using BIOS fb for initial console\n");
+ return true;
+
+-out_unref_obj:
+- drm_framebuffer_unreference(&fb->base);
+ out:
+
+ return false;
+--
+1.8.4.5
+
--- /dev/null
+From d6bfdfdcef0d70cbd3ca5eeec4ed13f2bf85047e Mon Sep 17 00:00:00 2001
+From: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Tue, 13 May 2014 16:07:37 +0100
+Subject: [PATCH 23/45] drm/i915: Use the first mode if there is no preferred
+ mode in the EDID
+
+This matches the algorithm used by earlier kernels when selecting the
+mode for the fbcon. And only if there is no modes at all, do we fall
+back to using the BIOS configuration. Seamless transition is still
+preserved (from the BIOS configuration to ours) so long as the BIOS has
+also chosen what we hope is the native configuration.
+
+Change-Id: If11bc97f1d4c29e2828c152a0c40c7579051046b
+Reported-by: Knut Petersen <Knut_Petersen@t-online.de>
+Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=78655
+Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
+Tested-by: Knut Petersen <Knut_Petersen@t-online.de>
+Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+[Jani: applied Chris' "Please imagine that I wrote this correctly."]
+Signed-off-by: Jani Nikula <jani.nikula@intel.com>
+
+Bug-Tizen: TC-354
+Signed-off-by: Jin Song <jin.kyu.song@linux.intel.com>
+---
+ drivers/gpu/drm/i915/intel_fbdev.c | 23 ++++++++++++++++++++---
+ 1 file changed, 20 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_fbdev.c b/drivers/gpu/drm/i915/intel_fbdev.c
+index ff9a509..d2f6c92 100644
+--- a/drivers/gpu/drm/i915/intel_fbdev.c
++++ b/drivers/gpu/drm/i915/intel_fbdev.c
+@@ -289,6 +289,7 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
+ struct drm_connector *connector;
+ struct drm_encoder *encoder;
+ struct drm_fb_helper_crtc *new_crtc;
++ struct drm_display_mode *current_mode;
+
+ fb_conn = fb_helper->connector_info[i];
+ connector = fb_conn->connector;
+@@ -334,20 +335,36 @@ static bool intel_fb_initial_config(struct drm_fb_helper *fb_helper,
+ height);
+ intel_mode_from_pipe_config(&encoder->crtc->hwmode,
+ &to_intel_crtc(encoder->crtc)->config);
+- modes[i] = &encoder->crtc->hwmode;
++ current_mode = &encoder->crtc->hwmode;
+
+ if (preferred &&
+- !drm_mode_same_size(preferred, modes[i])) {
++ !drm_mode_same_size(preferred, current_mode)) {
+ DRM_DEBUG_KMS("using preferred mode %s "
+ "instead of current mode %s "
+ "on connector %d\n",
+ preferred->name,
+- modes[i]->name,
++ current_mode->name,
+ fb_conn->connector->base.id);
+ modes[i] = preferred;
+ }
+ }
+
++ /* No preferred mode marked by the EDID? Are there any modes? */
++ if (!modes[i] && !list_empty(&connector->modes)) {
++ DRM_DEBUG_KMS("using first mode listed on connector %s\n",
++ drm_get_connector_name(connector));
++ modes[i] = list_first_entry(&connector->modes,
++ struct drm_display_mode,
++ head);
++ }
++
++ /* last resort: use current mode */
++ if (!modes[i]) {
++ DRM_DEBUG_KMS("looking for current mode on connector %s\n",
++ drm_get_connector_name(connector));
++ modes[i] = current_mode;
++ }
++
+ crtcs[i] = new_crtc;
+
+ DRM_DEBUG_KMS("connector %s on crtc %d: %s\n",
+--
+1.8.4.5
+
--- /dev/null
+From eb6e4794690a68fa0be5745feb5245fd6dadb319 Mon Sep 17 00:00:00 2001
+From: Quanxian Wang <quanxian.wang@intel.com>
+Date: Mon, 30 Jun 2014 13:32:58 +0800
+Subject: [PATCH 24/45] [PATCH] drm/i915/vlv: DP_SINK_COUNT is not reliable for
+ branch device.
+
+Background:
+Valleyview platform VTC1010 with a branch device DP2HDMI attached by a sink device
+Giantec HDMI display.
+Firstly changing to virtual console termial, after a while(10-20 minutes), connector
+issues a faked dpms signal which cause kernel to power off the monitor. And kernel will
+delete all allocated connecotr and encoder attached to this connector. This will cause
+monitor could not be restored at all even if you press any key or mouse.
+
+The root cause is that intel_dp_detect_dpcd funtion detects DP_SINK_COUNT from dpcd
+to check how many sink devices are attached. If greater than 0, it will
+be fine to keep connector alive. Otherwise the connector will be changed to be
+disconnected. And then all things related with this connector will be deleted.
+
+With testing, when SINK_COUNT is 0, drm_probe_ddc works and connector is still alive.
+
+So this patch will ignore the condition of SINK_COUNT=0, and continue to check if
+connector is really alive without touch others process.
+
+Change-Id: I0c22dcb431dfbf6003326e6abd67198d88a33587
+Signed-off-by: Quanxian Wang <quanxian.wang@intel.com>
+---
+ drivers/gpu/drm/i915/intel_dp.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
+index 2688f6d..aa188c6 100644
+--- a/drivers/gpu/drm/i915/intel_dp.c
++++ b/drivers/gpu/drm/i915/intel_dp.c
+@@ -2959,8 +2959,8 @@ intel_dp_detect_dpcd(struct intel_dp *intel_dp)
+ if (!intel_dp_aux_native_read_retry(intel_dp, DP_SINK_COUNT,
+ ®, 1))
+ return connector_status_unknown;
+- return DP_GET_SINK_COUNT(reg) ? connector_status_connected
+- : connector_status_disconnected;
++ if (DP_GET_SINK_COUNT(reg))
++ return connector_status_connected;
+ }
+
+ /* If no HPD, poke DDC gently */
+--
+1.8.4.5
+
--- /dev/null
+From efe6e6556efc515d1f44710eea01dc4ce2d394e2 Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Fri, 21 Nov 2014 16:30:34 +0000
+Subject: [PATCH 34/45] Export V4L2 APIs to support early camera.
+
+To mmap camera videos to the spriteC plane(Intel i915), early camera
+will bypass DRM_IOCTL to avoid drm_master conflicting issues, and
+call drm APIs directly. Because drm APIs are for user space
+framworks and applications, it is necessary to export them for early
+camera module.
+For the details of early camera feature, please check the wiki page:
+https://wiki.tizen.org/wiki/Early_Camera
+
+Change-Id: I955ca2c73e9c33c5987ac8f36c7c730545ce1333
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/media/usb/uvc/uvc_v4l2.c | 6 ++++++
+ drivers/media/v4l2-core/v4l2-dev.c | 17 +++++++++++++++++
+ 2 files changed, 23 insertions(+)
+
+diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
+index 3afff92..734cde6 100644
+--- a/drivers/media/usb/uvc/uvc_v4l2.c
++++ b/drivers/media/usb/uvc/uvc_v4l2.c
+@@ -1113,6 +1113,12 @@ static long uvc_v4l2_ioctl(struct file *file,
+ return video_usercopy(file, cmd, arg, uvc_v4l2_do_ioctl);
+ }
+
++long uvc_v4l2_ioctl_kernel(struct file *file, unsigned int cmd, void *arg)
++{
++ return uvc_v4l2_do_ioctl(file, cmd, arg);
++}
++EXPORT_SYMBOL(uvc_v4l2_ioctl_kernel);
++
+ #ifdef CONFIG_COMPAT
+ struct uvc_xu_control_mapping32 {
+ __u32 id;
+diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
+index 0a30dbf..0f11f70 100644
+--- a/drivers/media/v4l2-core/v4l2-dev.c
++++ b/drivers/media/v4l2-core/v4l2-dev.c
+@@ -26,6 +26,7 @@
+ #include <linux/kmod.h>
+ #include <linux/slab.h>
+ #include <asm/uaccess.h>
++#include <linux/completion.h>
+
+ #include <media/v4l2-common.h>
+ #include <media/v4l2-device.h>
+@@ -34,6 +35,8 @@
+ #define VIDEO_NUM_DEVICES 256
+ #define VIDEO_NAME "video4linux"
+
++DECLARE_COMPLETION(video_device_completion);
++
+ /*
+ * sysfs stuff
+ */
+@@ -482,6 +485,18 @@ static int v4l2_release(struct inode *inode, struct file *filp)
+ return ret;
+ }
+
++int v4l2_open_kernel(struct inode *inode, struct file *filp)
++{
++ return v4l2_open(inode, filp);
++}
++EXPORT_SYMBOL(v4l2_open_kernel);
++
++int v4l2_release_kernel(struct inode *inode, struct file *filp)
++{
++ return v4l2_release(inode, filp);
++}
++EXPORT_SYMBOL(v4l2_release_kernel);
++
+ static const struct file_operations v4l2_fops = {
+ .owner = THIS_MODULE,
+ .read = v4l2_read,
+@@ -936,6 +951,8 @@ int __video_register_device(struct video_device *vdev, int type, int nr,
+ /* Part 6: Activate this minor. The char device can now be used. */
+ set_bit(V4L2_FL_REGISTERED, &vdev->flags);
+
++ complete(&video_device_completion);
++
+ return 0;
+
+ cleanup:
+--
+1.8.4.5
+
--- /dev/null
+From fdde84b35eb4320e65381f831af044e98d6f0cdd Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Fri, 21 Nov 2014 16:31:28 +0000
+Subject: [PATCH 35/45] Add a new v4l2 API to enumerate camera devs.
+
+To inform early camera module when camera devs are detected,
+v4l2_enumerate_camera is implemented. For details, please
+check the wiki page:
+https://wiki.tizen.org/wiki/Early_Camera
+
+Change-Id: I3cdf6a54ae179c366e22c7e7a6b51f03c0c10efd
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/media/v4l2-core/v4l2-dev.c | 42 ++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 42 insertions(+)
+
+diff --git a/drivers/media/v4l2-core/v4l2-dev.c b/drivers/media/v4l2-core/v4l2-dev.c
+index 0f11f70..c69ba3f 100644
+--- a/drivers/media/v4l2-core/v4l2-dev.c
++++ b/drivers/media/v4l2-core/v4l2-dev.c
+@@ -434,6 +434,48 @@ static int v4l2_mmap(struct file *filp, struct vm_area_struct *vm)
+ return ret;
+ }
+
++int v4l2_enumerate_camera(unsigned int *camera_minor_lst,
++ int *camera_id_lst,
++ int *cnt)
++{
++ int i = 0;
++ struct video_device *dev = NULL;
++ int count = 0;
++
++ if (NULL == cnt || NULL == camera_minor_lst || NULL == camera_id_lst) {
++ pr_debug("Invalid parameter\n");
++ return -EINVAL;
++ }
++ if (0 >= *cnt) {
++ pr_debug("Invalid parameter\n");
++ return -EINVAL;
++ }
++
++ wait_for_completion_timeout(&video_device_completion,
++ msecs_to_jiffies(5000));
++ for (i = 0; i < VIDEO_NUM_DEVICES; ) {
++ dev = video_device[i];
++ if (NULL != dev) {
++ if (dev->vfl_type == VFL_TYPE_GRABBER) {
++ camera_minor_lst[count] = dev->minor;
++ camera_id_lst[count] = dev->num;
++ count++;
++ if (count == *cnt)
++ break;
++ }
++ }
++ i++;
++ }
++ *cnt = count;
++ if (0 == count) {
++ pr_debug("Find no video dev.\n");
++ return -ENODEV;
++ }
++
++ return 0;
++}
++EXPORT_SYMBOL(v4l2_enumerate_camera);
++
+ /* Override for the open function */
+ static int v4l2_open(struct inode *inode, struct file *filp)
+ {
+--
+1.8.4.5
+
--- /dev/null
+From cdf0b65f55e20b4d58732c0b0773f0eea0d3f5df Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Fri, 21 Nov 2014 16:32:20 +0000
+Subject: [PATCH 36/45] Share drm resources between X and early camera
+
+Early camera module will open drm before X, so when X starts up,
+it should share the mapping address with early camera rather than
+reopen it again. Normally, X will call drm_release when system
+shutdown. At that time, early camera has already quitted and
+released the drm resources. So it does not need to do resource
+check in drm_release.
+
+Change-Id: I692e111d76bf76c0a3faaac15f89e9ef8b261114
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/gpu/drm/drm_fops.c | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
+index 7f2af9a..08ae115 100644
+--- a/drivers/gpu/drm/drm_fops.c
++++ b/drivers/gpu/drm/drm_fops.c
+@@ -85,7 +85,7 @@ int drm_open(struct inode *inode, struct file *filp)
+ int retcode = 0;
+ int need_setup = 0;
+ struct address_space *old_mapping;
+- struct address_space *old_imapping;
++ static int is1st = 1;
+
+ minor = idr_find(&drm_minors_idr, minor_id);
+ if (!minor)
+@@ -100,12 +100,17 @@ int drm_open(struct inode *inode, struct file *filp)
+ if (!dev->open_count++)
+ need_setup = 1;
+ mutex_lock(&dev->struct_mutex);
+- old_imapping = inode->i_mapping;
+ old_mapping = dev->dev_mapping;
+- if (old_mapping == NULL)
++
++ if (is1st) {
+ dev->dev_mapping = &inode->i_data;
+- /* ihold ensures nobody can remove inode with our i_data */
++ is1st = 0;
++ } else {
++ if (old_mapping == NULL)
++ dev->dev_mapping = &inode->i_data;
++ }
+ ihold(container_of(dev->dev_mapping, struct inode, i_data));
++
+ inode->i_mapping = dev->dev_mapping;
+ filp->f_mapping = dev->dev_mapping;
+ mutex_unlock(&dev->struct_mutex);
+@@ -122,8 +127,8 @@ int drm_open(struct inode *inode, struct file *filp)
+
+ err_undo:
+ mutex_lock(&dev->struct_mutex);
+- filp->f_mapping = old_imapping;
+- inode->i_mapping = old_imapping;
++ filp->f_mapping = old_mapping;
++ inode->i_mapping = old_mapping;
+ iput(container_of(dev->dev_mapping, struct inode, i_data));
+ dev->dev_mapping = old_mapping;
+ mutex_unlock(&dev->struct_mutex);
+--
+1.8.4.5
+
--- /dev/null
+From be5bf0bdc00e31e00d181aec33a3950070146626 Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Fri, 21 Nov 2014 16:33:13 +0000
+Subject: [PATCH 37/45] Export drm APIs to support early camera.
+
+To mmap camera videos to the spriteC plane(Intel i915), early camera
+will bypass DRM_IOCTL to avoid drm_master conflicting issues, and
+call drm APIs directly. Because drm APIs are for user space
+framworks and applications, it is necessary to export them for
+early camera module.
+For the details of early camera, please check the wiki page:
+https://wiki.tizen.org/wiki/Early_Camera
+
+Change-Id: I26773dd5aa50f68011c92350f8af3ba88aade426
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/gpu/drm/drm_crtc.c | 10 ++++++++++
+ drivers/gpu/drm/drm_prime.c | 1 +
+ drivers/gpu/drm/i915/intel_display.c | 1 +
+ 3 files changed, 12 insertions(+)
+
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index 3b7d32d..1043407 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
+@@ -1606,6 +1606,7 @@ out:
+ drm_modeset_unlock_all(dev);
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_getcrtc);
+
+ static bool drm_mode_expose_to_userspace(const struct drm_display_mode *mode,
+ const struct drm_file *file_priv)
+@@ -1764,6 +1765,7 @@ out:
+
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_getconnector);
+
+ int drm_mode_getencoder(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+@@ -1844,6 +1846,7 @@ out:
+ drm_modeset_unlock_all(dev);
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_getplane_res);
+
+ /**
+ * drm_mode_getplane - get plane info
+@@ -1909,6 +1912,7 @@ out:
+ drm_modeset_unlock_all(dev);
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_getplane);
+
+ /**
+ * drm_mode_setplane - set up or tear down an plane
+@@ -2043,6 +2047,7 @@ out:
+
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_setplane);
+
+ /**
+ * drm_mode_set_config_internal - helper to call ->set_config
+@@ -2285,6 +2290,7 @@ out:
+ drm_modeset_unlock_all(dev);
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_setcrtc);
+
+ static int drm_mode_cursor_common(struct drm_device *dev,
+ struct drm_mode_cursor2 *req,
+@@ -2627,6 +2633,7 @@ int drm_mode_addfb2(struct drm_device *dev,
+
+ return ret;
+ }
++EXPORT_SYMBOL(drm_mode_addfb2);
+
+ /**
+ * drm_mode_rmfb - remove an FB from the configuration
+@@ -2681,6 +2688,7 @@ fail_lookup:
+
+ return -ENOENT;
+ }
++EXPORT_SYMBOL(drm_mode_rmfb);
+
+ /**
+ * drm_mode_getfb - get FB info
+@@ -2836,6 +2844,7 @@ void drm_fb_release(struct drm_file *priv)
+ }
+ mutex_unlock(&priv->fbs_lock);
+ }
++EXPORT_SYMBOL(drm_fb_release);
+
+ struct drm_property *drm_property_create(struct drm_device *dev, int flags,
+ const char *name, int num_values)
+@@ -3766,6 +3775,7 @@ int drm_mode_create_dumb_ioctl(struct drm_device *dev,
+ return -ENOSYS;
+ return dev->driver->dumb_create(file_priv, dev, args);
+ }
++EXPORT_SYMBOL(drm_mode_create_dumb_ioctl);
+
+ int drm_mode_mmap_dumb_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv)
+diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
+index 56805c3..cf1a4cc 100644
+--- a/drivers/gpu/drm/drm_prime.c
++++ b/drivers/gpu/drm/drm_prime.c
+@@ -582,6 +582,7 @@ int drm_prime_handle_to_fd_ioctl(struct drm_device *dev, void *data,
+ return dev->driver->prime_handle_to_fd(dev, file_priv,
+ args->handle, flags, &args->fd);
+ }
++EXPORT_SYMBOL(drm_prime_handle_to_fd_ioctl);
+
+ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv)
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index a538bb3..98700c3 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -10491,6 +10491,7 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
+
+ return 0;
+ }
++EXPORT_SYMBOL(intel_get_pipe_from_crtc_id);
+
+ static int intel_encoder_clones(struct intel_encoder *encoder)
+ {
+--
+1.8.4.5
+
--- /dev/null
+From f07c7831a89a2ea4a288b493437632c2e4be7f0c Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Fri, 21 Nov 2014 16:33:49 +0000
+Subject: [PATCH 38/45] Create new DRM APIs for early camera.
+
+New drm APIs(drm_open_kernel, drm_release_kernel,
+drm_open_helper_kernel, drm_mode_getresources_kernel)
+are created for early camera.
+For the original drm APIs drm_open, drm_release,
+drm_open_helper and drm_mode_getresources are used by X. And early
+camera should not open/release the drm resources exclusively. To
+avoid the conflict issues with X and bypass drm_master, it is
+necessary to create new APIs. For more details about early camera
+feature, please visit the wiki page:
+https://wiki.tizen.org/wiki/Early_Camera
+
+Change-Id: I0ec645054e425c303dfb710f72ca9f873b54e051
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/gpu/drm/drm_crtc.c | 77 +++++++++++++++
+ drivers/gpu/drm/drm_fops.c | 240 +++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 317 insertions(+)
+
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index 1043407..9fa6da7 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
+@@ -1365,6 +1365,83 @@ static int drm_crtc_convert_umode(struct drm_display_mode *out,
+ return 0;
+ }
+
++int drm_mode_getresources_kernel(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv)
++{
++ struct drm_mode_card_res *card_res = data;
++ struct list_head *lh;
++ struct drm_framebuffer *fb;
++ struct drm_crtc *crtc;
++ int ret = 0;
++ int crtc_count = 0;
++ int fb_count = 0;
++ int copied = 0;
++ uint32_t *fb_id;
++ uint32_t *crtc_id;
++
++ if (!drm_core_check_feature(dev, DRIVER_MODESET))
++ return -EINVAL;
++
++ mutex_lock(&file_priv->fbs_lock);
++ /*
++ * For the non-control nodes we need to limit the list of resources
++ * by IDs in the group list for this node
++ */
++ list_for_each(lh, &file_priv->fbs)
++ fb_count++;
++
++ /* FBs */
++ if (card_res->count_fbs >= fb_count) {
++ copied = 0;
++ fb_id = (uint32_t __user *)(unsigned long)card_res->fb_id_ptr;
++ list_for_each_entry(fb, &file_priv->fbs, filp_head) {
++ if (put_user(fb->base.id, fb_id + copied)) {
++ mutex_unlock(&file_priv->fbs_lock);
++ return -EFAULT;
++ }
++ copied++;
++ }
++ }
++ card_res->count_fbs = fb_count;
++ mutex_unlock(&file_priv->fbs_lock);
++
++ drm_modeset_lock_all(dev);
++
++ list_for_each(lh, &dev->mode_config.crtc_list)
++ crtc_count++;
++
++ card_res->max_height = dev->mode_config.max_height;
++ card_res->min_height = dev->mode_config.min_height;
++ card_res->max_width = dev->mode_config.max_width;
++ card_res->min_width = dev->mode_config.min_width;
++
++ /* CRTCs */
++ if (card_res->count_crtcs >= crtc_count) {
++ copied = 0;
++ crtc_id = (uint32_t __user *)(ulong)card_res->crtc_id_ptr;
++
++ list_for_each_entry(crtc,
++ &dev->mode_config.crtc_list,
++ head) {
++ DRM_DEBUG_KMS("[CRTC:%d]\n", crtc->base.id);
++ if (put_user(crtc->base.id, crtc_id + copied)) {
++ ret = -EFAULT;
++ goto out;
++ }
++ copied++;
++ }
++ }
++ card_res->count_crtcs = crtc_count;
++
++ DRM_DEBUG_KMS("CRTC[%d]", card_res->count_crtcs);
++
++out:
++ drm_modeset_unlock_all(dev);
++ return ret;
++}
++EXPORT_SYMBOL(drm_mode_getresources_kernel);
++
+ /**
+ * drm_mode_getresources - get graphics configuration
+ * @dev: drm device for the ioctl
+diff --git a/drivers/gpu/drm/drm_fops.c b/drivers/gpu/drm/drm_fops.c
+index 08ae115..5047c9e 100644
+--- a/drivers/gpu/drm/drm_fops.c
++++ b/drivers/gpu/drm/drm_fops.c
+@@ -46,6 +46,10 @@ EXPORT_SYMBOL(drm_global_mutex);
+ static int drm_open_helper(struct inode *inode, struct file *filp,
+ struct drm_device * dev);
+
++static int drm_open_helper_kernel(struct inode *inode,
++ struct file *filp,
++ struct drm_device *dev);
++
+ static int drm_setup(struct drm_device * dev)
+ {
+ int ret;
+@@ -137,6 +141,64 @@ err_undo:
+ }
+ EXPORT_SYMBOL(drm_open);
+
++int drm_open_kernel(struct inode *inode,
++ struct file *filp,
++ struct drm_device **pdev)
++{
++ int minor_id = iminor(inode);
++ struct drm_minor *minor;
++ int retcode = 0;
++ int need_setup = 0;
++
++ struct address_space *old_mapping;
++ struct drm_device *dev = NULL;
++
++ minor = idr_find(&drm_minors_idr, minor_id);
++ if (!minor)
++ return -ENODEV;
++
++ dev = minor->dev;
++ if (!dev)
++ return -ENODEV;
++
++ if (!dev->open_count++)
++ need_setup = 1;
++
++ mutex_lock(&dev->struct_mutex);
++ old_mapping = dev->dev_mapping;
++
++ if (old_mapping == NULL)
++ dev->dev_mapping = &inode->i_data;
++
++ inode->i_mapping = dev->dev_mapping;
++
++ filp->f_mapping = dev->dev_mapping;
++ mutex_unlock(&dev->struct_mutex);
++
++ /* By pass drm_master when openning drm inside kernel. */
++ retcode = drm_open_helper_kernel(inode, filp, dev);
++ if (retcode)
++ goto err_undo;
++ if (need_setup) {
++ retcode = drm_setup(dev);
++ if (retcode)
++ goto err_undo;
++ }
++
++ *pdev = dev;
++ return 0;
++
++err_undo:
++ mutex_lock(&dev->struct_mutex);
++ filp->f_mapping = old_mapping;
++ inode->i_mapping = old_mapping;
++ dev->dev_mapping = old_mapping;
++ mutex_unlock(&dev->struct_mutex);
++ dev->open_count--;
++ return retcode;
++}
++EXPORT_SYMBOL(drm_open_kernel);
++
+ /**
+ * File \c open operation.
+ *
+@@ -348,6 +410,104 @@ out_put_pid:
+ return ret;
+ }
+
++static int drm_open_helper_kernel(struct inode *inode,
++ struct file *filp,
++ struct drm_device *dev)
++{
++ int minor_id = iminor(inode);
++ struct drm_file *priv;
++ int ret;
++
++ /* No exclusive opens */
++ if (filp->f_flags & O_EXCL)
++ return -EBUSY;
++ if (!drm_cpu_valid())
++ return -EINVAL;
++ if (dev->switch_power_state != DRM_SWITCH_POWER_ON &&
++ dev->switch_power_state != DRM_SWITCH_POWER_DYNAMIC_OFF)
++ return -EINVAL;
++
++ DRM_DEBUG("pid = %d, minor = %d\n", task_pid_nr(current), minor_id);
++
++ priv = kzalloc(sizeof(*priv), GFP_KERNEL);
++ if (!priv)
++ return -ENOMEM;
++
++ filp->private_data = priv;
++ priv->filp = filp;
++ priv->uid = current_euid();
++ priv->pid = get_pid(task_pid(current));
++ priv->minor = idr_find(&drm_minors_idr, minor_id);
++ if (!priv->minor) {
++ ret = -ENODEV;
++ goto out_put_pid;
++ }
++
++ priv->always_authenticated = capable(CAP_SYS_ADMIN);
++ priv->authenticated = priv->always_authenticated;
++ priv->lock_count = 0;
++
++ INIT_LIST_HEAD(&priv->lhead);
++ INIT_LIST_HEAD(&priv->fbs);
++ mutex_init(&priv->fbs_lock);
++ INIT_LIST_HEAD(&priv->event_list);
++ init_waitqueue_head(&priv->event_wait);
++ /* set aside 4k for event buffer */
++ priv->event_space = 4096;
++
++ if (dev->driver->driver_features & DRIVER_GEM)
++ drm_gem_open(dev, priv);
++
++ if (drm_core_check_feature(dev, DRIVER_PRIME))
++ drm_prime_init_file_private(&priv->prime);
++
++ if (dev->driver->open) {
++ ret = dev->driver->open(dev, priv);
++ if (ret < 0)
++ goto out_prime_destroy;
++ }
++
++ /*
++ * Do not hold drm_master because it will cause conflicts
++ * with xcompositor initialization.
++ */
++ mutex_lock(&dev->struct_mutex);
++ list_add(&priv->lhead, &dev->filelist);
++ mutex_unlock(&dev->struct_mutex);
++
++#ifdef __alpha__
++ /* Default the hose. */
++ if (!dev->hose) {
++ struct pci_dev *pci_dev;
++
++ pci_dev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, NULL);
++ if (pci_dev) {
++ dev->hose = pci_dev->sysdata;
++ pci_dev_put(pci_dev);
++ }
++ if (!dev->hose) {
++ struct pci_bus *b = pci_bus_b(pci_root_buses.next);
++
++ if (b)
++ dev->hose = b->sysdata;
++ }
++ }
++#endif
++
++ return 0;
++
++out_prime_destroy:
++ if (drm_core_check_feature(dev, DRIVER_PRIME))
++ drm_prime_destroy_file_private(&priv->prime);
++ if (dev->driver->driver_features & DRIVER_GEM)
++ drm_gem_release(dev, priv);
++out_put_pid:
++ put_pid(priv->pid);
++ kfree(priv);
++ filp->private_data = NULL;
++ return ret;
++}
++
+ static void drm_master_release(struct drm_device *dev, struct file *filp)
+ {
+ struct drm_file *file_priv = filp->private_data;
+@@ -589,6 +749,86 @@ int drm_release(struct inode *inode, struct file *filp)
+ }
+ EXPORT_SYMBOL(drm_release);
+
++int drm_release_kernel(struct inode *inode, struct file *filp)
++{
++ struct drm_file *file_priv = filp->private_data;
++ struct drm_device *dev = file_priv->minor->dev;
++ int retcode = 0;
++
++ mutex_lock(&drm_global_mutex);
++
++ DRM_DEBUG("open_count = %d\n", dev->open_count);
++
++ if (dev->driver->preclose)
++ dev->driver->preclose(dev, file_priv);
++
++ /*
++ * Release any auth tokens that might point to this file_priv,
++ * (do that under the drm_global_mutex).
++ */
++ if (file_priv->magic)
++ (void)drm_remove_magic(file_priv->master, file_priv->magic);
++
++ if (drm_core_check_feature(dev, DRIVER_HAVE_DMA))
++ drm_core_reclaim_buffers(dev, file_priv);
++
++ drm_events_release(file_priv);
++
++ if (dev->driver->driver_features & DRIVER_MODESET)
++ drm_fb_release(file_priv);
++
++ if (dev->driver->driver_features & DRIVER_GEM)
++ drm_gem_release(dev, file_priv);
++
++ mutex_lock(&dev->ctxlist_mutex);
++ if (!list_empty(&dev->ctxlist)) {
++ struct drm_ctx_list *pos, *n;
++
++ list_for_each_entry_safe(pos, n, &dev->ctxlist, head) {
++ if (pos->tag == file_priv &&
++ pos->handle != DRM_KERNEL_CONTEXT) {
++ if (dev->driver->context_dtor)
++ dev->driver->context_dtor(dev,
++ pos->handle);
++
++ drm_ctxbitmap_free(dev, pos->handle);
++
++ list_del(&pos->head);
++ kfree(pos);
++ }
++ }
++ }
++ mutex_unlock(&dev->ctxlist_mutex);
++
++ mutex_lock(&dev->struct_mutex);
++
++ BUG_ON(dev->dev_mapping == NULL);
++
++ /* drop the reference held my the file priv */
++ list_del(&file_priv->lhead);
++ mutex_unlock(&dev->struct_mutex);
++
++ if (dev->driver->postclose)
++ dev->driver->postclose(dev, file_priv);
++
++ if (drm_core_check_feature(dev, DRIVER_PRIME))
++ drm_prime_destroy_file_private(&file_priv->prime);
++
++ put_pid(file_priv->pid);
++ kfree(file_priv);
++
++ /* End inline drm_release. */
++ if (!--dev->open_count) {
++ retcode = drm_lastclose(dev);
++ if (drm_device_is_unplugged(dev))
++ drm_put_dev(dev);
++ }
++ mutex_unlock(&drm_global_mutex);
++
++ return retcode;
++}
++EXPORT_SYMBOL(drm_release_kernel);
++
+ static bool
+ drm_dequeue_event(struct drm_file *file_priv,
+ size_t total, size_t max, struct drm_pending_event **out)
+--
+1.8.4.5
+
--- /dev/null
+From 1deb227114307676db9a67849e3dae9f2680774d Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Fri, 21 Nov 2014 16:34:39 +0000
+Subject: [PATCH 39/45] Implements v2g bridge module for early camera.
+
+V2G bridge module detects and opens camera devices through V4L2
+APIs, and mmaps the camera video on spriteC plane of Intel i915
+driver. Currently, this module supports UVC cameras.
+For the details, please check wiki page:
+https://wiki.tizen.org/wiki/Early_Camera
+
+Change-Id: I9e3a8a7f67f07182076c225ddfe4509130041319
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/media/pci/Makefile | 3 +-
+ drivers/media/pci/v2g_bridge/Kconfig | 20 +
+ drivers/media/pci/v2g_bridge/Makefile | 7 +
+ drivers/media/pci/v2g_bridge/v2g_bridge.c | 963 ++++++++++++++++++++++++++++++
+ drivers/media/pci/v2g_bridge/v2g_bridge.h | 173 ++++++
+ 5 files changed, 1165 insertions(+), 1 deletion(-)
+ create mode 100644 drivers/media/pci/v2g_bridge/Kconfig
+ create mode 100644 drivers/media/pci/v2g_bridge/Makefile
+ create mode 100644 drivers/media/pci/v2g_bridge/v2g_bridge.c
+ create mode 100644 drivers/media/pci/v2g_bridge/v2g_bridge.h
+
+diff --git a/drivers/media/pci/Makefile b/drivers/media/pci/Makefile
+index 35cc578..bdc8e15 100644
+--- a/drivers/media/pci/Makefile
++++ b/drivers/media/pci/Makefile
+@@ -11,7 +11,8 @@ obj-y += ttpci/ \
+ ngene/ \
+ ddbridge/ \
+ b2c2/ \
+- saa7146/
++ saa7146/ \
++ v2g_bridge/
+
+ obj-$(CONFIG_VIDEO_IVTV) += ivtv/
+ obj-$(CONFIG_VIDEO_ZORAN) += zoran/
+diff --git a/drivers/media/pci/v2g_bridge/Kconfig b/drivers/media/pci/v2g_bridge/Kconfig
+new file mode 100644
+index 0000000..a44d0d2
+--- /dev/null
++++ b/drivers/media/pci/v2g_bridge/Kconfig
+@@ -0,0 +1,20 @@
++config V2G_BRIDGE
++ tristate "Intel V2G_BRIDGE Kernel Module Driver"
++ depends on DRM && PCI && MEDIA_USB_SUPPORT
++ default y
++ ---help---
++ Choose this option if enable the fast camera feature.
++ v2g_bridge.enable and v2g_bridge.debug options should
++ be enabled in kernel command line to enable/disable the
++ feature.
++ To compile this driver as a module, choose M here: the
++ module will be called v2g_bridge.
++
++config V2G_BRIDGE_DEBUG
++ bool "Debug"
++ depends on V2G_BRIDGE
++ ---help---
++ Say Y here if you want the v2g bridge to produce a bunch of debug
++ messages to the system log. Select this if you are having a
++ problem with early camera and want to see more of what is going on.
++ Used by developers.
+diff --git a/drivers/media/pci/v2g_bridge/Makefile b/drivers/media/pci/v2g_bridge/Makefile
+new file mode 100644
+index 0000000..41313a5
+--- /dev/null
++++ b/drivers/media/pci/v2g_bridge/Makefile
+@@ -0,0 +1,7 @@
++V4L2_MOD_DIR = drivers/media/video
++V2G_BRIDGE_MOD_DIR = drivers/media/pci/v2g_bridge
++
++ccflags-y := -I$(V4L2_MOD_DIR)
++ccflags-$(CONFIG_V2G_BRIDGE_DEBUG) += -DDEBUG
++
++obj-y := v2g_bridge.o
+diff --git a/drivers/media/pci/v2g_bridge/v2g_bridge.c b/drivers/media/pci/v2g_bridge/v2g_bridge.c
+new file mode 100644
+index 0000000..339e015
+--- /dev/null
++++ b/drivers/media/pci/v2g_bridge/v2g_bridge.c
+@@ -0,0 +1,963 @@
++/*
++ * Copyright (C) 2014 Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License (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.
++ */
++
++#include <linux/init.h>
++#include <linux/moduleparam.h>
++#include <linux/miscdevice.h>
++#include <linux/fs.h>
++#include <linux/slab.h>
++#include <linux/kref.h>
++#include <linux/mutex.h>
++#include <linux/kernel.h>
++#include <linux/ioctl.h>
++#include <linux/types.h>
++#include <linux/uaccess.h>
++#include <linux/mm.h>
++#include <linux/ioport.h>
++#include <linux/io.h>
++#include <linux/videodev2.h>
++#include <linux/kthread.h>
++#include <media/v4l2-dev.h>
++#include <media/videobuf-core.h>
++#include <linux/export.h>
++#include <linux/platform_device.h>
++#include <linux/module.h>
++#include <linux/dma-mapping.h>
++#include <linux/scatterlist.h>
++#include <linux/dma-buf.h>
++#include <drm/drmP.h>
++#include <linux/wait.h>
++#include <uapi/drm/i915_drm.h>
++
++#include "v2g_bridge.h"
++
++#define INTEL_V2G_VER "0.1.1.0"
++
++#undef ATOMISP
++
++#ifdef ATOMISP
++#include <linux/atomisp.h>
++#endif
++
++#define V2G_DEBUG(...) \
++do { \
++ if (v2g_debug == 1) { \
++ pr_debug("[V2G_DEBUG] %s ", __func__);\
++ printk(__VA_ARGS__);\
++ printk("\n"); \
++ } \
++} while (0)
++
++#define V2G_ERROR(...) \
++do { \
++ pr_err("%s ERROR: ", __func__);\
++ printk(__VA_ARGS__); \
++ printk("\n"); \
++} while (0)
++
++#define V2G_TRACE_ENTER() V2G_DEBUG("ENTER")
++#define V2G_TRACE_EXIT() V2G_DEBUG("EXIT")
++
++static struct v2g_context *p_v2gctx;
++
++static void v2g_cleanup(struct v2g_context *ctx);
++
++/* Boot up parameters. */
++static int screen_x;
++static int screen_y;
++static int screen_width;
++static int screen_height;
++
++static int v2g_enable;
++static int v2g_debug;
++static ulong expire_seconds = 15;
++
++MODULE_PARM_DESC(screen_x, "Video screen start point. (e.g. \"0\")");
++MODULE_PARM_DESC(screen_y, "Video screen start point. (e.g. \"0\")");
++MODULE_PARM_DESC(screen_width, "Video screen width. (e.g. \"1366\")");
++MODULE_PARM_DESC(screen_height, "Video screen height. (e.g. \"768\")");
++
++module_param(v2g_enable, int, 0600);
++module_param(v2g_debug, int, 0600);
++module_param(screen_x, int, 0600);
++module_param(screen_y, int, 0600);
++module_param(screen_width, int, 0600);
++module_param(screen_height, int, 0600);
++
++static long v2g_ioctl(struct file *fp, unsigned int cmd, ulong arg)
++{
++ return 0;
++}
++
++static int v2g_open(struct inode *inode, struct file *fp)
++{
++ return 0;
++}
++
++static int v2g_release(struct inode *inode, struct file *fp)
++{
++ return 0;
++}
++
++static const struct file_operations v2g_fops = {
++ .owner = THIS_MODULE,
++ .unlocked_ioctl = v2g_ioctl,
++ .open = v2g_open,
++ .release = v2g_release,
++};
++
++static struct miscdevice v2g_miscdev = {
++ .minor = MISC_DYNAMIC_MINOR, /* dynamic allocation */
++ .name = "v2gbridge", /* /dev/v2gbridge */
++ .fops = &v2g_fops,
++};
++
++static int v2g_enumerate_camera(struct v2g_context *ctx, uint dev_id)
++{
++ struct v2g_v4l2 *ptr;
++ int count = CAMERA_MAX_COUNT;
++ uint dev_minors[CAMERA_MAX_COUNT];
++ int ids[CAMERA_MAX_COUNT] = {0};
++ int i = 0;
++ int ret = -1;
++
++ if (0 == v4l2_enumerate_camera(dev_minors, ids, &count)) {
++ V2G_DEBUG("Detect %d V4L2 video devices.\n", count);
++ } else {
++ V2G_ERROR("Failed to find cameras.");
++ return ret;
++ }
++
++ ret = 0;
++ for (i = 0; i < count; i++) {
++ if (dev_id == ids[i]) {
++ ptr = &ctx->v4l2;
++ ptr->v4l2_inode.i_rdev = (dev_t)dev_minors[i];
++ ptr->v4l2_dentry.d_inode = &ptr->v4l2_inode;
++ ptr->v4l2_file.f_path.dentry = &ptr->v4l2_dentry;
++ ptr->v4l2_file.f_inode = &ptr->v4l2_inode;
++ ret = 1;
++ break;
++ }
++ }
++
++ return ret;
++}
++
++static void v2g_timer_callback(ulong data)
++{
++ V2G_DEBUG("Timer triggered.");
++ p_v2gctx->state = STATE_EXIT;
++ wake_up_interruptible(&p_v2gctx->wait_queue);
++}
++
++static long v2g_v4l2_ioctl(struct file *fp, uint cmd, ulong arg)
++{
++#ifdef ATOMISP
++ return atomisp_v4l2_do_ioctl(fp, cmd, arg);
++#else
++ return uvc_v4l2_ioctl_kernel(fp, cmd, arg);
++#endif
++}
++
++/*
++ * Open v4l2 device with device id
++ * @dev_id: when opening /dev/video0 in user mode, dev_id is 0
++ */
++static int v2g_v4l2_open(struct v2g_context *ctx, uint dev_id)
++{
++ if (0 == v4l2_open_kernel(NULL, &ctx->v4l2.v4l2_file)) {
++ V2G_DEBUG("Open Camera successfully");
++ } else {
++ V2G_ERROR("Fail to open camera!");
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++/*
++ * Initialize v4l2 device such as format settins
++ */
++static int v2g_v4l2_init(struct v2g_context *ctx)
++{
++ struct v4l2_format fmt;
++#ifdef ATOMISP
++ struct v4l2_streamparm param;
++#endif
++ int err;
++
++ memset(&fmt, 0, sizeof(fmt));
++ fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ err = v2g_v4l2_ioctl(&ctx->v4l2.v4l2_file, VIDIOC_G_FMT, (ulong)&fmt);
++ if (err) {
++ V2G_ERROR("V4L2 failed to get format!\n");
++ return err;
++ }
++ V2G_DEBUG("V4L2 format: WxH(%d x %d); color format: 0x%x\n",
++ fmt.fmt.pix.width,
++ fmt.fmt.pix.height,
++ fmt.fmt.pix.pixelformat);
++#ifdef ATOMISP
++ /* If ATOMISP enabled, the fmt should be V4L2_PIX_FMT_RGB565 */
++ if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_RGB565) {
++ V2G_ERROR("In Atomisp, the format must be RGB565.\n");
++ err = -1;
++ return err;
++ }
++#endif
++ err = v2g_v4l2_ioctl(&ctx->v4l2.v4l2_file, VIDIOC_S_FMT, (ulong)&fmt);
++ if (err) {
++ V2G_ERROR("V4L2 failed to set format!\n");
++ return err;
++ }
++
++ memcpy(&ctx->v4l2.fmt, &fmt, sizeof(fmt));
++
++#ifdef ATOMISP
++ param.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ param.parm.capture.capturemode = CI_MODE_STILL_CAPTURE;
++ v2g_v4l2_ioctl(&ctx->v4l2.v4l2_file, VIDIOC_S_PARM, ¶m);
++
++#endif
++
++ return 0;
++}
++
++static int v2g_drm_open(struct v2g_context *ctx, uint dev_id)
++{
++ int err = 0;
++ struct inode *inode = &ctx->drm.inode;
++ struct dentry *dentry = &ctx->drm.dentry;
++ struct file *file = &ctx->drm.file;
++
++ V2G_DEBUG("dev_id = %d\n", dev_id);
++
++ inode->i_rdev = (dev_t)dev_id;
++
++ inode->i_data.host = NULL;
++ dentry->d_inode = inode;
++ file->f_path.dentry = dentry;
++ file->f_inode = inode;
++
++ /* No exclusive opens, without setting it to O_RDWR */
++ file->f_flags = O_RDWR;
++
++ err = drm_open_kernel(inode, file, &ctx->drm.drm_dev);
++ if (err) {
++ V2G_ERROR("Fail to open DRM!\n");
++ return -ENODEV;
++ }
++
++ return 0;
++}
++
++/*
++ * Get first valid crtc
++ */
++static int v2g_drm_get_crtc(struct v2g_context *ctx,
++ struct drm_mode_crtc *crtc)
++{
++ struct drm_mode_card_res res;
++ void *ptr;
++ uint32_t *crtc_id_ptr;
++ struct drm_file *drmfile = ctx->drm.file.private_data;
++ struct drm_device *drm_dev = ctx->drm.drm_dev;
++ int ret;
++
++ memset(&res, 0, sizeof(res));
++ ret = drm_mode_getresources_kernel(drm_dev, (void *)&res, drmfile);
++ if (ret < 0) {
++ V2G_ERROR("DRM fail to get resources!\n");
++ return ret;
++ }
++
++ if (res.count_crtcs > 0) {
++ ptr = kmalloc_array(res.count_crtcs,
++ sizeof(uint32_t),
++ GFP_KERNEL);
++ res.crtc_id_ptr = VOID2U64(ptr);
++
++ if (res.crtc_id_ptr == 0) {
++ V2G_ERROR("Memory is not enough!\n");
++ return -ENOMEM;
++ }
++
++ res.count_encoders = 0;
++ res.count_fbs = 0;
++ res.count_connectors = 0;
++ } else {
++ V2G_DEBUG("no crtcs! no need to initialize v2g module!\n");
++ return -ENODEV;
++ }
++
++ /*
++ * Need to call DRM_IOCTL_MODE_GETRESOURCES twice, 1st to get
++ * crtc number, 2nd to get crtc data.
++ */
++ ret = drm_mode_getresources_kernel(drm_dev, (void *)&res, drmfile);
++ if (ret) {
++ V2G_ERROR("DRM fail to get resources!\n");
++ goto free_crtc;
++ }
++
++ crtc_id_ptr = (uint32_t *)(ulong)res.crtc_id_ptr;
++
++ /* Choose 1st valid crtc */
++ crtc->crtc_id = crtc_id_ptr[0];
++ ret = drm_mode_getcrtc(drm_dev, (void *)crtc, drmfile);
++
++ if (ret) {
++ V2G_ERROR("DRM fail to get crtc!\n");
++ goto free_crtc;
++ }
++
++free_crtc:
++ if (res.crtc_id_ptr != 0)
++ kfree((void *)(ulong)res.crtc_id_ptr);
++
++ return ret;
++}
++
++/*
++ * Get first valid plane of chosen crtc
++ */
++static int v2g_drm_get_plane(struct v2g_context *ctx,
++ uint crtc_id,
++ struct drm_mode_get_plane *plane)
++{
++ int ret, i;
++ struct drm_mode_get_plane_res plane_res;
++ struct drm_i915_get_pipe_from_crtc_id pipe;
++ struct drm_file *drmfile = ctx->drm.file.private_data;
++ uint32_t *plane_id_ptr;
++ void *ptr;
++
++ memset(&pipe, 0, sizeof(pipe));
++ pipe.pipe = 0;
++ pipe.crtc_id = crtc_id;
++ ret = intel_get_pipe_from_crtc_id(ctx->drm.drm_dev,
++ (void *)&pipe,
++ drmfile);
++ if (ret) {
++ V2G_ERROR("DRM fail to get pipe.\n");
++ return ret;
++ }
++ V2G_DEBUG("pipe id = %d", pipe.pipe);
++
++ memset(&plane_res, 0, sizeof(plane_res));
++ ret = drm_mode_getplane_res(ctx->drm.drm_dev,
++ (void *)&plane_res,
++ drmfile);
++
++ if (ret) {
++ V2G_ERROR("DRM fail to get plane resources!\n");
++ return ret;
++ }
++
++ if (plane_res.count_planes <= 0) {
++ V2G_DEBUG("No planes! no need to initialize v2g module!\n");
++ return -ENODEV;
++ }
++ ptr = kmalloc_array(plane_res.count_planes,
++ sizeof(uint32_t),
++ GFP_KERNEL);
++ plane_res.plane_id_ptr = VOID2U64(ptr);
++ if (plane_res.plane_id_ptr == 0)
++ V2G_ERROR("Memory is not enough!\n");
++ else
++ plane_id_ptr = (uint32_t *)(ulong)plane_res.plane_id_ptr;
++
++ V2G_DEBUG("count_planes=%d", plane_res.count_planes);
++
++ /*
++ * Also need to call DRM_IOCTL_MODE_GETPLANERESOURCES twice
++ * 1st to get planes count, 2nd to get 1 plane data.
++ */
++ ret = drm_mode_getplane_res(ctx->drm.drm_dev,
++ (void *)&plane_res,
++ drmfile);
++ if (ret) {
++ V2G_ERROR("DRM fail to get plane resources!\n");
++ goto free_planes;
++ }
++
++ ptr = kmalloc_array(32, sizeof(uint32_t), GFP_KERNEL);
++ plane->format_type_ptr = VOID2U64(ptr);
++ if (plane->format_type_ptr == 0) {
++ V2G_ERROR("Failed to alloc format_type_ptr for plane!\n");
++ return -ENODEV;
++ }
++
++ for (i = 0; i < plane_res.count_planes; i++) {
++ plane->plane_id = plane_id_ptr[i];
++ ret = drm_mode_getplane(ctx->drm.drm_dev,
++ (void *)plane,
++ drmfile);
++ if (ret) {
++ V2G_ERROR("DRM fail to get plane!\n");
++ goto free_planes;
++ }
++ /* Get 1st valid plane of current crtc */
++ if (plane->possible_crtcs & (1 << pipe.pipe)) {
++ V2G_DEBUG("Get plane id = %d\n", plane->plane_id);
++ break;
++ }
++ }
++
++ /* No proper plane for current crtc */
++ if (i == plane_res.count_planes)
++ ret = -ENODEV;
++
++free_planes:
++ kfree(plane_id_ptr);
++
++ return ret;
++}
++
++/*
++ * Get 1st valid crtc and 1st valid plane of the selected crtc.
++ */
++static int v2g_drm_set_mode(struct v2g_context *ctx)
++{
++ struct drm_mode_crtc crtc;
++ struct drm_mode_get_plane plane;
++ int err;
++
++ /* DRM get crtc */
++ err = v2g_drm_get_crtc(ctx, &crtc);
++ if (err)
++ return err;
++
++ ctx->drm.crtc_id = crtc.crtc_id;
++ ctx->drm.crtc_active_width = crtc.mode.hdisplay;
++ ctx->drm.crtc_active_height = crtc.mode.vdisplay;
++
++ ctx->drm.fb_id = crtc.fb_id;
++ V2G_DEBUG("fb_id=%d", ctx->drm.fb_id);
++
++ ctx->drm.crtc = crtc;
++ /* DRM get plane */
++ memset(&plane, 0, sizeof(plane));
++ V2G_DEBUG("crtc_id=%x", ctx->drm.crtc_id);
++ err = v2g_drm_get_plane(ctx, ctx->drm.crtc_id, &plane);
++ if (err)
++ return err;
++
++ ctx->drm.plane_id = plane.plane_id;
++
++ return 0;
++}
++
++/*
++ * Import v4l2 exported buf to drm according to the capture format.
++ */
++static int v2g_drm_import_buf(struct drm_file *drm_file,
++ struct drm_device *dev,
++ struct buffer *buf,
++ struct v4l2_format *fmt)
++{
++ struct drm_prime_handle prime;
++ int ret;
++
++ uint pitch = fmt->fmt.pix.bytesperline;
++ uint offsets[4] = { 0 };
++ uint pitches[4] = { pitch };
++ uint bo_handles[4] = { 0 };
++
++ struct drm_mode_fb_cmd2 f;
++
++ /* DRM creates dumb */
++ struct drm_mode_create_dumb drm_dumb;
++
++ drm_dumb.width = fmt->fmt.pix.width;
++ drm_dumb.height = fmt->fmt.pix.height;
++ drm_dumb.bpp = 16;
++ drm_dumb.size = fmt->fmt.pix.sizeimage;
++ drm_dumb.pitch = fmt->fmt.pix.bytesperline;
++
++ ret = drm_mode_create_dumb_ioctl(dev, (void *)&drm_dumb, drm_file);
++ if (ret)
++ return ret;
++
++ memset(&prime, 0, sizeof(prime));
++ buf->bo_handle = drm_dumb.handle;
++ prime.handle = drm_dumb.handle;
++
++ ret = drm_prime_handle_to_fd_ioctl(dev, (void *)&prime, drm_file);
++ if (ret) {
++ V2G_ERROR("DRM fail to get fd to handle!\n");
++ return ret;
++ }
++
++ buf->dbuf_fd = prime.fd;
++
++ /* Add to frame buffer */
++ f.width = fmt->fmt.pix.width;
++ f.height = fmt->fmt.pix.height;
++#ifdef ATOMISP
++ /*
++ * Atomisp only supports planar pixel format which i915 overlay
++ * does not support. RGB565 is the only video format both supported
++ * by Atomisp and overlay.
++ */
++ f.pixel_format = DRM_FORMAT_RGB565;
++#else
++ f.pixel_format = fmt->fmt.pix.pixelformat;
++#endif
++ f.flags = 0;
++ bo_handles[0] = buf->bo_handle;
++
++ memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0]));
++ memcpy(f.pitches, pitches, 4 * sizeof(pitches[0]));
++ memcpy(f.offsets, offsets, 4 * sizeof(offsets[0]));
++
++ ret = drm_mode_addfb2(dev, (void *)&f, drm_file);
++ if (ret) {
++ V2G_ERROR("DRM fail to get fd to handle!\n");
++ return ret;
++ }
++
++ /* Get frame buffer id, used by setplane */
++ buf->fb_handle = f.fb_id;
++
++ return 0;
++}
++
++static int v2g_start_streaming(struct v2g_context *ctx)
++{
++ struct v4l2_buffer buf;
++ struct drm_file *drmfile;
++ struct file *v4l2_file;
++ struct v4l2_requestbuffers rqbufs;
++
++ int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ int i = 0;
++ int err = 0;
++
++ drmfile = ctx->drm.file.private_data;
++ v4l2_file = &ctx->v4l2.v4l2_file;
++
++ /* Open v4l2 device accordint to device id */
++ err = v2g_v4l2_open(ctx, CAMERA_DEV_ID);
++ if (err)
++ return err;
++
++ err = v2g_v4l2_init(ctx);
++ if (err)
++ return err;
++
++ /* V4L2 request buffers */
++ memset(&rqbufs, 0, sizeof(rqbufs));
++
++ /* Currently only request 1 buffer in the video buffer queue. */
++ rqbufs.count = MAX_BUF_NUM;
++ rqbufs.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ rqbufs.memory = V4L2_MEMORY_DMABUF;
++
++ err = v2g_v4l2_ioctl(v4l2_file, VIDIOC_REQBUFS, (ulong)&rqbufs);
++ if (err) {
++ V2G_ERROR("failed to request v4l2 video buffer!\n");
++ goto clean_up;
++ }
++
++ memset(&buf, 0, sizeof(buf));
++
++ V2G_DEBUG("v2g_drm import buffer for camera.");
++
++ for (i = 0; i < MAX_BUF_NUM; i++) {
++ /* DRM import this buf */
++ err = v2g_drm_import_buf(drmfile,
++ ctx->drm.drm_dev,
++ &ctx->buffer[i],
++ &ctx->v4l2.fmt);
++ if (err) {
++ V2G_ERROR("failed to export v4l2 video buffer!\n");
++ goto clean_up;
++ }
++
++ buf.index = i;
++ buf.m.fd = ctx->buffer[i].dbuf_fd;
++ buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ buf.memory = V4L2_MEMORY_DMABUF;
++
++ V2G_DEBUG("buf index = %d, fd = %d\n", buf.index, buf.m.fd);
++
++ err = v2g_v4l2_ioctl(v4l2_file, VIDIOC_QBUF, (ulong)&buf);
++ if (err) {
++ V2G_ERROR("failed to queue v4l2 video buffer!\n");
++ goto clean_up;
++ }
++ }
++
++ /* Start streaming */
++ err = v2g_v4l2_ioctl(v4l2_file, VIDIOC_STREAMON, (ulong)&type);
++ if (err) {
++ V2G_ERROR("failed to start streaming!\n");
++ goto clean_up;
++ }
++
++ ctx->state = STATE_RUNNING;
++ V2G_DEBUG("Start streaming.");
++
++ return 0;
++
++clean_up:
++ v2g_cleanup(ctx);
++ return err;
++}
++
++static int v2g_streamd(void *ptr)
++{
++ struct v2g_context *ctx = (struct v2g_context *)ptr;
++ struct v4l2_buffer buf;
++ struct drm_file *drmfile;
++ struct file *v4l2_file;
++ struct drm_mode_set_plane s;
++ int err = 0;
++
++ drmfile = ctx->drm.file.private_data;
++ v4l2_file = &ctx->v4l2.v4l2_file;
++
++ /* DRM: set plane */
++ memset(&s, 0, sizeof(s));
++
++ s.plane_id = ctx->drm.plane_id;
++ s.crtc_id = ctx->drm.crtc_id;
++ s.flags = 0;
++ s.crtc_x = (ctx->drm.crtc_active_width
++ - ctx->v4l2.fmt.fmt.pix.width) / 2;
++ s.crtc_y = (ctx->drm.crtc_active_height
++ - ctx->v4l2.fmt.fmt.pix.height) / 2;
++ s.crtc_w = ctx->v4l2.fmt.fmt.pix.width;
++ s.crtc_h = ctx->v4l2.fmt.fmt.pix.height;
++ s.src_x = 0;
++ s.src_y = 0;
++ s.src_w = ctx->v4l2.fmt.fmt.pix.width << 16;
++ s.src_h = ctx->v4l2.fmt.fmt.pix.height << 16;
++
++ /* Dequeue buffer */
++ memset(&buf, 0, sizeof(buf));
++ buf.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ buf.memory = V4L2_MEMORY_DMABUF;
++
++ while (1) {
++ if (kthread_should_stop())
++ break;
++
++ mutex_lock(&ctx->stream_lock);
++ if (ctx->state == STATE_RUNNING) {
++ err = v2g_v4l2_ioctl(v4l2_file,
++ VIDIOC_DQBUF,
++ (ulong)&buf);
++ if (err == -EAGAIN) {
++ /* buffer is not ready, try again */
++ V2G_DEBUG("Buffer is not ready, try again...");
++ msleep(FRAME_WAIT_INTERVAL);
++ } else {
++ s.fb_id = ctx->buffer[buf.index].fb_handle;
++
++ err = drm_mode_setplane(ctx->drm.drm_dev,
++ (void *)&s, drmfile);
++ if (err) {
++ V2G_ERROR("failed to set plane!");
++ mutex_unlock(&ctx->stream_lock);
++ break;
++ }
++
++ err = v2g_v4l2_ioctl(v4l2_file,
++ VIDIOC_QBUF,
++ (ulong)&buf);
++ if (err) {
++ V2G_ERROR("Failed to queue v4l2 vb.");
++ V2G_ERROR("ERROR=%d!\n", err);
++ mutex_unlock(&ctx->stream_lock);
++ break;
++ }
++ }
++ mutex_unlock(&ctx->stream_lock);
++ } else if (ctx->state == STATE_PAUSE) {
++ mutex_unlock(&ctx->stream_lock);
++ kthread_parkme();
++ } else if (ctx->state == STATE_EXIT) {
++ mutex_unlock(&ctx->stream_lock);
++ break;
++ } else {
++ V2G_ERROR("Should not reach here.\n");
++ break;
++ }
++ }
++ return 0;
++}
++
++static void v2g_cleanup(struct v2g_context *ctx)
++{
++ struct file *v4l2_file;
++
++ v4l2_file = &ctx->v4l2.v4l2_file;
++
++ if (v4l2_file)
++ v4l2_release_kernel(NULL, v4l2_file);
++
++ if (ctx->drm.file.private_data != NULL)
++ drm_release_kernel(&ctx->drm.inode, &ctx->drm.file);
++
++ /* Clean up ctx. */
++ kfree(ctx);
++}
++
++static int v2g_pause_streaming(struct v2g_context *ctx)
++{
++ int type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
++ int err = 0;
++
++ struct drm_mode_set_plane s;
++ struct drm_file *drmfile;
++ struct file *v4l2_file;
++
++ V2G_DEBUG("v2g pause streaming.\n");
++ drmfile = ctx->drm.file.private_data;
++ v4l2_file = &ctx->v4l2.v4l2_file;
++
++ err = v2g_v4l2_ioctl(v4l2_file, VIDIOC_STREAMOFF, (ulong)&type);
++ if (err) {
++ V2G_ERROR("failed to stop streaming.");
++ return -1;
++ }
++
++ memset(&s, 0, sizeof(s));
++ s.plane_id = ctx->drm.plane_id;
++ s.crtc_id = ctx->drm.crtc_id;
++ s.fb_id = 0;
++ err = drm_mode_setplane(ctx->drm.drm_dev, (void *)&s, drmfile);
++ if (err)
++ V2G_ERROR("failed to set plane.");
++
++ return 0;
++}
++
++static int v2g_exit_streaming(struct v2g_context *ctx)
++{
++ struct drm_file *drmfile;
++ struct file *v4l2_file;
++ int i = 0;
++
++ drmfile = ctx->drm.file.private_data;
++ v4l2_file = &ctx->v4l2.v4l2_file;
++
++ v2g_pause_streaming(ctx);
++
++ /* Release frame buffers. */
++ for (i = 0; i < MAX_BUF_NUM; i++) {
++ if (ctx->buffer[i].fb_handle != 0) {
++ drm_mode_rmfb(ctx->drm.drm_dev,
++ (void *)&ctx->buffer[i].fb_handle,
++ drmfile);
++ }
++ }
++
++ v2g_cleanup(ctx);
++
++ return 0;
++}
++
++static void v2g_timer_init(struct v2g_context *ctx)
++{
++ ulong secs;
++
++ setup_timer(&ctx->timer, v2g_timer_callback, 0);
++ secs = jiffies + msecs_to_jiffies(1000 * expire_seconds);
++ mod_timer(&ctx->timer, secs);
++}
++
++enum v2g_error {
++ ERR_CAMERA_DETECTION,
++ ERR_CAMERA_OPEN,
++ ERR_DRM_OPEN,
++ ERR_DRM_SETTING,
++ ERR_THREAD_CREATION,
++ SUCCESS = 0,
++};
++
++static int v2g_control(void *ptr)
++{
++ struct v2g_context *ctx = (struct v2g_context *)ptr;
++ enum v2g_error state_err = SUCCESS;
++ int err = 0;
++
++ while (1) {
++ if (kthread_should_stop())
++ break;
++
++ if (ctx->state == STATE_INIT) {
++ mutex_lock(&ctx->stream_lock);
++
++ err = v2g_enumerate_camera(ctx, CAMERA_DEV_ID);
++ if (err < 0) {
++ mutex_unlock(&ctx->stream_lock);
++ V2G_ERROR("Failed to find any camera.");
++ state_err = ERR_CAMERA_DETECTION;
++ break;
++ }
++
++ /* Open DRM. */
++ err = v2g_drm_open(ctx, DRM_DEV_ID);
++ if (err) {
++ V2G_ERROR("Failed to open drm.");
++ mutex_unlock(&ctx->stream_lock);
++ kfree(ctx);
++ state_err = ERR_DRM_OPEN;
++ break;
++ }
++
++ err = v2g_drm_set_mode(ctx);
++ if (err) {
++ drm_release_kernel(&ctx->drm.inode,
++ ctx->drm.file.private_data);
++ mutex_unlock(&ctx->stream_lock);
++ state_err = ERR_DRM_SETTING;
++ break;
++ }
++
++ v2g_timer_init(ctx);
++
++ ctx->state = STATE_PREPARE;
++ mutex_unlock(&ctx->stream_lock);
++ continue;
++
++ } else if (ctx->state == STATE_PREPARE) {
++ v2g_start_streaming(ctx);
++ ctx->state = STATE_RUNNING;
++ ctx->kt_streamd = kthread_run(v2g_streamd,
++ ctx, "v2g_streamd");
++ if (IS_ERR(ctx->kt_streamd)) {
++ V2G_ERROR("Failed to create v2g_streamd.");
++ v2g_exit_streaming(ctx);
++ state_err = ERR_THREAD_CREATION;
++ break;
++ }
++ wait_event_interruptible(ctx->wait_queue,
++ ctx->state != STATE_RUNNING);
++
++ } else if (ctx->state == STATE_PAUSE) {
++ v2g_pause_streaming(ctx);
++ kthread_stop(ctx->kt_streamd);
++ wait_event_interruptible(ctx->wait_queue,
++ ctx->state != STATE_PAUSE);
++
++ } else if (ctx->state == STATE_EXIT) {
++ ctx->state = STATE_EXIT;
++ v2g_exit_streaming(ctx);
++ break;
++
++ } else {
++ V2G_DEBUG("Keep state %d\n", ctx->state);
++ }
++ msleep(CONTROL_INTERVAL);
++ }
++
++ if (ctx != NULL) {
++ kfree(ctx);
++ ctx = NULL;
++ }
++
++ return 0;
++}
++
++static int v2g_start(void)
++{
++ struct v2g_context *ctx;
++
++ if (v2g_enable == 0)
++ return 0;
++
++ /* Allocate v2g context */
++ ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
++ if (NULL == ctx) {
++ V2G_ERROR("Failed to allocate v2g context!\n");
++ return -ENOMEM;
++ }
++
++ memset(ctx, 0, sizeof(*ctx));
++ p_v2gctx = ctx;
++
++ mutex_init(&ctx->stream_lock);
++ ctx->state = STATE_INIT;
++
++ init_waitqueue_head(&ctx->wait_queue);
++ /* Enable control daemon. */
++ ctx->kt_controld = kthread_run(v2g_control,
++ ctx, "v2g_controller");
++ if (IS_ERR(ctx->kt_controld)) {
++ V2G_ERROR("Failed to create thread v2g_control.");
++ goto stop_streamd;
++ }
++
++ return 0;
++
++stop_streamd:
++ if (!IS_ERR_OR_NULL(ctx->kt_streamd))
++ kthread_stop(ctx->kt_streamd);
++
++ return -1;
++}
++
++/*
++ * Initialize the v2gbridge device node.
++ * Register the driver as a misc device and return the result. (Each
++ * instance of open() will allocate & initialize the relevant context
++ * information.)
++ */
++static int __init v2g_init(void)
++{
++ int err;
++
++ if (v2g_enable == 0) {
++ V2G_DEBUG("Early camera is disabled.\n");
++ return 0;
++ }
++
++ err = misc_register(&v2g_miscdev);
++ if (err) {
++ V2G_ERROR("v2gbridge: misc driver registration FAILED !");
++ return err;
++ }
++
++ if (!v2g_start())
++ V2G_DEBUG("v2g_init ok!");
++ else
++ V2G_DEBUG("v2g_init failed!");
++
++ return 0;
++}
++
++/*
++ * Unregister and unload the v2g bridge driver
++ * and release any resources.
++ */
++static void __exit v2g_exit(void)
++{
++ V2G_DEBUG("v2gbridge: Unload camera module");
++ kfree(p_v2gctx);
++ misc_deregister(&v2g_miscdev);
++}
++
++module_init(v2g_init);
++module_exit(v2g_exit);
++
++MODULE_AUTHOR("James<junx.tang@intel.com>");
++MODULE_AUTHOR("Neo<neo.fang@intel.com>");
++MODULE_DESCRIPTION("Video Input to Intel Graphics Bridge Driver");
++MODULE_LICENSE("GPL");
++MODULE_VERSION(INTEL_V2G_VER);
++
+diff --git a/drivers/media/pci/v2g_bridge/v2g_bridge.h b/drivers/media/pci/v2g_bridge/v2g_bridge.h
+new file mode 100644
+index 0000000..958c036
+--- /dev/null
++++ b/drivers/media/pci/v2g_bridge/v2g_bridge.h
+@@ -0,0 +1,173 @@
++/*
++ * Copyright (C) 2014 Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License (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 __V2GBRIDGE_H
++#define __V2GBRIDGE_H
++
++#include <linux/types.h>
++
++#define V2G_MAX_FRAME_BUFS 0x5 /* Maximum number of DMA buffers */
++
++/*
++ * In fact, v4l2 max devices number is VIDEO_NUM_DEVICES = 256.
++ * But we only enumerate VFL_TYPE_GRABBER device in
++ * v4l2_enumerate_camera, not sure about the exact number.
++ * On Bayley Bay, due to the usage of TW6869 video decoder,
++ * eight devices from /dev/video0 ~ /dev/video7. So we set
++ * CAMERA_MAX_COUNT as 8
++ */
++#define CAMERA_MAX_COUNT (8)
++
++#define CAMERA_DEV_ID (0)
++
++/* In unit of second, camera show time in macroseconds */
++#define CAMERA_INTERVAL (10000)
++
++#define DRM_DEV_ID (226 << 20 | 0)
++
++#define MAX_BUF_NUM (7)
++
++#define FRAME_WAIT_INTERVAL (33)
++#define CONTROL_INTERVAL (500)
++
++#define VOID2U64(x) ((uint64_t)(unsigned long)(x))
++
++/* v2g buffer */
++struct buffer {
++ unsigned int bo_handle;
++ unsigned int fb_handle;
++ int dbuf_fd;
++};
++
++enum v2g_state {
++ STATE_UDEF = -1,
++ STATE_INIT,
++ STATE_PREPARE,
++ STATE_RUNNING,
++ STATE_EXIT,
++ STATE_PAUSE,
++};
++
++struct v2g_v4l2 {
++ struct inode v4l2_inode;
++ struct dentry v4l2_dentry;
++ struct file v4l2_file;
++ struct v4l2_format fmt;
++};
++
++struct v2g_drm {
++ /* drm */
++ struct inode inode;
++ struct dentry dentry;
++ struct file file;
++ struct drm_device *drm_dev;
++
++ /* crtc */
++ u32 crtc_id;
++ u16 crtc_active_width;
++ u16 crtc_active_height;
++ struct drm_mode_crtc crtc;
++
++ /* plane */
++ u32 plane_id;
++
++ /* framebuffer */
++ u32 fb_id;
++};
++
++struct v2g_context {
++ struct v2g_drm drm;
++ struct v2g_v4l2 v4l2;
++
++ struct buffer buffer[MAX_BUF_NUM];
++
++ /* task info */
++ enum v2g_state state;
++
++ struct task_struct *kt_streamd;
++ bool streamd_exit;
++
++ struct task_struct *kt_controld;
++ bool geard_exit;
++
++ /* protect state which is set by streamd and controld */
++ struct mutex stream_lock;
++
++ struct timer_list timer;
++
++ wait_queue_head_t wait_queue;
++};
++
++#define V2G_IOC_MAGIC 'v'
++#define V2G_ENABLE_BRIDGE _IOWR(V2G_IOC_MAGIC, 0, v2g_bridge_t *)
++#define V2G_DISABLE_BRIDGE _IOWR(V2G_IOC_MAGIC, 1, int *)
++#define V2G_DISPLAY_FRAME _IOWR(V2G_IOC_MAGIC, 2, v2g_new_frame_t *)
++#define V2G_TERMINATE_CAMERVIDEO _IO(V2G_IOC_MAGIC, 3)
++
++long uvc_v4l2_ioctl_kernel(struct file *file,
++ unsigned int cmd,
++ unsigned long arg);
++#ifdef ATOMISP
++int atomisp_v4l2_do_ioctl(struct file *file,
++ unsigned int cmd,
++ unsigned long arg);
++#endif
++
++int v4l2_enumerate_camera(unsigned int *camera_minor_lst,
++ int *camera_id_lst,
++ int *cnt);
++int v4l2_open_kernel(struct inode *inode, struct file *filp);
++int v4l2_release_kernel(struct inode *inode, struct file *filp);
++
++int drm_open_kernel(struct inode *inode,
++ struct file *filp,
++ struct drm_device **pdev);
++int drm_release_kernel(struct inode *inode, struct file *filp);
++int drm_mode_getcrtc(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_getresources_kernel(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_getcrtc(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_getplane_res(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_getplane(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_setplane(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_setcrtc(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_addfb2(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_rmfb(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_mode_create_dumb_ioctl(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int drm_prime_handle_to_fd_ioctl(struct drm_device *dev,
++ void *data,
++ struct drm_file *file_priv);
++int intel_get_pipe_from_crtc_id(struct drm_device *dev,
++ void *data,
++ struct drm_file *file);
++
++#endif /* __V2GBRIDGE_H */
+--
+1.8.4.5
+
--- /dev/null
+From dbd246c7fff2459e8586f00d58c69ad90acf0c8c Mon Sep 17 00:00:00 2001
+From: "Fang, Neo" <neo.fang@intel.com>
+Date: Thu, 11 Dec 2014 14:41:44 +0000
+Subject: [PATCH 40/45] Promote the booting priority of scsi and ata.
+
+Promote the booting priority of scsi and ata. SATA disk loading will
+waste many msecs, it will delay the whole Tizen system boot-up
+procedure. Hence, promote the priority of sata/ata modules before tty
+devices will improve kernel booting performance. From testing with
+vtc1010, kernel-3.14.19, and kingston 120GB ssd, the original kernel
+booting time is 1.314s; after tuning scsi/ata, the kernel booting time
+is 948ms.
+
+Change-Id: I8023ace1b1a30f09b5b76cac3be732b1c939f873
+Signed-off-by: Fang, Neo <neo.fang@intel.com>
+---
+ drivers/Makefile | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/Makefile b/drivers/Makefile
+index 8e3b8b0..81ce6af 100644
+--- a/drivers/Makefile
++++ b/drivers/Makefile
+@@ -38,6 +38,8 @@ obj-$(CONFIG_XEN) += xen/
+
+ # regulators early, since some subsystems rely on them to initialize
+ obj-$(CONFIG_REGULATOR) += regulator/
++obj-$(CONFIG_SCSI) += scsi/
++obj-$(CONFIG_ATA) += ata/
+
+ # reset controllers early, since gpu drivers might rely on them to initialize
+ obj-$(CONFIG_RESET_CONTROLLER) += reset/
+@@ -61,8 +63,6 @@ obj-y += base/ block/ misc/ mfd/ nfc/
+ obj-$(CONFIG_NUBUS) += nubus/
+ obj-y += macintosh/
+ obj-$(CONFIG_IDE) += ide/
+-obj-$(CONFIG_SCSI) += scsi/
+-obj-$(CONFIG_ATA) += ata/
+ obj-$(CONFIG_TARGET_CORE) += target/
+ obj-$(CONFIG_MTD) += mtd/
+ obj-$(CONFIG_SPI) += spi/
+--
+1.8.4.5
+
--- /dev/null
+From 0ff0c493e802aeeb9228b55545a6f3f0b8f25ab7 Mon Sep 17 00:00:00 2001
+From: Xing Wei <xing.wei@intel.com>
+Date: Tue, 4 Nov 2014 16:27:29 +0800
+Subject: [PATCH 41/45] move i915 driver init to late_initcall
+
+we can make i915 and sata init run in parallel
+to reduce kernel boot time about 260ms
+
+Change-Id: Iba9cf56a1f5371f734f826f3271383bfb591e6a0
+Signed-off-by: Xing Wei <xing.wei@intel.com>
+---
+ drivers/gpu/drm/i915/i915_drv.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index a249495..bd9713c 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -1138,7 +1138,7 @@ static void __exit i915_exit(void)
+ drm_pci_exit(&driver, &i915_pci_driver);
+ }
+
+-module_init(i915_init);
++late_initcall(i915_init);
+ module_exit(i915_exit);
+
+ MODULE_AUTHOR(DRIVER_AUTHOR);
+--
+1.8.4.5
+
--- /dev/null
+From 24e9c9a7dbc18464999d474690fe91e71c8fb73c Mon Sep 17 00:00:00 2001
+From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
+Date: Fri, 9 Jan 2015 19:30:25 -0800
+Subject: [PATCH 45/45] NFS: pn533 : delete timer when polling is complete
+
+When polling is complete, the listen timer is not longer required.
+Thus, we delete it. Otherwise, it might be possible that the
+expiring timer runs its callback with the mod list already reset.
+This would cause a division by zero in pn533_poll_next_mod. A
+warning is issued to make sure that we are informed of the condition.
+
+Also, cancel the timer in dep_link_down as it resets the poll mod
+count.
+
+Change-Id: Ia3590ec536deeaed3abf36d2c9abf065174d7e33
+Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com>
+---
+ drivers/nfc/pn533.c | 10 +++++++++-
+ 1 file changed, 9 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/nfc/pn533.c b/drivers/nfc/pn533.c
+index cf1a87b..9509342 100644
+--- a/drivers/nfc/pn533.c
++++ b/drivers/nfc/pn533.c
+@@ -1505,6 +1505,10 @@ static int pn533_target_found(struct pn533 *dev, u8 tg, u8 *tgdata,
+
+ static inline void pn533_poll_next_mod(struct pn533 *dev)
+ {
++ if (!dev->poll_mod_count) {
++ WARN(1, "poll_mod_count is zero!");
++ return;
++ }
+ dev->poll_mod_curr = (dev->poll_mod_curr + 1) % dev->poll_mod_count;
+ }
+
+@@ -1564,6 +1568,7 @@ static int pn533_start_poll_complete(struct pn533 *dev, struct sk_buff *resp)
+
+ /* We must stop the poll after a valid target found */
+ if (rc == 0) {
++ del_timer(&dev->listen_timer);
+ pn533_poll_reset_mod_list(dev);
+ return 0;
+ }
+@@ -1912,8 +1917,10 @@ static int pn533_poll_dep_complete(struct pn533 *dev, void *arg,
+ dev->nfc_dev->targets[0].idx,
+ 0, NFC_RF_INITIATOR);
+
+- if (!rc)
++ if (!rc) {
++ del_timer(&dev->listen_timer);
+ pn533_poll_reset_mod_list(dev);
++ }
+ }
+ error:
+ dev_kfree_skb(resp);
+@@ -2465,6 +2472,7 @@ static int pn533_dep_link_down(struct nfc_dev *nfc_dev)
+
+ dev_dbg(&dev->interface->dev, "%s\n", __func__);
+
++ del_timer(&dev->listen_timer);
+ pn533_poll_reset_mod_list(dev);
+
+ if (dev->tgt_mode || dev->tgt_active_prot)
+--
+1.8.4.5
+
# CONFIG_LOCALVERSION_AUTO is not set
# CONFIG_64BIT is not set
-CONFIG_DEFAULT_HOSTNAME="common_box"
+CONFIG_DEFAULT_HOSTNAME="ivi_box"
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_IRQ_TIME_ACCOUNTING=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CPUSETS=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y
-CONFIG_MEMCG_SWAP=y
-CONFIG_MEMCG_KMEM=y
-CONFIG_CGROUP_PERF=y
-CONFIG_CFS_BANDWIDTH=y
-CONFIG_RT_GROUP_SCHED=y
CONFIG_BLK_CGROUP=y
CONFIG_NAMESPACES=y
-CONFIG_USER_NS=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_PID_NS is not set
CONFIG_SCHED_AUTOGROUP=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
+CONFIG_EXPERT=y
# CONFIG_COMPAT_BRK is not set
-CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_PROFILING=y
CONFIG_OPROFILE=m
CONFIG_OPROFILE_EVENT_MULTIPLEX=y
CONFIG_CC_STACKPROTECTOR_REGULAR=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
-CONFIG_SGI_PARTITION=y
-CONFIG_SUN_PARTITION=y
-CONFIG_KARMA_PARTITION=y
CONFIG_IOSCHED_DEADLINE=m
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_SMP=y
CONFIG_X86_INTEL_LPSS=y
# CONFIG_SCHED_OMIT_FRAME_POINTER is not set
CONFIG_MCORE2=y
+CONFIG_X86_GENERIC=y
CONFIG_PROCESSOR_SELECT=y
# CONFIG_CPU_SUP_CYRIX_32 is not set
# CONFIG_CPU_SUP_AMD is not set
CONFIG_SCHED_SMT=y
CONFIG_PREEMPT=y
# CONFIG_X86_MCE_AMD is not set
+CONFIG_X86_REBOOTFIXUPS=y
CONFIG_MICROCODE=y
CONFIG_X86_MSR=y
CONFIG_X86_CPUID=y
-CONFIG_SPARSEMEM_MANUAL=y
+CONFIG_HIGHMEM64G=y
CONFIG_KSM=y
CONFIG_TRANSPARENT_HUGEPAGE=y
+CONFIG_HIGHPTE=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
CONFIG_EFI=y
CONFIG_EFI_STUB=y
+# CONFIG_SECCOMP is not set
CONFIG_HZ_1000=y
+# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x400000
+# CONFIG_COMPAT_VDSO is not set
CONFIG_HIBERNATION=y
-CONFIG_PM_AUTOSLEEP=y
-CONFIG_PM_WAKELOCKS=y
CONFIG_PM_RUNTIME=y
-CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
CONFIG_ACPI_AC=m
CONFIG_ACPI_BATTERY=m
CONFIG_ACPI_FAN=m
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
CONFIG_CPU_FREQ_GOV_USERSPACE=m
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=m
CONFIG_X86_ACPI_CPUFREQ=m
+CONFIG_X86_SPEEDSTEP_ICH=m
+CONFIG_X86_SPEEDSTEP_SMI=m
CONFIG_X86_P4_CLOCKMOD=m
CONFIG_INTEL_IDLE=y
CONFIG_PCIEPORTBUS=y
CONFIG_PCCARD=m
# CONFIG_PCMCIA is not set
CONFIG_YENTA=m
-CONFIG_X86_SYSFB=y
CONFIG_BINFMT_MISC=m
CONFIG_PACKET=m
-CONFIG_PACKET_DIAG=m
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=m
CONFIG_XFRM_USER=m
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE_DEMUX=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_NET_IPVTI=m
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_SYN_COOKIES=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_DIAG=m
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_CUBIC=m
-CONFIG_TCP_CONG_HSTCP=m
-CONFIG_TCP_CONG_HYBLA=m
-CONFIG_TCP_CONG_SCALABLE=m
-CONFIG_TCP_CONG_LP=m
-CONFIG_TCP_CONG_VENO=m
-CONFIG_TCP_CONG_YEAH=m
-CONFIG_TCP_CONG_ILLINOIS=m
+# CONFIG_TCP_CONG_WESTWOOD is not set
+# CONFIG_TCP_CONG_HTCP is not set
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_IPV6_VTI=m
-CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_GRE=m
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
CONFIG_NETWORK_SECMARK=y
-CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_SECMARK=y
-CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CONNTRACK_TIMEOUT=y
-CONFIG_NF_CONNTRACK_TIMESTAMP=y
-CONFIG_NF_CT_PROTO_DCCP=m
CONFIG_NF_CT_PROTO_SCTP=m
CONFIG_NF_CT_PROTO_UDPLITE=m
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_SNMP=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
-CONFIG_NF_CT_NETLINK_TIMEOUT=m
-CONFIG_NF_CT_NETLINK_HELPER=m
-CONFIG_NETFILTER_NETLINK_QUEUE_CT=y
CONFIG_NETFILTER_XTABLES=y
-CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
-CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_TEE=m
-CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_L2TP=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_RPFILTER=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_NF_NAT_IPV4=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_IP6=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_ULOG=m
-CONFIG_BRIDGE_EBT_NFLOG=m
CONFIG_BRIDGE=m
-CONFIG_BRIDGE_VLAN_FILTERING=y
-CONFIG_VLAN_8021Q=m
CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_MULTIQ=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFB=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_DRR=m
-CONFIG_NET_SCH_MQPRIO=m
-CONFIG_NET_SCH_CHOKE=m
-CONFIG_NET_SCH_QFQ=m
-CONFIG_NET_SCH_CODEL=m
-CONFIG_NET_SCH_FQ_CODEL=m
-CONFIG_NET_SCH_FQ=m
-CONFIG_NET_SCH_HHF=m
-CONFIG_NET_SCH_PIE=m
-CONFIG_NET_SCH_INGRESS=m
-CONFIG_NET_SCH_PLUG=m
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_PERF=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_FLOW=m
CONFIG_NET_CLS_CGROUP=m
-CONFIG_NET_CLS_BPF=m
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_CMP=m
-CONFIG_NET_EMATCH_NBYTE=m
-CONFIG_NET_EMATCH_U32=m
-CONFIG_NET_EMATCH_META=m
-CONFIG_NET_EMATCH_TEXT=m
-CONFIG_NET_EMATCH_CANID=m
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_ACT_POLICE=m
-CONFIG_NET_ACT_GACT=m
-CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
-CONFIG_NET_ACT_IPT=m
-CONFIG_NET_ACT_NAT=m
-CONFIG_NET_ACT_PEDIT=m
-CONFIG_NET_ACT_SIMP=m
-CONFIG_NET_ACT_SKBEDIT=m
-CONFIG_NET_ACT_CSUM=m
-CONFIG_NET_CLS_IND=y
+CONFIG_CGROUP_NET_PRIO=m
CONFIG_CAN=m
CONFIG_CAN_VCAN=m
-CONFIG_CAN_SLCAN=m
-# CONFIG_CAN_CALC_BITTIMING is not set
-CONFIG_CAN_MCP251X=m
-CONFIG_PCH_CAN=m
-CONFIG_CAN_SJA1000=m
-CONFIG_CAN_C_CAN=m
-CONFIG_CAN_C_CAN_PLATFORM=m
-CONFIG_CAN_C_CAN_PCI=m
-CONFIG_CAN_CC770=m
-CONFIG_CAN_CC770_ISA=m
-CONFIG_CAN_CC770_PLATFORM=m
-CONFIG_CAN_EMS_USB=m
-CONFIG_CAN_ESD_USB2=m
-CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_PEAK_USB=m
-CONFIG_CAN_8DEV_USB=m
-CONFIG_CAN_SOFTING=m
+CONFIG_CAN_CALC_BITTIMING=y
CONFIG_BT=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_MRVL=m
CONFIG_BT_MRVL_SDIO=m
CONFIG_BT_ATH3K=m
-CONFIG_BT_WILINK=m
-CONFIG_CFG80211=y
+CONFIG_CFG80211=m
CONFIG_MAC80211=m
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_DEBUGFS=y
-CONFIG_RFKILL=y
+CONFIG_RFKILL=m
CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_REGULATOR=m
CONFIG_NFC=m
-CONFIG_NFC_DIGITAL=m
CONFIG_NFC_NCI=m
-CONFIG_NFC_NCI_SPI=y
CONFIG_NFC_HCI=m
CONFIG_NFC_SHDLC=y
CONFIG_NFC_PN533=m
-CONFIG_NFC_WILINK=m
-CONFIG_NFC_PORT100=m
CONFIG_NFC_PN544=m
-CONFIG_NFC_PN544_I2C=m
CONFIG_NFC_MICROREAD=m
-CONFIG_NFC_MICROREAD_I2C=m
-CONFIG_NFC_MRVL=m
-CONFIG_NFC_MRVL_USB=m
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
-# CONFIG_FW_LOADER_USER_HELPER is not set
CONFIG_DEBUG_DEVRES=y
-CONFIG_CONNECTOR=m
+CONFIG_CONNECTOR=y
# CONFIG_PNP_DEBUG_MESSAGES is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_SIZE=16384
CONFIG_CDROM_PKTCDVD=m
-CONFIG_ATA_OVER_ETH=m
CONFIG_VIRTIO_BLK=m
CONFIG_TIFM_CORE=m
# CONFIG_TIFM_7XX1 is not set
CONFIG_SENSORS_BH1780=m
CONFIG_SENSORS_BH1770=m
CONFIG_SENSORS_APDS990X=m
-CONFIG_HMC6352=m
-CONFIG_TI_DAC7512=m
CONFIG_PCH_PHUB=m
-CONFIG_EEPROM_AT24=m
-CONFIG_EEPROM_AT25=m
-CONFIG_EEPROM_MAX6875=m
-CONFIG_EEPROM_93XX46=m
-CONFIG_SENSORS_LIS3_I2C=m
CONFIG_VMWARE_VMCI=m
CONFIG_RAID_ATTRS=m
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_VIRTIO=m
CONFIG_ATA=y
# CONFIG_ATA_VERBOSE_ERROR is not set
-CONFIG_SATA_ZPODD=y
+# CONFIG_SATA_PMP is not set
CONFIG_SATA_AHCI=y
CONFIG_SATA_SIL24=m
CONFIG_ATA_PIIX=y
CONFIG_PATA_MPIIX=m
CONFIG_ATA_GENERIC=y
CONFIG_MD=y
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_BCACHE=m
-CONFIG_BCACHE_DEBUG=y
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
-CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
-CONFIG_DM_RAID=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_QL=m
-CONFIG_DM_MULTIPATH_ST=m
CONFIG_DM_DELAY=m
CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_NETDEVICES=y
-CONFIG_EQUALIZER=m
CONFIG_MACVLAN=m
CONFIG_TUN=m
-CONFIG_VETH=m
CONFIG_VIRTIO_NET=m
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_ADAPTEC is not set
CONFIG_E1000=m
CONFIG_E1000E=m
CONFIG_IGB=m
-CONFIG_IGBVF=m
CONFIG_IXGB=m
CONFIG_IXGBE=m
-CONFIG_IXGBEVF=m
-CONFIG_I40E=m
+# CONFIG_NET_VENDOR_I825XX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
# CONFIG_NET_VENDOR_MELLANOX is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MYRI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
-CONFIG_FORCEDETH=m
+# CONFIG_NET_VENDOR_NVIDIA is not set
CONFIG_PCH_GBE=m
# CONFIG_NET_PACKET_ENGINE is not set
# CONFIG_NET_VENDOR_QLOGIC is not set
CONFIG_VITESSE_PHY=m
CONFIG_SMSC_PHY=m
CONFIG_BROADCOM_PHY=m
-CONFIG_BCM87XX_PHY=m
CONFIG_ICPLUS_PHY=m
CONFIG_REALTEK_PHY=m
CONFIG_MDIO_BITBANG=m
CONFIG_PPP_MPPE=m
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOE=m
-CONFIG_PPTP=m
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
CONFIG_USB_NET_CDC_EEM=m
-CONFIG_USB_NET_CDC_MBIM=m
CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_SR9700=m
-CONFIG_USB_NET_SR9800=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
+# CONFIG_USB_NET_CDC_SUBSET is not set
# CONFIG_USB_NET_ZAURUS is not set
-CONFIG_USB_NET_CX82310_ETH=m
-CONFIG_USB_HSO=m
-CONFIG_LIBERTAS_THINFIRM=m
-CONFIG_LIBERTAS_THINFIRM_USB=m
CONFIG_AT76C50X_USB=m
CONFIG_USB_ZD1201=m
CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_RTL8180=m
CONFIG_RTL8187=m
-CONFIG_B43=m
-CONFIG_B43_SDIO=y
CONFIG_IPW2100=m
CONFIG_IWLWIFI=m
CONFIG_IWLMVM=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
-CONFIG_RT2800PCI=m
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
-CONFIG_RT2800USB=m
-# CONFIG_RT2800USB_RT35XX is not set
-CONFIG_RTL8192CE=m
-CONFIG_RTL8192SE=m
-CONFIG_RTL8192DE=m
-CONFIG_RTL8723AE=m
-CONFIG_RTL8188EE=m
-CONFIG_RTL8192CU=m
-# CONFIG_RTLWIFI_DEBUG is not set
-CONFIG_ZD1211RW=m
-CONFIG_MWIFIEX=m
-CONFIG_MWIFIEX_SDIO=m
-CONFIG_MWIFIEX_PCIE=m
-CONFIG_MWIFIEX_USB=m
-CONFIG_CW1200=m
+# CONFIG_RTL_CARDS is not set
CONFIG_VMXNET3=m
-CONFIG_INPUT_FF_MEMLESS=y
-CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_POLLDEV=m
+CONFIG_INPUT_SPARSEKMAP=m
+# CONFIG_INPUT_MOUSEDEV is not set
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=y
CONFIG_KEYBOARD_ATKBD=m
CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_SYNAPTICS_I2C=m
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_XPAD=m
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_WACOM=m
CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
CONFIG_TOUCHSCREEN_AD7879_SPI=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_WACOM_I2C=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MMS114=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_INEXIO=m
CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_EDT_FT5X06=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_WM97XX=m
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC2005=m
CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_W90X900=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_SUR40=m
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_ZFORCE=m
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_AD714X=m
-CONFIG_INPUT_BMA150=m
-CONFIG_INPUT_PCSPKR=m
-CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_MPU3050=m
-CONFIG_INPUT_GP2A=m
-CONFIG_INPUT_GPIO_TILT_POLLED=m
CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_UINPUT=m
-CONFIG_INPUT_ADXL34X=m
CONFIG_SERIO=m
-CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
# CONFIG_LEGACY_PTYS is not set
-CONFIG_NOZOMI=m
# CONFIG_DEVKMEM is not set
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_RUNTIME_UARTS=5
CONFIG_SERIAL_8250_DW=m
CONFIG_SERIAL_MAX3100=m
-CONFIG_SERIAL_MAX310X=y
-CONFIG_SERIAL_MFD_HSU=m
CONFIG_SERIAL_PCH_UART=m
CONFIG_VIRTIO_CONSOLE=m
# CONFIG_HW_RANDOM_AMD is not set
+# CONFIG_HW_RANDOM_GEODE is not set
# CONFIG_HW_RANDOM_VIA is not set
CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_NVRAM=m
CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
# CONFIG_I2C_COMPAT is not set
CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_MUX_GPIO=m
CONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=m
# CONFIG_I2C_HELPER_AUTO is not set
-CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
CONFIG_I2C_I801=m
-CONFIG_I2C_ISCH=m
-CONFIG_I2C_ISMT=m
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_SCMI=m
CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_I2C_EG20T=m
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_SCH=m
-CONFIG_GPIO_ICH=m
-CONFIG_GPIO_LYNXPOINT=m
CONFIG_GPIO_PCH=m
CONFIG_GPIO_ML_IOH=m
CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_MC33880=m
-CONFIG_PDA_POWER=m
-CONFIG_BATTERY_DS2780=m
-CONFIG_BATTERY_DS2781=m
-CONFIG_BATTERY_DS2782=m
-CONFIG_BATTERY_SBS=m
-CONFIG_BATTERY_BQ27x00=m
-CONFIG_BATTERY_MAX17040=m
-CONFIG_BATTERY_MAX17042=m
-CONFIG_CHARGER_ISP1704=m
-CONFIG_CHARGER_MAX8903=m
-CONFIG_CHARGER_LP8727=m
-CONFIG_CHARGER_GPIO=m
-CONFIG_CHARGER_BQ2415X=m
-CONFIG_CHARGER_BQ24190=m
-CONFIG_CHARGER_BQ24735=m
-CONFIG_CHARGER_SMB347=m
-CONFIG_POWER_AVS=y
-CONFIG_SENSORS_AD7314=m
-CONFIG_SENSORS_AD7414=m
-CONFIG_SENSORS_AD7418=m
-CONFIG_SENSORS_ADCXX=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1029=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ADM9240=m
-CONFIG_SENSORS_ADT7310=m
-CONFIG_SENSORS_ADT7410=m
-CONFIG_SENSORS_ADT7411=m
-CONFIG_SENSORS_ADT7462=m
-CONFIG_SENSORS_ADT7470=m
-CONFIG_SENSORS_ADT7475=m
-CONFIG_SENSORS_ASC7621=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_ATXP1=m
-CONFIG_SENSORS_DS620=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
-CONFIG_SENSORS_F75375S=m
-CONFIG_SENSORS_FSCHMD=m
-CONFIG_SENSORS_G760A=m
-CONFIG_SENSORS_G762=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_GPIO_FAN=m
-CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_HTU21=m
-CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
-CONFIG_SENSORS_LINEAGE=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM70=m
-CONFIG_SENSORS_LM73=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_LM93=m
-CONFIG_SENSORS_LTC4151=m
-CONFIG_SENSORS_LTC4215=m
-CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4261=m
-CONFIG_SENSORS_LM95234=m
-CONFIG_SENSORS_LM95241=m
-CONFIG_SENSORS_LM95245=m
-CONFIG_SENSORS_MAX1111=m
-CONFIG_SENSORS_MAX16065=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_MAX1668=m
-CONFIG_SENSORS_MAX197=m
-CONFIG_SENSORS_MAX6639=m
-CONFIG_SENSORS_MAX6642=m
-CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6697=m
-CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_NCT6775=m
-CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_SHT15=m
-CONFIG_SENSORS_SHT21=m
-CONFIG_SENSORS_SIS5595=m
CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_DME1737=m
-CONFIG_SENSORS_EMC1403=m
CONFIG_SENSORS_EMC2103=m
-CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
-CONFIG_SENSORS_ADS1015=m
-CONFIG_SENSORS_ADS7828=m
-CONFIG_SENSORS_ADS7871=m
-CONFIG_SENSORS_AMC6821=m
-CONFIG_SENSORS_INA209=m
-CONFIG_SENSORS_INA2XX=m
-CONFIG_SENSORS_THMC50=m
-CONFIG_SENSORS_TMP102=m
-CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
-CONFIG_SENSORS_VT8231=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83791D=m
-CONFIG_SENSORS_W83792D=m
-CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
-CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
-CONFIG_INTEL_POWERCLAMP=y
-CONFIG_WATCHDOG=y
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_I6300ESB_WDT=m
-CONFIG_IE6XX_WDT=m
-CONFIG_ITCO_WDT=m
-CONFIG_ITCO_VENDOR_SUPPORT=y
-CONFIG_W83697HF_WDT=m
-CONFIG_W83697UG_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_W83977F_WDT=m
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=m
-CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
-CONFIG_REGULATOR_USERSPACE_CONSUMER=m
-CONFIG_REGULATOR_ACT8865=m
-CONFIG_REGULATOR_AD5398=m
-CONFIG_REGULATOR_DA9210=m
-CONFIG_REGULATOR_FAN53555=m
-CONFIG_REGULATOR_GPIO=m
-CONFIG_REGULATOR_ISL6271A=m
-CONFIG_REGULATOR_LP3971=m
-CONFIG_REGULATOR_LP3972=m
-CONFIG_REGULATOR_LP872X=m
-CONFIG_REGULATOR_LP8755=m
-CONFIG_REGULATOR_MAX1586=m
-CONFIG_REGULATOR_MAX8649=m
-CONFIG_REGULATOR_MAX8660=m
-CONFIG_REGULATOR_MAX8952=m
-CONFIG_REGULATOR_MAX8973=m
-CONFIG_REGULATOR_TPS51632=m
-CONFIG_REGULATOR_TPS62360=m
-CONFIG_REGULATOR_TPS65023=m
-CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_TPS6524X=m
-CONFIG_MEDIA_SUPPORT=m
+CONFIG_MEDIA_SUPPORT=y
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_V4L2=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_V4L2_SUBDEV_API=y
-CONFIG_LIRC=m
CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_PWC=m
-CONFIG_VIDEO_CPIA2=m
-CONFIG_USB_ZR364XX=m
-CONFIG_USB_STKWEBCAM=m
-CONFIG_USB_S2255=m
-CONFIG_VIDEO_USBTV=m
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_TLG2300=m
-CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_STK1160_AC97=y
-CONFIG_VIDEO_AU0828=m
-CONFIG_VIDEO_CX231XX=m
-CONFIG_VIDEO_CX231XX_ALSA=m
-CONFIG_VIDEO_CX231XX_DVB=m
-CONFIG_VIDEO_TM6000=m
-CONFIG_VIDEO_TM6000_ALSA=m
-CONFIG_VIDEO_TM6000_DVB=m
-CONFIG_DVB_USB=m
-CONFIG_DVB_USB_A800=m
-CONFIG_DVB_USB_DIBUSB_MB=m
-CONFIG_DVB_USB_DIBUSB_MC=m
-CONFIG_DVB_USB_DIB0700=m
-CONFIG_DVB_USB_UMT_010=m
-CONFIG_DVB_USB_CXUSB=m
-CONFIG_DVB_USB_M920X=m
-CONFIG_DVB_USB_DIGITV=m
-CONFIG_DVB_USB_VP7045=m
-CONFIG_DVB_USB_VP702X=m
-CONFIG_DVB_USB_GP8PSK=m
-CONFIG_DVB_USB_NOVA_T_USB2=m
-CONFIG_DVB_USB_TTUSB2=m
-CONFIG_DVB_USB_DTT200U=m
-CONFIG_DVB_USB_OPERA1=m
-CONFIG_DVB_USB_AF9005=m
-CONFIG_DVB_USB_AF9005_REMOTE=m
-CONFIG_DVB_USB_PCTV452E=m
-CONFIG_DVB_USB_DW2102=m
-CONFIG_DVB_USB_CINERGY_T2=m
-CONFIG_DVB_USB_DTV5100=m
-CONFIG_DVB_USB_FRIIO=m
-CONFIG_DVB_USB_AZ6027=m
-CONFIG_DVB_USB_TECHNISAT_USB2=m
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_AF9015=m
-CONFIG_DVB_USB_AF9035=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_IT913X=m
-CONFIG_DVB_USB_LME2510=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_DVB_USB_RTL28XXU=m
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_SMS_USB_DRV=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-CONFIG_VIDEO_EM28XX=m
+CONFIG_V2G_BRIDGE=y
+# CONFIG_USB_GSPCA is not set
CONFIG_MEDIA_PCI_SUPPORT=y
CONFIG_VIDEO_CX23885=m
-CONFIG_RADIO_SI4713=m
-CONFIG_I2C_SI4713=m
-CONFIG_USB_MR800=m
-CONFIG_USB_DSBR=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_SHARK=m
-CONFIG_RADIO_SHARK2=m
-CONFIG_USB_KEENE=m
-CONFIG_USB_RAREMONO=m
-CONFIG_USB_MA901=m
-CONFIG_RADIO_TEA5764=m
-CONFIG_RADIO_SAA7706H=m
-CONFIG_RADIO_TEF6862=m
-CONFIG_RADIO_WL1273=m
-CONFIG_RADIO_WL128X=m
CONFIG_AGP=y
CONFIG_DRM=y
CONFIG_DRM_I915=y
-CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
CONFIG_DRM_VMWGFX=y
CONFIG_DRM_VMWGFX_FBCON=y
-CONFIG_DRM_UDL=m
-CONFIG_FB_VESA=y
-CONFIG_FB_EFI=y
# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_GENERIC=m
-CONFIG_BACKLIGHT_PWM=m
-CONFIG_BACKLIGHT_ADP8860=m
-CONFIG_BACKLIGHT_ADP8870=m
-CONFIG_BACKLIGHT_LM3630A=m
-CONFIG_BACKLIGHT_LM3639=m
-CONFIG_BACKLIGHT_LP855X=m
-CONFIG_BACKLIGHT_GPIO=m
-CONFIG_BACKLIGHT_LV5207LP=m
-CONFIG_BACKLIGHT_BD6107=m
+# CONFIG_BACKLIGHT_GENERIC is not set
CONFIG_VGACON_SOFT_SCROLLBACK=y
-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=128
CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_SOUND=m
CONFIG_SND=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_HRTIMER=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_ALOOP=m
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_HDA_INPUT_JACK=y
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=m
-CONFIG_SND_HDA_CODEC_ANALOG=m
-CONFIG_SND_HDA_CODEC_SIGMATEL=m
-CONFIG_SND_HDA_CODEC_VIA=m
CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_CODEC_CIRRUS=m
-CONFIG_SND_HDA_CODEC_CONEXANT=m
-CONFIG_SND_HDA_CODEC_CA0110=m
CONFIG_SND_HDA_CODEC_CA0132=m
CONFIG_SND_HDA_CODEC_CA0132_DSP=y
-CONFIG_SND_HDA_CODEC_CMEDIA=m
-CONFIG_SND_HDA_CODEC_SI3054=m
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1
CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
# CONFIG_SND_SPI is not set
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_USX2Y=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
-CONFIG_UHID=m
CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CYPRESS=y
-CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=y
-CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KENSINGTON=y
-CONFIG_HID_LENOVO_TPKBD=m
-CONFIG_HID_LOGITECH=m
+CONFIG_HID_LOGITECH=y
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_WIIMOTE=m
CONFIG_HID_SENSOR_HUB=m
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_OHCI_HCD_PLATFORM=m
CONFIG_USB_UHCI_HCD=m
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
CONFIG_USB_TMC=m
CONFIG_USB_STORAGE=y
CONFIG_USB_DWC3=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_NOP_USB_XCEIV=m
-CONFIG_SAMSUNG_USB2PHY=m
-CONFIG_SAMSUNG_USB3PHY=m
CONFIG_USB_GADGET=m
-CONFIG_USB_EG20T=m
CONFIG_USB_ZERO=m
-CONFIG_USB_AUDIO=m
-CONFIG_GADGET_UAC1=y
CONFIG_USB_ETH=m
-CONFIG_USB_ETH_EEM=y
CONFIG_USB_G_NCM=m
-CONFIG_USB_GADGETFS=m
CONFIG_USB_FUNCTIONFS=m
CONFIG_USB_MASS_STORAGE=m
CONFIG_USB_G_SERIAL=m
-CONFIG_USB_G_HID=m
-CONFIG_USB_G_WEBCAM=m
CONFIG_MMC=y
CONFIG_MMC_BLOCK_MINORS=16
CONFIG_SDIO_UART=m
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_MMC_SDHCI_ACPI=y
-CONFIG_MMC_USHC=m
CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-CONFIG_LEDS_PCA9532_GPIO=y
-CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA963X=m
-CONFIG_LEDS_PCA9685=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-CONFIG_LEDS_TRIGGER_TRANSIENT=m
-CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_RTC_CLASS=y
-CONFIG_RTC_DRV_CMOS=m
+CONFIG_RTC_DRV_CMOS=y
CONFIG_DMADEVICES=y
-CONFIG_INTEL_MID_DMAC=m
CONFIG_INTEL_IOATDMA=m
-CONFIG_DW_DMAC_CORE=m
+CONFIG_DW_DMAC=m
CONFIG_PCH_DMA=m
CONFIG_ASYNC_TX_DMA=y
-CONFIG_UIO=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_STAGING=y
-CONFIG_R8187SE=m
-CONFIG_RTL8192U=m
-CONFIG_RTLLIB=m
-CONFIG_RTL8192E=m
-CONFIG_R8712U=m
-CONFIG_R8188EU=m
-CONFIG_R8821AE=m
CONFIG_ANDROID=y
CONFIG_ANDROID_LOGGER=m
# CONFIG_ANDROID_TIMED_OUTPUT is not set
# CONFIG_NET_VENDOR_SILICOM is not set
-CONFIG_IDEAPAD_LAPTOP=m
-CONFIG_THINKPAD_ACPI=m
+# CONFIG_X86_PLATFORM_DEVICES is not set
CONFIG_INTEL_IOMMU=y
-CONFIG_PM_DEVFREQ=y
-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
-CONFIG_DEVFREQ_GOV_PERFORMANCE=m
-CONFIG_DEVFREQ_GOV_POWERSAVE=m
-CONFIG_DEVFREQ_GOV_USERSPACE=m
-CONFIG_PWM=y
CONFIG_DMI_SYSFS=m
CONFIG_EFI_VARS=y
CONFIG_EFI_VARS_PSTORE=m
CONFIG_QUOTA=y
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=m
-CONFIG_CUSE=m
-CONFIG_FSCACHE=m
-CONFIG_FSCACHE_STATS=y
-CONFIG_FSCACHE_HISTOGRAM=y
-CONFIG_CACHEFILES=m
-CONFIG_CACHEFILES_HISTOGRAM=y
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
-CONFIG_NTFS_FS=m
-CONFIG_NTFS_RW=y
-CONFIG_PROC_KCORE=y
CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_HUGETLBFS=y
-CONFIG_ECRYPT_FS=m
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_SQUASHFS=m
-CONFIG_SQUASHFS_DECOMP_MULTI=y
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZO=y
-CONFIG_SQUASHFS_XZ=y
-CONFIG_ROMFS_FS=m
-CONFIG_EFIVAR_FS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFS_V4_1=y
-CONFIG_NFS_V4_2=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_V4_SECURITY_LABEL=y
-CONFIG_NFSD_FAULT_INJECTION=y
-CONFIG_SUNRPC_DEBUG=y
+CONFIG_EFIVAR_FS=m
CONFIG_CIFS=m
CONFIG_CIFS_WEAK_PW_HASH=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_ACL=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_INFO=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
-CONFIG_FRAME_WARN=2048
CONFIG_STRIP_ASM_SYMS=y
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_HEADERS_CHECK=y
CONFIG_OPTIMIZE_INLINING=y
CONFIG_SECURITY=y
CONFIG_SECURITY_SMACK=y
-CONFIG_CRYPTO_USER=m
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
-CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_GCM=m
-CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_VMAC=m
-CONFIG_CRYPTO_CRC32C_INTEL=y
-CONFIG_CRYPTO_CRC32=m
-CONFIG_CRYPTO_CRC32_PCLMUL=m
-CONFIG_CRYPTO_CRCT10DIF=m
-CONFIG_CRYPTO_RMD128=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_RMD256=m
-CONFIG_CRYPTO_RMD320=m
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
+CONFIG_CRYPTO_AES_586=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_BLOWFISH=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
+CONFIG_CRYPTO_SALSA20_586=m
CONFIG_CRYPTO_SEED=m
CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_586=m
CONFIG_CRYPTO_ZLIB=m
CONFIG_CRYPTO_LZO=m
-CONFIG_CRYPTO_LZ4=m
-CONFIG_CRYPTO_LZ4HC=m
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_ASYMMETRIC_KEY_TYPE=m
-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
-CONFIG_X509_CERTIFICATE_PARSER=m
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_VIRTUALIZATION is not set
CONFIG_LIBCRC32C=y
-CONFIG_CRC8=m
-CONFIG_CORDIC=m
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_64BIT=y
-CONFIG_DEFAULT_HOSTNAME="common_box"
+CONFIG_DEFAULT_HOSTNAME="ivi_box"
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_FHANDLE=y
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_IRQ_TIME_ACCOUNTING=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CPUSETS=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
CONFIG_MEMCG=y
-CONFIG_MEMCG_SWAP=y
-CONFIG_MEMCG_KMEM=y
-CONFIG_CGROUP_PERF=y
-CONFIG_CFS_BANDWIDTH=y
-CONFIG_RT_GROUP_SCHED=y
CONFIG_BLK_CGROUP=y
CONFIG_NAMESPACES=y
-CONFIG_USER_NS=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_PID_NS is not set
CONFIG_SCHED_AUTOGROUP=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZO=y
CONFIG_RD_LZ4=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_EMBEDDED=y
+CONFIG_EXPERT=y
# CONFIG_COMPAT_BRK is not set
-CONFIG_SYSTEM_TRUSTED_KEYRING=y
CONFIG_PROFILING=y
CONFIG_OPROFILE=m
CONFIG_OPROFILE_EVENT_MULTIPLEX=y
CONFIG_CC_STACKPROTECTOR_REGULAR=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_BLK_DEV_THROTTLING=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
CONFIG_LDM_PARTITION=y
-CONFIG_SGI_PARTITION=y
-CONFIG_SUN_PARTITION=y
-CONFIG_KARMA_PARTITION=y
CONFIG_IOSCHED_DEADLINE=m
CONFIG_CFQ_GROUP_IOSCHED=y
CONFIG_SMP=y
CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
CONFIG_EFI=y
CONFIG_EFI_STUB=y
+# CONFIG_SECCOMP is not set
CONFIG_HZ_1000=y
CONFIG_PHYSICAL_ALIGN=0x400000
CONFIG_HIBERNATION=y
-CONFIG_PM_AUTOSLEEP=y
-CONFIG_PM_WAKELOCKS=y
CONFIG_PM_RUNTIME=y
-CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
CONFIG_ACPI_AC=m
CONFIG_ACPI_BATTERY=m
CONFIG_ACPI_FAN=m
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
CONFIG_CPU_FREQ_GOV_USERSPACE=m
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
-CONFIG_X86_INTEL_PSTATE=y
CONFIG_X86_PCC_CPUFREQ=m
CONFIG_X86_ACPI_CPUFREQ=m
CONFIG_X86_P4_CLOCKMOD=m
CONFIG_PCCARD=m
# CONFIG_PCMCIA is not set
CONFIG_YENTA=m
-CONFIG_X86_SYSFB=y
CONFIG_BINFMT_MISC=m
CONFIG_PACKET=m
-CONFIG_PACKET_DIAG=m
CONFIG_UNIX=y
CONFIG_UNIX_DIAG=m
CONFIG_XFRM_USER=m
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE_DEMUX=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_NET_IPVTI=m
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_SYN_COOKIES=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
CONFIG_INET_IPCOMP=m
CONFIG_INET_DIAG=m
CONFIG_TCP_CONG_ADVANCED=y
CONFIG_TCP_CONG_CUBIC=m
-CONFIG_TCP_CONG_HSTCP=m
-CONFIG_TCP_CONG_HYBLA=m
-CONFIG_TCP_CONG_SCALABLE=m
-CONFIG_TCP_CONG_LP=m
-CONFIG_TCP_CONG_VENO=m
-CONFIG_TCP_CONG_YEAH=m
-CONFIG_TCP_CONG_ILLINOIS=m
+# CONFIG_TCP_CONG_WESTWOOD is not set
+# CONFIG_TCP_CONG_HTCP is not set
CONFIG_TCP_MD5SIG=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_INET6_IPCOMP=m
CONFIG_IPV6_MIP6=m
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_IPV6_VTI=m
-CONFIG_IPV6_SIT_6RD=y
CONFIG_IPV6_GRE=m
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
CONFIG_NETWORK_SECMARK=y
-CONFIG_NETWORK_PHY_TIMESTAMPING=y
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=m
CONFIG_NF_CONNTRACK_SECMARK=y
-CONFIG_NF_CONNTRACK_ZONES=y
CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CONNTRACK_TIMEOUT=y
-CONFIG_NF_CONNTRACK_TIMESTAMP=y
-CONFIG_NF_CT_PROTO_DCCP=m
CONFIG_NF_CT_PROTO_SCTP=m
CONFIG_NF_CT_PROTO_UDPLITE=m
CONFIG_NF_CONNTRACK_AMANDA=m
CONFIG_NF_CONNTRACK_H323=m
CONFIG_NF_CONNTRACK_IRC=m
CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_SNMP=m
CONFIG_NF_CONNTRACK_PPTP=m
CONFIG_NF_CONNTRACK_SANE=m
CONFIG_NF_CONNTRACK_SIP=m
CONFIG_NF_CONNTRACK_TFTP=m
CONFIG_NF_CT_NETLINK=m
-CONFIG_NF_CT_NETLINK_TIMEOUT=m
-CONFIG_NF_CT_NETLINK_HELPER=m
-CONFIG_NETFILTER_NETLINK_QUEUE_CT=y
CONFIG_NETFILTER_XTABLES=y
-CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
-CONFIG_NETFILTER_XT_TARGET_CT=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
CONFIG_NETFILTER_XT_TARGET_HMARK=m
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_TEE=m
-CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_SECMARK=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_L2TP=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_RECENT=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
-CONFIG_NETFILTER_XT_MATCH_SOCKET=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP_NF_MATCH_AH=m
CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_RPFILTER=m
CONFIG_IP_NF_MATCH_TTL=m
CONFIG_IP_NF_FILTER=m
CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_SYNPROXY=m
CONFIG_IP_NF_TARGET_ULOG=m
CONFIG_NF_NAT_IPV4=m
CONFIG_IP_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_TARGET_SYNPROXY=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_RAW=m
CONFIG_IP6_NF_SECURITY=m
CONFIG_NF_NAT_IPV6=m
CONFIG_IP6_NF_TARGET_MASQUERADE=m
CONFIG_IP6_NF_TARGET_NPT=m
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_IP6=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_ULOG=m
-CONFIG_BRIDGE_EBT_NFLOG=m
CONFIG_BRIDGE=m
-CONFIG_BRIDGE_VLAN_FILTERING=y
-CONFIG_VLAN_8021Q=m
CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_MULTIQ=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFB=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_DRR=m
-CONFIG_NET_SCH_MQPRIO=m
-CONFIG_NET_SCH_CHOKE=m
-CONFIG_NET_SCH_QFQ=m
-CONFIG_NET_SCH_CODEL=m
-CONFIG_NET_SCH_FQ_CODEL=m
-CONFIG_NET_SCH_FQ=m
-CONFIG_NET_SCH_HHF=m
-CONFIG_NET_SCH_PIE=m
-CONFIG_NET_SCH_INGRESS=m
-CONFIG_NET_SCH_PLUG=m
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_PERF=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_FLOW=m
CONFIG_NET_CLS_CGROUP=m
-CONFIG_NET_CLS_BPF=m
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_CMP=m
-CONFIG_NET_EMATCH_NBYTE=m
-CONFIG_NET_EMATCH_U32=m
-CONFIG_NET_EMATCH_META=m
-CONFIG_NET_EMATCH_TEXT=m
-CONFIG_NET_EMATCH_CANID=m
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_ACT_POLICE=m
-CONFIG_NET_ACT_GACT=m
-CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
-CONFIG_NET_ACT_IPT=m
-CONFIG_NET_ACT_NAT=m
-CONFIG_NET_ACT_PEDIT=m
-CONFIG_NET_ACT_SIMP=m
-CONFIG_NET_ACT_SKBEDIT=m
-CONFIG_NET_ACT_CSUM=m
-CONFIG_NET_CLS_IND=y
+CONFIG_CGROUP_NET_PRIO=m
CONFIG_CAN=m
CONFIG_CAN_VCAN=m
-CONFIG_CAN_SLCAN=m
-# CONFIG_CAN_CALC_BITTIMING is not set
-CONFIG_CAN_MCP251X=m
-CONFIG_PCH_CAN=m
-CONFIG_CAN_SJA1000=m
-CONFIG_CAN_C_CAN=m
-CONFIG_CAN_C_CAN_PLATFORM=m
-CONFIG_CAN_C_CAN_PCI=m
-CONFIG_CAN_CC770=m
-CONFIG_CAN_CC770_ISA=m
-CONFIG_CAN_CC770_PLATFORM=m
-CONFIG_CAN_EMS_USB=m
-CONFIG_CAN_ESD_USB2=m
-CONFIG_CAN_KVASER_USB=m
CONFIG_CAN_PEAK_USB=m
-CONFIG_CAN_8DEV_USB=m
-CONFIG_CAN_SOFTING=m
+CONFIG_CAN_CALC_BITTIMING=y
CONFIG_BT=m
CONFIG_BT_RFCOMM=m
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_MRVL=m
CONFIG_BT_MRVL_SDIO=m
CONFIG_BT_ATH3K=m
-CONFIG_BT_WILINK=m
-CONFIG_CFG80211=y
+CONFIG_CFG80211=m
CONFIG_MAC80211=m
CONFIG_MAC80211_MESH=y
CONFIG_MAC80211_DEBUGFS=y
-CONFIG_RFKILL=y
+CONFIG_RFKILL=m
CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_REGULATOR=m
CONFIG_NFC=m
-CONFIG_NFC_DIGITAL=m
CONFIG_NFC_NCI=m
-CONFIG_NFC_NCI_SPI=y
CONFIG_NFC_HCI=m
CONFIG_NFC_SHDLC=y
CONFIG_NFC_PN533=m
-CONFIG_NFC_WILINK=m
-CONFIG_NFC_PORT100=m
CONFIG_NFC_PN544=m
-CONFIG_NFC_PN544_I2C=m
CONFIG_NFC_MICROREAD=m
-CONFIG_NFC_MICROREAD_I2C=m
-CONFIG_NFC_MRVL=m
-CONFIG_NFC_MRVL_USB=m
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
-# CONFIG_FW_LOADER_USER_HELPER is not set
CONFIG_DEBUG_DEVRES=y
-CONFIG_CONNECTOR=m
+CONFIG_CONNECTOR=y
# CONFIG_PNP_DEBUG_MESSAGES is not set
CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_SIZE=16384
CONFIG_CDROM_PKTCDVD=m
-CONFIG_ATA_OVER_ETH=m
CONFIG_VIRTIO_BLK=m
CONFIG_TIFM_CORE=m
# CONFIG_TIFM_7XX1 is not set
CONFIG_SENSORS_BH1780=m
CONFIG_SENSORS_BH1770=m
CONFIG_SENSORS_APDS990X=m
-CONFIG_HMC6352=m
-CONFIG_TI_DAC7512=m
CONFIG_PCH_PHUB=m
-CONFIG_EEPROM_AT24=m
-CONFIG_EEPROM_AT25=m
-CONFIG_EEPROM_MAX6875=m
-CONFIG_EEPROM_93XX46=m
-CONFIG_SENSORS_LIS3_I2C=m
CONFIG_VMWARE_VMCI=m
CONFIG_RAID_ATTRS=m
CONFIG_BLK_DEV_SD=y
CONFIG_SCSI_VIRTIO=m
CONFIG_ATA=y
# CONFIG_ATA_VERBOSE_ERROR is not set
-CONFIG_SATA_ZPODD=y
+# CONFIG_SATA_PMP is not set
CONFIG_SATA_AHCI=y
CONFIG_SATA_SIL24=m
CONFIG_ATA_PIIX=y
CONFIG_PATA_MPIIX=m
CONFIG_ATA_GENERIC=y
CONFIG_MD=y
-CONFIG_MD_LINEAR=m
-CONFIG_MD_RAID0=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_BCACHE=m
-CONFIG_BCACHE_DEBUG=y
CONFIG_BLK_DEV_DM=m
CONFIG_DM_DEBUG=y
-CONFIG_DM_CRYPT=m
CONFIG_DM_SNAPSHOT=m
CONFIG_DM_MIRROR=m
-CONFIG_DM_RAID=m
CONFIG_DM_ZERO=m
CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_QL=m
-CONFIG_DM_MULTIPATH_ST=m
CONFIG_DM_DELAY=m
CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_NETDEVICES=y
-CONFIG_EQUALIZER=m
CONFIG_MACVLAN=m
CONFIG_TUN=m
-CONFIG_VETH=m
CONFIG_VIRTIO_NET=m
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_ADAPTEC is not set
CONFIG_E1000=m
CONFIG_E1000E=m
CONFIG_IGB=m
-CONFIG_IGBVF=m
CONFIG_IXGB=m
CONFIG_IXGBE=m
-CONFIG_IXGBEVF=m
-CONFIG_I40E=m
+# CONFIG_NET_VENDOR_I825XX is not set
# CONFIG_NET_VENDOR_MARVELL is not set
# CONFIG_NET_VENDOR_MELLANOX is not set
# CONFIG_NET_VENDOR_MICREL is not set
# CONFIG_NET_VENDOR_MICROCHIP is not set
# CONFIG_NET_VENDOR_MYRI is not set
# CONFIG_NET_VENDOR_NATSEMI is not set
-CONFIG_FORCEDETH=m
+# CONFIG_NET_VENDOR_NVIDIA is not set
CONFIG_PCH_GBE=m
# CONFIG_NET_PACKET_ENGINE is not set
# CONFIG_NET_VENDOR_QLOGIC is not set
CONFIG_VITESSE_PHY=m
CONFIG_SMSC_PHY=m
CONFIG_BROADCOM_PHY=m
-CONFIG_BCM87XX_PHY=m
CONFIG_ICPLUS_PHY=m
CONFIG_REALTEK_PHY=m
CONFIG_MDIO_BITBANG=m
CONFIG_PPP_MPPE=m
CONFIG_PPP_MULTILINK=y
CONFIG_PPPOE=m
-CONFIG_PPTP=m
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
CONFIG_USB_NET_CDC_EEM=m
-CONFIG_USB_NET_CDC_MBIM=m
CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_SR9700=m
-CONFIG_USB_NET_SR9800=m
CONFIG_USB_NET_SMSC75XX=m
CONFIG_USB_NET_SMSC95XX=m
CONFIG_USB_NET_GL620A=m
CONFIG_USB_NET_PLUSB=m
CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
+# CONFIG_USB_NET_CDC_SUBSET is not set
# CONFIG_USB_NET_ZAURUS is not set
-CONFIG_USB_NET_CX82310_ETH=m
-CONFIG_USB_HSO=m
-CONFIG_LIBERTAS_THINFIRM=m
-CONFIG_LIBERTAS_THINFIRM_USB=m
CONFIG_AT76C50X_USB=m
CONFIG_USB_ZD1201=m
CONFIG_USB_NET_RNDIS_WLAN=m
CONFIG_RTL8180=m
CONFIG_RTL8187=m
-CONFIG_B43=m
-CONFIG_B43_SDIO=y
CONFIG_IPW2100=m
CONFIG_IWLWIFI=m
CONFIG_IWLMVM=m
CONFIG_RT2400PCI=m
CONFIG_RT2500PCI=m
CONFIG_RT61PCI=m
-CONFIG_RT2800PCI=m
CONFIG_RT2500USB=m
CONFIG_RT73USB=m
-CONFIG_RT2800USB=m
-# CONFIG_RT2800USB_RT35XX is not set
-CONFIG_RTL8192CE=m
-CONFIG_RTL8192SE=m
-CONFIG_RTL8192DE=m
-CONFIG_RTL8723AE=m
-CONFIG_RTL8188EE=m
-CONFIG_RTL8192CU=m
-# CONFIG_RTLWIFI_DEBUG is not set
-CONFIG_ZD1211RW=m
-CONFIG_MWIFIEX=m
-CONFIG_MWIFIEX_SDIO=m
-CONFIG_MWIFIEX_PCIE=m
-CONFIG_MWIFIEX_USB=m
-CONFIG_CW1200=m
+# CONFIG_RTL_CARDS is not set
CONFIG_VMXNET3=m
-CONFIG_INPUT_FF_MEMLESS=y
-CONFIG_INPUT_MOUSEDEV=m
+CONFIG_INPUT_POLLDEV=m
+CONFIG_INPUT_SPARSEKMAP=m
+# CONFIG_INPUT_MOUSEDEV is not set
CONFIG_INPUT_JOYDEV=m
CONFIG_INPUT_EVDEV=y
CONFIG_KEYBOARD_ATKBD=m
CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_SYNAPTICS_I2C=m
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_XPAD=m
CONFIG_INPUT_TABLET=y
CONFIG_TABLET_USB_WACOM=m
CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_ADS7846=m
CONFIG_TOUCHSCREEN_AD7877=m
CONFIG_TOUCHSCREEN_AD7879=m
CONFIG_TOUCHSCREEN_AD7879_I2C=m
CONFIG_TOUCHSCREEN_AD7879_SPI=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_WACOM_I2C=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MMS114=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_INEXIO=m
CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_EDT_FT5X06=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
CONFIG_TOUCHSCREEN_WM97XX=m
CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC2005=m
CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_W90X900=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_SUR40=m
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_ZFORCE=m
CONFIG_INPUT_MISC=y
-CONFIG_INPUT_AD714X=m
-CONFIG_INPUT_BMA150=m
-CONFIG_INPUT_PCSPKR=m
-CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_MPU3050=m
-CONFIG_INPUT_GP2A=m
-CONFIG_INPUT_GPIO_TILT_POLLED=m
CONFIG_INPUT_POWERMATE=m
CONFIG_INPUT_UINPUT=m
-CONFIG_INPUT_ADXL34X=m
CONFIG_SERIO=m
-CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
# CONFIG_LEGACY_PTYS is not set
-CONFIG_NOZOMI=m
# CONFIG_DEVKMEM is not set
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_RUNTIME_UARTS=5
CONFIG_SERIAL_8250_DW=m
CONFIG_SERIAL_MAX3100=m
-CONFIG_SERIAL_MAX310X=y
-CONFIG_SERIAL_MFD_HSU=m
CONFIG_SERIAL_PCH_UART=m
CONFIG_VIRTIO_CONSOLE=m
# CONFIG_HW_RANDOM_AMD is not set
# CONFIG_HW_RANDOM_VIA is not set
CONFIG_HW_RANDOM_VIRTIO=m
+CONFIG_NVRAM=m
CONFIG_HPET=y
# CONFIG_HPET_MMAP is not set
# CONFIG_I2C_COMPAT is not set
CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_MUX_GPIO=m
CONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=m
# CONFIG_I2C_HELPER_AUTO is not set
-CONFIG_I2C_ALGOPCF=m
-CONFIG_I2C_ALGOPCA=m
CONFIG_I2C_I801=m
-CONFIG_I2C_ISCH=m
-CONFIG_I2C_ISMT=m
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_SCMI=m
CONFIG_I2C_DESIGNWARE_PLATFORM=m
CONFIG_I2C_DESIGNWARE_PCI=m
CONFIG_I2C_EG20T=m
CONFIG_PINCTRL_BAYTRAIL=y
CONFIG_GPIOLIB=y
CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_SCH=m
-CONFIG_GPIO_ICH=m
-CONFIG_GPIO_LYNXPOINT=m
CONFIG_GPIO_PCH=m
CONFIG_GPIO_ML_IOH=m
CONFIG_GPIO_MAX7301=m
CONFIG_GPIO_MC33880=m
-CONFIG_PDA_POWER=m
-CONFIG_BATTERY_DS2780=m
-CONFIG_BATTERY_DS2781=m
-CONFIG_BATTERY_DS2782=m
-CONFIG_BATTERY_SBS=m
-CONFIG_BATTERY_BQ27x00=m
-CONFIG_BATTERY_MAX17040=m
-CONFIG_BATTERY_MAX17042=m
-CONFIG_CHARGER_ISP1704=m
-CONFIG_CHARGER_MAX8903=m
-CONFIG_CHARGER_LP8727=m
-CONFIG_CHARGER_GPIO=m
-CONFIG_CHARGER_BQ2415X=m
-CONFIG_CHARGER_BQ24190=m
-CONFIG_CHARGER_BQ24735=m
-CONFIG_CHARGER_SMB347=m
-CONFIG_POWER_AVS=y
-CONFIG_SENSORS_AD7314=m
-CONFIG_SENSORS_AD7414=m
-CONFIG_SENSORS_AD7418=m
-CONFIG_SENSORS_ADCXX=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1029=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ADM9240=m
-CONFIG_SENSORS_ADT7310=m
-CONFIG_SENSORS_ADT7410=m
-CONFIG_SENSORS_ADT7411=m
-CONFIG_SENSORS_ADT7462=m
-CONFIG_SENSORS_ADT7470=m
-CONFIG_SENSORS_ADT7475=m
-CONFIG_SENSORS_ASC7621=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_ATXP1=m
-CONFIG_SENSORS_DS620=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
-CONFIG_SENSORS_F75375S=m
-CONFIG_SENSORS_FSCHMD=m
-CONFIG_SENSORS_G760A=m
-CONFIG_SENSORS_G762=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
CONFIG_SENSORS_GPIO_FAN=m
-CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_HTU21=m
-CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_IT87=m
CONFIG_SENSORS_JC42=m
-CONFIG_SENSORS_LINEAGE=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM70=m
-CONFIG_SENSORS_LM73=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_LM93=m
-CONFIG_SENSORS_LTC4151=m
-CONFIG_SENSORS_LTC4215=m
-CONFIG_SENSORS_LTC4245=m
CONFIG_SENSORS_LTC4261=m
-CONFIG_SENSORS_LM95234=m
-CONFIG_SENSORS_LM95241=m
-CONFIG_SENSORS_LM95245=m
-CONFIG_SENSORS_MAX1111=m
-CONFIG_SENSORS_MAX16065=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_MAX1668=m
-CONFIG_SENSORS_MAX197=m
-CONFIG_SENSORS_MAX6639=m
-CONFIG_SENSORS_MAX6642=m
-CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6697=m
-CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_NCT6775=m
-CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_SENSORS_SHT15=m
-CONFIG_SENSORS_SHT21=m
-CONFIG_SENSORS_SIS5595=m
CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_DME1737=m
-CONFIG_SENSORS_EMC1403=m
CONFIG_SENSORS_EMC2103=m
-CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
-CONFIG_SENSORS_ADS1015=m
-CONFIG_SENSORS_ADS7828=m
-CONFIG_SENSORS_ADS7871=m
-CONFIG_SENSORS_AMC6821=m
-CONFIG_SENSORS_INA209=m
-CONFIG_SENSORS_INA2XX=m
-CONFIG_SENSORS_THMC50=m
-CONFIG_SENSORS_TMP102=m
-CONFIG_SENSORS_TMP401=m
CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
-CONFIG_SENSORS_VT8231=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83791D=m
-CONFIG_SENSORS_W83792D=m
-CONFIG_SENSORS_W83793=m
CONFIG_SENSORS_W83795=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
-CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
-CONFIG_INTEL_POWERCLAMP=y
-CONFIG_WATCHDOG=y
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_I6300ESB_WDT=m
-CONFIG_IE6XX_WDT=m
-CONFIG_ITCO_WDT=m
-CONFIG_ITCO_VENDOR_SUPPORT=y
-CONFIG_W83697HF_WDT=m
-CONFIG_W83697UG_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_W83977F_WDT=m
-CONFIG_REGULATOR=y
-CONFIG_REGULATOR_FIXED_VOLTAGE=m
-CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
-CONFIG_REGULATOR_USERSPACE_CONSUMER=m
-CONFIG_REGULATOR_ACT8865=m
-CONFIG_REGULATOR_AD5398=m
-CONFIG_REGULATOR_DA9210=m
-CONFIG_REGULATOR_FAN53555=m
-CONFIG_REGULATOR_GPIO=m
-CONFIG_REGULATOR_ISL6271A=m
-CONFIG_REGULATOR_LP3971=m
-CONFIG_REGULATOR_LP3972=m
-CONFIG_REGULATOR_LP872X=m
-CONFIG_REGULATOR_LP8755=m
-CONFIG_REGULATOR_MAX1586=m
-CONFIG_REGULATOR_MAX8649=m
-CONFIG_REGULATOR_MAX8660=m
-CONFIG_REGULATOR_MAX8952=m
-CONFIG_REGULATOR_MAX8973=m
-CONFIG_REGULATOR_TPS51632=m
-CONFIG_REGULATOR_TPS62360=m
-CONFIG_REGULATOR_TPS65023=m
-CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_TPS6524X=m
-CONFIG_MEDIA_SUPPORT=m
+CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CAMERA_SUPPORT=y
CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
CONFIG_MEDIA_RADIO_SUPPORT=y
CONFIG_MEDIA_RC_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_V4L2_SUBDEV_API=y
-CONFIG_LIRC=m
CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_PWC=m
-CONFIG_VIDEO_CPIA2=m
-CONFIG_USB_ZR364XX=m
-CONFIG_USB_STKWEBCAM=m
-CONFIG_USB_S2255=m
-CONFIG_VIDEO_USBTV=m
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_TLG2300=m
-CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_STK1160_AC97=y
-CONFIG_VIDEO_AU0828=m
-CONFIG_VIDEO_CX231XX=m
-CONFIG_VIDEO_CX231XX_ALSA=m
-CONFIG_VIDEO_CX231XX_DVB=m
-CONFIG_VIDEO_TM6000=m
-CONFIG_VIDEO_TM6000_ALSA=m
-CONFIG_VIDEO_TM6000_DVB=m
-CONFIG_DVB_USB=m
-CONFIG_DVB_USB_A800=m
-CONFIG_DVB_USB_DIBUSB_MB=m
-CONFIG_DVB_USB_DIBUSB_MC=m
-CONFIG_DVB_USB_DIB0700=m
-CONFIG_DVB_USB_UMT_010=m
-CONFIG_DVB_USB_CXUSB=m
-CONFIG_DVB_USB_M920X=m
-CONFIG_DVB_USB_DIGITV=m
-CONFIG_DVB_USB_VP7045=m
-CONFIG_DVB_USB_VP702X=m
-CONFIG_DVB_USB_GP8PSK=m
-CONFIG_DVB_USB_NOVA_T_USB2=m
-CONFIG_DVB_USB_TTUSB2=m
-CONFIG_DVB_USB_DTT200U=m
-CONFIG_DVB_USB_OPERA1=m
-CONFIG_DVB_USB_AF9005=m
-CONFIG_DVB_USB_AF9005_REMOTE=m
-CONFIG_DVB_USB_PCTV452E=m
-CONFIG_DVB_USB_DW2102=m
-CONFIG_DVB_USB_CINERGY_T2=m
-CONFIG_DVB_USB_DTV5100=m
-CONFIG_DVB_USB_FRIIO=m
-CONFIG_DVB_USB_AZ6027=m
-CONFIG_DVB_USB_TECHNISAT_USB2=m
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_AF9015=m
-CONFIG_DVB_USB_AF9035=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_IT913X=m
-CONFIG_DVB_USB_LME2510=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_DVB_USB_RTL28XXU=m
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_SMS_USB_DRV=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-CONFIG_VIDEO_EM28XX=m
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+CONFIG_VIDEO_V4L2=y
+CONFIG_V2G_BRIDGE=y
+# CONFIG_USB_GSPCA is not set
CONFIG_MEDIA_PCI_SUPPORT=y
CONFIG_VIDEO_CX23885=m
-CONFIG_RADIO_SI4713=m
-CONFIG_I2C_SI4713=m
-CONFIG_USB_MR800=m
-CONFIG_USB_DSBR=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_SHARK=m
-CONFIG_RADIO_SHARK2=m
-CONFIG_USB_KEENE=m
-CONFIG_USB_RAREMONO=m
-CONFIG_USB_MA901=m
-CONFIG_RADIO_TEA5764=m
-CONFIG_RADIO_SAA7706H=m
-CONFIG_RADIO_TEF6862=m
-CONFIG_RADIO_WL1273=m
-CONFIG_RADIO_WL128X=m
CONFIG_AGP=y
CONFIG_DRM=y
CONFIG_DRM_I915=y
-CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT=y
CONFIG_DRM_VMWGFX=y
CONFIG_DRM_VMWGFX_FBCON=y
-CONFIG_DRM_UDL=m
-CONFIG_FB_VESA=y
-CONFIG_FB_EFI=y
# CONFIG_LCD_CLASS_DEVICE is not set
-CONFIG_BACKLIGHT_GENERIC=m
-CONFIG_BACKLIGHT_PWM=m
-CONFIG_BACKLIGHT_ADP8860=m
-CONFIG_BACKLIGHT_ADP8870=m
-CONFIG_BACKLIGHT_LM3630A=m
-CONFIG_BACKLIGHT_LM3639=m
-CONFIG_BACKLIGHT_LP855X=m
-CONFIG_BACKLIGHT_GPIO=m
-CONFIG_BACKLIGHT_LV5207LP=m
-CONFIG_BACKLIGHT_BD6107=m
+# CONFIG_BACKLIGHT_GENERIC is not set
CONFIG_VGACON_SOFT_SCROLLBACK=y
-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=128
CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
CONFIG_SOUND=m
CONFIG_SND=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_HRTIMER=m
# CONFIG_SND_SUPPORT_OLD_API is not set
CONFIG_SND_ALOOP=m
CONFIG_SND_AC97_POWER_SAVE=y
CONFIG_SND_HDA_INPUT_JACK=y
CONFIG_SND_HDA_PATCH_LOADER=y
CONFIG_SND_HDA_CODEC_REALTEK=m
-CONFIG_SND_HDA_CODEC_ANALOG=m
-CONFIG_SND_HDA_CODEC_SIGMATEL=m
-CONFIG_SND_HDA_CODEC_VIA=m
CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_CODEC_CIRRUS=m
-CONFIG_SND_HDA_CODEC_CONEXANT=m
-CONFIG_SND_HDA_CODEC_CA0110=m
CONFIG_SND_HDA_CODEC_CA0132=m
CONFIG_SND_HDA_CODEC_CA0132_DSP=y
-CONFIG_SND_HDA_CODEC_CMEDIA=m
-CONFIG_SND_HDA_CODEC_SI3054=m
CONFIG_SND_HDA_POWER_SAVE_DEFAULT=1
CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
# CONFIG_SND_SPI is not set
CONFIG_SND_USB_AUDIO=m
CONFIG_SND_USB_USX2Y=m
CONFIG_SND_USB_CAIAQ=m
CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_HID_BATTERY_STRENGTH=y
CONFIG_HIDRAW=y
-CONFIG_UHID=m
CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CYPRESS=y
-CONFIG_HID_ELO=m
CONFIG_HID_EZKEY=y
-CONFIG_HID_KEYTOUCH=m
CONFIG_HID_KENSINGTON=y
-CONFIG_HID_LENOVO_TPKBD=m
-CONFIG_HID_LOGITECH=m
+CONFIG_HID_LOGITECH=y
CONFIG_HID_LOGITECH_DJ=m
CONFIG_LOGITECH_FF=y
CONFIG_LOGIRUMBLEPAD2_FF=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_WIIMOTE=m
CONFIG_HID_SENSOR_HUB=m
CONFIG_HID_PID=y
CONFIG_USB_HIDDEV=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_HCD_PLATFORM=m
CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_OHCI_HCD_PLATFORM=m
CONFIG_USB_UHCI_HCD=m
CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
CONFIG_USB_TMC=m
CONFIG_USB_STORAGE=y
CONFIG_USB_DWC3=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_NOP_USB_XCEIV=m
-CONFIG_SAMSUNG_USB2PHY=m
-CONFIG_SAMSUNG_USB3PHY=m
CONFIG_USB_GADGET=m
-CONFIG_USB_EG20T=m
CONFIG_USB_ZERO=m
-CONFIG_USB_AUDIO=m
-CONFIG_GADGET_UAC1=y
CONFIG_USB_ETH=m
-CONFIG_USB_ETH_EEM=y
CONFIG_USB_G_NCM=m
-CONFIG_USB_GADGETFS=m
CONFIG_USB_FUNCTIONFS=m
CONFIG_USB_MASS_STORAGE=m
CONFIG_USB_G_SERIAL=m
-CONFIG_USB_G_HID=m
-CONFIG_USB_G_WEBCAM=m
CONFIG_MMC=y
CONFIG_MMC_BLOCK_MINORS=16
CONFIG_SDIO_UART=m
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PCI=y
CONFIG_MMC_SDHCI_ACPI=y
-CONFIG_MMC_USHC=m
CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-CONFIG_LEDS_PCA9532_GPIO=y
-CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA963X=m
-CONFIG_LEDS_PCA9685=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-CONFIG_LEDS_TRIGGER_TRANSIENT=m
-CONFIG_LEDS_TRIGGER_CAMERA=m
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_CMOS=m
CONFIG_DMADEVICES=y
-CONFIG_INTEL_MID_DMAC=m
CONFIG_INTEL_IOATDMA=m
-CONFIG_DW_DMAC_CORE=m
+CONFIG_DW_DMAC=m
CONFIG_PCH_DMA=m
CONFIG_ASYNC_TX_DMA=y
-CONFIG_UIO=y
CONFIG_VIRTIO_PCI=m
CONFIG_VIRTIO_BALLOON=m
CONFIG_VIRTIO_MMIO=m
CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
CONFIG_STAGING=y
-CONFIG_R8187SE=m
-CONFIG_RTL8192U=m
-CONFIG_RTLLIB=m
-CONFIG_RTL8192E=m
-CONFIG_R8712U=m
-CONFIG_R8188EU=m
-CONFIG_R8821AE=m
CONFIG_ANDROID=y
CONFIG_ANDROID_LOGGER=m
# CONFIG_ANDROID_TIMED_OUTPUT is not set
# CONFIG_NET_VENDOR_SILICOM is not set
-CONFIG_IDEAPAD_LAPTOP=m
-CONFIG_THINKPAD_ACPI=m
+# CONFIG_X86_PLATFORM_DEVICES is not set
CONFIG_INTEL_IOMMU=y
-CONFIG_PM_DEVFREQ=y
-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=m
-CONFIG_DEVFREQ_GOV_PERFORMANCE=m
-CONFIG_DEVFREQ_GOV_POWERSAVE=m
-CONFIG_DEVFREQ_GOV_USERSPACE=m
-CONFIG_PWM=y
CONFIG_DMI_SYSFS=m
CONFIG_EFI_VARS=y
CONFIG_EFI_VARS_PSTORE=m
CONFIG_QUOTA=y
CONFIG_AUTOFS4_FS=m
CONFIG_FUSE_FS=m
-CONFIG_CUSE=m
-CONFIG_FSCACHE=m
-CONFIG_FSCACHE_STATS=y
-CONFIG_FSCACHE_HISTOGRAM=y
-CONFIG_CACHEFILES=m
-CONFIG_CACHEFILES_HISTOGRAM=y
CONFIG_ISO9660_FS=m
CONFIG_JOLIET=y
CONFIG_ZISOFS=y
CONFIG_UDF_FS=m
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
-CONFIG_NTFS_FS=m
-CONFIG_NTFS_RW=y
-CONFIG_PROC_KCORE=y
CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_HUGETLBFS=y
-CONFIG_ECRYPT_FS=m
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_HFSPLUS_FS_POSIX_ACL=y
CONFIG_SQUASHFS=m
-CONFIG_SQUASHFS_DECOMP_MULTI=y
CONFIG_SQUASHFS_XATTR=y
CONFIG_SQUASHFS_LZO=y
-CONFIG_SQUASHFS_XZ=y
-CONFIG_ROMFS_FS=m
-CONFIG_EFIVAR_FS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFS_V4_1=y
-CONFIG_NFS_V4_2=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_V4_SECURITY_LABEL=y
-CONFIG_NFSD_FAULT_INJECTION=y
-CONFIG_SUNRPC_DEBUG=y
+CONFIG_EFIVAR_FS=m
CONFIG_CIFS=m
CONFIG_CIFS_WEAK_PW_HASH=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_ACL=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_CODEPAGE_737=m
CONFIG_NLS_ISO8859_15=m
CONFIG_NLS_KOI8_R=m
CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
CONFIG_PRINTK_TIME=y
CONFIG_DEBUG_INFO=y
# CONFIG_ENABLE_WARN_DEPRECATED is not set
CONFIG_OPTIMIZE_INLINING=y
CONFIG_SECURITY=y
CONFIG_SECURITY_SMACK=y
-CONFIG_CRYPTO_USER=m
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
-CONFIG_CRYPTO_PCRYPT=m
CONFIG_CRYPTO_TEST=m
CONFIG_CRYPTO_GCM=m
-CONFIG_CRYPTO_CTS=m
CONFIG_CRYPTO_ECB=y
+CONFIG_CRYPTO_LRW=m
CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_XTS=m
CONFIG_CRYPTO_HMAC=y
CONFIG_CRYPTO_XCBC=m
CONFIG_CRYPTO_VMAC=m
-CONFIG_CRYPTO_CRC32C_INTEL=y
-CONFIG_CRYPTO_CRC32=m
-CONFIG_CRYPTO_CRC32_PCLMUL=m
-CONFIG_CRYPTO_CRCT10DIF=m
-CONFIG_CRYPTO_RMD128=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_RMD256=m
-CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_SHA1_SSSE3=m
-CONFIG_CRYPTO_SHA256_SSSE3=m
-CONFIG_CRYPTO_SHA512_SSSE3=m
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=m
CONFIG_CRYPTO_TGR192=m
CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
CONFIG_CRYPTO_ANUBIS=m
CONFIG_CRYPTO_ARC4=y
CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_BLOWFISH_X86_64=m
CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m
-CONFIG_CRYPTO_CAST5_AVX_X86_64=m
-CONFIG_CRYPTO_CAST6_AVX_X86_64=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
CONFIG_CRYPTO_FCRYPT=m
CONFIG_CRYPTO_KHAZAD=m
CONFIG_CRYPTO_SALSA20=m
-CONFIG_CRYPTO_SALSA20_X86_64=m
CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
-CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
+CONFIG_CRYPTO_SERPENT=m
CONFIG_CRYPTO_TEA=m
CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
CONFIG_CRYPTO_ZLIB=m
CONFIG_CRYPTO_LZO=m
-CONFIG_CRYPTO_LZ4=m
-CONFIG_CRYPTO_LZ4HC=m
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_ASYMMETRIC_KEY_TYPE=m
-CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m
-CONFIG_X509_CERTIFICATE_PARSER=m
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_VIRTUALIZATION is not set
CONFIG_LIBCRC32C=y
-CONFIG_CRC8=m
-CONFIG_CORDIC=m
CONFIG_FONTS=y
CONFIG_FONT_8x8=y
CONFIG_FONT_8x16=y
# Tizen defconfig
SRC_URI += "${DEFCONFIG}"
-# TMP fix for error: "implicit declaration of function 'sk_run_filter'"
-SRC_URI += "file://0001-net-ptp-use-sk_unattached_filter_create-for-BPF.patch"
-SRC_URI += "file://0001-net-ptp-do-not-reimplement-PTP-BPF-classifier.patch"
-SRC_URI += "file://0001-net-ptp-move-PTP-classifier-in-its-own-file.patch"
+# Created with "git format-patch v3.14.19..24e9c9a7dbc184"
+# in profile/ivi/kernel-x86-ivi
+# and manually filtering out packaging and defconfig changes.
+#
+# defconfig files kernel-x86-ivi arch/x86/configs/ivi_x86_defconfig resp.
+# arch/x86/configs/ivi_x86_64_defconfig were also copied and modified:
+# "CONFIG_64BIT=y" must be set in the x86-64 version and "# CONFIG_64BIT is not set"
+# in the i586 one.
+
+SRC_URI += " \
+file://0003-Smack-Cgroup-filesystem-access.patch \
+file://0005-i2c-i801-enable-Intel-BayTrail-SMBUS.patch \
+file://0007-drm-export-cmdline-and-preferred-mode-functions-from.patch \
+file://0008-drm-i915-Pass-explicit-mode-into-mode_from_pipe_conf.patch \
+file://0009-drm-i915-allow-re-use-BIOS-connector-config-for-init.patch \
+file://0010-drm-i915-split-aligned-height-calculation-out-v2.patch \
+file://0011-drm-i915-Shuffle-modeset-reset-handling-around.patch \
+file://0012-drm-i915-read-out-hw-state-earlier-v2.patch \
+file://0013-drm-i915-re-add-locking-around-hw-state-readout.patch \
+file://0014-drm-i915-add-plane_config-fetching-infrastructure-v2.patch \
+file://0015-drm-i915-get_plane_config-for-i9xx-v13.patch \
+file://0016-drm-i915-get_plane_config-support-for-ILK-v3.patch \
+file://0017-drm-i915-Wrap-the-preallocated-BIOS-framebuffer-and-.patch \
+file://0018-drm-i915-preserve-SSC-if-previously-set.patch \
+file://0019-drm-i915-don-t-bother-enabling-swizzle-bits-on-gen7.patch \
+file://0020-drm-i915-use-current-mode-if-the-size-matches-the-pr.patch \
+file://0021-drm-i915-remove-early-fb-allocation-dependency-on-CO.patch \
+file://0023-drm-i915-Use-the-first-mode-if-there-is-no-preferred.patch \
+file://0024-PATCH-drm-i915-vlv-DP_SINK_COUNT-is-not-reliable-for.patch \
+file://0034-Export-V4L2-APIs-to-support-early-camera.patch \
+file://0035-Add-a-new-v4l2-API-to-enumerate-camera-devs.patch \
+file://0036-Share-drm-resources-between-X-and-early-camera.patch \
+file://0037-Export-drm-APIs-to-support-early-camera.patch \
+file://0038-Create-new-DRM-APIs-for-early-camera.patch \
+file://0039-Implements-v2g-bridge-module-for-early-camera.patch \
+file://0040-Promote-the-booting-priority-of-scsi-and-ata.patch \
+file://0041-move-i915-driver-init-to-late_initcall.patch \
+file://0045-NFS-pn533-delete-timer-when-polling-is-complete.patch \
+"
-# Tizen patches
-SRC_URI += "file://0001-Smack-Cgroup-filesystem-access.patch"
-SRC_URI += "file://0002-SMACK-Fix-handling-value-NULL-in-post-setxattr.patch"
-SRC_URI += "file://0003-Revert-x86-efi-Correct-EFI-boot-stub-use-of-code32_s.patch"
-SRC_URI += "file://0004-KEYS-Move-the-flags-representing-required-permission.patch"
-SRC_URI += "file://0005-smack-fix-key-permission-verification.patch"
-SRC_URI += "file://0006-Minor-improvement-of-smack_sb_kern_mount.patch"
-SRC_URI += "file://0007-Smack-fix-the-subject-object-order-in-smack_ptrace_t.patch"
-SRC_URI += "file://0008-Smack-unify-all-ptrace-accesses-in-the-smack.patch"
-SRC_URI += "file://0009-Smack-adds-smackfs-ptrace-interface.patch"
-SRC_URI += "file://0010-bugfix-patch-for-SMACK.patch"
-SRC_URI += "file://0011-Smack-Correctly-remove-SMACK64TRANSMUTE-attribute.patch"
-SRC_URI += "file://0012-Smack-bidirectional-UDS-connect-check.patch"
-SRC_URI += "file://0013-Smack-Verify-read-access-on-file-open-v3.patch"
-SRC_URI += "file://0014-Warning-in-scanf-string-typing.patch"
-SRC_URI += "file://0015-Smack-fix-behavior-of-smack_inode_listsecurity.patch"
-SRC_URI += "file://0016-Smack-handle-zero-length-security-labels-without-pan.patch"
-SRC_URI += "file://0017-Smack-remove-unneeded-NULL-termination-from-securtit.patch"
-SRC_URI += "file://0018-Smack-Fix-setting-label-on-successful-file-open.patch"
-SRC_URI += "file://0019-perf-tools-define-_DEFAULT_SOURCE-for-glibc_2.20.patch"
-SRC_URI += "file://0020-SMACK-Fix-wrong-copy-size.patch"
# Per architecture defconfig files.
DEFCONFIG_i586 = "file://defconfig"