diff options
Diffstat (limited to 'bsp/meta-synopsys/recipes-kernel/linux')
19 files changed, 2923 insertions, 0 deletions
diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc.inc b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc.inc new file mode 100644 index 00000000..9ec28f5c --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc.inc @@ -0,0 +1,47 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/linux-arc:" +DESCRIPTION = "Kernel image for the ARC architecture" +SECTION = "kernel" + +LICENSE = "GPLv2" + +inherit kernel + +SRC_URI = "https://www.kernel.org/pub/linux/kernel/v4.x/linux-${PV}.tar.xz \ + file://0002-etnaviv-Make-archtecture-and-platform-agnostic.patch \ + file://0004-ARC-plat-hsdk-Add-support-of-Vivante-GPU.patch \ + file://0006-devres-Really-align-data-field-to-unsigned-long-long.patch \ + file://0007-ETHNAVIV-don-t-print-command-dump.patch \ + file://0006-Use-dev-mmcblk0p2-as-rootfs-storage.patch \ + file://0001-DRM-UDL-get-rid-of-useless-vblank-initialization.patch \ + file://1001-Agl-hsdk-defconfig.patch \ + file://3003-Experimental-ARC-increase-memory-to-1.5GB.patch \ + file://6001-ARC-adjust-memblock_reserve-of-kernel-memory.patch \ + file://8000-ARCv2-support-manual-regfile-save-on-interrupts.patch \ +" +#file://2001-ARC-prevent-showing-irrelevant-exception-info-in-sig.patch +#file://2002-ARC-split-show_faulting_vma-for-logic-and-representa.patch +#file://2003-ARC-ARCv2-Introduce-SmaRT-support.patch +#file://3003-Experimental-ARC-increase-memory-to-1.5GB.patch + +# file://1001-Agl-hsdk-defconfig.patch +# file://5001-Enable-FBDEV_DRM-emulation-for-HSDK.patch + +# file://4001-HSDK-add-highmem-zone.patch +# file://4002-ARC-temporary-disable-IOC.patch +# file://4003-ARC-cache-ops-add-assertions.patch + + +S = "${WORKDIR}/linux-${PV}" + +DEPENDS += " libgcc" +KERNEL_CC_append = " ${TOOLCHAIN_OPTIONS}" + +KERNEL_DEFCONFIG_hsdk = "hsdk" +KERNEL_DEFCONFIG_nsimhs = "nsim_hs" +KERNEL_CONFIG_COMMAND = "oe_runmake -C ${S} O=${B} ${KERNEL_DEFCONFIG}_defconfig" + +KERNEL_CLASSES = "" + +do_configure_append() { + echo 'CONFIG_INITRAMFS_SOURCE=""' >> ${B}/.config +} diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0001-DRM-UDL-get-rid-of-useless-vblank-initialization.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0001-DRM-UDL-get-rid-of-useless-vblank-initialization.patch new file mode 100644 index 00000000..f3af8958 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0001-DRM-UDL-get-rid-of-useless-vblank-initialization.patch @@ -0,0 +1,44 @@ +From 2d98fce2330347051c091d7c05da8cbc9f1a5feb Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Thu, 4 Oct 2018 20:42:12 +0300 +Subject: [PATCH 1/3] DRM: UDL: get rid of useless vblank initialization + +UDL doesn't support vblank functionality so we don't need to +initialize vblank here (we are able to send page flip +completion events even without vblank initialization) + +Moreover current drm_vblank_init call with num_crtcs > 0 causes +sending DRM_EVENT_FLIP_COMPLETE event with zero timestamp every +time. This breaks userspace apps (for example weston) which +relies on timestamp value. + +Cc: stable@vger.kernel.org +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + drivers/gpu/drm/udl/udl_main.c | 7 +------ + 1 file changed, 1 insertion(+), 6 deletions(-) + +diff --git a/drivers/gpu/drm/udl/udl_main.c b/drivers/gpu/drm/udl/udl_main.c +index d518de8f496b..cf5d2dc494ee 100644 +--- a/drivers/gpu/drm/udl/udl_main.c ++++ b/drivers/gpu/drm/udl/udl_main.c +@@ -349,15 +349,10 @@ int udl_driver_load(struct drm_device *dev, unsigned long flags) + if (ret) + goto err; + +- ret = drm_vblank_init(dev, 1); +- if (ret) +- goto err_fb; +- + drm_kms_helper_poll_init(dev); + + return 0; +-err_fb: +- udl_fbdev_cleanup(dev); ++ + err: + if (udl->urbs.count) + udl_free_urb_list(dev); +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0002-etnaviv-Make-archtecture-and-platform-agnostic.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0002-etnaviv-Make-archtecture-and-platform-agnostic.patch new file mode 100644 index 00000000..93c0642b --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0002-etnaviv-Make-archtecture-and-platform-agnostic.patch @@ -0,0 +1,30 @@ +From 2e4fc7cbcb921ec8761b0bd8ddcda1d9a26567de Mon Sep 17 00:00:00 2001 +From: Alexey Brodkin <abrodkin@synopsys.com> +Date: Wed, 10 Oct 2018 18:53:11 +0300 +Subject: [PATCH 2/7] etnaviv: Make archtecture- and platform-agnostic + +Vivante GPU is just an IP-core that could be built-in any +random SoC, moreover this driver doesn't really rely on +any architecture- or platform-specific things so +let's allow everybody to select it in their defconfigs. + +Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> +--- + drivers/gpu/drm/etnaviv/Kconfig | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/drivers/gpu/drm/etnaviv/Kconfig b/drivers/gpu/drm/etnaviv/Kconfig +index 041a77e400d4..21df44b78df3 100644 +--- a/drivers/gpu/drm/etnaviv/Kconfig ++++ b/drivers/gpu/drm/etnaviv/Kconfig +@@ -2,7 +2,6 @@ + config DRM_ETNAVIV + tristate "ETNAVIV (DRM support for Vivante GPU IP cores)" + depends on DRM +- depends on ARCH_MXC || ARCH_DOVE || (ARM && COMPILE_TEST) + depends on MMU + select SHMEM + select SYNC_FILE +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0004-ARC-plat-hsdk-Add-support-of-Vivante-GPU.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0004-ARC-plat-hsdk-Add-support-of-Vivante-GPU.patch new file mode 100644 index 00000000..a174b16d --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0004-ARC-plat-hsdk-Add-support-of-Vivante-GPU.patch @@ -0,0 +1,54 @@ +From 7b63fe0f359d78fa226b3c805a8a8a1772cb5e71 Mon Sep 17 00:00:00 2001 +From: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +Date: Thu, 13 Dec 2018 17:11:57 +0300 +Subject: [PATCH] ARC plat hsdk Add Support of Vivante GPU + +Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +--- + arch/arc/boot/dts/hsdk.dts | 6 ++++++ + arch/arc/configs/hsdk_defconfig | 3 +-- + 2 files changed, 7 insertions(+), 2 deletions(-) + +diff --git a/arch/arc/boot/dts/hsdk.dts b/arch/arc/boot/dts/hsdk.dts +index 3c777a3c114e..014f6bab1cf5 100644 +--- a/arch/arc/boot/dts/hsdk.dts ++++ b/arch/arc/boot/dts/hsdk.dts +@@ -222,6 +222,12 @@ + bus-width = <4>; + dma-coherent; + }; ++ ++ gpu_3d: gpu@90000 { ++ compatible = "vivante,gc"; ++ reg = <0x90000 0x4000>; ++ interrupts = <28>; ++ }; + }; + + memory@80000000 { +diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig +index 2a1d2cbfee1a..fd0ba7298050 100644 +--- a/arch/arc/configs/hsdk_defconfig ++++ b/arch/arc/configs/hsdk_defconfig +@@ -49,6 +49,7 @@ CONFIG_SERIAL_OF_PLATFORM=y + CONFIG_DRM=y + # CONFIG_DRM_FBDEV_EMULATION is not set + CONFIG_DRM_UDL=y ++CONFIG_DRM_ETNAVIV=y + CONFIG_FB=y + CONFIG_FRAMEBUFFER_CONSOLE=y + CONFIG_USB_EHCI_HCD=y +@@ -60,10 +61,8 @@ CONFIG_MMC=y + CONFIG_MMC_SDHCI=y + CONFIG_MMC_SDHCI_PLTFM=y + CONFIG_MMC_DW=y +-# CONFIG_IOMMU_SUPPORT is not set + CONFIG_EXT3_FS=y + CONFIG_VFAT_FS=y +-CONFIG_TMPFS=y + CONFIG_NFS_FS=y + CONFIG_NFS_V3_ACL=y + CONFIG_NLS_CODEPAGE_437=y +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0006-Use-dev-mmcblk0p2-as-rootfs-storage.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0006-Use-dev-mmcblk0p2-as-rootfs-storage.patch new file mode 100644 index 00000000..283cfe15 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0006-Use-dev-mmcblk0p2-as-rootfs-storage.patch @@ -0,0 +1,26 @@ +From 12a10b429e816a6b7fb848ef6eef9db26844856b Mon Sep 17 00:00:00 2001 +From: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +Date: Wed, 24 Oct 2018 22:40:46 +0300 +Subject: [PATCH] Use /dev/mmcblk0p2 as rootfs storage + +Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +--- + arch/arc/boot/dts/hsdk.dts | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arc/boot/dts/hsdk.dts b/arch/arc/boot/dts/hsdk.dts +index e1d608038ff7..4d235b652e7f 100644 +--- a/arch/arc/boot/dts/hsdk.dts ++++ b/arch/arc/boot/dts/hsdk.dts +@@ -22,7 +22,7 @@ + #size-cells = <1>; + + chosen { +- bootargs = "earlycon=uart8250,mmio32,0xf0005000,115200n8 console=ttyS0,115200n8 debug print-fatal-signals=1"; ++ bootargs = "earlycon=uart8250,mmio32,0xf0005000,115200n8 console=ttyS0,115200n8 print-fatal-signals=1 root=/dev/mmcblk0p2 rootwait"; + }; + + aliases { +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0006-devres-Really-align-data-field-to-unsigned-long-long.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0006-devres-Really-align-data-field-to-unsigned-long-long.patch new file mode 100644 index 00000000..349f729c --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0006-devres-Really-align-data-field-to-unsigned-long-long.patch @@ -0,0 +1,42 @@ +From 0b124e661d4dbb1b04031cc37c0359f7344d1bfb Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Wed, 10 Oct 2018 18:53:14 +0300 +Subject: [PATCH 6/7] devres: Really align data field to unsigned long long + +It looks like on most of architectures "data" member of devres struture +gets aligned to 8-byte "unsigned long long" boundary as one may expect: +if we don't explicitly pack a structure then natural alignment +(which matches each member data type) is used. + +But at least on 32-bit ARC architecture ABI requires "long long" types +to be aligned by normal 32-bit word. This makes "data" field aligned to +12 bytes. This is still OK as long as we use 32-bit data only. + +But once we want to use native atomic64_t type (i.e. when we use special +instructions LLOCKD/SCONDD for accessing 64-bit data) we easily hit +misaligned access exception. + +That's because even on CPUs capable of non-aligned data access LL/SC +instructions require strict alignment. + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + drivers/base/devres.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/base/devres.c b/drivers/base/devres.c +index f98a097e73f2..1a444f043c68 100644 +--- a/drivers/base/devres.c ++++ b/drivers/base/devres.c +@@ -25,7 +25,7 @@ struct devres_node { + struct devres { + struct devres_node node; + /* -- 3 pointers */ +- unsigned long long data[]; /* guarantee ull alignment */ ++ unsigned long long data[] __aligned(sizeof(unsigned long long)); /* guarantee ull alignment */ + }; + + struct devres_group { +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0007-ETHNAVIV-don-t-print-command-dump.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0007-ETHNAVIV-don-t-print-command-dump.patch new file mode 100644 index 00000000..dae5280c --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/0007-ETHNAVIV-don-t-print-command-dump.patch @@ -0,0 +1,28 @@ +From eeff10cb77dd9d646bdd09be0135645a0d4b5aa0 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Wed, 10 Oct 2018 18:53:15 +0300 +Subject: [PATCH 7/7] ETHNAVIV: don't print command dump + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + drivers/gpu/drm/etnaviv/etnaviv_buffer.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/gpu/drm/etnaviv/etnaviv_buffer.c b/drivers/gpu/drm/etnaviv/etnaviv_buffer.c +index 7fea74861a87..632acd7d96b4 100644 +--- a/drivers/gpu/drm/etnaviv/etnaviv_buffer.c ++++ b/drivers/gpu/drm/etnaviv/etnaviv_buffer.c +@@ -118,8 +118,8 @@ static void etnaviv_buffer_dump(struct etnaviv_gpu *gpu, + dev_info(gpu->dev, "virt %p phys 0x%08x free 0x%08x\n", + ptr, etnaviv_cmdbuf_get_va(buf) + off, size - len * 4 - off); + +- print_hex_dump(KERN_INFO, "cmd ", DUMP_PREFIX_OFFSET, 16, 4, +- ptr, len * 4, 0); ++// print_hex_dump(KERN_INFO, "cmd ", DUMP_PREFIX_OFFSET, 16, 4, ++// ptr, len * 4, 0); + } + + /* +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/1001-Agl-hsdk-defconfig.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/1001-Agl-hsdk-defconfig.patch new file mode 100644 index 00000000..5ad7a023 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/1001-Agl-hsdk-defconfig.patch @@ -0,0 +1,1199 @@ +From 47d109c814f0ebfdeb95eea4449316d938158f72 Mon Sep 17 00:00:00 2001 +From: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +Date: Thu, 13 Dec 2018 17:12:56 +0300 +Subject: [PATCH] AGL hsdk defconfig + +Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +--- + arch/arc/configs/hsdk_defconfig | 1113 ++++++++++++++++++++++++++++++++++++++- + 1 file changed, 1103 insertions(+), 10 deletions(-) + +diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig +index fd0ba7298050..8b37b4b01ffd 100644 +--- a/arch/arc/configs/hsdk_defconfig ++++ b/arch/arc/configs/hsdk_defconfig +@@ -1,78 +1,1171 @@ ++CONFIG_DEFAULT_HOSTNAME="ARCLinux" + CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y + # CONFIG_CROSS_MEMORY_ATTACH is not set ++CONFIG_AUDIT=y + CONFIG_NO_HZ_IDLE=y + CONFIG_HIGH_RES_TIMERS=y +-CONFIG_IKCONFIG=y ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++CONFIG_TASKSTATS=y ++CONFIG_TASK_DELAY_ACCT=y ++CONFIG_IKCONFIG=m + CONFIG_IKCONFIG_PROC=y ++CONFIG_MEMCG=y ++CONFIG_MEMCG_SWAP=y ++CONFIG_BLK_CGROUP=y ++CONFIG_DEBUG_BLK_CGROUP=y ++CONFIG_CGROUP_PIDS=y ++CONFIG_CGROUP_RDMA=y ++CONFIG_CGROUP_FREEZER=y ++CONFIG_CPUSETS=y ++CONFIG_CGROUP_DEVICE=y ++CONFIG_CGROUP_CPUACCT=y + CONFIG_NAMESPACES=y + # CONFIG_UTS_NS is not set ++CONFIG_USER_NS=y + # CONFIG_PID_NS is not set ++CONFIG_SCHED_AUTOGROUP=y + CONFIG_BLK_DEV_INITRD=y + CONFIG_EMBEDDED=y +-CONFIG_PERF_EVENTS=y + # CONFIG_VM_EVENT_COUNTERS is not set + # CONFIG_COMPAT_BRK is not set + CONFIG_SLAB=y ++CONFIG_PROFILING=y ++CONFIG_OPROFILE=m ++CONFIG_KPROBES=y + CONFIG_MODULES=y + CONFIG_MODULE_UNLOAD=y ++CONFIG_MODVERSIONS=y ++CONFIG_MODULE_SRCVERSION_ALL=y ++CONFIG_PARTITION_ADVANCED=y ++CONFIG_MAC_PARTITION=y ++CONFIG_CFQ_GROUP_IOSCHED=y + CONFIG_ARC_SOC_HSDK=y + CONFIG_ISA_ARCV2=y + CONFIG_SMP=y + CONFIG_LINUX_LINK_BASE=0x90000000 + CONFIG_LINUX_RAM_BASE=0x80000000 + CONFIG_ARC_BUILTIN_DTB_NAME="hsdk" +-CONFIG_PREEMPT=y ++CONFIG_PREEMPT_VOLUNTARY=y ++CONFIG_BINFMT_MISC=m + # CONFIG_COMPACTION is not set ++CONFIG_CLEANCACHE=y ++CONFIG_FRONTSWAP=y ++CONFIG_CMA=y ++CONFIG_ZSMALLOC=m ++CONFIG_PGTABLE_MAPPING=y + CONFIG_NET=y + CONFIG_PACKET=y + CONFIG_UNIX=y ++CONFIG_XFRM_USER=y ++CONFIG_NET_KEY=m + CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_IP_MULTIPLE_TABLES=y ++CONFIG_IP_ROUTE_MULTIPATH=y ++CONFIG_IP_ROUTE_VERBOSE=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_RARP=y ++CONFIG_NET_IPIP=m ++CONFIG_NET_IPGRE_DEMUX=m ++CONFIG_NET_IPGRE=m ++CONFIG_IP_MROUTE=y ++CONFIG_IP_MROUTE_MULTIPLE_TABLES=y ++CONFIG_IP_PIMSM_V1=y ++CONFIG_IP_PIMSM_V2=y ++CONFIG_SYN_COOKIES=y ++CONFIG_INET_AH=m ++CONFIG_INET_ESP=m ++CONFIG_INET_IPCOMP=m ++CONFIG_INET_XFRM_MODE_TRANSPORT=m ++CONFIG_INET_XFRM_MODE_TUNNEL=m ++CONFIG_INET_XFRM_MODE_BEET=m ++CONFIG_INET_DIAG=m ++CONFIG_TCP_CONG_ADVANCED=y ++CONFIG_TCP_CONG_BBR=m ++CONFIG_IPV6=m ++CONFIG_IPV6_ROUTER_PREF=y ++CONFIG_IPV6_ROUTE_INFO=y ++CONFIG_INET6_AH=m ++CONFIG_INET6_ESP=m ++CONFIG_INET6_IPCOMP=m ++CONFIG_IPV6_SIT_6RD=y ++CONFIG_IPV6_TUNNEL=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_NETFILTER=y ++CONFIG_NF_CONNTRACK=m ++CONFIG_NF_CONNTRACK_ZONES=y ++CONFIG_NF_CONNTRACK_EVENTS=y ++CONFIG_NF_CONNTRACK_TIMESTAMP=y ++CONFIG_NF_CONNTRACK_AMANDA=m ++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_NETFILTER_XT_SET=m ++CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m ++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m ++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m ++CONFIG_NETFILTER_XT_TARGET_DSCP=m ++CONFIG_NETFILTER_XT_TARGET_HMARK=m ++CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m ++CONFIG_NETFILTER_XT_TARGET_LED=m ++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_NOTRACK=m ++CONFIG_NETFILTER_XT_TARGET_TEE=m ++CONFIG_NETFILTER_XT_TARGET_TPROXY=m ++CONFIG_NETFILTER_XT_TARGET_TRACE=m ++CONFIG_NETFILTER_XT_TARGET_TCPMSS=m ++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m ++CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m ++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 ++CONFIG_NETFILTER_XT_MATCH_CPU=m ++CONFIG_NETFILTER_XT_MATCH_DCCP=m ++CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m ++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_IPRANGE=m ++CONFIG_NETFILTER_XT_MATCH_IPVS=m ++CONFIG_NETFILTER_XT_MATCH_LENGTH=m ++CONFIG_NETFILTER_XT_MATCH_LIMIT=m ++CONFIG_NETFILTER_XT_MATCH_MAC=m ++CONFIG_NETFILTER_XT_MATCH_MARK=m ++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m ++CONFIG_NETFILTER_XT_MATCH_NFACCT=m ++CONFIG_NETFILTER_XT_MATCH_OSF=m ++CONFIG_NETFILTER_XT_MATCH_OWNER=m ++CONFIG_NETFILTER_XT_MATCH_POLICY=m ++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m ++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m ++CONFIG_NETFILTER_XT_MATCH_QUOTA=m ++CONFIG_NETFILTER_XT_MATCH_RATEEST=m ++CONFIG_NETFILTER_XT_MATCH_REALM=m ++CONFIG_NETFILTER_XT_MATCH_RECENT=m ++# CONFIG_NETFILTER_XT_MATCH_SCTP is not set ++CONFIG_NETFILTER_XT_MATCH_STATE=m ++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m ++CONFIG_NETFILTER_XT_MATCH_STRING=m ++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m ++CONFIG_NETFILTER_XT_MATCH_TIME=m ++CONFIG_NETFILTER_XT_MATCH_U32=m ++CONFIG_IP_SET=m ++CONFIG_IP_SET_BITMAP_IP=m ++CONFIG_IP_SET_BITMAP_IPMAC=m ++CONFIG_IP_SET_BITMAP_PORT=m ++CONFIG_IP_SET_HASH_IP=m ++CONFIG_IP_SET_HASH_IPPORT=m ++CONFIG_IP_SET_HASH_IPPORTIP=m ++CONFIG_IP_SET_HASH_IPPORTNET=m ++CONFIG_IP_SET_HASH_NET=m ++CONFIG_IP_SET_HASH_NETPORT=m ++CONFIG_IP_SET_HASH_NETIFACE=m ++CONFIG_IP_SET_LIST_SET=m ++CONFIG_IP_VS=m ++CONFIG_IP_VS_PROTO_TCP=y ++CONFIG_IP_VS_PROTO_UDP=y ++CONFIG_IP_VS_PROTO_ESP=y ++CONFIG_IP_VS_PROTO_AH=y ++CONFIG_IP_VS_PROTO_SCTP=y ++CONFIG_IP_VS_RR=m ++CONFIG_IP_VS_WRR=m ++CONFIG_IP_VS_LC=m ++CONFIG_IP_VS_WLC=m ++CONFIG_IP_VS_LBLC=m ++CONFIG_IP_VS_LBLCR=m ++CONFIG_IP_VS_DH=m ++CONFIG_IP_VS_SH=m ++CONFIG_IP_VS_SED=m ++CONFIG_IP_VS_NQ=m ++CONFIG_IP_VS_FTP=m ++CONFIG_IP_VS_PE_SIP=m ++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_NAT=m ++CONFIG_IP_NF_TARGET_MASQUERADE=m ++CONFIG_IP_NF_TARGET_NETMAP=m ++CONFIG_IP_NF_TARGET_REDIRECT=m ++CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_CLUSTERIP=m ++CONFIG_IP_NF_TARGET_ECN=m ++CONFIG_IP_NF_TARGET_TTL=m ++CONFIG_IP_NF_RAW=m ++CONFIG_IP_NF_SECURITY=m ++CONFIG_IP_NF_ARPTABLES=m ++CONFIG_IP_NF_ARPFILTER=m ++CONFIG_IP_NF_ARP_MANGLE=m ++CONFIG_NF_CONNTRACK_IPV6=m ++CONFIG_IP6_NF_IPTABLES=m ++CONFIG_IP6_NF_MATCH_AH=m ++CONFIG_IP6_NF_MATCH_EUI64=m ++CONFIG_IP6_NF_MATCH_FRAG=m ++CONFIG_IP6_NF_MATCH_OPTS=m ++CONFIG_IP6_NF_MATCH_HL=m ++CONFIG_IP6_NF_MATCH_IPV6HEADER=m ++CONFIG_IP6_NF_MATCH_MH=m ++CONFIG_IP6_NF_MATCH_RPFILTER=m ++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_MANGLE=m ++CONFIG_IP6_NF_RAW=m ++CONFIG_IP6_NF_SECURITY=m ++CONFIG_IP6_NF_NAT=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_NFLOG=m ++CONFIG_IP_SCTP=m ++CONFIG_ATM=m ++CONFIG_L2TP=m ++CONFIG_L2TP_V3=y ++CONFIG_L2TP_IP=m ++CONFIG_L2TP_ETH=m ++CONFIG_BRIDGE=m ++CONFIG_VLAN_8021Q=m ++CONFIG_VLAN_8021Q_GVRP=y ++CONFIG_ATALK=m ++CONFIG_6LOWPAN=m ++CONFIG_IEEE802154=m ++CONFIG_IEEE802154_6LOWPAN=m ++CONFIG_MAC802154=m ++CONFIG_NET_SCHED=y ++CONFIG_NET_SCH_CBQ=m ++CONFIG_NET_SCH_HTB=m ++CONFIG_NET_SCH_HFSC=m ++CONFIG_NET_SCH_ATM=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_MARK=y ++CONFIG_NET_CLS_RSVP=m ++CONFIG_NET_CLS_RSVP6=m ++CONFIG_NET_CLS_FLOW=m ++CONFIG_NET_CLS_CGROUP=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_IPSET=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_BATMAN_ADV=m ++CONFIG_OPENVSWITCH=m ++CONFIG_NET_PKTGEN=m ++CONFIG_HAMRADIO=y ++CONFIG_AX25=m ++CONFIG_NETROM=m ++CONFIG_ROSE=m ++CONFIG_MKISS=m ++CONFIG_6PACK=m ++CONFIG_BPQETHER=m ++CONFIG_BAYCOM_SER_FDX=m ++CONFIG_BAYCOM_SER_HDX=m ++CONFIG_YAM=m ++CONFIG_CAN=m ++CONFIG_CAN_VCAN=m ++CONFIG_CAN_SLCAN=m ++CONFIG_CAN_MCP251X=m ++CONFIG_CAN_ESD_USB2=m ++CONFIG_CAN_GS_USB=m ++CONFIG_CAN_KVASER_USB=m ++CONFIG_CAN_PEAK_USB=m ++CONFIG_CAN_8DEV_USB=m ++CONFIG_BT=m ++CONFIG_BT_RFCOMM=m ++CONFIG_BT_RFCOMM_TTY=y ++CONFIG_BT_BNEP=m ++CONFIG_BT_BNEP_MC_FILTER=y ++CONFIG_BT_BNEP_PROTO_FILTER=y ++CONFIG_BT_HIDP=m ++CONFIG_BT_6LOWPAN=m ++CONFIG_BT_LEDS=y ++CONFIG_BT_HCIBTUSB=m ++CONFIG_BT_HCIUART=m ++CONFIG_BT_HCIBFUSB=m ++CONFIG_BT_WILINK=m ++CONFIG_CFG80211=m ++CONFIG_MAC80211=m ++CONFIG_MAC80211_MESH=y ++CONFIG_WIMAX=m ++CONFIG_RFKILL=m ++CONFIG_RFKILL_INPUT=y ++CONFIG_NET_9P=m ++CONFIG_NFC=m + CONFIG_DEVTMPFS=y ++CONFIG_DEVTMPFS_MOUNT=y + # CONFIG_STANDALONE is not set + # CONFIG_PREVENT_FIRMWARE_BUILD is not set ++CONFIG_MTD=m ++CONFIG_MTD_BLOCK=m ++CONFIG_MTD_M25P80=m ++CONFIG_MTD_NAND=m ++CONFIG_MTD_SPI_NOR=m ++CONFIG_MTD_UBI=m ++CONFIG_ZRAM=m ++CONFIG_BLK_DEV_LOOP=y ++CONFIG_BLK_DEV_CRYPTOLOOP=m ++CONFIG_BLK_DEV_NBD=y ++CONFIG_BLK_DEV_RAM=y ++CONFIG_CDROM_PKTCDVD=m ++CONFIG_ATA_OVER_ETH=m ++CONFIG_EEPROM_AT24=m ++CONFIG_TI_ST=m + CONFIG_SCSI=y ++# CONFIG_SCSI_PROC_FS is not set + CONFIG_BLK_DEV_SD=y ++CONFIG_CHR_DEV_ST=m ++CONFIG_CHR_DEV_OSST=m ++CONFIG_BLK_DEV_SR=m ++CONFIG_CHR_DEV_SG=m ++CONFIG_SCSI_ISCSI_ATTRS=y ++CONFIG_ISCSI_TCP=m ++CONFIG_ISCSI_BOOT_SYSFS=m ++CONFIG_MD=y ++CONFIG_MD_LINEAR=m ++CONFIG_BLK_DEV_DM=m ++CONFIG_DM_CRYPT=m ++CONFIG_DM_SNAPSHOT=m ++CONFIG_DM_THIN_PROVISIONING=m ++CONFIG_DM_MIRROR=m ++CONFIG_DM_LOG_USERSPACE=m ++CONFIG_DM_RAID=m ++CONFIG_DM_ZERO=m ++CONFIG_DM_DELAY=m + CONFIG_NETDEVICES=y ++CONFIG_BONDING=m ++CONFIG_DUMMY=m ++CONFIG_IFB=m ++CONFIG_MACVLAN=m ++CONFIG_VXLAN=m ++CONFIG_NETCONSOLE=m ++CONFIG_TUN=m ++CONFIG_VETH=m ++CONFIG_ENC28J60=m + CONFIG_STMMAC_ETH=y ++CONFIG_MDIO_BITBANG=m + CONFIG_MICREL_PHY=y +-CONFIG_INPUT_EVDEV=y ++CONFIG_PPP=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_FILTER=y ++CONFIG_PPP_MPPE=m ++CONFIG_PPP_MULTILINK=y ++CONFIG_PPPOATM=m ++CONFIG_PPPOE=m ++CONFIG_PPPOL2TP=m ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_SLIP=m ++CONFIG_SLIP_COMPRESSED=y ++CONFIG_SLIP_SMART=y ++CONFIG_USB_CATC=m ++CONFIG_USB_KAWETH=m ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m ++CONFIG_USB_RTL8152=m ++CONFIG_USB_LAN78XX=m ++CONFIG_USB_USBNET=y ++CONFIG_USB_NET_AX8817X=m ++CONFIG_USB_NET_AX88179_178A=m ++CONFIG_USB_NET_CDCETHER=m ++CONFIG_USB_NET_CDC_EEM=m ++CONFIG_USB_NET_CDC_NCM=m ++CONFIG_USB_NET_HUAWEI_CDC_NCM=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=y ++CONFIG_USB_NET_GL620A=m ++CONFIG_USB_NET_NET1080=m ++CONFIG_USB_NET_PLUSB=m ++CONFIG_USB_NET_MCS7830=m ++CONFIG_USB_NET_CDC_SUBSET=m ++CONFIG_USB_ALI_M5632=y ++CONFIG_USB_AN2720=y ++CONFIG_USB_EPSON2888=y ++CONFIG_USB_KC2190=y ++CONFIG_USB_NET_ZAURUS=m ++CONFIG_USB_NET_CX82310_ETH=m ++CONFIG_USB_NET_KALMIA=m ++CONFIG_USB_NET_QMI_WWAN=m ++CONFIG_USB_HSO=m ++CONFIG_USB_NET_INT51X1=m ++CONFIG_USB_IPHETH=m ++CONFIG_USB_SIERRA_NET=m ++CONFIG_USB_VL600=m ++CONFIG_ATH9K=m ++CONFIG_ATH9K_HTC=m ++CONFIG_CARL9170=m ++CONFIG_ATH6KL=m ++CONFIG_ATH6KL_USB=m ++CONFIG_AR5523=m ++CONFIG_AT76C50X_USB=m ++CONFIG_B43=m ++# CONFIG_B43_PHY_N is not set ++CONFIG_B43LEGACY=m ++CONFIG_BRCMFMAC=m ++CONFIG_BRCMFMAC_USB=y ++CONFIG_BRCMDBG=y ++CONFIG_HOSTAP=m ++CONFIG_P54_COMMON=m ++CONFIG_P54_USB=m ++CONFIG_LIBERTAS=m ++CONFIG_LIBERTAS_USB=m ++CONFIG_LIBERTAS_SDIO=m ++CONFIG_LIBERTAS_THINFIRM=m ++CONFIG_LIBERTAS_THINFIRM_USB=m ++CONFIG_MWIFIEX=m ++CONFIG_MWIFIEX_SDIO=m ++CONFIG_MT7601U=m ++CONFIG_RT2X00=m ++CONFIG_RT2500USB=m ++CONFIG_RT73USB=m ++CONFIG_RT2800USB=m ++CONFIG_RT2800USB_RT3573=y ++CONFIG_RT2800USB_RT53XX=y ++CONFIG_RT2800USB_RT55XX=y ++CONFIG_RT2800USB_UNKNOWN=y ++CONFIG_RTL8187=m ++CONFIG_RTL8192CU=m ++CONFIG_RTL8XXXU=m ++CONFIG_USB_ZD1201=m ++CONFIG_ZD1211RW=m ++CONFIG_MAC80211_HWSIM=m ++CONFIG_USB_NET_RNDIS_WLAN=m ++CONFIG_WIMAX_I2400M_USB=m ++CONFIG_IEEE802154_AT86RF230=m ++CONFIG_IEEE802154_MRF24J40=m ++CONFIG_IEEE802154_CC2520=m ++CONFIG_INPUT_POLLDEV=m ++CONFIG_INPUT_JOYDEV=y ++CONFIG_INPUT_EVDEV=m + # CONFIG_INPUT_KEYBOARD is not set + # CONFIG_INPUT_MOUSE is not set +-# CONFIG_SERIO is not set ++CONFIG_INPUT_JOYSTICK=y ++CONFIG_JOYSTICK_ADI=y ++CONFIG_JOYSTICK_IFORCE=m ++CONFIG_JOYSTICK_IFORCE_USB=y ++CONFIG_JOYSTICK_XPAD=m ++CONFIG_JOYSTICK_XPAD_FF=y ++CONFIG_JOYSTICK_XPAD_LEDS=y ++CONFIG_INPUT_TOUCHSCREEN=y ++CONFIG_TOUCHSCREEN_ADS7846=m ++CONFIG_TOUCHSCREEN_EGALAX=m ++CONFIG_TOUCHSCREEN_GOODIX=m ++CONFIG_TOUCHSCREEN_EDT_FT5X06=m ++CONFIG_TOUCHSCREEN_USB_COMPOSITE=m ++CONFIG_TOUCHSCREEN_STMPE=m ++CONFIG_INPUT_MISC=y ++CONFIG_INPUT_AD714X=m ++CONFIG_INPUT_ATI_REMOTE2=m ++CONFIG_INPUT_KEYSPAN_REMOTE=m ++CONFIG_INPUT_POWERMATE=m ++CONFIG_INPUT_YEALINK=m ++CONFIG_INPUT_CM109=m ++CONFIG_INPUT_UINPUT=y ++CONFIG_INPUT_GPIO_ROTARY_ENCODER=m ++CONFIG_INPUT_ADXL34X=m ++CONFIG_INPUT_CMA3000=m ++CONFIG_SERIO=m ++CONFIG_SERIO_RAW=m ++CONFIG_GAMEPORT_NS558=m ++CONFIG_GAMEPORT_L4=m + # CONFIG_LEGACY_PTYS is not set + CONFIG_SERIAL_8250=y + CONFIG_SERIAL_8250_CONSOLE=y ++# CONFIG_SERIAL_8250_DMA is not set + CONFIG_SERIAL_8250_DW=y + CONFIG_SERIAL_OF_PLATFORM=y +-# CONFIG_HW_RANDOM is not set +-# CONFIG_HWMON is not set ++CONFIG_TTY_PRINTK=y ++CONFIG_HW_RANDOM=y ++CONFIG_RAW_DRIVER=y ++CONFIG_I2C_CHARDEV=m ++CONFIG_I2C_GPIO=m ++CONFIG_I2C_ROBOTFUZZ_OSIF=m ++CONFIG_SPI=y ++CONFIG_SPI_SPIDEV=m ++CONFIG_PPS_CLIENT_LDISC=m ++CONFIG_PPS_CLIENT_GPIO=m ++CONFIG_GPIOLIB=y ++CONFIG_GPIO_SYSFS=y ++CONFIG_GPIO_ARIZONA=m ++CONFIG_GPIO_STMPE=y ++CONFIG_W1=m ++CONFIG_W1_MASTER_DS2490=m ++CONFIG_W1_MASTER_DS2482=m ++CONFIG_W1_MASTER_DS1WM=m ++CONFIG_W1_MASTER_GPIO=m ++CONFIG_W1_SLAVE_THERM=m ++CONFIG_W1_SLAVE_SMEM=m ++CONFIG_W1_SLAVE_DS2408=m ++CONFIG_W1_SLAVE_DS2413=m ++CONFIG_W1_SLAVE_DS2406=m ++CONFIG_W1_SLAVE_DS2423=m ++CONFIG_W1_SLAVE_DS2431=m ++CONFIG_W1_SLAVE_DS2433=m ++CONFIG_W1_SLAVE_DS2438=m ++CONFIG_W1_SLAVE_DS2760=m ++CONFIG_W1_SLAVE_DS2780=m ++CONFIG_W1_SLAVE_DS2781=m ++CONFIG_W1_SLAVE_DS28E04=m ++CONFIG_POWER_RESET=y ++CONFIG_POWER_RESET_GPIO=y ++CONFIG_BATTERY_DS2760=m ++CONFIG_HWMON=m ++CONFIG_SENSORS_JC42=m ++CONFIG_SENSORS_LM75=m ++CONFIG_SENSORS_SHT21=m ++CONFIG_SENSORS_SHTC1=m ++CONFIG_SENSORS_ADS1015=m ++CONFIG_SENSORS_INA2XX=m ++CONFIG_SENSORS_TMP102=m ++CONFIG_WATCHDOG=y ++CONFIG_GPIO_WATCHDOG=m ++CONFIG_MFD_STMPE=y ++CONFIG_STMPE_SPI=y ++CONFIG_MFD_ARIZONA_I2C=m ++CONFIG_MFD_ARIZONA_SPI=m ++CONFIG_MFD_WM5102=y ++CONFIG_REGULATOR=y ++CONFIG_REGULATOR_FIXED_VOLTAGE=m ++CONFIG_RC_CORE=y ++CONFIG_LIRC=y ++CONFIG_RC_DECODERS=y ++CONFIG_IR_RC5_DECODER=m ++CONFIG_IR_RC6_DECODER=m ++CONFIG_IR_JVC_DECODER=m ++CONFIG_IR_SONY_DECODER=m ++CONFIG_IR_SANYO_DECODER=m ++CONFIG_IR_SHARP_DECODER=m ++CONFIG_IR_MCE_KBD_DECODER=m ++CONFIG_IR_XMP_DECODER=m ++CONFIG_IR_IMON_DECODER=m ++CONFIG_RC_DEVICES=y ++CONFIG_RC_ATI_REMOTE=m ++CONFIG_IR_HIX5HD2=m ++CONFIG_IR_IMON=m ++CONFIG_IR_IMON_RAW=m ++CONFIG_IR_MCEUSB=m ++CONFIG_IR_REDRAT3=m ++CONFIG_IR_SPI=m ++CONFIG_IR_STREAMZAP=m ++CONFIG_IR_IGORPLUGUSB=m ++CONFIG_IR_IGUANA=m ++CONFIG_IR_TTUSBIR=m ++CONFIG_RC_LOOPBACK=m ++CONFIG_IR_GPIO_CIR=m ++CONFIG_IR_GPIO_TX=m ++CONFIG_IR_PWM_TX=m ++CONFIG_IR_SERIAL=m ++CONFIG_IR_SIR=m ++CONFIG_MEDIA_SUPPORT=m ++CONFIG_MEDIA_CAMERA_SUPPORT=y ++CONFIG_MEDIA_ANALOG_TV_SUPPORT=y ++CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y ++CONFIG_MEDIA_RADIO_SUPPORT=y ++CONFIG_MEDIA_CONTROLLER=y ++CONFIG_MEDIA_USB_SUPPORT=y ++CONFIG_USB_VIDEO_CLASS=m ++CONFIG_USB_M5602=m ++CONFIG_USB_STV06XX=m ++CONFIG_USB_GL860=m ++CONFIG_USB_GSPCA_BENQ=m ++CONFIG_USB_GSPCA_CONEX=m ++CONFIG_USB_GSPCA_CPIA1=m ++CONFIG_USB_GSPCA_DTCS033=m ++CONFIG_USB_GSPCA_ETOMS=m ++CONFIG_USB_GSPCA_FINEPIX=m ++CONFIG_USB_GSPCA_JEILINJ=m ++CONFIG_USB_GSPCA_JL2005BCD=m ++CONFIG_USB_GSPCA_KINECT=m ++CONFIG_USB_GSPCA_KONICA=m ++CONFIG_USB_GSPCA_MARS=m ++CONFIG_USB_GSPCA_MR97310A=m ++CONFIG_USB_GSPCA_NW80X=m ++CONFIG_USB_GSPCA_OV519=m ++CONFIG_USB_GSPCA_OV534=m ++CONFIG_USB_GSPCA_OV534_9=m ++CONFIG_USB_GSPCA_PAC207=m ++CONFIG_USB_GSPCA_PAC7302=m ++CONFIG_USB_GSPCA_PAC7311=m ++CONFIG_USB_GSPCA_SE401=m ++CONFIG_USB_GSPCA_SN9C2028=m ++CONFIG_USB_GSPCA_SN9C20X=m ++CONFIG_USB_GSPCA_SONIXB=m ++CONFIG_USB_GSPCA_SONIXJ=m ++CONFIG_USB_GSPCA_SPCA500=m ++CONFIG_USB_GSPCA_SPCA501=m ++CONFIG_USB_GSPCA_SPCA505=m ++CONFIG_USB_GSPCA_SPCA506=m ++CONFIG_USB_GSPCA_SPCA508=m ++CONFIG_USB_GSPCA_SPCA561=m ++CONFIG_USB_GSPCA_SPCA1528=m ++CONFIG_USB_GSPCA_SQ905=m ++CONFIG_USB_GSPCA_SQ905C=m ++CONFIG_USB_GSPCA_SQ930X=m ++CONFIG_USB_GSPCA_STK014=m ++CONFIG_USB_GSPCA_STK1135=m ++CONFIG_USB_GSPCA_STV0680=m ++CONFIG_USB_GSPCA_SUNPLUS=m ++CONFIG_USB_GSPCA_T613=m ++CONFIG_USB_GSPCA_TOPRO=m ++CONFIG_USB_GSPCA_TV8532=m ++CONFIG_USB_GSPCA_VC032X=m ++CONFIG_USB_GSPCA_VICAM=m ++CONFIG_USB_GSPCA_XIRLINK_CIT=m ++CONFIG_USB_GSPCA_ZC3XX=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_USBVISION=m ++CONFIG_VIDEO_STK1160_COMMON=m ++CONFIG_VIDEO_GO7007=m ++CONFIG_VIDEO_GO7007_USB=m ++CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m ++CONFIG_VIDEO_AU0828=m ++CONFIG_DVB_USB_V2=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_MXL111SF=m ++CONFIG_DVB_USB_DVBSKY=m ++CONFIG_SMS_USB_DRV=m ++CONFIG_DVB_B2C2_FLEXCOP_USB=m ++CONFIG_DVB_AS102=m ++CONFIG_VIDEO_EM28XX=m ++CONFIG_VIDEO_EM28XX_V4L2=m ++CONFIG_VIDEO_EM28XX_ALSA=m ++CONFIG_VIDEO_EM28XX_DVB=m ++CONFIG_RADIO_SI4713=m ++CONFIG_I2C_SI4713=m ++CONFIG_USB_MR800=m ++CONFIG_USB_DSBR=m ++CONFIG_RADIO_SHARK=m ++CONFIG_RADIO_SHARK2=m ++CONFIG_USB_KEENE=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_MEDIA_SUBDRV_AUTOSELECT is not set ++CONFIG_VIDEO_UDA1342=m ++CONFIG_VIDEO_SONY_BTF_MPX=m ++CONFIG_VIDEO_TVP5150=m ++CONFIG_VIDEO_TW2804=m ++CONFIG_VIDEO_TW9903=m ++CONFIG_VIDEO_TW9906=m ++CONFIG_VIDEO_OV7640=m ++CONFIG_VIDEO_MT9V011=m + CONFIG_DRM=y + # CONFIG_DRM_FBDEV_EMULATION is not set + CONFIG_DRM_UDL=y + CONFIG_DRM_ETNAVIV=y + CONFIG_FB=y ++# CONFIG_LCD_CLASS_DEVICE is not set ++# CONFIG_BACKLIGHT_GENERIC is not set + CONFIG_FRAMEBUFFER_CONSOLE=y ++CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y ++CONFIG_LOGO=y ++# CONFIG_LOGO_LINUX_MONO is not set ++# CONFIG_LOGO_LINUX_VGA16 is not set ++CONFIG_SOUND=y ++CONFIG_SND=m ++CONFIG_SND_HRTIMER=m ++CONFIG_SND_SEQUENCER=m ++CONFIG_SND_SEQ_DUMMY=m ++CONFIG_SND_DUMMY=m ++CONFIG_SND_ALOOP=m ++CONFIG_SND_VIRMIDI=m ++CONFIG_SND_MTPAV=m ++CONFIG_SND_SERIAL_U16550=m ++CONFIG_SND_MPU401=m ++CONFIG_SND_USB_AUDIO=m ++CONFIG_SND_USB_UA101=m ++CONFIG_SND_USB_CAIAQ=m ++CONFIG_SND_USB_CAIAQ_INPUT=y ++CONFIG_SND_USB_6FIRE=m ++CONFIG_SND_SOC=m ++CONFIG_SND_SOC_ADAU1701=m ++CONFIG_SND_SOC_ADAU7002=m ++CONFIG_SND_SOC_AK4554=m ++CONFIG_SND_SOC_CS42XX8_I2C=m ++CONFIG_SND_SOC_PCM512x_I2C=m ++CONFIG_SND_SOC_SGTL5000=m ++CONFIG_SND_SOC_SPDIF=m ++CONFIG_SND_SOC_WM8731=m ++CONFIG_SND_SOC_WM8741=m ++CONFIG_SND_SOC_WM8804_I2C=m ++CONFIG_SND_SOC_TPA6130A2=m ++CONFIG_SND_SIMPLE_CARD=m ++CONFIG_HID_BATTERY_STRENGTH=y ++CONFIG_HIDRAW=y ++CONFIG_UHID=m ++CONFIG_HID_A4TECH=m ++CONFIG_HID_ACRUX=m ++CONFIG_HID_APPLE=m ++CONFIG_HID_BELKIN=m ++CONFIG_HID_BETOP_FF=m ++CONFIG_HID_CHERRY=m ++CONFIG_HID_CHICONY=m ++CONFIG_HID_CYPRESS=m ++CONFIG_HID_DRAGONRISE=m ++CONFIG_HID_EMS_FF=m ++CONFIG_HID_ELECOM=m ++CONFIG_HID_ELO=m ++CONFIG_HID_EZKEY=m ++CONFIG_HID_GEMBIRD=m ++CONFIG_HID_HOLTEK=m ++CONFIG_HID_KEYTOUCH=m ++CONFIG_HID_KYE=m ++CONFIG_HID_UCLOGIC=m ++CONFIG_HID_WALTOP=m ++CONFIG_HID_GYRATION=m ++CONFIG_HID_TWINHAN=m ++CONFIG_HID_KENSINGTON=m ++CONFIG_HID_LCPOWER=m ++CONFIG_HID_LOGITECH=y ++CONFIG_HID_LOGITECH_DJ=m ++CONFIG_HID_LOGITECH_HIDPP=y ++CONFIG_LOGITECH_FF=y ++CONFIG_LOGIRUMBLEPAD2_FF=y ++CONFIG_LOGIG940_FF=y ++CONFIG_HID_MAGICMOUSE=m ++CONFIG_HID_MICROSOFT=m ++CONFIG_HID_MONTEREY=m ++CONFIG_HID_MULTITOUCH=y ++CONFIG_HID_NTRIG=m ++CONFIG_HID_ORTEK=m ++CONFIG_HID_PANTHERLORD=m ++CONFIG_HID_PETALYNX=m ++CONFIG_HID_PICOLCD=m ++CONFIG_HID_ROCCAT=m ++CONFIG_HID_SAMSUNG=m ++CONFIG_HID_SONY=m ++CONFIG_SONY_FF=y ++CONFIG_HID_SPEEDLINK=m ++CONFIG_HID_SUNPLUS=m ++CONFIG_HID_GREENASIA=m ++CONFIG_HID_SMARTJOYPLUS=m ++CONFIG_HID_TOPSEED=m ++CONFIG_HID_THINGM=m ++CONFIG_HID_THRUSTMASTER=m ++CONFIG_HID_WACOM=m ++CONFIG_HID_WIIMOTE=m ++CONFIG_HID_XINMO=m ++CONFIG_HID_ZEROPLUS=m ++CONFIG_HID_ZYDACRON=m ++CONFIG_HID_PID=y ++CONFIG_USB_HIDDEV=y ++CONFIG_USB_ANNOUNCE_NEW_DEVICES=y ++CONFIG_USB_MON=m + CONFIG_USB_EHCI_HCD=y + CONFIG_USB_EHCI_HCD_PLATFORM=y + CONFIG_USB_OHCI_HCD=y + CONFIG_USB_OHCI_HCD_PLATFORM=y ++CONFIG_USB_PRINTER=m + CONFIG_USB_STORAGE=y ++CONFIG_USB_STORAGE_REALTEK=m ++CONFIG_USB_STORAGE_DATAFAB=m ++CONFIG_USB_STORAGE_FREECOM=m ++CONFIG_USB_STORAGE_ISD200=m ++CONFIG_USB_STORAGE_USBAT=m ++CONFIG_USB_STORAGE_SDDR09=m ++CONFIG_USB_STORAGE_SDDR55=m ++CONFIG_USB_STORAGE_JUMPSHOT=m ++CONFIG_USB_STORAGE_ALAUDA=m ++CONFIG_USB_STORAGE_ONETOUCH=m ++CONFIG_USB_STORAGE_KARMA=m ++CONFIG_USB_STORAGE_CYPRESS_ATACB=m ++CONFIG_USB_STORAGE_ENE_UB6250=m ++CONFIG_USB_MDC800=m ++CONFIG_USB_MICROTEK=m ++CONFIG_USBIP_CORE=m ++CONFIG_USBIP_VHCI_HCD=m ++CONFIG_USBIP_HOST=m ++CONFIG_USB_EMI62=m ++CONFIG_USB_EMI26=m ++CONFIG_USB_ADUTUX=m ++CONFIG_USB_SEVSEG=m ++CONFIG_USB_RIO500=m ++CONFIG_USB_LEGOTOWER=m ++CONFIG_USB_LCD=m ++CONFIG_USB_CYPRESS_CY7C63=m ++CONFIG_USB_CYTHERM=m ++CONFIG_USB_IDMOUSE=m ++CONFIG_USB_FTDI_ELAN=m ++CONFIG_USB_LD=m ++CONFIG_USB_TRANCEVIBRATOR=m ++CONFIG_USB_IOWARRIOR=m ++CONFIG_USB_TEST=m ++CONFIG_USB_ISIGHTFW=m ++CONFIG_USB_YUREX=m ++CONFIG_USB_EZUSB_FX2=m ++CONFIG_USB_ATM=m ++CONFIG_USB_SPEEDTOUCH=m ++CONFIG_USB_CXACRU=m ++CONFIG_USB_UEAGLEATM=m ++CONFIG_USB_XUSBATM=m + CONFIG_MMC=y ++CONFIG_MMC_BLOCK_MINORS=32 + CONFIG_MMC_SDHCI=y + CONFIG_MMC_SDHCI_PLTFM=y ++CONFIG_MMC_SPI=m + CONFIG_MMC_DW=y ++CONFIG_LEDS_CLASS=y ++CONFIG_LEDS_GPIO=y ++CONFIG_LEDS_TRIGGER_TIMER=y ++CONFIG_LEDS_TRIGGER_ONESHOT=y ++CONFIG_LEDS_TRIGGER_HEARTBEAT=y ++CONFIG_LEDS_TRIGGER_BACKLIGHT=y ++CONFIG_LEDS_TRIGGER_CPU=y ++CONFIG_LEDS_TRIGGER_GPIO=y ++CONFIG_LEDS_TRIGGER_DEFAULT_ON=y ++CONFIG_LEDS_TRIGGER_TRANSIENT=m ++CONFIG_LEDS_TRIGGER_CAMERA=m ++CONFIG_LEDS_TRIGGER_PANIC=y ++CONFIG_RTC_CLASS=y ++# CONFIG_RTC_HCTOSYS is not set ++CONFIG_RTC_DRV_ABX80X=m ++CONFIG_RTC_DRV_DS1307=m ++CONFIG_RTC_DRV_DS1374=m ++CONFIG_RTC_DRV_DS1672=m ++CONFIG_RTC_DRV_MAX6900=m ++CONFIG_RTC_DRV_RS5C372=m ++CONFIG_RTC_DRV_ISL1208=m ++CONFIG_RTC_DRV_ISL12022=m ++CONFIG_RTC_DRV_X1205=m ++CONFIG_RTC_DRV_PCF8523=m ++CONFIG_RTC_DRV_PCF8563=m ++CONFIG_RTC_DRV_PCF8583=m ++CONFIG_RTC_DRV_M41T80=m ++CONFIG_RTC_DRV_BQ32K=m ++CONFIG_RTC_DRV_S35390A=m ++CONFIG_RTC_DRV_FM3130=m ++CONFIG_RTC_DRV_RX8581=m ++CONFIG_RTC_DRV_RX8025=m ++CONFIG_RTC_DRV_EM3027=m ++CONFIG_RTC_DRV_M41T93=m ++CONFIG_RTC_DRV_M41T94=m ++CONFIG_RTC_DRV_DS1302=m ++CONFIG_RTC_DRV_DS1305=m ++CONFIG_RTC_DRV_DS1390=m ++CONFIG_RTC_DRV_R9701=m ++CONFIG_RTC_DRV_RX4581=m ++CONFIG_RTC_DRV_RS5C348=m ++CONFIG_RTC_DRV_MAX6902=m ++CONFIG_RTC_DRV_PCF2123=m ++CONFIG_RTC_DRV_DS3232=m ++CONFIG_RTC_DRV_PCF2127=m ++CONFIG_RTC_DRV_RV3029C2=m ++CONFIG_DMADEVICES=y ++CONFIG_UIO=m ++CONFIG_UIO_PDRV_GENIRQ=m ++CONFIG_STAGING=y ++CONFIG_PRISM2_USB=m ++CONFIG_R8712U=m ++CONFIG_R8188EU=m ++CONFIG_VT6656=m ++CONFIG_SPEAKUP=m ++CONFIG_SPEAKUP_SYNTH_SOFT=m ++CONFIG_STAGING_MEDIA=y ++CONFIG_FB_TFT=m ++CONFIG_FB_TFT_AGM1264K_FL=m ++CONFIG_FB_TFT_BD663474=m ++CONFIG_FB_TFT_HX8340BN=m ++CONFIG_FB_TFT_HX8347D=m ++CONFIG_FB_TFT_HX8353D=m ++CONFIG_FB_TFT_HX8357D=m ++CONFIG_FB_TFT_ILI9163=m ++CONFIG_FB_TFT_ILI9320=m ++CONFIG_FB_TFT_ILI9325=m ++CONFIG_FB_TFT_ILI9340=m ++CONFIG_FB_TFT_ILI9341=m ++CONFIG_FB_TFT_ILI9481=m ++CONFIG_FB_TFT_ILI9486=m ++CONFIG_FB_TFT_PCD8544=m ++CONFIG_FB_TFT_RA8875=m ++CONFIG_FB_TFT_S6D02A1=m ++CONFIG_FB_TFT_S6D1121=m ++CONFIG_FB_TFT_SSD1289=m ++CONFIG_FB_TFT_SSD1306=m ++CONFIG_FB_TFT_SSD1331=m ++CONFIG_FB_TFT_SSD1351=m ++CONFIG_FB_TFT_ST7735R=m ++CONFIG_FB_TFT_ST7789V=m ++CONFIG_FB_TFT_TINYLCD=m ++CONFIG_FB_TFT_TLS8204=m ++CONFIG_FB_TFT_UC1701=m ++CONFIG_FB_TFT_UPD161704=m ++CONFIG_FB_TFT_WATTEROTT=m ++CONFIG_FB_FLEX=m ++CONFIG_FB_TFT_FBTFT_DEVICE=m ++CONFIG_MAILBOX=y ++# CONFIG_IOMMU_SUPPORT is not set ++CONFIG_EXTCON=m ++CONFIG_EXTCON_ARIZONA=m ++CONFIG_IIO=m ++CONFIG_IIO_BUFFER_CB=m ++CONFIG_MCP320X=m ++CONFIG_MCP3422=m ++CONFIG_DHT11=m ++CONFIG_HDC100X=m ++CONFIG_HTU21=m ++CONFIG_TSL4531=m ++CONFIG_VEML6070=m ++CONFIG_BMP280=m ++CONFIG_PWM=y ++CONFIG_PWM_PCA9685=m + CONFIG_EXT3_FS=y ++CONFIG_EXT4_FS_POSIX_ACL=y ++CONFIG_EXT4_FS_SECURITY=y ++CONFIG_EXT4_ENCRYPTION=y ++CONFIG_EXT4_DEBUG=y ++CONFIG_REISERFS_FS=m ++CONFIG_REISERFS_PROC_INFO=y ++CONFIG_REISERFS_FS_XATTR=y ++CONFIG_REISERFS_FS_POSIX_ACL=y ++CONFIG_REISERFS_FS_SECURITY=y ++CONFIG_JFS_FS=m ++CONFIG_JFS_POSIX_ACL=y ++CONFIG_JFS_SECURITY=y ++CONFIG_JFS_STATISTICS=y ++CONFIG_XFS_FS=m ++CONFIG_XFS_QUOTA=y ++CONFIG_XFS_POSIX_ACL=y ++CONFIG_XFS_RT=y ++CONFIG_GFS2_FS=m ++CONFIG_BTRFS_FS=m ++CONFIG_BTRFS_FS_POSIX_ACL=y ++CONFIG_NILFS2_FS=m ++CONFIG_FANOTIFY=y ++CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y ++CONFIG_QUOTA=y ++CONFIG_AUTOFS4_FS=y ++CONFIG_FUSE_FS=m ++CONFIG_CUSE=m ++CONFIG_OVERLAY_FS=m ++CONFIG_FSCACHE=y ++CONFIG_FSCACHE_STATS=y ++CONFIG_FSCACHE_HISTOGRAM=y ++CONFIG_CACHEFILES=y ++CONFIG_ISO9660_FS=m ++CONFIG_JOLIET=y ++CONFIG_ZISOFS=y ++CONFIG_UDF_FS=m ++CONFIG_MSDOS_FS=y + CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_IOCHARSET="ascii" ++CONFIG_NTFS_FS=m ++CONFIG_NTFS_RW=y ++CONFIG_TMPFS_POSIX_ACL=y ++CONFIG_ECRYPT_FS=m ++CONFIG_HFS_FS=m ++CONFIG_HFSPLUS_FS=m ++CONFIG_JFFS2_FS=m ++CONFIG_JFFS2_SUMMARY=y ++CONFIG_UBIFS_FS=m ++CONFIG_SQUASHFS=m ++CONFIG_SQUASHFS_XATTR=y ++CONFIG_SQUASHFS_LZO=y ++CONFIG_SQUASHFS_XZ=y + CONFIG_NFS_FS=y + CONFIG_NFS_V3_ACL=y ++CONFIG_NFS_V4=y ++CONFIG_NFS_SWAP=y ++CONFIG_ROOT_NFS=y ++CONFIG_NFS_FSCACHE=y ++CONFIG_NFSD=m ++CONFIG_NFSD_V3_ACL=y ++CONFIG_NFSD_V4=y ++CONFIG_CIFS=m ++CONFIG_CIFS_WEAK_PW_HASH=y ++CONFIG_CIFS_UPCALL=y ++CONFIG_CIFS_XATTR=y ++CONFIG_CIFS_POSIX=y ++CONFIG_CIFS_ACL=y ++CONFIG_CIFS_DFS_UPCALL=y ++CONFIG_CIFS_FSCACHE=y ++CONFIG_9P_FS=m ++CONFIG_9P_FS_POSIX_ACL=y ++CONFIG_NLS_DEFAULT="utf8" + CONFIG_NLS_CODEPAGE_437=y +-CONFIG_NLS_ISO8859_1=y ++CONFIG_NLS_CODEPAGE_737=m ++CONFIG_NLS_CODEPAGE_775=m ++CONFIG_NLS_CODEPAGE_850=m ++CONFIG_NLS_CODEPAGE_852=m ++CONFIG_NLS_CODEPAGE_855=m ++CONFIG_NLS_CODEPAGE_857=m ++CONFIG_NLS_CODEPAGE_860=m ++CONFIG_NLS_CODEPAGE_861=m ++CONFIG_NLS_CODEPAGE_862=m ++CONFIG_NLS_CODEPAGE_863=m ++CONFIG_NLS_CODEPAGE_864=m ++CONFIG_NLS_CODEPAGE_865=m ++CONFIG_NLS_CODEPAGE_866=m ++CONFIG_NLS_CODEPAGE_869=m ++CONFIG_NLS_CODEPAGE_936=m ++CONFIG_NLS_CODEPAGE_950=m ++CONFIG_NLS_CODEPAGE_932=m ++CONFIG_NLS_CODEPAGE_949=m ++CONFIG_NLS_CODEPAGE_874=m ++CONFIG_NLS_ISO8859_8=m ++CONFIG_NLS_CODEPAGE_1250=m ++CONFIG_NLS_CODEPAGE_1251=m ++CONFIG_NLS_ASCII=y ++CONFIG_NLS_ISO8859_1=m ++CONFIG_NLS_ISO8859_2=m ++CONFIG_NLS_ISO8859_3=m ++CONFIG_NLS_ISO8859_4=m ++CONFIG_NLS_ISO8859_5=m ++CONFIG_NLS_ISO8859_6=m ++CONFIG_NLS_ISO8859_7=m ++CONFIG_NLS_ISO8859_9=m ++CONFIG_NLS_ISO8859_13=m ++CONFIG_NLS_ISO8859_14=m ++CONFIG_NLS_ISO8859_15=m ++CONFIG_NLS_KOI8_R=m ++CONFIG_NLS_KOI8_U=m ++CONFIG_PRINTK_TIME=y ++CONFIG_BOOT_PRINTK_DELAY=y + # CONFIG_ENABLE_WARN_DEPRECATED is not set + # CONFIG_ENABLE_MUST_CHECK is not set + CONFIG_STRIP_ASM_SYMS=y ++CONFIG_DEBUG_FS=y ++CONFIG_MAGIC_SYSRQ=y ++CONFIG_DEBUG_MEMORY_INIT=y + CONFIG_SOFTLOCKUP_DETECTOR=y + CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10 +-# CONFIG_SCHED_DEBUG is not set +-# CONFIG_DEBUG_PREEMPT is not set ++CONFIG_LATENCYTOP=y + # CONFIG_FTRACE is not set ++CONFIG_PERSISTENT_KEYRINGS=y ++CONFIG_BIG_KEYS=y ++CONFIG_KEY_DH_OPERATIONS=y ++CONFIG_SECURITY=y ++CONFIG_SECURITY_PATH=y ++CONFIG_SECURITY_SMACK=y ++CONFIG_SECURITY_SMACK_BRINGUP=y ++CONFIG_SECURITY_SMACK_NETFILTER=y ++CONFIG_SECURITY_SMACK_APPEND_SIGNALS=y ++CONFIG_INTEGRITY_SIGNATURE=y ++CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y ++CONFIG_IMA=y ++CONFIG_IMA_WRITE_POLICY=y ++CONFIG_IMA_APPRAISE=y ++CONFIG_EVM=y ++CONFIG_EVM_EXTRA_SMACK_XATTRS=y ++CONFIG_EVM_ADD_XATTRS=y ++CONFIG_CRYPTO_USER=m ++CONFIG_CRYPTO_CRYPTD=m + CONFIG_CRYPTO_ECHAINIV=y ++CONFIG_CRYPTO_XCBC=m ++CONFIG_CRYPTO_CRC32=y ++CONFIG_CRYPTO_TGR192=m ++CONFIG_CRYPTO_WP512=m ++CONFIG_CRYPTO_CAST5=m ++CONFIG_CRYPTO_DES=y ++CONFIG_CRYPTO_LZ4=m ++CONFIG_CRYPTO_USER_API_SKCIPHER=m ++# CONFIG_CRYPTO_HW is not set ++CONFIG_CRC_CCITT=y ++CONFIG_CRC_ITU_T=y ++CONFIG_LIBCRC32C=y ++CONFIG_PM=y +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2001-ARC-prevent-showing-irrelevant-exception-info-in-sig.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2001-ARC-prevent-showing-irrelevant-exception-info-in-sig.patch new file mode 100644 index 00000000..3734675b --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2001-ARC-prevent-showing-irrelevant-exception-info-in-sig.patch @@ -0,0 +1,334 @@ +From 3f9fab23bfd4fc2d41df6aaf52855d6bae91d3e5 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Thu, 15 Nov 2018 13:07:12 +0300 +Subject: [PATCH 1/3] ARC: prevent showing irrelevant exception info in signal + message + +We process signals in the end of syscall/exception handler. +If the signal is fatal we print register's content using +show_regs function. show_regs() also prints information about +last exception happened. + +In case of multicore system we can catch the situation when we +will print wrong information about exception. See the example: +______________________________ +CPU-0: started to handle page fault +CPU-1: sent signal to process, which is executed on CPU-0 +CPU-0: ended page fault handle. Started to process signal before + returnig to userspace. Process signal, which is send from + CPU-0. As th signal is fatal we call show_regs(). + show_regs() will show information about last exception + which is *page fault* (instead of "trap" which is used for + signals and happened on CPU-0) + +So we will get message like this: + # ./waitpid02 + potentially unexpected fatal signal 8. + Path: /home/waitpid02 + CPU: 0 PID: 100 Comm: waitpid02 Not tainted 4.10.0-rc4 #2 + task: 9f11c200 task.stack: 9f3ae000 + + [ECR ]: 0x00050200 => Invalid Write @ 0x00000000 by insn @ 0x000123ec + [EFA ]: 0x00000000 + [BLINK ]: 0x123ea + [ERET ]: 0x123ec + @off 0x123ec in [/home/waitpid02] + VMA: 0x00010000 to 0x00016000 + [STAT32]: 0x80080882 : IE U + BTA: 0x000123ea SP: 0x5ffd3db0 FP: 0x00000000 + LPS: 0x20031684 LPE: 0x2003169a LPC: 0x00000006 + [-----other-info-----] + +This message is confusing because it show information about page fault +( [ECR ]: 0x00050200 => Invalid Write ) which is absolutely irrelevant +to signal. + +This situation was reproduced with waitpid02 LTP test. +_____________________________ + +So remove printing information about exceptions from show_regs() +to avoid confusing messages. Print information about exceptions +only in required places instead of show_regs() + +Now we don't print information about exceptions if signal is simply +send by another userspace app. So in case of waitpid02 we will print +next message: +_____________________________ + # ./waitpid02 + potentially unexpected fatal signal 8. + Path: /root/waitpid02 + CPU: 2 PID: 105 Comm: waitpid02 Not tainted 4.18.0-rc8-00002-gde0f6d6aeb53-dirty #17 + [ECR ]: 0x00050100 + [EFA ]: 0x00000000 + [BLINK ]: 0x20001486 + [-----other-info-----] +_____________________________ + +This patch fix +STAR 9001146055: waitpid02: Invalid Write @ 0x00000000 by insn @ 0x000123ec + +NOTE: +To be more clear I give examples of different faults (signal-based, +userspace/kernelspace exception-based) with different values of +"/proc/sys/kernel/print-fatal-signals" option. + +0) NULL pointer access from user space, print-fatal-signals == 1: +------------>8--------------- + # ./arc_hell +Exception: arc_hell[103]: at 0x2003a35c [off 0x2e35c in /lib/libuClibc-1.0.18.so, VMA: 2000c000:20072000] + ECR: 0x00050100 => Invalid Read @ 0x00000000 by insn @ 0x2003a35c +potentially unexpected fatal signal 11. +Path: /root/arc_hell +CPU: 1 PID: 103 Comm: arc_hell Not tainted 4.18.0-rc8-00002-gde0f6d6aeb53-dirty #17 +[ECR ]: 0x00050100 +[EFA ]: 0x00000000 +[BLINK ]: 0x20039ef8 +[ERET ]: 0x2003a35c +[STAT32]: 0x80080882 : IE U +BTA: 0x2003a358 SP: 0x5fa27dc4 FP: 0x5fa27de8 +LPS: 0x2003a628 LPE: 0x2003a62c LPC: 0x00000000 +r00: 0x00000000 r01: 0x200740b0 r02: 0x00000001 +r03: 0x00000007 r04: 0x80808080 r05: 0x2f2f2f2f +r06: 0x7c7a2f43 r07: 0x00000000 r08: 0x1a131100 +r09: 0x2008b1e0 r10: 0x20003a5c r11: 0x20004038 +r12: 0x20039ef8 r13: 0x200740b0 r14: 0x00000000 +r15: 0x200740b0 r16: 0x00000000 r17: 0x0007d468 +r18: 0x0009313a r19: 0x00000000 r20: 0x0009c22c +r21: 0x0009c23c r22: 0x0009ab64 r23: 0x00000000 +r24: 0x0009dfc5 r25: 0x20004b70 + +Segmentation fault +------------>8--------------- + +1) NULL pointer access from user space, print-fatal-signals == 0: +------------>8--------------- + # ./arc_hell +Exception: arc_hell[107]: at 0x2003a35c [off 0x2e35c in /lib/libuClibc-1.0.18.so, VMA: 2000c000:20072000] + ECR: 0x00050100 => Invalid Read @ 0x00000000 by insn @ 0x2003a35c +Segmentation fault +------------>8--------------- + +2) Process killed by signal (waitpid02 test), print-fatal-signals == 1: +------------>8--------------- + # ./waitpid02 +potentially unexpected fatal signal 8. +Path: /root/waitpid02 +CPU: 2 PID: 105 Comm: waitpid02 Not tainted 4.18.0-rc8-00002-gde0f6d6aeb53-dirty #17 +[ECR ]: 0x00050100 +[EFA ]: 0x00000000 +[BLINK ]: 0x20001486 +[ERET ]: 0x2000146c +[STAT32]: 0x80080082 : IE U +BTA: 0x20000fc4 SP: 0x5fa21d64 FP: 0x00000000 +LPS: 0x200524a0 LPE: 0x200524b6 LPC: 0x00000006 +r00: 0x2000c0dc r01: 0x00000018 r02: 0x0001159a +r03: 0x00000001 r04: 0x00000000 r05: 0x00000045 +r06: 0x0000004e r07: 0x01010101 r08: 0x000000dc +r09: 0x200a31e0 r10: 0x20003a5c r11: 0x20004038 +r12: 0x20001486 r13: 0x20004174 r14: 0x07ca2bc0 +r15: 0x20004078 r16: 0x00000000 r17: 0x20004038 +r18: 0x00000001 r19: 0x00000000 r20: 0x0001159a +r21: 0x00000001 r22: 0x00000000 r23: 0x00000004 +r24: 0x2000d1fc r25: 0x20004cd0 +------------>8--------------- + +3) Process killed by signal (waitpid02 test), print-fatal-signals == 0: +------------>8--------------- + # ./waitpid02 +------------>8--------------- + +4) NULL pointer access from kernel space, regardless print-fatal-signals +value: +------------>8--------------- +Oops +Exception: at stmmac_dvr_probe+0x40/0x7e0: + ECR: 0x00050200 => Invalid Write @ 0x00000000 by insn @ 0x90575254 +Path: (null) +CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.18.0-rc8-00002-gde0f6d6aeb53-dirty #11 +[EFA ]: 0x00000000 +[BLINK ]: stmmac_dvr_probe+0x2a/0x7e0 +[ERET ]: stmmac_dvr_probe+0x40/0x7e0 +[STAT32]: 0x80080402 : IE K +BTA: 0x9057523e SP: 0xbf02be40 FP: 0x00000000 +LPS: 0x9073dbcc LPE: 0x9073dbe0 LPC: 0x00000000 +r00: 0xbf1f0000 r01: 0x00000000 r02: 0x00000008 +r03: 0x00000000 r04: 0x00000064 r05: 0x00000000 +r06: 0x00000003 r07: 0x00000004 r08: 0x01010101 +r09: 0x00000031 r10: 0xbf1f0006 r11: 0x00000000 +r12: 0x9057523e + +Stack Trace: + stmmac_dvr_probe+0x40/0x7e0 + dwmac_generic_probe+0x50/0xbc + platform_drv_probe+0x26/0x5c + really_probe+0x3b0/0x464 + __driver_attach+0xd4/0xd8 + bus_for_each_dev+0x3a/0x70 + bus_add_driver+0x12a/0x18c + driver_register+0x56/0xe8 + do_one_initcall+0x2e/0x118 + kernel_init_freeable+0x102/0x194 +------------>8--------------- + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + arch/arc/include/asm/bug.h | 1 + + arch/arc/kernel/traps.c | 3 +++ + arch/arc/kernel/troubleshoot.c | 51 +++++++++++++++++++++++++++++++++--------- + arch/arc/mm/fault.c | 8 +++++++ + 4 files changed, 52 insertions(+), 11 deletions(-) + +diff --git a/arch/arc/include/asm/bug.h b/arch/arc/include/asm/bug.h +index 21ec82466d62..b68f7f82f2d8 100644 +--- a/arch/arc/include/asm/bug.h ++++ b/arch/arc/include/asm/bug.h +@@ -16,6 +16,7 @@ + struct task_struct; + + void show_regs(struct pt_regs *regs); ++void show_exception_mesg(struct pt_regs *regs); + void show_stacktrace(struct task_struct *tsk, struct pt_regs *regs); + void show_kernel_fault_diag(const char *str, struct pt_regs *regs, + unsigned long address); +diff --git a/arch/arc/kernel/traps.c b/arch/arc/kernel/traps.c +index b123558bf0bb..e66fd40296b3 100644 +--- a/arch/arc/kernel/traps.c ++++ b/arch/arc/kernel/traps.c +@@ -49,6 +49,9 @@ unhandled_exception(const char *str, struct pt_regs *regs, siginfo_t *info) + + tsk->thread.fault_address = (__force unsigned int)info->si_addr; + ++ if (unhandled_signal(tsk, info->si_signo)) ++ show_exception_mesg(regs); ++ + force_sig_info(info->si_signo, info, tsk); + + } else { +diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c +index e8d9fb452346..fdfba1942a06 100644 +--- a/arch/arc/kernel/troubleshoot.c ++++ b/arch/arc/kernel/troubleshoot.c +@@ -101,13 +101,13 @@ static void show_faulting_vma(unsigned long address, char *buf) + if (IS_ERR(nm)) + nm = "?"; + } +- pr_info(" @off 0x%lx in [%s]\n" +- " VMA: 0x%08lx to 0x%08lx\n", ++ ++ pr_cont("[off 0x%lx in %s, VMA: %08lx:%08lx] ", + vma->vm_start < TASK_UNMAPPED_BASE ? + address : address - vma->vm_start, + nm, vma->vm_start, vma->vm_end); + } else +- pr_info(" @No matching VMA found\n"); ++ pr_cont("[No matching VMA found] "); + + up_read(&active_mm->mmap_sem); + } +@@ -117,7 +117,7 @@ static void show_ecr_verbose(struct pt_regs *regs) + unsigned int vec, cause_code; + unsigned long address; + +- pr_info("\n[ECR ]: 0x%08lx => ", regs->event); ++ pr_cont("\n ECR: 0x%08lx => ", regs->event); + + /* For Data fault, this is data address not instruction addr */ + address = current->thread.fault_address; +@@ -165,10 +165,42 @@ static void show_ecr_verbose(struct pt_regs *regs) + } + } + ++static inline void show_exception_mesg_u(struct pt_regs *regs) ++{ ++ struct task_struct *tsk = current; ++ char *buf; ++ ++ pr_info("Exception: %s[%d]: at %pS ", ++ tsk->comm, task_pid_nr(tsk), (void *)regs->ret); ++ ++ buf = (char *)__get_free_page(GFP_NOWAIT); ++ if (buf) { ++ show_faulting_vma(regs->ret, buf); ++ free_page((unsigned long)buf); ++ } ++ ++ show_ecr_verbose(regs); ++} ++ ++static inline void show_exception_mesg_k(struct pt_regs *regs) ++{ ++ pr_info("Exception: at %pS:", (void *)regs->ret); ++ ++ show_ecr_verbose(regs); ++} ++ + /************************************************************************ + * API called by rest of kernel + ***********************************************************************/ + ++void show_exception_mesg(struct pt_regs *regs) ++{ ++ if (user_mode(regs)) ++ show_exception_mesg_u(regs); ++ else ++ show_exception_mesg_k(regs); ++} ++ + void show_regs(struct pt_regs *regs) + { + struct task_struct *tsk = current; +@@ -182,15 +214,10 @@ void show_regs(struct pt_regs *regs) + print_task_path_n_nm(tsk, buf); + show_regs_print_info(KERN_INFO); + +- show_ecr_verbose(regs); +- +- pr_info("[EFA ]: 0x%08lx\n[BLINK ]: %pS\n[ERET ]: %pS\n", +- current->thread.fault_address, ++ pr_info("[ECR ]: 0x%08lx\n[EFA ]: 0x%08lx\n[BLINK ]: %pS\n[ERET ]: %pS\n", ++ regs->event, current->thread.fault_address, + (void *)regs->blink, (void *)regs->ret); + +- if (user_mode(regs)) +- show_faulting_vma(regs->ret, buf); /* faulting code, not data */ +- + pr_info("[STAT32]: 0x%08lx", regs->status32); + + #define STS_BIT(r, bit) r->status32 & STATUS_##bit##_MASK ? #bit" " : "" +@@ -233,6 +260,8 @@ void show_kernel_fault_diag(const char *str, struct pt_regs *regs, + /* Show fault description */ + pr_info("\n%s\n", str); + ++ show_exception_mesg(regs); ++ + /* Caller and Callee regs */ + show_regs(regs); + +diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c +index db6913094be3..026d662a7668 100644 +--- a/arch/arc/mm/fault.c ++++ b/arch/arc/mm/fault.c +@@ -203,6 +203,10 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) + info.si_errno = 0; + /* info.si_code has been set above */ + info.si_addr = (void __user *)address; ++ ++ if (unhandled_signal(tsk, info.si_signo)) ++ show_exception_mesg(regs); ++ + force_sig_info(SIGSEGV, &info, tsk); + return; + } +@@ -242,5 +246,9 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) + info.si_errno = 0; + info.si_code = BUS_ADRERR; + info.si_addr = (void __user *)address; ++ ++ if (unhandled_signal(tsk, info.si_signo)) ++ show_exception_mesg(regs); ++ + force_sig_info(SIGBUS, &info, tsk); + } +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2002-ARC-split-show_faulting_vma-for-logic-and-representa.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2002-ARC-split-show_faulting_vma-for-logic-and-representa.patch new file mode 100644 index 00000000..2d52b8cd --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2002-ARC-split-show_faulting_vma-for-logic-and-representa.patch @@ -0,0 +1,114 @@ +From c45e8efab681ecac3b2235aff9afa4be2a95dd58 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Thu, 15 Nov 2018 13:07:13 +0300 +Subject: [PATCH 2/3] ARC: split show_faulting_vma for logic and representation + parts + +In preparation for introduncing SmaRT support for ARC split +show_faulting_vma() for logic and representation parts to be +able to use logic part in SmaRT code. + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + arch/arc/include/asm/bug.h | 9 +++++++++ + arch/arc/kernel/troubleshoot.c | 43 ++++++++++++++++++++++++++++++------------ + 2 files changed, 40 insertions(+), 12 deletions(-) + +diff --git a/arch/arc/include/asm/bug.h b/arch/arc/include/asm/bug.h +index b68f7f82f2d8..064391646d38 100644 +--- a/arch/arc/include/asm/bug.h ++++ b/arch/arc/include/asm/bug.h +@@ -15,6 +15,15 @@ + + struct task_struct; + ++struct faulting_vma_info { ++ char *file_path; ++ unsigned long offset; ++ unsigned long vm_start; ++ unsigned long vm_end; ++}; ++ ++int get_faulting_vma_info(unsigned long address, char *buf, int buflen, ++ struct faulting_vma_info *fvma); + void show_regs(struct pt_regs *regs); + void show_exception_mesg(struct pt_regs *regs); + void show_stacktrace(struct task_struct *tsk, struct pt_regs *regs); +diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c +index fdfba1942a06..00efcdfde0ee 100644 +--- a/arch/arc/kernel/troubleshoot.c ++++ b/arch/arc/kernel/troubleshoot.c +@@ -80,11 +80,14 @@ static void print_task_path_n_nm(struct task_struct *tsk, char *buf) + pr_info("Path: %s\n", !IS_ERR(path_nm) ? path_nm : "?"); + } + +-static void show_faulting_vma(unsigned long address, char *buf) ++int get_faulting_vma_info(unsigned long address, char *buf, int buflen, ++ struct faulting_vma_info *fvma) + { + struct vm_area_struct *vma; +- char *nm = buf; + struct mm_struct *active_mm = current->active_mm; ++ int ret = -ENOENT; ++ ++ fvma->file_path = "?"; + + /* can't use print_vma_addr() yet as it doesn't check for + * non-inclusive vma +@@ -97,19 +100,35 @@ static void show_faulting_vma(unsigned long address, char *buf) + */ + if (vma && (vma->vm_start <= address)) { + if (vma->vm_file) { +- nm = file_path(vma->vm_file, buf, PAGE_SIZE - 1); +- if (IS_ERR(nm)) +- nm = "?"; ++ fvma->file_path = file_path(vma->vm_file, buf, buflen); ++ if (IS_ERR(fvma->file_path)) ++ fvma->file_path = "?"; + } + +- pr_cont("[off 0x%lx in %s, VMA: %08lx:%08lx] ", +- vma->vm_start < TASK_UNMAPPED_BASE ? +- address : address - vma->vm_start, +- nm, vma->vm_start, vma->vm_end); +- } else +- pr_cont("[No matching VMA found] "); ++ fvma->vm_start = vma->vm_start; ++ fvma->vm_end = vma->vm_end; ++ fvma->offset = vma->vm_start < TASK_UNMAPPED_BASE ? ++ address : address - vma->vm_start; ++ ++ ret = 0; ++ } + + up_read(&active_mm->mmap_sem); ++ ++ return ret; ++} ++ ++static void show_faulting_vma(unsigned long address, char *buf, int buflen) ++{ ++ struct faulting_vma_info fvma; ++ int ret; ++ ++ ret = get_faulting_vma_info(address, buf, buflen, &fvma); ++ if (ret) ++ pr_cont("[No matching VMA found] "); ++ else ++ pr_cont("[off 0x%lx in %s, VMA: %08lx:%08lx] ", fvma.offset, ++ fvma.file_path, fvma.vm_start, fvma.vm_end); + } + + static void show_ecr_verbose(struct pt_regs *regs) +@@ -175,7 +194,7 @@ static inline void show_exception_mesg_u(struct pt_regs *regs) + + buf = (char *)__get_free_page(GFP_NOWAIT); + if (buf) { +- show_faulting_vma(regs->ret, buf); ++ show_faulting_vma(regs->ret, buf, PAGE_SIZE - 1); + free_page((unsigned long)buf); + } + +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2003-ARC-ARCv2-Introduce-SmaRT-support.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2003-ARC-ARCv2-Introduce-SmaRT-support.patch new file mode 100644 index 00000000..f2cb4b46 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/2003-ARC-ARCv2-Introduce-SmaRT-support.patch @@ -0,0 +1,619 @@ +From 90983b06fae708e957f1d8a5d207ae48f4d266a4 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Thu, 15 Nov 2018 13:07:14 +0300 +Subject: [PATCH 3/3] ARC: ARCv2: Introduce SmaRT support + +Add compile-time 'ARC_SMART_TRACE' option for enabling SmaRT support. + +Small real time trace (SmaRT) is an optional on-chip debug hardware +component that captures instruction-trace history. It stores the +address of the most recent non-sequential instructions executed into +internal buffer. + +Usually we use MetaWare debugger to enable SmaRT and display trace +information. + +This patch allows to display the decoded content of SmaRT buffer +without MetaWare debugger. It is done by extending ordinary exception +message with decoded SmaRT instruction-trace history. + +In some cases it's really useful as it allows to show pre-exception +instruction-trace which was not tainted by exception handler code, +printk code, etc... + +Nevertheless this option has negative performance impact due to +implementation as we dump SmaRT buffer content into external memory +buffer in the beginning of every slowpath exception handler code. +We choose this implementation as a compromise between performance +impact and SmaRT buffer tainting. +Although the performance impact is not really significant (according +to lmbench) we leave this option disabled by default. + +Here is th examples of user-space and kernel-space fault messages with +'ARC_SMART_TRACE' option enabled: + +User-space exception: +----------------------->8------------------------- +Exception: u_hell[101]: at 0x103a2 [off 0x103a2 in /root/u_hell, VMA: 00010000:00012000] + ECR: 0x00050200 => Invalid Write @ 0x00000000 by insn @ 0x000103a2 +SmaRT [64 entries] (U=userspace, E=exception/interrupt, R=repeated, V=valid): + dst[ 0]: ___V 0x90231dd8: smart_populate+0x0/0xcc + src[ 0]: 0x9023230c: do_page_fault+0x2c/0x2ec + dst[ 1]: ___V 0x902322e0: do_page_fault+0x0/0x2ec + src[ 1]: 0x9022e064: EV_TLBProtV+0xec/0xf0 + dst[ 2]: ___V 0x9022df78: EV_TLBProtV+0x0/0xf0 + src[ 2]: 0x9023315c: do_slow_path_pf+0x10/0x14 + dst[ 3]: ___V 0x9023314c: do_slow_path_pf+0x0/0x14 + src[ 3]: 0x902330e8: EV_TLBMissD+0x80/0xe0 + dst[ 4]: _E_V 0x90233068: EV_TLBMissD+0x0/0xe0 + src[ 4]: 0x000103a2: off 0x103a2 in /root/u_hell (VMA: 00010000:00012000) + dst[ 5]: U__V 0x00010398: off 0x10398 in /root/u_hell + src[ 5]: 0x2004f238: off 0x43238 in /lib/libuClibc-1.0.18.so (VMA: 2000c000:20072000) + dst[ 6]: U__V 0x2004f214: off 0x43214 in /lib/libuClibc-1.0.18.so + src[ 6]: 0x20049a82: off 0x3da82 in /lib/libuClibc-1.0.18.so +...[snip]... +----------------------->8------------------------- + +Kernel-space exception: +----------------------->8------------------------- +Exception: at dw_mci_probe+0x12/0x954: + ECR: 0x00050100 => Invalid Read @ 0x00000004 by insn @ 0x905e7ca2 +SmaRT [64 entries] (U=userspace, E=exception/interrupt, R=repeated, V=valid): + dst[ 0]: ___V 0x90231dd8: smart_populate+0x0/0xcc + src[ 0]: 0x9023230c: do_page_fault+0x2c/0x2ec + dst[ 1]: ___V 0x902322e0: do_page_fault+0x0/0x2ec + src[ 1]: 0x9022e064: EV_TLBProtV+0xec/0xf0 + dst[ 2]: ___V 0x9022e00c: EV_TLBProtV+0x94/0xf0 + src[ 2]: 0x9022e004: EV_TLBProtV+0x8c/0xf0 + dst[ 3]: ___V 0x9022df78: EV_TLBProtV+0x0/0xf0 + src[ 3]: 0x9023315c: do_slow_path_pf+0x10/0x14 + dst[ 4]: ___V 0x9023314c: do_slow_path_pf+0x0/0x14 + src[ 4]: 0x902330a4: EV_TLBMissD+0x3c/0xe0 + dst[ 5]: _E_V 0x90233068: EV_TLBMissD+0x0/0xe0 + src[ 5]: 0x905e7ca2: dw_mci_probe+0x12/0x954 + dst[ 6]: ___V 0x905e7c90: dw_mci_probe+0x0/0x954 + src[ 6]: 0x905ea61c: dw_mci_pltfm_probe+0xa8/0xc4 + dst[ 7]: ___V 0x905ea5f4: dw_mci_pltfm_probe+0x80/0xc4 + src[ 7]: 0x904a9b2e: devm_ioremap_resource+0x4e/0x12c + dst[ 8]: ___V 0x904a9b1e: devm_ioremap_resource+0x3e/0x12c + src[ 8]: 0x904a9bc0: devm_ioremap_resource+0xe0/0x12c + dst[ 9]: ___V 0x904a9bbc: devm_ioremap_resource+0xdc/0x12c + src[ 9]: 0x9075a3b0: _raw_spin_unlock_irqrestore+0x28/0x2c +...[snip]... +----------------------->8------------------------- + +The number of SmaRT buffer lines to record/display can be configured +in runtime via '/proc/sys/smart_trace/entries' procfs option. +SmaRT can be suspended in runtime by setting +'/proc/sys/smart_trace/entries' to 0. + +The code was written in such a way to achieve minimal interference +with MetaWare SmaRT support: + * SmaRT is disabled only for small amount of time in smart_populate + function. + * SmaRT enable/disable via MetaWare doesn't lead to any serious + issues (SmaRT disable via MetaWare may lead to last SmaRT + record to be invalid, though) + +NOTE: +this RFC has prerequisite: + http://patchwork.ozlabs.org/patch/986820/ + +Changes RFCv1->RFCv2: + * Changes in output display: + * Only print VMAs if they are changed. + * Split entry for two lines and print source and destination + addresses on different lines. + * Add procfs options to configure/suspend SmaRT in runtime. + * Add SmaRT version check. Limit supported SmaRT versions to >= 0x03. + * Move all SmaRT related stuff to smart.h and smart.c + * Other minor changes. + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + arch/arc/Kconfig | 8 ++ + arch/arc/include/asm/arcregs.h | 23 ++++ + arch/arc/include/asm/smart.h | 22 ++++ + arch/arc/kernel/Makefile | 1 + + arch/arc/kernel/setup.c | 4 + + arch/arc/kernel/smart.c | 274 +++++++++++++++++++++++++++++++++++++++++ + arch/arc/kernel/traps.c | 8 ++ + arch/arc/kernel/troubleshoot.c | 3 + + arch/arc/mm/fault.c | 2 + + 9 files changed, 345 insertions(+) + create mode 100644 arch/arc/include/asm/smart.h + create mode 100644 arch/arc/kernel/smart.c + +diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig +index a045f3086047..c482fd5d865f 100644 +--- a/arch/arc/Kconfig ++++ b/arch/arc/Kconfig +@@ -528,6 +528,14 @@ config ARC_DBG_TLB_PARANOIA + bool "Paranoia Checks in Low Level TLB Handlers" + default n + ++config ARC_SMART_TRACE ++ bool "Enable SmaRT real time trace on-chip debug HW" ++ depends on ISA_ARCV2 ++ help ++ Enable SmaRT (small real time trace) on-chip debug hardware component ++ that captures instruction-trace history if exists. This trace will be ++ printed if any unexpected exception is occurred. ++ + endif + + config ARC_UBOOT_SUPPORT +diff --git a/arch/arc/include/asm/arcregs.h b/arch/arc/include/asm/arcregs.h +index 49bfbd879caa..cd8228d82872 100644 +--- a/arch/arc/include/asm/arcregs.h ++++ b/arch/arc/include/asm/arcregs.h +@@ -118,6 +118,20 @@ + #define ARC_AUX_DPFP_2H 0x304 + #define ARC_AUX_DPFP_STAT 0x305 + ++/* SmaRT registers */ ++#define ARC_AUX_SMART_CONTROL 0x700 ++#define SMART_CTL_EN BIT(0) ++#define SMART_CTL_DATA_POS 8 ++#define SMART_CTL_DATA_SRC (0 << SMART_CTL_DATA_POS) ++#define SMART_CTL_DATA_DST (1 << SMART_CTL_DATA_POS) ++#define SMART_CTL_DATA_FLAG (2 << SMART_CTL_DATA_POS) ++#define SMART_CTL_IDX_POS 10 ++#define ARC_AUX_SMART_DATA 0x701 ++#define SMART_FLAG_U BIT(8) ++#define SMART_FLAG_E BIT(9) ++#define SMART_FLAG_R BIT(10) ++#define SMART_FLAG_V BIT(31) ++ + #ifndef __ASSEMBLY__ + + #include <soc/arc/aux.h> +@@ -199,6 +213,15 @@ struct bcr_dccm_arcv2 { + #endif + }; + ++/* SmaRT BCR encoding starting from version 0x03 */ ++struct bcr_smart_v3p { ++#ifdef CONFIG_CPU_BIG_ENDIAN ++ unsigned int stack_size:22, pad:2, ver:8; ++#else ++ unsigned int ver:8, pad:2, stack_size:22; ++#endif ++}; ++ + /* ARCompact: Both SP and DP FPU BCRs have same format */ + struct bcr_fp_arcompact { + #ifdef CONFIG_CPU_BIG_ENDIAN +diff --git a/arch/arc/include/asm/smart.h b/arch/arc/include/asm/smart.h +new file mode 100644 +index 000000000000..3c2302bc8443 +--- /dev/null ++++ b/arch/arc/include/asm/smart.h +@@ -0,0 +1,22 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++// ++// Copyright (C) 2018 Synopsys ++// Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> ++ ++#ifndef __ASM_SMART_H ++#define __ASM_SMART_H ++ ++void smart_populate(void); ++void smart_show(void); ++void smart_init(void); ++ ++#ifdef CONFIG_ARC_SMART_TRACE ++#define POPULATE_SMART() smart_populate() ++ ++#else ++#define POPULATE_SMART() ++void smart_show(void) {} ++void smart_init(void) {} ++ ++#endif /* CONFIG_ARC_SMART_TRACE */ ++#endif /* __ASM_SMART_H */ +diff --git a/arch/arc/kernel/Makefile b/arch/arc/kernel/Makefile +index 2dc5f4296d44..4e58a5f90c78 100644 +--- a/arch/arc/kernel/Makefile ++++ b/arch/arc/kernel/Makefile +@@ -22,6 +22,7 @@ obj-$(CONFIG_ARC_EMUL_UNALIGNED) += unaligned.o + obj-$(CONFIG_KGDB) += kgdb.o + obj-$(CONFIG_ARC_METAWARE_HLINK) += arc_hostlink.o + obj-$(CONFIG_PERF_EVENTS) += perf_event.o ++obj-$(CONFIG_ARC_SMART_TRACE) += smart.o + + obj-$(CONFIG_ARC_FPU_SAVE_RESTORE) += fpu.o + CFLAGS_fpu.o += -mdpfp +diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c +index b2cae79a25d7..c5641e6ffc2a 100644 +--- a/arch/arc/kernel/setup.c ++++ b/arch/arc/kernel/setup.c +@@ -28,6 +28,7 @@ + #include <asm/unwind.h> + #include <asm/mach_desc.h> + #include <asm/smp.h> ++#include <asm/smart.h> + + #define FIX_PTR(x) __asm__ __volatile__(";" : "+r"(x)) + +@@ -447,6 +448,9 @@ void setup_processor(void) + pr_info("%s", arc_platform_smp_cpuinfo()); + + arc_chk_core_config(); ++ ++ if (IS_ENABLED(CONFIG_ARC_SMART_TRACE)) ++ smart_init(); + } + + static inline int is_kernel(unsigned long addr) +diff --git a/arch/arc/kernel/smart.c b/arch/arc/kernel/smart.c +new file mode 100644 +index 000000000000..fb1e88c7b99b +--- /dev/null ++++ b/arch/arc/kernel/smart.c +@@ -0,0 +1,274 @@ ++// SPDX-License-Identifier: GPL-2.0+ ++// ++// Synopsys SmaRT (Small Real time Trace) handling code ++// ++// Copyright (C) 2018 Synopsys ++// Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> ++ ++#include <linux/init.h> ++#include <linux/gfp.h> ++#include <linux/sysctl.h> ++#include <linux/percpu.h> ++#include <linux/percpu-defs.h> ++ ++#include <asm/arcregs.h> ++#include <asm/smart.h> ++#include <asm/bug.h> ++ ++#define SMART_BUFF_MAX 4096 /* HW limit */ ++ ++struct smart_buff { ++ u32 entries_collected; ++ u32 src[SMART_BUFF_MAX]; ++ u32 dst[SMART_BUFF_MAX]; ++ u32 flags[SMART_BUFF_MAX]; ++}; ++ ++DEFINE_PER_CPU(struct smart_buff, smart_buff_log); ++ ++struct smart_fvma_info { ++ bool vma_found; ++ struct faulting_vma_info fvma; ++}; ++ ++/* 0 value of 'smart_entries_use' will be treated as 'disable' */ ++static unsigned int smart_entries_use = SMART_BUFF_MAX; ++ ++/* limits for smart_trace/entries */ ++static unsigned int smart_entries_min; ++static unsigned int smart_entries_max = SMART_BUFF_MAX; ++ ++static struct ctl_table ctl_smart_vars[] = { ++ { ++ .procname = "entries", ++ .data = &smart_entries_use, ++ .maxlen = sizeof(smart_entries_use), ++ .mode = 0644, ++ .proc_handler = proc_douintvec_minmax, ++ .extra1 = &smart_entries_min, ++ .extra2 = &smart_entries_max, ++ }, {} ++}; ++ ++static struct ctl_table ctl_smart[] = { ++ { ++ .procname = "arc_smart_trace", ++ .mode = 0555, ++ .child = ctl_smart_vars, ++ }, {} ++}; ++ ++static inline bool smart_exist(void) ++{ ++ struct bcr_smart_v3p bcr; ++ ++ READ_BCR(ARC_REG_SMART_BCR, bcr); ++ ++ /* ++ * SmaRT versions < 0x03 have different registers encoding and small ++ * buffer size. We don't support them. ++ */ ++ return bcr.ver >= 0x03; ++} ++ ++static inline u32 smart_stack_size(void) ++{ ++ struct bcr_smart_v3p bcr; ++ ++ READ_BCR(ARC_REG_SMART_BCR, bcr); ++ return bcr.stack_size; ++} ++ ++static inline void smart_enable(void) ++{ ++ write_aux_reg(ARC_AUX_SMART_CONTROL, SMART_CTL_EN); ++} ++ ++static inline void smart_disable(void) ++{ ++ write_aux_reg(ARC_AUX_SMART_CONTROL, 0); ++} ++ ++static bool smart_fvma_changed(struct smart_fvma_info *curr, ++ struct smart_fvma_info *prev) ++{ ++ if (!prev->vma_found) ++ return true; ++ ++ return prev->fvma.vm_start != curr->fvma.vm_start || ++ prev->fvma.vm_end != curr->fvma.vm_end; ++} ++ ++static void smart_show_fault_vma(unsigned long address, char *buf, int buflen, ++ struct smart_fvma_info *curr, ++ struct smart_fvma_info *prev) ++{ ++ int ret; ++ ++ ret = get_faulting_vma_info(address, buf, buflen, &curr->fvma); ++ curr->vma_found = !ret; ++ if (ret) { ++ pr_cont(": No matching VMA found\n"); ++ return; ++ } ++ ++ if (smart_fvma_changed(curr, prev)) ++ pr_cont(": off 0x%lx in %s (VMA: %08lx:%08lx)\n", ++ curr->fvma.offset, curr->fvma.file_path, ++ curr->fvma.vm_start, curr->fvma.vm_end); ++ else ++ pr_cont(": off 0x%lx in %s\n", ++ curr->fvma.offset, curr->fvma.file_path); ++} ++ ++/* Show decoded userspace/kernelspace address */ ++static void smart_show_address(u32 address, char *buf, int buflen, ++ struct smart_fvma_info *curr, ++ struct smart_fvma_info *prev) ++{ ++ curr->vma_found = false; ++ ++ if (address < 0x80000000) ++ smart_show_fault_vma(address, buf, buflen, curr, prev); ++ else ++ pr_cont(": %pS\n", (void *)address); ++} ++ ++static void smart_show_dst(int i, u32 flags, u32 dst, char *buf, int buflen, ++ struct smart_fvma_info *curr, ++ struct smart_fvma_info *prev) ++{ ++ pr_info(" dst[%4d]: %s%s%s%s %#010x", i, ++ flags & SMART_FLAG_U ? "U" : "_", ++ flags & SMART_FLAG_E ? "E" : "_", ++ flags & SMART_FLAG_R ? "R" : "_", ++ flags & SMART_FLAG_V ? "V" : "_", ++ dst); ++ ++ smart_show_address(dst, buf, buflen, curr, prev); ++} ++ ++static void smart_show_src(int i, u32 src, char *buf, int buflen, ++ struct smart_fvma_info *curr, ++ struct smart_fvma_info *prev) ++{ ++ pr_info(" src[%4d]: %#010x", i, src); ++ ++ smart_show_address(src, buf, buflen, curr, prev); ++} ++ ++static void smart_show_entries(struct smart_buff *smart_buff, u32 stack_use, ++ char *buf, int buflen) ++{ ++ struct smart_fvma_info fvma_0, fvma_1; ++ int i; ++ ++ /* ++ * fvma_1 will be treat as 'previous' vma while we process first entry. ++ * We had to errase is to show first VMAs unconditionally. ++ */ ++ fvma_1.vma_found = false; ++ ++ for (i = 0; i < stack_use; i++) { ++ smart_show_dst(i, smart_buff->flags[i], smart_buff->dst[i], ++ buf, buflen, &fvma_0, &fvma_1); ++ ++ smart_show_src(i, smart_buff->src[i], buf, buflen, ++ &fvma_1, &fvma_0); ++ } ++} ++ ++/* Should be called per cpu */ ++void __init smart_init(void) ++{ ++ struct smart_buff *smart_buff_cpu; ++ ++ /* ++ * We don't check 'smart_entries_use' value here as sysctl is not ++ * available yet, so smart_entries_use' value is unchanged. ++ */ ++ if (!smart_exist()) ++ return; ++ ++ smart_buff_cpu = this_cpu_ptr(&smart_buff_log); ++ smart_buff_cpu->entries_collected = 0; ++ ++ smart_enable(); ++} ++ ++void smart_show(void) ++{ ++ struct smart_buff *smart_buff_cpu; ++ u32 stack_size, stack_use; ++ char *buf; ++ ++ if (!smart_exist() || !smart_entries_use) ++ return; ++ ++ smart_buff_cpu = this_cpu_ptr(&smart_buff_log); ++ ++ stack_size = smart_stack_size(); ++ stack_use = min_t(u32, stack_size, smart_buff_cpu->entries_collected); ++ pr_info("SmaRT [%d entries] (U=userspace, E=exception/interrupt, R=repeated, V=valid):\n", ++ stack_use); ++ ++ buf = (char *)__get_free_page(GFP_NOWAIT); ++ if (!buf) ++ return; ++ ++ smart_show_entries(smart_buff_cpu, stack_use, buf, PAGE_SIZE - 1); ++ ++ free_page((unsigned long)buf); ++} ++ ++#define SMART_CTL_IDX(i) ((i) << SMART_CTL_IDX_POS) ++#define SMART_CTL_GET_SRC(i) (SMART_CTL_IDX(i) | SMART_CTL_DATA_SRC) ++#define SMART_CTL_GET_DST(i) (SMART_CTL_IDX(i) | SMART_CTL_DATA_DST) ++#define SMART_CTL_GET_FLG(i) (SMART_CTL_IDX(i) | SMART_CTL_DATA_FLAG) ++ ++void smart_populate(void) ++{ ++ struct smart_buff *smart_buff_cpu; ++ u32 stack_size, stack_use; ++ int i; ++ ++ if (!smart_exist() || !smart_entries_use) { ++ smart_buff_cpu = this_cpu_ptr(&smart_buff_log); ++ smart_buff_cpu->entries_collected = 0; ++ ++ return; ++ } ++ ++ /* ++ * The ARC_AUX_SMART_DATA register may be read safely only when the ++ * processor is in the state in which SmaRT is not collecting data. ++ */ ++ smart_disable(); ++ ++ smart_buff_cpu = this_cpu_ptr(&smart_buff_log); ++ ++ stack_size = smart_stack_size(); ++ stack_use = min_t(u32, stack_size, smart_entries_use); ++ smart_buff_cpu->entries_collected = stack_use; ++ ++ for (i = 0; i < stack_use; i++) { ++ write_aux_reg(ARC_AUX_SMART_CONTROL, SMART_CTL_GET_SRC(i)); ++ smart_buff_cpu->src[i] = read_aux_reg(ARC_AUX_SMART_DATA); ++ write_aux_reg(ARC_AUX_SMART_CONTROL, SMART_CTL_GET_DST(i)); ++ smart_buff_cpu->dst[i] = read_aux_reg(ARC_AUX_SMART_DATA); ++ write_aux_reg(ARC_AUX_SMART_CONTROL, SMART_CTL_GET_FLG(i)); ++ smart_buff_cpu->flags[i] = read_aux_reg(ARC_AUX_SMART_DATA); ++ } ++ ++ smart_enable(); ++} ++ ++static int __init smart_register_sysctl(void) ++{ ++ if (!register_sysctl_table(ctl_smart)) ++ pr_err("Unable to register SmaRT sysctl\n"); ++ ++ return 0; ++} ++ ++arch_initcall(smart_register_sysctl); +diff --git a/arch/arc/kernel/traps.c b/arch/arc/kernel/traps.c +index e66fd40296b3..7bd94f8183d1 100644 +--- a/arch/arc/kernel/traps.c ++++ b/arch/arc/kernel/traps.c +@@ -22,6 +22,7 @@ + #include <asm/setup.h> + #include <asm/unaligned.h> + #include <asm/kprobes.h> ++#include <asm/smart.h> + + void __init trap_init(void) + { +@@ -70,6 +71,7 @@ int name(unsigned long address, struct pt_regs *regs) \ + { \ + siginfo_t info; \ + \ ++ POPULATE_SMART(); \ + clear_siginfo(&info); \ + info.si_signo = signr; \ + info.si_errno = 0; \ +@@ -96,6 +98,8 @@ DO_ERROR_INFO(SIGSEGV, "gcc generated __builtin_trap", do_trap5_error, 0) + int do_misaligned_access(unsigned long address, struct pt_regs *regs, + struct callee_regs *cregs) + { ++ POPULATE_SMART(); ++ + /* If emulation not enabled, or failed, kill the task */ + if (misaligned_fixup(address, regs, cregs) != 0) + return do_misaligned_error(address, regs); +@@ -128,6 +132,8 @@ void do_non_swi_trap(unsigned long address, struct pt_regs *regs) + { + unsigned int param = regs->ecr_param; + ++ POPULATE_SMART(); ++ + switch (param) { + case 1: + trap_is_brkpt(address, regs); +@@ -159,6 +165,8 @@ void do_insterror_or_kprobe(unsigned long address, struct pt_regs *regs) + { + int rc; + ++ POPULATE_SMART(); ++ + /* Check if this exception is caused by kprobes */ + rc = notify_die(DIE_IERR, "kprobe_ierr", regs, address, 0, SIGILL); + if (rc == NOTIFY_STOP) +diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c +index 00efcdfde0ee..1410fdfcdfef 100644 +--- a/arch/arc/kernel/troubleshoot.c ++++ b/arch/arc/kernel/troubleshoot.c +@@ -17,6 +17,7 @@ + + #include <asm/arcregs.h> + #include <asm/irqflags.h> ++#include <asm/smart.h> + + /* + * Common routine to print scratch regs (r0-r12) or callee regs (r13-r25) +@@ -218,6 +219,8 @@ void show_exception_mesg(struct pt_regs *regs) + show_exception_mesg_u(regs); + else + show_exception_mesg_k(regs); ++ ++ smart_show(); + } + + void show_regs(struct pt_regs *regs) +diff --git a/arch/arc/mm/fault.c b/arch/arc/mm/fault.c +index 026d662a7668..296a19bcf9a0 100644 +--- a/arch/arc/mm/fault.c ++++ b/arch/arc/mm/fault.c +@@ -18,6 +18,7 @@ + #include <linux/mm_types.h> + #include <asm/pgalloc.h> + #include <asm/mmu.h> ++#include <asm/smart.h> + + /* + * kernel virtual address is required to implement vmalloc/pkmap/fixmap +@@ -72,6 +73,7 @@ void do_page_fault(unsigned long address, struct pt_regs *regs) + int write = regs->ecr_cause & ECR_C_PROTV_STORE; /* ST/EX */ + unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE; + ++ POPULATE_SMART(); + clear_siginfo(&info); + + /* +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/3003-Experimental-ARC-increase-memory-to-1.5GB.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/3003-Experimental-ARC-increase-memory-to-1.5GB.patch new file mode 100644 index 00000000..40692a7d --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/3003-Experimental-ARC-increase-memory-to-1.5GB.patch @@ -0,0 +1,40 @@ +From e213de42b29c286f2c49d96c824ab362c5669e30 Mon Sep 17 00:00:00 2001 +From: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +Date: Tue, 4 Dec 2018 17:52:52 +0300 +Subject: [PATCH] Experimental: ARC: increase memory to 1.5GB + +Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +--- + arch/arc/boot/dts/hsdk.dts | 2 +- + arch/arc/mm/cache.c | 3 ++- + 2 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/arch/arc/boot/dts/hsdk.dts b/arch/arc/boot/dts/hsdk.dts +index 7a0da3c89c72..014f6bab1cf5 100644 +--- a/arch/arc/boot/dts/hsdk.dts ++++ b/arch/arc/boot/dts/hsdk.dts +@@ -234,6 +234,6 @@ + #address-cells = <1>; + #size-cells = <1>; + device_type = "memory"; +- reg = <0x80000000 0x40000000>; /* 1 GiB */ ++ reg = <0x80000000 0x60000000>; /* 1 GiB */ + }; + }; +diff --git a/arch/arc/mm/cache.c b/arch/arc/mm/cache.c +index f2701c13a66b..cedb7cefe08a 100644 +--- a/arch/arc/mm/cache.c ++++ b/arch/arc/mm/cache.c +@@ -1169,7 +1169,8 @@ noinline void __init arc_ioc_setup(void) + * TBD: fix for PGU + 1GB of low mem + * TBD: fix for PAE + */ +- mem_sz = arc_get_mem_sz(); ++ //mem_sz = arc_get_mem_sz(); ++ mem_sz = 0x80000000; + + if (!is_power_of_2(mem_sz) || mem_sz < 4096) + panic("IOC Aperture size must be power of 2 larger than 4KB"); +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4001-HSDK-add-highmem-zone.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4001-HSDK-add-highmem-zone.patch new file mode 100644 index 00000000..222d6f2c --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4001-HSDK-add-highmem-zone.patch @@ -0,0 +1,49 @@ +From 19c3eddda384b1280f664aed96aec1d88213aa9e Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Tue, 18 Dec 2018 13:37:04 +0300 +Subject: [PATCH 1/3] HSDK: add highmem zone + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + arch/arc/boot/dts/hsdk.dts | 11 +++++------ + 1 file changed, 5 insertions(+), 6 deletions(-) + +diff --git a/arch/arc/boot/dts/hsdk.dts b/arch/arc/boot/dts/hsdk.dts +index 43f17b51ee89..ff860c537fd1 100644 +--- a/arch/arc/boot/dts/hsdk.dts ++++ b/arch/arc/boot/dts/hsdk.dts +@@ -18,8 +18,8 @@ + model = "snps,hsdk"; + compatible = "snps,hsdk"; + +- #address-cells = <1>; +- #size-cells = <1>; ++ #address-cells = <2>; ++ #size-cells = <2>; + + chosen { + bootargs = "earlycon=uart8250,mmio32,0xf0005000,115200n8 console=ttyS0,115200n8 debug print-fatal-signals=1"; +@@ -105,7 +105,7 @@ + #size-cells = <1>; + interrupt-parent = <&idu_intc>; + +- ranges = <0x00000000 0xf0000000 0x10000000>; ++ ranges = <0x00000000 0x0 0xf0000000 0x10000000>; + + cgu_rst: reset-controller@8a0 { + compatible = "snps,hsdk-reset"; +@@ -240,9 +240,8 @@ + }; + + memory@80000000 { +- #address-cells = <1>; +- #size-cells = <1>; + device_type = "memory"; +- reg = <0x80000000 0x40000000>; /* 1 GiB */ ++ reg = <0x0 0x80000000 0x0 0x40000000 /* 1 GiB lowmem */ ++ 0x1 0x00000000 0x0 0x80000000>; /* 2 GiB highmem */ + }; + }; +-- +2.14.5 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4002-ARC-temporary-disable-IOC.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4002-ARC-temporary-disable-IOC.patch new file mode 100644 index 00000000..5968f62f --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4002-ARC-temporary-disable-IOC.patch @@ -0,0 +1,26 @@ +From 2233d3418d91ab4df3ef29f8e03a77b2737cd286 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Tue, 18 Dec 2018 13:37:35 +0300 +Subject: [PATCH 2/3] ARC: temporary disable IOC + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + arch/arc/mm/cache.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arch/arc/mm/cache.c b/arch/arc/mm/cache.c +index cf9619d4efb4..b4e2e1e2b50e 100644 +--- a/arch/arc/mm/cache.c ++++ b/arch/arc/mm/cache.c +@@ -27,7 +27,7 @@ + + static int l2_line_sz; + static int ioc_exists; +-int slc_enable = 1, ioc_enable = 1; ++int slc_enable = 1, ioc_enable = 0; + unsigned long perip_base = ARC_UNCACHED_ADDR_SPACE; /* legacy value for boot */ + unsigned long perip_end = 0xFFFFFFFF; /* legacy value */ + +-- +2.14.5 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4003-ARC-cache-ops-add-assertions.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4003-ARC-cache-ops-add-assertions.patch new file mode 100644 index 00000000..3c208e39 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/4003-ARC-cache-ops-add-assertions.patch @@ -0,0 +1,42 @@ +From cfe4c0df27e2426ccad67250319283bb68bec6e9 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Tue, 18 Dec 2018 14:02:27 +0300 +Subject: [PATCH 3/3] ARC: cache-ops: add assertions + +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +--- + arch/arc/mm/cache.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/arch/arc/mm/cache.c b/arch/arc/mm/cache.c +index b4e2e1e2b50e..2d6ee1962dbc 100644 +--- a/arch/arc/mm/cache.c ++++ b/arch/arc/mm/cache.c +@@ -880,18 +880,24 @@ static void __dma_cache_wback_l1(phys_addr_t start, unsigned long sz) + */ + static void __dma_cache_wback_inv_slc(phys_addr_t start, unsigned long sz) + { ++ BUG_ON(upper_32_bits(start)); ++ + __dc_line_op_k(start, sz, OP_FLUSH_N_INV); + slc_op(start, sz, OP_FLUSH_N_INV); + } + + static void __dma_cache_inv_slc(phys_addr_t start, unsigned long sz) + { ++ BUG_ON(upper_32_bits(start)); ++ + __dc_line_op_k(start, sz, OP_INV); + slc_op(start, sz, OP_INV); + } + + static void __dma_cache_wback_slc(phys_addr_t start, unsigned long sz) + { ++ BUG_ON(upper_32_bits(start)); ++ + __dc_line_op_k(start, sz, OP_FLUSH); + slc_op(start, sz, OP_FLUSH); + } +-- +2.14.5 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/5001-Enable-FBDEV_DRM-emulation-for-HSDK.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/5001-Enable-FBDEV_DRM-emulation-for-HSDK.patch new file mode 100644 index 00000000..d558853e --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/5001-Enable-FBDEV_DRM-emulation-for-HSDK.patch @@ -0,0 +1,22 @@ +From 578237a2fcb6c687b8123f8be0fd4bd3ce8a719b Mon Sep 17 00:00:00 2001 +From: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +Date: Wed, 26 Dec 2018 15:08:35 +0300 +Subject: [PATCH] Enable FBDEV_DRM emulation for HSDK + +Signed-off-by: Evgeniy Didin <Evgeniy.Didin@synopsys.com> +--- + arch/arc/configs/hsdk_defconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig +index 8b37b4b01ffd..c369637686fc 100644 +--- a/arch/arc/configs/hsdk_defconfig ++++ b/arch/arc/configs/hsdk_defconfig +@@ -1169,3 +1169,4 @@ CONFIG_CRC_CCITT=y + CONFIG_CRC_ITU_T=y + CONFIG_LIBCRC32C=y + CONFIG_PM=y ++CONFIG_DRM_FBDEV_EMULATION=y +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/6001-ARC-adjust-memblock_reserve-of-kernel-memory.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/6001-ARC-adjust-memblock_reserve-of-kernel-memory.patch new file mode 100644 index 00000000..35a8c24b --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/6001-ARC-adjust-memblock_reserve-of-kernel-memory.patch @@ -0,0 +1,46 @@ +From 91e89cad429a9d65330a41a5cb7039671f1d6204 Mon Sep 17 00:00:00 2001 +From: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Date: Wed, 19 Dec 2018 19:16:16 +0300 +Subject: [PATCH] ARC: adjust memblock_reserve of kernel memory + +In setup_arch_memory we reserve the memory area wherein the kernel +is located. Current implementation may reserve more memory than +it actually required in case of CONFIG_LINUX_LINK_BASE is not +equal to CONFIG_LINUX_RAM_BASE. This happens because we calculate +start of the reserved region relatively to the CONFIG_LINUX_RAM_BASE +and end of the region relatively to the CONFIG_LINUX_RAM_BASE. + +For example in case of HSDK board we wasted 256MiB of physical memory: +------------------->8------------------------------ +Memory: 770416K/1048576K available (5496K kernel code, + 240K rwdata, 1064K rodata, 2200K init, 275K bss, + 278160K reserved, 0K cma-reserved) +------------------->8------------------------------ + +Fix that. + +Fixes: 9ed68785f7f ("ARC: mm: Decouple RAM base address from kernel link addr") +Cc: stable@vger.kernel.org #4.14+ +Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> +Signed-off-by: Vineet Gupta <vgupta@synopsys.com> +--- + arch/arc/mm/init.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/arch/arc/mm/init.c b/arch/arc/mm/init.c +index ba14506..f890b2f 100644 +--- a/arch/arc/mm/init.c ++++ b/arch/arc/mm/init.c +@@ -138,7 +138,8 @@ void __init setup_arch_memory(void) + */ + + memblock_add_node(low_mem_start, low_mem_sz, 0); +- memblock_reserve(low_mem_start, __pa(_end) - low_mem_start); ++ memblock_reserve(CONFIG_LINUX_LINK_BASE, ++ __pa(_end) - CONFIG_LINUX_LINK_BASE); + + #ifdef CONFIG_BLK_DEV_INITRD + if (initrd_start) +-- +1.8.3.1 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/8000-ARCv2-support-manual-regfile-save-on-interrupts.patch b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/8000-ARCv2-support-manual-regfile-save-on-interrupts.patch new file mode 100644 index 00000000..79c65725 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc/8000-ARCv2-support-manual-regfile-save-on-interrupts.patch @@ -0,0 +1,157 @@ +From 7e9246a982a6ae6a2b19f3d3f1a437a6417577fb Mon Sep 17 00:00:00 2001 +From: Vineet Gupta <vgupta@synopsys.com> +Date: Wed, 6 Jun 2018 10:20:37 -0700 +Subject: [PATCH] ARCv2: support manual regfile save on interrupts + +There's a hardware bug which affects the HSDK platform, triggered by +micro-ops for auto-saving regfile on taken interrupt. The workaround is +to inhibit autosave. + +Signed-off-by: Vineet Gupta <vgupta@synopsys.com> +--- + arch/arc/Kconfig | 8 ++++++ + arch/arc/include/asm/entry-arcv2.h | 54 ++++++++++++++++++++++++++++++++++++++ + arch/arc/kernel/entry-arcv2.S | 4 ++- + arch/arc/kernel/intc-arcv2.c | 2 ++ + arch/arc/plat-hsdk/Kconfig | 1 + + 5 files changed, 68 insertions(+), 1 deletion(-) + +diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig +index 376366a7db81..7215f52b3413 100644 +--- a/arch/arc/Kconfig ++++ b/arch/arc/Kconfig +@@ -407,6 +407,14 @@ config ARC_HAS_ACCL_REGS + (also referred to as r58:r59). These can also be used by gcc as GPR so + kernel needs to save/restore per process + ++config ARC_IRQ_NO_AUTOSAVE ++ bool "Disable hardware autosave regfile on interrupts" ++ default n ++ help ++ On HS cores, taken interrupt auto saves the regfile on stack. ++ This is programmable and can be optionally disabled in which case ++ software INTERRUPT_PROLOGUE/EPILGUE do the needed work ++ + endif # ISA_ARCV2 + + endmenu # "ARC CPU Configuration" +diff --git a/arch/arc/include/asm/entry-arcv2.h b/arch/arc/include/asm/entry-arcv2.h +index 309f4e6721b3..225e7df2d8ed 100644 +--- a/arch/arc/include/asm/entry-arcv2.h ++++ b/arch/arc/include/asm/entry-arcv2.h +@@ -17,6 +17,33 @@ + ; + ; Now manually save: r12, sp, fp, gp, r25 + ++#ifdef CONFIG_ARC_IRQ_NO_AUTOSAVE ++.ifnc \called_from, exception ++ st.as r9, [sp, -10] ; save r9 in it's final stack slot ++ sub sp, sp, 12 ; skip JLI, LDI, EI ++ ++ PUSH lp_count ++ PUSHAX lp_start ++ PUSHAX lp_end ++ PUSH blink ++ ++ PUSH r11 ++ PUSH r10 ++ ++ sub sp, sp, 4 ; skip r9 ++ ++ PUSH r8 ++ PUSH r7 ++ PUSH r6 ++ PUSH r5 ++ PUSH r4 ++ PUSH r3 ++ PUSH r2 ++ PUSH r1 ++ PUSH r0 ++.endif ++#endif ++ + #ifdef CONFIG_ARC_HAS_ACCL_REGS + PUSH r59 + PUSH r58 +@@ -86,6 +113,33 @@ + POP r59 + #endif + ++#ifdef CONFIG_ARC_IRQ_NO_AUTOSAVE ++.ifnc \called_from, exception ++ POP r0 ++ POP r1 ++ POP r2 ++ POP r3 ++ POP r4 ++ POP r5 ++ POP r6 ++ POP r7 ++ POP r8 ++ POP r9 ++ POP r10 ++ POP r11 ++ ++ POP blink ++ POPAX lp_end ++ POPAX lp_start ++ ++ POP r9 ++ mov lp_count, r9 ++ ++ add sp, sp, 12 ; skip JLI, LDI, EI ++ ld.as r9, [sp, -10] ; reload r9 which got clobbered ++.endif ++#endif ++ + .endm + + /*------------------------------------------------------------------------*/ +diff --git a/arch/arc/kernel/entry-arcv2.S b/arch/arc/kernel/entry-arcv2.S +index cc558a25b8fa..562089d62d9d 100644 +--- a/arch/arc/kernel/entry-arcv2.S ++++ b/arch/arc/kernel/entry-arcv2.S +@@ -209,7 +209,9 @@ restore_regs: + ;####### Return from Intr ####### + + debug_marker_l1: +- bbit1.nt r0, STATUS_DE_BIT, .Lintr_ret_to_delay_slot ++ ; bbit1.nt r0, STATUS_DE_BIT, .Lintr_ret_to_delay_slot ++ btst r0, STATUS_DE_BIT ; Z flag set if bit clear ++ bnz .Lintr_ret_to_delay_slot ; branch if STATUS_DE_BIT set + + .Lisr_ret_fast_path: + ; Handle special case #1: (Entry via Exception, Return via IRQ) +diff --git a/arch/arc/kernel/intc-arcv2.c b/arch/arc/kernel/intc-arcv2.c +index 067ea362fb3e..cf18b3e5a934 100644 +--- a/arch/arc/kernel/intc-arcv2.c ++++ b/arch/arc/kernel/intc-arcv2.c +@@ -49,11 +49,13 @@ void arc_init_IRQ(void) + + *(unsigned int *)&ictrl = 0; + ++#ifndef CONFIG_ARC_IRQ_NO_AUTOSAVE + ictrl.save_nr_gpr_pairs = 6; /* r0 to r11 (r12 saved manually) */ + ictrl.save_blink = 1; + ictrl.save_lp_regs = 1; /* LP_COUNT, LP_START, LP_END */ + ictrl.save_u_to_u = 0; /* user ctxt saved on kernel stack */ + ictrl.save_idx_regs = 1; /* JLI, LDI, EI */ ++#endif + + WRITE_AUX(AUX_IRQ_CTRL, ictrl); + +diff --git a/arch/arc/plat-hsdk/Kconfig b/arch/arc/plat-hsdk/Kconfig +index f25c085b9874..23e00216e5a5 100644 +--- a/arch/arc/plat-hsdk/Kconfig ++++ b/arch/arc/plat-hsdk/Kconfig +@@ -9,6 +9,7 @@ menuconfig ARC_SOC_HSDK + bool "ARC HS Development Kit SOC" + depends on ISA_ARCV2 + select ARC_HAS_ACCL_REGS ++ select ARC_IRQ_NO_AUTOSAVE + select CLK_HSDK + select RESET_HSDK + select HAVE_PCI +-- +2.16.2 + diff --git a/bsp/meta-synopsys/recipes-kernel/linux/linux-arc_4.19.9.bb b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc_4.19.9.bb new file mode 100644 index 00000000..6897b041 --- /dev/null +++ b/bsp/meta-synopsys/recipes-kernel/linux/linux-arc_4.19.9.bb @@ -0,0 +1,4 @@ +require linux-arc.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=bbea815ee2795b2f4230826c0c6b8814" +SRC_URI[sha256sum] = "fc116cc6829c73944215d3b3ac0fc368dde9e8235b456744afffde001269dbf2" |