linux-yocto.bbappend: refreshed to match Tizen IVI kernel
authorPatrick Ohly <patrick.ohly@intel.com>
Sat, 31 Jan 2015 13:18:46 +0000 (05:18 -0800)
committerPatrick Ohly <patrick.ohly@intel.com>
Tue, 3 Feb 2015 15:15:49 +0000 (07:15 -0800)
New patches were created with "git format-patch v3.14.19..24e9c9a7dbc184"
in profile/ivi/kernel-x86-ivi and manually filtering out packaging and
defconfig changes.

The new patches were added to Tizen IVI to support fast boot. They
should not matter otherwise.

Change-Id: I860956a930bea94926dc235ba9b987c691a71b55

53 files changed:
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-do-not-reimplement-PTP-BPF-classifier.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-move-PTP-classifier-in-its-own-file.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-use-sk_unattached_filter_create-for-BPF.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0002-SMACK-Fix-handling-value-NULL-in-post-setxattr.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0003-Revert-x86-efi-Correct-EFI-boot-stub-use-of-code32_s.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0003-Smack-Cgroup-filesystem-access.patch [moved from meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-Smack-Cgroup-filesystem-access.patch with 92% similarity]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0004-KEYS-Move-the-flags-representing-required-permission.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0005-i2c-i801-enable-Intel-BayTrail-SMBUS.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0005-smack-fix-key-permission-verification.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0006-Minor-improvement-of-smack_sb_kern_mount.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0007-Smack-fix-the-subject-object-order-in-smack_ptrace_t.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0007-drm-export-cmdline-and-preferred-mode-functions-from.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0008-Smack-unify-all-ptrace-accesses-in-the-smack.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0008-drm-i915-Pass-explicit-mode-into-mode_from_pipe_conf.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0009-Smack-adds-smackfs-ptrace-interface.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0009-drm-i915-allow-re-use-BIOS-connector-config-for-init.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0010-bugfix-patch-for-SMACK.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0010-drm-i915-split-aligned-height-calculation-out-v2.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0011-Smack-Correctly-remove-SMACK64TRANSMUTE-attribute.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0011-drm-i915-Shuffle-modeset-reset-handling-around.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0012-Smack-bidirectional-UDS-connect-check.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0012-drm-i915-read-out-hw-state-earlier-v2.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0013-Smack-Verify-read-access-on-file-open-v3.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0013-drm-i915-re-add-locking-around-hw-state-readout.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0014-Warning-in-scanf-string-typing.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0014-drm-i915-add-plane_config-fetching-infrastructure-v2.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0015-Smack-fix-behavior-of-smack_inode_listsecurity.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0015-drm-i915-get_plane_config-for-i9xx-v13.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0016-Smack-handle-zero-length-security-labels-without-pan.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0016-drm-i915-get_plane_config-support-for-ILK-v3.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0017-Smack-remove-unneeded-NULL-termination-from-securtit.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0017-drm-i915-Wrap-the-preallocated-BIOS-framebuffer-and-.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0018-Smack-Fix-setting-label-on-successful-file-open.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0018-drm-i915-preserve-SSC-if-previously-set.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0019-drm-i915-don-t-bother-enabling-swizzle-bits-on-gen7.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0019-perf-tools-define-_DEFAULT_SOURCE-for-glibc_2.20.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0020-SMACK-Fix-wrong-copy-size.patch [deleted file]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0020-drm-i915-use-current-mode-if-the-size-matches-the-pr.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0021-drm-i915-remove-early-fb-allocation-dependency-on-CO.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0023-drm-i915-Use-the-first-mode-if-there-is-no-preferred.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0024-PATCH-drm-i915-vlv-DP_SINK_COUNT-is-not-reliable-for.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0034-Export-V4L2-APIs-to-support-early-camera.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0035-Add-a-new-v4l2-API-to-enumerate-camera-devs.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0036-Share-drm-resources-between-X-and-early-camera.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0037-Export-drm-APIs-to-support-early-camera.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0038-Create-new-DRM-APIs-for-early-camera.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0039-Implements-v2g-bridge-module-for-early-camera.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0040-Promote-the-booting-priority-of-scsi-and-ata.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0041-move-i915-driver-init-to-late_initcall.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0045-NFS-pn533-delete-timer-when-polling-is-complete.patch [new file with mode: 0644]
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/i586/defconfig
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/x86-64/defconfig
meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto_3.14.bbappend

diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-do-not-reimplement-PTP-BPF-classifier.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-do-not-reimplement-PTP-BPF-classifier.patch
deleted file mode 100644 (file)
index 00e26a2..0000000
+++ /dev/null
@@ -1,190 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-move-PTP-classifier-in-its-own-file.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-move-PTP-classifier-in-its-own-file.patch
deleted file mode 100644 (file)
index 0148b68..0000000
+++ /dev/null
@@ -1,471 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-use-sk_unattached_filter_create-for-BPF.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0001-net-ptp-use-sk_unattached_filter_create-for-BPF.patch
deleted file mode 100644 (file)
index 291d8d3..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0002-SMACK-Fix-handling-value-NULL-in-post-setxattr.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0002-SMACK-Fix-handling-value-NULL-in-post-setxattr.patch
deleted file mode 100644 (file)
index 1307495..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0003-Revert-x86-efi-Correct-EFI-boot-stub-use-of-code32_s.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0003-Revert-x86-efi-Correct-EFI-boot-stub-use-of-code32_s.patch
deleted file mode 100644 (file)
index 8e6c827..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-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
-
@@ -1,7 +1,7 @@
-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
@@ -12,7 +12,6 @@ uses them.
 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(-)
@@ -78,5 +77,5 @@ index 14f52be..acd8574 100644
                /*
                 * Casey says procfs appears not to care.
 -- 
-1.8.1.4
+1.8.4.5
 
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0004-KEYS-Move-the-flags-representing-required-permission.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0004-KEYS-Move-the-flags-representing-required-permission.patch
deleted file mode 100644 (file)
index 9dd1db9..0000000
+++ /dev/null
@@ -1,499 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0005-i2c-i801-enable-Intel-BayTrail-SMBUS.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0005-i2c-i801-enable-Intel-BayTrail-SMBUS.patch
new file mode 100644 (file)
index 0000000..7a266d8
--- /dev/null
@@ -0,0 +1,72 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0005-smack-fix-key-permission-verification.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0005-smack-fix-key-permission-verification.patch
deleted file mode 100644 (file)
index d7b8b2d..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0006-Minor-improvement-of-smack_sb_kern_mount.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0006-Minor-improvement-of-smack_sb_kern_mount.patch
deleted file mode 100644 (file)
index f518a3b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0007-Smack-fix-the-subject-object-order-in-smack_ptrace_t.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0007-Smack-fix-the-subject-object-order-in-smack_ptrace_t.patch
deleted file mode 100644 (file)
index 7284a3b..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0007-drm-export-cmdline-and-preferred-mode-functions-from.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0007-drm-export-cmdline-and-preferred-mode-functions-from.patch
new file mode 100644 (file)
index 0000000..ddcbe98
--- /dev/null
@@ -0,0 +1,74 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0008-Smack-unify-all-ptrace-accesses-in-the-smack.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0008-Smack-unify-all-ptrace-accesses-in-the-smack.patch
deleted file mode 100644 (file)
index 935a1a3..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0008-drm-i915-Pass-explicit-mode-into-mode_from_pipe_conf.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0008-drm-i915-Pass-explicit-mode-into-mode_from_pipe_conf.patch
new file mode 100644 (file)
index 0000000..dc52ea5
--- /dev/null
@@ -0,0 +1,95 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0009-Smack-adds-smackfs-ptrace-interface.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0009-Smack-adds-smackfs-ptrace-interface.patch
deleted file mode 100644 (file)
index d0950ce..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0009-drm-i915-allow-re-use-BIOS-connector-config-for-init.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0009-drm-i915-allow-re-use-BIOS-connector-config-for-init.patch
new file mode 100644 (file)
index 0000000..c083063
--- /dev/null
@@ -0,0 +1,201 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0010-bugfix-patch-for-SMACK.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0010-bugfix-patch-for-SMACK.patch
deleted file mode 100644 (file)
index 4fc2f9c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0010-drm-i915-split-aligned-height-calculation-out-v2.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0010-drm-i915-split-aligned-height-calculation-out-v2.patch
new file mode 100644 (file)
index 0000000..91074de
--- /dev/null
@@ -0,0 +1,59 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0011-Smack-Correctly-remove-SMACK64TRANSMUTE-attribute.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0011-Smack-Correctly-remove-SMACK64TRANSMUTE-attribute.patch
deleted file mode 100644 (file)
index 4a3be50..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0011-drm-i915-Shuffle-modeset-reset-handling-around.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0011-drm-i915-Shuffle-modeset-reset-handling-around.patch
new file mode 100644 (file)
index 0000000..4ac898f
--- /dev/null
@@ -0,0 +1,78 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0012-Smack-bidirectional-UDS-connect-check.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0012-Smack-bidirectional-UDS-connect-check.patch
deleted file mode 100644 (file)
index 5bb9f31..0000000
+++ /dev/null
@@ -1,206 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0012-drm-i915-read-out-hw-state-earlier-v2.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0012-drm-i915-read-out-hw-state-earlier-v2.patch
new file mode 100644 (file)
index 0000000..b66c471
--- /dev/null
@@ -0,0 +1,50 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0013-Smack-Verify-read-access-on-file-open-v3.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0013-Smack-Verify-read-access-on-file-open-v3.patch
deleted file mode 100644 (file)
index 5cf1737..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0013-drm-i915-re-add-locking-around-hw-state-readout.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0013-drm-i915-re-add-locking-around-hw-state-readout.patch
new file mode 100644 (file)
index 0000000..5a82466
--- /dev/null
@@ -0,0 +1,42 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0014-Warning-in-scanf-string-typing.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0014-Warning-in-scanf-string-typing.patch
deleted file mode 100644 (file)
index 3d9c4c3..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0014-drm-i915-add-plane_config-fetching-infrastructure-v2.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0014-drm-i915-add-plane_config-fetching-infrastructure-v2.patch
new file mode 100644 (file)
index 0000000..031d5ee
--- /dev/null
@@ -0,0 +1,185 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0015-Smack-fix-behavior-of-smack_inode_listsecurity.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0015-Smack-fix-behavior-of-smack_inode_listsecurity.patch
deleted file mode 100644 (file)
index c7bf1af..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0015-drm-i915-get_plane_config-for-i9xx-v13.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0015-drm-i915-get_plane_config-for-i9xx-v13.patch
new file mode 100644 (file)
index 0000000..d878ac2
--- /dev/null
@@ -0,0 +1,126 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0016-Smack-handle-zero-length-security-labels-without-pan.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0016-Smack-handle-zero-length-security-labels-without-pan.patch
deleted file mode 100644 (file)
index 6bb276a..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0016-drm-i915-get_plane_config-support-for-ILK-v3.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0016-drm-i915-get_plane_config-support-for-ILK-v3.patch
new file mode 100644 (file)
index 0000000..02dadba
--- /dev/null
@@ -0,0 +1,107 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0017-Smack-remove-unneeded-NULL-termination-from-securtit.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0017-Smack-remove-unneeded-NULL-termination-from-securtit.patch
deleted file mode 100644 (file)
index 8473d95..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0017-drm-i915-Wrap-the-preallocated-BIOS-framebuffer-and-.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0017-drm-i915-Wrap-the-preallocated-BIOS-framebuffer-and-.patch
new file mode 100644 (file)
index 0000000..749d887
--- /dev/null
@@ -0,0 +1,333 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0018-Smack-Fix-setting-label-on-successful-file-open.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0018-Smack-Fix-setting-label-on-successful-file-open.patch
deleted file mode 100644 (file)
index 10ce5da..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0018-drm-i915-preserve-SSC-if-previously-set.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0018-drm-i915-preserve-SSC-if-previously-set.patch
new file mode 100644 (file)
index 0000000..822f104
--- /dev/null
@@ -0,0 +1,41 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0019-drm-i915-don-t-bother-enabling-swizzle-bits-on-gen7.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0019-drm-i915-don-t-bother-enabling-swizzle-bits-on-gen7.patch
new file mode 100644 (file)
index 0000000..d3920ee
--- /dev/null
@@ -0,0 +1,60 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0019-perf-tools-define-_DEFAULT_SOURCE-for-glibc_2.20.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0019-perf-tools-define-_DEFAULT_SOURCE-for-glibc_2.20.patch
deleted file mode 100644 (file)
index a24d246..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0020-SMACK-Fix-wrong-copy-size.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0020-SMACK-Fix-wrong-copy-size.patch
deleted file mode 100644 (file)
index a16b20d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-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
-
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0020-drm-i915-use-current-mode-if-the-size-matches-the-pr.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0020-drm-i915-use-current-mode-if-the-size-matches-the-pr.patch
new file mode 100644 (file)
index 0000000..9c85598
--- /dev/null
@@ -0,0 +1,110 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0021-drm-i915-remove-early-fb-allocation-dependency-on-CO.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0021-drm-i915-remove-early-fb-allocation-dependency-on-CO.patch
new file mode 100644 (file)
index 0000000..8e33936
--- /dev/null
@@ -0,0 +1,386 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0023-drm-i915-Use-the-first-mode-if-there-is-no-preferred.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0023-drm-i915-Use-the-first-mode-if-there-is-no-preferred.patch
new file mode 100644 (file)
index 0000000..d88c8c7
--- /dev/null
@@ -0,0 +1,82 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0024-PATCH-drm-i915-vlv-DP_SINK_COUNT-is-not-reliable-for.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0024-PATCH-drm-i915-vlv-DP_SINK_COUNT-is-not-reliable-for.patch
new file mode 100644 (file)
index 0000000..c2769af
--- /dev/null
@@ -0,0 +1,48 @@
+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,
+                                                   &reg, 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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0034-Export-V4L2-APIs-to-support-early-camera.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0034-Export-V4L2-APIs-to-support-early-camera.patch
new file mode 100644 (file)
index 0000000..8765fa4
--- /dev/null
@@ -0,0 +1,89 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0035-Add-a-new-v4l2-API-to-enumerate-camera-devs.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0035-Add-a-new-v4l2-API-to-enumerate-camera-devs.patch
new file mode 100644 (file)
index 0000000..f5c628e
--- /dev/null
@@ -0,0 +1,72 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0036-Share-drm-resources-between-X-and-early-camera.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0036-Share-drm-resources-between-X-and-early-camera.patch
new file mode 100644 (file)
index 0000000..cec8d02
--- /dev/null
@@ -0,0 +1,66 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0037-Export-drm-APIs-to-support-early-camera.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0037-Export-drm-APIs-to-support-early-camera.patch
new file mode 100644 (file)
index 0000000..dd32db8
--- /dev/null
@@ -0,0 +1,132 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0038-Create-new-DRM-APIs-for-early-camera.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0038-Create-new-DRM-APIs-for-early-camera.patch
new file mode 100644 (file)
index 0000000..ccd8e50
--- /dev/null
@@ -0,0 +1,386 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0039-Implements-v2g-bridge-module-for-early-camera.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0039-Implements-v2g-bridge-module-for-early-camera.patch
new file mode 100644 (file)
index 0000000..9803dec
--- /dev/null
@@ -0,0 +1,1229 @@
+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, &param);
++
++#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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0040-Promote-the-booting-priority-of-scsi-and-ata.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0040-Promote-the-booting-priority-of-scsi-and-ata.patch
new file mode 100644 (file)
index 0000000..e342c45
--- /dev/null
@@ -0,0 +1,44 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0041-move-i915-driver-init-to-late_initcall.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0041-move-i915-driver-init-to-late_initcall.patch
new file mode 100644 (file)
index 0000000..659d602
--- /dev/null
@@ -0,0 +1,30 @@
+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
+
diff --git a/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0045-NFS-pn533-delete-timer-when-polling-is-complete.patch b/meta-tizen-adaptation/meta/recipes-kernel/linux/linux-yocto/0045-NFS-pn533-delete-timer-when-polling-is-complete.patch
new file mode 100644 (file)
index 0000000..5d96141
--- /dev/null
@@ -0,0 +1,66 @@
+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
+
index b966900..df0603a 100644 (file)
@@ -1,11 +1,9 @@
 # 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
@@ -15,22 +13,17 @@ CONFIG_TASKSTATS=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
@@ -39,9 +32,8 @@ CONFIG_RD_XZ=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
@@ -49,17 +41,10 @@ CONFIG_JUMP_LABEL=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
@@ -68,6 +53,7 @@ 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
@@ -78,22 +64,24 @@ CONFIG_HPET_TIMER=y
 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
@@ -110,9 +98,10 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 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
@@ -124,10 +113,8 @@ CONFIG_PCI_PASID=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
@@ -139,12 +126,11 @@ CONFIG_INET=y
 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
@@ -155,13 +141,8 @@ CONFIG_INET_LRO=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
@@ -171,24 +152,14 @@ CONFIG_INET6_ESP=m
 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
@@ -196,21 +167,15 @@ CONFIG_NF_CONNTRACK_FTP=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
@@ -219,8 +184,6 @@ CONFIG_NETFILTER_XT_TARGET_LOG=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
@@ -230,7 +193,6 @@ CONFIG_NETFILTER_XT_MATCH_BPF=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
@@ -241,9 +203,7 @@ CONFIG_NETFILTER_XT_MATCH_DSCP=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
@@ -260,7 +220,6 @@ CONFIG_NETFILTER_XT_MATCH_RATEEST=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
@@ -272,11 +231,9 @@ CONFIG_NF_CONNTRACK_IPV4=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
@@ -305,113 +262,20 @@ CONFIG_IP6_NF_MATCH_RT=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
@@ -432,56 +296,37 @@ CONFIG_BT_HCIVHCI=m
 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
@@ -498,7 +343,7 @@ CONFIG_VMWARE_PVSCSI=m
 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
@@ -507,29 +352,18 @@ CONFIG_PATA_SCH=m
 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
@@ -553,18 +387,16 @@ CONFIG_E100=m
 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
@@ -591,7 +423,6 @@ CONFIG_CICADA_PHY=m
 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
@@ -602,38 +433,22 @@ CONFIG_PPP_FILTER=y
 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
@@ -652,101 +467,33 @@ CONFIG_RT2X00=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
@@ -754,28 +501,21 @@ CONFIG_SERIAL_8250_NR_UARTS=5
 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
@@ -787,293 +527,45 @@ CONFIG_SPI_SPIDEV=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
@@ -1083,40 +575,26 @@ CONFIG_SND_HDA_INTEL=m
 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
@@ -1124,7 +602,6 @@ CONFIG_LOGIG940_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
@@ -1137,10 +614,10 @@ CONFIG_USB_XHCI_HCD=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
@@ -1152,84 +629,38 @@ CONFIG_USB_SERIAL_GENERIC=y
 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
@@ -1250,51 +681,20 @@ CONFIG_FANOTIFY=y
 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
@@ -1333,10 +733,10 @@ CONFIG_NLS_ISO8859_14=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
@@ -1359,29 +759,22 @@ CONFIG_DEBUG_SET_MODULE_RONX=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
@@ -1391,23 +784,17 @@ CONFIG_CRYPTO_CAST6=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
index e850f31..1b57a43 100644 (file)
@@ -1,11 +1,9 @@
 # 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
@@ -15,22 +13,17 @@ CONFIG_TASKSTATS=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
@@ -39,9 +32,8 @@ CONFIG_RD_XZ=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
@@ -49,17 +41,10 @@ CONFIG_JUMP_LABEL=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
@@ -82,13 +67,11 @@ CONFIG_TRANSPARENT_HUGEPAGE=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
@@ -105,7 +88,6 @@ CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
 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
@@ -119,10 +101,8 @@ CONFIG_PCI_PASID=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
@@ -134,12 +114,11 @@ CONFIG_INET=y
 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
@@ -150,13 +129,8 @@ CONFIG_INET_LRO=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
@@ -166,24 +140,14 @@ CONFIG_INET6_ESP=m
 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
@@ -191,21 +155,15 @@ CONFIG_NF_CONNTRACK_FTP=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
@@ -214,8 +172,6 @@ CONFIG_NETFILTER_XT_TARGET_LOG=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
@@ -225,7 +181,6 @@ CONFIG_NETFILTER_XT_MATCH_BPF=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
@@ -236,9 +191,7 @@ CONFIG_NETFILTER_XT_MATCH_DSCP=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
@@ -255,7 +208,6 @@ CONFIG_NETFILTER_XT_MATCH_RATEEST=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
@@ -267,11 +219,9 @@ CONFIG_NF_CONNTRACK_IPV4=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
@@ -300,113 +250,20 @@ CONFIG_IP6_NF_MATCH_RT=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
@@ -427,56 +284,37 @@ CONFIG_BT_HCIVHCI=m
 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
@@ -493,7 +331,7 @@ CONFIG_VMWARE_PVSCSI=m
 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
@@ -502,29 +340,18 @@ CONFIG_PATA_SCH=m
 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
@@ -548,18 +375,16 @@ CONFIG_E100=m
 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
@@ -586,7 +411,6 @@ CONFIG_CICADA_PHY=m
 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
@@ -597,38 +421,22 @@ CONFIG_PPP_FILTER=y
 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
@@ -647,101 +455,33 @@ CONFIG_RT2X00=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
@@ -749,28 +489,20 @@ CONFIG_SERIAL_8250_NR_UARTS=5
 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
@@ -782,293 +514,45 @@ CONFIG_SPI_SPIDEV=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
@@ -1078,40 +562,26 @@ CONFIG_SND_HDA_INTEL=m
 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
@@ -1119,7 +589,6 @@ CONFIG_LOGIG940_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
@@ -1132,10 +601,10 @@ CONFIG_USB_XHCI_HCD=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
@@ -1147,84 +616,38 @@ CONFIG_USB_SERIAL_GENERIC=y
 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
@@ -1245,51 +668,20 @@ CONFIG_FANOTIFY=y
 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
@@ -1328,6 +720,7 @@ CONFIG_NLS_ISO8859_14=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
@@ -1353,63 +746,39 @@ CONFIG_DEBUG_SET_MODULE_RONX=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_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
index f756cf6..8320d45 100644 (file)
@@ -3,32 +3,46 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
 # 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"